diff --git a/ci4/.env b/ci4/.env index 8ff726fd..ed0e9172 100644 --- a/ci4/.env +++ b/ci4/.env @@ -146,3 +146,4 @@ themef.path = 'themes/frontend/tivo/' api.return = 'json' demo.mode = false purchase.code = '1234' + diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 4c206ee7..89d2a0be 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -44,6 +44,7 @@ $routes->post('api/user/', 'Api::user/add'); $routes->put('api/user/(:segment)', 'Api::user/edit/$1'); $routes->delete('api/user/(:segment)', 'Api::user/delete/$1'); + /* * -------------------------------------------------------------------- * Route Definitions @@ -174,12 +175,23 @@ $routes->group('papelesimpresion', ['namespace' => 'App\Controllers\Configuracio $routes->put('(:num)/update', 'Papelesimpresion::update/$1', ['as' => 'ajaxUpdatePapelImpresion']); $routes->post('edit/(:num)', 'Papelesimpresion::edit/$1', ['as' => 'updatePapelImpresion']); $routes->post('datatable', 'Papelesimpresion::datatable', ['as' => 'dataTableOfPapelesImpresion']); - $routes->post('datatablePG', 'Papelesimpresion::datatablePG', ['as' => 'dataTableOfPapelesImpresionPG']); + $routes->post('datatable_editor', 'Papelesimpresion::datatable_editor', ['as' => 'dataTableEditor']); + $routes->post('fetch_single_data', 'Papelesimpresion::fetch_single_data', ['as' => 'fetchTipologia']); $routes->post('allmenuitems', 'Papelesimpresion::allItemsSelect', ['as' => 'select2ItemsOfPapelesImpresion']); $routes->post('menuitems', 'Papelesimpresion::menuItems', ['as' => 'menuItemsOfPapelesImpresion']); }); $routes->resource('papelesimpresion', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Papelesimpresion', 'except' => 'show,new,create,update']); +$routes->group('papelimpresiontipologias', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) { + $routes->get('add', 'Papelimpresiontipologias::add', ['as' => 'newPapelImpresionTipologia']); + $routes->post('add', 'Papelimpresiontipologias::add', ['as' => 'createPapelImpresionTipologia']); + $routes->get('edit/(:num)', 'Papelimpresiontipologias::edit/$1', ['as' => 'editPapelImpresionTipologia']); + $routes->post('edit/(:num)', 'Papelimpresiontipologias::edit/$1', ['as' => 'updatePapelImpresionTipologia']); + $routes->get('delete/(:num)', 'Papelimpresiontipologias::delete/$1', ['as' => 'deletePapelImpresionTipologia']); +}); + + + $routes->group('profile', ['namespace' => 'App\Controllers'], function ($routes) { $routes->get('', 'Profile::index', ['as' => 'profileList']); $routes->get('index', 'Profile::index', ['as' => 'profileIndex']); diff --git a/ci4/app/Controllers/Configuracion/Papelesimpresion.php b/ci4/app/Controllers/Configuracion/Papelesimpresion.php index 02e7e920..e8bfdbea 100644 --- a/ci4/app/Controllers/Configuracion/Papelesimpresion.php +++ b/ci4/app/Controllers/Configuracion/Papelesimpresion.php @@ -5,14 +5,35 @@ namespace App\Controllers\Configuracion; use App\Controllers\GoBaseResourceController; +// DataTables PHP library + + +// Alias Editor classes so they are easy to use +use + DataTables\Editor, + DataTables\Database, + DataTables\Editor\Field, + DataTables\Editor\Format, + DataTables\Editor\Mjoin, + DataTables\Editor\Options, + DataTables\Editor\Upload, + DataTables\Editor\Validate, + DataTables\Editor\ValidateOptions; + + use App\Models\Collection; + + use App\Entities\Configuracion\PapelImpresion; use App\Models\Configuracion\PapelImpresionModel; use App\Models\Configuracion\PapelGenericoModel; +use App\Models\Configuracion\PapelImpresionTipologiaModel; + + class Papelesimpresion extends \App\Controllers\GoBaseResourceController { @@ -30,8 +51,6 @@ class Papelesimpresion extends \App\Controllers\GoBaseResourceController protected $indexRoute = 'papelImpresionList'; - - public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger) { $this->viewData['pageTitle'] = lang('PapelImpresion.moduleTitle'); @@ -42,6 +61,8 @@ class Papelesimpresion extends \App\Controllers\GoBaseResourceController // Se indica el flag para los ficheros borrados $this->delete_flag = 1; + $this->tpModel = new PapelImpresionTipologiaModel(); + parent::initController($request, $response, $logger); } @@ -230,6 +251,7 @@ class Papelesimpresion extends \App\Controllers\GoBaseResourceController $this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('PapelImpresion.moduleTitle') . ' ' . lang('Basic.global.edit3'); + $this->viewData['usingServerSideDataTable'] = true; //JJO return $this->displayForm(__METHOD__, $id); } // end function edit(...) @@ -239,72 +261,118 @@ class Papelesimpresion extends \App\Controllers\GoBaseResourceController public function datatable() { if ($this->request->isAJAX()) { + $reqData = $this->request->getPost(); if (!isset($reqData['draw']) || !isset($reqData['columns'])) { $errstr = 'No data available in response to this specific request.'; $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); return $response; } - $id_PG = $reqData['id_PG'] ?? -1; - $start = $reqData['start'] ?? 0; - $length = $reqData['length'] ?? 5; - $search = $reqData['search']['value']; - $requestedOrder = $reqData['order']['0']['column'] ?? 1; - $order = PapelImpresionModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1]; - $dir = $reqData['order']['0']['dir'] ?? 'asc'; - if($id_PG<0){ + if(isset($reqData['id_PI'])){ - $resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + $id_PI = $reqData['id_PI'] ?? -1; + + if($id_PI>=0){ - return $this->respond(Collection::datatable( - $resourceData, - $this->model->getResource()->countAllResults(), - $this->model->getResource($search)->countAllResults() - )); - }else{ - $resourceData = $this->model->getResource($search, $id_PG)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + $data = $this->tpModel->findTipologiasForPapelImpresion($id_PI); + $resourceData = $data->get()->getResultObject(); - return $this->respond(Collection::datatable( - $resourceData, - $this->model->getResource("", $id_PG)->countAllResults(), - $this->model->getResource($search, $id_PG)->countAllResults() - )); + return $this->respond(Collection::datatable( + $resourceData, + $this->tpModel->findTipologiasForPapelImpresion($id_PI)->countAllResults(), + $this->tpModel->findTipologiasForPapelImpresion($id_PI)->countAllResults() + )); + } + } + else{ + + $id_PG = $reqData['id_PG'] ?? -1; + $start = $reqData['start'] ?? 0; + $length = $reqData['length'] ?? 5; + $search = $reqData['search']['value']; + $requestedOrder = $reqData['order']['0']['column'] ?? 1; + $order = PapelImpresionModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1]; + $dir = $reqData['order']['0']['dir'] ?? 'asc'; + + if($id_PG<0){ + + $resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + + return $this->respond(Collection::datatable( + $resourceData, + $this->model->getResource()->countAllResults(), + $this->model->getResource($search)->countAllResults() + )); + }else{ + $resourceData = $this->model->getResource($search, $id_PG)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + + return $this->respond(Collection::datatable( + $resourceData, + $this->model->getResource("", $id_PG)->countAllResults(), + $this->model->getResource($search, $id_PG)->countAllResults() + )); + } } } else { return $this->failUnauthorized('Invalid request', 403); } } - public function datatablePG() - { + + public function datatable_editor(){ + /*if ($this->request->isAJAX()) { + + $reqData = $this->request->getPost(); + $rows_id = array_keys($reqData['data']); + echo '
' ;
+            var_dump($reqData['data'][$keys[0]])  ;
+            echo '
'; + }*/ + if ($this->request->isAJAX()) { - $reqData = $this->request->getPost(); - if (!isset($reqData['draw']) || !isset($reqData['columns'])) { - $errstr = 'No data available in response to this specific request.'; - $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); - return $response; - } - $generico_id = $reqData['id'] ?? null; - $start = $reqData['start'] ?? 0; - $length = $reqData['length'] ?? 5; - $search = $reqData['search']['value']; - $requestedOrder = $reqData['order']['0']['column'] ?? 1; - $order = PapelImpresionModel::SORTABLE2[$requestedOrder >= 0 ? $requestedOrder : 1]; - $dir = $reqData['order']['0']['dir'] ?? 'asc'; - $resourceData = $this->model->getResource($search, $generico_id)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + $sql_details = array( + "type" => "Mysql", // Database type: "Mysql", "Postgres", "Sqlserver", "Sqlite" or "Oracle" + "user" => "sk_jjo", // Database user name + "pass" => "61tv&G1Zf^XY", // Database password + "host" => "localhost", // Database host + "port" => "", // Database connection port (can be left empty for default) + "db" => "sk_jjo", // Database name + "dsn" => "", // PHP DSN extra information. Set as `charset=utf8mb4` if you are using MySQL + "pdoAttr" => array() // PHP PDO attributes array. See the PHP documentation for all options + ); - return $this->respond(Collection::datatable( - $resourceData, - $this->model->getResource("", $generico_id)->countAllResults(), - $this->model->getResource($search, $generico_id)->countAllResults() - )); - } else { - return $this->failUnauthorized('Invalid request', 403); + $db = new Database( array( + "type" => "Mysql", + "pdo" => $sql_details + ) ); + + + // Build our Editor instance and process the data coming from _POST + Editor::inst( $db, 'lg_papel_impresion_tipologias' ) + ->fields( + Field::inst( 'tipo' ), + //->validator( Validate::notEmpty( ValidateOptions::inst()) ),//->validator( Validate::values( array('negro', 'color', 'bicolor') ) ), + Field::inst( 'negro' ), + //->validator( Validate::notEmpty( ValidateOptions::inst()) ), + Field::inst( 'cyan' ), + //->validator( Validate::notEmpty( ValidateOptions::inst()) ), + Field::inst( 'magenta' ), + //->validator( Validate::notEmpty( ValidateOptions::inst()) ), + Field::inst( 'amarillo' ), + //->validator( Validate::notEmpty( ValidateOptions::inst()) ), + Field::inst( 'gota_negro' ), + //->validator( Validate::notEmpty( ValidateOptions::inst()) ), + Field::inst( 'got_color' ), + //->validator( Validate::notEmpty( ValidateOptions::inst()) ), + ) + ->process( $_POST ) + ->json(); } } + public function allItemsSelect() { if ($this->request->isAJAX()) { @@ -355,6 +423,24 @@ class Papelesimpresion extends \App\Controllers\GoBaseResourceController } } + function fetch_single_data() + { + if ($this->request->isAJAX()) { + $reqData = $this->request->getPost(); + if(isset($reqData['id'])) + { + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + + $data = [ + 'data' => $this->tpModel->getResource($reqData['id'])->get()->getResultObject()[0], + $csrfTokenName => $newTokenHash + ]; + echo json_encode($data); + } + } + } + protected function getPapelGenericoListItems($selId = null) { diff --git a/ci4/app/Controllers/Configuracion/Papelimpresiontipologias.php b/ci4/app/Controllers/Configuracion/Papelimpresiontipologias.php new file mode 100644 index 00000000..22d151d6 --- /dev/null +++ b/ci4/app/Controllers/Configuracion/Papelimpresiontipologias.php @@ -0,0 +1,326 @@ +viewData['pageTitle'] = lang('ImpresionTipologias.moduleTitle'); + $this->viewData['usingSweetAlert'] = true; + parent::initController($request, $response, $logger); + } + + + public function index() { + + $viewData = [ + 'currentModule' => static::$controllerSlug, + 'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('ImpresionTipologias.papelImpresionTipologia')]), + 'papelImpresionTipologia' => new PapelImpresionTipologia(), + 'usingServerSideDataTable' => true, + + ]; + + $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class + + //return view(static::$viewPath.'viewPapelImpresionTipologiaList', $viewData); + } + + + public function add() { + + + + $requestMethod = $this->request->getMethod(); + + if ($requestMethod === 'post') : + + $nullIfEmpty = true; // !(phpversion() >= '8.1'); + + $postData = $this->request->getPost(); + + $sanitizedData = $this->sanitized($postData, $nullIfEmpty); + + $noException = true; + $successfulResult = false; // for now + + if ($this->canValidate()) : + try { + $successfulResult = $this->model->skipValidation(true)->save($sanitizedData); + } catch (\Exception $e) { + + $noException = false; + $this->dealWithException($e); + } + else: + $this->viewData['errorMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('ImpresionTipologias.papelImpresionTipologia'))]); + $this->session->setFlashdata('formErrors', $this->model->errors()); + endif; + + $thenRedirect = false; // Change this to false if you want your user to stay on the form after submission + + if ($noException && $successfulResult) : + + $id = $this->model->db->insertID(); + + $message = lang('Basic.global.saveSuccess', [mb_strtolower(lang('ImpresionTipologias.papelImpresionTipologia'))]).'.'; + $message .= anchor( "papelimpresiontipologias/{$id}/edit" , lang('Basic.global.continueEditing').'?'); + $message = ucfirst(str_replace("'", "\'", $message)); + + if ($thenRedirect) : + if (!empty($this->indexRoute)) : + return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message); + else: + return $this->redirect2listView('sweet-success', $message); + endif; + else: + //$this->session->setFlashData('sweet-success', $message); + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $output = array( + 'success' => 'yes', + $csrfTokenName => $newTokenHash + ); + return json_encode($output); + endif; + + endif; // $noException && $successfulResult + + endif; // ($requestMethod === 'post') + + $this->viewData['papelImpresionTipologia'] = isset($sanitizedData) ? new PapelImpresionTipologia($sanitizedData) : new PapelImpresionTipologia(); + $this->viewData['papelImpresionList'] = $this->getPapelImpresionListItems($papelImpresionTipologia->papel_impresion_id ?? null); + $this->viewData['tipoList'] = $this->getTipoOptions(); + + $this->viewData['formAction'] = route_to('createPapelImpresionTipologia'); + + $this->viewData['boxTitle'] = lang('Basic.global.addNew').' '.lang('ImpresionTipologias.moduleTitle').' '.lang('Basic.global.addNewSuffix'); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $output = array( + 'success' => 'no', + $csrfTokenName => $newTokenHash + ); + return json_encode($output); + //return $this->displayForm(__METHOD__); + } // end function add() + + public function edit($requestedId = null) { + + if ($requestedId == null) : + return $this->redirect2listView(); + endif; + $id = filter_var($requestedId, FILTER_SANITIZE_URL); + $papelImpresionTipologia = $this->model->find($id); + + if ($papelImpresionTipologia == false) : + $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('ImpresionTipologias.papelImpresionTipologia')), $id]); + return $this->redirect2listView('sweet-error', $message); + endif; + + $requestMethod = $this->request->getMethod(); + + if ($requestMethod === 'post') : + + $nullIfEmpty = true; // !(phpversion() >= '8.1'); + + $postData = $this->request->getPost(); + + $sanitizedData = $this->sanitized($postData, $nullIfEmpty); + + $noException = true; + $successfulResult = false; // for now + + if ($this->canValidate()) : + try { + + $successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData); + } catch (\Exception $e) { + $noException = false; + $this->dealWithException($e); + } + else: + $this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('ImpresionTipologias.papelImpresionTipologia'))]); + $this->session->setFlashdata('formErrors', $this->model->errors()); + + endif; + + $papelImpresionTipologia->fill($sanitizedData); + + $thenRedirect = false; + + if ($noException && $successfulResult) : + $id = $papelImpresionTipologia->id ?? $id; + $message = lang('Basic.global.updateSuccess', [mb_strtolower(lang('ImpresionTipologias.papelImpresionTipologia'))]).'.'; + $message .= anchor( "papelimpresiontipologias/{$id}/edit" , lang('Basic.global.continueEditing').'?'); + $message = ucfirst(str_replace("'", "\'", $message)); + + if ($thenRedirect) : + if (!empty($this->indexRoute)) : + return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message); + else: + return $this->redirect2listView('sweet-success', $message); + endif; + else: + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $output = array( + 'success' => 'yes', + $csrfTokenName => $newTokenHash + ); + + return json_encode($output); + //$this->session->setFlashData('sweet-success', $message); + endif; + + endif; // $noException && $successfulResult + endif; // ($requestMethod === 'post') + + $this->viewData['papelImpresionTipologia'] = $papelImpresionTipologia; + $this->viewData['papelImpresionList'] = $this->getPapelImpresionListItems($papelImpresionTipologia->papel_impresion_id ?? null); + $this->viewData['tipoList'] = $this->getTipoOptions(); + + $this->viewData['formAction'] = route_to('updatePapelImpresionTipologia', $id); + + $this->viewData['boxTitle'] = lang('Basic.global.edit2').' '.lang('ImpresionTipologias.moduleTitle').' '.lang('Basic.global.edit3'); + + //return $this->displayForm(__METHOD__, $id); + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $output = array( + 'success' => 'no', + $csrfTokenName => $newTokenHash + ); + return json_encode($output); + } // end function edit(...) + + + + public function datatable() { + if ($this->request->isAJAX()) { + $reqData = $this->request->getPost(); + if (!isset($reqData['draw']) || !isset($reqData['columns']) ) { + $errstr = 'No data available in response to this specific request.'; + $response = $this->respond(Collection::datatable( [], 0, 0, $errstr ), 400, $errstr); + return $response; + } + $start = $reqData['start'] ?? 0; + $length = $reqData['length'] ?? 5; + $search = $reqData['search']['value']; + $requestedOrder = $reqData['order']['0']['column'] ?? 1; + $order = PapelImpresionTipologiaModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 1]; + $dir = $reqData['order']['0']['dir'] ?? 'asc'; + + $resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + + return $this->respond(Collection::datatable( + $resourceData, + $this->model->getResource()->countAllResults(), + $this->model->getResource($search)->countAllResults() + )); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function allItemsSelect() { + if ($this->request->isAJAX()) { + $onlyActiveOnes = true; + $reqVal = $this->request->getPost('val') ?? 'id'; + $menu = $this->model->getAllForMenu($reqVal.', papel_impresion_id', 'papel_impresion_id', $onlyActiveOnes, false); + $nonItem = new \stdClass; + $nonItem->id = ''; + $nonItem->papel_impresion_id = '- '.lang('Basic.global.None').' -'; + array_unshift($menu , $nonItem); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'menu' => $menu, + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function menuItems() { + if ($this->request->isAJAX()) { + $searchStr = goSanitize($this->request->getPost('searchTerm'))[0]; + $reqId = goSanitize($this->request->getPost('id'))[0]; + $reqText = goSanitize($this->request->getPost('text'))[0]; + $onlyActiveOnes = false; + $columns2select = [$reqId ?? 'id', $reqText ?? 'papel_impresion_id']; + $onlyActiveOnes = false; + $menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr); + $nonItem = new \stdClass; + $nonItem->id = ''; + $nonItem->text = '- '.lang('Basic.global.None').' -'; + array_unshift($menu , $nonItem); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'menu' => $menu, + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + + protected function getPapelImpresionListItems($selId = null) { + $data = [''=>lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelImpresions.papelImpresion'))])]; + if (!empty($selId)) : + $papelImpresionModel = model('App\Models\Configuracion\PapelImpresionModel'); + + $selOption = $papelImpresionModel->where('id', $selId)->findColumn('id'); + if (!empty($selOption)) : + $data[$selId] = $selOption[0]; + endif; + endif; + return $data; + } + + + protected function getTipoOptions() { + $tipoOptions = [ + '' => lang('Basic.global.pleaseSelect'), + 'negro' => 'negro', + 'color' => 'color', + 'bicolor' => 'bicolor', + ]; + return $tipoOptions; + } + + +} diff --git a/ci4/app/Entities/Configuracion/PapelImpresionTipologia.php b/ci4/app/Entities/Configuracion/PapelImpresionTipologia.php new file mode 100644 index 00000000..c6f2cb16 --- /dev/null +++ b/ci4/app/Entities/Configuracion/PapelImpresionTipologia.php @@ -0,0 +1,28 @@ + null, + "papel_impresion_id" => null, + "tipo" => null, + "negro" => 0.0, + "cyan" => 0.0, + "magenta" => 0.0, + "amarillo" => 0.0, + "gota_negro" => 0.0, + "gota_color" => 0.0, + ]; + protected $casts = [ + "papel_impresion_id" => "int", + "negro" => "float", + "cyan" => "float", + "magenta" => "float", + "amarillo" => "float", + "gota_negro" => "float", + "gota_color" => "float", + ]; +} diff --git a/ci4/app/Filters/LoginAuthFilter.php b/ci4/app/Filters/LoginAuthFilter.php index 36c9b871..705ecd49 100644 --- a/ci4/app/Filters/LoginAuthFilter.php +++ b/ci4/app/Filters/LoginAuthFilter.php @@ -177,7 +177,9 @@ class LoginAuthFilter implements FilterInterface 'allItemsSelect', 'menuItems', 'datatable', - 'datatablePG', + 'datatable_editor', + 'fetch_single_data', + 'datatableTintas', 'collect', 'cast', ]; diff --git a/ci4/app/Language/en/Basic.php b/ci4/app/Language/en/Basic.php index af3e20a9..d7e6aea9 100644 --- a/ci4/app/Language/en/Basic.php +++ b/ci4/app/Language/en/Basic.php @@ -79,10 +79,10 @@ return [ 'sureToDeleteTitle' => 'Are you sure you want to delete this {0}?', 'text' => 'This action cannot be undone.', 'title' => 'Are you sure?', - + 'maxRowsReached' => 'No more lines can be added.' ], - - + 'ok' => 'Ok', + 'wait' => 'Wait', ], diff --git a/ci4/app/Language/en/ImpresionTipologias.php b/ci4/app/Language/en/ImpresionTipologias.php new file mode 100644 index 00000000..44c14d23 --- /dev/null +++ b/ci4/app/Language/en/ImpresionTipologias.php @@ -0,0 +1,63 @@ + 'Yellow', + 'bicolor' => 'Bicolor', + 'color' => 'Color', + 'cyan' => 'Cyan', + 'gotaColor' => 'Color Drop', + 'gotaNegro' => 'Black Drop', + 'magenta' => 'Magenta', + 'negro' => 'Black', + 'tipo' => 'Type', + 'errorTipo' => 'Typology type already exists', + 'validation' => [ + 'amarillo' => [ + 'decimal' => 'The {field} field must contain a decimal number.', + 'required' => 'The {field} field is required.', + + ], + + 'cyan' => [ + 'decimal' => 'The {field} field must contain a decimal number.', + 'required' => 'The {field} field is required.', + + ], + + 'gota_color' => [ + 'decimal' => 'The {field} field must contain a decimal number.', + 'required' => 'The {field} field is required.', + + ], + + 'gota_negro' => [ + 'decimal' => 'The {field} field must contain a decimal number.', + 'required' => 'The {field} field is required.', + + ], + + 'magenta' => [ + 'decimal' => 'The {field} field must contain a decimal number.', + 'required' => 'The {field} field is required.', + + ], + + 'negro' => [ + 'decimal' => 'The {field} field must contain a decimal number.', + 'required' => 'The {field} field is required.', + + ], + + 'tipo' => [ + 'in_list' => 'The {field} field must be one of: {param}.', + 'required' => 'The {field} field is required.', + + ], + + + ], + + +]; \ No newline at end of file diff --git a/ci4/app/Language/en/PapelGenerico.php b/ci4/app/Language/en/PapelGenerico.php index 1570fdba..2b3585da 100644 --- a/ci4/app/Language/en/PapelGenerico.php +++ b/ci4/app/Language/en/PapelGenerico.php @@ -18,8 +18,6 @@ return [ 'showInClient' => 'Show in Client', 'updatedAt' => 'Updated At', - 'Form_acordion_title' => 'Print papers associated', - 'validation' => [ 'code' => [ 'max_length' => 'The {field} field cannot exceed {param} characters in length.', diff --git a/ci4/app/Language/en/PapelImpresion.php b/ci4/app/Language/en/PapelImpresion.php index baf1a64f..7cfd6d48 100644 --- a/ci4/app/Language/en/PapelImpresion.php +++ b/ci4/app/Language/en/PapelImpresion.php @@ -32,6 +32,9 @@ return [ 'rotativa' => 'Rotary', 'updatedAt' => 'Updated At', 'userUpdateId' => 'User Update ID', + + 'consumo_tintas_rotativas' => 'Rotary ink consumption', + 'validation' => [ 'espesor_update' => [ 'max_length' => 'The {field} field cannot exceed {param} characters in length.', diff --git a/ci4/app/Language/es/Basic.php b/ci4/app/Language/es/Basic.php index 30bb24db..a6d6094f 100644 --- a/ci4/app/Language/es/Basic.php +++ b/ci4/app/Language/es/Basic.php @@ -79,9 +79,11 @@ return [ 'sureToDeleteTitle' => 'Está seguro de borrar {0}?', 'text' => 'Esta acción no se puede deshacer.', 'title' => 'Está seguro?', + 'maxRowsReached' => 'No se pueden añadir más líneas.' ], - + 'ok' => 'Ok', + 'wait' => 'Espere', ], diff --git a/ci4/app/Language/es/ImpresionTipologias.php b/ci4/app/Language/es/ImpresionTipologias.php new file mode 100644 index 00000000..851b4ef9 --- /dev/null +++ b/ci4/app/Language/es/ImpresionTipologias.php @@ -0,0 +1,64 @@ + 'Amarillo', + 'bicolor' => 'Bicolor', + 'color' => 'Color', + 'cyan' => 'Cyan', + 'gotaColor' => 'Gota Color', + 'gotaNegro' => 'Gota Negro', + 'magenta' => 'Magenta', + 'moduleTitle' => 'Papel Impresion Tipologias', + 'negro' => 'Negro', + 'tipo' => 'Tipo', + 'errorTipo' => 'El tipo de tipología ya existe', + 'validation' => [ + 'amarillo' => [ + 'decimal' => 'El campo {field} debe ser un número entero.', + 'required' => 'El campo {field} es obligatorio.', + + ], + + 'cyan' => [ + 'decimal' => 'El campo {field} debe ser un número entero.', + 'required' => 'El campo {field} es obligatorio.', + + ], + + 'gota_color' => [ + 'decimal' => 'El campo {field} debe ser un número entero.', + 'required' => 'El campo {field} es obligatorio.', + + ], + + 'gota_negro' => [ + 'decimal' => 'El campo {field} debe ser un número entero.', + 'required' => 'El campo {field} es obligatorio.', + + ], + + 'magenta' => [ + 'decimal' => 'El campo {field} debe ser un número entero.', + 'required' => 'El campo {field} es obligatorio.', + + ], + + 'negro' => [ + 'decimal' => 'El campo {field} debe ser un número entero.', + 'required' => 'El campo {field} es obligatorio.', + + ], + + 'tipo' => [ + 'in_list' => 'El campo {field} debe ser uno de: {param}.', + 'required' => 'El campo {field} es obligatorio.', + + ], + + + ], + + +]; \ No newline at end of file diff --git a/ci4/app/Language/es/PapelGenerico.php b/ci4/app/Language/es/PapelGenerico.php index 785f5d5d..65381d56 100644 --- a/ci4/app/Language/es/PapelGenerico.php +++ b/ci4/app/Language/es/PapelGenerico.php @@ -18,8 +18,6 @@ return [ 'showInClient' => 'Mostrar en cliente', 'updatedAt' => 'Updated At', - 'Form_acordion_title' => 'Papeles impresion asociados', - 'validation' => [ 'code' => [ 'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.', diff --git a/ci4/app/Language/es/PapelImpresion.php b/ci4/app/Language/es/PapelImpresion.php index de4fc726..289bcff5 100644 --- a/ci4/app/Language/es/PapelImpresion.php +++ b/ci4/app/Language/es/PapelImpresion.php @@ -32,6 +32,9 @@ return [ 'rotativa' => 'Rotativa', 'updatedAt' => 'Actualizado en', 'userUpdateId' => 'ID usuario actualización', + + 'consumo_tintas_rotativas' => 'Consumo tintas rotativas', + 'validation' => [ 'espesor_update' => [ 'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.', diff --git a/ci4/app/Models/Configuracion/PapelImpresionTipologiaModel.php b/ci4/app/Models/Configuracion/PapelImpresionTipologiaModel.php new file mode 100644 index 00000000..857ac5a1 --- /dev/null +++ b/ci4/app/Models/Configuracion/PapelImpresionTipologiaModel.php @@ -0,0 +1,134 @@ + [ + "label" => "ImpresionTipologias.amarillo", + "rules" => "required|decimal", + ], + "cyan" => [ + "label" => "ImpresionTipologias.cyan", + "rules" => "required|decimal", + ], + "gota_color" => [ + "label" => "ImpresionTipologias.gotaColor", + "rules" => "required|decimal", + ], + "gota_negro" => [ + "label" => "ImpresionTipologias.gotaNegro", + "rules" => "required|decimal", + ], + "magenta" => [ + "label" => "ImpresionTipologias.magenta", + "rules" => "required|decimal", + ], + "negro" => [ + "label" => "ImpresionTipologias.negro", + "rules" => "required|decimal", + ], + "tipo" => [ + "label" => "ImpresionTipologias.tipo", + "rules" => "required|in_list[negro,color,bicolor]", + ], + ]; + + protected $validationMessages = [ + "amarillo" => [ + "decimal" => "ImpresionTipologias.validation.amarillo.decimal", + "required" => "ImpresionTipologias.validation.amarillo.required", + ], + "cyan" => [ + "decimal" => "ImpresionTipologias.validation.cyan.decimal", + "required" => "ImpresionTipologias.validation.cyan.required", + ], + "gota_color" => [ + "decimal" => "ImpresionTipologias.validation.gota_color.decimal", + "required" => "ImpresionTipologias.validation.gota_color.required", + ], + "gota_negro" => [ + "decimal" => "ImpresionTipologias.validation.gota_negro.decimal", + "required" => "ImpresionTipologias.validation.gota_negro.required", + ], + "magenta" => [ + "decimal" => "ImpresionTipologias.validation.magenta.decimal", + "required" => "ImpresionTipologias.validation.magenta.required", + ], + "negro" => [ + "decimal" => "ImpresionTipologias.validation.negro.decimal", + "required" => "ImpresionTipologias.validation.negro.required", + ], + "tipo" => [ + "in_list" => "ImpresionTipologias.validation.tipo.in_list", + "required" => "ImpresionTipologias.validation.tipo.required", + ], + ]; + + public function findAllWithPapelImpresion(string $selcols = "*", int $limit = null, int $offset = 0) + { + $sql = + "SELECT t1." . + $selcols . + ", t2.nombre AS papel_impresion_id FROM " . + $this->table . + " t1 LEFT JOIN lg_papel_impresion t2 ON t1.papel_impresion_id = t2.id"; + if (!is_null($limit) && intval($limit) > 0) { + $sql .= " LIMIT " . $limit; + } + + if (!is_null($offset) && intval($offset) > 0) { + $sql .= " OFFSET " . $offset; + } + + $query = $this->db->query($sql); + $result = $query->getResultObject(); + return $result; + } + + public function findTipologiasForPapelImpresion(int $papelImpresionID){ + + $builder = $this->db + ->table($this->table ) + ->select("*") + ->where("papel_impresion_id", $papelImpresionID); + + + return $builder; + + } + + public function getResource($id) + { + $builder = $this->db + ->table($this->table) + ->select("*") + ->where("id", $id); + + return $builder; + + } +} diff --git a/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionForm.php b/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionForm.php index e21b318f..f76f8707 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionForm.php +++ b/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionForm.php @@ -1,3 +1,4 @@ +include('themes/_commonPartialsBs/datatables') ?> include("themes/_commonPartialsBs/select2bs5") ?> include("themes/_commonPartialsBs/sweetalert") ?> extend('themes/backend/vuexy/main/defaultlayout') ?> @@ -16,23 +17,468 @@ + + + rotativa == true): ?> +
+ + + + + + +
+
+

+ +

+
+
+ + + + + + + + + + + + + + + + +
+
+
+
+ +
+ + + + endSection() ?> section("additionalInlineJs") ?> + var theTable; + const url = window.location.href; + const url_parts = url.split('/'); + if(url_parts[url_parts.length-2] == 'edit'){ + id = url_parts[url_parts.length-1]; + } + else{ + id = -1; + } + + const lastColNr = $('#tableOfPapelimpresiontipologias').find("tr:first th").length - 1; + const actionBtns = function(data) { + return `
+ + +
`; + }; + + theTable = $('#tableOfPapelimpresiontipologias').DataTable({ + processing: true, + serverSide: true, + autoWidth: true, + responsive: true, + scrollX: true, + lengthMenu: [ 5], + pageLength: 5, + lengthChange: false, + searching: false, + //paging: false, + info: false, + "dom": 'lrt', + stateSave: true, + language: { + url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/i18n ?>.json" + }, + ajax : $.fn.dataTable.pipeline( { + url: '', + data: { + id_PI: id, + }, + method: 'POST', + headers: {'X-Requested-With': 'XMLHttpRequest'}, + async: true, + }), + columns : [ + { 'data': 'tipo' }, + { 'data': 'negro' }, + { 'data': 'cyan' }, + { 'data': 'magenta' }, + { 'data': 'amarillo' }, + { 'data': 'gota_negro' }, + { 'data': 'gota_color' }, + { data: actionBtns} + ] + }); + + + + // Add new tipología + $('#newTipologia').on("click", function(e) { + if ($('#tableOfPapelimpresiontipologias').DataTable().data().count() >= 3){ + Swal.fire({ + title: '', + icon: 'info', + confirmButtonColor: '#3085d6', + confirmButtonText: '', + + }); + } + else{ + $('#tipologiaTipo').attr('disabled', false); + $('#tipologiaTipo').val(""); + $('#negro').val("0.00"); + $('#cyan').val("0.00"); + $('#magenta').val("0.00"); + $('#amarillo').val("0.00"); + $('#gotaNegro').val("0.00"); + $('#gotaColor').val("0.00"); + + $('#action').val('add'); + $('.modal-title').text('' + ' ' + ''); + $('#submit_button').val(''); + + + $('#tipologiaModal').modal('show'); + + $('#hidden_id').val(""); + } + + }); + + $('#rotativa').on("click",function(el){ + if(!$(this).is(':checked')){ + Swal.fire({ + title: '', + text: '', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + confirmButtonText: '', + cancelButtonText: '', + cancelButtonColor: '#d33' + }) + .then((result) => { + if (result.value) { + if($(this).is(':checked')){ + $("#accordionTipologias").show(); + }else{ + $("#accordionTipologias").hide(); + } + } + else{ + $(this).prop('checked', true) ; + + } + }); + } + else{ + $("#accordionTipologias").show(); + } + }); + + $('#tipologiaModal').on('submit', function(event){ + + event.preventDefault(); + + const tipo_values = $('#tableOfPapelimpresiontipologias').DataTable().column().data().toArray(); + + if(tipo_values.includes($('#tipologiaTipo').val()) && $('#action').val() == 'add'){ + $('#tipologiaModal').modal('hide'); + Swal.fire({ + title: '', + text: '', + icon: 'error', + showCancelButton: false, + confirmButtonColor: '#3085d6', + confirmButtonText: '', + }) + } + else + { + var formData = { + : v, + papel_impresion_id: id, + tipo: $('#tipologiaTipo').val(), + negro: $('#negro').val(), + cyan: $('#cyan').val(), + magenta: $('#magenta').val(), + amarillo: $('#amarillo').val(), + gota_negro: $('#gotaNegro').val(), + gota_color: $('#gotaColor').val() + } + + if( $('#action').val() == 'edit') + { + var url_to_go = "/configuracion/papelimpresiontipologias/edit/" + $('#hidden_id').val(); + formData['id']= $('#hidden_id').val(); + } + else + { + var url_to_go = ""; + } + + + $.ajax({ + url: url_to_go, + method:"POST", + data: formData, + dataType:"JSON", + encode: true, + + }).done((data, textStatus, jqXHR) => { + $('#tipologiaModal').modal('hide') ; + yeniden(data.); + + theTable.clearPipeline(); + theTable.draw(); + Toast.fire({ + icon: 'success', + title: data.msg ?? jqXHR.statusText, + }); + + + }).fail((jqXHR, textStatus, errorThrown) => { + $('#tipologiaModal').modal('hide') ; + + Toast.fire({ + icon: 'error', + title: jqXHR.responseJSON.messages.error, + }); + }) + } + }); + + // Activate an inline edit on click of a table cell + $(document).on('click', '.btn-edit', function(e) { + + var id = $(this).attr('data-id'); + + $.ajax({ + + url:"", + + + method:"POST", + + data:{id:id, + : v}, + + dataType:'JSON', + + success:function(response) + { + yeniden(response.); + $('#tipologiaTipo').val(response.data.tipo); + $('#negro').val(response.data.negro); + $('#cyan').val(response.data.cyan); + $('#magenta').val(response.data.magenta); + $('#amarillo').val(response.data.amarillo); + $('#gotaNegro').val(response.data.gota_negro); + $('#gotaColor').val(response.data.gota_color); + + $('#tipologiaTipo').attr('disabled', 'disabled'); + $('#action').val('edit'); + $('.modal-title').text('' + ' ' + ''); + $('#submit_button').val(''); + + + $('#tipologiaModal').modal('show'); + + $('#hidden_id').val(id); + + }, + cache: true + }) + + }); + + $(document).on('click', '.btn-delete', function(e) { + Swal.fire({ + title: '', + text: '', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + confirmButtonText: '', + cancelButtonText: '', + cancelButtonColor: '#d33' + }) + .then((result) => { + const dataId = $(this).data('id'); + const row = $(this).closest('tr'); + if (result.value) { + $.ajax({ + url: `/configuracion/papelimpresiontipologias/delete/${dataId}`, + method: 'GET', + dataType: "json", + }).done((data, textStatus, jqXHR) => { + + Toast.fire({ + icon: 'success', + title: data.msg ?? jqXHR.statusText, + }); + + + theTable.clearPipeline(); + theTable.row($(row)).invalidate().draw(); + }).fail((jqXHR, textStatus, errorThrown) => { + Toast.fire({ + icon: 'error', + title: jqXHR.responseJSON.messages.error, + }); + }) + } + }); + }); + $('#papelGenericoId').select2({ theme: 'bootstrap-5', allowClear: false, - ajax: { + ajax: { url: '', type: 'post', dataType: 'json', @@ -60,4 +506,25 @@ }); + + endSection() ?> + +section('css') ?> + +endSection() ?> + + +section('additionalExternalJs') ?> + + + + + + + + + + +endSection() ?> + diff --git a/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionList.php b/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionList.php index d9f4f8b7..4609724e 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionList.php +++ b/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionList.php @@ -45,75 +45,74 @@ section('additionalInlineJs') ?> - const lastColNr = $('#tableOfPapelesimpresion').find("tr:first th").length - 1; - const actionBtns = function(data) { - return ` -
- - -
- `; - }; - theTable = $('#tableOfPapelesimpresion').DataTable({ - processing: true, - serverSide: true, - autoWidth: true, - responsive: true, - scrollX: true, - lengthMenu: [ 5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500 ], - pageLength: 10, - lengthChange: true, - "dom": 'lfBrtip', // 'lfBrtip', // you can try different layout combinations by uncommenting one or the other - // "dom": '<"top"lf><"clear">rt<"bottom"ipB><"clear">', // remember to comment this line if you uncomment the above - "buttons": [ - 'copy', 'csv', 'excel', 'print', { - extend: 'pdfHtml5', - orientation: 'landscape', - pageSize: 'A4' - } - ], - stateSave: true, - order: [[1, 'asc']], - language: { - url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/i18n ?>.json" - }, - ajax : $.fn.dataTable.pipeline( { - url: '', - method: 'POST', - headers: {'X-Requested-With': 'XMLHttpRequest'}, - async: true, - }), - columnDefs: [ - { - orderable: false, - searchable: false, - targets: [3, 4, 5, 6, 7, lastColNr] //JJO añadidas bool cols - } - ], - columns : [ - { 'data': 'nombre' }, - { 'data': 'papel_generico_id' }, - { 'data': 'gramaje' }, - { 'data': 'bn' }, - { 'data': 'color' }, - { 'data': 'portada' }, - { 'data': 'cubierta' }, - { 'data': 'rotativa' }, - { 'data': actionBtns } - ] - }); - - - theTable.on( 'draw.dt', function () { - const boolCols = [3, 4, 5, 6, 7]; - for (let coln of boolCols) { - theTable.column(coln, { page: 'current' }).nodes().each( function (cell, i) { - cell.innerHTML = cell.innerHTML == '1' ? '' : ''; - }); + const lastColNr = $('#tableOfPapelesimpresion').find("tr:first th").length - 1; + const actionBtns = function(data) { + return ` +
+ + +
+ `; + }; + theTable = $('#tableOfPapelesimpresion').DataTable({ + processing: true, + serverSide: true, + autoWidth: true, + responsive: true, + scrollX: true, + lengthMenu: [ 5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500 ], + pageLength: 10, + lengthChange: true, + "dom": 'lfBrtip', // 'lfBrtip', // you can try different layout combinations by uncommenting one or the other + // "dom": '<"top"lf><"clear">rt<"bottom"ipB><"clear">', // remember to comment this line if you uncomment the above + "buttons": [ + 'copy', 'csv', 'excel', 'print', { + extend: 'pdfHtml5', + orientation: 'landscape', + pageSize: 'A4' } - + ], + stateSave: true, + order: [[1, 'asc']], + language: { + url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/i18n ?>.json" + }, + ajax : $.fn.dataTable.pipeline( { + url: '', + method: 'POST', + headers: {'X-Requested-With': 'XMLHttpRequest'}, + async: true, + }), + columnDefs: [ + { + orderable: false, + searchable: false, + targets: [3, 4, 5, 6, 7, lastColNr] //JJO añadidas bool cols + } + ], + columns : [ + { 'data': 'nombre' }, + { 'data': 'papel_generico_id' }, + { 'data': 'gramaje' }, + { 'data': 'bn' }, + { 'data': 'color' }, + { 'data': 'portada' }, + { 'data': 'cubierta' }, + { 'data': 'rotativa' }, + { 'data': actionBtns } + ] }); + +theTable.on( 'draw.dt', function () { + const boolCols = [3, 4, 5, 6, 7]; + for (let coln of boolCols) { + theTable.column(coln, { page: 'current' }).nodes().each( function (cell, i) { + cell.innerHTML = cell.innerHTML == '1' ? '' : ''; + }); + } +}); + $(document).on('click', '.btn-edit', function(e) { //window.location.href = `/${$(this).attr('data-id')}/edit`; window.location.href = `/configuracion/papelesimpresion/edit/${$(this).attr('data-id')}`; @@ -178,6 +177,5 @@ $(document).on('click', '.btn-delete', function(e) { - endSection() ?> diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap.css new file mode 100644 index 00000000..c7a54469 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap.css @@ -0,0 +1,702 @@ +div.DTE div.DTE_Form_Error { + color: #b11f1f; +} +div.DTE div.DTE_Form_Buttons { + display: flex; + flex-direction: row-reverse; +} +div.DTE div.DTE_Form_Buttons button { + margin-left: 0.5em; +} + +div.modal div.DTE div.DTE_Form_Error { + display: none; + float: left; + padding-top: 7px; +} + +div.DTE_Field { + position: relative; +} +div.DTE_Field div.multi-value, +div.DTE_Field div.multi-restore { + display: none; + cursor: pointer; +} +div.DTE_Field div.multi-value span, +div.DTE_Field div.multi-restore span { + display: block; + color: #666; +} +div.DTE_Field div.multi-value:hover, +div.DTE_Field div.multi-restore:hover { + background-color: #f1f1f1; +} +div.DTE_Field div.multi-restore { + margin-top: 0.5em; + font-size: 0.8em; + line-height: 1.25em; +} +div.DTE_Field:after { + display: block; + content: "."; + height: 0; + line-height: 0; + clear: both; + visibility: hidden; +} +div.DTE_Field div:not([data-dte-e=msg-error]) { + color: inherit; +} + +div.DTE_Inline { + position: relative; + display: table; + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field, +div.DTE_Inline div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field { + padding: 0; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label { + display: none; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week] { + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; +} +div.DTE_Inline div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Field input[type=week] { + margin: -6px 0; +} +div.DTE_Inline div.DTE_Field_Error, +div.DTE_Inline div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; +} +div.DTE_Inline div.DTE_Field_Error:empty, +div.DTE_Inline div.DTE_Form_Error:empty { + margin-top: 0; +} + +span.dtr-data div.DTE_Inline { + display: inline-table; +} + +div.DTE_Inline div.DTE_Field { + width: 100%; +} +div.DTE_Inline div.DTE_Field > div { + width: 100%; + padding: 0; +} +div.DTE_Inline div.DTE_Field input.form-control { + height: 30px; +} +div.DTE_Inline div.DTE_Field div.help-block { + display: none; + margin-top: 10px; + margin-bottom: 0; +} +div.DTE_Inline.DTE_Processing:after { + top: 5px; +} + +div.DTE_Field_Type_checkbox div.controls, +div.DTE_Field_Type_radio div.controls { + margin-top: 0.4em; +} +div.DTE_Field_Type_checkbox div.controls label, +div.DTE_Field_Type_radio div.controls label { + margin-left: 0.75em; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; +} + +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table { + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + position: relative; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:last-child { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > label { + padding-top: 0; + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div input { + margin: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Form_Info, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after { + color: black; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +div.DTE_Bubble.below div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; +} +div.DTE_Bubble.below div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTE_Bubble_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTE_Bubble_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTE_Bubble div.DTE_Bubble_Liner { + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + border-radius: 6px; + padding: 1em; + border: 1px solid rgba(0, 0, 0, 0.2); +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + width: 100%; + max-width: 100%; + float: none; + clear: both; + text-align: left; + flex: none; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label { + padding: 0 0 4px 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + font-size: 14px; + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + margin-top: -2px; + display: block; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-left: 1px solid rgba(0, 0, 0, 0.2); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10; + background-color: rgba(0, 0, 0, 0.05); +} + +div.DTE div.editor_upload { + padding-top: 4px; +} +div.DTE div.editor_upload div.eu_table { + display: table; + width: 100%; +} +div.DTE div.editor_upload div.row { + display: table-row; +} +div.DTE div.editor_upload div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; +} +div.DTE div.editor_upload div.cell + div.cell { + padding-left: 10px; +} +div.DTE div.editor_upload div.row + div.row div.cell { + padding-top: 10px; +} +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; +} +div.DTE div.editor_upload input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; +} +div.DTE div.editor_upload div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; +} +div.DTE div.editor_upload div.drop.over { + border: 3px dashed #111; + color: #111; +} +div.DTE div.editor_upload div.drop span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; +} +div.DTE div.editor_upload div.rendered img { + max-width: 8em; + margin: 0 auto; +} +div.DTE div.editor_upload.noDrop div.drop { + display: none; +} +div.DTE div.editor_upload.noDrop div.row.second { + display: none; +} +div.DTE div.editor_upload.noDrop div.rendered { + margin-top: 10px; +} +div.DTE div.editor_upload.noClear div.clearValue button { + display: none; +} +div.DTE div.editor_upload.multi div.cell { + display: block; + width: 100%; +} +div.DTE div.editor_upload.multi div.cell div.drop { + min-height: 0; +} +div.DTE div.editor_upload.multi div.clearValue { + display: none; +} +div.DTE div.editor_upload.multi ul { + list-style-type: none; + margin: 0; + padding: 0; +} +div.DTE div.editor_upload.multi ul li { + position: relative; + margin-top: 0.5em; +} +div.DTE div.editor_upload.multi ul li:first-child { + margin-top: 0; +} +div.DTE div.editor_upload.multi ul li img { + vertical-align: middle; +} +div.DTE div.editor_upload.multi ul li button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; +} + +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + height: auto; +} +div.DTE div.editor_upload ul li button { + padding-bottom: 8px; +} + +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 1em; + font-weight: normal; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dt-buttons { + padding-bottom: 0.5em; + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + display: none; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate { + text-align: center; +} + +@media (min-width: 1200px) { + div.DTE_Field_Type_datatable label.control-label { + text-align: left; + } +} +div.DTE div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +div.DTE.processing div.DTE_Processing_Indicator { + display: block; +} +div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator { + display: none; +} +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; +} +div.DTE.DTE_Inline div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; +} +div.DTE.DTE_Bubble div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; +} +div.DTE div.DTE_Processing_Indicator span, +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.1); + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; +} +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ""; +} +div.DTE div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +div.DTE div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +div.DTE div.DTE_Processing_Indicator:after { + left: 1em; +} +@-webkit-keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} +@keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} + +table.dataTable tbody tr.highlight { + background-color: #3399ff !important; +} +table.dataTable tbody tr.highlight, +table.dataTable tbody tr.noHighlight, +table.dataTable tbody tr.highlight td, +table.dataTable tbody tr.noHighlight td { + -webkit-transition: background-color 500ms linear; + -moz-transition: background-color 500ms linear; + -ms-transition: background-color 500ms linear; + -o-transition: background-color 500ms linear; + transition: background-color 500ms linear; +} + +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 20px; +} + +div.DTE div.DTE_Processing_Indicator { + top: 52px; + right: 12px; +} + +/* + * Namespace: DTED - DataTables Editor Display - Envelope + */ +div.DTED_Envelope_Wrapper { + position: absolute; + top: 0; + bottom: 0; + left: 50%; + height: 100%; + z-index: 11; + display: none; + overflow: hidden; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Shadow { + position: absolute; + top: -10px; + left: 10px; + right: 10px; + height: 10px; + z-index: 10; + box-shadow: 0 0 20px black; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container { + position: absolute; + top: 0; + left: 5%; + width: 90%; + border-left: 1px solid #777; + border-right: 1px solid #777; + border-bottom: 1px solid #777; + box-shadow: 3px 3px 10px #555; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: white; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Processing_Indicator { + right: 36px; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Footer { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover:after { + color: black; +} + +div.DTED_Envelope_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTED_Envelope_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTED_Envelope_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close { + top: 10px; + background: transparent; + text-shadow: none; + box-shadow: none; + border: none; + font-size: 21px; + color: black; + opacity: 0.2; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover { + opacity: 1; +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap.min.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap.min.css new file mode 100644 index 00000000..73e1f121 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap.min.css @@ -0,0 +1 @@ +div.DTE div.DTE_Form_Error{color:#b11f1f}div.DTE div.DTE_Form_Buttons{display:flex;flex-direction:row-reverse}div.DTE div.DTE_Form_Buttons button{margin-left:.5em}div.modal div.DTE div.DTE_Form_Error{display:none;float:left;padding-top:7px}div.DTE_Field{position:relative}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#f1f1f1}div.DTE_Field div.multi-restore{margin-top:.5em;font-size:.8em;line-height:1.25em}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Field div:not([data-dte-e=msg-error]){color:inherit}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week]{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Field input[type=week]{margin:-6px 0}div.DTE_Inline div.DTE_Field_Error,div.DTE_Inline div.DTE_Form_Error{font-size:11px;line-height:1.2em;padding:0;margin-top:10px}div.DTE_Inline div.DTE_Field_Error:empty,div.DTE_Inline div.DTE_Form_Error:empty{margin-top:0}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Inline div.DTE_Field{width:100%}div.DTE_Inline div.DTE_Field>div{width:100%;padding:0}div.DTE_Inline div.DTE_Field input.form-control{height:30px}div.DTE_Inline div.DTE_Field div.help-block{display:none;margin-top:10px;margin-bottom:0}div.DTE_Inline.DTE_Processing:after{top:5px}div.DTE_Field_Type_checkbox div.controls,div.DTE_Field_Type_radio div.controls{margin-top:.4em}div.DTE_Field_Type_checkbox div.controls label,div.DTE_Field_Type_radio div.controls label{margin-left:.75em;margin-bottom:0;vertical-align:middle;font-weight:normal}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0;transition:top .5s ease-in-out 0s}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;border:1px solid #666;padding:1em;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>label{padding-top:0;margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div input{margin:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{padding-top:42px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error{float:none;display:none;padding:0;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after{color:black}div.DTE_Bubble div.DTE_Bubble_Triangle{position:absolute;height:10px;width:10px;top:-6px;background-color:white;border:1px solid #666;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}div.DTE_Bubble.below div.DTE_Bubble_Liner{top:10px;bottom:auto}div.DTE_Bubble.below div.DTE_Bubble_Triangle{top:4px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTE_Bubble_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTE_Bubble_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTE_Bubble div.DTE_Bubble_Liner{box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);border-radius:6px;padding:1em;border:1px solid rgba(0, 0, 0, 0.2)}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{width:100%;max-width:100%;float:none;clear:both;text-align:left;flex:none}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label{padding:0 0 4px 0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;font-size:14px;width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{margin-top:-2px;display:block}div.DTE_Bubble div.DTE_Bubble_Triangle{border-bottom:1px solid rgba(0, 0, 0, 0.2);border-left:1px solid rgba(0, 0, 0, 0.2)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10;background-color:rgba(0, 0, 0, 0.05)}div.DTE div.editor_upload{padding-top:4px}div.DTE div.editor_upload div.eu_table{display:table;width:100%}div.DTE div.editor_upload div.row{display:table-row}div.DTE div.editor_upload div.cell{display:table-cell;position:relative;width:50%;vertical-align:top}div.DTE div.editor_upload div.cell+div.cell{padding-left:10px}div.DTE div.editor_upload div.row+div.row div.cell{padding-top:10px}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{width:100%;height:2.3em;font-size:.8em;text-align:center;line-height:1em;margin:0}div.DTE div.editor_upload input[type=file]{position:absolute;top:0;left:0;width:100%;opacity:0}div.DTE div.editor_upload div.drop{position:relative;box-sizing:border-box;width:100%;height:100%;border:3px dashed #ccc;border-radius:6px;min-height:4em;color:#999;text-align:center;padding:1em 2em;line-height:1.1em}div.DTE div.editor_upload div.drop.over{border:3px dashed #111;color:#111}div.DTE div.editor_upload div.drop span{max-width:75%;font-size:.85em;line-height:1em}div.DTE div.editor_upload div.rendered img{max-width:8em;margin:0 auto}div.DTE div.editor_upload.noDrop div.drop{display:none}div.DTE div.editor_upload.noDrop div.row.second{display:none}div.DTE div.editor_upload.noDrop div.rendered{margin-top:10px}div.DTE div.editor_upload.noClear div.clearValue button{display:none}div.DTE div.editor_upload.multi div.cell{display:block;width:100%}div.DTE div.editor_upload.multi div.cell div.drop{min-height:0}div.DTE div.editor_upload.multi div.clearValue{display:none}div.DTE div.editor_upload.multi ul{list-style-type:none;margin:0;padding:0}div.DTE div.editor_upload.multi ul li{position:relative;margin-top:.5em}div.DTE div.editor_upload.multi ul li:first-child{margin-top:0}div.DTE div.editor_upload.multi ul li img{vertical-align:middle}div.DTE div.editor_upload.multi ul li button{position:absolute;width:40px;right:0;top:50%;margin-top:-1.5em}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{height:auto}div.DTE div.editor_upload ul li button{padding-bottom:8px}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;line-height:1.3em;padding-right:1em;font-weight:normal}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dt-buttons{padding-bottom:.5em;width:100%}div.DTE_Field_Type_datatable div.dt-buttons:empty{display:none}div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate{text-align:center}@media(min-width: 1200px){div.DTE_Field_Type_datatable label.control-label{text-align:left}}div.DTE div.DTE_Processing_Indicator{position:absolute;top:17px;right:42px;height:2em;width:2em;z-index:20;font-size:12px;display:none;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}div.DTE.processing div.DTE_Processing_Indicator{display:block}div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator{display:none}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:0;font-size:8px}div.DTE.DTE_Inline div.DTE_Processing_Indicator{top:5px;right:6px;font-size:6px}div.DTE.DTE_Bubble div.DTE_Processing_Indicator{top:10px;right:14px;font-size:8px}div.DTE div.DTE_Processing_Indicator span,div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{display:block;background:black;width:.5em;height:1.5em;border:1px solid rgba(0, 0, 0, 0.4);background-color:rgba(0, 0, 0, 0.1);-webkit-animation:editorProcessing .9s infinite ease-in-out;animation:editorProcessing .9s infinite ease-in-out}div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{position:absolute;top:0;content:""}div.DTE div.DTE_Processing_Indicator:before{left:-1em;-webkit-animation-delay:-0.3s;animation-delay:-0.3s}div.DTE div.DTE_Processing_Indicator span{-webkit-animation-delay:-0.15s;animation-delay:-0.15s}div.DTE div.DTE_Processing_Indicator:after{left:1em}@-webkit-keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}@keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}table.dataTable tbody tr.highlight{background-color:#39f !important}table.dataTable tbody tr.highlight,table.dataTable tbody tr.noHighlight,table.dataTable tbody tr.highlight td,table.dataTable tbody tr.noHighlight td{-webkit-transition:background-color 500ms linear;-moz-transition:background-color 500ms linear;-ms-transition:background-color 500ms linear;-o-transition:background-color 500ms linear;transition:background-color 500ms linear}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:20px}div.DTE div.DTE_Processing_Indicator{top:52px;right:12px}div.DTED_Envelope_Wrapper{position:absolute;top:0;bottom:0;left:50%;height:100%;z-index:11;display:none;overflow:hidden}div.DTED_Envelope_Wrapper div.DTED_Envelope_Shadow{position:absolute;top:-10px;left:10px;right:10px;height:10px;z-index:10;box-shadow:0 0 20px black}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container{position:absolute;top:0;left:5%;width:90%;border-left:1px solid #777;border-right:1px solid #777;border-bottom:1px solid #777;box-shadow:3px 3px 10px #555;border-bottom-left-radius:5px;border-bottom-right-radius:5px;background-color:white}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Processing_Indicator{right:36px}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Footer{border-bottom-left-radius:5px;border-bottom-right-radius:5px}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover:after{color:black}div.DTED_Envelope_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTED_Envelope_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTED_Envelope_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close{top:10px;background:transparent;text-shadow:none;box-shadow:none;border:none;font-size:21px;color:black;opacity:.2}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover{opacity:1} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap4.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap4.css new file mode 100644 index 00000000..a6a37bba --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap4.css @@ -0,0 +1,779 @@ +div.DTE div.DTE_Form_Error { + color: #b11f1f; +} +div.DTE div.DTE_Form_Buttons { + display: flex; + flex-direction: row-reverse; +} +div.DTE div.DTE_Form_Buttons button { + margin-left: 0.5em; +} + +div.modal div.DTE div.DTE_Form_Error { + display: none; + float: left; + padding-top: 7px; +} + +div.DTE_Field { + position: relative; +} +div.DTE_Field div.multi-value, +div.DTE_Field div.multi-restore { + display: none; + cursor: pointer; +} +div.DTE_Field div.multi-value span, +div.DTE_Field div.multi-restore span { + display: block; + color: #666; +} +div.DTE_Field div.multi-value:hover, +div.DTE_Field div.multi-restore:hover { + background-color: #f1f1f1; +} +div.DTE_Field div.multi-restore { + margin-top: 0.5em; + font-size: 0.8em; + line-height: 1.25em; +} +div.DTE_Field:after { + display: block; + content: "."; + height: 0; + line-height: 0; + clear: both; + visibility: hidden; +} +div.DTE_Field div:not([data-dte-e=msg-error]) { + color: inherit; +} + +div.DTE_Inline { + position: relative; + display: table; + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field, +div.DTE_Inline div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field { + padding: 0; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label { + display: none; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week] { + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; +} +div.DTE_Inline div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Field input[type=week] { + margin: -6px 0; +} +div.DTE_Inline div.DTE_Field_Error, +div.DTE_Inline div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; +} +div.DTE_Inline div.DTE_Field_Error:empty, +div.DTE_Inline div.DTE_Form_Error:empty { + margin-top: 0; +} + +span.dtr-data div.DTE_Inline { + display: inline-table; +} + +div.DTE_Inline div.DTE_Field { + width: 100%; +} +div.DTE_Inline div.DTE_Field > div { + width: 100%; + padding: 0; +} +div.DTE_Inline div.DTE_Field input.form-control { + height: 30px; +} +div.DTE_Inline div.DTE_Field div.help-block { + display: none; + margin-top: 10px; + margin-bottom: 0; +} +div.DTE_Inline.DTE_Processing:after { + top: 5px; +} + +div.DTE_Field_Type_checkbox div.controls, +div.DTE_Field_Type_radio div.controls { + margin-top: 0.4em; +} +div.DTE_Field_Type_checkbox div.controls label, +div.DTE_Field_Type_radio div.controls label { + margin-left: 0.75em; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; +} + +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table { + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + position: relative; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:last-child { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > label { + padding-top: 0; + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div input { + margin: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Form_Info, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after { + color: black; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +div.DTE_Bubble.below div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; +} +div.DTE_Bubble.below div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTE_Bubble_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTE_Bubble_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTE_Bubble div.DTE_Bubble_Liner { + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + border-radius: 6px; + padding: 1em; + border: 1px solid rgba(0, 0, 0, 0.2); +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + width: 100%; + max-width: 100%; + float: none; + clear: both; + text-align: left; + flex: none; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label { + padding: 0 0 4px 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + font-size: 14px; + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + margin-top: -2px; + display: block; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-left: 1px solid rgba(0, 0, 0, 0.2); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10; + background-color: rgba(0, 0, 0, 0.05); +} + +div.DTE div.editor_upload { + padding-top: 4px; +} +div.DTE div.editor_upload div.eu_table { + display: table; + width: 100%; +} +div.DTE div.editor_upload div.row { + display: table-row; +} +div.DTE div.editor_upload div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; +} +div.DTE div.editor_upload div.cell + div.cell { + padding-left: 10px; +} +div.DTE div.editor_upload div.row + div.row div.cell { + padding-top: 10px; +} +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; +} +div.DTE div.editor_upload input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; +} +div.DTE div.editor_upload div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; +} +div.DTE div.editor_upload div.drop.over { + border: 3px dashed #111; + color: #111; +} +div.DTE div.editor_upload div.drop span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; +} +div.DTE div.editor_upload div.rendered img { + max-width: 8em; + margin: 0 auto; +} +div.DTE div.editor_upload.noDrop div.drop { + display: none; +} +div.DTE div.editor_upload.noDrop div.row.second { + display: none; +} +div.DTE div.editor_upload.noDrop div.rendered { + margin-top: 10px; +} +div.DTE div.editor_upload.noClear div.clearValue button { + display: none; +} +div.DTE div.editor_upload.multi div.cell { + display: block; + width: 100%; +} +div.DTE div.editor_upload.multi div.cell div.drop { + min-height: 0; +} +div.DTE div.editor_upload.multi div.clearValue { + display: none; +} +div.DTE div.editor_upload.multi ul { + list-style-type: none; + margin: 0; + padding: 0; +} +div.DTE div.editor_upload.multi ul li { + position: relative; + margin-top: 0.5em; +} +div.DTE div.editor_upload.multi ul li:first-child { + margin-top: 0; +} +div.DTE div.editor_upload.multi ul li img { + vertical-align: middle; +} +div.DTE div.editor_upload.multi ul li button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; +} + +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + height: auto; +} +div.DTE div.editor_upload ul li button { + padding-bottom: 8px; +} + +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 1em; + font-weight: normal; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dt-buttons { + padding-bottom: 0.5em; + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + display: none; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate { + text-align: center; +} + +@media (min-width: 1200px) { + div.DTE_Field_Type_datatable label.control-label { + text-align: left; + } +} +div.DTE div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +div.DTE.processing div.DTE_Processing_Indicator { + display: block; +} +div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator { + display: none; +} +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; +} +div.DTE.DTE_Inline div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; +} +div.DTE.DTE_Bubble div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; +} +div.DTE div.DTE_Processing_Indicator span, +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.1); + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; +} +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ""; +} +div.DTE div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +div.DTE div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +div.DTE div.DTE_Processing_Indicator:after { + left: 1em; +} +@-webkit-keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} +@keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} + +table.dataTable tbody tr.highlight { + background-color: #3399ff !important; +} +table.dataTable tbody tr.highlight, +table.dataTable tbody tr.noHighlight, +table.dataTable tbody tr.highlight td, +table.dataTable tbody tr.noHighlight td { + -webkit-transition: background-color 500ms linear; + -moz-transition: background-color 500ms linear; + -ms-transition: background-color 500ms linear; + -o-transition: background-color 500ms linear; + transition: background-color 500ms linear; +} + +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 20px; +} + +div.DTE div.DTE_Processing_Indicator { + top: 52px; + right: 12px; +} + +/* + * Namespace: DTED - DataTables Editor Display - Envelope + */ +div.DTED_Envelope_Wrapper { + position: absolute; + top: 0; + bottom: 0; + left: 50%; + height: 100%; + z-index: 11; + display: none; + overflow: hidden; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Shadow { + position: absolute; + top: -10px; + left: 10px; + right: 10px; + height: 10px; + z-index: 10; + box-shadow: 0 0 20px black; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container { + position: absolute; + top: 0; + left: 5%; + width: 90%; + border-left: 1px solid #777; + border-right: 1px solid #777; + border-bottom: 1px solid #777; + box-shadow: 3px 3px 10px #555; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: white; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Processing_Indicator { + right: 36px; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Footer { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover:after { + color: black; +} + +div.DTED_Envelope_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTED_Envelope_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTED_Envelope_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close { + top: 10px; + background: transparent; + text-shadow: none; + box-shadow: none; + border: none; + font-size: 21px; + color: black; + opacity: 0.2; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover { + opacity: 1; +} + +div.multi-value, +div.multi-restore { + padding: 0.5em; +} +div.multi-value span, +div.multi-restore span { + line-height: 1.2em; +} + +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + margin: 0 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + margin-top: 1em; +} + +div.DTE_Inline div.DTE_Field { + width: 100%; + margin: 0; +} +div.DTE_Inline div.DTE_Field > div { + max-width: 100%; + flex: none; +} +div.DTE_Inline div.DTE_Field input { + margin: -5px 0 -10px !important; +} + +div.DTE_Body div.DTE_Body_Content div.DTE_Field.block label, +div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div { + max-width: 100%; + flex: 0 0 100%; +} + +div.DTE_Field_Type_checkbox div.DTE_Field_InputControl, +div.DTE_Field_Type_radio div.DTE_Field_InputControl { + padding-top: 5px; +} +div.DTE_Field_Type_checkbox div label, +div.DTE_Field_Type_radio div label { + margin-bottom: 0.2em; + margin-left: 0.75em; + vertical-align: middle; +} + +div.DTE div.DTE_Processing_Indicator { + top: 20px; + right: 36px; +} + +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 0; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dt-buttons { + padding-bottom: 0.5em; + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + display: none; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper > table { + border: 1px solid #ced4da; + border-radius: 3px; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper > table thead th, +div.DTE_Field_Type_datatable div.dataTables_wrapper > table tbody td { + border-top: none; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate ul.pagination { + justify-content: center; +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap4.min.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap4.min.css new file mode 100644 index 00000000..a7f634b4 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap4.min.css @@ -0,0 +1 @@ +div.DTE div.DTE_Form_Error{color:#b11f1f}div.DTE div.DTE_Form_Buttons{display:flex;flex-direction:row-reverse}div.DTE div.DTE_Form_Buttons button{margin-left:.5em}div.modal div.DTE div.DTE_Form_Error{display:none;float:left;padding-top:7px}div.DTE_Field{position:relative}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#f1f1f1}div.DTE_Field div.multi-restore{margin-top:.5em;font-size:.8em;line-height:1.25em}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Field div:not([data-dte-e=msg-error]){color:inherit}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week]{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Field input[type=week]{margin:-6px 0}div.DTE_Inline div.DTE_Field_Error,div.DTE_Inline div.DTE_Form_Error{font-size:11px;line-height:1.2em;padding:0;margin-top:10px}div.DTE_Inline div.DTE_Field_Error:empty,div.DTE_Inline div.DTE_Form_Error:empty{margin-top:0}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Inline div.DTE_Field{width:100%}div.DTE_Inline div.DTE_Field>div{width:100%;padding:0}div.DTE_Inline div.DTE_Field input.form-control{height:30px}div.DTE_Inline div.DTE_Field div.help-block{display:none;margin-top:10px;margin-bottom:0}div.DTE_Inline.DTE_Processing:after{top:5px}div.DTE_Field_Type_checkbox div.controls,div.DTE_Field_Type_radio div.controls{margin-top:.4em}div.DTE_Field_Type_checkbox div.controls label,div.DTE_Field_Type_radio div.controls label{margin-left:.75em;margin-bottom:0;vertical-align:middle;font-weight:normal}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0;transition:top .5s ease-in-out 0s}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;border:1px solid #666;padding:1em;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>label{padding-top:0;margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div input{margin:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{padding-top:42px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error{float:none;display:none;padding:0;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after{color:black}div.DTE_Bubble div.DTE_Bubble_Triangle{position:absolute;height:10px;width:10px;top:-6px;background-color:white;border:1px solid #666;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}div.DTE_Bubble.below div.DTE_Bubble_Liner{top:10px;bottom:auto}div.DTE_Bubble.below div.DTE_Bubble_Triangle{top:4px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTE_Bubble_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTE_Bubble_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTE_Bubble div.DTE_Bubble_Liner{box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);border-radius:6px;padding:1em;border:1px solid rgba(0, 0, 0, 0.2)}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{width:100%;max-width:100%;float:none;clear:both;text-align:left;flex:none}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label{padding:0 0 4px 0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;font-size:14px;width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{margin-top:-2px;display:block}div.DTE_Bubble div.DTE_Bubble_Triangle{border-bottom:1px solid rgba(0, 0, 0, 0.2);border-left:1px solid rgba(0, 0, 0, 0.2)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10;background-color:rgba(0, 0, 0, 0.05)}div.DTE div.editor_upload{padding-top:4px}div.DTE div.editor_upload div.eu_table{display:table;width:100%}div.DTE div.editor_upload div.row{display:table-row}div.DTE div.editor_upload div.cell{display:table-cell;position:relative;width:50%;vertical-align:top}div.DTE div.editor_upload div.cell+div.cell{padding-left:10px}div.DTE div.editor_upload div.row+div.row div.cell{padding-top:10px}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{width:100%;height:2.3em;font-size:.8em;text-align:center;line-height:1em;margin:0}div.DTE div.editor_upload input[type=file]{position:absolute;top:0;left:0;width:100%;opacity:0}div.DTE div.editor_upload div.drop{position:relative;box-sizing:border-box;width:100%;height:100%;border:3px dashed #ccc;border-radius:6px;min-height:4em;color:#999;text-align:center;padding:1em 2em;line-height:1.1em}div.DTE div.editor_upload div.drop.over{border:3px dashed #111;color:#111}div.DTE div.editor_upload div.drop span{max-width:75%;font-size:.85em;line-height:1em}div.DTE div.editor_upload div.rendered img{max-width:8em;margin:0 auto}div.DTE div.editor_upload.noDrop div.drop{display:none}div.DTE div.editor_upload.noDrop div.row.second{display:none}div.DTE div.editor_upload.noDrop div.rendered{margin-top:10px}div.DTE div.editor_upload.noClear div.clearValue button{display:none}div.DTE div.editor_upload.multi div.cell{display:block;width:100%}div.DTE div.editor_upload.multi div.cell div.drop{min-height:0}div.DTE div.editor_upload.multi div.clearValue{display:none}div.DTE div.editor_upload.multi ul{list-style-type:none;margin:0;padding:0}div.DTE div.editor_upload.multi ul li{position:relative;margin-top:.5em}div.DTE div.editor_upload.multi ul li:first-child{margin-top:0}div.DTE div.editor_upload.multi ul li img{vertical-align:middle}div.DTE div.editor_upload.multi ul li button{position:absolute;width:40px;right:0;top:50%;margin-top:-1.5em}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{height:auto}div.DTE div.editor_upload ul li button{padding-bottom:8px}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;line-height:1.3em;padding-right:1em;font-weight:normal}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dt-buttons{padding-bottom:.5em;width:100%}div.DTE_Field_Type_datatable div.dt-buttons:empty{display:none}div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate{text-align:center}@media(min-width: 1200px){div.DTE_Field_Type_datatable label.control-label{text-align:left}}div.DTE div.DTE_Processing_Indicator{position:absolute;top:17px;right:42px;height:2em;width:2em;z-index:20;font-size:12px;display:none;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}div.DTE.processing div.DTE_Processing_Indicator{display:block}div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator{display:none}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:0;font-size:8px}div.DTE.DTE_Inline div.DTE_Processing_Indicator{top:5px;right:6px;font-size:6px}div.DTE.DTE_Bubble div.DTE_Processing_Indicator{top:10px;right:14px;font-size:8px}div.DTE div.DTE_Processing_Indicator span,div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{display:block;background:black;width:.5em;height:1.5em;border:1px solid rgba(0, 0, 0, 0.4);background-color:rgba(0, 0, 0, 0.1);-webkit-animation:editorProcessing .9s infinite ease-in-out;animation:editorProcessing .9s infinite ease-in-out}div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{position:absolute;top:0;content:""}div.DTE div.DTE_Processing_Indicator:before{left:-1em;-webkit-animation-delay:-0.3s;animation-delay:-0.3s}div.DTE div.DTE_Processing_Indicator span{-webkit-animation-delay:-0.15s;animation-delay:-0.15s}div.DTE div.DTE_Processing_Indicator:after{left:1em}@-webkit-keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}@keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}table.dataTable tbody tr.highlight{background-color:#39f !important}table.dataTable tbody tr.highlight,table.dataTable tbody tr.noHighlight,table.dataTable tbody tr.highlight td,table.dataTable tbody tr.noHighlight td{-webkit-transition:background-color 500ms linear;-moz-transition:background-color 500ms linear;-ms-transition:background-color 500ms linear;-o-transition:background-color 500ms linear;transition:background-color 500ms linear}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:20px}div.DTE div.DTE_Processing_Indicator{top:52px;right:12px}div.DTED_Envelope_Wrapper{position:absolute;top:0;bottom:0;left:50%;height:100%;z-index:11;display:none;overflow:hidden}div.DTED_Envelope_Wrapper div.DTED_Envelope_Shadow{position:absolute;top:-10px;left:10px;right:10px;height:10px;z-index:10;box-shadow:0 0 20px black}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container{position:absolute;top:0;left:5%;width:90%;border-left:1px solid #777;border-right:1px solid #777;border-bottom:1px solid #777;box-shadow:3px 3px 10px #555;border-bottom-left-radius:5px;border-bottom-right-radius:5px;background-color:white}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Processing_Indicator{right:36px}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Footer{border-bottom-left-radius:5px;border-bottom-right-radius:5px}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover:after{color:black}div.DTED_Envelope_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTED_Envelope_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTED_Envelope_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close{top:10px;background:transparent;text-shadow:none;box-shadow:none;border:none;font-size:21px;color:black;opacity:.2}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover{opacity:1}div.multi-value,div.multi-restore{padding:.5em}div.multi-value span,div.multi-restore span{line-height:1.2em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{margin:0 1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{margin-top:1em}div.DTE_Inline div.DTE_Field{width:100%;margin:0}div.DTE_Inline div.DTE_Field>div{max-width:100%;flex:none}div.DTE_Inline div.DTE_Field input{margin:-5px 0 -10px !important}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block label,div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div{max-width:100%;flex:0 0 100%}div.DTE_Field_Type_checkbox div.DTE_Field_InputControl,div.DTE_Field_Type_radio div.DTE_Field_InputControl{padding-top:5px}div.DTE_Field_Type_checkbox div label,div.DTE_Field_Type_radio div label{margin-bottom:.2em;margin-left:.75em;vertical-align:middle}div.DTE div.DTE_Processing_Indicator{top:20px;right:36px}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;line-height:1.3em;padding-right:0}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dt-buttons{padding-bottom:.5em;width:100%}div.DTE_Field_Type_datatable div.dt-buttons:empty{display:none}div.DTE_Field_Type_datatable div.dataTables_wrapper>table{border:1px solid #ced4da;border-radius:3px}div.DTE_Field_Type_datatable div.dataTables_wrapper>table thead th,div.DTE_Field_Type_datatable div.dataTables_wrapper>table tbody td{border-top:none}div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap5.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap5.css new file mode 100644 index 00000000..3183ec1a --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap5.css @@ -0,0 +1,782 @@ +div.DTE div.DTE_Form_Error { + color: #b11f1f; +} +div.DTE div.DTE_Form_Buttons { + display: flex; + flex-direction: row-reverse; +} +div.DTE div.DTE_Form_Buttons button { + margin-left: 0.5em; +} + +div.modal div.DTE div.DTE_Form_Error { + display: none; + float: left; + padding-top: 7px; +} + +div.DTE_Field { + position: relative; +} +div.DTE_Field div.multi-value, +div.DTE_Field div.multi-restore { + display: none; + cursor: pointer; +} +div.DTE_Field div.multi-value span, +div.DTE_Field div.multi-restore span { + display: block; + color: #666; +} +div.DTE_Field div.multi-value:hover, +div.DTE_Field div.multi-restore:hover { + background-color: #f1f1f1; +} +div.DTE_Field div.multi-restore { + margin-top: 0.5em; + font-size: 0.8em; + line-height: 1.25em; +} +div.DTE_Field:after { + display: block; + content: "."; + height: 0; + line-height: 0; + clear: both; + visibility: hidden; +} +div.DTE_Field div:not([data-dte-e=msg-error]) { + color: inherit; +} + +div.DTE_Inline { + position: relative; + display: table; + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field, +div.DTE_Inline div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field { + padding: 0; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label { + display: none; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week] { + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; +} +div.DTE_Inline div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Field input[type=week] { + margin: -6px 0; +} +div.DTE_Inline div.DTE_Field_Error, +div.DTE_Inline div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; +} +div.DTE_Inline div.DTE_Field_Error:empty, +div.DTE_Inline div.DTE_Form_Error:empty { + margin-top: 0; +} + +span.dtr-data div.DTE_Inline { + display: inline-table; +} + +div.DTE_Inline div.DTE_Field { + width: 100%; +} +div.DTE_Inline div.DTE_Field > div { + width: 100%; + padding: 0; +} +div.DTE_Inline div.DTE_Field input.form-control { + height: 30px; +} +div.DTE_Inline div.DTE_Field div.help-block { + display: none; + margin-top: 10px; + margin-bottom: 0; +} +div.DTE_Inline.DTE_Processing:after { + top: 5px; +} + +div.DTE_Field_Type_checkbox div.controls, +div.DTE_Field_Type_radio div.controls { + margin-top: 0.4em; +} +div.DTE_Field_Type_checkbox div.controls label, +div.DTE_Field_Type_radio div.controls label { + margin-left: 0.75em; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; +} + +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table { + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + position: relative; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:last-child { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > label { + padding-top: 0; + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div input { + margin: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Form_Info, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after { + color: black; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +div.DTE_Bubble.below div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; +} +div.DTE_Bubble.below div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTE_Bubble_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTE_Bubble_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTE_Bubble div.DTE_Bubble_Liner { + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + border-radius: 6px; + padding: 1em; + border: 1px solid rgba(0, 0, 0, 0.2); +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + width: 100%; + max-width: 100%; + float: none; + clear: both; + text-align: left; + flex: none; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label { + padding: 0 0 4px 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + font-size: 14px; + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + margin-top: -2px; + display: block; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-left: 1px solid rgba(0, 0, 0, 0.2); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10; + background-color: rgba(0, 0, 0, 0.05); +} + +div.DTE div.editor_upload { + padding-top: 4px; +} +div.DTE div.editor_upload div.eu_table { + display: table; + width: 100%; +} +div.DTE div.editor_upload div.row { + display: table-row; +} +div.DTE div.editor_upload div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; +} +div.DTE div.editor_upload div.cell + div.cell { + padding-left: 10px; +} +div.DTE div.editor_upload div.row + div.row div.cell { + padding-top: 10px; +} +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; +} +div.DTE div.editor_upload input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; +} +div.DTE div.editor_upload div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; +} +div.DTE div.editor_upload div.drop.over { + border: 3px dashed #111; + color: #111; +} +div.DTE div.editor_upload div.drop span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; +} +div.DTE div.editor_upload div.rendered img { + max-width: 8em; + margin: 0 auto; +} +div.DTE div.editor_upload.noDrop div.drop { + display: none; +} +div.DTE div.editor_upload.noDrop div.row.second { + display: none; +} +div.DTE div.editor_upload.noDrop div.rendered { + margin-top: 10px; +} +div.DTE div.editor_upload.noClear div.clearValue button { + display: none; +} +div.DTE div.editor_upload.multi div.cell { + display: block; + width: 100%; +} +div.DTE div.editor_upload.multi div.cell div.drop { + min-height: 0; +} +div.DTE div.editor_upload.multi div.clearValue { + display: none; +} +div.DTE div.editor_upload.multi ul { + list-style-type: none; + margin: 0; + padding: 0; +} +div.DTE div.editor_upload.multi ul li { + position: relative; + margin-top: 0.5em; +} +div.DTE div.editor_upload.multi ul li:first-child { + margin-top: 0; +} +div.DTE div.editor_upload.multi ul li img { + vertical-align: middle; +} +div.DTE div.editor_upload.multi ul li button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; +} + +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + height: auto; +} +div.DTE div.editor_upload ul li button { + padding-bottom: 8px; +} + +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 1em; + font-weight: normal; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dt-buttons { + padding-bottom: 0.5em; + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + display: none; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate { + text-align: center; +} + +@media (min-width: 1200px) { + div.DTE_Field_Type_datatable label.control-label { + text-align: left; + } +} +div.DTE div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +div.DTE.processing div.DTE_Processing_Indicator { + display: block; +} +div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator { + display: none; +} +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; +} +div.DTE.DTE_Inline div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; +} +div.DTE.DTE_Bubble div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; +} +div.DTE div.DTE_Processing_Indicator span, +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.1); + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; +} +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ""; +} +div.DTE div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +div.DTE div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +div.DTE div.DTE_Processing_Indicator:after { + left: 1em; +} +@-webkit-keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} +@keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} + +table.dataTable tbody tr.highlight { + background-color: #3399ff !important; +} +table.dataTable tbody tr.highlight, +table.dataTable tbody tr.noHighlight, +table.dataTable tbody tr.highlight td, +table.dataTable tbody tr.noHighlight td { + -webkit-transition: background-color 500ms linear; + -moz-transition: background-color 500ms linear; + -ms-transition: background-color 500ms linear; + -o-transition: background-color 500ms linear; + transition: background-color 500ms linear; +} + +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 20px; +} + +div.DTE div.DTE_Processing_Indicator { + top: 52px; + right: 12px; +} + +/* + * Namespace: DTED - DataTables Editor Display - Envelope + */ +div.DTED_Envelope_Wrapper { + position: absolute; + top: 0; + bottom: 0; + left: 50%; + height: 100%; + z-index: 11; + display: none; + overflow: hidden; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Shadow { + position: absolute; + top: -10px; + left: 10px; + right: 10px; + height: 10px; + z-index: 10; + box-shadow: 0 0 20px black; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container { + position: absolute; + top: 0; + left: 5%; + width: 90%; + border-left: 1px solid #777; + border-right: 1px solid #777; + border-bottom: 1px solid #777; + box-shadow: 3px 3px 10px #555; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: white; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Processing_Indicator { + right: 36px; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Footer { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover:after { + color: black; +} + +div.DTED_Envelope_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTED_Envelope_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTED_Envelope_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close { + top: 10px; + background: transparent; + text-shadow: none; + box-shadow: none; + border: none; + font-size: 21px; + color: black; + opacity: 0.2; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover { + opacity: 1; +} + +div.multi-value, +div.multi-restore { + padding: 0.5em; +} +div.multi-value span, +div.multi-restore span { + line-height: 1.2em; +} + +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + margin: 0 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + margin-top: 1em; +} + +div.DTE_Inline div.DTE_Field { + width: 100%; + margin: 0; +} +div.DTE_Inline div.DTE_Field > div { + max-width: 100%; + flex: none; +} +div.DTE_Inline div.DTE_Field input { + font-size: 1em; + margin: -5px 0 -10px !important; +} + +div.DTE_Body div.DTE_Body_Content div.DTE_Field.block label, +div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div { + max-width: 100%; + flex: 0 0 100%; +} + +div.DTE_Field_Type_checkbox div.DTE_Field_InputControl, +div.DTE_Field_Type_radio div.DTE_Field_InputControl { + padding-top: 5px; +} +div.DTE_Field_Type_checkbox div label, +div.DTE_Field_Type_radio div label { + margin-left: 0.75em; + vertical-align: middle; +} + +div.DTE div.DTE_Processing_Indicator { + top: 20px; + right: 36px; +} + +div.DTE_Field_Type_datatable div.dataTables_filter { + padding-bottom: 0.5em; +} +div.DTE_Field_Type_datatable div.dt-buttons { + padding-bottom: 0.5em; + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + display: none; +} +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 0; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper > table { + border: 1px solid #ced4da; + border-radius: 3px; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper > table thead th, +div.DTE_Field_Type_datatable div.dataTables_wrapper > table tbody td { + border-top: none; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate ul.pagination { + justify-content: center; +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap5.min.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap5.min.css new file mode 100644 index 00000000..37c4eed4 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bootstrap5.min.css @@ -0,0 +1 @@ +div.DTE div.DTE_Form_Error{color:#b11f1f}div.DTE div.DTE_Form_Buttons{display:flex;flex-direction:row-reverse}div.DTE div.DTE_Form_Buttons button{margin-left:.5em}div.modal div.DTE div.DTE_Form_Error{display:none;float:left;padding-top:7px}div.DTE_Field{position:relative}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#f1f1f1}div.DTE_Field div.multi-restore{margin-top:.5em;font-size:.8em;line-height:1.25em}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Field div:not([data-dte-e=msg-error]){color:inherit}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week]{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Field input[type=week]{margin:-6px 0}div.DTE_Inline div.DTE_Field_Error,div.DTE_Inline div.DTE_Form_Error{font-size:11px;line-height:1.2em;padding:0;margin-top:10px}div.DTE_Inline div.DTE_Field_Error:empty,div.DTE_Inline div.DTE_Form_Error:empty{margin-top:0}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Inline div.DTE_Field{width:100%}div.DTE_Inline div.DTE_Field>div{width:100%;padding:0}div.DTE_Inline div.DTE_Field input.form-control{height:30px}div.DTE_Inline div.DTE_Field div.help-block{display:none;margin-top:10px;margin-bottom:0}div.DTE_Inline.DTE_Processing:after{top:5px}div.DTE_Field_Type_checkbox div.controls,div.DTE_Field_Type_radio div.controls{margin-top:.4em}div.DTE_Field_Type_checkbox div.controls label,div.DTE_Field_Type_radio div.controls label{margin-left:.75em;margin-bottom:0;vertical-align:middle;font-weight:normal}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0;transition:top .5s ease-in-out 0s}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;border:1px solid #666;padding:1em;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>label{padding-top:0;margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div input{margin:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{padding-top:42px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error{float:none;display:none;padding:0;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after{color:black}div.DTE_Bubble div.DTE_Bubble_Triangle{position:absolute;height:10px;width:10px;top:-6px;background-color:white;border:1px solid #666;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}div.DTE_Bubble.below div.DTE_Bubble_Liner{top:10px;bottom:auto}div.DTE_Bubble.below div.DTE_Bubble_Triangle{top:4px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTE_Bubble_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTE_Bubble_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTE_Bubble div.DTE_Bubble_Liner{box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);border-radius:6px;padding:1em;border:1px solid rgba(0, 0, 0, 0.2)}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{width:100%;max-width:100%;float:none;clear:both;text-align:left;flex:none}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label{padding:0 0 4px 0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;font-size:14px;width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{margin-top:-2px;display:block}div.DTE_Bubble div.DTE_Bubble_Triangle{border-bottom:1px solid rgba(0, 0, 0, 0.2);border-left:1px solid rgba(0, 0, 0, 0.2)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10;background-color:rgba(0, 0, 0, 0.05)}div.DTE div.editor_upload{padding-top:4px}div.DTE div.editor_upload div.eu_table{display:table;width:100%}div.DTE div.editor_upload div.row{display:table-row}div.DTE div.editor_upload div.cell{display:table-cell;position:relative;width:50%;vertical-align:top}div.DTE div.editor_upload div.cell+div.cell{padding-left:10px}div.DTE div.editor_upload div.row+div.row div.cell{padding-top:10px}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{width:100%;height:2.3em;font-size:.8em;text-align:center;line-height:1em;margin:0}div.DTE div.editor_upload input[type=file]{position:absolute;top:0;left:0;width:100%;opacity:0}div.DTE div.editor_upload div.drop{position:relative;box-sizing:border-box;width:100%;height:100%;border:3px dashed #ccc;border-radius:6px;min-height:4em;color:#999;text-align:center;padding:1em 2em;line-height:1.1em}div.DTE div.editor_upload div.drop.over{border:3px dashed #111;color:#111}div.DTE div.editor_upload div.drop span{max-width:75%;font-size:.85em;line-height:1em}div.DTE div.editor_upload div.rendered img{max-width:8em;margin:0 auto}div.DTE div.editor_upload.noDrop div.drop{display:none}div.DTE div.editor_upload.noDrop div.row.second{display:none}div.DTE div.editor_upload.noDrop div.rendered{margin-top:10px}div.DTE div.editor_upload.noClear div.clearValue button{display:none}div.DTE div.editor_upload.multi div.cell{display:block;width:100%}div.DTE div.editor_upload.multi div.cell div.drop{min-height:0}div.DTE div.editor_upload.multi div.clearValue{display:none}div.DTE div.editor_upload.multi ul{list-style-type:none;margin:0;padding:0}div.DTE div.editor_upload.multi ul li{position:relative;margin-top:.5em}div.DTE div.editor_upload.multi ul li:first-child{margin-top:0}div.DTE div.editor_upload.multi ul li img{vertical-align:middle}div.DTE div.editor_upload.multi ul li button{position:absolute;width:40px;right:0;top:50%;margin-top:-1.5em}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{height:auto}div.DTE div.editor_upload ul li button{padding-bottom:8px}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;line-height:1.3em;padding-right:1em;font-weight:normal}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dt-buttons{padding-bottom:.5em;width:100%}div.DTE_Field_Type_datatable div.dt-buttons:empty{display:none}div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate{text-align:center}@media(min-width: 1200px){div.DTE_Field_Type_datatable label.control-label{text-align:left}}div.DTE div.DTE_Processing_Indicator{position:absolute;top:17px;right:42px;height:2em;width:2em;z-index:20;font-size:12px;display:none;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}div.DTE.processing div.DTE_Processing_Indicator{display:block}div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator{display:none}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:0;font-size:8px}div.DTE.DTE_Inline div.DTE_Processing_Indicator{top:5px;right:6px;font-size:6px}div.DTE.DTE_Bubble div.DTE_Processing_Indicator{top:10px;right:14px;font-size:8px}div.DTE div.DTE_Processing_Indicator span,div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{display:block;background:black;width:.5em;height:1.5em;border:1px solid rgba(0, 0, 0, 0.4);background-color:rgba(0, 0, 0, 0.1);-webkit-animation:editorProcessing .9s infinite ease-in-out;animation:editorProcessing .9s infinite ease-in-out}div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{position:absolute;top:0;content:""}div.DTE div.DTE_Processing_Indicator:before{left:-1em;-webkit-animation-delay:-0.3s;animation-delay:-0.3s}div.DTE div.DTE_Processing_Indicator span{-webkit-animation-delay:-0.15s;animation-delay:-0.15s}div.DTE div.DTE_Processing_Indicator:after{left:1em}@-webkit-keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}@keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}table.dataTable tbody tr.highlight{background-color:#39f !important}table.dataTable tbody tr.highlight,table.dataTable tbody tr.noHighlight,table.dataTable tbody tr.highlight td,table.dataTable tbody tr.noHighlight td{-webkit-transition:background-color 500ms linear;-moz-transition:background-color 500ms linear;-ms-transition:background-color 500ms linear;-o-transition:background-color 500ms linear;transition:background-color 500ms linear}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:20px}div.DTE div.DTE_Processing_Indicator{top:52px;right:12px}div.DTED_Envelope_Wrapper{position:absolute;top:0;bottom:0;left:50%;height:100%;z-index:11;display:none;overflow:hidden}div.DTED_Envelope_Wrapper div.DTED_Envelope_Shadow{position:absolute;top:-10px;left:10px;right:10px;height:10px;z-index:10;box-shadow:0 0 20px black}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container{position:absolute;top:0;left:5%;width:90%;border-left:1px solid #777;border-right:1px solid #777;border-bottom:1px solid #777;box-shadow:3px 3px 10px #555;border-bottom-left-radius:5px;border-bottom-right-radius:5px;background-color:white}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Processing_Indicator{right:36px}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Footer{border-bottom-left-radius:5px;border-bottom-right-radius:5px}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover:after{color:black}div.DTED_Envelope_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTED_Envelope_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTED_Envelope_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close{top:10px;background:transparent;text-shadow:none;box-shadow:none;border:none;font-size:21px;color:black;opacity:.2}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover{opacity:1}div.multi-value,div.multi-restore{padding:.5em}div.multi-value span,div.multi-restore span{line-height:1.2em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{margin:0 1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{margin-top:1em}div.DTE_Inline div.DTE_Field{width:100%;margin:0}div.DTE_Inline div.DTE_Field>div{max-width:100%;flex:none}div.DTE_Inline div.DTE_Field input{font-size:1em;margin:-5px 0 -10px !important}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block label,div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div{max-width:100%;flex:0 0 100%}div.DTE_Field_Type_checkbox div.DTE_Field_InputControl,div.DTE_Field_Type_radio div.DTE_Field_InputControl{padding-top:5px}div.DTE_Field_Type_checkbox div label,div.DTE_Field_Type_radio div label{margin-left:.75em;vertical-align:middle}div.DTE div.DTE_Processing_Indicator{top:20px;right:36px}div.DTE_Field_Type_datatable div.dataTables_filter{padding-bottom:.5em}div.DTE_Field_Type_datatable div.dt-buttons{padding-bottom:.5em;width:100%}div.DTE_Field_Type_datatable div.dt-buttons:empty{display:none}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;line-height:1.3em;padding-right:0}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dataTables_wrapper>table{border:1px solid #ced4da;border-radius:3px}div.DTE_Field_Type_datatable div.dataTables_wrapper>table thead th,div.DTE_Field_Type_datatable div.dataTables_wrapper>table tbody td{border-top:none}div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bulma.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bulma.css new file mode 100644 index 00000000..afa57bb8 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bulma.css @@ -0,0 +1,466 @@ +div.DTE_Inline { + position: relative; + display: table; + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field, +div.DTE_Inline div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field { + padding: 0; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label { + display: none; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week] { + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; +} +div.DTE_Inline div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Field input[type=week] { + margin: -6px 0; +} +div.DTE_Inline div.DTE_Field_Error, +div.DTE_Inline div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; +} +div.DTE_Inline div.DTE_Field_Error:empty, +div.DTE_Inline div.DTE_Form_Error:empty { + margin-top: 0; +} + +span.dtr-data div.DTE_Inline { + display: inline-table; +} + +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table { + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + position: relative; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:last-child { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > label { + padding-top: 0; + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div input { + margin: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Form_Info, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after { + color: black; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +div.DTE_Bubble.below div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; +} +div.DTE_Bubble.below div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTE_Bubble_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTE_Bubble_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTE div.editor_upload { + padding-top: 4px; +} +div.DTE div.editor_upload div.eu_table { + display: table; + width: 100%; +} +div.DTE div.editor_upload div.row { + display: table-row; +} +div.DTE div.editor_upload div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; +} +div.DTE div.editor_upload div.cell + div.cell { + padding-left: 10px; +} +div.DTE div.editor_upload div.row + div.row div.cell { + padding-top: 10px; +} +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; +} +div.DTE div.editor_upload input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; +} +div.DTE div.editor_upload div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; +} +div.DTE div.editor_upload div.drop.over { + border: 3px dashed #111; + color: #111; +} +div.DTE div.editor_upload div.drop span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; +} +div.DTE div.editor_upload div.rendered img { + max-width: 8em; + margin: 0 auto; +} +div.DTE div.editor_upload.noDrop div.drop { + display: none; +} +div.DTE div.editor_upload.noDrop div.row.second { + display: none; +} +div.DTE div.editor_upload.noDrop div.rendered { + margin-top: 10px; +} +div.DTE div.editor_upload.noClear div.clearValue button { + display: none; +} +div.DTE div.editor_upload.multi div.cell { + display: block; + width: 100%; +} +div.DTE div.editor_upload.multi div.cell div.drop { + min-height: 0; +} +div.DTE div.editor_upload.multi div.clearValue { + display: none; +} +div.DTE div.editor_upload.multi ul { + list-style-type: none; + margin: 0; + padding: 0; +} +div.DTE div.editor_upload.multi ul li { + position: relative; + margin-top: 0.5em; +} +div.DTE div.editor_upload.multi ul li:first-child { + margin-top: 0; +} +div.DTE div.editor_upload.multi ul li img { + vertical-align: middle; +} +div.DTE div.editor_upload.multi ul li button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; +} + +div.DTE div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +div.DTE.processing div.DTE_Processing_Indicator { + display: block; +} +div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator { + display: none; +} +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; +} +div.DTE.DTE_Inline div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; +} +div.DTE.DTE_Bubble div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; +} +div.DTE div.DTE_Processing_Indicator span, +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.1); + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; +} +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ""; +} +div.DTE div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +div.DTE div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +div.DTE div.DTE_Processing_Indicator:after { + left: 1em; +} +@-webkit-keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} +@keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} + +div.modal-content { + padding: 20px; + background: white; + border-radius: 5px; +} +div.modal-content div.modal-header { + padding-bottom: 20px; +} +div.modal-content div.modal-footer { + padding-top: 6px; +} +div.modal-content div.field.is-grouped { + display: none; +} +div.modal-content div.dataTables_info { + font-weight: 1; + font-size: 0.8em; + padding-left: 2px; +} +div.modal-content div.dataTables_info span.select-item { + padding-left: 0.5em; +} + +div.DTE_Form_Buttons { + display: flex; + flex-direction: row-reverse; + padding-top: 10px; +} +div.DTE_Form_Buttons button { + margin-left: 0.5em; +} + +div.card { + border-color: #888; +} + +table.dataTable div.field { + margin-bottom: 0px; +} +table.dataTable div.field input.input { + padding: 0px; +} +table.dataTable div.field input.is-small { + font-size: 1em; + height: 2em; +} + +div.DTE_Field_Type_checkbox div label, +div.DTE_Field_Type_radio div label { + margin-left: 0.75em; +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bulma.min.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bulma.min.css new file mode 100644 index 00000000..1be29df8 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.bulma.min.css @@ -0,0 +1 @@ +div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week]{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Field input[type=week]{margin:-6px 0}div.DTE_Inline div.DTE_Field_Error,div.DTE_Inline div.DTE_Form_Error{font-size:11px;line-height:1.2em;padding:0;margin-top:10px}div.DTE_Inline div.DTE_Field_Error:empty,div.DTE_Inline div.DTE_Form_Error:empty{margin-top:0}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0;transition:top .5s ease-in-out 0s}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;border:1px solid #666;padding:1em;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>label{padding-top:0;margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div input{margin:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{padding-top:42px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error{float:none;display:none;padding:0;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after{color:black}div.DTE_Bubble div.DTE_Bubble_Triangle{position:absolute;height:10px;width:10px;top:-6px;background-color:white;border:1px solid #666;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}div.DTE_Bubble.below div.DTE_Bubble_Liner{top:10px;bottom:auto}div.DTE_Bubble.below div.DTE_Bubble_Triangle{top:4px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTE_Bubble_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTE_Bubble_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTE div.editor_upload{padding-top:4px}div.DTE div.editor_upload div.eu_table{display:table;width:100%}div.DTE div.editor_upload div.row{display:table-row}div.DTE div.editor_upload div.cell{display:table-cell;position:relative;width:50%;vertical-align:top}div.DTE div.editor_upload div.cell+div.cell{padding-left:10px}div.DTE div.editor_upload div.row+div.row div.cell{padding-top:10px}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{width:100%;height:2.3em;font-size:.8em;text-align:center;line-height:1em;margin:0}div.DTE div.editor_upload input[type=file]{position:absolute;top:0;left:0;width:100%;opacity:0}div.DTE div.editor_upload div.drop{position:relative;box-sizing:border-box;width:100%;height:100%;border:3px dashed #ccc;border-radius:6px;min-height:4em;color:#999;text-align:center;padding:1em 2em;line-height:1.1em}div.DTE div.editor_upload div.drop.over{border:3px dashed #111;color:#111}div.DTE div.editor_upload div.drop span{max-width:75%;font-size:.85em;line-height:1em}div.DTE div.editor_upload div.rendered img{max-width:8em;margin:0 auto}div.DTE div.editor_upload.noDrop div.drop{display:none}div.DTE div.editor_upload.noDrop div.row.second{display:none}div.DTE div.editor_upload.noDrop div.rendered{margin-top:10px}div.DTE div.editor_upload.noClear div.clearValue button{display:none}div.DTE div.editor_upload.multi div.cell{display:block;width:100%}div.DTE div.editor_upload.multi div.cell div.drop{min-height:0}div.DTE div.editor_upload.multi div.clearValue{display:none}div.DTE div.editor_upload.multi ul{list-style-type:none;margin:0;padding:0}div.DTE div.editor_upload.multi ul li{position:relative;margin-top:.5em}div.DTE div.editor_upload.multi ul li:first-child{margin-top:0}div.DTE div.editor_upload.multi ul li img{vertical-align:middle}div.DTE div.editor_upload.multi ul li button{position:absolute;width:40px;right:0;top:50%;margin-top:-1.5em}div.DTE div.DTE_Processing_Indicator{position:absolute;top:17px;right:42px;height:2em;width:2em;z-index:20;font-size:12px;display:none;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}div.DTE.processing div.DTE_Processing_Indicator{display:block}div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator{display:none}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:0;font-size:8px}div.DTE.DTE_Inline div.DTE_Processing_Indicator{top:5px;right:6px;font-size:6px}div.DTE.DTE_Bubble div.DTE_Processing_Indicator{top:10px;right:14px;font-size:8px}div.DTE div.DTE_Processing_Indicator span,div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{display:block;background:black;width:.5em;height:1.5em;border:1px solid rgba(0, 0, 0, 0.4);background-color:rgba(0, 0, 0, 0.1);-webkit-animation:editorProcessing .9s infinite ease-in-out;animation:editorProcessing .9s infinite ease-in-out}div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{position:absolute;top:0;content:""}div.DTE div.DTE_Processing_Indicator:before{left:-1em;-webkit-animation-delay:-0.3s;animation-delay:-0.3s}div.DTE div.DTE_Processing_Indicator span{-webkit-animation-delay:-0.15s;animation-delay:-0.15s}div.DTE div.DTE_Processing_Indicator:after{left:1em}@-webkit-keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}@keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}div.modal-content{padding:20px;background:white;border-radius:5px}div.modal-content div.modal-header{padding-bottom:20px}div.modal-content div.modal-footer{padding-top:6px}div.modal-content div.field.is-grouped{display:none}div.modal-content div.dataTables_info{font-weight:1;font-size:.8em;padding-left:2px}div.modal-content div.dataTables_info span.select-item{padding-left:.5em}div.DTE_Form_Buttons{display:flex;flex-direction:row-reverse;padding-top:10px}div.DTE_Form_Buttons button{margin-left:.5em}div.card{border-color:#888}table.dataTable div.field{margin-bottom:0px}table.dataTable div.field input.input{padding:0px}table.dataTable div.field input.is-small{font-size:1em;height:2em}div.DTE_Field_Type_checkbox div label,div.DTE_Field_Type_radio div label{margin-left:.75em} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.dataTables.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.dataTables.css new file mode 100644 index 00000000..d497dbd2 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.dataTables.css @@ -0,0 +1,1279 @@ +div.DTE { + position: relative; +} +div.DTE div.DTE_Header { + position: absolute; + top: 0; + left: 0; + height: 52px; + width: 100%; + background-color: #e8e9eb; + border-bottom: 1px solid rgba(0, 0, 0, 0.15); + padding: 16px 10px 2px 16px; + font-size: 1.3em; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE div.DTE_Body { + position: relative; +} +div.DTE div.DTE_Footer { + position: absolute; + bottom: 0; + left: 0; + height: 52px; + width: 100%; + background-color: #e8e9eb; + border-top: 1px solid rgba(0, 0, 0, 0.15); + padding: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE div.DTE_Form_Info { + margin-bottom: 0.5em; + display: none; +} +div.DTE div.DTE_Form_Content { + position: relative; + padding: 1em; +} +div.DTE div.DTE_Form_Error { + float: left; + padding: 5px; + display: none; + color: #b11f1f; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +div.DTE div.DTE_Form_Buttons { + display: flex; + flex-direction: row-reverse; +} +div.DTE button.btn, +div.DTE div.DTE_Form_Buttons button { + position: relative; + text-align: center; + display: block; + margin-top: 0; + padding: 0.5em 1em; + cursor: pointer; + margin-left: 0.75em; + color: inherit; + font-size: 14px; + white-space: nowrap; + border: 1px solid #999; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: 1px 1px 3px #ccc; + -moz-box-shadow: 1px 1px 3px #ccc; + box-shadow: 1px 1px 3px #ccc; + background-color: #dcdcdc; /* Fallback */ + background-image: -webkit-linear-gradient(top, #ffffff 0%, #dcdcdc 100%); /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #ffffff 0%, #dcdcdc 100%); /* FF3.6 */ + background-image: -ms-linear-gradient(top, #ffffff 0%, #dcdcdc 100%); /* IE10 */ + background-image: -o-linear-gradient(top, #ffffff 0%, #dcdcdc 100%); /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #ffffff 0%, #dcdcdc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#ffffff", EndColorStr="#dcdcdc"); +} +div.DTE button.btn:hover, +div.DTE div.DTE_Form_Buttons button:hover { + border: 1px solid #666; + -webkit-box-shadow: 1px 1px 3px #999; + -moz-box-shadow: 1px 1px 3px #999; + box-shadow: 1px 1px 3px #999; + background-color: #cccccc; /* Fallback */ + background-image: -webkit-linear-gradient(top, #eaeaea 0%, #cccccc 100%); /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #eaeaea 0%, #cccccc 100%); /* FF3.6 */ + background-image: -ms-linear-gradient(top, #eaeaea 0%, #cccccc 100%); /* IE10 */ + background-image: -o-linear-gradient(top, #eaeaea 0%, #cccccc 100%); /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #eaeaea 0%, #cccccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#eaeaea", EndColorStr="#cccccc"); +} +div.DTE button.btn:active, +div.DTE div.DTE_Form_Buttons button:active { + -webkit-box-shadow: inset 1px 1px 3px #999; + -moz-box-shadow: inset 1px 1px 3px #999; + box-shadow: inset 1px 1px 3px #999; +} +div.DTE button.btn:focus, +div.DTE div.DTE_Form_Buttons button:focus { + border: 1px solid #426c9e; + text-shadow: 0 1px 0 #c4def1; + background-color: #79ace9; /* Fallback */ + background-image: -webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%); /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #bddef4 0%, #79ace9 100%); /* FF3.6 */ + background-image: -ms-linear-gradient(top, #bddef4 0%, #79ace9 100%); /* IE10 */ + background-image: -o-linear-gradient(top, #bddef4 0%, #79ace9 100%); /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #bddef4 0%, #79ace9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#bddef4", EndColorStr="#79ace9"); + outline: none; +} +div.DTE button.btn:focus:after, +div.DTE div.DTE_Form_Buttons button:focus:after { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: white; + display: block; + content: " "; + -webkit-animation-duration: 1s; + -webkit-animation-name: buttonPulse; + -webkit-animation-fill-mode: forwards; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + -webkit-animation-direction: alternate; + -moz-animation-duration: 1s; + -moz-animation-name: buttonPulse; + -moz-animation-fill-mode: forwards; + -moz-animation-iteration-count: infinite; + -moz-animation-timing-function: linear; + -moz-animation-direction: alternate; + -o-animation-duration: 1s; + -o-animation-name: buttonPulse; + -o-animation-fill-mode: forwards; + -o-animation-iteration-count: infinite; + -o-animation-timing-function: linear; + -o-animation-direction: alternate; + animation-duration: 1s; + animation-name: buttonPulse; + animation-fill-mode: forwards; + animation-iteration-count: infinite; + animation-timing-function: linear; + animation-direction: alternate; +} +div.DTE.DTE_Action_Remove div.DTE_Body_Content { + text-align: center; + padding: 20px 0; +} + +@-webkit-keyframes buttonPulse { + 0% { + opacity: 0; + } + 100% { + opacity: 0.2; + } +} +@-moz-keyframes buttonPulse { + 0% { + opacity: 0; + } + 100% { + opacity: 0.2; + } +} +@-o-keyframes buttonPulse { + 0% { + opacity: 0; + } + 100% { + opacity: 0.2; + } +} +@keyframes buttonPulse { + 0% { + opacity: 0; + } + 100% { + opacity: 0.2; + } +} +div.DTTT_container { + float: left; +} + +div.DTE_Field input, +div.DTE_Field textarea { + box-sizing: border-box; + background-color: white; + -webkit-transition: background-color ease-in-out 0.15s; + transition: background-color ease-in-out 0.15s; +} +div.DTE_Field input:focus, +div.DTE_Field textarea:focus { + background-color: #ffffee; +} +div.DTE_Field input[type=color], +div.DTE_Field input[type=date], +div.DTE_Field input[type=datetime], +div.DTE_Field input[type=datetime-local], +div.DTE_Field input[type=email], +div.DTE_Field input[type=month], +div.DTE_Field input[type=number], +div.DTE_Field input[type=password], +div.DTE_Field input[type=search], +div.DTE_Field input[type=tel], +div.DTE_Field input[type=text], +div.DTE_Field input[type=time], +div.DTE_Field input[type=url], +div.DTE_Field input[type=week] { + padding: 5px 4px; + width: 100%; + border: 1px solid #aaa; + border-radius: 3px; +} +div.DTE_Field input[type=checkbox], +div.DTE_Field input[type=radio] { + vertical-align: middle; +} +div.DTE_Field select { + padding: 5px 4px; + border-radius: 3px; + border: 1px solid #aaa; + background: white; + max-width: 100%; +} +div.DTE_Field label div.DTE_Label_Info { + font-size: 0.85em; + margin-top: 0.25em; +} +div.DTE_Field label div.DTE_Label_Info:empty { + margin-top: 0; +} +div.DTE_Field div.DTE_Field_Info, +div.DTE_Field div.DTE_Field_Message, +div.DTE_Field div.DTE_Field_Error { + font-size: 11px; + line-height: 1em; + margin-top: 5px; +} +div.DTE_Field div.DTE_Field_Info:empty, +div.DTE_Field div.DTE_Field_Message:empty, +div.DTE_Field div.DTE_Field_Error:empty { + margin-top: 0; +} +div.DTE_Field div.DTE_Field_Error { + display: none; + color: #b11f1f; +} +div.DTE_Field div.multi-value { + display: none; + border: 1px dotted #666; + border-radius: 3px; + padding: 5px; + background-color: #fafafa; + cursor: pointer; +} +div.DTE_Field div.multi-value span { + font-size: 0.8em; + line-height: 1.25em; + display: block; + color: #666; +} +div.DTE_Field div.multi-value.multi-noEdit { + border: 1px solid #ccc; + cursor: auto; + background-color: #fcfcfc; +} +div.DTE_Field div.multi-value.multi-noEdit:hover { + background-color: #fcfcfc; +} +div.DTE_Field div.multi-value:hover { + background-color: #f1f1f1; +} +div.DTE_Field.disabled { + color: grey; +} +div.DTE_Field.disabled div.multi-value { + cursor: default; + border: 1px dotted #aaa; + background-color: transparent; +} +div.DTE_Field div.multi-restore { + display: none; + margin-top: 0.5em; + font-size: 0.8em; + line-height: 1.25em; + color: #3879d9; +} +div.DTE_Field div.multi-restore:hover { + text-decoration: underline; + cursor: pointer; +} + +div.DTE_Field_Type_textarea textarea { + padding: 3px; + width: 100%; + height: 80px; + border: 1px solid #aaa; +} + +div.DTE_Field.DTE_Field_Type_date img { + vertical-align: middle; + cursor: pointer; +} + +div.DTE_Field_Type_checkbox div.DTE_Field_Input, +div.DTE_Field_Type_radio div.DTE_Field_Input { + padding-top: 1px; +} +div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div, +div.DTE_Field_Type_radio div.DTE_Field_Input > div > div { + margin-bottom: 0.25em; +} +div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div:last-child, +div.DTE_Field_Type_radio div.DTE_Field_Input > div > div:last-child { + margin-bottom: 0; +} +div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div label, +div.DTE_Field_Type_radio div.DTE_Field_Input > div > div label { + margin-left: 0.75em; + vertical-align: middle; +} + +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 1em; + padding-bottom: 0.5em; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dataTables_filter { + padding-right: 1em; + padding-bottom: 0.5em; +} +div.DTE_Field_Type_datatable div.dataTables_filter input { + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons { + padding-right: 1em; + padding-bottom: 0.5em; +} +div.DTE_Field_Type_datatable div.dt-buttons button { + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + padding-bottom: 0; +} +div.DTE_Field_Type_datatable div.dataTables_paginate { + float: none; + text-align: center; + font-size: 0.8em; +} +div.DTE_Field_Type_datatable table.dataTable.no-footer { + border-bottom: 1px solid #aaa !important; +} +div.DTE_Field_Type_datatable table.dataTable thead th, div.DTE_Field_Type_datatable table.dataTable thead td { + font-weight: normal; + padding-top: 3px; + padding-bottom: 3px; + border-bottom: 1px solid #aaa; +} +div.DTE_Field_Type_datatable table.dataTable tbody th:first-child, +div.DTE_Field_Type_datatable table.dataTable tbody td:first-child { + border-left: 1px solid #aaa; +} +div.DTE_Field_Type_datatable table.dataTable tbody th:last-child, +div.DTE_Field_Type_datatable table.dataTable tbody td:last-child { + border-right: 1px solid #aaa; +} +div.DTE_Field_Type_datatable table.dataTable tfoot th, div.DTE_Field_Type_datatable table.dataTable tfoot td { + font-weight: normal; + padding-top: 3px; + padding-bottom: 3px; + border-top: 1px solid #aaa; +} +div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable, +div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable thead th, +div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable thead td { + border-bottom: none !important; +} +div.DTE_Field_Type_datatable div.dataTables_scrollBody { + border: 1px solid #aaa !important; + border-radius: 3px; +} +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable { + border-bottom: none !important; +} +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody th:first-child, +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody td:first-child { + border-left: none; +} +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody th:last-child, +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody td:last-child { + border-right: none; +} + +div.DTE_Body { + padding: 52px 0; +} +div.DTE_Body div.DTE_Body_Content { + position: relative; + overflow: auto; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Form_Info { + padding: 1em 1em 0 1em; + margin: 0; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field { + position: relative; + clear: both; + padding: 5px 10%; + border: 1px solid transparent; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field:after { + display: block; + content: "."; + height: 0; + line-height: 0; + clear: both; + visibility: hidden; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field:hover { + background-color: #f9f9f9; + border: 1px solid #f3f3f3; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field > label { + float: left; + width: 33%; + padding-top: 3px; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field > div.DTE_Field_Input { + float: right; + width: 66%; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field.full { + padding: 5px 0 5px 10%; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input { + float: none; + clear: both; + width: 100%; +} + +html[dir=rtl] div.DTE_Body div.DTE_Body_Content div.DTE_Field > label { + float: right; +} +html[dir=rtl] div.DTE_Body div.DTE_Body_Content div.DTE_Field > div.DTE_Field_Input { + float: left; +} +html[dir=rtl] div.DTE div.DTE_Form_Buttons button { + float: left; +} + +@media only screen and (max-width: 768px) { + div.DTE_Body div.DTE_Body_Content div.DTE_Field { + padding: 5px 10%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full { + padding: 5px 0 5px 10%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > label { + width: 35.5%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > div.DTE_Field_Input { + width: 64.5%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input { + width: 100%; + } +} +@media only screen and (max-width: 640px) { + div.DTE_Body div.DTE_Body_Content div.DTE_Field { + padding: 5px 0; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full { + padding: 5px 0%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > label { + width: 40%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > div.DTE_Field_Input { + width: 60%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input { + width: 100%; + } +} +@media only screen and (max-width: 580px) { + div.DTE_Body div.DTE_Body_Content div.DTE_Field { + position: relative; + clear: both; + padding: 5px 0; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field > label { + float: none; + width: auto; + padding-top: 0; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field > div.DTE_Field_Input { + float: none; + width: auto; + margin-top: 4px; + margin-bottom: 6px; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full, div.DTE_Body div.DTE_Body_Content div.DTE_Field.block { + padding: 5px 0; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > label, + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > div.DTE_Field_Input, div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > label, + div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input { + width: 100%; + } +} +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table { + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + position: relative; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:last-child { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > label { + padding-top: 0; + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div input { + margin: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Form_Info, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after { + color: black; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +div.DTE_Bubble.below div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; +} +div.DTE_Bubble.below div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTE_Bubble_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTE_Bubble_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTE_Inline { + position: relative; + display: table; + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field, +div.DTE_Inline div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field { + padding: 0; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label { + display: none; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week] { + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; +} +div.DTE_Inline div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Field input[type=week] { + margin: -6px 0; +} +div.DTE_Inline div.DTE_Field_Error, +div.DTE_Inline div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; +} +div.DTE_Inline div.DTE_Field_Error:empty, +div.DTE_Inline div.DTE_Form_Error:empty { + margin-top: 0; +} + +span.dtr-data div.DTE_Inline { + display: inline-table; +} + +div.DTED_Lightbox_Wrapper { + position: fixed; + top: 0; + left: 50%; + margin-left: -390px; + width: 780px; + height: 100%; + z-index: 11; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container { + display: table; + height: 100%; + width: 100%; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper { + display: table-cell; + vertical-align: middle; + width: 100%; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content { + position: relative; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE { + background: white; + border-radius: 6px; + border: 1px solid #666; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Header { + right: 0; + width: auto; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Body_Content { + box-sizing: border-box; + background: #fcfcfc; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Footer { + right: 0; + width: auto; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTED_Lightbox_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTED_Lightbox_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTED_Lightbox_Close:hover:after { + color: black; +} + +div.DTED_Lightbox_Wrapper div.DTE_Footer { + display: flex; + justify-content: flex-end; +} +div.DTED_Lightbox_Wrapper div.DTE_Footer_Content { + display: none; +} +div.DTED_Lightbox_Wrapper div.DTE.inFormError div.DTE_Footer { + justify-content: space-between; +} + +div.DTED_Lightbox_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTED_Lightbox_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTED_Lightbox_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Background { + height: 0; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Shown { + display: none; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper { + position: fixed; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + width: auto; + height: auto; + margin-left: 0; + -webkit-overflow-scrolling: touch; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container { + display: block; + height: 100%; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper { + display: block; + height: 100%; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content { + border-radius: 0; + box-shadow: none; + height: 100% !important; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE { + border-radius: 0; + height: 100%; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Header { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Body_Content { + padding-bottom: 52px; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Footer { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTED_Lightbox_Close { + top: 11px; + right: 15px; + background-color: transparent; + border: none; + box-shadow: none; +} + +@media only screen and (max-width: 780px) { + body div.DTED_Lightbox_Wrapper { + position: fixed; + top: 0; + left: 0; + width: 90%; + margin-left: 5%; + } +} +@media only screen and (max-width: 580px) { + body div.DTED_Lightbox_Wrapper { + position: fixed; + top: 0; + left: 0; + width: 100%; + margin-left: 0; + } +} +/* + * Namespace: DTED - DataTables Editor Display - Envelope + */ +div.DTED_Envelope_Wrapper { + position: absolute; + top: 0; + bottom: 0; + left: 50%; + height: 100%; + z-index: 11; + display: none; + overflow: hidden; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Shadow { + position: absolute; + top: -10px; + left: 10px; + right: 10px; + height: 10px; + z-index: 10; + box-shadow: 0 0 20px black; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container { + position: absolute; + top: 0; + left: 5%; + width: 90%; + border-left: 1px solid #777; + border-right: 1px solid #777; + border-bottom: 1px solid #777; + box-shadow: 3px 3px 10px #555; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: white; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Processing_Indicator { + right: 36px; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Footer { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover:after { + color: black; +} + +div.DTED_Envelope_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTED_Envelope_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTED_Envelope_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +table.dataTable tbody tr.highlight { + background-color: #FFFBCC !important; +} +table.dataTable tbody tr.highlight, +table.dataTable tbody tr.noHighlight, +table.dataTable tbody tr.highlight td, +table.dataTable tbody tr.noHighlight td { + -webkit-transition: background-color 500ms linear; + -moz-transition: background-color 500ms linear; + -ms-transition: background-color 500ms linear; + -o-transition: background-color 500ms linear; + transition: background-color 500ms linear; +} +table.dataTable.stripe tbody tr.odd.highlight, table.dataTable.display tbody tr.odd.highlight { + background-color: #f9f5c7; +} +table.dataTable.hover tbody tr:hover.highlight, +table.dataTable.hover tbody tr.odd:hover.highlight, +table.dataTable.hover tbody tr.even:hover.highlight, table.dataTable.display tbody tr:hover.highlight, +table.dataTable.display tbody tr.odd:hover.highlight, +table.dataTable.display tbody tr.even:hover.highlight { + background-color: #f6f2c5; +} +table.dataTable.order-column tbody tr.highlight > .sorting_1, +table.dataTable.order-column tbody tr.highlight > .sorting_2, +table.dataTable.order-column tbody tr.highlight > .sorting_3, table.dataTable.display tbody tr.highlight > .sorting_1, +table.dataTable.display tbody tr.highlight > .sorting_2, +table.dataTable.display tbody tr.highlight > .sorting_3 { + background-color: #faf6c8; +} +table.dataTable.display tbody tr.odd.highlight > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.highlight > .sorting_1 { + background-color: #f1edc1; +} +table.dataTable.display tbody tr.odd.highlight > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.highlight > .sorting_2 { + background-color: #f3efc2; +} +table.dataTable.display tbody tr.odd.highlight > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.highlight > .sorting_3 { + background-color: #f5f1c4; +} +table.dataTable.display tbody tr.even.highlight > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.highlight > .sorting_1 { + background-color: #faf6c8; +} +table.dataTable.display tbody tr.even.highlight > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.highlight > .sorting_2 { + background-color: #fcf8ca; +} +table.dataTable.display tbody tr.even.highlight > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.highlight > .sorting_3 { + background-color: #fefacb; +} +table.dataTable.display tbody tr:hover.highlight > .sorting_1, +table.dataTable.display tbody tr.odd:hover.highlight > .sorting_1, +table.dataTable.display tbody tr.even:hover.highlight > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.highlight > .sorting_1, +table.dataTable.order-column.hover tbody tr.odd:hover.highlight > .sorting_1, +table.dataTable.order-column.hover tbody tr.even:hover.highlight > .sorting_1 { + background-color: #eae6bb; +} +table.dataTable.display tbody tr:hover.highlight > .sorting_2, +table.dataTable.display tbody tr.odd:hover.highlight > .sorting_2, +table.dataTable.display tbody tr.even:hover.highlight > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.highlight > .sorting_2, +table.dataTable.order-column.hover tbody tr.odd:hover.highlight > .sorting_2, +table.dataTable.order-column.hover tbody tr.even:hover.highlight > .sorting_2 { + background-color: #ece8bd; +} +table.dataTable.display tbody tr:hover.highlight > .sorting_3, +table.dataTable.display tbody tr.odd:hover.highlight > .sorting_3, +table.dataTable.display tbody tr.even:hover.highlight > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.highlight > .sorting_3, +table.dataTable.order-column.hover tbody tr.odd:hover.highlight > .sorting_3, +table.dataTable.order-column.hover tbody tr.even:hover.highlight > .sorting_3 { + background-color: #efebbf; +} +table.dataTable tr.dte-inlineAdd td, +table.dataTable tr.dte-inlineAdd th { + vertical-align: top; +} + +div.DTE div.editor_upload { + padding-top: 4px; +} +div.DTE div.editor_upload div.eu_table { + display: table; + width: 100%; +} +div.DTE div.editor_upload div.row { + display: table-row; +} +div.DTE div.editor_upload div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; +} +div.DTE div.editor_upload div.cell + div.cell { + padding-left: 10px; +} +div.DTE div.editor_upload div.row + div.row div.cell { + padding-top: 10px; +} +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; +} +div.DTE div.editor_upload input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; +} +div.DTE div.editor_upload div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; +} +div.DTE div.editor_upload div.drop.over { + border: 3px dashed #111; + color: #111; +} +div.DTE div.editor_upload div.drop span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; +} +div.DTE div.editor_upload div.rendered img { + max-width: 8em; + margin: 0 auto; +} +div.DTE div.editor_upload.noDrop div.drop { + display: none; +} +div.DTE div.editor_upload.noDrop div.row.second { + display: none; +} +div.DTE div.editor_upload.noDrop div.rendered { + margin-top: 10px; +} +div.DTE div.editor_upload.noClear div.clearValue button { + display: none; +} +div.DTE div.editor_upload.multi div.cell { + display: block; + width: 100%; +} +div.DTE div.editor_upload.multi div.cell div.drop { + min-height: 0; +} +div.DTE div.editor_upload.multi div.clearValue { + display: none; +} +div.DTE div.editor_upload.multi ul { + list-style-type: none; + margin: 0; + padding: 0; +} +div.DTE div.editor_upload.multi ul li { + position: relative; + margin-top: 0.5em; +} +div.DTE div.editor_upload.multi ul li:first-child { + margin-top: 0; +} +div.DTE div.editor_upload.multi ul li img { + vertical-align: middle; +} +div.DTE div.editor_upload.multi ul li button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; +} + +div.DTE div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +div.DTE.processing div.DTE_Processing_Indicator { + display: block; +} +div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator { + display: none; +} +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; +} +div.DTE.DTE_Inline div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; +} +div.DTE.DTE_Bubble div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; +} +div.DTE div.DTE_Processing_Indicator span, +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.1); + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; +} +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ""; +} +div.DTE div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +div.DTE div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +div.DTE div.DTE_Processing_Indicator:after { + left: 1em; +} +@-webkit-keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} +@keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.dataTables.min.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.dataTables.min.css new file mode 100644 index 00000000..0d538bff --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.dataTables.min.css @@ -0,0 +1 @@ +div.DTE{position:relative}div.DTE div.DTE_Header{position:absolute;top:0;left:0;height:52px;width:100%;background-color:#e8e9eb;border-bottom:1px solid rgba(0, 0, 0, 0.15);padding:16px 10px 2px 16px;font-size:1.3em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE div.DTE_Body{position:relative}div.DTE div.DTE_Footer{position:absolute;bottom:0;left:0;height:52px;width:100%;background-color:#e8e9eb;border-top:1px solid rgba(0, 0, 0, 0.15);padding:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE div.DTE_Form_Info{margin-bottom:.5em;display:none}div.DTE div.DTE_Form_Content{position:relative;padding:1em}div.DTE div.DTE_Form_Error{float:left;padding:5px;display:none;color:#b11f1f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}div.DTE div.DTE_Form_Buttons{display:flex;flex-direction:row-reverse}div.DTE button.btn,div.DTE div.DTE_Form_Buttons button{position:relative;text-align:center;display:block;margin-top:0;padding:.5em 1em;cursor:pointer;margin-left:.75em;color:inherit;font-size:14px;white-space:nowrap;border:1px solid #999;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;-webkit-box-shadow:1px 1px 3px #ccc;-moz-box-shadow:1px 1px 3px #ccc;box-shadow:1px 1px 3px #ccc;background-color:#dcdcdc;background-image:-webkit-linear-gradient(top, #ffffff 0%, #dcdcdc 100%);background-image:-moz-linear-gradient(top, #ffffff 0%, #dcdcdc 100%);background-image:-ms-linear-gradient(top, #ffffff 0%, #dcdcdc 100%);background-image:-o-linear-gradient(top, #ffffff 0%, #dcdcdc 100%);background-image:linear-gradient(to bottom, #ffffff 0%, #dcdcdc 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#ffffff", EndColorStr="#dcdcdc")}div.DTE button.btn:hover,div.DTE div.DTE_Form_Buttons button:hover{border:1px solid #666;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999;background-color:#ccc;background-image:-webkit-linear-gradient(top, #eaeaea 0%, #cccccc 100%);background-image:-moz-linear-gradient(top, #eaeaea 0%, #cccccc 100%);background-image:-ms-linear-gradient(top, #eaeaea 0%, #cccccc 100%);background-image:-o-linear-gradient(top, #eaeaea 0%, #cccccc 100%);background-image:linear-gradient(to bottom, #eaeaea 0%, #cccccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#eaeaea", EndColorStr="#cccccc")}div.DTE button.btn:active,div.DTE div.DTE_Form_Buttons button:active{-webkit-box-shadow:inset 1px 1px 3px #999;-moz-box-shadow:inset 1px 1px 3px #999;box-shadow:inset 1px 1px 3px #999}div.DTE button.btn:focus,div.DTE div.DTE_Form_Buttons button:focus{border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;background-color:#79ace9;background-image:-webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-moz-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-ms-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-o-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:linear-gradient(to bottom, #bddef4 0%, #79ace9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#bddef4", EndColorStr="#79ace9");outline:none}div.DTE button.btn:focus:after,div.DTE div.DTE_Form_Buttons button:focus:after{position:absolute;top:0;left:0;right:0;bottom:0;background:white;display:block;content:" ";-webkit-animation-duration:1s;-webkit-animation-name:buttonPulse;-webkit-animation-fill-mode:forwards;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear;-webkit-animation-direction:alternate;-moz-animation-duration:1s;-moz-animation-name:buttonPulse;-moz-animation-fill-mode:forwards;-moz-animation-iteration-count:infinite;-moz-animation-timing-function:linear;-moz-animation-direction:alternate;-o-animation-duration:1s;-o-animation-name:buttonPulse;-o-animation-fill-mode:forwards;-o-animation-iteration-count:infinite;-o-animation-timing-function:linear;-o-animation-direction:alternate;animation-duration:1s;animation-name:buttonPulse;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-timing-function:linear;animation-direction:alternate}div.DTE.DTE_Action_Remove div.DTE_Body_Content{text-align:center;padding:20px 0}@-webkit-keyframes buttonPulse{0%{opacity:0}100%{opacity:.2}}@-moz-keyframes buttonPulse{0%{opacity:0}100%{opacity:.2}}@-o-keyframes buttonPulse{0%{opacity:0}100%{opacity:.2}}@keyframes buttonPulse{0%{opacity:0}100%{opacity:.2}}div.DTTT_container{float:left}div.DTE_Field input,div.DTE_Field textarea{box-sizing:border-box;background-color:white;-webkit-transition:background-color ease-in-out .15s;transition:background-color ease-in-out .15s}div.DTE_Field input:focus,div.DTE_Field textarea:focus{background-color:#ffe}div.DTE_Field input[type=color],div.DTE_Field input[type=date],div.DTE_Field input[type=datetime],div.DTE_Field input[type=datetime-local],div.DTE_Field input[type=email],div.DTE_Field input[type=month],div.DTE_Field input[type=number],div.DTE_Field input[type=password],div.DTE_Field input[type=search],div.DTE_Field input[type=tel],div.DTE_Field input[type=text],div.DTE_Field input[type=time],div.DTE_Field input[type=url],div.DTE_Field input[type=week]{padding:5px 4px;width:100%;border:1px solid #aaa;border-radius:3px}div.DTE_Field input[type=checkbox],div.DTE_Field input[type=radio]{vertical-align:middle}div.DTE_Field select{padding:5px 4px;border-radius:3px;border:1px solid #aaa;background:white;max-width:100%}div.DTE_Field label div.DTE_Label_Info{font-size:.85em;margin-top:.25em}div.DTE_Field label div.DTE_Label_Info:empty{margin-top:0}div.DTE_Field div.DTE_Field_Info,div.DTE_Field div.DTE_Field_Message,div.DTE_Field div.DTE_Field_Error{font-size:11px;line-height:1em;margin-top:5px}div.DTE_Field div.DTE_Field_Info:empty,div.DTE_Field div.DTE_Field_Message:empty,div.DTE_Field div.DTE_Field_Error:empty{margin-top:0}div.DTE_Field div.DTE_Field_Error{display:none;color:#b11f1f}div.DTE_Field div.multi-value{display:none;border:1px dotted #666;border-radius:3px;padding:5px;background-color:#fafafa;cursor:pointer}div.DTE_Field div.multi-value span{font-size:.8em;line-height:1.25em;display:block;color:#666}div.DTE_Field div.multi-value.multi-noEdit{border:1px solid #ccc;cursor:auto;background-color:#fcfcfc}div.DTE_Field div.multi-value.multi-noEdit:hover{background-color:#fcfcfc}div.DTE_Field div.multi-value:hover{background-color:#f1f1f1}div.DTE_Field.disabled{color:grey}div.DTE_Field.disabled div.multi-value{cursor:default;border:1px dotted #aaa;background-color:transparent}div.DTE_Field div.multi-restore{display:none;margin-top:.5em;font-size:.8em;line-height:1.25em;color:#3879d9}div.DTE_Field div.multi-restore:hover{text-decoration:underline;cursor:pointer}div.DTE_Field_Type_textarea textarea{padding:3px;width:100%;height:80px;border:1px solid #aaa}div.DTE_Field.DTE_Field_Type_date img{vertical-align:middle;cursor:pointer}div.DTE_Field_Type_checkbox div.DTE_Field_Input,div.DTE_Field_Type_radio div.DTE_Field_Input{padding-top:1px}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div{margin-bottom:.25em}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div:last-child,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div:last-child{margin-bottom:0}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div label,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div label{margin-left:.75em;vertical-align:middle}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;line-height:1.3em;padding-right:1em;padding-bottom:.5em}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dataTables_filter{padding-right:1em;padding-bottom:.5em}div.DTE_Field_Type_datatable div.dataTables_filter input{width:100%}div.DTE_Field_Type_datatable div.dt-buttons{padding-right:1em;padding-bottom:.5em}div.DTE_Field_Type_datatable div.dt-buttons button{width:100%}div.DTE_Field_Type_datatable div.dt-buttons:empty{padding-bottom:0}div.DTE_Field_Type_datatable div.dataTables_paginate{float:none;text-align:center;font-size:.8em}div.DTE_Field_Type_datatable table.dataTable.no-footer{border-bottom:1px solid #aaa !important}div.DTE_Field_Type_datatable table.dataTable thead th,div.DTE_Field_Type_datatable table.dataTable thead td{font-weight:normal;padding-top:3px;padding-bottom:3px;border-bottom:1px solid #aaa}div.DTE_Field_Type_datatable table.dataTable tbody th:first-child,div.DTE_Field_Type_datatable table.dataTable tbody td:first-child{border-left:1px solid #aaa}div.DTE_Field_Type_datatable table.dataTable tbody th:last-child,div.DTE_Field_Type_datatable table.dataTable tbody td:last-child{border-right:1px solid #aaa}div.DTE_Field_Type_datatable table.dataTable tfoot th,div.DTE_Field_Type_datatable table.dataTable tfoot td{font-weight:normal;padding-top:3px;padding-bottom:3px;border-top:1px solid #aaa}div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable,div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable thead th,div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable thead td{border-bottom:none !important}div.DTE_Field_Type_datatable div.dataTables_scrollBody{border:1px solid #aaa !important;border-radius:3px}div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable{border-bottom:none !important}div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody th:first-child,div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody td:first-child{border-left:none}div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody th:last-child,div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody td:last-child{border-right:none}div.DTE_Body{padding:52px 0}div.DTE_Body div.DTE_Body_Content{position:relative;overflow:auto}div.DTE_Body div.DTE_Body_Content div.DTE_Form_Info{padding:1em 1em 0 1em;margin:0}div.DTE_Body div.DTE_Body_Content div.DTE_Field{position:relative;clear:both;padding:5px 10%;border:1px solid transparent}div.DTE_Body div.DTE_Body_Content div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Body div.DTE_Body_Content div.DTE_Field:hover{background-color:#f9f9f9;border:1px solid #f3f3f3}div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:left;width:33%;padding-top:3px}div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:right;width:66%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0 5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{float:none;clear:both;width:100%}html[dir=rtl] div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:right}html[dir=rtl] div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:left}html[dir=rtl] div.DTE div.DTE_Form_Buttons button{float:left}@media only screen and (max-width: 768px){div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0 5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label{width:35.5%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input{width:64.5%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{width:100%}}@media only screen and (max-width: 640px){div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 0}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label{width:40%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input{width:60%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{width:100%}}@media only screen and (max-width: 580px){div.DTE_Body div.DTE_Body_Content div.DTE_Field{position:relative;clear:both;padding:5px 0}div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:none;width:auto;padding-top:0}div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:none;width:auto;margin-top:4px;margin-bottom:6px}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full,div.DTE_Body div.DTE_Body_Content div.DTE_Field.block{padding:5px 0}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label,div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input,div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>label,div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{width:100%}}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0;transition:top .5s ease-in-out 0s}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;border:1px solid #666;padding:1em;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>label{padding-top:0;margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div input{margin:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{padding-top:42px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error{float:none;display:none;padding:0;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after{color:black}div.DTE_Bubble div.DTE_Bubble_Triangle{position:absolute;height:10px;width:10px;top:-6px;background-color:white;border:1px solid #666;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}div.DTE_Bubble.below div.DTE_Bubble_Liner{top:10px;bottom:auto}div.DTE_Bubble.below div.DTE_Bubble_Triangle{top:4px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTE_Bubble_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTE_Bubble_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week]{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Field input[type=week]{margin:-6px 0}div.DTE_Inline div.DTE_Field_Error,div.DTE_Inline div.DTE_Form_Error{font-size:11px;line-height:1.2em;padding:0;margin-top:10px}div.DTE_Inline div.DTE_Field_Error:empty,div.DTE_Inline div.DTE_Form_Error:empty{margin-top:0}span.dtr-data div.DTE_Inline{display:inline-table}div.DTED_Lightbox_Wrapper{position:fixed;top:0;left:50%;margin-left:-390px;width:780px;height:100%;z-index:11}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container{display:table;height:100%;width:100%}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper{display:table-cell;vertical-align:middle;width:100%}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content{position:relative;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE{background:white;border-radius:6px;border:1px solid #666;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Header{right:0;width:auto;border-top-left-radius:6px;border-top-right-radius:6px}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Body_Content{box-sizing:border-box;background:#fcfcfc}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Footer{right:0;width:auto;border-bottom-left-radius:6px;border-bottom-right-radius:6px}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTED_Lightbox_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTED_Lightbox_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTED_Lightbox_Close:hover:after{color:black}div.DTED_Lightbox_Wrapper div.DTE_Footer{display:flex;justify-content:flex-end}div.DTED_Lightbox_Wrapper div.DTE_Footer_Content{display:none}div.DTED_Lightbox_Wrapper div.DTE.inFormError div.DTE_Footer{justify-content:space-between}div.DTED_Lightbox_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTED_Lightbox_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTED_Lightbox_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Background{height:0}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Shown{display:none}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper{position:fixed;top:0px;left:0px;right:0px;bottom:0px;width:auto;height:auto;margin-left:0;-webkit-overflow-scrolling:touch}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container{display:block;height:100%}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper{display:block;height:100%}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content{border-radius:0;box-shadow:none;height:100% !important}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE{border-radius:0;height:100%}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Header{border-top-left-radius:0;border-top-right-radius:0}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Body_Content{padding-bottom:52px}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTE div.DTE_Footer{border-bottom-left-radius:0;border-bottom-right-radius:0}body.DTED_Lightbox_Mobile div.DTED_Lightbox_Wrapper div.DTED_Lightbox_Container div.DTED_Lightbox_Content_Wrapper div.DTED_Lightbox_Content div.DTED_Lightbox_Close{top:11px;right:15px;background-color:transparent;border:none;box-shadow:none}@media only screen and (max-width: 780px){body div.DTED_Lightbox_Wrapper{position:fixed;top:0;left:0;width:90%;margin-left:5%}}@media only screen and (max-width: 580px){body div.DTED_Lightbox_Wrapper{position:fixed;top:0;left:0;width:100%;margin-left:0}}div.DTED_Envelope_Wrapper{position:absolute;top:0;bottom:0;left:50%;height:100%;z-index:11;display:none;overflow:hidden}div.DTED_Envelope_Wrapper div.DTED_Envelope_Shadow{position:absolute;top:-10px;left:10px;right:10px;height:10px;z-index:10;box-shadow:0 0 20px black}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container{position:absolute;top:0;left:5%;width:90%;border-left:1px solid #777;border-right:1px solid #777;border-bottom:1px solid #777;box-shadow:3px 3px 10px #555;border-bottom-left-radius:5px;border-bottom-right-radius:5px;background-color:white}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Processing_Indicator{right:36px}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTE_Footer{border-bottom-left-radius:5px;border-bottom-right-radius:5px}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTED_Envelope_Wrapper div.DTED_Envelope_Container div.DTED_Envelope_Close:hover:after{color:black}div.DTED_Envelope_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTED_Envelope_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTED_Envelope_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}table.dataTable tbody tr.highlight{background-color:#fffbcc !important}table.dataTable tbody tr.highlight,table.dataTable tbody tr.noHighlight,table.dataTable tbody tr.highlight td,table.dataTable tbody tr.noHighlight td{-webkit-transition:background-color 500ms linear;-moz-transition:background-color 500ms linear;-ms-transition:background-color 500ms linear;-o-transition:background-color 500ms linear;transition:background-color 500ms linear}table.dataTable.stripe tbody tr.odd.highlight,table.dataTable.display tbody tr.odd.highlight{background-color:#f9f5c7}table.dataTable.hover tbody tr:hover.highlight,table.dataTable.hover tbody tr.odd:hover.highlight,table.dataTable.hover tbody tr.even:hover.highlight,table.dataTable.display tbody tr:hover.highlight,table.dataTable.display tbody tr.odd:hover.highlight,table.dataTable.display tbody tr.even:hover.highlight{background-color:#f6f2c5}table.dataTable.order-column tbody tr.highlight>.sorting_1,table.dataTable.order-column tbody tr.highlight>.sorting_2,table.dataTable.order-column tbody tr.highlight>.sorting_3,table.dataTable.display tbody tr.highlight>.sorting_1,table.dataTable.display tbody tr.highlight>.sorting_2,table.dataTable.display tbody tr.highlight>.sorting_3{background-color:#faf6c8}table.dataTable.display tbody tr.odd.highlight>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.highlight>.sorting_1{background-color:#f1edc1}table.dataTable.display tbody tr.odd.highlight>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.highlight>.sorting_2{background-color:#f3efc2}table.dataTable.display tbody tr.odd.highlight>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.highlight>.sorting_3{background-color:#f5f1c4}table.dataTable.display tbody tr.even.highlight>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.highlight>.sorting_1{background-color:#faf6c8}table.dataTable.display tbody tr.even.highlight>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.highlight>.sorting_2{background-color:#fcf8ca}table.dataTable.display tbody tr.even.highlight>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.highlight>.sorting_3{background-color:#fefacb}table.dataTable.display tbody tr:hover.highlight>.sorting_1,table.dataTable.display tbody tr.odd:hover.highlight>.sorting_1,table.dataTable.display tbody tr.even:hover.highlight>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.highlight>.sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover.highlight>.sorting_1,table.dataTable.order-column.hover tbody tr.even:hover.highlight>.sorting_1{background-color:#eae6bb}table.dataTable.display tbody tr:hover.highlight>.sorting_2,table.dataTable.display tbody tr.odd:hover.highlight>.sorting_2,table.dataTable.display tbody tr.even:hover.highlight>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.highlight>.sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover.highlight>.sorting_2,table.dataTable.order-column.hover tbody tr.even:hover.highlight>.sorting_2{background-color:#ece8bd}table.dataTable.display tbody tr:hover.highlight>.sorting_3,table.dataTable.display tbody tr.odd:hover.highlight>.sorting_3,table.dataTable.display tbody tr.even:hover.highlight>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.highlight>.sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover.highlight>.sorting_3,table.dataTable.order-column.hover tbody tr.even:hover.highlight>.sorting_3{background-color:#efebbf}table.dataTable tr.dte-inlineAdd td,table.dataTable tr.dte-inlineAdd th{vertical-align:top}div.DTE div.editor_upload{padding-top:4px}div.DTE div.editor_upload div.eu_table{display:table;width:100%}div.DTE div.editor_upload div.row{display:table-row}div.DTE div.editor_upload div.cell{display:table-cell;position:relative;width:50%;vertical-align:top}div.DTE div.editor_upload div.cell+div.cell{padding-left:10px}div.DTE div.editor_upload div.row+div.row div.cell{padding-top:10px}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{width:100%;height:2.3em;font-size:.8em;text-align:center;line-height:1em;margin:0}div.DTE div.editor_upload input[type=file]{position:absolute;top:0;left:0;width:100%;opacity:0}div.DTE div.editor_upload div.drop{position:relative;box-sizing:border-box;width:100%;height:100%;border:3px dashed #ccc;border-radius:6px;min-height:4em;color:#999;text-align:center;padding:1em 2em;line-height:1.1em}div.DTE div.editor_upload div.drop.over{border:3px dashed #111;color:#111}div.DTE div.editor_upload div.drop span{max-width:75%;font-size:.85em;line-height:1em}div.DTE div.editor_upload div.rendered img{max-width:8em;margin:0 auto}div.DTE div.editor_upload.noDrop div.drop{display:none}div.DTE div.editor_upload.noDrop div.row.second{display:none}div.DTE div.editor_upload.noDrop div.rendered{margin-top:10px}div.DTE div.editor_upload.noClear div.clearValue button{display:none}div.DTE div.editor_upload.multi div.cell{display:block;width:100%}div.DTE div.editor_upload.multi div.cell div.drop{min-height:0}div.DTE div.editor_upload.multi div.clearValue{display:none}div.DTE div.editor_upload.multi ul{list-style-type:none;margin:0;padding:0}div.DTE div.editor_upload.multi ul li{position:relative;margin-top:.5em}div.DTE div.editor_upload.multi ul li:first-child{margin-top:0}div.DTE div.editor_upload.multi ul li img{vertical-align:middle}div.DTE div.editor_upload.multi ul li button{position:absolute;width:40px;right:0;top:50%;margin-top:-1.5em}div.DTE div.DTE_Processing_Indicator{position:absolute;top:17px;right:42px;height:2em;width:2em;z-index:20;font-size:12px;display:none;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}div.DTE.processing div.DTE_Processing_Indicator{display:block}div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator{display:none}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:0;font-size:8px}div.DTE.DTE_Inline div.DTE_Processing_Indicator{top:5px;right:6px;font-size:6px}div.DTE.DTE_Bubble div.DTE_Processing_Indicator{top:10px;right:14px;font-size:8px}div.DTE div.DTE_Processing_Indicator span,div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{display:block;background:black;width:.5em;height:1.5em;border:1px solid rgba(0, 0, 0, 0.4);background-color:rgba(0, 0, 0, 0.1);-webkit-animation:editorProcessing .9s infinite ease-in-out;animation:editorProcessing .9s infinite ease-in-out}div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{position:absolute;top:0;content:""}div.DTE div.DTE_Processing_Indicator:before{left:-1em;-webkit-animation-delay:-0.3s;animation-delay:-0.3s}div.DTE div.DTE_Processing_Indicator span{-webkit-animation-delay:-0.15s;animation-delay:-0.15s}div.DTE div.DTE_Processing_Indicator:after{left:1em}@-webkit-keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}@keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.foundation.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.foundation.css new file mode 100644 index 00000000..75ddc350 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.foundation.css @@ -0,0 +1,590 @@ +div.DTE div.DTE_Form_Error { + display: none; + color: #b11f1f; +} +div.DTE div.DTE_Form_Buttons { + display: flex; + flex-direction: row-reverse; +} +div.DTE div.DTE_Form_Buttons button { + margin-left: 0.5em; +} + +div.DTE_Field div.multi-value, +div.DTE_Field div.multi-restore { + display: none; + cursor: pointer; + padding: 0.75rem; +} +div.DTE_Field div.multi-value span, +div.DTE_Field div.multi-restore span { + display: block; + color: #666; + font-size: 0.8em; + line-height: 1.25em; +} +div.DTE_Field div.multi-value:hover, +div.DTE_Field div.multi-restore:hover { + background-color: #e5e5e5; +} +div.DTE_Field div.multi-restore { + margin-top: 0.5em; + font-size: 0.8em; + line-height: 1.25em; + padding: 0.5rem 0.75rem; +} +div.DTE_Field div.label { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +div.DTE_Field div.label:empty { + padding: 0; + margin: 0; +} +div.DTE_Field:after { + display: block; + content: "."; + height: 0; + line-height: 0; + clear: both; + visibility: hidden; +} + +div.reveal-modal button.close { + position: absolute; + top: -1.5em; + right: -2.5em; +} +div.reveal-modal button.close.close-button { + right: 1rem; + top: 0.5rem; + z-index: 100; +} +div.reveal-modal div.DTE_Header { + position: relative; + top: -0.5em; + font-size: 2.05556rem; + line-height: 1.4; +} +div.reveal-modal div.DTE_Form_Content { + width: 75%; + margin: 0 auto; +} +div.reveal-modal div.DTE_Footer { + position: relative; + bottom: -0.5em; + float: right; +} +div.reveal-modal div.DTE_Footer button { + margin-bottom: 0; +} + +div.DTE_Inline { + position: relative; + display: table; + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field, +div.DTE_Inline div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field { + padding: 0; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label { + display: none; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week] { + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; +} +div.DTE_Inline div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Field input[type=week] { + margin: -6px 0; +} +div.DTE_Inline div.DTE_Field_Error, +div.DTE_Inline div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; +} +div.DTE_Inline div.DTE_Field_Error:empty, +div.DTE_Inline div.DTE_Form_Error:empty { + margin-top: 0; +} + +span.dtr-data div.DTE_Inline { + display: inline-table; +} + +div.DTE_Inline div.DTE_Field > div { + width: 100%; + padding: 0; +} +div.DTE_Inline div.DTE_Field input { + height: 30px; + margin-bottom: 0; +} +div.DTE_Inline div.DTE_Field div.label:empty { + display: none; +} + +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table { + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + position: relative; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:last-child { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > label { + padding-top: 0; + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div input { + margin: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Form_Info, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after { + color: black; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +div.DTE_Bubble.below div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; +} +div.DTE_Bubble.below div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTE_Bubble_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTE_Bubble_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTE_Bubble div.DTE_Bubble_Liner { + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + border-radius: 6px; + border: 1px solid rgba(0, 0, 0, 0.2); +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + width: 100%; + float: none; + clear: both; + text-align: left; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label { + padding-bottom: 4px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + margin-top: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + font-size: 14px; + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + margin-top: -2px; + display: block; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + border-color: rgba(0, 0, 0, 0.2); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10; + background-color: rgba(0, 0, 0, 0.05); +} + +div.DTE div.editor_upload { + padding-top: 4px; +} +div.DTE div.editor_upload div.eu_table { + display: table; + width: 100%; +} +div.DTE div.editor_upload div.row { + display: table-row; +} +div.DTE div.editor_upload div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; +} +div.DTE div.editor_upload div.cell + div.cell { + padding-left: 10px; +} +div.DTE div.editor_upload div.row + div.row div.cell { + padding-top: 10px; +} +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; +} +div.DTE div.editor_upload input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; +} +div.DTE div.editor_upload div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; +} +div.DTE div.editor_upload div.drop.over { + border: 3px dashed #111; + color: #111; +} +div.DTE div.editor_upload div.drop span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; +} +div.DTE div.editor_upload div.rendered img { + max-width: 8em; + margin: 0 auto; +} +div.DTE div.editor_upload.noDrop div.drop { + display: none; +} +div.DTE div.editor_upload.noDrop div.row.second { + display: none; +} +div.DTE div.editor_upload.noDrop div.rendered { + margin-top: 10px; +} +div.DTE div.editor_upload.noClear div.clearValue button { + display: none; +} +div.DTE div.editor_upload.multi div.cell { + display: block; + width: 100%; +} +div.DTE div.editor_upload.multi div.cell div.drop { + min-height: 0; +} +div.DTE div.editor_upload.multi div.clearValue { + display: none; +} +div.DTE div.editor_upload.multi ul { + list-style-type: none; + margin: 0; + padding: 0; +} +div.DTE div.editor_upload.multi ul li { + position: relative; + margin-top: 0.5em; +} +div.DTE div.editor_upload.multi ul li:first-child { + margin-top: 0; +} +div.DTE div.editor_upload.multi ul li img { + vertical-align: middle; +} +div.DTE div.editor_upload.multi ul li button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; +} + +div.DTE div.editor_upload button.button, +div.DTE div.editor_upload input[type=file] { + width: 100%; + font-size: 0.8em; + margin-bottom: 0; +} +div.DTE div.editor_upload ul li button { + width: 63px; +} + +div.DTE_Field_Type_datatable div.dataTables_filter input { + height: 1.75rem; + margin-bottom: 0.333rem; +} +div.DTE_Field_Type_datatable div.dt-buttons { + padding-bottom: 0.5em; + width: 100%; + padding-right: 1em; + margin-bottom: 0; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + display: none; +} +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 1em; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate { + float: none; + text-align: center; +} + +div.DTE div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +div.DTE.processing div.DTE_Processing_Indicator { + display: block; +} +div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator { + display: none; +} +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; +} +div.DTE.DTE_Inline div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; +} +div.DTE.DTE_Bubble div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; +} +div.DTE div.DTE_Processing_Indicator span, +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.1); + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; +} +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ""; +} +div.DTE div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +div.DTE div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +div.DTE div.DTE_Processing_Indicator:after { + left: 1em; +} +@-webkit-keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} +@keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} + +div.DTE div.DTE_Processing_Indicator { + top: 26px; + right: 95px; +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.foundation.min.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.foundation.min.css new file mode 100644 index 00000000..846045c1 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.foundation.min.css @@ -0,0 +1 @@ +div.DTE div.DTE_Form_Error{display:none;color:#b11f1f}div.DTE div.DTE_Form_Buttons{display:flex;flex-direction:row-reverse}div.DTE div.DTE_Form_Buttons button{margin-left:.5em}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer;padding:.75rem}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666;font-size:.8em;line-height:1.25em}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#e5e5e5}div.DTE_Field div.multi-restore{margin-top:.5em;font-size:.8em;line-height:1.25em;padding:.5rem .75rem}div.DTE_Field div.label{margin-top:.5rem;margin-bottom:.5rem}div.DTE_Field div.label:empty{padding:0;margin:0}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.reveal-modal button.close{position:absolute;top:-1.5em;right:-2.5em}div.reveal-modal button.close.close-button{right:1rem;top:.5rem;z-index:100}div.reveal-modal div.DTE_Header{position:relative;top:-0.5em;font-size:2.05556rem;line-height:1.4}div.reveal-modal div.DTE_Form_Content{width:75%;margin:0 auto}div.reveal-modal div.DTE_Footer{position:relative;bottom:-0.5em;float:right}div.reveal-modal div.DTE_Footer button{margin-bottom:0}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week]{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Field input[type=week]{margin:-6px 0}div.DTE_Inline div.DTE_Field_Error,div.DTE_Inline div.DTE_Form_Error{font-size:11px;line-height:1.2em;padding:0;margin-top:10px}div.DTE_Inline div.DTE_Field_Error:empty,div.DTE_Inline div.DTE_Form_Error:empty{margin-top:0}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Inline div.DTE_Field>div{width:100%;padding:0}div.DTE_Inline div.DTE_Field input{height:30px;margin-bottom:0}div.DTE_Inline div.DTE_Field div.label:empty{display:none}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0;transition:top .5s ease-in-out 0s}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;border:1px solid #666;padding:1em;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>label{padding-top:0;margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div input{margin:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{padding-top:42px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error{float:none;display:none;padding:0;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after{color:black}div.DTE_Bubble div.DTE_Bubble_Triangle{position:absolute;height:10px;width:10px;top:-6px;background-color:white;border:1px solid #666;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}div.DTE_Bubble.below div.DTE_Bubble_Liner{top:10px;bottom:auto}div.DTE_Bubble.below div.DTE_Bubble_Triangle{top:4px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTE_Bubble_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTE_Bubble_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTE_Bubble div.DTE_Bubble_Liner{box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);border-radius:6px;border:1px solid rgba(0, 0, 0, 0.2)}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{width:100%;float:none;clear:both;text-align:left}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label{padding-bottom:4px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{margin-top:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;font-size:14px;width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{margin-top:-2px;display:block}div.DTE_Bubble div.DTE_Bubble_Triangle{border-color:rgba(0, 0, 0, 0.2)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10;background-color:rgba(0, 0, 0, 0.05)}div.DTE div.editor_upload{padding-top:4px}div.DTE div.editor_upload div.eu_table{display:table;width:100%}div.DTE div.editor_upload div.row{display:table-row}div.DTE div.editor_upload div.cell{display:table-cell;position:relative;width:50%;vertical-align:top}div.DTE div.editor_upload div.cell+div.cell{padding-left:10px}div.DTE div.editor_upload div.row+div.row div.cell{padding-top:10px}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{width:100%;height:2.3em;font-size:.8em;text-align:center;line-height:1em;margin:0}div.DTE div.editor_upload input[type=file]{position:absolute;top:0;left:0;width:100%;opacity:0}div.DTE div.editor_upload div.drop{position:relative;box-sizing:border-box;width:100%;height:100%;border:3px dashed #ccc;border-radius:6px;min-height:4em;color:#999;text-align:center;padding:1em 2em;line-height:1.1em}div.DTE div.editor_upload div.drop.over{border:3px dashed #111;color:#111}div.DTE div.editor_upload div.drop span{max-width:75%;font-size:.85em;line-height:1em}div.DTE div.editor_upload div.rendered img{max-width:8em;margin:0 auto}div.DTE div.editor_upload.noDrop div.drop{display:none}div.DTE div.editor_upload.noDrop div.row.second{display:none}div.DTE div.editor_upload.noDrop div.rendered{margin-top:10px}div.DTE div.editor_upload.noClear div.clearValue button{display:none}div.DTE div.editor_upload.multi div.cell{display:block;width:100%}div.DTE div.editor_upload.multi div.cell div.drop{min-height:0}div.DTE div.editor_upload.multi div.clearValue{display:none}div.DTE div.editor_upload.multi ul{list-style-type:none;margin:0;padding:0}div.DTE div.editor_upload.multi ul li{position:relative;margin-top:.5em}div.DTE div.editor_upload.multi ul li:first-child{margin-top:0}div.DTE div.editor_upload.multi ul li img{vertical-align:middle}div.DTE div.editor_upload.multi ul li button{position:absolute;width:40px;right:0;top:50%;margin-top:-1.5em}div.DTE div.editor_upload button.button,div.DTE div.editor_upload input[type=file]{width:100%;font-size:.8em;margin-bottom:0}div.DTE div.editor_upload ul li button{width:63px}div.DTE_Field_Type_datatable div.dataTables_filter input{height:1.75rem;margin-bottom:.333rem}div.DTE_Field_Type_datatable div.dt-buttons{padding-bottom:.5em;width:100%;padding-right:1em;margin-bottom:0}div.DTE_Field_Type_datatable div.dt-buttons:empty{display:none}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;line-height:1.3em;padding-right:1em}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate{float:none;text-align:center}div.DTE div.DTE_Processing_Indicator{position:absolute;top:17px;right:42px;height:2em;width:2em;z-index:20;font-size:12px;display:none;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}div.DTE.processing div.DTE_Processing_Indicator{display:block}div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator{display:none}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:0;font-size:8px}div.DTE.DTE_Inline div.DTE_Processing_Indicator{top:5px;right:6px;font-size:6px}div.DTE.DTE_Bubble div.DTE_Processing_Indicator{top:10px;right:14px;font-size:8px}div.DTE div.DTE_Processing_Indicator span,div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{display:block;background:black;width:.5em;height:1.5em;border:1px solid rgba(0, 0, 0, 0.4);background-color:rgba(0, 0, 0, 0.1);-webkit-animation:editorProcessing .9s infinite ease-in-out;animation:editorProcessing .9s infinite ease-in-out}div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{position:absolute;top:0;content:""}div.DTE div.DTE_Processing_Indicator:before{left:-1em;-webkit-animation-delay:-0.3s;animation-delay:-0.3s}div.DTE div.DTE_Processing_Indicator span{-webkit-animation-delay:-0.15s;animation-delay:-0.15s}div.DTE div.DTE_Processing_Indicator:after{left:1em}@-webkit-keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}@keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}div.DTE div.DTE_Processing_Indicator{top:26px;right:95px} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.jqueryui.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.jqueryui.css new file mode 100644 index 00000000..9e123399 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.jqueryui.css @@ -0,0 +1,865 @@ +div.DTE_Field input, +div.DTE_Field textarea { + box-sizing: border-box; + background-color: white; + -webkit-transition: background-color ease-in-out 0.15s; + transition: background-color ease-in-out 0.15s; +} +div.DTE_Field input:focus, +div.DTE_Field textarea:focus { + background-color: #ffffee; +} +div.DTE_Field input[type=color], +div.DTE_Field input[type=date], +div.DTE_Field input[type=datetime], +div.DTE_Field input[type=datetime-local], +div.DTE_Field input[type=email], +div.DTE_Field input[type=month], +div.DTE_Field input[type=number], +div.DTE_Field input[type=password], +div.DTE_Field input[type=search], +div.DTE_Field input[type=tel], +div.DTE_Field input[type=text], +div.DTE_Field input[type=time], +div.DTE_Field input[type=url], +div.DTE_Field input[type=week] { + padding: 5px 4px; + width: 100%; + border: 1px solid #aaa; + border-radius: 3px; +} +div.DTE_Field input[type=checkbox], +div.DTE_Field input[type=radio] { + vertical-align: middle; +} +div.DTE_Field select { + padding: 5px 4px; + border-radius: 3px; + border: 1px solid #aaa; + background: white; + max-width: 100%; +} +div.DTE_Field label div.DTE_Label_Info { + font-size: 0.85em; + margin-top: 0.25em; +} +div.DTE_Field label div.DTE_Label_Info:empty { + margin-top: 0; +} +div.DTE_Field div.DTE_Field_Info, +div.DTE_Field div.DTE_Field_Message, +div.DTE_Field div.DTE_Field_Error { + font-size: 11px; + line-height: 1em; + margin-top: 5px; +} +div.DTE_Field div.DTE_Field_Info:empty, +div.DTE_Field div.DTE_Field_Message:empty, +div.DTE_Field div.DTE_Field_Error:empty { + margin-top: 0; +} +div.DTE_Field div.DTE_Field_Error { + display: none; + color: #b11f1f; +} +div.DTE_Field div.multi-value { + display: none; + border: 1px dotted #666; + border-radius: 3px; + padding: 5px; + background-color: #fafafa; + cursor: pointer; +} +div.DTE_Field div.multi-value span { + font-size: 0.8em; + line-height: 1.25em; + display: block; + color: #666; +} +div.DTE_Field div.multi-value.multi-noEdit { + border: 1px solid #ccc; + cursor: auto; + background-color: #fcfcfc; +} +div.DTE_Field div.multi-value.multi-noEdit:hover { + background-color: #fcfcfc; +} +div.DTE_Field div.multi-value:hover { + background-color: #f1f1f1; +} +div.DTE_Field.disabled { + color: grey; +} +div.DTE_Field.disabled div.multi-value { + cursor: default; + border: 1px dotted #aaa; + background-color: transparent; +} +div.DTE_Field div.multi-restore { + display: none; + margin-top: 0.5em; + font-size: 0.8em; + line-height: 1.25em; + color: #3879d9; +} +div.DTE_Field div.multi-restore:hover { + text-decoration: underline; + cursor: pointer; +} + +div.DTE_Field_Type_textarea textarea { + padding: 3px; + width: 100%; + height: 80px; + border: 1px solid #aaa; +} + +div.DTE_Field.DTE_Field_Type_date img { + vertical-align: middle; + cursor: pointer; +} + +div.DTE_Field_Type_checkbox div.DTE_Field_Input, +div.DTE_Field_Type_radio div.DTE_Field_Input { + padding-top: 1px; +} +div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div, +div.DTE_Field_Type_radio div.DTE_Field_Input > div > div { + margin-bottom: 0.25em; +} +div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div:last-child, +div.DTE_Field_Type_radio div.DTE_Field_Input > div > div:last-child { + margin-bottom: 0; +} +div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div label, +div.DTE_Field_Type_radio div.DTE_Field_Input > div > div label { + margin-left: 0.75em; + vertical-align: middle; +} + +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 1em; + padding-bottom: 0.5em; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dataTables_filter { + padding-right: 1em; + padding-bottom: 0.5em; +} +div.DTE_Field_Type_datatable div.dataTables_filter input { + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons { + padding-right: 1em; + padding-bottom: 0.5em; +} +div.DTE_Field_Type_datatable div.dt-buttons button { + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + padding-bottom: 0; +} +div.DTE_Field_Type_datatable div.dataTables_paginate { + float: none; + text-align: center; + font-size: 0.8em; +} +div.DTE_Field_Type_datatable table.dataTable.no-footer { + border-bottom: 1px solid #aaa !important; +} +div.DTE_Field_Type_datatable table.dataTable thead th, div.DTE_Field_Type_datatable table.dataTable thead td { + font-weight: normal; + padding-top: 3px; + padding-bottom: 3px; + border-bottom: 1px solid #aaa; +} +div.DTE_Field_Type_datatable table.dataTable tbody th:first-child, +div.DTE_Field_Type_datatable table.dataTable tbody td:first-child { + border-left: 1px solid #aaa; +} +div.DTE_Field_Type_datatable table.dataTable tbody th:last-child, +div.DTE_Field_Type_datatable table.dataTable tbody td:last-child { + border-right: 1px solid #aaa; +} +div.DTE_Field_Type_datatable table.dataTable tfoot th, div.DTE_Field_Type_datatable table.dataTable tfoot td { + font-weight: normal; + padding-top: 3px; + padding-bottom: 3px; + border-top: 1px solid #aaa; +} +div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable, +div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable thead th, +div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable thead td { + border-bottom: none !important; +} +div.DTE_Field_Type_datatable div.dataTables_scrollBody { + border: 1px solid #aaa !important; + border-radius: 3px; +} +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable { + border-bottom: none !important; +} +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody th:first-child, +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody td:first-child { + border-left: none; +} +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody th:last-child, +div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody td:last-child { + border-right: none; +} + +div.DTE_Body { + padding: 52px 0; +} +div.DTE_Body div.DTE_Body_Content { + position: relative; + overflow: auto; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Form_Info { + padding: 1em 1em 0 1em; + margin: 0; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field { + position: relative; + clear: both; + padding: 5px 10%; + border: 1px solid transparent; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field:after { + display: block; + content: "."; + height: 0; + line-height: 0; + clear: both; + visibility: hidden; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field:hover { + background-color: #f9f9f9; + border: 1px solid #f3f3f3; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field > label { + float: left; + width: 33%; + padding-top: 3px; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field > div.DTE_Field_Input { + float: right; + width: 66%; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field.full { + padding: 5px 0 5px 10%; +} +div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input { + float: none; + clear: both; + width: 100%; +} + +html[dir=rtl] div.DTE_Body div.DTE_Body_Content div.DTE_Field > label { + float: right; +} +html[dir=rtl] div.DTE_Body div.DTE_Body_Content div.DTE_Field > div.DTE_Field_Input { + float: left; +} +html[dir=rtl] div.DTE div.DTE_Form_Buttons button { + float: left; +} + +@media only screen and (max-width: 768px) { + div.DTE_Body div.DTE_Body_Content div.DTE_Field { + padding: 5px 10%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full { + padding: 5px 0 5px 10%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > label { + width: 35.5%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > div.DTE_Field_Input { + width: 64.5%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input { + width: 100%; + } +} +@media only screen and (max-width: 640px) { + div.DTE_Body div.DTE_Body_Content div.DTE_Field { + padding: 5px 0; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full { + padding: 5px 0%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > label { + width: 40%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > div.DTE_Field_Input { + width: 60%; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input { + width: 100%; + } +} +@media only screen and (max-width: 580px) { + div.DTE_Body div.DTE_Body_Content div.DTE_Field { + position: relative; + clear: both; + padding: 5px 0; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field > label { + float: none; + width: auto; + padding-top: 0; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field > div.DTE_Field_Input { + float: none; + width: auto; + margin-top: 4px; + margin-bottom: 6px; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full, div.DTE_Body div.DTE_Body_Content div.DTE_Field.block { + padding: 5px 0; + } + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > label, + div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > div.DTE_Field_Input, div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > label, + div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input { + width: 100%; + } +} +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table { + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + position: relative; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:last-child { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > label { + padding-top: 0; + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div input { + margin: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Form_Info, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after { + color: black; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +div.DTE_Bubble.below div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; +} +div.DTE_Bubble.below div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTE_Bubble_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTE_Bubble_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTE_Inline { + position: relative; + display: table; + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field, +div.DTE_Inline div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field { + padding: 0; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label { + display: none; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week] { + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; +} +div.DTE_Inline div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Field input[type=week] { + margin: -6px 0; +} +div.DTE_Inline div.DTE_Field_Error, +div.DTE_Inline div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; +} +div.DTE_Inline div.DTE_Field_Error:empty, +div.DTE_Inline div.DTE_Form_Error:empty { + margin-top: 0; +} + +span.dtr-data div.DTE_Inline { + display: inline-table; +} + +table.dataTable tbody tr.highlight { + background-color: #FFFBCC !important; +} +table.dataTable tbody tr.highlight, +table.dataTable tbody tr.noHighlight, +table.dataTable tbody tr.highlight td, +table.dataTable tbody tr.noHighlight td { + -webkit-transition: background-color 500ms linear; + -moz-transition: background-color 500ms linear; + -ms-transition: background-color 500ms linear; + -o-transition: background-color 500ms linear; + transition: background-color 500ms linear; +} +table.dataTable.stripe tbody tr.odd.highlight, table.dataTable.display tbody tr.odd.highlight { + background-color: #f9f5c7; +} +table.dataTable.hover tbody tr:hover.highlight, +table.dataTable.hover tbody tr.odd:hover.highlight, +table.dataTable.hover tbody tr.even:hover.highlight, table.dataTable.display tbody tr:hover.highlight, +table.dataTable.display tbody tr.odd:hover.highlight, +table.dataTable.display tbody tr.even:hover.highlight { + background-color: #f6f2c5; +} +table.dataTable.order-column tbody tr.highlight > .sorting_1, +table.dataTable.order-column tbody tr.highlight > .sorting_2, +table.dataTable.order-column tbody tr.highlight > .sorting_3, table.dataTable.display tbody tr.highlight > .sorting_1, +table.dataTable.display tbody tr.highlight > .sorting_2, +table.dataTable.display tbody tr.highlight > .sorting_3 { + background-color: #faf6c8; +} +table.dataTable.display tbody tr.odd.highlight > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.highlight > .sorting_1 { + background-color: #f1edc1; +} +table.dataTable.display tbody tr.odd.highlight > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.highlight > .sorting_2 { + background-color: #f3efc2; +} +table.dataTable.display tbody tr.odd.highlight > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.highlight > .sorting_3 { + background-color: #f5f1c4; +} +table.dataTable.display tbody tr.even.highlight > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.highlight > .sorting_1 { + background-color: #faf6c8; +} +table.dataTable.display tbody tr.even.highlight > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.highlight > .sorting_2 { + background-color: #fcf8ca; +} +table.dataTable.display tbody tr.even.highlight > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.highlight > .sorting_3 { + background-color: #fefacb; +} +table.dataTable.display tbody tr:hover.highlight > .sorting_1, +table.dataTable.display tbody tr.odd:hover.highlight > .sorting_1, +table.dataTable.display tbody tr.even:hover.highlight > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.highlight > .sorting_1, +table.dataTable.order-column.hover tbody tr.odd:hover.highlight > .sorting_1, +table.dataTable.order-column.hover tbody tr.even:hover.highlight > .sorting_1 { + background-color: #eae6bb; +} +table.dataTable.display tbody tr:hover.highlight > .sorting_2, +table.dataTable.display tbody tr.odd:hover.highlight > .sorting_2, +table.dataTable.display tbody tr.even:hover.highlight > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.highlight > .sorting_2, +table.dataTable.order-column.hover tbody tr.odd:hover.highlight > .sorting_2, +table.dataTable.order-column.hover tbody tr.even:hover.highlight > .sorting_2 { + background-color: #ece8bd; +} +table.dataTable.display tbody tr:hover.highlight > .sorting_3, +table.dataTable.display tbody tr.odd:hover.highlight > .sorting_3, +table.dataTable.display tbody tr.even:hover.highlight > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.highlight > .sorting_3, +table.dataTable.order-column.hover tbody tr.odd:hover.highlight > .sorting_3, +table.dataTable.order-column.hover tbody tr.even:hover.highlight > .sorting_3 { + background-color: #efebbf; +} +table.dataTable tr.dte-inlineAdd td, +table.dataTable tr.dte-inlineAdd th { + vertical-align: top; +} + +div.DTE div.editor_upload { + padding-top: 4px; +} +div.DTE div.editor_upload div.eu_table { + display: table; + width: 100%; +} +div.DTE div.editor_upload div.row { + display: table-row; +} +div.DTE div.editor_upload div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; +} +div.DTE div.editor_upload div.cell + div.cell { + padding-left: 10px; +} +div.DTE div.editor_upload div.row + div.row div.cell { + padding-top: 10px; +} +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; +} +div.DTE div.editor_upload input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; +} +div.DTE div.editor_upload div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; +} +div.DTE div.editor_upload div.drop.over { + border: 3px dashed #111; + color: #111; +} +div.DTE div.editor_upload div.drop span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; +} +div.DTE div.editor_upload div.rendered img { + max-width: 8em; + margin: 0 auto; +} +div.DTE div.editor_upload.noDrop div.drop { + display: none; +} +div.DTE div.editor_upload.noDrop div.row.second { + display: none; +} +div.DTE div.editor_upload.noDrop div.rendered { + margin-top: 10px; +} +div.DTE div.editor_upload.noClear div.clearValue button { + display: none; +} +div.DTE div.editor_upload.multi div.cell { + display: block; + width: 100%; +} +div.DTE div.editor_upload.multi div.cell div.drop { + min-height: 0; +} +div.DTE div.editor_upload.multi div.clearValue { + display: none; +} +div.DTE div.editor_upload.multi ul { + list-style-type: none; + margin: 0; + padding: 0; +} +div.DTE div.editor_upload.multi ul li { + position: relative; + margin-top: 0.5em; +} +div.DTE div.editor_upload.multi ul li:first-child { + margin-top: 0; +} +div.DTE div.editor_upload.multi ul li img { + vertical-align: middle; +} +div.DTE div.editor_upload.multi ul li button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; +} + +div.DTE div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +div.DTE.processing div.DTE_Processing_Indicator { + display: block; +} +div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator { + display: none; +} +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; +} +div.DTE.DTE_Inline div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; +} +div.DTE.DTE_Bubble div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; +} +div.DTE div.DTE_Processing_Indicator span, +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.1); + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; +} +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ""; +} +div.DTE div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +div.DTE div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +div.DTE div.DTE_Processing_Indicator:after { + left: 1em; +} +@-webkit-keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} +@keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} + +div.DTE { + font-size: 0.91em; +} +div.DTE div.DTE_Header { + display: none; +} +div.DTE div.DTE_Body { + padding: 0; +} +div.DTE div.DTE_Body div.DTE_Body_Content { + overflow: hidden; +} +div.DTE div.DTE_Body div.DTE_Body_Content div.DTE_Field { + padding: 5px 5%; +} +div.DTE div.DTE_Footer { + display: none; +} +div.DTE div.DTE_Form_Error { + padding-top: 1em; + color: red; + display: none; + color: #b11f1f; +} +div.DTE div.DTE_Processing_Indicator { + top: 12px; + right: 2px; + font-size: 0.8em; +} +div.DTE div.DTE_Form_Buttons { + text-align: right; + padding: 0; + display: flex; + flex-direction: row-reverse; +} + +div.DTE_Field_Type_datatable div.dataTables_filter { + padding-bottom: 0.5em; +} +div.DTE_Field_Type_datatable div.dt-buttons { + float: none; +} +div.DTE_Field_Type_datatable div.dt-buttons button { + margin-bottom: 3px; +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.jqueryui.min.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.jqueryui.min.css new file mode 100644 index 00000000..bf12892a --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.jqueryui.min.css @@ -0,0 +1 @@ +div.DTE_Field input,div.DTE_Field textarea{box-sizing:border-box;background-color:white;-webkit-transition:background-color ease-in-out .15s;transition:background-color ease-in-out .15s}div.DTE_Field input:focus,div.DTE_Field textarea:focus{background-color:#ffe}div.DTE_Field input[type=color],div.DTE_Field input[type=date],div.DTE_Field input[type=datetime],div.DTE_Field input[type=datetime-local],div.DTE_Field input[type=email],div.DTE_Field input[type=month],div.DTE_Field input[type=number],div.DTE_Field input[type=password],div.DTE_Field input[type=search],div.DTE_Field input[type=tel],div.DTE_Field input[type=text],div.DTE_Field input[type=time],div.DTE_Field input[type=url],div.DTE_Field input[type=week]{padding:5px 4px;width:100%;border:1px solid #aaa;border-radius:3px}div.DTE_Field input[type=checkbox],div.DTE_Field input[type=radio]{vertical-align:middle}div.DTE_Field select{padding:5px 4px;border-radius:3px;border:1px solid #aaa;background:white;max-width:100%}div.DTE_Field label div.DTE_Label_Info{font-size:.85em;margin-top:.25em}div.DTE_Field label div.DTE_Label_Info:empty{margin-top:0}div.DTE_Field div.DTE_Field_Info,div.DTE_Field div.DTE_Field_Message,div.DTE_Field div.DTE_Field_Error{font-size:11px;line-height:1em;margin-top:5px}div.DTE_Field div.DTE_Field_Info:empty,div.DTE_Field div.DTE_Field_Message:empty,div.DTE_Field div.DTE_Field_Error:empty{margin-top:0}div.DTE_Field div.DTE_Field_Error{display:none;color:#b11f1f}div.DTE_Field div.multi-value{display:none;border:1px dotted #666;border-radius:3px;padding:5px;background-color:#fafafa;cursor:pointer}div.DTE_Field div.multi-value span{font-size:.8em;line-height:1.25em;display:block;color:#666}div.DTE_Field div.multi-value.multi-noEdit{border:1px solid #ccc;cursor:auto;background-color:#fcfcfc}div.DTE_Field div.multi-value.multi-noEdit:hover{background-color:#fcfcfc}div.DTE_Field div.multi-value:hover{background-color:#f1f1f1}div.DTE_Field.disabled{color:grey}div.DTE_Field.disabled div.multi-value{cursor:default;border:1px dotted #aaa;background-color:transparent}div.DTE_Field div.multi-restore{display:none;margin-top:.5em;font-size:.8em;line-height:1.25em;color:#3879d9}div.DTE_Field div.multi-restore:hover{text-decoration:underline;cursor:pointer}div.DTE_Field_Type_textarea textarea{padding:3px;width:100%;height:80px;border:1px solid #aaa}div.DTE_Field.DTE_Field_Type_date img{vertical-align:middle;cursor:pointer}div.DTE_Field_Type_checkbox div.DTE_Field_Input,div.DTE_Field_Type_radio div.DTE_Field_Input{padding-top:1px}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div{margin-bottom:.25em}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div:last-child,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div:last-child{margin-bottom:0}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div label,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div label{margin-left:.75em;vertical-align:middle}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;line-height:1.3em;padding-right:1em;padding-bottom:.5em}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dataTables_filter{padding-right:1em;padding-bottom:.5em}div.DTE_Field_Type_datatable div.dataTables_filter input{width:100%}div.DTE_Field_Type_datatable div.dt-buttons{padding-right:1em;padding-bottom:.5em}div.DTE_Field_Type_datatable div.dt-buttons button{width:100%}div.DTE_Field_Type_datatable div.dt-buttons:empty{padding-bottom:0}div.DTE_Field_Type_datatable div.dataTables_paginate{float:none;text-align:center;font-size:.8em}div.DTE_Field_Type_datatable table.dataTable.no-footer{border-bottom:1px solid #aaa !important}div.DTE_Field_Type_datatable table.dataTable thead th,div.DTE_Field_Type_datatable table.dataTable thead td{font-weight:normal;padding-top:3px;padding-bottom:3px;border-bottom:1px solid #aaa}div.DTE_Field_Type_datatable table.dataTable tbody th:first-child,div.DTE_Field_Type_datatable table.dataTable tbody td:first-child{border-left:1px solid #aaa}div.DTE_Field_Type_datatable table.dataTable tbody th:last-child,div.DTE_Field_Type_datatable table.dataTable tbody td:last-child{border-right:1px solid #aaa}div.DTE_Field_Type_datatable table.dataTable tfoot th,div.DTE_Field_Type_datatable table.dataTable tfoot td{font-weight:normal;padding-top:3px;padding-bottom:3px;border-top:1px solid #aaa}div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable,div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable thead th,div.DTE_Field_Type_datatable div.dataTables_scrollHead table.dataTable thead td{border-bottom:none !important}div.DTE_Field_Type_datatable div.dataTables_scrollBody{border:1px solid #aaa !important;border-radius:3px}div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable{border-bottom:none !important}div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody th:first-child,div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody td:first-child{border-left:none}div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody th:last-child,div.DTE_Field_Type_datatable div.dataTables_scrollBody table.dataTable tbody td:last-child{border-right:none}div.DTE_Body{padding:52px 0}div.DTE_Body div.DTE_Body_Content{position:relative;overflow:auto}div.DTE_Body div.DTE_Body_Content div.DTE_Form_Info{padding:1em 1em 0 1em;margin:0}div.DTE_Body div.DTE_Body_Content div.DTE_Field{position:relative;clear:both;padding:5px 10%;border:1px solid transparent}div.DTE_Body div.DTE_Body_Content div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Body div.DTE_Body_Content div.DTE_Field:hover{background-color:#f9f9f9;border:1px solid #f3f3f3}div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:left;width:33%;padding-top:3px}div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:right;width:66%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0 5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{float:none;clear:both;width:100%}html[dir=rtl] div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:right}html[dir=rtl] div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:left}html[dir=rtl] div.DTE div.DTE_Form_Buttons button{float:left}@media only screen and (max-width: 768px){div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0 5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label{width:35.5%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input{width:64.5%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{width:100%}}@media only screen and (max-width: 640px){div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 0}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label{width:40%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input{width:60%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{width:100%}}@media only screen and (max-width: 580px){div.DTE_Body div.DTE_Body_Content div.DTE_Field{position:relative;clear:both;padding:5px 0}div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:none;width:auto;padding-top:0}div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:none;width:auto;margin-top:4px;margin-bottom:6px}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full,div.DTE_Body div.DTE_Body_Content div.DTE_Field.block{padding:5px 0}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label,div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input,div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>label,div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{width:100%}}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0;transition:top .5s ease-in-out 0s}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;border:1px solid #666;padding:1em;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>label{padding-top:0;margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div input{margin:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{padding-top:42px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error{float:none;display:none;padding:0;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after{color:black}div.DTE_Bubble div.DTE_Bubble_Triangle{position:absolute;height:10px;width:10px;top:-6px;background-color:white;border:1px solid #666;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}div.DTE_Bubble.below div.DTE_Bubble_Liner{top:10px;bottom:auto}div.DTE_Bubble.below div.DTE_Bubble_Triangle{top:4px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTE_Bubble_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTE_Bubble_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week]{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Field input[type=week]{margin:-6px 0}div.DTE_Inline div.DTE_Field_Error,div.DTE_Inline div.DTE_Form_Error{font-size:11px;line-height:1.2em;padding:0;margin-top:10px}div.DTE_Inline div.DTE_Field_Error:empty,div.DTE_Inline div.DTE_Form_Error:empty{margin-top:0}span.dtr-data div.DTE_Inline{display:inline-table}table.dataTable tbody tr.highlight{background-color:#fffbcc !important}table.dataTable tbody tr.highlight,table.dataTable tbody tr.noHighlight,table.dataTable tbody tr.highlight td,table.dataTable tbody tr.noHighlight td{-webkit-transition:background-color 500ms linear;-moz-transition:background-color 500ms linear;-ms-transition:background-color 500ms linear;-o-transition:background-color 500ms linear;transition:background-color 500ms linear}table.dataTable.stripe tbody tr.odd.highlight,table.dataTable.display tbody tr.odd.highlight{background-color:#f9f5c7}table.dataTable.hover tbody tr:hover.highlight,table.dataTable.hover tbody tr.odd:hover.highlight,table.dataTable.hover tbody tr.even:hover.highlight,table.dataTable.display tbody tr:hover.highlight,table.dataTable.display tbody tr.odd:hover.highlight,table.dataTable.display tbody tr.even:hover.highlight{background-color:#f6f2c5}table.dataTable.order-column tbody tr.highlight>.sorting_1,table.dataTable.order-column tbody tr.highlight>.sorting_2,table.dataTable.order-column tbody tr.highlight>.sorting_3,table.dataTable.display tbody tr.highlight>.sorting_1,table.dataTable.display tbody tr.highlight>.sorting_2,table.dataTable.display tbody tr.highlight>.sorting_3{background-color:#faf6c8}table.dataTable.display tbody tr.odd.highlight>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.highlight>.sorting_1{background-color:#f1edc1}table.dataTable.display tbody tr.odd.highlight>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.highlight>.sorting_2{background-color:#f3efc2}table.dataTable.display tbody tr.odd.highlight>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.highlight>.sorting_3{background-color:#f5f1c4}table.dataTable.display tbody tr.even.highlight>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.highlight>.sorting_1{background-color:#faf6c8}table.dataTable.display tbody tr.even.highlight>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.highlight>.sorting_2{background-color:#fcf8ca}table.dataTable.display tbody tr.even.highlight>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.highlight>.sorting_3{background-color:#fefacb}table.dataTable.display tbody tr:hover.highlight>.sorting_1,table.dataTable.display tbody tr.odd:hover.highlight>.sorting_1,table.dataTable.display tbody tr.even:hover.highlight>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.highlight>.sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover.highlight>.sorting_1,table.dataTable.order-column.hover tbody tr.even:hover.highlight>.sorting_1{background-color:#eae6bb}table.dataTable.display tbody tr:hover.highlight>.sorting_2,table.dataTable.display tbody tr.odd:hover.highlight>.sorting_2,table.dataTable.display tbody tr.even:hover.highlight>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.highlight>.sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover.highlight>.sorting_2,table.dataTable.order-column.hover tbody tr.even:hover.highlight>.sorting_2{background-color:#ece8bd}table.dataTable.display tbody tr:hover.highlight>.sorting_3,table.dataTable.display tbody tr.odd:hover.highlight>.sorting_3,table.dataTable.display tbody tr.even:hover.highlight>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.highlight>.sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover.highlight>.sorting_3,table.dataTable.order-column.hover tbody tr.even:hover.highlight>.sorting_3{background-color:#efebbf}table.dataTable tr.dte-inlineAdd td,table.dataTable tr.dte-inlineAdd th{vertical-align:top}div.DTE div.editor_upload{padding-top:4px}div.DTE div.editor_upload div.eu_table{display:table;width:100%}div.DTE div.editor_upload div.row{display:table-row}div.DTE div.editor_upload div.cell{display:table-cell;position:relative;width:50%;vertical-align:top}div.DTE div.editor_upload div.cell+div.cell{padding-left:10px}div.DTE div.editor_upload div.row+div.row div.cell{padding-top:10px}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{width:100%;height:2.3em;font-size:.8em;text-align:center;line-height:1em;margin:0}div.DTE div.editor_upload input[type=file]{position:absolute;top:0;left:0;width:100%;opacity:0}div.DTE div.editor_upload div.drop{position:relative;box-sizing:border-box;width:100%;height:100%;border:3px dashed #ccc;border-radius:6px;min-height:4em;color:#999;text-align:center;padding:1em 2em;line-height:1.1em}div.DTE div.editor_upload div.drop.over{border:3px dashed #111;color:#111}div.DTE div.editor_upload div.drop span{max-width:75%;font-size:.85em;line-height:1em}div.DTE div.editor_upload div.rendered img{max-width:8em;margin:0 auto}div.DTE div.editor_upload.noDrop div.drop{display:none}div.DTE div.editor_upload.noDrop div.row.second{display:none}div.DTE div.editor_upload.noDrop div.rendered{margin-top:10px}div.DTE div.editor_upload.noClear div.clearValue button{display:none}div.DTE div.editor_upload.multi div.cell{display:block;width:100%}div.DTE div.editor_upload.multi div.cell div.drop{min-height:0}div.DTE div.editor_upload.multi div.clearValue{display:none}div.DTE div.editor_upload.multi ul{list-style-type:none;margin:0;padding:0}div.DTE div.editor_upload.multi ul li{position:relative;margin-top:.5em}div.DTE div.editor_upload.multi ul li:first-child{margin-top:0}div.DTE div.editor_upload.multi ul li img{vertical-align:middle}div.DTE div.editor_upload.multi ul li button{position:absolute;width:40px;right:0;top:50%;margin-top:-1.5em}div.DTE div.DTE_Processing_Indicator{position:absolute;top:17px;right:42px;height:2em;width:2em;z-index:20;font-size:12px;display:none;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}div.DTE.processing div.DTE_Processing_Indicator{display:block}div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator{display:none}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:0;font-size:8px}div.DTE.DTE_Inline div.DTE_Processing_Indicator{top:5px;right:6px;font-size:6px}div.DTE.DTE_Bubble div.DTE_Processing_Indicator{top:10px;right:14px;font-size:8px}div.DTE div.DTE_Processing_Indicator span,div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{display:block;background:black;width:.5em;height:1.5em;border:1px solid rgba(0, 0, 0, 0.4);background-color:rgba(0, 0, 0, 0.1);-webkit-animation:editorProcessing .9s infinite ease-in-out;animation:editorProcessing .9s infinite ease-in-out}div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{position:absolute;top:0;content:""}div.DTE div.DTE_Processing_Indicator:before{left:-1em;-webkit-animation-delay:-0.3s;animation-delay:-0.3s}div.DTE div.DTE_Processing_Indicator span{-webkit-animation-delay:-0.15s;animation-delay:-0.15s}div.DTE div.DTE_Processing_Indicator:after{left:1em}@-webkit-keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}@keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}div.DTE{font-size:.91em}div.DTE div.DTE_Header{display:none}div.DTE div.DTE_Body{padding:0}div.DTE div.DTE_Body div.DTE_Body_Content{overflow:hidden}div.DTE div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 5%}div.DTE div.DTE_Footer{display:none}div.DTE div.DTE_Form_Error{padding-top:1em;color:red;display:none;color:#b11f1f}div.DTE div.DTE_Processing_Indicator{top:12px;right:2px;font-size:.8em}div.DTE div.DTE_Form_Buttons{text-align:right;padding:0;display:flex;flex-direction:row-reverse}div.DTE_Field_Type_datatable div.dataTables_filter{padding-bottom:.5em}div.DTE_Field_Type_datatable div.dt-buttons{float:none}div.DTE_Field_Type_datatable div.dt-buttons button{margin-bottom:3px} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.semanticui.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.semanticui.css new file mode 100644 index 00000000..ad00ca84 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.semanticui.css @@ -0,0 +1,602 @@ +div.DTE div.DTE_Form_Error { + display: none; + color: #b11f1f; +} +div.DTE div.DTE_Form_Buttons { + display: flex; + flex-direction: row-reverse; +} +div.DTE label { + padding-top: 9px !important; + align-self: flex-start; + justify-content: flex-end; +} +div.DTE div.eight.wide.field { + flex-direction: column; +} +div.DTE div.DTE_Field_InputControl { + width: 100%; + margin: 0 !important; +} +div.DTE div.ui.message:empty { + display: none; +} + +div.DTE_Field div.ui.message { + width: 100%; +} +div.DTE_Field div.multi-value, +div.DTE_Field div.multi-restore { + display: none; + cursor: pointer; + margin-top: 0; +} +div.DTE_Field div.multi-value span, +div.DTE_Field div.multi-restore span { + display: block; + color: #666; + font-size: 0.85em; + line-height: 1.35em; +} +div.DTE_Field div.multi-value:hover, +div.DTE_Field div.multi-restore:hover { + background-color: #f1f1f1; +} +div.DTE_Field div.multi-restore { + margin-top: 0.5em; + font-size: 0.8em; + line-height: 1.25em; +} +div.DTE_Field:after { + display: block; + content: "."; + height: 0; + line-height: 0; + clear: both; + visibility: hidden; +} + +div.DTE_Inline { + position: relative; + display: table; + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field, +div.DTE_Inline div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field { + padding: 0; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label { + display: none; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week] { + width: 100%; +} +div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button, +div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; +} +div.DTE_Inline div.DTE_Field input[type=color], +div.DTE_Inline div.DTE_Field input[type=date], +div.DTE_Inline div.DTE_Field input[type=datetime], +div.DTE_Inline div.DTE_Field input[type=datetime-local], +div.DTE_Inline div.DTE_Field input[type=email], +div.DTE_Inline div.DTE_Field input[type=month], +div.DTE_Inline div.DTE_Field input[type=number], +div.DTE_Inline div.DTE_Field input[type=password], +div.DTE_Inline div.DTE_Field input[type=search], +div.DTE_Inline div.DTE_Field input[type=tel], +div.DTE_Inline div.DTE_Field input[type=text], +div.DTE_Inline div.DTE_Field input[type=time], +div.DTE_Inline div.DTE_Field input[type=url], +div.DTE_Inline div.DTE_Field input[type=week] { + margin: -6px 0; +} +div.DTE_Inline div.DTE_Field_Error, +div.DTE_Inline div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; +} +div.DTE_Inline div.DTE_Field_Error:empty, +div.DTE_Inline div.DTE_Form_Error:empty { + margin-top: 0; +} + +span.dtr-data div.DTE_Inline { + display: inline-table; +} + +div.DTE.DTE_Inline.ui.form label { + display: none !important; +} +div.DTE.DTE_Inline.ui.form div.DTE_Field { + width: 100%; + margin: 0 !important; +} +div.DTE.DTE_Inline.ui.form div.DTE_Field div.DTE_Field_Input { + width: 100% !important; + box-sizing: border-box; +} +div.DTE.DTE_Inline.ui.form div.DTE_Field > div { + width: 100%; + padding: 0; +} +div.DTE.DTE_Inline.ui.form.DTE_Processing:after { + top: 5px; +} + +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0, 0, 0, 0.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table { + width: 100%; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + position: relative; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:last-child { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > label { + padding-top: 0; + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div input { + margin: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button { + margin-bottom: 0; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Form_Info, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after { + content: "×"; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: "Courier New", Courier, monospace; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after { + color: black; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +div.DTE_Bubble.below div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; +} +div.DTE_Bubble.below div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} + +div.DTE_Bubble_Background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */ + z-index: 10; +} +div.DTE_Bubble_Background > div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; +} +div.DTE_Bubble_Background > div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled="false"); +} + +div.DTE_Bubble { + z-index: 1001; +} +div.DTE_Bubble div.DTE_Bubble_Liner { + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + border-radius: 6px; + padding: 1em; + border: 1px solid rgba(0, 0, 0, 0.2); +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field { + flex-direction: column; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label, +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field > div { + justify-content: flex-start; + width: 100% !important; + float: none; + clear: both; + text-align: left; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field label { + padding-bottom: 4px; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_Field:first-child label { + padding-top: 0 !important; +} +div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons { + text-align: right; + padding: 0; +} +div.DTE_Bubble div.DTE_Bubble_Triangle { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-left: 1px solid rgba(0, 0, 0, 0.2); +} + +div.DTE div.editor_upload { + padding-top: 4px; +} +div.DTE div.editor_upload div.eu_table { + display: table; + width: 100%; +} +div.DTE div.editor_upload div.row { + display: table-row; +} +div.DTE div.editor_upload div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; +} +div.DTE div.editor_upload div.cell + div.cell { + padding-left: 10px; +} +div.DTE div.editor_upload div.row + div.row div.cell { + padding-top: 10px; +} +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; +} +div.DTE div.editor_upload input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; +} +div.DTE div.editor_upload div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; +} +div.DTE div.editor_upload div.drop.over { + border: 3px dashed #111; + color: #111; +} +div.DTE div.editor_upload div.drop span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; +} +div.DTE div.editor_upload div.rendered img { + max-width: 8em; + margin: 0 auto; +} +div.DTE div.editor_upload.noDrop div.drop { + display: none; +} +div.DTE div.editor_upload.noDrop div.row.second { + display: none; +} +div.DTE div.editor_upload.noDrop div.rendered { + margin-top: 10px; +} +div.DTE div.editor_upload.noClear div.clearValue button { + display: none; +} +div.DTE div.editor_upload.multi div.cell { + display: block; + width: 100%; +} +div.DTE div.editor_upload.multi div.cell div.drop { + min-height: 0; +} +div.DTE div.editor_upload.multi div.clearValue { + display: none; +} +div.DTE div.editor_upload.multi ul { + list-style-type: none; + margin: 0; + padding: 0; +} +div.DTE div.editor_upload.multi ul li { + position: relative; + margin-top: 0.5em; +} +div.DTE div.editor_upload.multi ul li:first-child { + margin-top: 0; +} +div.DTE div.editor_upload.multi ul li img { + vertical-align: middle; +} +div.DTE div.editor_upload.multi ul li button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; +} + +div.DTE div.editor_upload button.btn, +div.DTE div.editor_upload input[type=file] { + height: auto; +} +div.DTE div.editor_upload ul li button { + padding-bottom: 8px; +} + +div.DTE_Field_Type_datatable label { + display: block !important; + text-align: right; +} +div.DTE_Field_Type_datatable div.dataTables_filter { + display: block !important; + text-align: left; + margin-bottom: 6px; +} +div.DTE_Field_Type_datatable div.dataTables_filter input { + width: 100% !important; +} +div.DTE_Field_Type_datatable div.dt-buttons { + margin-bottom: 6px; + width: 100%; +} +div.DTE_Field_Type_datatable div.dt-buttons:empty { + display: none; +} +div.DTE_Field_Type_datatable div.dataTables_info { + font-size: 0.8em; + font-weight: normal; + line-height: 1.3em; +} +div.DTE_Field_Type_datatable div.dataTables_info span.select-info { + display: block; +} +div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate { + margin-top: 0.3em; + text-align: center; +} + +div.DTE div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +div.DTE.processing div.DTE_Processing_Indicator { + display: block; +} +div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator { + display: none; +} +div.DTE div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; +} +div.DTE.DTE_Inline div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; +} +div.DTE.DTE_Bubble div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; +} +div.DTE div.DTE_Processing_Indicator span, +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.1); + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; +} +div.DTE div.DTE_Processing_Indicator:before, +div.DTE div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ""; +} +div.DTE div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +div.DTE div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +div.DTE div.DTE_Processing_Indicator:after { + left: 1em; +} +@-webkit-keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} +@keyframes editorProcessing { + 0%, 80%, 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } +} + +table.dataTable tbody tr.highlight th, +table.dataTable tbody tr.highlight td { + background-color: #2185D0 !important; +} +table.dataTable tbody tr.highlight td, +table.dataTable tbody tr.noHighlight td { + -webkit-transition: background-color 500ms linear; + -moz-transition: background-color 500ms linear; + -ms-transition: background-color 500ms linear; + -o-transition: background-color 500ms linear; + transition: background-color 500ms linear; +} + +div.DTE div.DTE_Processing_Indicator { + top: 22px; + right: 12px; +} + +div.DTE_Field_Type_checkbox div.DTE_Field_InputControl, +div.DTE_Field_Type_radio div.DTE_Field_InputControl { + padding-top: 7px; +} +div.DTE_Field_Type_checkbox > div > div, +div.DTE_Field_Type_radio > div > div { + margin-bottom: 0.2em; +} +div.DTE_Field_Type_checkbox > div > div input, +div.DTE_Field_Type_radio > div > div input { + vertical-align: baseline !important; +} +div.DTE_Field_Type_checkbox > div > div label, +div.DTE_Field_Type_radio > div > div label { + margin-left: 0.75em; + padding-top: 11px !important; +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.semanticui.min.css b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.semanticui.min.css new file mode 100644 index 00000000..cf19b5d6 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/editor.semanticui.min.css @@ -0,0 +1 @@ +div.DTE div.DTE_Form_Error{display:none;color:#b11f1f}div.DTE div.DTE_Form_Buttons{display:flex;flex-direction:row-reverse}div.DTE label{padding-top:9px !important;align-self:flex-start;justify-content:flex-end}div.DTE div.eight.wide.field{flex-direction:column}div.DTE div.DTE_Field_InputControl{width:100%;margin:0 !important}div.DTE div.ui.message:empty{display:none}div.DTE_Field div.ui.message{width:100%}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer;margin-top:0}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666;font-size:.85em;line-height:1.35em}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#f1f1f1}div.DTE_Field div.multi-restore{margin-top:.5em;font-size:.8em;line-height:1.25em}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input[type=week],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input[type=week]{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type=color],div.DTE_Inline div.DTE_Field input[type=date],div.DTE_Inline div.DTE_Field input[type=datetime],div.DTE_Inline div.DTE_Field input[type=datetime-local],div.DTE_Inline div.DTE_Field input[type=email],div.DTE_Inline div.DTE_Field input[type=month],div.DTE_Inline div.DTE_Field input[type=number],div.DTE_Inline div.DTE_Field input[type=password],div.DTE_Inline div.DTE_Field input[type=search],div.DTE_Inline div.DTE_Field input[type=tel],div.DTE_Inline div.DTE_Field input[type=text],div.DTE_Inline div.DTE_Field input[type=time],div.DTE_Inline div.DTE_Field input[type=url],div.DTE_Inline div.DTE_Field input[type=week]{margin:-6px 0}div.DTE_Inline div.DTE_Field_Error,div.DTE_Inline div.DTE_Form_Error{font-size:11px;line-height:1.2em;padding:0;margin-top:10px}div.DTE_Inline div.DTE_Field_Error:empty,div.DTE_Inline div.DTE_Form_Error:empty{margin-top:0}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE.DTE_Inline.ui.form label{display:none !important}div.DTE.DTE_Inline.ui.form div.DTE_Field{width:100%;margin:0 !important}div.DTE.DTE_Inline.ui.form div.DTE_Field div.DTE_Field_Input{width:100% !important;box-sizing:border-box}div.DTE.DTE_Inline.ui.form div.DTE_Field>div{width:100%;padding:0}div.DTE.DTE_Inline.ui.form.DTE_Processing:after{top:5px}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0;transition:top .5s ease-in-out 0s}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:0 12px 30px 0 rgba(0, 0, 0, 0.5);border-radius:6px;border:1px solid #666;padding:1em;background:#fcfcfc;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>label{padding-top:0;margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div input{margin:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;margin-top:1em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons button{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{padding-top:42px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Form_Error{float:none;display:none;padding:0;margin-bottom:.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close{position:absolute;top:19px;right:19px;cursor:pointer;z-index:12}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:after{content:"×";color:rgba(0, 0, 0, 0.5);font-weight:bold;font-size:22px;font-family:"Courier New",Courier,monospace}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Close:hover:after{color:black}div.DTE_Bubble div.DTE_Bubble_Triangle{position:absolute;height:10px;width:10px;top:-6px;background-color:white;border:1px solid #666;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}div.DTE_Bubble.below div.DTE_Bubble_Liner{top:10px;bottom:auto}div.DTE_Bubble.below div.DTE_Bubble_Triangle{top:4px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}div.DTE_Bubble_Background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:10}div.DTE_Bubble_Background>div{position:absolute;top:0;right:0;left:0;bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"}div.DTE_Bubble_Background>div:not([dummy]){filter:progid:DXImageTransform.Microsoft.gradient(enabled="false")}div.DTE_Bubble{z-index:1001}div.DTE_Bubble div.DTE_Bubble_Liner{box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);border-radius:6px;padding:1em;border:1px solid rgba(0, 0, 0, 0.2)}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{flex-direction:column}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field>div{justify-content:flex-start;width:100% !important;float:none;clear:both;text-align:left}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field label{padding-bottom:4px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:first-child label{padding-top:0 !important}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{text-align:right;padding:0}div.DTE_Bubble div.DTE_Bubble_Triangle{border-bottom:1px solid rgba(0, 0, 0, 0.2);border-left:1px solid rgba(0, 0, 0, 0.2)}div.DTE div.editor_upload{padding-top:4px}div.DTE div.editor_upload div.eu_table{display:table;width:100%}div.DTE div.editor_upload div.row{display:table-row}div.DTE div.editor_upload div.cell{display:table-cell;position:relative;width:50%;vertical-align:top}div.DTE div.editor_upload div.cell+div.cell{padding-left:10px}div.DTE div.editor_upload div.row+div.row div.cell{padding-top:10px}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{width:100%;height:2.3em;font-size:.8em;text-align:center;line-height:1em;margin:0}div.DTE div.editor_upload input[type=file]{position:absolute;top:0;left:0;width:100%;opacity:0}div.DTE div.editor_upload div.drop{position:relative;box-sizing:border-box;width:100%;height:100%;border:3px dashed #ccc;border-radius:6px;min-height:4em;color:#999;text-align:center;padding:1em 2em;line-height:1.1em}div.DTE div.editor_upload div.drop.over{border:3px dashed #111;color:#111}div.DTE div.editor_upload div.drop span{max-width:75%;font-size:.85em;line-height:1em}div.DTE div.editor_upload div.rendered img{max-width:8em;margin:0 auto}div.DTE div.editor_upload.noDrop div.drop{display:none}div.DTE div.editor_upload.noDrop div.row.second{display:none}div.DTE div.editor_upload.noDrop div.rendered{margin-top:10px}div.DTE div.editor_upload.noClear div.clearValue button{display:none}div.DTE div.editor_upload.multi div.cell{display:block;width:100%}div.DTE div.editor_upload.multi div.cell div.drop{min-height:0}div.DTE div.editor_upload.multi div.clearValue{display:none}div.DTE div.editor_upload.multi ul{list-style-type:none;margin:0;padding:0}div.DTE div.editor_upload.multi ul li{position:relative;margin-top:.5em}div.DTE div.editor_upload.multi ul li:first-child{margin-top:0}div.DTE div.editor_upload.multi ul li img{vertical-align:middle}div.DTE div.editor_upload.multi ul li button{position:absolute;width:40px;right:0;top:50%;margin-top:-1.5em}div.DTE div.editor_upload button.btn,div.DTE div.editor_upload input[type=file]{height:auto}div.DTE div.editor_upload ul li button{padding-bottom:8px}div.DTE_Field_Type_datatable label{display:block !important;text-align:right}div.DTE_Field_Type_datatable div.dataTables_filter{display:block !important;text-align:left;margin-bottom:6px}div.DTE_Field_Type_datatable div.dataTables_filter input{width:100% !important}div.DTE_Field_Type_datatable div.dt-buttons{margin-bottom:6px;width:100%}div.DTE_Field_Type_datatable div.dt-buttons:empty{display:none}div.DTE_Field_Type_datatable div.dataTables_info{font-size:.8em;font-weight:normal;line-height:1.3em}div.DTE_Field_Type_datatable div.dataTables_info span.select-info{display:block}div.DTE_Field_Type_datatable div.dataTables_wrapper div.dataTables_paginate{margin-top:.3em;text-align:center}div.DTE div.DTE_Processing_Indicator{position:absolute;top:17px;right:42px;height:2em;width:2em;z-index:20;font-size:12px;display:none;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}div.DTE.processing div.DTE_Processing_Indicator{display:block}div.DTE.processing div.DTE_Field div.DTE_Processing_Indicator{display:none}div.DTE div.DTE_Field div.DTE_Processing_Indicator{top:13px;right:0;font-size:8px}div.DTE.DTE_Inline div.DTE_Processing_Indicator{top:5px;right:6px;font-size:6px}div.DTE.DTE_Bubble div.DTE_Processing_Indicator{top:10px;right:14px;font-size:8px}div.DTE div.DTE_Processing_Indicator span,div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{display:block;background:black;width:.5em;height:1.5em;border:1px solid rgba(0, 0, 0, 0.4);background-color:rgba(0, 0, 0, 0.1);-webkit-animation:editorProcessing .9s infinite ease-in-out;animation:editorProcessing .9s infinite ease-in-out}div.DTE div.DTE_Processing_Indicator:before,div.DTE div.DTE_Processing_Indicator:after{position:absolute;top:0;content:""}div.DTE div.DTE_Processing_Indicator:before{left:-1em;-webkit-animation-delay:-0.3s;animation-delay:-0.3s}div.DTE div.DTE_Processing_Indicator span{-webkit-animation-delay:-0.15s;animation-delay:-0.15s}div.DTE div.DTE_Processing_Indicator:after{left:1em}@-webkit-keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}@keyframes editorProcessing{0%,80%,100%{transform:scale(1, 1)}40%{transform:scale(1, 1.5)}}table.dataTable tbody tr.highlight th,table.dataTable tbody tr.highlight td{background-color:#2185d0 !important}table.dataTable tbody tr.highlight td,table.dataTable tbody tr.noHighlight td{-webkit-transition:background-color 500ms linear;-moz-transition:background-color 500ms linear;-ms-transition:background-color 500ms linear;-o-transition:background-color 500ms linear;transition:background-color 500ms linear}div.DTE div.DTE_Processing_Indicator{top:22px;right:12px}div.DTE_Field_Type_checkbox div.DTE_Field_InputControl,div.DTE_Field_Type_radio div.DTE_Field_InputControl{padding-top:7px}div.DTE_Field_Type_checkbox>div>div,div.DTE_Field_Type_radio>div>div{margin-bottom:.2em}div.DTE_Field_Type_checkbox>div>div input,div.DTE_Field_Type_radio>div>div input{vertical-align:baseline !important}div.DTE_Field_Type_checkbox>div>div label,div.DTE_Field_Type_radio>div>div label{margin-left:.75em;padding-top:11px !important} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/bubble.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/bubble.scss new file mode 100644 index 00000000..727deb1b --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/bubble.scss @@ -0,0 +1,130 @@ + +// Bubble form editing +// Very similar to the main form, but attached to a particular node and the +// form layout is slightly different with the fields container and buttons +// making up a table of a single row and two columns. This allows the buttons +// to be removed from the display and under this condition the fields will +// take up the full width available. +div.DTE_Bubble { + position: absolute; + z-index: 11; + margin-top: -6px; + opacity: 0; + transition: top 0.5s ease-in-out 0s; + + div.DTE_Bubble_Liner { + position: absolute; + bottom: 0; + border: 1px solid black; + width: 300px; + margin-left: -150px; + background-color: white; + box-shadow: 0 12px 30px 0 rgba(0,0,0,.5); + border-radius: 6px; + border: 1px solid #666; + padding: 1em; + background: #fcfcfc; + @include box-sizing(border-box); + + div.DTE_Bubble_Table { + width: 100%; + + > form { + div.DTE_Form_Content { + padding: 0; + + div.DTE_Field { + position: relative; + margin-bottom: 0.5em; + + &:last-child { + margin-bottom: 0; + } + + > label { + padding-top: 0; + margin-bottom: 0; + } + + > div { + padding: 0; + + input { + margin: 0; + } + } + } + } + } + + div.DTE_Form_Buttons { + text-align: right; + margin-top: 1em; + + button { + margin-bottom: 0; + } + } + } + + div.DTE_Header { + border-top-left-radius: 5px; + border-top-right-radius: 5px; + } + + div.DTE_Header + div.DTE_Form_Info, + div.DTE_Header + div.DTE_Bubble_Table { + padding-top: 42px; + } + + + div.DTE_Form_Error { + float: none; + display: none; + padding: 0; + margin-bottom: 0.5em; + } + + div.DTE_Bubble_Close { + @include close-icon(); + } + } + + div.DTE_Bubble_Triangle { + position: absolute; + height: 10px; + width: 10px; + top: -6px; + background-color: white; + border: 1px solid #666; + border-top: none; + border-right: none; + + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); + } + + &.below { + div.DTE_Bubble_Liner { + top: 10px; + bottom: auto; + } + + div.DTE_Bubble_Triangle { + top: 4px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); + } + } +} + +div.DTE_Bubble_Background { + @include overlay-background(); +} + diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/datatable.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/datatable.scss new file mode 100644 index 00000000..3b42c085 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/datatable.scss @@ -0,0 +1,100 @@ + +// Row highlighting on edit styles +// +// To change the colour of the highlight, simply modify the variable below and +// recompile the SCSS stylesheet (if you don't have SASS installed, you can use +// the online service at http://sassmeister.com/ . +// +// The DataTables styles below match the default DataTables stylesheet: +// http://next.datatables.net/manual/styling/classes so you can retain the full +// benefits of the DataTables styling options. + +$table-row-highlight: #FFFBCC; + +table.dataTable { + tbody { + tr.highlight { + background-color: $table-row-highlight !important; + } + + tr.highlight, + tr.noHighlight, + tr.highlight td, + tr.noHighlight td { + @include background-transision(); + } + } + + &.stripe tbody, + &.display tbody { + tr.odd { + &.highlight { + background-color: shade($table-row-highlight, 2.35%); + } + } + } + + // Hover classes - add "hover" class to the table to activate + &.hover tbody, + &.display tbody { + tr:hover, + tr.odd:hover, + tr.even:hover { + &.highlight { + background-color: shade($table-row-highlight, 3.6%); + } + } + } + + + // Sort column highlighting - add "hover" class to the table to activate + &.order-column, + &.display { + tbody { + tr.highlight>.sorting_1, + tr.highlight>.sorting_2, + tr.highlight>.sorting_3 { + background-color: shade($table-row-highlight, 2%); + } + } + } + + &.display tbody, + &.order-column.stripe tbody { + tr.odd { + &.highlight { + >.sorting_1 { background-color: shade($table-row-highlight, 5.4%);} + >.sorting_2 { background-color: shade($table-row-highlight, 4.7%);} + >.sorting_3 { background-color: shade($table-row-highlight, 3.9%);} + } + } + + tr.even { + &.highlight { + >.sorting_1 { background-color: shade($table-row-highlight, 2%); } + >.sorting_2 { background-color: shade($table-row-highlight, 1.2%); } + >.sorting_3 { background-color: shade($table-row-highlight, 0.4%); } + } + } + } + + &.display tbody, + &.order-column.hover tbody { + tr:hover, + tr.odd:hover, + tr.even:hover { + &.highlight { + >.sorting_1 { background-color: shade($table-row-highlight, 8.2%); } + >.sorting_2 { background-color: shade($table-row-highlight, 7.5%); } + >.sorting_3 { background-color: shade($table-row-highlight, 6.3%); } + } + } + } + + tr.dte-inlineAdd { + td, + th { + vertical-align: top; + } + } +} \ No newline at end of file diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/envelope.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/envelope.scss new file mode 100644 index 00000000..a4d234e3 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/envelope.scss @@ -0,0 +1,63 @@ + +/* + * Namespace: DTED - DataTables Editor Display - Envelope + */ + +div.DTED_Envelope_Wrapper { + position: absolute; + top: 0; + bottom: 0; + left: 50%; + height: 100%; + z-index: 11; + display: none; + overflow: hidden; + + // Create a shadow display at the top of the evelope to make it look like it has + // come from under the element that it is attached to/ Left and right to give a + // slight fade and the two ends + div.DTED_Envelope_Shadow { + position: absolute; + top: -10px; + left: 10px; + right: 10px; + height: 10px; + z-index: 10; + box-shadow: 0 0 20px black; + } + + div.DTED_Envelope_Container { + position: absolute; + top: 0; + left: 5%; + width: 90%; + + border-left: 1px solid #777; + border-right: 1px solid #777; + border-bottom: 1px solid #777; + box-shadow: 3px 3px 10px #555; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: white; + + div.DTE_Processing_Indicator { + right: 36px; + } + + div.DTE_Footer { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + } + + div.DTED_Envelope_Close { + @include close-icon(); + } + } +} + + +div.DTED_Envelope_Background { + @include overlay-background(); +} + + diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/fields.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/fields.scss new file mode 100644 index 00000000..4dfa5286 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/fields.scss @@ -0,0 +1,280 @@ + +$input-border: 1px solid #aaa; + +$input-border: 1px solid #aaa; + +// Generic field styling +div.DTE_Field { + input, + textarea { + box-sizing: border-box; + background-color: white; + -webkit-transition: background-color ease-in-out .15s; + transition: background-color ease-in-out .15s; + } + + input:focus, + textarea:focus { + background-color: #ffffee; + } + + input[type="color"], + input[type="date"], + input[type="datetime"], + input[type="datetime-local"], + input[type="email"], + input[type="month"], + input[type="number"], + input[type="password"], + input[type="search"], + input[type="tel"], + input[type="text"], + input[type="time"], + input[type="url"], + input[type="week"] { + padding: 5px 4px; + width: 100%; + + // Chrome 83 introduces some really ugly borders + border: $input-border; + border-radius: 3px; + } + + input[type="checkbox"], + input[type="radio"] { + vertical-align: middle; + } + + select { + padding: 5px 4px; + border-radius: 3px; + border: $input-border; + background: white; + max-width: 100%; + } + + label div.DTE_Label_Info { + font-size: 0.85em; + margin-top: 0.25em; + + &:empty { + margin-top: 0; + } + } + + div.DTE_Field_Info, + div.DTE_Field_Message, + div.DTE_Field_Error { + font-size: 11px; + line-height: 1em; + margin-top: 5px; + + &:empty { + margin-top: 0; + } + } + + div.DTE_Field_Error { + display: none; + color: #b11f1f; + } + + div.multi-value { + display: none; + border: 1px dotted #666; + border-radius: 3px; + padding: 5px; + background-color: #fafafa; + cursor: pointer; + + span { + font-size: 0.8em; + line-height: 1.25em; + display: block; + color: #666; + } + + &.multi-noEdit { + border: 1px solid #ccc; + cursor: auto; + background-color: #fcfcfc; + + &:hover { + background-color: #fcfcfc; + } + } + + &:hover { + background-color: #f1f1f1; + } + } + + &.disabled { + color: grey; + + div.multi-value { + cursor: default; + border: 1px dotted #aaa; + background-color: transparent; + } + } + + div.multi-restore { + display: none; + margin-top: 0.5em; + font-size: 0.8em; + line-height: 1.25em; + color: #3879d9; + + &:hover { + text-decoration: underline; + cursor: pointer; + } + } +} + +// Specific field type styling +div.DTE_Field_Type_textarea { + textarea { + padding: 3px; + width: 100%; + height: 80px; + border: $input-border; + } +} + +div.DTE_Field.DTE_Field_Type_date { + img { + vertical-align: middle; + cursor: pointer; + } +} + +div.DTE_Field_Type_checkbox, +div.DTE_Field_Type_radio { + div.DTE_Field_Input { + padding-top: 1px; + + > div > div { + margin-bottom: 0.25em; + + &:last-child { + margin-bottom: 0; + } + + input { + } + + label { + margin-left: 0.75em; + vertical-align: middle; + } + } + } +} + +div.DTE_Field_Type_datatable { + div.dataTables_info { + font-size: 0.8em; + line-height: 1.3em; + padding-right: 1em; + padding-bottom: 0.5em; + + span.select-info { + display: block; + } + } + + div.dataTables_filter { + padding-right: 1em; + padding-bottom: 0.5em; + + input { + width: 100%; + } + } + + div.dt-buttons { + padding-right: 1em; + padding-bottom: 0.5em; + + button { + width: 100%; + } + + &:empty { + padding-bottom: 0; + } + } + + div.dataTables_paginate { + float: none; + text-align: center; + font-size: 0.8em; + } + + table.dataTable { + &.no-footer { + border-bottom: 1px solid #aaa !important; + } + + thead { + th, td { + font-weight: normal; + padding-top: 3px; + padding-bottom: 3px; + border-bottom: 1px solid #aaa; + } + } + + tbody { + th:first-child, + td:first-child { + border-left: 1px solid #aaa; + } + + th:last-child, + td:last-child { + border-right: 1px solid #aaa; + } + } + + tfoot { + th, td { + font-weight: normal; + padding-top: 3px; + padding-bottom: 3px; + border-top: 1px solid #aaa; + } + } + } + + div.dataTables_scrollHead { + table.dataTable, + table.dataTable thead th, + table.dataTable thead td { + border-bottom: none !important; + } + } + + div.dataTables_scrollBody { + border: 1px solid #aaa !important; + border-radius: 3px;; + + table.dataTable { + border-bottom: none !important; + + tbody { + th:first-child, + td:first-child { + border-left: none; + } + + th:last-child, + td:last-child { + border-right: none; + } + } + } + } +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/inline.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/inline.scss new file mode 100644 index 00000000..8131a3a9 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/inline.scss @@ -0,0 +1,79 @@ + +// Inline form editing +// Hide the label and allow the field to take the full width +div.DTE_Inline { + position: relative; + display: table; + width: 100%; + + div.DTE_Inline_Field, + div.DTE_Inline_Buttons { + display: table-cell; + vertical-align: middle; + + div.DTE_Field { + padding: 0; + + >label { + display: none; + } + + input[type="color"], + input[type="date"], + input[type="datetime"], + input[type="datetime-local"], + input[type="email"], + input[type="month"], + input[type="number"], + input[type="password"], + input[type="search"], + input[type="tel"], + input[type="text"], + input[type="time"], + input[type="url"], + input[type="week"] { + width: 100%; + } + } + + div.DTE_Form_Buttons button { + margin: -6px 0 -6px 4px; + padding: 5px; + } + } + + // Have the input types take up full space, taking into account the cell padding + div.DTE_Field input[type="color"], + div.DTE_Field input[type="date"], + div.DTE_Field input[type="datetime"], + div.DTE_Field input[type="datetime-local"], + div.DTE_Field input[type="email"], + div.DTE_Field input[type="month"], + div.DTE_Field input[type="number"], + div.DTE_Field input[type="password"], + div.DTE_Field input[type="search"], + div.DTE_Field input[type="tel"], + div.DTE_Field input[type="text"], + div.DTE_Field input[type="time"], + div.DTE_Field input[type="url"], + div.DTE_Field input[type="week"] { + margin: -6px 0; + } + + div.DTE_Field_Error, + div.DTE_Form_Error { + font-size: 11px; + line-height: 1.2em; + padding: 0; + margin-top: 10px; + + &:empty { + margin-top: 0; + } + } +} + +// Responsive integration +span.dtr-data div.DTE_Inline { + display: inline-table; +} \ No newline at end of file diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/lightbox.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/lightbox.scss new file mode 100644 index 00000000..bbab24ea --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/lightbox.scss @@ -0,0 +1,174 @@ + + +div.DTED_Lightbox_Wrapper { + position: fixed; + top: 0; + left: 50%; + margin-left: -390px; + width: 780px; + height: 100%; + z-index: 11; + + div.DTED_Lightbox_Container { + display: table; + height: 100%; + width: 100%; + + div.DTED_Lightbox_Content_Wrapper { + display: table-cell; + vertical-align: middle; + width: 100%; + + div.DTED_Lightbox_Content { + position: relative; + box-shadow: 0 12px 30px 0 rgba(0,0,0,.5); + border-radius: 6px; + @include box-sizing(border-box); + + div.DTE { + background: white; + border-radius: 6px; + border: 1px solid #666; + background: #fcfcfc; + @include box-sizing(border-box); + + div.DTE_Header { + right: 0; + width: auto; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + } + + div.DTE_Body_Content { + box-sizing: border-box; + background: #fcfcfc; + } + + div.DTE_Footer { + right: 0; + width: auto; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + } + } + + div.DTED_Lightbox_Close { + @include close-icon(); + } + } + } + } +} + +div.DTED_Lightbox_Wrapper { + div.DTE_Footer { + display: flex; + justify-content: flex-end; + } + + div.DTE_Footer_Content { + display: none; + } + + div.DTE.inFormError div.DTE_Footer { + justify-content: space-between; + } +} + + +div.DTED_Lightbox_Background { + @include overlay-background(); +} + + +body.DTED_Lightbox_Mobile { + div.DTED_Lightbox_Background { + height: 0; + } + + div.DTED_Lightbox_Shown { + display: none; + } + + div.DTED_Lightbox_Wrapper { + position: fixed; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + width: auto; + height: auto; + margin-left: 0; + -webkit-overflow-scrolling: touch; + + div.DTED_Lightbox_Container { + display: block; + height: 100%; + + div.DTED_Lightbox_Content_Wrapper { + display: block; + height: 100%; + + div.DTED_Lightbox_Content { + border-radius: 0; + box-shadow: none; + height: 100% !important; + + div.DTE { + border-radius: 0; + height: 100%; + + div.DTE_Header { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + div.DTE_Body_Content { + padding-bottom: 52px; + } + + div.DTE_Footer { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + } + + div.DTED_Lightbox_Close { + top: 11px; + right: 15px; + + background-color: transparent; + border: none; + box-shadow: none; + } + } + } + } + } +} + +@media only screen +and (max-width: 780px) { + body div.DTED_Lightbox_Wrapper { + position: fixed; + top: 0; + left: 0; + width: 90%; + margin-left: 5%; + } +} + +@media only screen +and (max-width: 580px) { + body div.DTED_Lightbox_Wrapper { + position: fixed; + top: 0; + left: 0; + width: 100%; + margin-left: 0; + } +} + + + + diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/main.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/main.scss new file mode 100644 index 00000000..2e9d4dda --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/main.scss @@ -0,0 +1,180 @@ + + +// The main form. +// Most of the styles for display of the main form come from the display +// controller (lightbox and envelope are the two built in options). +div.DTE_Body { + padding: 52px 0; // space for hte header and footer which are position: absolute + + div.DTE_Body_Content { + position: relative; + overflow: auto; + + div.DTE_Form_Info { + padding: 1em 1em 0 1em; + margin: 0; + } + + div.DTE_Field { + position: relative; + + clear: both; + padding: 5px 10%; + border: 1px solid transparent; + + &:after { + display: block; + content: "."; + height: 0; + line-height: 0; + clear: both; + visibility: hidden; + } + + &:hover { + background-color: #f9f9f9; + border: 1px solid #f3f3f3; + } + + >label { + float: left; + width: 33%; + padding-top: 3px; + } + + >div.DTE_Field_Input { + float: right; + width: 66%; + } + + // Field in error state + &.DTE_Field_StateError { } + + &.full { + padding: 5px 0 5px 10%; + } + + &.block { + >div.DTE_Field_Input { + float: none; + clear: both; + width: 100%; + } + } + } + } +} + +html[dir="rtl"] { + div.DTE_Body div.DTE_Body_Content div.DTE_Field { + > label { + float: right; + } + + >div.DTE_Field_Input { + float: left; + } + } + + div.DTE div.DTE_Form_Buttons button { + float: left; + } +} + +// iPad in portrait +@media only screen +and (max-width : 768px) { + div.DTE_Body { + div.DTE_Body_Content { + div.DTE_Field { + padding: 5px 10%; + + &.full { + padding: 5px 0 5px 10%; + + >label { + width: 35.5%; + } + + >div.DTE_Field_Input { + width: 64.5%; + } + } + + &.block { + >div.DTE_Field_Input { + width: 100%; + } + } + } + } + } +} + +@media only screen +and (max-width : 640px) { + div.DTE_Body { + div.DTE_Body_Content { + div.DTE_Field { + padding: 5px 0; + + &.full { + padding: 5px 0%; + + >label { + width: 40%; + } + + >div.DTE_Field_Input { + width: 60%; + } + } + + &.block { + >div.DTE_Field_Input { + width: 100%; + } + } + } + } + } +} + +// For devices with smaller screens, the fields should be shown stacked +@media only screen +and (max-width : 580px) { + div.DTE_Body { + div.DTE_Body_Content { + div.DTE_Field { + position: relative; + + clear: both; + padding: 5px 0; + + >label { + float: none; + width: auto; + padding-top: 0; + } + + >div.DTE_Field_Input { + float: none; + width: auto; + margin-top: 4px; + margin-bottom: 6px; + } + + &.full, + &.block { + padding: 5px 0; + + >label, + >div.DTE_Field_Input { + width: 100%; + } + } + } + } + } +} + diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/mixins.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/mixins.scss new file mode 100644 index 00000000..8338541b --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/mixins.scss @@ -0,0 +1,178 @@ + + +@function tint( $color, $percent ) { + @return mix(white, $color, $percent); +} + +@function shade( $color, $percent ) { + @return mix(black, $color, $percent); +} + + +@mixin border-radius ( $radius ) { + -webkit-border-radius: $radius; + -moz-border-radius: $radius; + -ms-border-radius: $radius; + -o-border-radius: $radius; + border-radius: $radius; +} + +@mixin box-sizing($box-model) { + -webkit-box-sizing: $box-model; // Safari <= 5 + -moz-box-sizing: $box-model; // Firefox <= 19 + box-sizing: $box-model; +} + +@mixin box-shadow($top, $left, $blur, $color, $inset: false) { + @if $inset { + -webkit-box-shadow:inset $top $left $blur $color; + -moz-box-shadow:inset $top $left $blur $color; + box-shadow:inset $top $left $blur $color; + } @else { + -webkit-box-shadow: $top $left $blur $color; + -moz-box-shadow: $top $left $blur $color; + box-shadow: $top $left $blur $color; + } +} + +@mixin two-stop-gradient($fromColor, $toColor) { + background-color: $toColor; /* Fallback */ + background-image: -webkit-linear-gradient(top, $fromColor 0%, $toColor 100%); /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, $fromColor 0%, $toColor 100%); /* FF3.6 */ + background-image: -ms-linear-gradient(top, $fromColor 0%, $toColor 100%); /* IE10 */ + background-image: -o-linear-gradient(top, $fromColor 0%, $toColor 100%); /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, $fromColor 0%, $toColor 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#{nth( $fromColor, 1 )}', EndColorStr='#{nth( $toColor, 1 )}'); +} + +@mixin three-stop-gradient($fromColor, $middleColor, $toColor) { + background-color: $toColor; /* Fallback */ + background-image: -webkit-linear-gradient(top, $fromColor, $middleColor, $toColor); /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, $fromColor, $middleColor, $toColor); /* FF3.6 */ + background-image: -ms-linear-gradient(top, $fromColor, $middleColor, $toColor); /* IE10 */ + background-image: -o-linear-gradient(top, $fromColor, $middleColor, $toColor); /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, $fromColor, $middleColor, $toColor); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#{nth( $fromColor, 1 )}', EndColorStr='#{nth( $toColor, 1 )}'); +} + +@mixin radial-gradient ($fromColor, $toColor ) { + background: $toColor; /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, $fromColor), color-stop(1, $toColor)); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, $fromColor 0%, $toColor 100%); /* W3C Markup, IE10 Release Preview */ +} + +@mixin keyframe ($animation_name) { + @-webkit-keyframes #{$animation_name} { + @content; + } + + @-moz-keyframes #{$animation_name} { + @content; + } + + @-o-keyframes #{$animation_name} { + @content; + } + + @keyframes #{$animation_name} { + @content; + } +} + +@mixin animation ($duration, $animation) { + -webkit-animation-duration: $duration; + -webkit-animation-name: $animation; + -webkit-animation-fill-mode: forwards; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + -webkit-animation-direction: alternate; + + -moz-animation-duration: $duration; + -moz-animation-name: $animation; + -moz-animation-fill-mode: forwards; + -moz-animation-iteration-count: infinite; + -moz-animation-timing-function: linear; + -moz-animation-direction: alternate; + + -o-animation-duration: $duration; + -o-animation-name: $animation; + -o-animation-fill-mode: forwards; + -o-animation-iteration-count: infinite; + -o-animation-timing-function: linear; + -o-animation-direction: alternate; + + animation-duration: $duration; + animation-name: $animation; + animation-fill-mode: forwards; + animation-iteration-count: infinite; + animation-timing-function: linear; + animation-direction: alternate; +} + +@mixin close-icon () { + position: absolute; + top: 19px; + right: 19px; + cursor: pointer; + z-index: 12; + + &:after { + content: '\00d7'; + color: rgba(0, 0, 0, 0.5); + font-weight: bold; + font-size: 22px; + font-family: 'Courier New', Courier, monospace; + } + + &:hover { + &:after { + color: black; + } + } +} + +@mixin overlay-background () { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + + @include radial-gradient( rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.7) ); + + z-index: 10; + + // IE8- doesn't support RGBA and jQuery uses `filter:` for the fade-in + // animation, so we need a child element that is used just for the display + >div { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + + // IE7- + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + + // IE8 + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; + } + + // IE9 has both filter and rgba support, so we need a hack to disable the filter + >div:not([dummy]) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled='false'); + } +} + +@mixin background-transision () { + -webkit-transition: background-color 500ms linear; + -moz-transition: background-color 500ms linear; + -ms-transition: background-color 500ms linear; + -o-transition: background-color 500ms linear; + transition: background-color 500ms linear; +} + diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/processing.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/processing.scss new file mode 100644 index 00000000..f63538eb --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/processing.scss @@ -0,0 +1,106 @@ + +div.DTE { + div.DTE_Processing_Indicator { + position: absolute; + top: 17px; + right: 42px; + height: 2em; + width: 2em; + z-index: 20; + font-size: 12px; + display: none; + + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + } + + &.processing { + div.DTE_Processing_Indicator { + display: block; + } + + div.DTE_Field div.DTE_Processing_Indicator { + display: none; + } + } + + div.DTE_Field div.DTE_Processing_Indicator { + top: 13px; + right: 0; + font-size: 8px; + } + + &.DTE_Inline { + div.DTE_Processing_Indicator { + top: 5px; + right: 6px; + font-size: 6px; + } + } + + &.DTE_Bubble { + div.DTE_Processing_Indicator { + top: 10px; + right: 14px; + font-size: 8px; + } + } + + div.DTE_Processing_Indicator span, + div.DTE_Processing_Indicator:before, + div.DTE_Processing_Indicator:after { + display: block; + background: black; + width: 0.5em; + height: 1.5em; + border: 1px solid rgba( 0, 0, 0, 0.4 ); + background-color: rgba( 0, 0, 0, 0.1 ); + + -webkit-animation: editorProcessing 0.9s infinite ease-in-out; + animation: editorProcessing 0.9s infinite ease-in-out; + } + + div.DTE_Processing_Indicator:before, + div.DTE_Processing_Indicator:after { + position: absolute; + top: 0; + content: ''; + } + + div.DTE_Processing_Indicator:before { + left: -1em; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; + } + + div.DTE_Processing_Indicator span { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; + } + + div.DTE_Processing_Indicator:after { + left: 1em; + } + + @-webkit-keyframes editorProcessing { + 0%, + 80%, + 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } + } + @keyframes editorProcessing { + 0%, + 80%, + 100% { + transform: scale(1, 1); + } + 40% { + transform: scale(1, 1.5); + } + } +} diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/upload.scss b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/upload.scss new file mode 100644 index 00000000..9255e98f --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/ccs/scss/upload.scss @@ -0,0 +1,143 @@ + +div.DTE div.editor_upload { + padding-top: 4px; + + div.eu_table { + display: table; + width: 100%; + } + + div.row { + display: table-row; + } + + div.cell { + display: table-cell; + position: relative; + width: 50%; + vertical-align: top; + } + + div.cell + div.cell { + padding-left: 10px; + } + + div.row + div.row { + div.cell { + padding-top: 10px; + } + } + + button.btn, + input[type=file] { + width: 100%; + height: 2.3em; + font-size: 0.8em; + text-align: center; + line-height: 1em; + margin: 0; + } + + input[type=file] { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; + } + + div.drop { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: 3px dashed #ccc; + border-radius: 6px; + min-height: 4em; + color: #999; + text-align: center; + padding: 1em 2em; + line-height: 1.1em; + + &.over { + border: 3px dashed #111; + color: #111; + } + + span { + max-width: 75%; + font-size: 0.85em; + line-height: 1em; + } + } + + div.rendered { + img { + max-width: 8em; + margin: 0 auto; + } + } + + &.noDrop { + div.drop { + display: none; + } + + div.row.second { + display: none; + } + + div.rendered { + margin-top: 10px; + } + } + + &.noClear { + div.clearValue button { + display: none; + } + } + + &.multi { + div.cell { + display: block; + width: 100%; + + div.drop { + min-height: 0; + } + } + + div.clearValue { + display: none; + } + + ul { + list-style-type: none; + margin: 0; + padding: 0; + + li { + position: relative; + margin-top: 0.5em; + + &:first-child { + margin-top: 0; + } + + img { + vertical-align: middle; + } + + button { + position: absolute; + width: 40px; + right: 0; + top: 50%; + margin-top: -1.5em; + } + } + } + } +} + diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/dataTables.editor.js b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/dataTables.editor.js new file mode 100644 index 00000000..8c4343a8 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/dataTables.editor.js @@ -0,0 +1,6830 @@ +/*! DataTables Editor v2.1.3 + * + * ©2012-2023 SpryMedia Ltd, all rights reserved. + * License: editor.datatables.net/license + */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + var jq = require('jquery'); + var cjsRequires = function (root, $) { + if ( ! $.fn.dataTable ) { + require('datatables.net')(root, $); + } + }; + + if (typeof window === 'undefined') { + module.exports = function (root, $) { + if ( ! root ) { + // CommonJS environments without a window global must pass a + // root. This will give an error otherwise + root = window; + } + + if ( ! $ ) { + $ = jq( root ); + } + + cjsRequires( root, $ ); + return factory( $, root, root.document ); + }; + } + else { + cjsRequires( window, jq ); + module.exports = factory( jq, window, window.document ); + } + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + +var formOptions = { + buttons: true, + drawType: false, + focus: 0, + message: true, + nest: false, + onBackground: 'blur', + onBlur: 'close', + onComplete: 'close', + onEsc: 'close', + onFieldError: 'focus', + onReturn: 'submit', + scope: 'row', + submit: 'all', + submitHtml: '▶', + submitTrigger: null, + title: true +}; + +var defaults$1 = { + /** + * Parameter name to use to submit data to the server. + * + * @type string + */ + actionName: 'action', + /** + * Control how the Ajax call to update data on the server. + * + * This option matches the `dt-init ajax` option in that is can be provided + * in one of three different ways: + * + * * string - As a string, the value given is used as the url to target + * the Ajax request to, using the default Editor Ajax options. Note that + * for backwards compatibility you can use the form "METHOD URL" - for + * example: `"PUT api/users"`, although it is recommended you use the + * object form described below. + * * object - As an object, the `ajax` property has two forms: + * * Used to extend and override the default Ajax options that Editor + * uses. This can be very useful for adding extra data for example, or + * changing the HTTP request type. + * * With `create`, `edit` and `remove` properties, Editor will use the + * option for the action that it is taking, which can be useful for + * REST style interfaces. The value of each property can be a string, + * object or function, using exactly the same options as the main `ajax` + * option. All three options must be defined if this form is to be used. + * * function - As a function this gives complete control over the method + * used to update the server (if indeed a server is being used!). For + * example, you could use a different data store such as localStorage, + * Firebase or route the data through a web-socket. + * + * @example + * // As a string - all actions are submitted to this URI as POST requests + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": 'php/index.php', + * "table": "#example" + * } ); + * } ); + * + * @example + * // As an object - using GET rather than POST + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": { + * "type": 'GET', + * "url": 'php/index.php + * }, + * "table": "#example" + * } ); + * } ); + * + * @example + * // As an object - each action is submitted to a different URI as POST requests + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": { + * "create": "/rest/user/create", + * "edit": "/rest/user/_id_/edit", + * "remove": "/rest/user/_id_/delete" + * }, + * "table": "#example" + * } ); + * } ); + * + * @example + * // As an object - with different HTTP methods for each action + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": { + * "create": { + * type: 'POST', + * url: '/rest/user/create' + * }, + * "edit": { + * type: 'PUT', + * url: '/rest/user/edit/_id_' + * }, + * "remove": { + * type: 'DELETE', + * url: '/rest/user/delete' + * } + * }, + * "table": "#example" + * } ); + * } ); + * + * // As a function - Making a custom `$.ajax` call + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "table": "#example", + * "ajax": function ( method, url, data, successCallback, errorCallback ) { + * $.ajax( { + * "type": method, + * "url": url, + * "data": data, + * "dataType": "json", + * "success": function (json) { + * successCallback( json ); + * }, + * "error": function (xhr, error, thrown) { + * errorCallback( xhr, error, thrown ); + * } + * } ); + * } + * } ); + * } ); + */ + ajax: null, + /** + * The display controller for the form. The form itself is just a collection of + * DOM elements which require a display container. This display controller allows + * the visual appearance of the form to be significantly altered without major + * alterations to the Editor code. There are two display controllers built into + * Editor *lightbox* and *envelope*. The value of this property will + * be used to access the display controller defined in {@link Editor.display} + * for the given name. Additional display controllers can be added by adding objects + * to that object, through extending the displayController model: + * {@link Editor.models.displayController}. + * + * @type string + * @default lightbox + * + * @example + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": "php/index.php", + * "table": "#example", + * "display": 'envelope' + * } ); + * } ); + */ + display: 'lightbox', + /** + * Events / callbacks - event handlers can be assigned as an individual function + * during initialisation using the parameters in this name space. The names, and + * the parameters passed to each callback match their event equivalent in the + * {@link Editor} object. + * + * @namespace + * @deprecated Since 1.3. Use the `on()` API method instead. Note that events + * passed in do still operate as they did in 1.2- but are no longer + * individually documented. + */ + events: {}, + /** + * Fields to initialise the form with - see {@link Editor.models.field} for + * a full list of the options available to each field. Note that if fields are not + * added to the form at initialisation time using this option, they can be added using + * the {@link Editor#add} API method. + * + * @type array + * @default [] + * + * @example + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": "php/index.php", + * "table": "#example", + * "fields": [ { + * "label": "User name:", + * "name": "username" + * } + * // More fields would typically be added here! + * } ] + * } ); + * } ); + */ + fields: [], + formOptions: { + bubble: $.extend({}, formOptions, { + buttons: '_basic', + message: false, + submit: 'changed', + title: false + }), + inline: $.extend({}, formOptions, { + buttons: false, + submit: 'changed' + }), + main: $.extend({}, formOptions) + }, + /** + * Internationalisation options for Editor. All client-side strings that the + * end user can see in the interface presented by Editor can be modified here. + * + * You may also wish to refer to the + * DataTables internationalisation options to provide a fully language + * customised table interface. + * + * @namespace + * + * @example + * // Set the 'create' button text. All other strings used are the + * // default values. + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "create": { + * "button": "New user" + * } + * } + * } ); + * + * @example + * // Set the submit text for all three actions + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "create": { + * "submit": "Create new user" + * }, + * "edit": { + * "submit": "Update user" + * }, + * "remove": { + * "submit": "Remove user" + * } + * } + * } ); + */ + i18n: { + /** + * Close button title text + * + * @type string + * @default Close + */ + close: 'Close', + /** + * Strings used when working with the Editor 'create' action (creating new + * records). + * + * @namespace + */ + create: { + /** + * Buttons button text + * + * @type string + * @default New + */ + button: 'New', + /** + * Submit button text + * + * @type string + * @default Create + */ + submit: 'Create', + /** + * Display container title (when showing the editor display) + * + * @type string + * @default Create new entry + */ + title: 'Create new entry' + }, + datetime: { + amPm: ['am', 'pm'], + hours: 'Hour', + minutes: 'Minute', + months: [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December' + ], + next: 'Next', + previous: 'Previous', + seconds: 'Second', + unknown: '-', + weekdays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + }, + /** + * Strings used when working with the Editor 'edit' action (editing existing + * records). + * + * @namespace + */ + edit: { + /** + * Buttons button text + * + * @type string + * @default Edit + */ + button: 'Edit', + /** + * Submit button text + * + * @type string + * @default Update + */ + submit: 'Update', + /** + * Display container title (when showing the editor display) + * + * @type string + * @default Edit entry + */ + title: 'Edit entry' + }, + /** + * Strings used for error conditions. + * + * @namespace + */ + error: { + /** + * Generic server error message + * + * @type string + * @default + * A system error has occurred (More information) + */ + system: 'A system error has occurred (More information).' + }, + /** + * Strings used for multi-value editing + * + * @namespace + */ + multi: { + /** + * Shown below the multi title text, although only the first + * instance of this text is shown in the form to reduce redundancy + */ + info: 'The selected items contain different values for this input. To edit and set all items for this input to the same value, click or tap here, otherwise they will retain their individual values.', + /** + * Disabled for multi-row editing + */ + noMulti: 'This input can be edited individually, but not part of a group.', + /** + * Shown below the field input when group editing a value to allow + * the user to return to the original multiple values + */ + restore: 'Undo changes', + /** + * Shown in place of the field value when a field has multiple values + */ + title: 'Multiple values' + }, + /** + * Strings used when working with the Editor 'delete' action (deleting + * existing records). + * + * @namespace + */ + remove: { + /** + * Buttons button text + * + * @type string + * @default Delete + */ + button: 'Delete', + /** + * Deletion confirmation message. + * + * As Editor has the ability to delete either a single or multiple rows + * at a time, this option can be given as either a string (which will be + * used regardless of how many records are selected) or as an object + * where the property "_" will be used (with %d substituted for the number + * of records to be deleted) as the delete message, unless there is a + * key with the number of records to be deleted. This allows Editor + * to consider the different pluralisation characteristics of different + * languages. + * + * @type object|string + * @default Are you sure you wish to delete %d rows? + * + * @example + * // String - no plural consideration + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "remove": { + * "confirm": "Are you sure you wish to delete %d record(s)?" + * } + * } + * } ); + * + * @example + * // Basic 1 (singular) or _ (plural) + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "remove": { + * "confirm": { + * "_": "Confirm deletion of %d records.", + * "1": "Confirm deletion of record." + * } + * } + * } ); + * + * @example + * // Singular, dual and plural + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "remove": { + * "confirm": { + * "_": "Confirm deletion of %d records.", + * "1": "Confirm deletion of record.", + * "2": "Confirm deletion of both record." + * } + * } + * } ); + * + */ + confirm: { + 1: 'Are you sure you wish to delete 1 row?', + _: 'Are you sure you wish to delete %d rows?' + }, + /** + * Submit button text + * + * @type string + * @default Delete + */ + submit: 'Delete', + /** + * Display container title (when showing the editor display) + * + * @type string + * @default Delete + */ + title: 'Delete', + } + }, + /** + * JSON property from which to read / write the row's ID property (i.e. its + * unique column index that identifies the row to the database). By default + * Editor will use the `DT_RowId` property from the data source object + * (DataTable's magic property to set the DOM id for the row). + * + * If you want to read a parameter from the data source object instead of + * using `DT_RowId`, set this option to the property name to use. + * + * Like other data source options the `srcId` option can be given in dotted + * object notation to read nested objects. + * + * @type null|string + * @default DT_RowId + * + * @example + * // Using a data source such as: + * // { "id":12, "browser":"Chrome", ... } + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": "php/index.php", + * "table": "#example", + * "idSrc": "id" + * } ); + * } ); + */ + idSrc: 'DT_RowId', + /** + * jQuery selector that can be used to identify the table you wish to apply + * this editor instance to. + * + * In previous versions of Editor (1.2 and earlier), this parameter was + * called `table`. The name has been altered in 1.3+ to simplify the + * initialisation. This is a backwards compatible change - if you pass in + * a `table` option it will be used. + * + * @type string + * @default Empty string + * + * @example + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": "php/index.php", + * "table": "#example" + * } ); + * } ); + */ + table: null, +}; + +var settings = { + action: null, + actionName: 'action', + ajax: null, + bubbleNodes: [], + bubbleBottom: false, + closeCb: null, + closeIcb: null, + dataSource: null, + displayController: null, + displayed: false, + editCount: 0, + editData: {}, + editFields: {}, + editOpts: {}, + fields: {}, + formOptions: { + bubble: $.extend({}, formOptions), + inline: $.extend({}, formOptions), + main: $.extend({}, formOptions), + }, + globalError: '', + id: -1, + idSrc: null, + includeFields: [], + mode: null, + modifier: null, + opts: null, + order: [], + processing: false, + setFocus: null, + table: null, + template: null, + unique: 0 +}; + +var DataTable$6 = $.fn.dataTable; +var DtInternalApi = DataTable$6.ext.oApi; +function objectKeys(o) { + var out = []; + for (var key in o) { + if (o.hasOwnProperty(key)) { + out.push(key); + } + } + return out; +} +function el(tag, ctx) { + if (ctx === undefined) { + ctx = document; + } + return $('*[data-dte-e="' + tag + '"]', ctx); +} +function safeDomId(id, prefix) { + if (prefix === void 0) { prefix = '#'; } + return typeof id === 'string' ? + prefix + id.replace(/\./g, '-') : + prefix + id; +} +function safeQueryId(id, prefix) { + if (prefix === void 0) { prefix = '#'; } + return typeof id === 'string' ? + prefix + id.replace(/(:|\.|\[|\]|,)/g, '\\$1') : + prefix + id; +} +function dataGet(src) { + return DtInternalApi._fnGetObjectDataFn(src); +} +function dataSet(src) { + return DtInternalApi._fnSetObjectDataFn(src); +} +var extend = DtInternalApi._fnExtend; +function pluck(a, prop) { + var out = []; + $.each(a, function (idx, elIn) { + out.push(elIn[prop]); + }); + return out; +} +/** + * Compare parameters for difference - diving into arrays and objects if + * needed, allowing the object reference to be different, but the contents to + * match. + * + * Please note that LOOSE type checking is used + */ +function deepCompare(o1, o2) { + if (typeof o1 !== 'object' || typeof o2 !== 'object') { + return o1 == o2; + } + var o1Props = objectKeys(o1); + var o2Props = objectKeys(o2); + if (o1Props.length !== o2Props.length) { + return false; + } + for (var i = 0, ien = o1Props.length; i < ien; i++) { + var propName = o1Props[i]; + if (typeof o1[propName] === 'object') { + if (!deepCompare(o1[propName], o2[propName])) { + return false; + } + } + else if (o1[propName] != o2[propName]) { + return false; + } + } + return true; +} + +/* - - - - - - - - - - + * DataTables editor interface + */ +var _dtIsSsp = function (dt, editor) { + // If the draw type is `none`, then we still need to use the DT API to + // update the display with the new data + return dt.settings()[0].oFeatures.bServerSide && + editor.s.editOpts.drawType !== 'none'; +}; +var _dtApi = function (table) { + return table instanceof $.fn.dataTable.Api + ? table + : $(table).DataTable(); +}; +var _dtHighlight = function (node) { + // Highlight a row using CSS transitions. The timeouts need to match the + // transition duration from the CSS + node = $(node); + setTimeout(function () { + node.addClass('highlight'); + setTimeout(function () { + node + .addClass('noHighlight') + .removeClass('highlight'); + setTimeout(function () { + node.removeClass('noHighlight'); + }, 550); + }, 500); + }, 20); +}; +var _dtRowSelector = function (out, dt, identifier, fields, idFn) { + dt.rows(identifier).indexes().each(function (idx) { + var row = dt.row(idx); + var data = row.data(); + var idSrc = idFn(data); + if (idSrc === undefined) { + Editor.error('Unable to find row identifier', 14); + } + out[idSrc] = { + data: data, + fields: fields, + idSrc: idSrc, + node: row.node(), + type: 'row' + }; + }); +}; +var _dtFieldsFromIdx = function (dt, fields, idx, ignoreUnknown) { + var col = dt.settings()[0].aoColumns[idx]; + var dataSrc = col.editField !== undefined ? + col.editField : + col.mData; + var resolvedFields = {}; + var run = function (field, dataSrcIn) { + if (field.name() === dataSrcIn) { + resolvedFields[field.name()] = field; + } + }; + $.each(fields, function (name, fieldInst) { + if (Array.isArray(dataSrc)) { + for (var _i = 0, dataSrc_1 = dataSrc; _i < dataSrc_1.length; _i++) { + var data = dataSrc_1[_i]; + run(fieldInst, data); + } + } + else { + run(fieldInst, dataSrc); + } + }); + if ($.isEmptyObject(resolvedFields) && !ignoreUnknown) { + Editor.error('Unable to automatically determine field from source. Please specify the field name.', 11); + } + return resolvedFields; +}; +var _dtCellSelector = function (out, dt, identifier, allFields, idFn, forceFields) { + if (forceFields === void 0) { forceFields = null; } + var cells = dt.cells(identifier); + cells.indexes().each(function (idx) { + var cell = dt.cell(idx); + var row = dt.row(idx.row); + var data = row.data(); + var idSrc = idFn(data); + var fields = forceFields || _dtFieldsFromIdx(dt, allFields, idx.column, cells.count() > 1); + var isNode = (typeof identifier === 'object' && identifier.nodeName) || identifier instanceof $; + var prevDisplayFields; + var prevAttach; + var prevAttachFields; + // Only add if a field was found to edit + if (Object.keys(fields).length) { + // The row selector will create a new `out` object for the identifier, and the + // cell selector might be called multiple times for a row, so we need to save + // our specific items + if (out[idSrc]) { + prevAttach = out[idSrc].attach; + prevAttachFields = out[idSrc].attachFields; + prevDisplayFields = out[idSrc].displayFields; + } + // Use the row selector to get the row information + _dtRowSelector(out, dt, idx.row, allFields, idFn); + out[idSrc].attachFields = prevAttachFields || []; + out[idSrc].attachFields.push(Object.keys(fields)); + out[idSrc].attach = prevAttach || []; + out[idSrc].attach.push(isNode ? + $(identifier).get(0) : + cell.fixedNode ? // If its under a fixed column, get the floating node + cell.fixedNode() : + cell.node()); + out[idSrc].displayFields = prevDisplayFields || {}; + $.extend(out[idSrc].displayFields, fields); + } + }); +}; +var _dtColumnSelector = function (out, dt, identifier, fields, idFn) { + dt.cells(null, identifier).indexes().each(function (idx) { + _dtCellSelector(out, dt, idx, fields, idFn); + }); +}; +var dataSource$1 = { + commit: function (action, identifier, data, store) { + // Updates complete - redraw + var that = this; + var dt = _dtApi(this.s.table); + var ssp = dt.settings()[0].oFeatures.bServerSide; + var ids = store.rowIds; + // On edit, if there are any rows left in the `store.rowIds`, then they + // were not returned by the server and should be removed (they might not + // meet filtering requirements any more for example) + if (!_dtIsSsp(dt, this) && action === 'edit' && store.rowIds.length) { + var row = void 0; + var compare = function (id) { + return function (rowIdx, rowData, rowNode) { + return id == dataSource$1.id.call(that, rowData); + }; + }; + for (var i = 0, ien = ids.length; i < ien; i++) { + // Find the row to edit - attempt to do an id look up first for speed + try { + row = dt.row(safeQueryId(ids[i])); + } + catch (e) { + row = dt; + } + // If not found, then we need to do it the slow way + if (!row.any()) { + row = dt.row(compare(ids[i])); + } + if (row.any() && !ssp) { + row.remove(); + } + } + } + var drawType = this.s.editOpts.drawType; + if (drawType !== 'none') { + var dtAny = dt; + // SSP highlighting has to go after the draw, but this can't be + // merged with client-side processing highlight as we want that + // to work even when there isn't a draw happening. + if (ssp && ids && ids.length) { + dt.one('draw', function () { + for (var i = 0, ien = ids.length; i < ien; i++) { + var row = dt.row(safeQueryId(ids[i])); + if (row.any()) { + _dtHighlight(row.node()); + } + } + }); + } + dt.draw(drawType); + // Responsive needs to take account of new data column widths + if (dtAny.responsive) { + dtAny.responsive.recalc(); + } + // Rebuild searchpanes + if (typeof dtAny.searchPanes === 'function' && !ssp) { + dtAny.searchPanes.rebuildPane(undefined, true); + } + // Rebuild searchbuilder + if (dtAny.searchBuilder !== undefined && typeof dtAny.searchBuilder.rebuild === 'function' && !ssp) { + dtAny.searchBuilder.rebuild(dtAny.searchBuilder.getDetails()); + } + } + }, + create: function (fields, data) { + var dt = _dtApi(this.s.table); + if (!_dtIsSsp(dt, this)) { + var row = dt.row.add(data); + _dtHighlight(row.node()); + } + }, + edit: function (identifier, fields, data, store) { + var that = this; + var dt = _dtApi(this.s.table); + // No point in doing anything when server-side processing - the commit + // will redraw the table + if (!_dtIsSsp(dt, this) || this.s.editOpts.drawType === 'none') { + // The identifier can select one or more rows, but the data will + // refer to just a single row. We need to determine which row from + // the set is the one to operator on. + var rowId_1 = dataSource$1.id.call(this, data); + var row = void 0; + // Find the row to edit - attempt to do an id look up first for speed + try { + row = dt.row(safeQueryId(rowId_1)); + } + catch (e) { + row = dt; + } + // If not found, then we need to do it the slow way + if (!row.any()) { + row = dt.row(function (rowIdx, rowData, rowNode) { + return rowId_1 == dataSource$1.id.call(that, rowData); + }); + } + if (row.any()) { + // Merge data to allow for a sub-set to be returned + var toSave = extend({}, row.data(), true); + toSave = extend(toSave, data, true); + row.data(toSave); + // Remove the item from the list of indexes now that is has been + // updated + var idx = $.inArray(rowId_1, store.rowIds); + store.rowIds.splice(idx, 1); + } + else { + // If not found, then its a new row (change in pkey possibly) + row = dt.row.add(data); + } + _dtHighlight(row.node()); + } + }, + fakeRow: function (insertPoint) { + var dt = _dtApi(this.s.table); + var tr = $(''); + var attachFields = []; + var attach = []; + var displayFields = {}; + var tbody = dt.table(undefined).body(); + for (var i = 0, ien = dt.columns(':visible').count(); i < ien; i++) { + var visIdx = dt.column(i + ':visible').index(); + var td = $('').appendTo(tr); + var fields = _dtFieldsFromIdx(dt, this.s.fields, visIdx, true); + var settings = dt.settings()[0]; + var className = settings.aoColumns[visIdx].sClass; + if (className) { + td.addClass(className); + } + if (Object.keys(fields).length) { + attachFields.push(Object.keys(fields)); + attach.push(td[0]); + $.extend(displayFields, fields); + } + } + var append = function () { + // Remove the data empty message + if (dt.page.info().recordsDisplay === 0) { + $(tbody).empty(); + } + var action = insertPoint === 'end' + ? 'appendTo' + : 'prependTo'; + tr[action](tbody); + }; + this.__dtFakeRow = tr; + // Insert into the table + append(); + dt.on('draw.dte-createInline', function () { + append(); + }); + return { + 0: { + attach: attach, + attachFields: attachFields, + displayFields: displayFields, + fields: this.s.fields, + type: 'row' + } + }; + }, + fakeRowEnd: function () { + var dt = _dtApi(this.s.table); + dt.off('draw.dte-createInline'); + this.__dtFakeRow.remove(); + this.__dtFakeRow = null; + // Restore data empty row + if (dt.page.info().recordsDisplay === 0) { + dt.draw(false); + } + }, + // get idSrc, fields to edit, data and node for each item + fields: function (identifier) { + var idFn = dataGet(this.s.idSrc); + var dt = _dtApi(this.s.table); + var fields = this.s.fields; + var out = {}; + if ($.isPlainObject(identifier) && + (identifier.rows !== undefined || identifier.columns !== undefined || identifier.cells !== undefined)) { + // Multi-item type selector + if (identifier.rows !== undefined) { + _dtRowSelector(out, dt, identifier.rows, fields, idFn); + } + if (identifier.columns !== undefined) { + _dtColumnSelector(out, dt, identifier.columns, fields, idFn); + } + if (identifier.cells !== undefined) { + _dtCellSelector(out, dt, identifier.cells, fields, idFn); + } + } + else { + // Just a rows selector + _dtRowSelector(out, dt, identifier, fields, idFn); + } + return out; + }, + id: function (data) { + var idFn = dataGet(this.s.idSrc); + return idFn(data); + }, + individual: function (identifier, fieldNames) { + var idFn = dataGet(this.s.idSrc); + var dt = _dtApi(this.s.table); + var fields = this.s.fields; + var out = {}; + var forceFields; + if (fieldNames) { + if (!Array.isArray(fieldNames)) { + fieldNames = [fieldNames]; + } + forceFields = {}; + $.each(fieldNames, function (i, name) { + forceFields[name] = fields[name]; + }); + } + _dtCellSelector(out, dt, identifier, fields, idFn, forceFields); + return out; + }, + prep: function (action, identifier, submit, json, store) { + var _this = this; + // Get the id of the rows created / edited + if (action === 'create') { + store.rowIds = $.map(json.data, function (row) { return dataSource$1.id.call(_this, row); }); + } + if (action === 'edit') { + var cancelled_1 = json.cancelled || []; + store.rowIds = $.map(submit.data, function (val, key) { + return !$.isEmptyObject(submit.data[key]) && // was submitted + $.inArray(key, cancelled_1) === -1 ? // was not cancelled on the server-side + key : + undefined; + }); + } + else if (action === 'remove') { + store.cancelled = json.cancelled || []; + } + }, + refresh: function () { + // Reload a table's data - used when nested data is changed + var dt = _dtApi(this.s.table); + dt.ajax.reload(null, false); + }, + remove: function (identifier, fields, store) { + // No confirmation from the server + var that = this; + var dt = _dtApi(this.s.table); + var cancelled = store.cancelled; + if (cancelled.length === 0) { + // No rows were cancelled on the server-side, remove them all + dt.rows(identifier).remove(); + } + else { + // One or more rows were cancelled, so we need to identify them + // and not remove those rows + var indexes_1 = []; + dt.rows(identifier).every(function () { + var id = dataSource$1.id.call(that, this.data()); + if ($.inArray(id, cancelled) === -1) { + // Don't use `remove` here - it messes up the indexes + indexes_1.push(this.index()); + } + }); + dt.rows(indexes_1).remove(); + } + } +}; + +/* - - - - - - - - + * HTML editor interface + */ +function _htmlId(identifier) { + if (identifier === 'keyless') { + return $(document); + } + var specific = $('[data-editor-id="' + identifier + '"]'); + if (specific.length === 0) { + specific = typeof identifier === 'string' ? + $(safeQueryId(identifier)) : + $(identifier); + } + if (specific.length === 0) { + throw new Error('Could not find an element with `data-editor-id` or `id` of: ' + identifier); + } + return specific; +} +function _htmlEl(identifier, name) { + var context = _htmlId(identifier); + return $('[data-editor-field="' + name + '"]', context); +} +function _htmlEls(identifier, names) { + var out = $(); + for (var i = 0, ien = names.length; i < ien; i++) { + out = out.add(_htmlEl(identifier, names[i])); + } + return out; +} +function _htmlGet(identifier, dataSrc) { + var el = _htmlEl(identifier, dataSrc); + return el.filter('[data-editor-value]').length ? + el.attr('data-editor-value') : + el.html(); +} +function _htmlSet(identifier, fields, data) { + $.each(fields, function (name, field) { + var val = field.valFromData(data); + if (val !== undefined) { + var el = _htmlEl(identifier, field.dataSrc()); + if (el.filter('[data-editor-value]').length) { + el.attr('data-editor-value', val); + } + else { + el.each(function () { + // This is very frustrating, but in IE if you just write directly + // to innerHTML, and elements that are overwritten are GC'ed, + // even if there is a reference to them elsewhere + while (this.childNodes.length) { + this.removeChild(this.firstChild); + } + }) + .html(val); + } + } + }); +} +var dataSource = { + create: function (fields, data) { + // If there is an element with the id that has been created, then use it + // to assign the values + if (data) { + var id = dataSource.id.call(this, data); + try { + if (_htmlId(id).length) { + _htmlSet(id, fields, data); + } + } + catch (e) { + // noop - use `postCreate` to add items to the DOM + } + } + }, + edit: function (identifier, fields, data) { + // Get the ids from the returned data or `keyless` if not found + var id = dataSource.id.call(this, data) || 'keyless'; + _htmlSet(id, fields, data); + }, + // get idSrc, fields to edit, data and node for each item + fields: function (identifier) { + var out = {}; + // Allow multi-point editing + if (Array.isArray(identifier)) { + for (var i = 0, ien = identifier.length; i < ien; i++) { + var res = dataSource.fields.call(this, identifier[i]); + out[identifier[i]] = res[identifier[i]]; + } + return out; + } + // else + var data = {}; + var fields = this.s.fields; + if (!identifier) { + identifier = 'keyless'; + } + $.each(fields, function (name, field) { + var val = _htmlGet(identifier, field.dataSrc()); + // If no HTML element is present, jQuery returns null. We want undefined + field.valToData(data, val === null ? undefined : val); + }); + out[identifier] = { + data: data, + fields: fields, + idSrc: identifier, + node: document, + type: 'row' + }; + return out; + }, + id: function (data) { + var idFn = dataGet(this.s.idSrc); + return idFn(data); + }, + individual: function (identifier, fieldNames) { + var attachEl; + // Auto detection of the field name and id + if (identifier instanceof $ || identifier.nodeName) { + attachEl = identifier; + if (!fieldNames) { + fieldNames = [$(identifier).attr('data-editor-field')]; + } + var back = $.fn.addBack ? 'addBack' : 'andSelf'; + identifier = $(identifier).parents('[data-editor-id]')[back]().data('editor-id'); + } + // no id given and none found + if (!identifier) { + identifier = 'keyless'; + } + // no field name - cannot continue + if (fieldNames && !Array.isArray(fieldNames)) { + fieldNames = [fieldNames]; + } + if (!fieldNames || fieldNames.length === 0) { + throw new Error('Cannot automatically determine field name from data source'); + } + var out = dataSource.fields.call(this, identifier); + var fields = this.s.fields; + var forceFields = {}; + $.each(fieldNames, function (i, name) { + forceFields[name] = fields[name]; + }); + $.each(out, function (id, set) { + set.type = 'cell'; + set.attachFields = [fieldNames]; + set.attach = attachEl ? + $(attachEl) : + _htmlEls(identifier, fieldNames).toArray(); + set.fields = fields; + set.displayFields = forceFields; + }); + return out; + }, + initField: function (cfg) { + // This is before the field has been initialised so can't use it API + var label = $('[data-editor-label="' + (cfg.data || cfg.name) + '"]'); + if (!cfg.label && label.length) { + cfg.label = label.html(); + } + }, + remove: function (identifier, fields) { + // If there is an element with an ID property matching the identifier, + // remove it + if (identifier !== 'keyless') { + _htmlId(identifier).remove(); + } + } +}; + +/** + * Class names that are used by Editor for its various display components. + * A copy of this object is taken when an Editor instance is initialised, thus + * allowing different classes to be used in different instances if required. + * Class name changes can be useful for easy integration with CSS frameworks, + * for example Twitter Bootstrap. + * + * @namespace + */ +var classNames = { + /** + * Action classes - these are added to the Editor base element ("wrapper") + * and allows styling based on the type of form view that is being employed. + * + * @namespace + */ + actions: { + /** + * Editor is in 'create' state + */ + create: 'DTE_Action_Create', + /** + * Editor is in 'edit' state + */ + edit: 'DTE_Action_Edit', + /** + * Editor is in 'remove' state + */ + remove: 'DTE_Action_Remove' + }, + /** + * Display body classes + * + * @namespace + */ + body: { + /** + * Liner for the body content + */ + content: 'DTE_Body_Content', + /** + * Container for the body elements + */ + wrapper: 'DTE_Body' + }, + /** + * Bubble editing classes - these are used to display the bubble editor + * + * @namespace + */ + bubble: { + /** + * Fixed background + */ + bg: 'DTE_Bubble_Background', + /** + * Close button + */ + close: 'icon close', + /** + * Bubble content liner + */ + liner: 'DTE_Bubble_Liner', + /** + * Pointer shown which node is being edited + */ + pointer: 'DTE_Bubble_Triangle', + /** + * Bubble table display wrapper, so the buttons and form can be shown + * as table cells (via css) + */ + table: 'DTE_Bubble_Table', + /** + * Bubble container element + */ + wrapper: 'DTE DTE_Bubble' + }, + /** + * Field classes + * + * @namespace + */ + field: { + /** + * Field is disabled + */ + 'disabled': 'disabled', + /** + * Field error state (added to the field.wrapper element when in error state + */ + 'error': 'DTE_Field_StateError', + /** + * Field input container + */ + 'input': 'DTE_Field_Input', + /** + * Input elements wrapper + */ + 'inputControl': 'DTE_Field_InputControl', + /** + * Field label + */ + 'label': 'DTE_Label', + /** + * Error information text + */ + 'msg-error': 'DTE_Field_Error', + /** + * General information text + */ + 'msg-info': 'DTE_Field_Info', + /** + * Label information text + */ + 'msg-label': 'DTE_Label_Info', + /** + * Live messaging (API) information text + */ + 'msg-message': 'DTE_Field_Message', + /** + * Multi-value information descriptive text + */ + 'multiInfo': 'multi-info', + /** + * Multi-value not editable (field.multiEditable) + */ + 'multiNoEdit': 'multi-noEdit', + /** + * Multi-value information display + */ + 'multiRestore': 'multi-restore', + /** + * Multi-value information display wrapper + */ + 'multiValue': 'multi-value', + /** + * Class prefix for the field name - field name is added to the end allowing + * styling based on field name. + */ + 'namePrefix': 'DTE_Field_Name_', + /** + * Field's processing element + */ + 'processing': 'DTE_Processing_Indicator', + /** + * Class prefix for the field type - field type is added to the end allowing + * styling based on field type. + */ + 'typePrefix': 'DTE_Field_Type_', + /** + * Container for each field + */ + 'wrapper': 'DTE_Field' + }, + /** + * Display footer classes + * + * @namespace + */ + footer: { + /** + * Liner for the footer content + */ + content: 'DTE_Footer_Content', + /** + * Container for the footer elements + */ + wrapper: 'DTE_Footer' + }, + /** + * Form classes + * + * @namespace + */ + form: { + /** + * Button + */ + button: 'btn', + /** + * Button inside the form + */ + buttonInternal: 'btn', + /** + * Buttons container + */ + buttons: 'DTE_Form_Buttons', + /** + * Liner for the form content + */ + content: 'DTE_Form_Content', + /** + * Global error imformation + */ + error: 'DTE_Form_Error', + /** + * Global form information + */ + info: 'DTE_Form_Info', + /** + * Applied to the
tag + */ + tag: '', + /** + * Container for the form elements + */ + wrapper: 'DTE_Form' + }, + /** + * Display header classes + * + * @namespace + */ + header: { + /** + * Liner for the header content + */ + content: 'DTE_Header_Content', + /** + * Title tag + */ + title: { + tag: null, + class: '' + }, + /** + * Container for the header elements + */ + wrapper: 'DTE_Header' + }, + /** + * Inline editing classes - these are used to display the inline editor + * + * @namespace + */ + inline: { + buttons: 'DTE_Inline_Buttons', + liner: 'DTE_Inline_Field', + wrapper: 'DTE DTE_Inline', + }, + /** + * Processing classes + * + * @namespace + */ + processing: { + /** + * Added to the base element ("wrapper") when the form is "processing" + */ + active: 'processing', + /** + * Processing indicator element + */ + indicator: 'DTE_Processing_Indicator' + }, + /** + * Applied to the base DIV element that contains all other Editor elements + */ + wrapper: 'DTE' +}; + +var displayed$2 = false; +var cssBackgroundOpacity = 1; +var dom$1 = { + background: $('
')[0], + close: $('
')[0], + content: null, + wrapper: $('
' + + '
' + + '
' + + '
')[0] +}; +function findAttachRow(editor, attach) { + var dt = new $.fn.dataTable.Api(editor.s.table); + // Figure out where we want to put the form display + if (attach === 'head') { + return dt.table(undefined).header(); // typing error in DT type file + } + else if (editor.s.action === 'create') { + return dt.table(undefined).header(); + } + else { + return dt.row(editor.s.modifier).node(); + } +} +function heightCalc$1(dte) { + // Set the max-height for the form content + var header = $('div.DTE_Header', dom$1.wrapper).outerHeight(); + var footer = $('div.DTE_Footer', dom$1.wrapper).outerHeight(); + var maxHeight = $(window).height() - (envelope.conf.windowPadding * 2) - + header - footer; + $('div.DTE_Body_Content', dom$1.wrapper).css('maxHeight', maxHeight); + return $(dte.dom.wrapper).outerHeight(); +} +function hide$2(dte, callback) { + if (!callback) { + callback = function () { }; + } + if (displayed$2) { + $(dom$1.content).animate({ + top: -(dom$1.content.offsetHeight + 50) + }, 600, function () { + $([dom$1.wrapper, dom$1.background]).fadeOut('normal', function () { + $(this).detach(); + callback(); + }); + }); + displayed$2 = false; + } +} +function init$1() { + dom$1.content = $('div.DTED_Envelope_Container', dom$1.wrapper)[0]; + cssBackgroundOpacity = $(dom$1.background).css('opacity'); +} +function show$2(dte, callback) { + if (!callback) { + callback = function () { }; + } + $('body') + .append(dom$1.background) + .append(dom$1.wrapper); + // Adjust size for the content + dom$1.content.style.height = 'auto'; + if (!displayed$2) { + var style = dom$1.wrapper.style; + style.opacity = '0'; + style.display = 'block'; + var height = heightCalc$1(dte); + var targetRow = findAttachRow(dte, envelope.conf.attach); + var width = targetRow.offsetWidth; + style.display = 'none'; + style.opacity = '1'; + // Prep the display + dom$1.wrapper.style.width = width + 'px'; + dom$1.wrapper.style.marginLeft = -(width / 2) + 'px'; + dom$1.wrapper.style.top = ($(targetRow).offset().top + targetRow.offsetHeight) + 'px'; + dom$1.content.style.top = ((-1 * height) - 20) + 'px'; + // Start animating in the background + dom$1.background.style.opacity = '0'; + dom$1.background.style.display = 'block'; + $(dom$1.background).animate({ + opacity: cssBackgroundOpacity + }, 'normal'); + // Animate in the display + $(dom$1.wrapper).fadeIn(); + $(dom$1.content).animate({ top: 0 }, 600, callback); + } + // Event handlers + $(dom$1.close) + .attr('title', dte.i18n.close) + .off('click.DTED_Envelope') + .on('click.DTED_Envelope', function (e) { + dte.close(); + }); + $(dom$1.background) + .off('click.DTED_Envelope') + .on('click.DTED_Envelope', function (e) { + dte.background(); + }); + $('div.DTED_Lightbox_Content_Wrapper', dom$1.wrapper) + .off('click.DTED_Envelope') + .on('click.DTED_Envelope', function (e) { + if ($(e.target).hasClass('DTED_Envelope_Content_Wrapper')) { + dte.background(); + } + }); + $(window) + .off('resize.DTED_Envelope') + .on('resize.DTED_Envelope', function () { + heightCalc$1(dte); + }); + displayed$2 = true; +} +var envelope = { + close: function (dte, callback) { + hide$2(dte, callback); + }, + conf: { + attach: 'row', + windowPadding: 50 + }, + destroy: function (dte) { + hide$2(); + }, + init: function (dte) { + init$1(); + return envelope; + }, + node: function (dte) { + return dom$1.wrapper[0]; + }, + open: function (dte, append, callback) { + $(dom$1.content).children().detach(); + dom$1.content.appendChild(append); + dom$1.content.appendChild(dom$1.close); + show$2(dte, callback); + } +}; + +function isMobile() { + return typeof window.orientation !== 'undefined' && window.outerWidth <= 576 + ? true + : false; +} +var displayed$1 = false; +var ready = false; +var scrollTop = 0; +var dom = { + background: $('
'), + close: $('
'), + content: null, + wrapper: $('
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
') +}; +function heightCalc() { + var headerFooter = $('div.DTE_Header', dom.wrapper).outerHeight() + + $('div.DTE_Footer', dom.wrapper).outerHeight(); + if (isMobile()) { + $('div.DTE_Body_Content', dom.wrapper).css('maxHeight', 'calc(100vh - ' + headerFooter + 'px)'); + } + else { + // Set the max-height for the form content + var maxHeight = $(window).height() - (self.conf.windowPadding * 2) - headerFooter; + $('div.DTE_Body_Content', dom.wrapper).css('maxHeight', maxHeight); + } +} +function hide$1(dte, callback) { + if (!callback) { + callback = function () { }; + } + // Restore scroll state + $('body').scrollTop(scrollTop); + dte._animate(dom.wrapper, { + opacity: 0, + top: self.conf.offsetAni + }, function () { + $(this).detach(); + callback(); + }); + dte._animate(dom.background, { + opacity: 0 + }, function () { + $(this).detach(); + }); + displayed$1 = false; + $(window).off('resize.DTED_Lightbox'); +} +function init() { + if (ready) { + return; + } + dom.content = $('div.DTED_Lightbox_Content', dom.wrapper); + dom.wrapper.css('opacity', 0); + dom.background.css('opacity', 0); + ready = true; +} +function show$1(dte, callback) { + // Mobiles have very poor position fixed abilities, so we need to know + // when using mobile A media query isn't good enough + if (isMobile()) { + $('body').addClass('DTED_Lightbox_Mobile'); + } + $('body') + .append(dom.background) + .append(dom.wrapper); + heightCalc(); + if (!displayed$1) { + displayed$1 = true; + dom.content.css('height', 'auto'); + dom.wrapper.css({ + top: -self.conf.offsetAni + }); + dte._animate(dom.wrapper, { + opacity: 1, + top: 0 + }, callback); + dte._animate(dom.background, { + opacity: 1 + }); + $(window).on('resize.DTED_Lightbox', function () { + heightCalc(); + }); + scrollTop = $('body').scrollTop(); + } + // Event handlers - assign on show, premoving previous bindings + dom.close + .attr('title', dte.i18n.close) + .off('click.DTED_Lightbox') + .on('click.DTED_Lightbox', function (e) { + dte.close(); + }); + dom.background + .off('click.DTED_Lightbox') + .on('click.DTED_Lightbox', function (e) { + e.stopImmediatePropagation(); + dte.background(); + }); + $('div.DTED_Lightbox_Content_Wrapper', dom.wrapper) + .off('click.DTED_Lightbox') + .on('click.DTED_Lightbox', function (e) { + if ($(e.target).hasClass('DTED_Lightbox_Content_Wrapper')) { + e.stopImmediatePropagation(); + dte.background(); + } + }); +} +var self = { + close: function (dte, callback) { + hide$1(dte, callback); + }, + conf: { + offsetAni: 25, + windowPadding: 25 + }, + destroy: function (dte) { + if (displayed$1) { + hide$1(dte); + } + }, + init: function (dte) { + init(); + return self; + }, + node: function (dte) { + return dom.wrapper[0]; + }, + open: function (dte, append, callback) { + var content = dom.content; + content.children().detach(); + content + .append(append) + .append(dom.close); + show$1(dte, callback); + }, +}; + +var DataTable$5 = $.fn.dataTable; +/** + * Add a new field to the from. This is the method that is called automatically when + * fields are given in the initialisation objects as `Editor.defaults.fields`. + * + * @param this Editor instance + * @param cfg The object that describes the field (the full + * object is described by `Editor.model.field`. Note that multiple + * fields can be given by passing in an array of field definitions. + * @param after Existing field to insert the new field after. This + * can be `undefined` (insert at end), `null` (insert at start) or `string` + * the field name to insert after. + * @param reorder INTERNAL for array adding performance only + * @returns Editor instance + */ +function add(cfg, after, reorder) { + if (reorder === void 0) { reorder = true; } + // Allow multiple fields to be added at the same time + if (Array.isArray(cfg)) { + // Do it in reverse to allow fields to appear in the same order given, otherwise, + // the would appear in reverse if given an `after` + if (after !== undefined) { + cfg.reverse(); + } + for (var _i = 0, cfg_1 = cfg; _i < cfg_1.length; _i++) { + var cfgDp = cfg_1[_i]; + this.add(cfgDp, after, false); + } + this._displayReorder(this.order()); + return this; + } + var name = cfg.name; + if (name === undefined) { + throw new Error('Error adding field. The field requires a `name` option'); + } + if (this.s.fields[name]) { + throw new Error('Error adding field \'' + name + '\'. A field already exists with this name'); + } + // Allow the data source to add / modify the field properties + // Dev: would this be better as an event `preAddField`? And have the + // data sources init only once, but can listen for such events? More + // complexity, but probably more flexible... + this._dataSource('initField', cfg); + var editorField = new Editor.Field(cfg, this.classes.field, this); + // If in an editing mode, we need to set the field up for the data + if (this.s.mode) { + var editFields = this.s.editFields; + editorField.multiReset(); + $.each(editFields, function (idSrc, editIn) { + var value; + if (editIn.data) { + value = editorField.valFromData(editIn.data); + } + editorField.multiSet(idSrc, value !== undefined ? + value : + editorField.def()); + }); + } + this.s.fields[name] = editorField; + if (after === undefined) { + this.s.order.push(name); + } + else if (after === null) { + this.s.order.unshift(name); + } + else { + var idx = $.inArray(after, this.s.order); + this.s.order.splice(idx + 1, 0, name); + } + if (reorder !== false) { + this._displayReorder(this.order()); + } + return this; +} +function ajax(newAjax) { + if (newAjax) { + this.s.ajax = newAjax; + return this; + } + return this.s.ajax; +} +/** + * Perform background activation tasks. + * + * This is NOT publicly documented on the Editor web-site, but rather can be + * used by display controller plug-ins to perform the required task on + * background activation. + * + * @param this Editor instance + * @returns Editor instance + */ +function background() { + var onBackground = this.s.editOpts.onBackground; + if (typeof onBackground === 'function') { + onBackground(this); + } + else if (onBackground === 'blur') { + this.blur(); + } + else if (onBackground === 'close') { + this.close(); + } + else if (onBackground === 'submit') { + this.submit(); + } + return this; +} +/** + * Blur the currently displayed editor. + * + * A blur is different from a `close()` in that it might cause either a close or + * the form to be submitted. A typical example of a blur would be clicking on + * the background of the bubble or main editing forms - i.e. it might be a + * close, or it might submit depending upon the configuration, while a click on + * the close box is a very definite close. + * + * @returns Editor instance + */ +function blur() { + this._blur(); + return this; +} +function bubble(cells, fieldNames, showIn, opts) { + var _this = this; + if (showIn === void 0) { showIn = true; } + var that = this; + // Some other field in inline edit mode? + if (this._tidy(function () { + that.bubble(cells, fieldNames, opts); + })) { + return this; + } + // Argument shifting + if ($.isPlainObject(fieldNames)) { + opts = fieldNames; + fieldNames = undefined; + showIn = true; + } + else if (typeof fieldNames === 'boolean') { + showIn = fieldNames; + fieldNames = undefined; + opts = undefined; + } + if ($.isPlainObject(showIn)) { + opts = showIn; + showIn = true; + } + if (showIn === undefined) { + showIn = true; + } + opts = $.extend({}, this.s.formOptions.bubble, opts); + var editFields = this._dataSource('individual', cells, fieldNames); + this._edit(cells, editFields, 'bubble', opts, function () { + var namespace = _this._formOptions(opts); + var ret = _this._preopen('bubble'); + if (!ret) { + return _this; + } + // Keep the bubble in position on resize + $(window).on('resize.' + namespace + ' scroll.' + namespace, function () { + _this.bubblePosition(); + }); + // Store the nodes this are being used so the bubble can be positioned + var nodes = []; + _this.s.bubbleNodes = nodes.concat.apply(nodes, pluck(editFields, 'attach')); + // Create container display + var classes = _this.classes.bubble; + var backgroundNode = $('
'); + var container = $('
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'); + if (showIn) { + container.appendTo('body'); + backgroundNode.appendTo('body'); + } + var liner = container.children().eq(0); + var tableNode = liner.children(); + var closeNode = tableNode.children(); + liner.append(_this.dom.formError); + tableNode.prepend(_this.dom.form); + if (opts.message) { + liner.prepend(_this.dom.formInfo); + } + if (opts.title) { + liner.prepend(_this.dom.header); + } + if (opts.buttons) { + tableNode.append(_this.dom.buttons); + } + // Need to use a small anon function here as the animate callback is the scope + // of the element being animated and TS won't allow access to the private methods + var finish = function () { + _this._clearDynamicInfo(); + _this._event('closed', ['bubble']); + }; + var pair = $().add(container).add(backgroundNode); + _this._closeReg(function (submitComplete) { + _this._animate(pair, { opacity: 0 }, function () { + if (this === container[0]) { + pair.detach(); + $(window).off('resize.' + namespace + ' scroll.' + namespace); + finish(); + } + }); + }); + // Close event handlers + backgroundNode.on('click', function () { + _this.blur(); + }); + closeNode.on('click', function () { + _this._close(); + }); + _this.bubblePosition(); + _this._postopen('bubble', false); + var opened = function () { + _this._focus(_this.s.includeFields, opts.focus); + _this._event('opened', ['bubble', _this.s.action]); + }; + _this._animate(pair, { opacity: 1 }, function () { + // Otherwise the callback will happen on both elements + if (this === container[0]) { + opened(); + } + }); + }); + return this; +} +/** + * Reposition the editing bubble (`bubble()`) when it is visible. This can be + * used to update the bubble position if other elements on the page change + * position. Editor will automatically call this method on window resize. + * + * @returns Editor instance + */ +function bubblePosition() { + var wrapper = $('div.DTE_Bubble'); + var liner = $('div.DTE_Bubble_Liner'); + var nodes = this.s.bubbleNodes; + // Average the node positions to insert the container + var position = { bottom: 0, left: 0, right: 0, top: 0 }; + $.each(nodes, function (i, nodeIn) { + var pos = $(nodeIn).offset(); + nodeIn = $(nodeIn).get(0); + position.top += pos.top; + position.left += pos.left; + position.right += pos.left + nodeIn.offsetWidth; + position.bottom += pos.top + nodeIn.offsetHeight; + }); + position.top /= nodes.length; + position.left /= nodes.length; + position.right /= nodes.length; + position.bottom /= nodes.length; + var top = position.top; + var left = (position.left + position.right) / 2; + var width = liner.outerWidth(); + var height = liner.outerHeight(); + var visLeft = left - (width / 2); + var visRight = visLeft + width; + var docWidth = $(window).width(); + var viewportTop = $(window).scrollTop(); + var padding = 15; + // Show above or below depending on bubbleBottom + wrapper.css({ + left: left, + top: this.s.bubbleBottom ? position.bottom : top + }); + if (this.s.bubbleBottom) { + wrapper.addClass('below'); + } + var curPosition = wrapper.position(); + // Correct for overflow below the fold + if (liner.length && curPosition.top + height > viewportTop + window.innerHeight) { + wrapper + .css('top', top) + .removeClass('below'); + this.s.bubbleBottom = false; + } + else if (liner.length && curPosition.top - height < viewportTop) { + // Correct for overflow from the top of the document by positioning below + // the field if needed + wrapper + .css('top', position.bottom) + .addClass('below'); + this.s.bubbleBottom = true; + } + // Attempt to correct for overflow to the right of the document + if (visRight + padding > docWidth) { + var diff = visRight - docWidth; + // If left overflowing, that takes priority + liner.css('left', visLeft < padding ? + -(visLeft - padding) : + -(diff + padding)); + } + else { + // Correct overflow to the left + liner.css('left', visLeft < padding ? -(visLeft - padding) : 0); + } + return this; +} +/** + * Setup the buttons that will be shown in the footer of the form - calling this + * method will replace any buttons which are currently shown in the form. + * + * @param this Editor instance + * @param buttonsIn A single button definition to add to the form or + * an array of objects with the button definitions to add more than one button. + * The options for the button definitions are fully defined by the + * @returns Editor instance + */ +function buttons(buttonsIn) { + var _this = this; + if (buttonsIn === '_basic') { + // Special string to create a basic button - undocumented + buttonsIn = [{ + action: function () { + this.submit(); + }, + text: this.i18n[this.s.action].submit + }]; + } + else if (!Array.isArray(buttonsIn)) { + // Allow a single button to be passed in as an object with an array + buttonsIn = [buttonsIn]; + } + $(this.dom.buttons).empty(); + $.each(buttonsIn, function (i, btn) { + if (typeof btn === 'string') { + btn = { + action: function () { + this.submit(); + }, + text: btn + }; + } + var text = btn.text || btn.label; // legacy support + var action = btn.action || btn.fn; // legacy support + var attr = btn.attr || {}; + $('', { + class: _this.classes.form.button + (btn.className ? ' ' + btn.className : '') + }) + .html(typeof text === 'function' ? + text(_this) : + text || '') + .attr('tabindex', btn.tabIndex !== undefined ? btn.tabIndex : 0) + .attr(attr) + .on('keyup', function (e) { + if (e.which === 13 && action) { + action.call(_this); + } + }) + .on('keypress', function (e) { + // Stop the browser activating the click event - if we don't + // have this and the Ajax return is fast, the keyup in + // `_formOptions()` might trigger another submit + if (e.which === 13) { + e.preventDefault(); + } + }) + .on('click', function (e) { + e.preventDefault(); + if (action) { + action.call(_this, e); + } + }) + .appendTo(_this.dom.buttons); + }); + return this; +} +/** + * Remove fields from the form. + * + * @param this Editor instance + * @param fieldName Field to remove + * @returns Editor instance + */ +function clear(fieldName) { + var that = this; + var sFields = this.s.fields; + if (typeof fieldName === 'string') { + // Remove an individual form element + that.field(fieldName).destroy(); + delete sFields[fieldName]; + var orderIdx = $.inArray(fieldName, this.s.order); + this.s.order.splice(orderIdx, 1); + var includeIdx = $.inArray(fieldName, this.s.includeFields); + if (includeIdx !== -1) { + this.s.includeFields.splice(includeIdx, 1); + } + } + else { + $.each(this._fieldNames(fieldName), function (i, name) { + that.clear(name); + }); + } + return this; +} +/** + * Close the form display. + * + * @param this Editor instance + * @returns Editor instance + */ +function close() { + this._close(false); + return this; +} +function create(arg1, arg2, arg3, arg4) { + var _this = this; + var that = this; + var sFields = this.s.fields; + var count = 1; + // Some other field in inline edit mode? + if (this._tidy(function () { + that.create(arg1, arg2, arg3, arg4); + })) { + return this; + } + // Multi-row creation support (only supported by the 1.3+ style of calling + // this method, so a max of three arguments + if (typeof arg1 === 'number') { + count = arg1; + arg1 = arg2; + arg2 = arg3; + } + // Set up the edit fields for submission + this.s.editFields = {}; + for (var i = 0; i < count; i++) { + this.s.editFields[i] = { + fields: this.s.fields + }; + } + var argOpts = this._crudArgs(arg1, arg2, arg3, arg4); + this.s.mode = 'main'; + this.s.action = 'create'; + this.s.modifier = null; + this.dom.form.style.display = 'block'; + this._actionClass(); + // Allow all fields to be displayed for the create form + this._displayReorder(this.fields()); + // Set the default for the fields + $.each(sFields, function (name, fieldIn) { + var def = fieldIn.def(); + fieldIn.multiReset(); + // Set a value marker for each multi, so the field + // knows what the id's are (ints in this case) + for (var i = 0; i < count; i++) { + fieldIn.multiSet(i, def); + } + fieldIn.set(def); + }); + this._event('initCreate', null, function () { + _this._assembleMain(); + _this._formOptions(argOpts.opts); + argOpts.maybeOpen(); + }); + return this; +} +/** + * Remove dependent links from a field + * + * @param this Editor instance + * @param parent The name of the field to remove the existing dependencies + * @returns Editor instance + */ +function undependent(parent) { + if (Array.isArray(parent)) { + for (var i = 0, ien = parent.length; i < ien; i++) { + this.undependent(parent[i]); + } + return this; + } + $(this.field(parent).node()).off('.edep'); + return this; +} +/** + * Create a dependent link between two or more fields. This method is used to + * listen for a change in a field's value which will trigger updating of the + * form. This update can consist of updating an options list, changing values + * or making fields hidden / visible. + * + * @param this Editor instance + * @param parent Field(s) to attach a dependency to + * @param url Action to perform on data change + * @param optsIn Configuration options + * @returns Editor instance + */ +function dependent(parent, url, optsIn) { + var _this = this; + if (Array.isArray(parent)) { + for (var i = 0, ien = parent.length; i < ien; i++) { + this.dependent(parent[i], url, optsIn); + } + return this; + } + var that = this; + var parentField = this.field(parent); + var ajaxOpts = { + dataType: 'json', + type: 'POST' + }; + var opts = $.extend({}, { + data: null, + event: 'change', + postUpdate: null, + preUpdate: null + }, optsIn); + var update = function (json) { + if (opts.preUpdate) { + opts.preUpdate(json); + } + // Field specific + $.each({ + errors: 'error', + labels: 'label', + messages: 'message', + options: 'update', + values: 'val' + }, function (jsonProp, fieldFn) { + if (json[jsonProp]) { + $.each(json[jsonProp], function (fieldIn, valIn) { + that.field(fieldIn)[fieldFn](valIn); + }); + } + }); + // Form level + $.each(['hide', 'show', 'enable', 'disable'], function (i, key) { + if (json[key]) { + that[key](json[key], json.animate); + } + }); + if (opts.postUpdate) { + opts.postUpdate(json); + } + parentField.processing(false); + }; + // Use a delegate handler to account for field elements which are added and + // removed after `depenedent` has been called + $(parentField.node()).on(opts.event + '.edep', function (e) { + // Make sure that it was one of the field's elements that triggered the ev + if ($(parentField.node()).find(e.target).length === 0) { + return; + } + parentField.processing(true); + var data = {}; + data.rows = _this.s.editFields ? + pluck(_this.s.editFields, 'data') : + null; + data.row = data.rows ? + data.rows[0] : + null; + data.values = _this.val(); + if (opts.data) { + var ret = opts.data(data); + if (ret) { + data = ret; + } + } + if (typeof url === 'function') { + var o = url.call(_this, parentField.val(), data, update, e); + if (o) { + if (typeof o === 'object' && typeof o.then === 'function') { + o.then(function (resolved) { + if (resolved) { + update(resolved); + } + }); + } + else { + update(o); + } + } + } + else { + if ($.isPlainObject(url)) { + $.extend(ajaxOpts, url); + } + else { + ajaxOpts.url = url; + } + $.ajax($.extend(ajaxOpts, { + data: data, + success: update + })); + } + }); + return this; +} +/** + * Destroy the Editor instance, cleaning up fields, display and event handlers + */ +function destroy() { + if (this.s.displayed) { + this.close(); + } + this.clear(); + // Stick the template back into the document so it can be reused + if (this.s.template) { + $('body').append(this.s.template); + } + var controller = this.s.displayController; + if (controller.destroy) { + controller.destroy(this); + } + $(document).off('.dte' + this.s.unique); + this.dom = null; + this.s = null; +} +/** + * Disable one or more field inputs, disallowing subsequent user interaction with the + * fields until they are re-enabled. + * + * @param this Editor instance + * @param name Field(s) to disable. Disables all if not given. + * @returns Editor instance + */ +function disable(name) { + var that = this; + $.each(this._fieldNames(name), function (i, n) { + that.field(n).disable(); + }); + return this; +} +function display(showIn) { + if (showIn === undefined) { + return this.s.displayed; + } + return this[showIn ? 'open' : 'close'](); +} +/** + * Get a list of the fields that are currently shown in the Editor form. + * + * @param this Editor instance + * @returns Array of field names + */ +function displayed() { + return $.map(this.s.fields, function (fieldIn, name) { + return fieldIn.displayed() ? name : null; + }); +} +/** + * Get display controller node + * + * @returns Display controller host element + */ +function displayNode() { + return this.s.displayController.node(this); +} +function edit(items, arg1, arg2, arg3, arg4) { + var _this = this; + var that = this; + // Some other field in inline edit mode? + if (this._tidy(function () { + that.edit(items, arg1, arg2, arg3, arg4); + })) { + return this; + } + var argOpts = this._crudArgs(arg1, arg2, arg3, arg4); + this._edit(items, this._dataSource('fields', items), 'main', argOpts.opts, function () { + _this._assembleMain(); + _this._formOptions(argOpts.opts); + argOpts.maybeOpen(); + }); + return this; +} +/** + * Enable one or more field inputs, restoring user interaction with the fields. + * + * @param this Editor instance + * @param name Field(s) to enable. If not given, all fields in the form are enabled + * @returns Editor instance + */ +function enable(name) { + var that = this; + $.each(this._fieldNames(name), function (i, n) { + that.field(n).enable(); + }); + return this; +} +function error$1(name, msg) { + var wrapper = $(this.dom.wrapper); + if (msg === undefined) { + // Global error + this._message(this.dom.formError, name, true, function () { + wrapper.toggleClass('inFormError', name !== undefined && name !== ''); + }); + // Store the error message so `inError` can check if there is an + // error or not without considering animation + this.s.globalError = name; + } + else { + // Field error + this.field(name).error(msg); + } + return this; +} +/** + * Get a field object, configured for a named field, which can then be + * manipulated through its API. + * + * @param this Editor instance + * @param name Field to get + * @returns Field instance + */ +function field(name) { + var sFields = this.s.fields; + if (!sFields[name]) { + throw new Error('Unknown field name - ' + name); + } + return sFields[name]; +} +/** + * Get a list of the fields that are used by the Editor instance. + * + * @param this Editor instance + * @returns Editor instance + */ +function fields() { + return $.map(this.s.fields, function (fieldIn, name) { + return name; + }); +} +/** + * Get data object for a file from a table and id + * + * @param name Table name + * @param id Primary key identifier + * @returns File information + */ +function file(name, id) { + var tableFromFile = this.files(name); // can throw. `this` will be Editor or + var fileFromTable = tableFromFile[id]; // DataTables.Api context. Both work. + if (!fileFromTable) { + throw new Error('Unknown file id ' + id + ' in table ' + name); + } + return tableFromFile[id]; +} +function files(name) { + if (!name) { + return Editor.files; + } + var editorTable = Editor.files[name]; + if (!editorTable) { + throw new Error('Unknown file table name: ' + name); + } + return editorTable; +} +function get(name) { + var that = this; + if (!name) { + name = this.fields(); + } + if (Array.isArray(name)) { + var out_1 = {}; + $.each(name, function (i, n) { + out_1[n] = that.field(n).get(); + }); + return out_1; + } + return this.field(name).get(); +} +/** + * Hide one or more fields from the form display. + * + * @param this Editor instance + * @param names Fields to hide. Will hide all if not given + * @param animate Animate (default true) + * @returns Editor instance + */ +function hide(names, animate) { + var that = this; + $.each(this._fieldNames(names), function (i, n) { + that.field(n).hide(animate); + }); + return this; +} +/** + * Get the ids of the rows being edited + * + * @param includeHash Include a prefixed `#`, useful if to be used as a selector + */ +function ids(includeHash) { + if (includeHash === void 0) { includeHash = false; } + return $.map(this.s.editFields, function (editIn, idSrc) { + return includeHash === true ? + '#' + idSrc : + idSrc; + }); +} +/** + * Determine if there is an error state in the form, either the form's global + * error message, or one or more fields. + * + * @param this Editor instance + * @param inNames Fields to check. All checked if not given + * @returns true if in error, false otherwise + */ +function inError(inNames) { + $(this.dom.formError); + // Is there a global error? + if (this.s.globalError) { + return true; + } + // Field specific + var names = this._fieldNames(inNames); + for (var i = 0, ien = names.length; i < ien; i++) { + if (this.field(names[i]).inError()) { + return true; + } + } + return false; +} +function inline(cell, fieldName, opts) { + var _this = this; + var that = this; + // Argument shifting + if ($.isPlainObject(fieldName)) { + opts = fieldName; + fieldName = undefined; + } + opts = $.extend({}, this.s.formOptions.inline, opts); + var editFields = this._dataSource('individual', cell, fieldName); + var keys = Object.keys(editFields); + // Only a single row + if (keys.length > 1) { + throw new Error('Cannot edit more than one row inline at a time'); + } + var editRow = editFields[keys[0]]; + // Remap so easier to use + var hosts = []; + for (var _i = 0, _a = editRow.attach; _i < _a.length; _i++) { + var row = _a[_i]; + hosts.push(row); + } + // Already in edit mode for this cell? + if ($('div.DTE_Field', hosts).length) { + return this; + } + // Some other field in inline edit mode? + if (this._tidy(function () { + that.inline(cell, fieldName, opts); + })) { + return this; + } + // Start a full row edit, but don't display - we will be showing the field + this._edit(cell, editFields, 'inline', opts, function () { + _this._inline(editFields, opts); + }); + return this; +} +/** + * Inline creation of data. + * + * @param this Editor instance + * @param insertPoint Where to insert the create row + * @param opts Form options + * @returns Editor instance + */ +function inlineCreate(insertPoint, opts) { + var _this = this; + // Argument juggling - allow no insert point, just options + if ($.isPlainObject(insertPoint)) { + opts = insertPoint; + insertPoint = null; + } + if (this._tidy(function () { + _this.inlineCreate(insertPoint, opts); + })) { + return this; + } + // Set the default for the fields + $.each(this.s.fields, function (name, fieldIn) { + fieldIn.multiReset(); + fieldIn.multiSet(0, fieldIn.def()); + fieldIn.set(fieldIn.def()); + }); + this.s.mode = 'main'; + this.s.action = 'create'; + this.s.modifier = null; + this.s.editFields = this._dataSource('fakeRow', insertPoint); + opts = $.extend({}, this.s.formOptions.inline, opts); + this._actionClass(); + this._inline(this.s.editFields, opts, function () { + // When the form is closed (cancelled or submitted) we need to remove the + // fake row + _this._dataSource('fakeRowEnd'); + }); + this._event('initCreate', null); + return this; +} +function message(name, msg) { + if (msg === undefined) { + // Global message + this._message(this.dom.formInfo, name); + } + else { + // Field message + this.field(name).message(msg); + } + return this; +} +function mode(modeIn) { + if (!modeIn) { + return this.s.action; + } + if (!this.s.action) { + throw new Error('Not currently in an editing mode'); + } + else if (this.s.action === 'create' && modeIn !== 'create') { + throw new Error('Changing from create mode is not supported'); + } + this.s.action = modeIn; + return this; +} +/** + * Get the modifier that was used to trigger the edit or delete action. + * + * @returns The identifier that was used for the editing / remove method + * called. + */ +function modifier() { + return this.s.modifier; +} +/** + * Get the values for one or more fields (multi-row editing aware). + * + * @param this Editor instance + * @param fieldNames Fields to get values for, or all fields if not given + * @returns Editor instance + */ +function multiGet(fieldNames) { + var that = this; + if (fieldNames === undefined) { + fieldNames = this.fields(); + } + if (Array.isArray(fieldNames)) { + var out_2 = {}; + $.each(fieldNames, function (i, name) { + out_2[name] = that.field(name).multiGet(); + }); + return out_2; + } + // String + return this.field(fieldNames).multiGet(); +} +function multiSet(fieldNames, valIn) { + var that = this; + if ($.isPlainObject(fieldNames) && valIn === undefined) { + $.each(fieldNames, function (name, value) { + that.field(name).multiSet(value); + }); + } + else { + this.field(fieldNames).multiSet(valIn); + } + return this; +} +function node(name) { + var that = this; + if (!name) { + name = this.order(); + } + return Array.isArray(name) ? + $.map(name, function (n) { + return that.field(n).node(); + }) : + this.field(name).node(); +} +/** + * Remove a bound event listener to the editor instance. + * + * @param this Editor instance + * @param name Event name to remove + * @param fn Handler to remove, or all if not specified + * @returns Editor instance + */ +function off(name, fn) { + $(this).off(this._eventName(name), fn); + return this; +} +/** + * Listen for an event which is fired off by Editor when it performs certain + * actions. + * + * @param this Editor instance + * @param name Event to listen for + * @param fn Event handler to apply + * @returns Editor instance + */ +function on(name, fn) { + $(this).on(this._eventName(name), fn); + return this; +} +/** + * Listen for a single event event which is fired off by Editor when it performs + * certain actions + * + * @param this Editor instance + * @param name Event to listen for + * @param fn Event handler to apply + * @returns Editor instance + */ +function one(name, fn) { + $(this).one(this._eventName(name), fn); + return this; +} +/** + * Display the main form editor to the end user in the web-browser. + * + * @param this Editor instance + * @returns Editor instance + */ +function open() { + var _this = this; + // Insert the display elements in order + this._displayReorder(); + // Define how to do a close + this._closeReg(function () { + _this._nestedClose(function () { + _this._clearDynamicInfo(); + _this._event('closed', ['main']); + }); + }); + // Run the standard open with common events + var ret = this._preopen('main'); + if (!ret) { + return this; + } + this._nestedOpen(function () { + _this._focus($.map(_this.s.order, function (name) { return _this.s.fields[name]; }), _this.s.editOpts.focus); + _this._event('opened', ['main', _this.s.action]); + }, this.s.editOpts.nest); + this._postopen('main', false); + return this; +} +function order(setIn /* , ... */) { + if (!setIn) { + return this.s.order; + } + // Allow new layout to be passed in as arguments + if (arguments.length && !Array.isArray(setIn)) { + setIn = Array.prototype.slice.call(arguments); + } + // Sanity check - array must exactly match the fields we have available + if (this.s.order.slice().sort().join('-') !== setIn.slice().sort().join('-')) { + throw new Error('All fields, and no additional fields, must be provided for ordering.'); + } + // Copy the new array into the order (so the reference is maintained) + $.extend(this.s.order, setIn); + this._displayReorder(); + return this; +} +function remove(items, arg1, arg2, arg3, arg4) { + var _this = this; + var that = this; + // Some other field in inline edit mode? + if (this._tidy(function () { + that.remove(items, arg1, arg2, arg3, arg4); + })) { + return this; + } + if (!items && !this.s.table) { + items = 'keyless'; + } + // Allow a single row node to be passed in to remove, Can't use Array.isArray + // as we also allow array like objects to be passed in (API, jQuery) + if (items.length === undefined) { + items = [items]; + } + var argOpts = this._crudArgs(arg1, arg2, arg3, arg4); + var editFields = this._dataSource('fields', items); + this.s.action = 'remove'; + this.s.modifier = items; + this.s.editFields = editFields; + this.dom.form.style.display = 'none'; + this._actionClass(); + this._event('initRemove', [ + pluck(editFields, 'node'), + pluck(editFields, 'data'), + items + ], function () { + _this._event('initMultiRemove', // undocumented and to be removed in v2 + [editFields, items], function () { + _this._assembleMain(); + _this._formOptions(argOpts.opts); + argOpts.maybeOpen(); + var opts = _this.s.editOpts; + if (opts.focus !== null) { + $('button', _this.dom.buttons).eq(opts.focus).focus(); + } + }); + }); + return this; +} +function set(setIn, valIn) { + var that = this; + if (!$.isPlainObject(setIn)) { + var o = {}; + o[setIn] = valIn; + setIn = o; + } + $.each(setIn, function (n, v) { + that.field(n).set(v); + }); + return this; +} +/** + * Show fields in the display that were previously hidden. + * + * @param this Editor instance + * @param names Field(s) to show. All if not given. + * @param animate Animate the visual change or not + * @returns Editor instance + */ +function show(names, animate) { + var that = this; + $.each(this._fieldNames(names), function (i, n) { + that.field(n).show(animate); + }); + return this; +} +/** + * Submit a form for processing. + * + * @param this Editor instance + * @param successCallback Function executed when submit is completed + * @param errorCallback Function executed on error + * @param formatdata Data formatting function + * @param hideIn Disable default close action by passing in false + * @returns Editor instance + */ +function submit(successCallback, errorCallback, formatdata, hideIn) { + var _this = this; + var fields = this.s.fields; + var errorFields = []; + var errorReady = 0; + var sent = false; + if (this.s.processing || !this.s.action) { + return this; + } + this._processing(true); + // If there are fields in error, we want to wait for the error notification + // to be cleared before the form is submitted - errorFields tracks the + // fields which are in the error state, while errorReady tracks those which + // are ready to submit + var send = function () { + if (errorFields.length !== errorReady || sent) { + return; + } + _this._event('initSubmit', [_this.s.action], function (result) { + if (result === false) { + _this._processing(false); + return; + } + sent = true; + _this._submit(successCallback, errorCallback, formatdata, hideIn); + }); + }; + // Blur the current focus if it is a form input element - this allows any + // actions on change event (e.g. dpendent) to happen + var active = document.activeElement; + if ($(active).closest('div.DTE_Field').length !== 0) { + active.blur(); + } + // Remove the global error (don't know if the form is still in an error + // state!) + this.error(); + // Count how many fields are in error + $.each(fields, function (name, fieldIn) { + if (fieldIn.inError()) { + errorFields.push(name); + } + }); + // Remove the error display + $.each(errorFields, function (i, name) { + fields[name].error('', function () { + errorReady++; + send(); + }); + }); + send(); + return this; +} +function table(setIn) { + if (setIn === undefined) { + return this.s.table; + } + this.s.table = setIn; + return this; +} +function template(setIn) { + if (setIn === undefined) { + return this.s.template; + } + this.s.template = setIn === null ? + null : + $(setIn); + return this; +} +function title(titleIn) { + var header = $(this.dom.header).children('div.' + this.classes.header.content); + var titleClass = this.classes.header.title; + if (titleIn === undefined) { + return header.data('title'); + } + if (typeof titleIn === 'function') { + titleIn = titleIn(this, new DataTable$5.Api(this.s.table)); + } + var set = titleClass.tag + ? $("<" + titleClass.tag + ">Uploading file'); + reader.onload = function (e) { + var data = new FormData(); + var ajax; + data.append('action', 'upload'); + data.append('uploadField', conf.name); + data.append('upload', files[counter]); + if (conf.ajaxData) { + conf.ajaxData(data, files[counter], counter); + } + if (conf.ajax) { + ajax = conf.ajax; + } + else if ($.isPlainObject(editor.s.ajax)) { + ajax = editor.s.ajax.upload ? + editor.s.ajax.upload : + editor.s.ajax; + } + else if (typeof editor.s.ajax === 'string') { + ajax = editor.s.ajax; + } + if (!ajax) { + throw new Error('No Ajax option specified for upload plug-in'); + } + if (typeof ajax === 'string') { + ajax = { url: ajax }; + } + // Handle the case when the ajax data is given as a function + if (typeof ajax.data === 'function') { + var d = {}; + var ret = ajax.data(d); + // Allow the return to be used, or the object passed in + if (ret !== undefined && typeof ret !== 'string') { + d = ret; + } + $.each(d, function (key, value) { + data.append(key, value); + }); + } + else if ($.isPlainObject(ajax.data)) { + throw new Error('Upload feature cannot use `ajax.data` with an object. Please use it as a function instead.'); + } + // Dev cancellable event + editor._event('preUpload', [conf.name, files[counter], data], function (preRet) { + // Upload was cancelled + if (preRet === false) { + // If there are other files still to read, spin through them + if (counter < files.length - 1) { + counter++; + reader.readAsDataURL(files[counter]); + } + else { + completeCallback.call(editor, ids); + } + return; + } + // Use preSubmit to stop form submission during an upload, since the + // value won't be known until that point. + var submit = false; + editor + .on('preSubmit.DTE_Upload', function () { + submit = true; + return false; + }); + $.ajax($.extend({}, ajax, { + contentType: false, + data: data, + dataType: 'json', + error: function (xhr) { + var errors = conf.errors; + editor.off('preSubmit.DTE_Upload'); + editor.error(conf.name, errors && errors[xhr.status] + ? errors[xhr.status] + : generalError); + editor._event('uploadXhrError', [conf.name, xhr]); + progressCallback(conf); + }, + processData: false, + success: function (json) { + editor.off('preSubmit.DTE_Upload'); + editor._event('uploadXhrSuccess', [conf.name, json]); + if (json.fieldErrors && json.fieldErrors.length) { + var errors = json.fieldErrors; + for (var i = 0, ien = errors.length; i < ien; i++) { + editor.error(errors[i].name, errors[i].status); + } + completeCallback.call(editor, ids, true); + } + else if (json.error) { + editor.error(json.error); + completeCallback.call(editor, ids, true); + } + else if (!json.upload || !json.upload.id) { + editor.error(conf.name, generalError); + completeCallback.call(editor, ids, true); + } + else { + if (json.files) { + // Loop over the tables that are defined + $.each(json.files, function (table, filesIn) { + if (!Editor.files[table]) { + Editor.files[table] = {}; + } + $.extend(Editor.files[table], filesIn); + }); + } + ids.push(json.upload.id); + if (counter < files.length - 1) { + counter++; + reader.readAsDataURL(files[counter]); + } + else { + completeCallback.call(editor, ids); + if (submit) { + editor.submit(); + } + } + } + progressCallback(conf); + }, + type: 'post', + xhr: function () { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.onprogress = function (e) { + if (e.lengthComputable) { + var percent = (e.loaded / e.total * 100).toFixed(0) + '%'; + progressCallback(conf, files.length === 1 ? + percent : + counter + ':' + files.length + ' ' + percent); + } + }; + xhr.upload.onloadend = function () { + progressCallback(conf, conf.processingText || 'Processing'); + }; + } + return xhr; + } + })); + }); + }; + // Convert to a plain array + files = $.map(files, function (val) { + return val; + }); + // Truncate the selected files if needed + if (conf._limitLeft !== undefined) { + files.splice(conf._limitLeft, files.length); + } + reader.readAsDataURL(files[0]); +} +/** + * CommonJS factory function pass through. Matches DataTables. + * @param {*} root Window + * @param {*} jq jQUery + * @returns {boolean} Indicator + */ +function factory(root, jq) { + var is = false; + // Test if the first parameter is a window object + if (root && root.document) { + window = root; + document = root.document; + } + // Test if the second parameter is a jQuery object + if (jq && jq.fn && jq.fn.jquery) { + $ = jq; + is = true; + } + return is; +} + +var DataTable$4 = $.fn.dataTable; +var _inlineCounter = 0; +/** + * Set the class on the form to relate to the action that is being performed. + * This allows styling to be applied to the form to reflect the state that + * it is in. + * + * @private + */ +function _actionClass() { + var classesActions = this.classes.actions; + var action = this.s.action; + var wrapper = $(this.dom.wrapper); + wrapper.removeClass([classesActions.create, classesActions.edit, classesActions.remove].join(' ')); + if (action === 'create') { + wrapper.addClass(classesActions.create); + } + else if (action === 'edit') { + wrapper.addClass(classesActions.edit); + } + else if (action === 'remove') { + wrapper.addClass(classesActions.remove); + } +} +/** + * Create an Ajax request in the same style as DataTables 1.10, with full + * backwards compatibility for Editor 1.2. + * + * @param {object} data Data to submit + * @param {function} success Success callback + * @param {function} error Error callback + * @param {object} submitParams Submitted data + * @private + */ +function _ajax(data, success, error, submitParams) { + var action = this.s.action; + var thrown; + var opts = { + complete: [function (xhr, text) { + // Use `complete` rather than `success` so that all status codes are + // caught and can return valid JSON (useful when working with REST + // services). + var json = null; + if (xhr.status === 204 || xhr.responseText === 'null') { + json = {}; + } + else { + try { + // jQuery 1.12 or newer for responseJSON, but its the only + // way to get the JSON from a JSONP. So if you want to use + // JSONP with Editor you have to use jQuery 1.12+. + json = xhr.responseJSON ? + xhr.responseJSON : + JSON.parse(xhr.responseText); + } + catch (e) { } + } + if ($.isPlainObject(json) || Array.isArray(json)) { + success(json, xhr.status >= 400, xhr); + } + else { + error(xhr, text, thrown); + } + }], + data: null, + dataType: 'json', + error: [function (xhr, text, err) { + thrown = err; + }], + success: [], + type: 'POST' + }; + var a; + var ajaxSrc = this.s.ajax; + var id = action === 'edit' || action === 'remove' ? + pluck(this.s.editFields, 'idSrc').join(',') : + null; + // Get the correct object for rest style + if ($.isPlainObject(ajaxSrc) && ajaxSrc[action]) { + ajaxSrc = ajaxSrc[action]; + } + if (typeof ajaxSrc === 'function') { + // As a function, execute it, passing in the required parameters + ajaxSrc.call(this, null, null, data, success, error); + return; + } + else if (typeof ajaxSrc === 'string') { + // As a string it gives the URL. For backwards compatibility it can also + // give the method. + if (ajaxSrc.indexOf(' ') !== -1) { + a = ajaxSrc.split(' '); + opts.type = a[0]; + opts.url = a[1]; + } + else { + opts.url = ajaxSrc; + } + } + else { + // As an object, we extend the Editor defaults - with the exception of + // the error and complete functions which get added in so the user can + // specify their own in addition to ours + var optsCopy = $.extend({}, ajaxSrc || {}); + if (optsCopy.complete) { + opts.complete.unshift(optsCopy.complete); + delete optsCopy.complete; + } + if (optsCopy.error) { + opts.error.unshift(optsCopy.error); + delete optsCopy.error; + } + opts = $.extend({}, opts, optsCopy); + } + // URL macros + if (opts.replacements) { + $.each(opts.replacements, function (key, repl) { + opts.url = opts.url.replace('{' + key + '}', repl.call(this, key, id, action, data)); + }); + } + opts.url = opts.url + .replace(/_id_/, id) + .replace(/{id}/, id); + // Data processing option like in DataTables + if (opts.data) { + var isFn = typeof opts.data === 'function'; + var newData = isFn ? + opts.data(data) : // fn can manipulate data or return an object + opts.data; // object or array to merge + // If the function returned something, use that alone + data = isFn && newData ? + newData : + $.extend(true, data, newData); + } + opts.data = data; + // If a DELETE method is used there are a number of servers which will + // reject the request if it has a body. So we need to append to the URL. + // + // http://stackoverflow.com/questions/15088955 + // http://bugs.jquery.com/ticket/11586 + if (opts.type === 'DELETE' && (opts.deleteBody === undefined || opts.deleteBody === true)) { + var params = $.param(opts.data); + opts.url += opts.url.indexOf('?') === -1 ? + '?' + params : + '&' + params; + delete opts.data; + } + // Finally, make the ajax call + $.ajax(opts); +} +/** + * Abstraction for jQuery's animate method, to support jQuery slim which doesn't + * include the animate module + * + * @private + */ +function _animate(target, style, time, callback) { + if ($.fn.animate) { + target + .stop() + .animate(style, time, callback); + } + else { + target.css(style); + var scope = target.length && target.length > 1 + ? target[0] + : target; + if (typeof time === 'function') { + time.call(scope); + } + else if (callback) { + callback.call(scope); + } + } +} +/** + * Create the DOM structure from the source elements for the main form. + * This is required since the elements can be moved around for other form types + * (bubble). + * + * @private + */ +function _assembleMain() { + var dom = this.dom; + $(dom.wrapper) + .prepend(dom.header); + $(dom.footer) + .append(dom.formError) + .append(dom.buttons); + $(dom.bodyContent) + .append(dom.formInfo) + .append(dom.form); +} +/** + * Blur the editing window. A blur is different from a close in that it might + * cause either a close or the form to be submitted. A typical example of a + * blur would be clicking on the background of the bubble or main editing forms + * - i.e. it might be a close, or it might submit depending upon the + * configuration, while a click on the close box is a very definite close. + * + * @private + */ +function _blur() { + var opts = this.s.editOpts; + var onBlur = opts.onBlur; + if (this._event('preBlur') === false) { + return; + } + if (typeof onBlur === 'function') { + onBlur(this); + } + else if (onBlur === 'submit') { + this.submit(); + } + else if (onBlur === 'close') { + this._close(); + } +} +/** + * Clear all of the information that might have been dynamically set while + * the form was visible - specifically errors and dynamic messages + * + * @private + */ +function _clearDynamicInfo(errorsOnly) { + if (errorsOnly === void 0) { errorsOnly = false; } + // Can be triggered due to a destroy if the editor is open + if (!this.s) { + return; + } + var errorClass = this.classes.field.error; + var fields = this.s.fields; + $('div.' + errorClass, this.dom.wrapper).removeClass(errorClass); + $.each(fields, function (name, field) { + field.error(''); + if (!errorsOnly) { + field.message(''); + } + }); + this.error(''); + if (!errorsOnly) { + this.message(''); + } +} +/** + * Close an editing display, firing callbacks and events as needed + * + * @param {function} submitComplete Function to call after the preClose event + * @param {string} mode Editing mode that is just finished + * @private + */ +function _close(submitComplete, mode) { + var closed; + // Allow preClose event to cancel the opening of the display + if (this._event('preClose') === false) { + return; + } + if (this.s.closeCb) { + closed = this.s.closeCb(submitComplete, mode); + this.s.closeCb = null; + } + if (this.s.closeIcb) { + this.s.closeIcb(); + this.s.closeIcb = null; + } + // Remove focus control + $('body').off('focus.editor-focus'); + this.s.displayed = false; + this._event('close'); + if (closed) { + // Note that `bubble` will call this itself due to the animation + this._event('closed', [closed]); + } +} +/** + * Register a function to be called when the editing display is closed. This is + * used by function that create the editing display to tidy up the display on + * close - for example removing event handlers to prevent memory leaks. + * + * @param {function} fn Function to call on close + * @private + */ +function _closeReg(fn) { + this.s.closeCb = fn; +} +/** + * Argument shifting for the create(), edit() and remove() methods. In Editor + * 1.3 the preferred form of calling those three methods is with just two + * parameters (one in the case of create() - the id and the show flag), while in + * previous versions four / three parameters could be passed in, including the + * buttons and title options. In 1.3 the chaining API is preferred, but we want + * to support the old form as well, so this function is provided to perform + * that argument shifting, common to all three. + * + * @private + */ +function _crudArgs(arg1, arg2, arg3, arg4) { + var that = this; + var title; + var buttons; + var show; + var opts; + if ($.isPlainObject(arg1)) { + // Form options passed in as the first option + opts = arg1; + } + else if (typeof arg1 === 'boolean') { + // Show / hide passed in as the first option - form options second + show = arg1; + opts = arg2; // can be undefined + } + else { + // Old style arguments + title = arg1; // can be undefined + buttons = arg2; // can be undefined + show = arg3; // can be undefined + opts = arg4; // can be undefined + } + // If all undefined, then fall into here + if (show === undefined) { + show = true; + } + if (title) { + that.title(title); + } + if (buttons) { + that.buttons(buttons); + } + return { + maybeOpen: function () { + if (show) { + that.open(); + } + }, + opts: $.extend({}, this.s.formOptions.main, opts) + }; +} +/** + * Execute the data source abstraction layer functions. This is simply a case + * of executing the function with the Editor scope, passing in the remaining + * parameters. + * + * @param {string} name Function name to execute + * @private + */ +function _dataSource(name) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + var dataSource = this.s.table + ? Editor.dataSources.dataTable + : Editor.dataSources.html; + var fn = dataSource[name]; + if (fn) { + return fn.apply(this, args); + } +} +/** + * Insert the fields into the DOM, in the correct order + * + * @private + */ +function _displayReorder(includeFields) { + var _this = this; + var formContent = $(this.dom.formContent); + var fields = this.s.fields; + var order = this.s.order; + var template = this.s.template; + var mode = this.s.mode || 'main'; + if (includeFields) { + this.s.includeFields = includeFields; + } + else { + includeFields = this.s.includeFields; + } + // Empty before adding in the required fields + formContent.children().detach(); + $.each(order, function (i, name) { + if (_this._weakInArray(name, includeFields) !== -1) { + if (template && mode === 'main') { + template.find('editor-field[name="' + name + '"]').after(fields[name].node()); + template.find('[data-editor-template="' + name + '"]').append(fields[name].node()); + } + else { + formContent.append(fields[name].node()); + } + } + }); + if (template && mode === 'main') { + template.appendTo(formContent); + } + this._event('displayOrder', [ + this.s.displayed, + this.s.action, + formContent + ]); +} +/** + * Generic editing handler. This can be called by the three editing modes (main, + * bubble and inline) to configure Editor for a row edit, and fire the required + * events to ensure that the editing interfaces all provide a common API. + * + * @param {*} rows Identifier for the item(s) to be edited + * @param {string} type Editing type - for the initEdit event + * @private + */ +function _edit(items, editFields, type, formOptions, setupDone) { + var _this = this; + var fields = this.s.fields; + var usedFields = []; + var includeInOrder; + var editData = {}; + this.s.editFields = editFields; + this.s.editData = editData; + this.s.modifier = items; + this.s.action = 'edit'; + this.dom.form.style.display = 'block'; + this.s.mode = type; + this._actionClass(); + // Setup the field values for editing + $.each(fields, function (name, field) { + field.multiReset(); + includeInOrder = false; + editData[name] = {}; + $.each(editFields, function (idSrc, edit) { + if (edit.fields[name]) { + var val = field.valFromData(edit.data); + var nullDefault = field.nullDefault(); + // Save the set data values so we can decided in submit if data has changed + // Note that `null` is stored as an empty string since fields do not currently + // have the ability to store a null value - when they are read back (in the + // submit) they would be an empty string. When null handling is added to + // fields, this will need to be removed. + editData[name][idSrc] = val === null ? + '' : + Array.isArray(val) ? + val.slice() : + val; + // If scoped to edit the whole row, then set all of the fields + if (!formOptions || formOptions.scope === 'row') { + field.multiSet(idSrc, val === undefined || (nullDefault && val === null) ? + field.def() : + val, false); + if (!edit.displayFields || edit.displayFields[name]) { + includeInOrder = true; + } + } + else { + // Limit editing to only those fields selected if any are selected + if (!edit.displayFields || edit.displayFields[name]) { + field.multiSet(idSrc, val === undefined || (nullDefault && val === null) ? + field.def() : + val, false); + includeInOrder = true; + } + } + } + }); + // Loop finished - can do a multi-value check for display of the field now + field._multiValueCheck(); + // If the field is used, then add it to the fields to be shown + if (field.multiIds().length !== 0 && includeInOrder) { + usedFields.push(name); + } + }); + // Remove the fields that are not required from the display + var currOrder = this.order().slice(); + for (var i = currOrder.length - 1; i >= 0; i--) { + // Use `toString()` to convert numbers to strings, since usedFields + // contains strings (object property names) + if ($.inArray(currOrder[i].toString(), usedFields) === -1) { + currOrder.splice(i, 1); + } + } + this._displayReorder(currOrder); + // Events + this._event('initEdit', [ + pluck(editFields, 'node')[0], + pluck(editFields, 'data')[0], + items, + type + ], function () { + _this._event('initMultiEdit', // undocumented and to be removed in v2 + [editFields, items, type], function () { + setupDone(); + }); + }); +} +/** + * Fire callback functions and trigger events. + * + * @param {string|array} trigger Name(s) of the jQuery custom event to trigger + * @param {array} args Array of arguments to pass to the triggered event + * @return {*} Return from the event + * @private + */ +function _event(trigger, args, promiseComplete) { + if (args === void 0) { args = []; } + if (promiseComplete === void 0) { promiseComplete = undefined; } + // Allow an array to be passed in for the trigger to fire multiple events + if (Array.isArray(trigger)) { + for (var i = 0, ien = trigger.length; i < ien; i++) { + this._event(trigger[i], args); + } + } + else { + var e = $.Event(trigger); + $(this).triggerHandler(e, args); + var result = e.result; + // Automatically trigger a cancelled event if a `pre` event handler + // was cancelled by the callback + if (trigger.indexOf('pre') === 0 && result === false) { + $(this).triggerHandler($.Event(trigger + 'Cancelled'), args); + } + // Allow for a promise to be returned and execute a callback + if (promiseComplete) { + if (result && typeof result === 'object' && result.then) { + // jQuery and "real" promises both provide "then" + result.then(promiseComplete); + } + else { + // If there wasn't a promise returned, then execute immediately + promiseComplete(result); + } + } + return result; + } +} +/** + * 'Modernise' event names, from the old style `on[A-Z]` names to camelCase. + * This is done to provide backwards compatibility with Editor 1.2- event names. + * The names themselves were updated for consistency with DataTables. + * + * @param {string} Event name to modernise + * @return {string} String with new event name structure + * @private + */ +function _eventName(input) { + var name; + var names = input.split(' '); + for (var i = 0, ien = names.length; i < ien; i++) { + name = names[i]; + // Strip the 'on' part and lowercase the first character + var onStyle = name.match(/^on([A-Z])/); + if (onStyle) { + name = onStyle[1].toLowerCase() + name.substring(3); + } + names[i] = name; + } + return names.join(' '); +} +/** + * Find a field from a DOM node. All children are searched. + * + * @param {node} node DOM node to search for + * @return {Field} Field instance + */ +function _fieldFromNode(node) { + var foundField = null; + $.each(this.s.fields, function (name, field) { + if ($(field.node()).find(node).length) { + foundField = field; + } + }); + return foundField; +} +/** + * Convert a field name input parameter to an array of field names. + * + * Many of the API methods provide the ability to pass `undefined` a string or + * array of strings to identify fields. This method harmonises that. + * + * @param {array|string} [fieldNames] Field names to get + * @return {array} Field names + * @private + */ +function _fieldNames(fieldNames) { + if (fieldNames === undefined) { + return this.fields(); + } + else if (!Array.isArray(fieldNames)) { + return [fieldNames]; + } + return fieldNames; +} +/** + * Focus on a field. Providing the logic to allow complex focus expressions + * + * @param {array} fields Array of Field instances or field names for the fields + * that are shown + * @param {null|string|integer} focus Field identifier to focus on + * @private + */ +function _focus(fieldsIn, focus) { + var _this = this; + // Can't focus on a field when in remove mode (they aren't shown). + if (this.s.action === 'remove') { + return; + } + var field; + var fields = $.map(fieldsIn, function (fieldOrName) { return typeof fieldOrName === 'string' ? + _this.s.fields[fieldOrName] : + fieldOrName; }); + if (typeof focus === 'number') { + field = fields[focus]; + } + else if (focus) { + if (focus.indexOf('jq:') === 0) { + field = $('div.DTE ' + focus.replace(/^jq:/, '')); + } + else { + field = this.s.fields[focus]; + } + } + else { + document.activeElement.blur(); + } + this.s.setFocus = field; + if (field) { + field.focus(); + } +} +/** + * Form options - common function so all editing methods can provide the same + * basic options, DRY. + * + * @param {object} opts Editing options. See model.formOptions + * @private + */ +function _formOptions(opts) { + var _this = this; + var that = this; + var inlineCount = _inlineCounter++; + var namespace = '.dteInline' + inlineCount; + // Backwards compatibility with 1.4 + // if ( opts.closeOnComplete !== undefined ) { + // opts.onComplete = opts.closeOnComplete ? 'close' : 'none'; + // } + // if ( opts.submitOnBlur !== undefined ) { + // opts.onBlur = opts.submitOnBlur ? 'submit' : 'close'; + // } + // if ( opts.submitOnReturn !== undefined ) { + // opts.onReturn = opts.submitOnReturn ? 'submit' : 'none'; + // } + // if ( opts.blurOnBackground !== undefined ) { + // opts.onBackground = opts.blurOnBackground ? 'blur' : 'none'; + // } + this.s.editOpts = opts; + // When submitting by Ajax we don't want to close a form that has been + // opened during the ajax request, so we keep a count of the form opening + this.s.editCount = inlineCount; + if (typeof opts.title === 'string' || typeof opts.title === 'function') { + this.title(opts.title); + opts.title = true; + } + if (typeof opts.message === 'string' || typeof opts.message === 'function') { + this.message(opts.message); + opts.message = true; + } + if (typeof opts.buttons !== 'boolean') { + this.buttons(opts.buttons); + opts.buttons = true; + } + // Prevent submit by a host `` + $(document).on('keydown' + namespace, function (e) { + if (e.which === 13 && _this.s.displayed) { // return + var el = $(document.activeElement); + if (el) { + var field = _this._fieldFromNode(el); + if (field && typeof field.canReturnSubmit === 'function' && field.canReturnSubmit(el)) { + e.preventDefault(); + } + } + } + }); + $(document).on('keyup' + namespace, function (e) { + var el = $(document.activeElement); + if (e.which === 13 && _this.s.displayed) { // return + var field = _this._fieldFromNode(el); + // Allow the field plug-in to say if we can submit or not + if (field && typeof field.canReturnSubmit === 'function' && field.canReturnSubmit(el)) { + if (opts.onReturn === 'submit') { + e.preventDefault(); + _this.submit(); + } + else if (typeof opts.onReturn === 'function') { + e.preventDefault(); + opts.onReturn(_this, e); + } + } + } + else if (e.which === 27) { // esc + e.preventDefault(); + if (typeof opts.onEsc === 'function') { + opts.onEsc(that, e); + } + else if (opts.onEsc === 'blur') { + that.blur(); + } + else if (opts.onEsc === 'close') { + that.close(); + } + else if (opts.onEsc === 'submit') { + that.submit(); + } + } + else if (el.parents('.DTE_Form_Buttons').length) { + if (e.which === 37) { // left + el.prev('button').trigger('focus'); + } + else if (e.which === 39) { // right + el.next('button').trigger('focus'); + } + } + }); + this.s.closeIcb = function () { + $(document).off('keydown' + namespace); + $(document).off('keyup' + namespace); + }; + return namespace; +} +/** + * Inline editing insertion of fields + */ +function _inline(editFields, opts, closeCb) { + var _this = this; + if (closeCb === void 0) { closeCb = null; } + var closed = false; + var classes = this.classes.inline; + var keys = Object.keys(editFields); + var editRow = editFields[keys[0]]; + var lastAttachPoint; + var elements = []; + for (var i = 0; i < editRow.attach.length; i++) { + var name_1 = editRow.attachFields[i][0]; + elements.push({ + field: this.s.fields[name_1], + name: name_1, + node: $(editRow.attach[i]), + }); + } + var namespace = this._formOptions(opts); + var ret = this._preopen('inline'); + if (!ret) { + return this; + } + for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { + var el = elements_1[_i]; + var node = el.node; + el.children = node.contents().detach(); + // Note the wdith setting shouldn't be required, but Edge increases the column's + // width if a % width is used (even 1%). This is the workaround + var style = navigator.userAgent.indexOf('Edge/') !== -1 ? + 'style="width:' + node.width() + 'px"' : + ''; + node.append($('
' + + '
' + + '
' + + '
' + + '
' + + '
')); + node.find('div.' + classes.liner.replace(/ /g, '.')) + .append(el.field.node()) + .append(this.dom.formError); + // Need the last insert point to allow for number submitTrigger + lastAttachPoint = el.field.node(); + if (opts.buttons) { + // Use prepend for the CSS, so we can float the buttons right + node.find('div.' + classes.buttons.replace(/ /g, '.')).append(this.dom.buttons); + } + } + // If there is a submit trigger target, we need to modify the document to allow submission + var submitClose = this._inputTrigger('submit', opts, lastAttachPoint); + var cancelClose = this._inputTrigger('cancel', opts, lastAttachPoint); + this._closeReg(function (submitComplete, action) { + // Mark that this specific inline edit has closed + closed = true; + $(document).off('click' + namespace); + // If there was no submit, we need to put the DOM back as it was. If + // there was a submit, the write of the new value will set the DOM to + // how it should be. Note also, check if it was an edit action, if not + // a create will create new row so we tidy this one up + if (!submitComplete || action !== 'edit') { + elements.forEach(function (el) { + el.node.contents().detach(); + el.node.append(el.children); + }); + } + submitClose(); + cancelClose(); + // Clear error messages "offline" + _this._clearDynamicInfo(); + if (closeCb) { + closeCb(); + } + return 'inline'; // trigger `closed` + }); + // Submit and blur actions + setTimeout(function () { + // If already closed, possibly due to some other aspect of the event + // that triggered the inline call, don't add the event listener - it + // isn't needed (and is dangerous) + if (closed) { + return; + } + // andSelf is deprecated in jQ1.8, but we want 1.7 compat + var back = $.fn.addBack ? 'addBack' : 'andSelf'; + // Chrome uses the target as the element where the mouse up happens, + // but we want the target being where the mouse down is, to allow for + // text selection in an input - so listen on mousedown as well. + var target; + $(document) + .on('mousedown' + namespace, function (e) { + target = e.target; + }) + .on('keydown' + namespace, function (e) { + target = e.target; + }) + .on('click' + namespace, function (e) { + // Was the click inside or owned by one of the editing nodes? If + // not, then come out of editing mode. + var isIn = false; + for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) { + var el = elements_2[_i]; + if (el.field._typeFn('owns', target) || + $.inArray(el.node[0], $(target).parents()[back]()) !== -1) { + isIn = true; + } + } + if (!isIn) { + _this.blur(); + } + }); + }, 0); + this._focus($.map(elements, function (el) { return el.field; }), opts.focus); + this._postopen('inline', true); +} +/** + * Add a triggering action for inline editing, with a return function that + * will tidy up the events. + * + * @param type Action + * @param opts Form options object + * @param insertPoint Insert point in the DOM + * @private + */ +function _inputTrigger(type, opts, insertPoint) { + var _this = this; + var trigger = opts[type + 'Trigger']; + var html = opts[type + 'Html']; + var event = 'click.dte-' + type; + var tr = $(insertPoint).closest('tr'); + if (trigger === undefined) { + return function () { }; + } + // Allow the input to be a column index, including a negative to count from right + if (typeof trigger === 'number') { + var kids = tr.children(); + trigger = trigger < 0 + ? kids[kids.length + trigger] + : kids[trigger]; + } + // Use childNodes to get text nodes as well + var children = $(trigger, tr).length + ? Array.prototype.slice.call($(trigger, tr)[0].childNodes) + : []; + $(children).detach(); + // Event handler to submit the form and do nothing else + var triggerEl = $(trigger, tr) + .on(event, function (e) { + e.stopImmediatePropagation(); + if (type === 'cancel') { + _this.close(); + } + else { + _this.submit(); + } + }) + .append(html); + return function () { + triggerEl + .off(event) + .empty() + .append(children); + }; +} +/** + * Update the field options from a JSON data source + * + * @param {object} json JSON object from the server + * @private + */ +function _optionsUpdate(json) { + var that = this; + if (json && json.options) { + $.each(this.s.fields, function (name, field) { + if (json.options[name] !== undefined) { + var fieldInst = that.field(name); + if (fieldInst && fieldInst.update) { + fieldInst.update(json.options[name]); + } + } + }); + } +} +/** + * Show a message in the form. This can be used for error messages or dynamic + * messages (information display) as the structure for each is basically the + * same. This method will take into account if the form is visible or not - if + * so then the message is shown with an effect for the end user, otherwise + * it is just set immediately. + * + * @param {element} el The field display node to use + * @param {string|function} msg The message to show + * @private + */ +function _message(el, msg, title, fn) { + // Allow for jQuery slim + var canAnimate = $.fn.animate ? true : false; + if (title === undefined) { + title = false; + } + if (!fn) { + fn = function () { }; + } + if (typeof msg === 'function') { + msg = msg(this, new DataTable$4.Api(this.s.table)); + } + el = $(el); + if (canAnimate) { + el.stop(); + } + if (!msg) { + if (this.s.displayed && canAnimate) { + // Clear the message with visual effect since the form is visible + el + .fadeOut(function () { + el.html(''); + fn(); + }); + } + else { + // Clear the message without visual effect + el + .html('') + .css('display', 'none'); + fn(); + } + if (title) { + el.removeAttr('title'); + } + } + else { + fn(); + if (this.s.displayed && canAnimate) { + // Show the message with visual effect + el + .html(msg) + .fadeIn(); + } + else { + // Show the message without visual effect + el + .html(msg) + .css('display', 'block'); + } + if (title) { + el.attr('title', msg); + } + } +} +/** + * Update the multi-value information display to not show redundant information + * + * @private + */ +function _multiInfo() { + var fields = this.s.fields; + var include = this.s.includeFields; + var show = true; + var state; + if (!include) { + return; + } + for (var i = 0, ien = include.length; i < ien; i++) { + var field = fields[include[i]]; + var multiEditable = field.multiEditable(); + if (field.isMultiValue() && multiEditable && show) { + // Multi-row editable. Only show first message + state = true; + show = false; + } + else if (field.isMultiValue() && !multiEditable) { + // Not multi-row editable. Always show message + state = true; + } + else { + state = false; + } + fields[include[i]].multiInfoShown(state); + } +} +/** + * Close the current form, which can result in the display controller + * hiding its display, or showing a form from a level up if nesting + */ +function _nestedClose(cb) { + var disCtrl = this.s.displayController; + var show = disCtrl._show; + if (!show || !show.length) { + // Nothing shown just now + if (cb) { + cb(); + } + } + else if (show.length > 1) { + // Got nested forms - remove current and go one layer up + show.pop(); + // Get the one to show + var last = show[show.length - 1]; + if (cb) { + cb(); + } + this.s.displayController.open(last.dte, last.append, last.callback); + } + else { + this.s.displayController.close(this, cb); + show.length = 0; + } +} +/** + * Display a form, adding it to the display stack for nesting + */ +function _nestedOpen(cb, nest) { + var disCtrl = this.s.displayController; + // This needs to be per display controller, but the controller + // itself doesn't know anything about the nesting, so we add a + // "hidden" property to it, used here, but not by the controller + // itself. + if (!disCtrl._show) { + disCtrl._show = []; + } + if (!nest) { + disCtrl._show.length = 0; + } + disCtrl._show.push({ + append: this.dom.wrapper, + callback: cb, + dte: this, + }); + this.s.displayController.open(this, this.dom.wrapper, cb); +} +/** + * Common display editing form method called by all editing methods after the + * form has been configured and displayed. This is to ensure all fire the same + * events. + * + * @param {string} type Editing type + * @param {boolean} immediate indicate if the open is immediate (in which case + * `opened` is also triggered). + * @return {boolean} `true` + * @private + */ +function _postopen(type, immediate) { + var _this = this; + var focusCapture = this.s.displayController.captureFocus; + if (focusCapture === undefined) { + focusCapture = true; + } + $(this.dom.form) + .off('submit.editor-internal') + .on('submit.editor-internal', function (e) { + e.preventDefault(); + }); + // Focus capture - when the Editor form is shown we capture the browser's + // focus action. Without doing this is would result in the user being able + // to control items under the Editor display - triggering actions that + // shouldn't be possible while the editing is shown. + if (focusCapture && (type === 'main' || type === 'bubble')) { + $('body').on('focus.editor-focus', function () { + if ($(document.activeElement).parents('.DTE').length === 0 && + $(document.activeElement).parents('.DTED').length === 0) { + if (_this.s.setFocus) { + _this.s.setFocus.focus(); + } + } + }); + } + this._multiInfo(); + this._event('open', [type, this.s.action]); + if (immediate) { + this._event('opened', [type, this.s.action]); + } + return true; +} +/** + * Common display editing form method called by all editing methods before the + * form has been configured and displayed. This is to ensure all fire the same + * events. + * + * @param {string} Editing type + * @return {boolean} `false` if the open is cancelled by the preOpen event, + * otherwise `true` + * @private + */ +function _preopen(type) { + // Allow preOpen event to cancel the opening of the display + if (this._event('preOpen', [type, this.s.action]) === false) { + // Tidy- this would normally be done on close, but we never get that far + this._clearDynamicInfo(); + this._event('cancelOpen', [type, this.s.action]); + // inline and bubble methods cannot be opened using `open()`, they + // have to be called again, so we need to clean up the event + // listener added by _formOptions + if ((this.s.mode === 'inline' || this.s.mode === 'bubble') && this.s.closeIcb) { + this.s.closeIcb(); + } + this.s.closeIcb = null; + return false; + } + this._clearDynamicInfo(true); + this.s.displayed = type; + return true; +} +/** + * Set the form into processing mode or take it out of processing mode. In + * processing mode a processing indicator is shown and user interaction with the + * form buttons is blocked + * + * @param {boolean} processing true if to go into processing mode and false if + * to come out of processing mode + * @private + */ +function _processing(processing) { + var procClass = this.classes.processing.active; + $(['div.DTE', this.dom.wrapper]).toggleClass(procClass, processing); + this.s.processing = processing; + this._event('processing', [processing]); +} +/** + * Check if any of the fields are processing for the submit to carry on. It + * can recurse. + * + * @private + */ +function _noProcessing(args) { + var processing = false; + $.each(this.s.fields, function (name, field) { + if (field.processing()) { + processing = true; + } + }); + if (processing) { + this.one('processing-field', function () { + // Are any other fields in a processing state? - Might need to wait again + if (this._noProcessing(args) === true) { + this._submit.apply(this, args); + } + }); + } + return !processing; +} +/** + * Submit a form to the server for processing. This is the private method that is used + * by the 'submit' API method, which should always be called in preference to calling + * this method directly. + * + * @param {function} [successCallback] Callback function that is executed once the + * form has been successfully submitted to the server and no errors occurred. + * @param {function} [errorCallback] Callback function that is executed if the + * server reports an error due to the submission (this includes a JSON formatting + * error should the error return invalid JSON). + * @param {function} [formatdata] Callback function that is passed in the data + * that will be submitted to the server, allowing pre-formatting of the data, + * removal of data or adding of extra fields. + * @param {boolean} [hide=true] When the form is successfully submitted, by default + * the form display will be hidden - this option allows that to be overridden. + * @private + */ +function _submit(successCallback, errorCallback, formatdata, hide) { + var _this = this; + var changed = false; + var allData = {}; + var changedData = {}; + var setBuilder = dataSet; + var fields = this.s.fields; + var editCount = this.s.editCount; + var editFields = this.s.editFields; + var editData = this.s.editData; + var opts = this.s.editOpts; + var changedSubmit = opts.submit; + var submitParamsLocal; + // First - are any of the fields currently "processing"? If so, then we + // want to let them complete before submitting + if (this._noProcessing(arguments) === false) { + Editor.error('Field is still processing', 16, false); + return; + } + // After initSubmit to allow `mode()` to be used as a setter + var action = this.s.action; + var submitParams = { + data: {} + }; + submitParams[this.s.actionName] = action; + // Gather the data that is to be submitted + if (action === 'create' || action === 'edit') { + $.each(editFields, function (idSrc, edit) { + var allRowData = {}; + var changedRowData = {}; + $.each(fields, function (name, field) { + if (edit.fields[name] && field.submittable()) { + var multiGet = field.multiGet(); + var builder = setBuilder(name); + // If it wasn't an edit field, we still need to get the original + // data, so we can submit it if `all` or `allIfChanged` + if (multiGet[idSrc] === undefined) { + var originalVal = field.valFromData(edit.data); + builder(allRowData, originalVal); + return; + } + var value = multiGet[idSrc]; + var manyBuilder = Array.isArray(value) && typeof name === 'string' && name.indexOf('[]') !== -1 ? + setBuilder(name.replace(/\[.*$/, '') + '-many-count') : + null; + builder(allRowData, value); + // We need to tell the server-side if an array submission + // actually has no elements so it knows if the array was + // being submitted or not (since otherwise it doesn't know + // if the array was empty, or just not being submitted) + if (manyBuilder) { + manyBuilder(allRowData, value.length); + } + // Build a changed object for if that is the selected data + // type + if (action === 'edit' && (!editData[name] || !field.compare(value, editData[name][idSrc]))) { + builder(changedRowData, value); + changed = true; + if (manyBuilder) { + manyBuilder(changedRowData, value.length); + } + } + } + }); + if (!$.isEmptyObject(allRowData)) { + allData[idSrc] = allRowData; + } + if (!$.isEmptyObject(changedRowData)) { + changedData[idSrc] = changedRowData; + } + }); + // Decide what data to submit to the server for edit (create is all, always) + if (action === 'create' || changedSubmit === 'all' || (changedSubmit === 'allIfChanged' && changed)) { + submitParams.data = allData; + } + else if (changedSubmit === 'changed' && changed) { + submitParams.data = changedData; + } + else { + // Nothing to submit + this.s.action = null; + if (opts.onComplete === 'close' && (hide === undefined || hide)) { + this._close(false); + } + else if (typeof opts.onComplete === 'function') { + opts.onComplete(this); + } + if (successCallback) { + successCallback.call(this); + } + this._processing(false); + this._event('submitComplete'); + return; + } + } + else if (action === 'remove') { + $.each(editFields, function (idSrc, edit) { + submitParams.data[idSrc] = edit.data; + }); + } + // Local copy of the submit parameters, needed for the data lib prep since + // the preSubmit can modify the format and we need to know what the format is + submitParamsLocal = $.extend(true, {}, submitParams); + // Allow the data to be submitted to the server to be preprocessed by callback + // and event functions + if (formatdata) { + formatdata(submitParams); + } + this._event('preSubmit', [submitParams, action], function (result) { + if (result === false) { + _this._processing(false); + } + else { + // Submit to the server (or whatever method is defined in the settings) + var submitWire = _this.s.ajax ? + _this._ajax : + _this._submitTable; + submitWire.call(_this, submitParams, function (json, notGood, xhr) { + _this._submitSuccess(json, notGood, submitParams, submitParamsLocal, _this.s.action, editCount, hide, successCallback, errorCallback, xhr); + }, function (xhr, err, thrown) { + _this._submitError(xhr, err, thrown, errorCallback, submitParams, _this.s.action); + }, submitParams); + } + }); +} +/** + * Save submitted data without an Ajax request. This will write to a local + * table only - not saving it permanently, but rather using the DataTable itself + * as a data store. + * + * @param {object} data Data to submit + * @param {function} success Success callback + * @param {function} error Error callback + * @param {object} submitParams Submitted data + * @private + */ +function _submitTable(data, success, error, submitParams) { + var action = data.action; + var out = { data: [] }; + var idGet = dataGet(this.s.idSrc); + var idSet = dataSet(this.s.idSrc); + // Nothing required for remove - create and edit get a copy of the data + if (action !== 'remove') { + var originalData_1 = this.s.mode === 'main' ? + this._dataSource('fields', this.modifier()) : + this._dataSource('individual', this.modifier()); + $.each(data.data, function (key, vals) { + var toSave; + var extender = extend; + // Get the original row's data, so we can modify it with new values. + // This allows Editor to not need to submit all fields + if (action === 'edit') { + var rowData = originalData_1[key].data; + toSave = extender({}, rowData, true); + toSave = extender(toSave, vals, true); + } + else { + toSave = extender({}, vals, true); + } + // If create and there isn't an id for the new row, create + // one. An id could be creased by `preSubmit` + var overrideId = idGet(toSave); + if (action === 'create' && overrideId === undefined) { + idSet(toSave, +new Date() + key.toString()); + } + else { + idSet(toSave, overrideId); + } + out.data.push(toSave); + }); + } + success(out); +} +/** + * Submit success callback function + * + * @param {object} json Payload + * @param {bool} notGood True if the returned status code was + * >=400 (i.e. processing failed). This is called `notGood` rather than + * `success` since the request was successfully processed, just not written to + * the db. It is also inverted from "good" to make it optional when overriding + * the `ajax` function. + * @param {object} submitParams Submitted data + * @param {object} submitParamsLocal Unmodified copy of submitted data + * (before it could be modified by the user) + * @param {string} action CRUD action being taken + * @param {int} editCount Protection against async errors + * @param {bool} hide Hide the form flag + * @param {function} successCallback Success callback + * @param {function} errorCallback Error callback + * @private + */ +function _submitSuccess(json, notGood, submitParams, submitParamsLocal, action, editCount, hide, successCallback, errorCallback, xhr) { + var _this = this; + var that = this; + var setData; + var fields = this.s.fields; + var opts = this.s.editOpts; + var modifier = this.s.modifier; + this._event('postSubmit', [json, submitParams, action, xhr]); + if (!json.error) { + json.error = ''; + } + if (!json.fieldErrors) { + json.fieldErrors = []; + } + if (notGood || json.error || json.fieldErrors.length) { + // Global form error + var globalError_1 = []; + if (json.error) { + globalError_1.push(json.error); + } + // Field specific errors + $.each(json.fieldErrors, function (i, err) { + var field = fields[err.name]; + if (!field) { + throw new Error('Unknown field: ' + err.name); + } + else if (field.displayed()) { + field.error(err.status || 'Error'); + if (i === 0) { + if (opts.onFieldError === 'focus') { + // Scroll the display to the first error and focus + _this._animate($(_this.dom.bodyContent), { scrollTop: $(field.node()).position().top }, 500); + field.focus(); + } + else if (typeof opts.onFieldError === 'function') { + opts.onFieldError(_this, err); + } + } + } + else { + // If the field isn't visible, we need to make it display as a global error + // This _shouldn't_ happen - it means there is invalid data if it does + globalError_1.push(field.name() + ': ' + (err.status || 'Error')); + } + }); + this.error(globalError_1.join('
')); + this._event('submitUnsuccessful', [json]); + if (errorCallback) { + errorCallback.call(that, json); + } + } + else { + // Create a data store that the data source can use, which is + // unique to this action + var store = {}; + if (json.data && (action === 'create' || action === 'edit')) { + this._dataSource('prep', action, modifier, submitParamsLocal, json, store); + for (var _i = 0, _a = json.data; _i < _a.length; _i++) { + var data = _a[_i]; + setData = data; + var id = this._dataSource('id', data); + this._event('setData', [json, data, action]); // legacy + if (action === 'create') { + // New row was created to add it to the DT + this._event('preCreate', [json, data, id]); + this._dataSource('create', fields, data, store); + this._event(['create', 'postCreate'], [json, data, id]); + } + else if (action === 'edit') { + // Row was updated, so tell the DT + this._event('preEdit', [json, data, id]); + this._dataSource('edit', modifier, fields, data, store); + this._event(['edit', 'postEdit'], [json, data, id]); + } + } + this._dataSource('commit', action, modifier, json.data, store); + } + else if (action === 'remove') { + this._dataSource('prep', action, modifier, submitParamsLocal, json, store); + // Remove the rows given and then redraw the table + this._event('preRemove', [json, this.ids()]); + this._dataSource('remove', modifier, fields, store); + this._event(['remove', 'postRemove'], [json, this.ids()]); + this._dataSource('commit', action, modifier, json.data, store); + } + // Submission complete + if (editCount === this.s.editCount) { + var sAction = this.s.action; + this.s.action = null; // Must do before close, in case close starts a new edit + if (opts.onComplete === 'close' && (hide === undefined || hide)) { + // If no data returned, then treat as not complete + this._close(json.data ? true : false, sAction); + } + else if (typeof opts.onComplete === 'function') { + opts.onComplete(this); + } + } + // All done - fire off the callbacks and events + if (successCallback) { + successCallback.call(that, json); + } + this._event('submitSuccess', [json, setData, action]); + } + this._processing(false); + this._event('submitComplete', [json, setData, action]); +} +/** + * Submit error callback function + * + * @private + */ +function _submitError(xhr, err, thrown, errorCallback, submitParams, action) { + this._event('postSubmit', [null, submitParams, action, xhr]); + this.error(this.i18n.error.system); + this._processing(false); + if (errorCallback) { + errorCallback.call(this, xhr, err, thrown); + } + this._event(['submitError', 'submitComplete'], [xhr, err, thrown, submitParams]); +} +/** + * Check to see if the form needs to be tidied before a new action can be performed. + * This includes if the from is currently processing an old action and if it + * is inline editing. + * + * @param {function} fn Callback function + * @returns {boolean} `true` if was in inline mode, `false` otherwise + * @private + */ +function _tidy(fn) { + var _this = this; + var dt = this.s.table ? + new $.fn.dataTable.Api(this.s.table) : + null; + var ssp = false; + if (dt) { + ssp = dt.settings()[0].oFeatures.bServerSide; + } + if (this.s.processing) { + // If currently processing, wait until the action is complete + this.one('submitComplete', function () { + // If server-side processing is being used in DataTables, first + // check that we are still processing (might not be if nothing was + // submitted) and then wait for the draw to finished + if (ssp) { + dt.one('draw', fn); + } + else { + setTimeout(function () { + fn(); + }, 10); + } + }); + return true; + } + else if (this.display() === 'inline' || this.display() === 'bubble') { + // If there is an inline edit box, it needs to be tidied + this + .one('close', function () { + // On close if processing then we need to wait for the submit to + // complete before running the callback as onBlur was set to + // submit + if (!_this.s.processing) { + // IE needs a small timeout, otherwise it may not focus on a + // field if one already has focus + setTimeout(function () { + // Check this Editor wasn't destroyed + if (_this.s) { + fn(); + } + }, 10); + } + else { + // Need to wait for the submit to finish + _this.one('submitComplete', function (e, json) { + // If SSP then need to wait for the draw + if (ssp && json) { + dt.one('draw', fn); + } + else { + setTimeout(function () { + if (_this.s) { + fn(); + } + }, 10); + } + }); + } + }) + .blur(); + return true; + } + return false; +} +/** + * Same as $.inArray but with weak type checking + * + * @param {any} name Value to look for in the array + * @param {array} arr Array to scan through + * @returns {number} -1 if not found, index otherwise + */ +function _weakInArray(name, arr) { + for (var i = 0, ien = arr.length; i < ien; i++) { + if (name == arr[i]) { + return i; + } + } + return -1; +} + +var fieldType = { + create: function () { }, + disable: function () { }, + enable: function () { }, + get: function () { }, + set: function () { } +}; + +var DataTable$3 = $.fn.dataTable; +// Upload private helper method +function _buttonText(conf, textIn) { + if (textIn === null || textIn === undefined) { + textIn = conf.uploadText || 'Choose file...'; + } + conf._input.find('div.upload button').html(textIn); +} +function _commonUpload(editor, conf, dropCallback, multiple) { + if (multiple === void 0) { multiple = false; } + var btnClass = editor.classes.form.buttonInternal; + var container = $('
' + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'); + conf._input = container; + conf._enabled = true; + if (conf.id) { + container.find('input[type=file]').attr('id', Editor.safeId(conf.id)); + } + if (conf.attr) { + container.find('input[type=file]').attr(conf.attr); + } + _buttonText(conf); + if (window.FileReader && conf.dragDrop !== false) { + container.find('div.drop span').text(conf.dragDropText || 'Drag and drop a file here to upload'); + var dragDrop_1 = container.find('div.drop'); + dragDrop_1 + .on('drop', function (e) { + if (conf._enabled) { + Editor.upload(editor, conf, e.originalEvent.dataTransfer.files, _buttonText, dropCallback); + dragDrop_1.removeClass('over'); + } + return false; + }) + .on('dragleave dragexit', function (e) { + if (conf._enabled) { + dragDrop_1.removeClass('over'); + } + return false; + }) + .on('dragover', function (e) { + if (conf._enabled) { + dragDrop_1.addClass('over'); + } + return false; + }); + // When an Editor is open with a file upload input there is a + // reasonable chance that the user will miss the drop point when + // dragging and dropping. Rather than loading the file in the browser, + // we want nothing to happen, otherwise the form will be lost. + editor + .on('open', function () { + $('body').on('dragover.DTE_Upload drop.DTE_Upload', function (e) { + return false; + }); + }) + .on('close', function () { + $('body').off('dragover.DTE_Upload drop.DTE_Upload'); + }); + } + else { + container.addClass('noDrop'); + container.append(container.find('div.rendered')); + } + container.find('div.clearValue button').on('click', function (e) { + e.preventDefault(); + if (conf._enabled) { + upload.set.call(editor, conf, ''); + } + }); + container.find('input[type=file]').on('input', function () { + Editor.upload(editor, conf, this.files, _buttonText, function (ids, error) { + if (!error) { + dropCallback.call(editor, ids); + } + container.find('input[type=file]')[0].value = ''; + }); + }); + return container; +} +// Typically a change event caused by the end user will be added to a queue that +// the browser will handle when no other script is running. However, using +// `$().trigger()` will cause it to happen immediately, so in order to simulate +// the standard browser behaviour we use setTimeout. This also means that +// `dependent()` and other change event listeners will trigger when the field +// values have all been set, rather than as they are being set - 31594 +function _triggerChange(input) { + setTimeout(function () { + input.trigger('change', { editor: true, editorSet: true }); // editorSet legacy + }, 0); +} +// A number of the fields in this file use the same get, set, enable and disable +// methods (specifically the text based controls), so in order to reduce the code +// size, we just define them once here in our own local base model for the field +// types. +var baseFieldType = $.extend(true, {}, fieldType, { + canReturnSubmit: function (conf, node) { + return true; + }, + disable: function (conf) { + conf._input.prop('disabled', true); + }, + enable: function (conf) { + conf._input.prop('disabled', false); + }, + get: function (conf) { + return conf._input.val(); + }, + set: function (conf, val) { + conf._input.val(val); + _triggerChange(conf._input); + } +}); +var hidden = { + create: function (conf) { + conf._input = $(''); + conf._val = conf.value; + return null; + }, + get: function (conf) { + return conf._val; + }, + set: function (conf, val) { + var oldVal = conf._val; + conf._val = val; + conf._input.val(val); + if (oldVal !== val) { + _triggerChange(conf._input); + } + } +}; +var readonly = $.extend(true, {}, baseFieldType, { + create: function (conf) { + conf._input = $('').attr($.extend({ + id: Editor.safeId(conf.id), + readonly: 'readonly', + type: 'text' + }, conf.attr || {})); + return conf._input[0]; + } +}); +var text = $.extend(true, {}, baseFieldType, { + create: function (conf) { + conf._input = $('').attr($.extend({ + id: Editor.safeId(conf.id), + type: 'text' + }, conf.attr || {})); + return conf._input[0]; + } +}); +var password = $.extend(true, {}, baseFieldType, { + create: function (conf) { + conf._input = $('').attr($.extend({ + id: Editor.safeId(conf.id), + type: 'password' + }, conf.attr || {})); + return conf._input[0]; + } +}); +var textarea = $.extend(true, {}, baseFieldType, { + canReturnSubmit: function (conf, node) { + return false; + }, + create: function (conf) { + conf._input = $('').attr($.extend({ + id: Editor.safeId(conf.id) + }, conf.attr || {})); + return conf._input[0]; + } +}); +var select = $.extend(true, {}, baseFieldType, { + // Locally "private" function that can be reused for the create and update methods + _addOptions: function (conf, opts, append) { + if (append === void 0) { append = false; } + var elOpts = conf._input[0].options; + var countOffset = 0; + if (!append) { + elOpts.length = 0; + if (conf.placeholder !== undefined) { + var placeholderValue = conf.placeholderValue !== undefined ? + conf.placeholderValue : + ''; + countOffset += 1; + elOpts[0] = new Option(conf.placeholder, placeholderValue); + var disabled = conf.placeholderDisabled !== undefined ? + conf.placeholderDisabled : + true; + elOpts[0].hidden = disabled; // can't be hidden if not disabled! + elOpts[0].disabled = disabled; + elOpts[0]._editor_val = placeholderValue; + } + } + else { + countOffset = elOpts.length; + } + if (opts) { + Editor.pairs(opts, conf.optionsPair, function (val, label, i, attr) { + var option = new Option(label, val); + option._editor_val = val; + if (attr) { + $(option).attr(attr); + } + elOpts[i + countOffset] = option; + }); + } + }, + create: function (conf) { + conf._input = $('') + .attr($.extend({ + id: Editor.safeId(conf.id), + multiple: conf.multiple === true + }, conf.attr || {})) + .on('change.dte', function (e, d) { + // On change, get the user selected value and store it as the + // last set, so `update` can reflect it. This way `_lastSet` + // always gives the intended value, be it set via the API or by + // the end user. + if (!d || !d.editor) { + conf._lastSet = select.get(conf); + } + }); + select._addOptions(conf, conf.options || conf.ipOpts); + return conf._input[0]; + }, + destroy: function (conf) { + conf._input.off('change.dte'); + }, + get: function (conf) { + var val = conf._input.find('option:selected').map(function () { + return this._editor_val; + }).toArray(); + if (conf.multiple) { + return conf.separator ? + val.join(conf.separator) : + val; + } + return val.length ? val[0] : null; + }, + set: function (conf, val, localUpdate) { + if (!localUpdate) { + conf._lastSet = val; + } + // Can't just use `$().val()` because it won't work with strong types + if (conf.multiple && conf.separator && !Array.isArray(val)) { + val = typeof val === 'string' ? + val.split(conf.separator) : + []; + } + else if (!Array.isArray(val)) { + val = [val]; + } + var i; + var len = val.length; + var found; + var allFound = false; + var options = conf._input.find('option'); + conf._input.find('option').each(function () { + found = false; + for (i = 0; i < len; i++) { + // Weak typing + if (this._editor_val == val[i]) { + found = true; + allFound = true; + break; + } + } + this.selected = found; + }); + // If there is a placeholder, we might need to select it if nothing else + // was selected. It doesn't make sense to select when multi is enabled + if (conf.placeholder && !allFound && !conf.multiple && options.length) { + options[0].selected = true; + } + // Update will call change itself, otherwise multiple might be called + if (!localUpdate) { + _triggerChange(conf._input); + } + return allFound; + }, + update: function (conf, options, append) { + select._addOptions(conf, options, append); + // Attempt to set the last selected value (set by the API or the end + // user, they get equal priority) + var lastSet = conf._lastSet; + if (lastSet !== undefined) { + select.set(conf, lastSet, true); + } + _triggerChange(conf._input); + } +}); +var checkbox = $.extend(true, {}, baseFieldType, { + // Locally "private" function that can be reused for the create and update methods + _addOptions: function (conf, opts, append) { + if (append === void 0) { append = false; } + var jqInput = conf._input; + var offset = 0; + if (!append) { + jqInput.empty(); + } + else { + offset = $('input', jqInput).length; + } + if (opts) { + Editor.pairs(opts, conf.optionsPair, function (val, label, i, attr) { + jqInput.append('
' + + '' + + '' + + '
'); + $('input:last', jqInput).attr('value', val)[0]._editor_val = val; + if (attr) { + $('input:last', jqInput).attr(attr); + } + }); + } + }, + create: function (conf) { + conf._input = $('
'); + checkbox._addOptions(conf, conf.options || conf.ipOpts); + return conf._input[0]; + }, + disable: function (conf) { + conf._input.find('input').prop('disabled', true); + }, + enable: function (conf) { + conf._input.find('input').prop('disabled', false); + }, + get: function (conf) { + var out = []; + var selected = conf._input.find('input:checked'); + if (selected.length) { + selected.each(function () { + out.push(this._editor_val); + }); + } + else if (conf.unselectedValue !== undefined) { + out.push(conf.unselectedValue); + } + return conf.separator === undefined || conf.separator === null ? + out : + out.join(conf.separator); + }, + set: function (conf, val) { + var jqInputs = conf._input.find('input'); + if (!Array.isArray(val) && typeof val === 'string') { + val = val.split(conf.separator || '|'); + } + else if (!Array.isArray(val)) { + val = [val]; + } + var i; + var len = val.length; + var found; + jqInputs.each(function () { + found = false; + for (i = 0; i < len; i++) { + if (this._editor_val == val[i]) { + found = true; + break; + } + } + this.checked = found; + }); + _triggerChange(jqInputs); + }, + update: function (conf, options, append) { + // Get the current value + var currVal = checkbox.get(conf); + checkbox._addOptions(conf, options, append); + checkbox.set(conf, currVal); + } +}); +var radio = $.extend(true, {}, baseFieldType, { + // Locally "private" function that can be reused for the create and update methods + _addOptions: function (conf, opts, append) { + if (append === void 0) { append = false; } + var jqInput = conf._input; + var offset = 0; + if (!append) { + jqInput.empty(); + } + else { + offset = $('input', jqInput).length; + } + if (opts) { + Editor.pairs(opts, conf.optionsPair, function (val, label, i, attr) { + jqInput.append('
' + + '' + + '' + + '
'); + $('input:last', jqInput).attr('value', val)[0]._editor_val = val; + if (attr) { + $('input:last', jqInput).attr(attr); + } + }); + } + }, + create: function (conf) { + conf._input = $('
'); + radio._addOptions(conf, conf.options || conf.ipOpts); + // this is ugly, but IE6/7 has a problem with radio elements that are created + // and checked before being added to the DOM! Basically it doesn't check them. As + // such we use the _preChecked property to set cache the checked button and then + // check it again when the display is shown. This has no effect on other browsers + // other than to cook a few clock cycles. + this.on('open', function () { + conf._input.find('input').each(function () { + if (this._preChecked) { + this.checked = true; + } + }); + }); + return conf._input[0]; + }, + disable: function (conf) { + conf._input.find('input').prop('disabled', true); + }, + enable: function (conf) { + conf._input.find('input').prop('disabled', false); + }, + get: function (conf) { + var el = conf._input.find('input:checked'); + if (el.length) { + return el[0]._editor_val; + } + return conf.unselectedValue !== undefined ? + conf.unselectedValue : + undefined; + }, + set: function (conf, val) { + conf._input.find('input').each(function () { + this._preChecked = false; + if (this._editor_val == val) { + this.checked = true; + this._preChecked = true; + } + else { + // In a detached DOM tree, there is no relationship between the + // input elements, so we need to uncheck any element that does + // not match the value + this.checked = false; + this._preChecked = false; + } + }); + _triggerChange(conf._input.find('input:checked')); + }, + update: function (conf, options, append) { + var currVal = radio.get(conf); + radio._addOptions(conf, options, append); + // Select the current value if it exists in the new data set, otherwise + // select the first radio input so there is always a value selected + var inputs = conf._input.find('input'); + radio.set(conf, inputs.filter('[value="' + currVal + '"]').length ? + currVal : + inputs.eq(0).attr('value')); + } +}); +var datetime = $.extend(true, {}, baseFieldType, { + create: function (conf) { + conf._input = $('').attr($.extend(true, { + id: Editor.safeId(conf.id), + type: 'text' + }, conf.attr)); + if (!DataTable$3.DateTime) { + Editor.error('DateTime library is required', 15); + } + // Legacy support for 2.0- parameters + if (conf.momentLocale && !conf.opts.locale) { + conf.opts.locale = conf.momentLocale; + } + if (conf.momentStrict && !conf.opts.strict) { + conf.opts.strict = conf.momentStrict; + } + conf._picker = new DataTable$3.DateTime(conf._input, $.extend({ + format: conf.displayFormat || conf.format, + i18n: this.i18n.datetime, + }, conf.opts)); + conf._closeFn = function () { + conf._picker.hide(); + }; + if (conf.keyInput === false) { + conf._input.on('keydown', function (e) { + e.preventDefault(); + }); + } + this.on('close', conf._closeFn); + return conf._input[0]; + }, + destroy: function (conf) { + this.off('close', conf._closeFn); + conf._input.off('keydown'); + conf._picker.destroy(); + }, + errorMessage: function (conf, msg) { + conf._picker.errorMsg(msg); + }, + get: function (conf) { + return conf.wireFormat + ? conf._picker.valFormat(conf.wireFormat) + : conf._input.val(); + }, + maxDate: function (conf, max) { + conf._picker.max(max); + }, + minDate: function (conf, min) { + conf._picker.min(min); + }, + // default disable and enable options are okay + owns: function (conf, node) { + return conf._picker.owns(node); + }, + set: function (conf, val) { + // If there is a wire format, convert it to the display format + // Note that special values (e.g. `--now` and empty) do not get formatted + if (typeof val === 'string' && val && val.indexOf('--') !== 0 && conf.wireFormat) { + conf._picker.valFormat(conf.wireFormat, val); + } + else { + conf._picker.val(val); + } + _triggerChange(conf._input); + } +}); +var upload = $.extend(true, {}, baseFieldType, { + canReturnSubmit: function (conf, node) { + return false; + }, + create: function (conf) { + var editor = this; + var container = _commonUpload(editor, conf, function (val) { + upload.set.call(editor, conf, val[0]); + editor._event('postUpload', [conf.name, val[0]]); + }); + return container; + }, + disable: function (conf) { + conf._input.find('input').prop('disabled', true); + conf._enabled = false; + }, + enable: function (conf) { + conf._input.find('input').prop('disabled', false); + conf._enabled = true; + }, + get: function (conf) { + return conf._val; + }, + set: function (conf, val) { + conf._val = val; + conf._input.val(''); + var container = conf._input; + if (conf.display) { + var rendered = container.find('div.rendered'); + if (conf._val) { + rendered.html(conf.display(conf._val)); + } + else { + rendered + .empty() + .append('' + (conf.noFileText || 'No file') + ''); + } + } + var button = container.find('div.clearValue button'); + if (val && conf.clearText) { + button.html(conf.clearText); + container.removeClass('noClear'); + } + else { + container.addClass('noClear'); + } + conf._input.find('input').triggerHandler('upload.editor', [conf._val]); + } +}); +var uploadMany = $.extend(true, {}, baseFieldType, { + _showHide: function (conf) { + if (!conf.limit) { + return; + } + conf._container.find('div.limitHide').css('display', conf._val.length >= conf.limit ? + 'none' : + 'block'); + // Used by the Editor.upload static function to truncate if too many + // files are selected for upload + conf._limitLeft = conf.limit - conf._val.length; + }, + canReturnSubmit: function (conf, node) { + return false; + }, + create: function (conf) { + var editor = this; + var container = _commonUpload(editor, conf, function (val) { + conf._val = conf._val.concat(val); + uploadMany.set.call(editor, conf, conf._val); + editor._event('postUpload', [conf.name, conf._val]); + }, true); + container + .addClass('multi') + .on('click', 'button.remove', function (e) { + e.stopPropagation(); + if (conf._enabled) { + var idx = $(this).data('idx'); + conf._val.splice(idx, 1); + uploadMany.set.call(editor, conf, conf._val); + } + }); + conf._container = container; + return container; + }, + disable: function (conf) { + conf._input.find('input').prop('disabled', true); + conf._enabled = false; + }, + enable: function (conf) { + conf._input.find('input').prop('disabled', false); + conf._enabled = true; + }, + get: function (conf) { + return conf._val; + }, + set: function (conf, val) { + // Default value for fields is an empty string, whereas we want [] + if (!val) { + val = []; + } + if (!Array.isArray(val)) { + throw new Error('Upload collections must have an array as a value'); + } + conf._val = val; + conf._input.val(''); + var that = this; + var container = conf._input; + if (conf.display) { + var rendered = container.find('div.rendered').empty(); + if (val.length) { + var list_1 = $('').appendTo(rendered); + $.each(val, function (i, file) { + var display = conf.display(file, i); + if (display !== null) { + list_1.append('
  • ' + + display + + ' ' + + '
  • '); + } + }); + } + else { + rendered.append('' + (conf.noFileText || 'No files') + ''); + } + } + uploadMany._showHide(conf); + conf._input.find('input').triggerHandler('upload.editor', [conf._val]); + } +}); +var datatable = $.extend(true, {}, baseFieldType, { + _addOptions: function (conf, options, append) { + if (append === void 0) { append = false; } + var dt = conf.dt; + if (!append) { + dt.clear(); + } + dt.rows.add(options).draw(); + }, + _jumpToFirst: function (conf, editor) { + var dt = conf.dt; + // Find which page in the table the first selected row is + var idx = dt.row({ order: 'applied', selected: true }).index(); + var page = 0; + if (typeof idx === 'number') { + var pageLen = dt.page.info().length; + var pos = dt.rows({ order: 'applied' }).indexes().indexOf(idx); + page = pageLen > 0 + ? Math.floor(pos / pageLen) + : 0; + } + dt.page(page).draw(false); + // If scrolling is enabled, scroll down to first selected + var container = $('div.dataTables_scrollBody', dt.table().container()); + var scrollTo = function () { + var node = dt.row({ order: 'applied', selected: true }).node(); + if (node) { + var height = container.height(); + var top_1 = $(node).position().top; + if (top_1 > height - 10) { + container.scrollTop(top_1); + } + } + }; + if (container.length) { + // Check that the form has actually been displayed. If not need + // to wait for Editor's open event + if (container.parents('body').length) { + scrollTo(); + } + else { + editor.one('open', function () { + scrollTo(); + }); + } + } + }, + create: function (conf) { + var _this = this; + conf.optionsPair = $.extend({ + label: 'label', + value: 'value' + }, conf.optionsPair); + var table = $(''); + var container = $('
    ').append(table); + var side = $('
    '); + if (conf.footer) { + $('
    ') + .append(Array.isArray(conf.footer) + ? $('').append($.map(conf.footer, function (str) { return $('").append(Array.isArray(r.footer)?w("").append(w.map(r.footer,function(t){return w("").append(Array.isArray(a.footer)?$("").append($.map(a.footer,function(t){return $("'); + var attachFields = []; + var attach = []; + var displayFields = {}; + var tbody = dt.table(undefined).body(); + for (var i = 0, ien = dt.columns(':visible').count(); i < ien; i++) { + var visIdx = dt.column(i + ':visible').index(); + var td = $('
    ').html(str); })) + : conf.footer) + .appendTo(table); + } + var dt = table + .addClass(datatable.tableClass) + .width('100%') + .on('init.dt', function (e, settings) { + if (settings.nTable !== table[0]) { + return; + } + var api = new DataTable$3.Api(settings); + var containerNode = $(api.table(undefined).container()); + // Select init + DataTable$3.select.init(api); + // Append side button controls + side + .append(containerNode.find('div.dataTables_filter')) + .append(containerNode.find('div.dt-buttons')) + .append(containerNode.find('div.dataTables_info')); + }) + .DataTable($.extend({ + buttons: [], + columns: [ + { + data: conf.optionsPair.label, + title: 'Label' + } + ], + deferRender: true, + dom: 'fiBtp', + language: { + paginate: { + next: '>', + previous: '<', + }, + search: '', + searchPlaceholder: 'Search' + }, + lengthChange: false, + select: { + style: conf.multiple ? 'os' : 'single' + }, + }, conf.config)); + this.on('open', function () { + if (dt.search()) { + dt.search('').draw(); + } + dt.columns.adjust(); + }); + // Change event for when the user does a select - `set` will do its own + // triggering of the change for the api + dt.on('user-select', function () { + _triggerChange($(conf.dt.table().container())); + }); + if (conf.editor) { + conf.editor.table(dt); + conf.editor.on('submitComplete', function (e, json, data, action) { + if (action === 'create') { + var _loop_1 = function (dp) { + dt + .rows(function (idx, d) { return d === dp; }) + .select(); + }; + // Automatically select the new data + for (var _i = 0, _a = json.data; _i < _a.length; _i++) { + var dp = _a[_i]; + _loop_1(dp); + } + } + else if (action === 'edit' || action === 'remove') { + _this._dataSource('refresh'); + } + datatable._jumpToFirst(conf, _this); + }); + } + conf.dt = dt; + datatable._addOptions(conf, conf.options || []); + return { + input: container, + side: side, + }; + }, + disable: function (conf) { + conf.dt.select.style('api'); + conf.dt.buttons().container().css('display', 'none'); + }, + dt: function (conf) { + return conf.dt; + }, + enable: function (conf) { + conf.dt.select.style(conf.multiple ? 'os' : 'single'); + conf.dt.buttons().container().css('display', 'block'); + }, + get: function (conf) { + var rows = conf.dt + .rows({ selected: true }) + .data() + .pluck(conf.optionsPair.value) + .toArray(); + return conf.separator || !conf.multiple + ? rows.join(conf.separator || ',') + : rows; + }, + set: function (conf, val, localUpdate) { + // Convert to an array of values - works for both single and multiple + if (conf.multiple && conf.separator && !Array.isArray(val)) { + val = typeof val === 'string' ? + val.split(conf.separator) : + []; + } + else if (!Array.isArray(val)) { + val = [val]; + } + // if ( ! localUpdate ) { + // conf._lastSet = val; + // } + var valueFn = dataGet(conf.optionsPair.value); + conf.dt.rows({ selected: true }).deselect(); + conf.dt.rows(function (idx, data, node) { return val.indexOf(valueFn(data)) !== -1; }).select(); + // Jump to the first page with a selected row (if there are any) + datatable._jumpToFirst(conf, this); + // Update will call change itself, otherwise multiple might be called + if (!localUpdate) { + _triggerChange($(conf.dt.table().container())); + } + }, + tableClass: '', + update: function (conf, options, append) { + datatable._addOptions(conf, options, append); + // Attempt to set the last selected value (set by the API or the end + // user, they get equal priority) + var lastSet = conf._lastSet; + if (lastSet !== undefined) { + datatable.set(conf, lastSet, true); + } + _triggerChange($(conf.dt.table().container())); + } +}); + +var defaults = { + className: '', + compare: null, + data: '', + def: '', + entityDecode: true, + fieldInfo: '', + getFormatter: null, + id: '', + label: '', + labelInfo: '', + message: '', + multiEditable: true, + name: null, + nullDefault: false, + setFormatter: null, + submit: true, + type: 'text' +}; + +var DataTable$2 = $.fn.dataTable; +var Field = /** @class */ (function () { + function Field(options, classes, host) { + var that = this; + var multiI18n = host.internalI18n().multi; + var opts = $.extend(true, {}, Field.defaults, options); + if (!Editor.fieldTypes[opts.type]) { + throw new Error('Error adding field - unknown field type ' + opts.type); + } + this.s = { + classes: classes, + host: host, + multiIds: [], + multiValue: false, + multiValues: {}, + name: opts.name, + opts: opts, + processing: false, + type: Editor.fieldTypes[opts.type], + }; + // No id, so assign one to have the label reference work + if (!opts.id) { + opts.id = 'DTE_Field_' + opts.name; + } + // If no `data` option is given, then we use the name from the field as the + // data prop to read data for the field from DataTables + if (opts.data === '') { + opts.data = opts.name; + } + // Get and set functions in the data object for the record + this.valFromData = function (d) { + // wrapper to automatically pass `editor` as the type + return dataGet(opts.data)(d, 'editor'); + }; + this.valToData = dataSet(opts.data); // set val to data + // Field HTML structure + var template = $('
    ' + + '' + + '
    ' + + // Field specific HTML is added here if there is any + '
    ' + + '
    ' + + multiI18n.title + + '' + + multiI18n.info + + '' + + '
    ' + + '
    ' + + multiI18n.restore + + '
    ' + + '
    ' + + '
    ' + opts.message + '
    ' + + '
    ' + opts.fieldInfo + '
    ' + + '
    ' + + '
    ' + + '
    '); + var input = this._typeFn('create', opts); + var side = null; + if (input && input.side) { + side = input.side; + input = input.input; + } + if (input !== null) { + el('input-control', template).prepend(input); + } + else { + template.css('display', 'none'); + } + this.dom = { + container: template, + fieldError: el('msg-error', template), + fieldInfo: el('msg-info', template), + fieldMessage: el('msg-message', template), + inputControl: el('input-control', template), + label: el('label', template).append(side), + labelInfo: el('msg-label', template), + multi: el('multi-value', template), + multiInfo: el('multi-info', template), + multiReturn: el('msg-multi', template), + processing: el('field-processing', template) + }; + // On click - set a common value for the field + this.dom.multi.on('click', function () { + if (that.s.opts.multiEditable && !template.hasClass(classes.disabled) && opts.type !== 'readonly') { + that.val(''); + that.focus(); + } + }); + this.dom.multiReturn.on('click', function () { + that.multiRestore(); + }); + // Field type extension methods - add a method to the field for the public + // methods that each field type defines beyond the default ones that already + // exist as part of this instance + $.each(this.s.type, function (name, fn) { + if (typeof fn === 'function' && that[name] === undefined) { + that[name] = function () { + var args = Array.prototype.slice.call(arguments); + args.unshift(name); + var ret = that._typeFn.apply(that, args); + // Return the given value if there is one, or the field instance + // for chaining if there is no value + return ret === undefined ? + that : + ret; + }; + } + }); + } + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Public + */ + Field.prototype.def = function (set) { + var opts = this.s.opts; + if (set === undefined) { + // Backwards compat + var def = opts['default'] !== undefined ? + opts['default'] : + opts.def; + return typeof def === 'function' ? + def() : + def; + } + opts.def = set; + return this; + }; + Field.prototype.disable = function () { + this.dom.container.addClass(this.s.classes.disabled); + this._typeFn('disable'); + return this; + }; + Field.prototype.displayed = function () { + var container = this.dom.container; + return container.parents('body').length && container.css('display') !== 'none' ? + true : + false; + }; + Field.prototype.enable = function (toggle) { + if (toggle === void 0) { toggle = true; } + if (toggle === false) { + return this.disable(); + } + this.dom.container.removeClass(this.s.classes.disabled); + this._typeFn('enable'); + return this; + }; + Field.prototype.enabled = function () { + return this.dom.container.hasClass(this.s.classes.disabled) === false; + }; + Field.prototype.error = function (msg, fn) { + var classes = this.s.classes; + // Add or remove the error class + if (msg) { + this.dom.container.addClass(classes.error); + } + else { + this.dom.container.removeClass(classes.error); + } + this._typeFn('errorMessage', msg); + return this._msg(this.dom.fieldError, msg, fn); + }; + Field.prototype.fieldInfo = function (msg) { + return this._msg(this.dom.fieldInfo, msg); + }; + Field.prototype.isMultiValue = function () { + return this.s.multiValue && this.s.multiIds.length !== 1; + }; + Field.prototype.inError = function () { + return this.dom.container.hasClass(this.s.classes.error); + }; + Field.prototype.input = function () { + return this.s.type.input ? + this._typeFn('input') : + $('input, select, textarea', this.dom.container); + }; + Field.prototype.focus = function () { + if (this.s.type.focus) { + this._typeFn('focus'); + } + else { + $('input, select, textarea', this.dom.container).focus(); + } + return this; + }; + Field.prototype.get = function () { + // When multi-value a single get is undefined + if (this.isMultiValue()) { + return undefined; + } + return this._format(this._typeFn('get'), this.s.opts.getFormatter); + }; + Field.prototype.hide = function (animate) { + var el = this.dom.container; + if (animate === undefined) { + animate = true; + } + if (this.s.host.display() && animate && $.fn.slideUp) { + el.slideUp(); + } + else { + el.css('display', 'none'); + } + return this; + }; + Field.prototype.label = function (str) { + var label = this.dom.label; + var labelInfo = this.dom.labelInfo.detach(); + if (str === undefined) { + return label.html(); + } + label.html(str); + label.append(labelInfo); + return this; + }; + Field.prototype.labelInfo = function (msg) { + return this._msg(this.dom.labelInfo, msg); + }; + Field.prototype.message = function (msg, fn) { + return this._msg(this.dom.fieldMessage, msg, fn); + }; + // There is no `multiVal()` as its arguments could be ambiguous + // id is an idSrc value _only_ + Field.prototype.multiGet = function (id) { + var value; + var multiValues = this.s.multiValues; + var multiIds = this.s.multiIds; + var isMultiValue = this.isMultiValue(); + if (id === undefined) { + var fieldVal = this.val(); + // Get an object with the values for each item being edited + value = {}; + for (var _i = 0, multiIds_1 = multiIds; _i < multiIds_1.length; _i++) { + var multiId = multiIds_1[_i]; + value[multiId] = isMultiValue ? + multiValues[multiId] : + fieldVal; + } + } + else if (isMultiValue) { + // Individual value + value = multiValues[id]; + } + else { + // Common value + value = this.val(); + } + return value; + }; + Field.prototype.multiRestore = function () { + this.s.multiValue = true; + this._multiValueCheck(); + }; + Field.prototype.multiSet = function (id, val, recalc) { + if (recalc === void 0) { recalc = true; } + var that = this; + var multiValues = this.s.multiValues; + var multiIds = this.s.multiIds; + if (val === undefined) { + val = id; + id = undefined; + } + // Set + var set = function (idSrc, valIn) { + // Get an individual item's value - add the id to the edit ids if + // it isn't already in the set. + if ($.inArray(idSrc, multiIds) === -1) { + multiIds.push(idSrc); + } + multiValues[idSrc] = that._format(valIn, that.s.opts.setFormatter); + }; + if ($.isPlainObject(val) && id === undefined) { + // idSrc / value pairs passed in + $.each(val, function (idSrc, innerVal) { + set(idSrc, innerVal); + }); + } + else if (id === undefined) { + // Set same value for all existing ids + $.each(multiIds, function (i, idSrc) { + set(idSrc, val); + }); + } + else { + // Setting an individual property + set(id, val); + } + this.s.multiValue = true; + if (recalc) { + this._multiValueCheck(); + } + return this; + }; + Field.prototype.name = function () { + return this.s.opts.name; + }; + Field.prototype.node = function () { + return this.dom.container[0]; + }; + Field.prototype.nullDefault = function () { + return this.s.opts.nullDefault; + }; + Field.prototype.processing = function (set) { + if (set === undefined) { + return this.s.processing; + } + this.dom.processing.css('display', set ? 'block' : 'none'); + this.s.processing = set; + this.s.host.internalEvent('processing-field', [set]); + return this; + }; + // multiCheck is not publicly documented + Field.prototype.set = function (val, multiCheck) { + if (multiCheck === void 0) { multiCheck = true; } + var decodeFn = function (d) { + return typeof d !== 'string' ? + d : + d + .replace(/>/g, '>') + .replace(/</g, '<') + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/£/g, '£') + .replace(/�?39;/g, '\'') + .replace(/�?10;/g, '\n'); + }; + this.s.multiValue = false; + var decode = this.s.opts.entityDecode; + if (decode === undefined || decode === true) { + if (Array.isArray(val)) { + for (var i = 0, ien = val.length; i < ien; i++) { + val[i] = decodeFn(val[i]); + } + } + else { + val = decodeFn(val); + } + } + // If triggered from multi check we don't want to do formatting or multi checking again + if (multiCheck === true) { + val = this._format(val, this.s.opts.setFormatter); + this._typeFn('set', val); + this._multiValueCheck(); + } + else { + this._typeFn('set', val); + } + return this; + }; + Field.prototype.show = function (animate, toggle) { + if (animate === void 0) { animate = true; } + if (toggle === void 0) { toggle = true; } + if (toggle === false) { + return this.hide(animate); + } + var el = this.dom.container; + if (this.s.host.display() && animate && $.fn.slideDown) { + el.slideDown(); + } + else { + el.css('display', ''); // empty to restore css default (flex or block) + } + return this; + }; + Field.prototype.update = function (options, append) { + if (append === void 0) { append = false; } + if (this.s.type.update) { + this._typeFn('update', options, append); + } + return this; + }; + Field.prototype.val = function (val) { + return val === undefined ? + this.get() : + this.set(val); + }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Internal - Called from Editor only and are not publicly documented - + * these APIs can change! + */ + Field.prototype.compare = function (value, original) { + var compare = this.s.opts.compare || deepCompare; + return compare(value, original); + }; + Field.prototype.dataSrc = function () { + return this.s.opts.data; + }; + Field.prototype.destroy = function () { + // remove element + this.dom.container.remove(); + // field's own destroy method if there is one + this._typeFn('destroy'); + return this; + }; + Field.prototype.multiEditable = function () { + return this.s.opts.multiEditable; + }; + Field.prototype.multiIds = function () { + return this.s.multiIds; + }; + Field.prototype.multiInfoShown = function (show) { + this.dom.multiInfo.css({ display: show ? 'block' : 'none' }); + }; + Field.prototype.multiReset = function () { + this.s.multiIds = []; + this.s.multiValues = {}; + }; + Field.prototype.submittable = function () { + return this.s.opts.submit; + }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Internal + */ + Field.prototype._msg = function (el, msg, fn) { + if (msg === undefined) { + return el.html(); + } + if (typeof msg === 'function') { + var editor = this.s.host; + msg = msg(editor, new DataTable$2.Api(editor.internalSettings().table)); + } + if (el.parent().is(':visible') && $.fn.animate) { + el.html(msg); + if (msg) { + el.slideDown(fn); // fn can be undefined - so jQuery won't execute it + } + else { + el.slideUp(fn); + } + } + else { + // Not visible, so immediately set, or blank out the element + el + .html(msg || '') + .css('display', msg ? 'block' : 'none'); + if (fn) { + fn(); + } + } + return this; + }; + Field.prototype._multiValueCheck = function () { + var last; + var ids = this.s.multiIds; + var values = this.s.multiValues; + var isMultiValue = this.s.multiValue; + var isMultiEditable = this.s.opts.multiEditable; + var val; + var different = false; + if (ids) { + for (var i = 0; i < ids.length; i++) { + val = values[ids[i]]; + if (i > 0 && !deepCompare(val, last)) { + different = true; + break; + } + last = val; + } + } + if ((different && isMultiValue) || (!isMultiEditable && this.isMultiValue())) { + // Different values or same values, but not multiple editable + this.dom.inputControl.css({ display: 'none' }); + this.dom.multi.css({ display: 'block' }); + } + else { + // All the same value + this.dom.inputControl.css({ display: 'block' }); + this.dom.multi.css({ display: 'none' }); + if (isMultiValue && !different) { + this.set(last, false); + } + } + this.dom.multiReturn.css({ + display: ids && ids.length > 1 && different && !isMultiValue ? + 'block' : + 'none' + }); + // Update information label + var i18n = this.s.host.internalI18n().multi; + this.dom.multiInfo.html(isMultiEditable ? i18n.info : i18n.noMulti); + this.dom.multi.toggleClass(this.s.classes.multiNoEdit, !isMultiEditable); + this.s.host.internalMultiInfo(); + return true; + }; + Field.prototype._typeFn = function (name) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + // Insert the options as the first parameter - all field type methods + // take the field's configuration object as the first parameter + args.unshift(this.s.opts); + var fn = this.s.type[name]; + if (fn) { + return fn.apply(this.s.host, args); + } + }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Private + */ + Field.prototype._errorNode = function () { + return this.dom.fieldError; + }; + Field.prototype._format = function (val, formatter) { + if (formatter) { + if (Array.isArray(formatter)) { + var args = formatter.slice(); + var name_1 = args.shift(); + formatter = Field.formatters[name_1].apply(this, args); + } + return formatter.call(this.s.host, val, this); + } + return val; + }; + Field.defaults = defaults; + Field.formatters = {}; + return Field; +}()); + +var button = { + action: null, + className: null, + tabIndex: 0, + text: null, +}; + +var displayController = { + close: function () { }, + init: function () { }, + node: function () { }, + open: function () { } +}; + +var DataTable$1 = $.fn.dataTable; +/* + * DataTables 1.10 API integration. Provides the ability to control basic Editor + * aspects from the DataTables API. Full control does of course require use of + * the Editor API though. + */ +var apiRegister = DataTable$1.Api.register; +function _getInst(api) { + var ctx = api.context[0]; + return ctx.oInit.editor || ctx._editor; +} +// Set sensible defaults for the editing options +function _setBasic(inst, opts, type, plural) { + if (!opts) { + opts = {}; + } + if (opts.buttons === undefined) { + opts.buttons = '_basic'; + } + if (opts.title === undefined) { + opts.title = inst.i18n[type].title; + } + if (opts.message === undefined) { + if (type === 'remove') { + var confirm_1 = inst.i18n[type].confirm; + opts.message = plural !== 1 ? confirm_1._.replace(/%d/, plural) : confirm_1['1']; + } + else { + opts.message = ''; + } + } + return opts; +} +apiRegister('editor()', function () { + return _getInst(this); +}); +// Row editing +apiRegister('row.create()', function (opts) { + // main + var inst = _getInst(this); + inst.create(_setBasic(inst, opts, 'create')); + return this; +}); +apiRegister('row().edit()', function (opts) { + // main + var inst = _getInst(this); + inst.edit(this[0][0], _setBasic(inst, opts, 'edit')); + return this; +}); +apiRegister('rows().edit()', function (opts) { + // main + var inst = _getInst(this); + inst.edit(this[0], _setBasic(inst, opts, 'edit')); + return this; +}); +apiRegister('row().delete()', function (opts) { + // main + var inst = _getInst(this); + inst.remove(this[0][0], _setBasic(inst, opts, 'remove', 1)); + return this; +}); +apiRegister('rows().delete()', function (opts) { + // main + var inst = _getInst(this); + inst.remove(this[0], _setBasic(inst, opts, 'remove', this[0].length)); + return this; +}); +apiRegister('cell().edit()', function (type, opts) { + // inline or bubble + if (!type) { + type = 'inline'; + } + else if ($.isPlainObject(type)) { + opts = type; + type = 'inline'; + } + _getInst(this)[type](this[0][0], opts); + return this; +}); +apiRegister('cells().edit()', function (opts) { + // bubble only at the moment + _getInst(this).bubble(this[0], opts); + return this; +}); +apiRegister('file()', file); +apiRegister('files()', files); +// Global listener for file information updates via DataTables' Ajax JSON +$(document).on('xhr.dt', function (e, ctx, json) { + if (e.namespace !== 'dt') { + return; + } + if (json && json.files) { + $.each(json.files, function (name, filesIn) { + if (!Editor.files[name]) { + Editor.files[name] = {}; + } + $.extend(Editor.files[name], filesIn); + }); + } +}); + +/* + * Add helpful buttons to make life easier + * + * Note that the values that require a string to make any sense (the button text + * for example) are set by Editor when Editor is initialised through the i18n + * options. + */ +var _buttons = $.fn.dataTable.ext.buttons; +$.extend(_buttons, { + create: { + action: function (e, dt, node, config) { + var that = this; + var editor = config.editor; + this.processing(true); + editor + .one('preOpen', function () { + that.processing(false); + }) + .create($.extend({ + buttons: config.formButtons, + message: config.formMessage || editor.i18n.create.message, + nest: true, + title: config.formTitle || editor.i18n.create.title + }, config.formOptions)); + }, + className: 'buttons-create', + editor: null, + formButtons: { + action: function (e) { + this.submit(); + }, + text: function (editor) { + return editor.i18n.create.submit; + } + }, + formMessage: null, + formOptions: {}, + formTitle: null, + text: function (dt, node, config) { + return dt.i18n('buttons.create', config.editor.i18n.create.button); + }, + }, + createInline: { + action: function (e, dt, node, config) { + config.editor.inlineCreate(config.position, config.formOptions); + }, + className: 'buttons-create', + editor: null, + formButtons: { + action: function (e) { + this.submit(); + }, + text: function (editor) { + return editor.i18n.create.submit; + } + }, + formOptions: {}, + position: 'start', + text: function (dt, node, config) { + return dt.i18n('buttons.create', config.editor.i18n.create.button); + }, + }, + edit: { + action: function (e, dt, node, config) { + var that = this; + var editor = config.editor; + var rows = dt.rows({ selected: true }).indexes(); + var columns = dt.columns({ selected: true }).indexes(); + var cells = dt.cells({ selected: true }).indexes(); + var items = columns.length || cells.length ? + { + cells: cells, + columns: columns, + rows: rows + } : + rows; + this.processing(true); + editor + .one('preOpen', function () { + that.processing(false); + }) + .edit(items, $.extend({ + buttons: config.formButtons, + message: config.formMessage || editor.i18n.edit.message, + nest: true, + title: config.formTitle || editor.i18n.edit.title + }, config.formOptions)); + }, + className: 'buttons-edit', + editor: null, + extend: 'selected', + formButtons: { + action: function (e) { + this.submit(); + }, + text: function (editor) { + return editor.i18n.edit.submit; + }, + }, + formMessage: null, + formOptions: {}, + formTitle: null, + text: function (dt, node, config) { + return dt.i18n('buttons.edit', config.editor.i18n.edit.button); + }, + }, + remove: { + action: function (e, dt, node, config) { + var that = this; + var editor = config.editor; + this.processing(true); + editor + .one('preOpen', function () { + that.processing(false); + }) + .remove(dt.rows({ selected: true }).indexes(), $.extend({ + buttons: config.formButtons, + message: config.formMessage, + nest: true, + title: config.formTitle || editor.i18n.remove.title + }, config.formOptions)); + }, + className: 'buttons-remove', + editor: null, + extend: 'selected', + formButtons: { + action: function (e) { + this.submit(); + }, + text: function (editor) { + return editor.i18n.remove.submit; + }, + }, + formMessage: function (editor, dt) { + var rows = dt.rows({ selected: true }).indexes(); + var i18n = editor.i18n.remove; + var question = typeof i18n.confirm === 'string' ? + i18n.confirm : + i18n.confirm[rows.length] ? + i18n.confirm[rows.length] : i18n.confirm._; + return question.replace(/%d/g, rows.length); + }, + formOptions: {}, + formTitle: null, + limitTo: ['rows'], + text: function (dt, node, config) { + return dt.i18n('buttons.remove', config.editor.i18n.remove.button); + }, + } +}); +// Reuse the standard edit and remove buttons for their singular equivalent, +// but set it to extend the single selected button only +_buttons.editSingle = $.extend({}, _buttons.edit); +_buttons.editSingle.extend = 'selectedSingle'; +_buttons.removeSingle = $.extend({}, _buttons.remove); +_buttons.removeSingle.extend = 'selectedSingle'; + + +if (!DataTable || !DataTable.versionCheck || !DataTable.versionCheck('1.10.20')) { + throw new Error('Editor requires DataTables 1.10.20 or newer'); +} +var Editor = /** @class */ (function () { + function Editor(init, cjsJq) { + var _this = this; + this.add = add; + this.ajax = ajax; + this.background = background; + this.blur = blur; + this.bubble = bubble; + this.bubblePosition = bubblePosition; + this.buttons = buttons; + this.clear = clear; + this.close = close; + this.create = create; + this.undependent = undependent; + this.dependent = dependent; + this.destroy = destroy; + this.disable = disable; + this.display = display; + this.displayed = displayed; + this.displayNode = displayNode; + this.edit = edit; + this.enable = enable; + this.error = error$1; + this.field = field; + this.fields = fields; + this.file = file; + this.files = files; + this.get = get; + this.hide = hide; + this.ids = ids; + this.inError = inError; + this.inline = inline; + this.inlineCreate = inlineCreate; + this.message = message; + this.mode = mode; + this.modifier = modifier; + this.multiGet = multiGet; + this.multiSet = multiSet; + this.node = node; + this.off = off; + this.on = on; + this.one = one; + this.open = open; + this.order = order; + this.remove = remove; + this.set = set; + this.show = show; + this.submit = submit; + this.table = table; + this.template = template; + this.title = title; + this.val = val; + this._actionClass = _actionClass; + this._ajax = _ajax; + this._animate = _animate; + this._assembleMain = _assembleMain; + this._blur = _blur; + this._clearDynamicInfo = _clearDynamicInfo; + this._close = _close; + this._closeReg = _closeReg; + this._crudArgs = _crudArgs; + this._dataSource = _dataSource; + this._displayReorder = _displayReorder; + this._edit = _edit; + this._event = _event; + this._eventName = _eventName; + this._fieldFromNode = _fieldFromNode; + this._fieldNames = _fieldNames; + this._focus = _focus; + this._formOptions = _formOptions; + this._inline = _inline; + this._inputTrigger = _inputTrigger; + this._optionsUpdate = _optionsUpdate; + this._message = _message; + this._multiInfo = _multiInfo; + this._nestedClose = _nestedClose; + this._nestedOpen = _nestedOpen; + this._postopen = _postopen; + this._preopen = _preopen; + this._processing = _processing; + this._noProcessing = _noProcessing; + this._submit = _submit; + this._submitTable = _submitTable; + this._submitSuccess = _submitSuccess; + this._submitError = _submitError; + this._tidy = _tidy; + this._weakInArray = _weakInArray; + // Check if called with a window or jQuery object for DOM less applications + // This is for backwards compatibility with CommonJS loader + if (Editor.factory(init, cjsJq)) { + return Editor; + } + if (!(this instanceof Editor)) { + alert('DataTables Editor must be initialised as a \'new\' instance'); + } + init = $.extend(true, {}, Editor.defaults, init); + this.c = init; + this.s = $.extend(true, {}, Editor.models.settings, { + actionName: init.actionName, + ajax: init.ajax, + formOptions: init.formOptions, + idSrc: init.idSrc, + table: init.domTable || init.table, + template: init.template ? + $(init.template).detach() : null + }); + this.classes = $.extend(true, {}, Editor.classes); + this.i18n = init.i18n; + // Increment the unique counter for the next instance + Editor.models.settings.unique++; + var that = this; + var classes = this.classes; + var wrapper = $('
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '); + var form = $('' + + '
    ' + + ''); + this.dom = { + body: el('body', wrapper)[0], + bodyContent: el('body_content', wrapper)[0], + buttons: $('
    ')[0], + footer: el('foot', wrapper)[0], + form: form[0], + formContent: el('form_content', form)[0], + formError: $('
    ')[0], + formInfo: $('
    ')[0], + header: $('
    ')[0], + processing: el('processing', wrapper)[0], + wrapper: wrapper[0], + }; + // Bind callback methods + $.each(init.events, function (evt, fn) { + that.on(evt, function () { + var argsIn = []; + for (var _i = 0; _i < arguments.length; _i++) { + argsIn[_i] = arguments[_i]; + } + // When giving events in the constructor the event argument was not + // given in 1.2-, so we remove it here. This is solely for + // backwards compatibility as the events in the initialisation are + // not documented in 1.3+. + fn.apply(that, argsIn); + }); + }); + // Cache the DOM nodes + this.dom; + // Add any fields which are given on initialisation + if (init.fields) { + this.add(init.fields); + } + $(document) + .on('init.dt.dte' + this.s.unique, function (e, settings, json) { + // Resolve this reference in the event handlers so the + // table() API method can be used to change it and the + // change still be operated on here. + var table = _this.s.table; + if (table) { + var dtApi = new DataTable.Api(table); + if (settings.nTable === dtApi.table().node()) { + // Attempt to attach to a DataTable automatically when the table is + // initialised + settings._editor = _this; + } + } + }) + .on('i18n.dt.dte' + this.s.unique, function (e, settings) { + var table = _this.s.table; + if (table) { + var dtApi = new DataTable.Api(table); + if (settings.nTable === dtApi.table().node()) { + // Use loaded language options + if (settings.oLanguage.editor) { + $.extend(true, _this.i18n, settings.oLanguage.editor); + } + } + } + }) + .on('xhr.dt.dte' + this.s.unique, function (e, settings, json) { + var table = _this.s.table; + if (table) { + var dtApi = new DataTable.Api(table); + if (settings.nTable === dtApi.table().node()) { + // Automatically update fields which have a field name defined in + // the returned json - saves an `initComplete` for the user + _this._optionsUpdate(json); + } + } + }); + // Prep the display controller + if (!Editor.display[init.display]) { + throw new Error('Cannot find display controller ' + init.display); + } + this.s.displayController = Editor.display[init.display].init(this); + this._event('initComplete', []); + $(document).trigger('initEditor', [this]); + } + // Expose internal methods and options for the Field class to use + // These are not publicly documented. + /** @internal */ + Editor.prototype.internalEvent = function (name, args) { + this._event(name, args); + }; + /** @internal */ + Editor.prototype.internalI18n = function () { + return this.i18n; + }; + /** @internal */ + Editor.prototype.internalMultiInfo = function () { + return this._multiInfo(); + }; + /** @internal */ + Editor.prototype.internalSettings = function () { + return this.s; + }; + Editor.fieldTypes = { + checkbox: checkbox, + datatable: datatable, + datetime: datetime, + hidden: hidden, + password: password, + radio: radio, + readonly: readonly, + select: select, + text: text, + textarea: textarea, + upload: upload, + uploadMany: uploadMany + }; + Editor.files = {}; + Editor.version = '2.1.3'; + Editor.classes = classNames; + Editor.Field = Field; + Editor.DateTime = null; + Editor.error = error; + Editor.pairs = pairs; + Editor.factory = factory; + Editor.upload = upload$1; + Editor.defaults = defaults$1; + Editor.models = { + button: button, + displayController: displayController, + fieldType: fieldType, + formOptions: formOptions, + settings: settings, + }; + Editor.dataSources = { + dataTable: dataSource$1, + html: dataSource, + }; + Editor.display = { + envelope: envelope, + lightbox: self, + }; + Editor.safeId = function (id) { + return safeDomId(id, ''); + }; + return Editor; +}()); +DataTable.Editor = Editor; +$.fn.DataTable.Editor = Editor; +if (DataTable.DateTime) { + Editor.DateTime = DataTable.DateTime; +} +// If there are field types available on DataTables we copy them in (after the +// built in ones to allow overrides) and then expose the field types object. +if (DataTable.ext.editorFields) { + $.extend(Editor.fieldTypes, DataTable.ext.editorFields); +} +DataTable.ext.editorFields = Editor.fieldTypes; + + + +return Editor; +})); diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/dataTables.editor.min.js b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/dataTables.editor.min.js new file mode 100644 index 00000000..227abd83 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/dataTables.editor.min.js @@ -0,0 +1,6 @@ +/*! DataTables Editor v2.1.3 + * + * ©2012-2023 SpryMedia Ltd, all rights reserved. + * License: editor.datatables.net/license + */ +!function(i){var n,s;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(t){return i(t,window,document)}):"object"==typeof exports?(n=require("jquery"),s=function(t,e){e.fn.dataTable||require("datatables.net")(t,e)},"undefined"==typeof window?module.exports=function(t,e){return t=t||window,e=e||n(t),s(t,e),i(e,t,t.document)}:(s(window,n),module.exports=i(n,window,window.document))):i(jQuery,window,document)}(function(w,c,y,E){"use strict";var r=w.fn.dataTable,t={buttons:!0,drawType:!1,focus:0,message:!0,nest:!1,onBackground:"blur",onBlur:"close",onComplete:"close",onEsc:"close",onFieldError:"focus",onReturn:"submit",scope:"row",submit:"all",submitHtml:"▶",submitTrigger:null,title:!0},N={actionName:"action",ajax:null,display:"lightbox",events:{},fields:[],formOptions:{bubble:w.extend({},t,{buttons:"_basic",message:!1,submit:"changed",title:!1}),inline:w.extend({},t,{buttons:!1,submit:"changed"}),main:w.extend({},t)},i18n:{close:"Close",create:{button:"New",submit:"Create",title:"Create new entry"},datetime:{amPm:["am","pm"],hours:"Hour",minutes:"Minute",months:["January","February","March","April","May","June","July","August","September","October","November","December"],next:"Next",previous:"Previous",seconds:"Second",unknown:"-",weekdays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},edit:{button:"Edit",submit:"Update",title:"Edit entry"},error:{system:'A system error has occurred (More information).'},multi:{info:"The selected items contain different values for this input. To edit and set all items for this input to the same value, click or tap here, otherwise they will retain their individual values.",noMulti:"This input can be edited individually, but not part of a group.",restore:"Undo changes",title:"Multiple values"},remove:{button:"Delete",confirm:{1:"Are you sure you wish to delete 1 row?",_:"Are you sure you wish to delete %d rows?"},submit:"Delete",title:"Delete"}},idSrc:"DT_RowId",table:null},B={action:null,actionName:"action",ajax:null,bubbleNodes:[],bubbleBottom:!1,closeCb:null,closeIcb:null,dataSource:null,displayController:null,displayed:!1,editCount:0,editData:{},editFields:{},editOpts:{},fields:{},formOptions:{bubble:w.extend({},t),inline:w.extend({},t),main:w.extend({},t)},globalError:"",id:-1,idSrc:null,includeFields:[],mode:null,modifier:null,opts:null,order:[],processing:!1,setFocus:null,table:null,template:null,unique:0},e=w.fn.dataTable.ext.oApi;function L(t){var e,i=[];for(e in t)t.hasOwnProperty(e)&&i.push(e);return i}function a(t,e){return w('*[data-dte-e="'+t+'"]',e=e===E?y:e)}function f(t,e){return void 0===e&&(e="#"),"string"==typeof t?e+t.replace(/(:|\.|\[|\]|,)/g,"\\$1"):e+t}function u(t){return e._fnGetObjectDataFn(t)}function _(t){return e._fnSetObjectDataFn(t)}var d=e._fnExtend;function p(t,i){var n=[];return w.each(t,function(t,e){n.push(e[i])}),n}function M(t,e){if("object"!=typeof t||"object"!=typeof e)return t==e;var i=L(t),n=L(e);if(i.length!==n.length)return!1;for(var s=0,o=i.length;s'),n=[],s=[],o={},r=e.table(E).body(),a=0,l=e.columns(":visible").count();a").appendTo(i),c=W(e,this.s.fields,d,!0),d=e.settings()[0].aoColumns[d].sClass;d&&u.addClass(d),Object.keys(c).length&&(n.push(Object.keys(c)),s.push(u[0]),w.extend(o,c))}function f(){0===e.page.info().recordsDisplay&&w(r).empty(),i["end"===t?"appendTo":"prependTo"](r)}return this.__dtFakeRow=i,f(),e.on("draw.dte-createInline",function(){f()}),{0:{attach:s,attachFields:n,displayFields:o,fields:this.s.fields,type:"row"}}},fakeRowEnd:function(){var t=h(this.s.table);t.off("draw.dte-createInline"),this.__dtFakeRow.remove(),this.__dtFakeRow=null,0===t.page.info().recordsDisplay&&t.draw(!1)},fields:function(t){var e,i,n,s,o,r=u(this.s.idSrc),a=h(this.s.table),l=this.s.fields,d={};return!w.isPlainObject(t)||t.rows===E&&t.columns===E&&t.cells===E?q(d,a,t,l,r):(t.rows!==E&&q(d,a,t.rows,l,r),t.columns!==E&&(e=d,i=a,n=t.columns,s=l,o=r,i.cells(null,n).indexes().each(function(t){H(e,i,t,s,o)})),t.cells!==E&&H(d,a,t.cells,l,r)),d},id:function(t){return u(this.s.idSrc)(t)},individual:function(t,e){var i,n=u(this.s.idSrc),s=h(this.s.table),o=this.s.fields,r={};return e&&(Array.isArray(e)||(e=[e]),i={},w.each(e,function(t,e){i[e]=o[e]})),H(r,s,t,o,n,i),r},prep:function(t,e,i,n,s){var o,r=this;"create"===t&&(s.rowIds=w.map(n.data,function(t){return m.id.call(r,t)})),"edit"===t?(o=n.cancelled||[],s.rowIds=w.map(i.data,function(t,e){return w.isEmptyObject(i.data[e])||-1!==w.inArray(e,o)?E:e})):"remove"===t&&(s.cancelled=n.cancelled||[])},refresh:function(){h(this.s.table).ajax.reload(null,!1)},remove:function(t,e,i){var n,s=this,o=h(this.s.table),r=i.cancelled;(0===r.length?o.rows(t):(n=[],o.rows(t).every(function(){var t=m.id.call(s,this.data());-1===w.inArray(t,r)&&n.push(this.index())}),o.rows(n))).remove()}};function z(t){if("keyless"===t)return w(y);var e=w('[data-editor-id="'+t+'"]');if(0===(e=0===e.length?w("string"==typeof t?f(t):t):e).length)throw new Error("Could not find an element with `data-editor-id` or `id` of: "+t);return e}function G(t,e){t=z(t);return w('[data-editor-field="'+e+'"]',t)}function J(n,t,s){w.each(t,function(t,e){var i=e.valFromData(s);i!==E&&((e=G(n,e.dataSrc())).filter("[data-editor-value]").length?e.attr("data-editor-value",i):e.each(function(){for(;this.childNodes.length;)this.removeChild(this.firstChild)}).html(i))})}var l={create:function(t,e){if(e){var i=l.id.call(this,e);try{z(i).length&&J(i,t,e)}catch(t){}}},edit:function(t,e,i){J(l.id.call(this,i)||"keyless",e,i)},fields:function(s){var t={};if(Array.isArray(s))for(var e=0,i=s.length;e
    ')[0],close:w('
    ')[0],content:null,wrapper:w('
    ')[0]};function Q(t){var e=w("div.DTE_Header",b.wrapper).outerHeight(),i=w("div.DTE_Footer",b.wrapper).outerHeight(),e=w(c).height()-2*g.conf.windowPadding-e-i;return w("div.DTE_Body_Content",b.wrapper).css("maxHeight",e),w(t.dom.wrapper).outerHeight()}function Z(t,e){e=e||function(){},v&&(w(b.content).animate({top:-(b.content.offsetHeight+50)},600,function(){w([b.wrapper,b.background]).fadeOut("normal",function(){w(this).detach(),e()})}),v=!1)}function K(e,t){var i,n,s,o,r;t=t||function(){},w("body").append(b.background).append(b.wrapper),b.content.style.height="auto",v||((i=b.wrapper.style).opacity="0",i.display="block",n=Q(e),s=e,o=g.conf.attach,r=new w.fn.dataTable.Api(s.s.table),r=(o="head"===o||"create"===s.s.action?r.table(E).header():r.row(s.s.modifier).node()).offsetWidth,i.display="none",i.opacity="1",b.wrapper.style.width=r+"px",b.wrapper.style.marginLeft=-r/2+"px",b.wrapper.style.top=w(o).offset().top+o.offsetHeight+"px",b.content.style.top=-1*n-20+"px",b.background.style.opacity="0",b.background.style.display="block",w(b.background).animate({opacity:$},"normal"),w(b.wrapper).fadeIn(),w(b.content).animate({top:0},600,t)),w(b.close).attr("title",e.i18n.close).off("click.DTED_Envelope").on("click.DTED_Envelope",function(t){e.close()}),w(b.background).off("click.DTED_Envelope").on("click.DTED_Envelope",function(t){e.background()}),w("div.DTED_Lightbox_Content_Wrapper",b.wrapper).off("click.DTED_Envelope").on("click.DTED_Envelope",function(t){w(t.target).hasClass("DTED_Envelope_Content_Wrapper")&&e.background()}),w(c).off("resize.DTED_Envelope").on("resize.DTED_Envelope",function(){Q(e)}),v=!0}var g={close:function(t,e){Z(0,e)},conf:{attach:"row",windowPadding:50},destroy:function(t){Z()},init:function(t){return b.content=w("div.DTED_Envelope_Container",b.wrapper)[0],$=w(b.background).css("opacity"),g},node:function(t){return b.wrapper[0]},open:function(t,e,i){w(b.content).children().detach(),b.content.appendChild(e),b.content.appendChild(b.close),K(t,i)}};function Y(){return void 0!==c.orientation&&c.outerWidth<=576}var o=!1,tt=!1,et=0,T={background:w('
    '),close:w('
    '),content:null,wrapper:w('
    ')};function it(){var t=w("div.DTE_Header",T.wrapper).outerHeight()+w("div.DTE_Footer",T.wrapper).outerHeight();Y()?w("div.DTE_Body_Content",T.wrapper).css("maxHeight","calc(100vh - "+t+"px)"):(t=w(c).height()-2*D.conf.windowPadding-t,w("div.DTE_Body_Content",T.wrapper).css("maxHeight",t))}function nt(t,e){e=e||function(){},w("body").scrollTop(et),t._animate(T.wrapper,{opacity:0,top:D.conf.offsetAni},function(){w(this).detach(),e()}),t._animate(T.background,{opacity:0},function(){w(this).detach()}),o=!1,w(c).off("resize.DTED_Lightbox")}var D={close:function(t,e){nt(t,e)},conf:{offsetAni:25,windowPadding:25},destroy:function(t){o&&nt(t)},init:function(t){return tt||(T.content=w("div.DTED_Lightbox_Content",T.wrapper),T.wrapper.css("opacity",0),T.background.css("opacity",0),tt=!0),D},node:function(t){return T.wrapper[0]},open:function(t,e,i){var n,s=T.content;s.children().detach(),s.append(e).append(T.close),n=t,s=i,Y()&&w("body").addClass("DTED_Lightbox_Mobile"),w("body").append(T.background).append(T.wrapper),it(),o||(o=!0,T.content.css("height","auto"),T.wrapper.css({top:-D.conf.offsetAni}),n._animate(T.wrapper,{opacity:1,top:0},s),n._animate(T.background,{opacity:1}),w(c).on("resize.DTED_Lightbox",function(){it()}),et=w("body").scrollTop()),T.close.attr("title",n.i18n.close).off("click.DTED_Lightbox").on("click.DTED_Lightbox",function(t){n.close()}),T.background.off("click.DTED_Lightbox").on("click.DTED_Lightbox",function(t){t.stopImmediatePropagation(),n.background()}),w("div.DTED_Lightbox_Content_Wrapper",T.wrapper).off("click.DTED_Lightbox").on("click.DTED_Lightbox",function(t){w(t.target).hasClass("DTED_Lightbox_Content_Wrapper")&&(t.stopImmediatePropagation(),n.background())})}},st=w.fn.dataTable;function ot(t,e,i){if(void 0===i&&(i=!0),Array.isArray(t)){e!==E&&t.reverse();for(var n=0,s=t;n
    '),n=w('
    '),t=(a&&(n.appendTo("body"),i.appendTo("body")),n.children().eq(0)),s=t.children(),o=s.children(),r=(t.append(u.dom.formError),s.prepend(u.dom.form),l.message&&t.prepend(u.dom.formInfo),l.title&&t.prepend(u.dom.header),l.buttons&&s.append(u.dom.buttons),w().add(n).add(i));u._closeReg(function(t){u._animate(r,{opacity:0},function(){this===n[0]&&(r.detach(),w(c).off("resize."+e+" scroll."+e),u._clearDynamicInfo(),u._event("closed",["bubble"]))})}),i.on("click",function(){u.blur()}),o.on("click",function(){u._close()}),u.bubblePosition(),u._postopen("bubble",!1);u._animate(r,{opacity:1},function(){this===n[0]&&(u._focus(u.s.includeFields,l.focus),u._event("opened",["bubble",u.s.action]))})})),this}function ut(){var t=w("div.DTE_Bubble"),e=w("div.DTE_Bubble_Liner"),i=this.s.bubbleNodes,n={bottom:0,left:0,right:0,top:0},i=(w.each(i,function(t,e){var i=w(e).offset();e=w(e).get(0),n.top+=i.top,n.left+=i.left,n.right+=i.left+e.offsetWidth,n.bottom+=i.top+e.offsetHeight}),n.top/=i.length,n.left/=i.length,n.right/=i.length,n.bottom/=i.length,n.top),s=(n.left+n.right)/2,o=e.outerWidth(),r=e.outerHeight(),a=s-o/2,o=a+o,l=w(c).width(),d=w(c).scrollTop(),s=(t.css({left:s,top:this.s.bubbleBottom?n.bottom:i}),this.s.bubbleBottom&&t.addClass("below"),t.position());return e.length&&s.top+r>d+c.innerHeight?(t.css("top",i).removeClass("below"),this.s.bubbleBottom=!1):e.length&&s.top-r",{class:o.classes.form.button+(e.className?" "+e.className:"")}).html("function"==typeof i?i(o):i||"").attr("tabindex",e.tabIndex!==E?e.tabIndex:0).attr(s).on("keyup",function(t){13===t.which&&n&&n.call(o)}).on("keypress",function(t){13===t.which&&t.preventDefault()}).on("click",function(t){t.preventDefault(),n&&n.call(o,t)}).appendTo(o.dom.buttons)}),this}function ft(t){var i=this,e=this.s.fields;return"string"==typeof t?(i.field(t).destroy(),delete e[t],e=w.inArray(t,this.s.order),this.s.order.splice(e,1),-1!==(e=w.inArray(t,this.s.includeFields))&&this.s.includeFields.splice(e,1)):w.each(this._fieldNames(t),function(t,e){i.clear(e)}),this}function pt(){return this._close(!1),this}function ht(t,e,i,n){var s=this,o=this,r=this.s.fields,a=1;if(!this._tidy(function(){o.create(t,e,i,n)})){"number"==typeof t&&(a=t,t=e,e=i),this.s.editFields={};for(var l=0;lUploading file"),u.onload=function(t){var e,i=new FormData;if(i.append("action","upload"),i.append("uploadField",r.name),i.append("upload",a[c]),r.ajaxData&&r.ajaxData(i,a[c],c),r.ajax?e=r.ajax:w.isPlainObject(o.s.ajax)?e=o.s.ajax.upload||o.s.ajax:"string"==typeof o.s.ajax&&(e=o.s.ajax),!e)throw new Error("No Ajax option specified for upload plug-in");if("function"==typeof(e="string"==typeof e?{url:e}:e).data){var n={},s=e.data(n);w.each(n=s!==E&&"string"!=typeof s?s:n,function(t,e){i.append(t,e)})}else if(w.isPlainObject(e.data))throw new Error("Upload feature cannot use `ajax.data` with an object. Please use it as a function instead.");o._event("preUpload",[r.name,a[c],i],function(t){var s;!1===t?c
    ')),m.find("div."+o.liner.replace(/ /g,".")).append(h.field.node()).append(this.dom.formError),n=h.field.node(),e.buttons&&m.find("div."+o.buttons.replace(/ /g,".")).append(this.dom.buttons)}var b=this._inputTrigger("submit",e,n),_=this._inputTrigger("cancel",e,n);this._closeReg(function(t,e){return s=!0,w(y).off("click"+c),t&&"edit"===e||l.forEach(function(t){t.node.contents().detach(),t.node.append(t.children)}),b(),_(),a._clearDynamicInfo(),i&&i(),"inline"}),setTimeout(function(){var o,r;s||(o=w.fn.addBack?"addBack":"andSelf",w(y).on("mousedown"+c,function(t){r=t.target}).on("keydown"+c,function(t){r=t.target}).on("click"+c,function(t){for(var e=!1,i=0,n=l;i")),this._event("submitUnsuccessful",[t]),l&&l.call(this,t)}else{var m={};if(!t.data||"create"!==s&&"edit"!==s)"remove"===s&&(this._dataSource("prep",s,p,n,t,m),this._event("preRemove",[t,this.ids()]),this._dataSource("remove",p,c,m),this._event(["remove","postRemove"],[t,this.ids()]),this._dataSource("commit",s,p,t.data,m));else{this._dataSource("prep",s,p,n,t,m);for(var v=0,b=t.data;v
    ');return e._input=r,e._enabled=!0,e.id&&r.find("input[type=file]").attr("id",P.safeId(e.id)),e.attr&&r.find("input[type=file]").attr(e.attr),He(e),c.FileReader&&!1!==e.dragDrop?(r.find("div.drop span").text(e.dragDropText||"Drag and drop a file here to upload"),(s=r.find("div.drop")).on("drop",function(t){return e._enabled&&(P.upload(i,e,t.originalEvent.dataTransfer.files,He,n),s.removeClass("over")),!1}).on("dragleave dragexit",function(t){return e._enabled&&s.removeClass("over"),!1}).on("dragover",function(t){return e._enabled&&s.addClass("over"),!1}),i.on("open",function(){w("body").on("dragover.DTE_Upload drop.DTE_Upload",function(t){return!1})}).on("close",function(){w("body").off("dragover.DTE_Upload drop.DTE_Upload")})):(r.addClass("noDrop"),r.append(r.find("div.rendered"))),r.find("div.clearValue button").on("click",function(t){t.preventDefault(),e._enabled&&Qe.set.call(i,e,"")}),r.find("input[type=file]").on("input",function(){P.upload(i,e,this.files,He,function(t,e){e||n.call(i,t),r.find("input[type=file]")[0].value=""})}),r}function C(t){setTimeout(function(){t.trigger("change",{editor:!0,editorSet:!0})},0)}var i=w.extend(!0,{},Ve,{canReturnSubmit:function(t,e){return!0},disable:function(t){t._input.prop("disabled",!0)},enable:function(t){t._input.prop("disabled",!1)},get:function(t){return t._input.val()},set:function(t,e){t._input.val(e),C(t._input)}}),We={create:function(t){return t._input=w(""),t._val=t.value,null},get:function(t){return t._val},set:function(t,e){var i=t._val;t._val=e,t._input.val(e),i!==e&&C(t._input)}},ze=w.extend(!0,{},i,{create:function(t){return t._input=w("").attr(w.extend({id:P.safeId(t.id),readonly:"readonly",type:"text"},t.attr||{})),t._input[0]}}),Ge=w.extend(!0,{},i,{create:function(t){return t._input=w("").attr(w.extend({id:P.safeId(t.id),type:"text"},t.attr||{})),t._input[0]}}),Je=w.extend(!0,{},i,{create:function(t){return t._input=w("").attr(w.extend({id:P.safeId(t.id),type:"password"},t.attr||{})),t._input[0]}}),Xe=w.extend(!0,{},i,{canReturnSubmit:function(t,e){return!1},create:function(t){return t._input=w("").attr(w.extend({id:P.safeId(t.id)},t.attr||{})),t._input[0]}}),n=w.extend(!0,{},i,{_addOptions:function(t,e,i){var n,s=t._input[0].options,o=0;(i=void 0===i?!1:i)?o=s.length:(s.length=0,t.placeholder!==E&&(i=t.placeholderValue!==E?t.placeholderValue:"",o+=1,s[0]=new Option(t.placeholder,i),n=t.placeholderDisabled===E||t.placeholderDisabled,s[0].hidden=n,s[0].disabled=n,s[0]._editor_val=i)),e&&P.pairs(e,t.optionsPair,function(t,e,i,n){e=new Option(e,t);e._editor_val=t,n&&w(e).attr(n),s[i+o]=e})},create:function(i){return i._input=w("").attr(w.extend({id:P.safeId(i.id),multiple:!0===i.multiple},i.attr||{})).on("change.dte",function(t,e){e&&e.editor||(i._lastSet=n.get(i))}),n._addOptions(i,i.options||i.ipOpts),i._input[0]},destroy:function(t){t._input.off("change.dte")},get:function(t){var e=t._input.find("option:selected").map(function(){return this._editor_val}).toArray();return t.multiple?t.separator?e.join(t.separator):e:e.length?e[0]:null},set:function(t,e,i){i||(t._lastSet=e),t.multiple&&t.separator&&!Array.isArray(e)?e="string"==typeof e?e.split(t.separator):[]:Array.isArray(e)||(e=[e]);var n,s,o=e.length,r=!1,a=t._input.find("option");return t._input.find("option").each(function(){for(s=!1,n=0;n"),w("input:last",o).attr("value",t)[0]._editor_val=t,n&&w("input:last",o).attr(n)})},create:function(t){return t._input=w("
    "),s._addOptions(t,t.options||t.ipOpts),t._input[0]},disable:function(t){t._input.find("input").prop("disabled",!0)},enable:function(t){t._input.find("input").prop("disabled",!1)},get:function(t){var e=[],i=t._input.find("input:checked");return i.length?i.each(function(){e.push(this._editor_val)}):t.unselectedValue!==E&&e.push(t.unselectedValue),t.separator===E||null===t.separator?e:e.join(t.separator)},set:function(t,e){var i,n,s=t._input.find("input"),o=(Array.isArray(e)||"string"!=typeof e?Array.isArray(e)||(e=[e]):e=e.split(t.separator||"|"),e.length);s.each(function(){for(n=!1,i=0;i"),w("input:last",o).attr("value",t)[0]._editor_val=t,n&&w("input:last",o).attr(n)})},create:function(t){return t._input=w("
    "),k._addOptions(t,t.options||t.ipOpts),this.on("open",function(){t._input.find("input").each(function(){this._preChecked&&(this.checked=!0)})}),t._input[0]},disable:function(t){t._input.find("input").prop("disabled",!0)},enable:function(t){t._input.find("input").prop("disabled",!1)},get:function(t){var e=t._input.find("input:checked");return e.length?e[0]._editor_val:t.unselectedValue!==E?t.unselectedValue:E},set:function(t,e){t._input.find("input").each(function(){this._preChecked=!1,this._editor_val==e?(this.checked=!0,this._preChecked=!0):(this.checked=!1,this._preChecked=!1)}),C(t._input.find("input:checked"))},update:function(t,e,i){var n=k.get(t),e=(k._addOptions(t,e,i),t._input.find("input"));k.set(t,e.filter('[value="'+n+'"]').length?n:e.eq(0).attr("value"))}}),$e=w.extend(!0,{},i,{create:function(t){return t._input=w("").attr(w.extend(!0,{id:P.safeId(t.id),type:"text"},t.attr)),x.DateTime||P.error("DateTime library is required",15),t.momentLocale&&!t.opts.locale&&(t.opts.locale=t.momentLocale),t.momentStrict&&!t.opts.strict&&(t.opts.strict=t.momentStrict),t._picker=new x.DateTime(t._input,w.extend({format:t.displayFormat||t.format,i18n:this.i18n.datetime},t.opts)),!(t._closeFn=function(){t._picker.hide()})===t.keyInput&&t._input.on("keydown",function(t){t.preventDefault()}),this.on("close",t._closeFn),t._input[0]},destroy:function(t){this.off("close",t._closeFn),t._input.off("keydown"),t._picker.destroy()},errorMessage:function(t,e){t._picker.errorMsg(e)},get:function(t){return t.wireFormat?t._picker.valFormat(t.wireFormat):t._input.val()},maxDate:function(t,e){t._picker.max(e)},minDate:function(t,e){t._picker.min(e)},owns:function(t,e){return t._picker.owns(e)},set:function(t,e){"string"==typeof e&&e&&0!==e.indexOf("--")&&t.wireFormat?t._picker.valFormat(t.wireFormat,e):t._picker.val(e),C(t._input)}}),Qe=w.extend(!0,{},i,{canReturnSubmit:function(t,e){return!1},create:function(e){var i=this;return qe(i,e,function(t){Qe.set.call(i,e,t[0]),i._event("postUpload",[e.name,t[0]])})},disable:function(t){t._input.find("input").prop("disabled",!0),t._enabled=!1},enable:function(t){t._input.find("input").prop("disabled",!1),t._enabled=!0},get:function(t){return t._val},set:function(t,e){t._val=e,t._input.val("");var i=t._input,n=(t.display&&(n=i.find("div.rendered"),t._val?n.html(t.display(t._val)):n.empty().append(""+(t.noFileText||"No file")+"")),i.find("div.clearValue button"));e&&t.clearText?(n.html(t.clearText),i.removeClass("noClear")):i.addClass("noClear"),t._input.find("input").triggerHandler("upload.editor",[t._val])}}),F=w.extend(!0,{},i,{_showHide:function(t){t.limit&&(t._container.find("div.limitHide").css("display",t._val.length>=t.limit?"none":"block"),t._limitLeft=t.limit-t._val.length)},canReturnSubmit:function(t,e){return!1},create:function(e){var i=this,t=qe(i,e,function(t){e._val=e._val.concat(t),F.set.call(i,e,e._val),i._event("postUpload",[e.name,e._val])},!0);return t.addClass("multi").on("click","button.remove",function(t){t.stopPropagation(),e._enabled&&(t=w(this).data("idx"),e._val.splice(t,1),F.set.call(i,e,e._val))}),e._container=t},disable:function(t){t._input.find("input").prop("disabled",!0),t._enabled=!1},enable:function(t){t._input.find("input").prop("disabled",!1),t._enabled=!0},get:function(t){return t._val},set:function(i,t){if(t=t||[],!Array.isArray(t))throw new Error("Upload collections must have an array as a value");i._val=t,i._input.val("");var n,s=this,e=i._input;i.display&&(e=e.find("div.rendered").empty(),t.length?(n=w("
      ").appendTo(e),w.each(t,function(t,e){e=i.display(e,t);null!==e&&n.append("
    • "+e+'
    • ')})):e.append(""+(i.noFileText||"No files")+"")),F._showHide(i),i._input.find("input").triggerHandler("upload.editor",[i._val])}}),A=w.extend(!0,{},i,{_addOptions:function(t,e,i){t=t.dt;(i=void 0===i?!1:i)||t.clear(),t.rows.add(e).draw()},_jumpToFirst:function(t,e){function i(){var t=s.row({order:"applied",selected:!0}).node();t&&r.height()-10<(t=w(t).position().top)&&r.scrollTop(t)}var n,s=t.dt,t=s.row({order:"applied",selected:!0}).index(),o=0,r=("number"==typeof t&&(n=s.page.info().length,t=s.rows({order:"applied"}).indexes().indexOf(t),o=0")),t=w("
      ").append(n),s=w('
      '),l=(r.footer&&w("
      ").html(t)})):r.footer).appendTo(n),n.addClass(A.tableClass).width("100%").on("init.dt",function(t,e){var i;e.nTable===n[0]&&(e=new x.Api(e),i=w(e.table(E).container()),x.select.init(e),s.append(i.find("div.dataTables_filter")).append(i.find("div.dt-buttons")).append(i.find("div.dataTables_info")))}).DataTable(w.extend({buttons:[],columns:[{data:r.optionsPair.label,title:"Label"}],deferRender:!0,dom:"fiBtp",language:{paginate:{next:">",previous:"<"},search:"",searchPlaceholder:"Search"},lengthChange:!1,select:{style:r.multiple?"os":"single"}},r.config)));return this.on("open",function(){l.search()&&l.search("").draw(),l.columns.adjust()}),l.on("user-select",function(){C(w(r.dt.table().container()))}),r.editor&&(r.editor.table(l),r.editor.on("submitComplete",function(t,e,i,n){if("create"===n)for(var s=0,o=e.data;s").replace(/</g,"<").replace(/&/g,"&").replace(/"/g,'"').replace(/£/g,"£").replace(/�?39;/g,"'").replace(/�?10;/g,"\n")}this.s.multiValue=!1;var n=this.s.opts.entityDecode;if(n===E||!0===n)if(Array.isArray(t))for(var s=0,o=t.length;s
      '+s.title+''+s.info+'
      '+s.restore+'
      '+o.message+'
      '+o.fieldInfo+'
      '),t=this._typeFn("create",o),i=null;t&&t.side&&(i=t.side,t=t.input),null!==t?a("input-control",r).prepend(t):r.css("display","none"),this.dom={container:r,fieldError:a("msg-error",r),fieldInfo:a("msg-info",r),fieldMessage:a("msg-message",r),inputControl:a("input-control",r),label:a("label",r).append(i),labelInfo:a("msg-label",r),multi:a("multi-value",r),multiInfo:a("multi-info",r),multiReturn:a("msg-multi",r),processing:a("field-processing",r)},this.dom.multi.on("click",function(){n.s.opts.multiEditable&&!r.hasClass(e.disabled)&&"readonly"!==o.type&&(n.val(""),n.focus())}),this.dom.multiReturn.on("click",function(){n.multiRestore()}),w.each(this.s.type,function(e,t){"function"==typeof t&&n[e]===E&&(n[e]=function(){var t=Array.prototype.slice.call(arguments),t=(t.unshift(e),n._typeFn.apply(n,t));return t===E?n:t})})}var Ke={action:null,className:null,tabIndex:0,text:null},Ye={close:function(){},init:function(){},node:function(){},open:function(){}},S=w.fn.dataTable.Api.register;function I(t){t=t.context[0];return t.oInit.editor||t._editor}function j(t,e,i,n){return(e=e||{}).buttons===E&&(e.buttons="_basic"),e.title===E&&(e.title=t.i18n[i].title),e.message===E&&("remove"===i?(t=t.i18n[i].confirm,e.message=1!==n?t._.replace(/%d/,n):t[1]):e.message=""),e}S("editor()",function(){return I(this)}),S("row.create()",function(t){var e=I(this);return e.create(j(e,t,"create")),this}),S("row().edit()",function(t){var e=I(this);return e.edit(this[0][0],j(e,t,"edit")),this}),S("rows().edit()",function(t){var e=I(this);return e.edit(this[0],j(e,t,"edit")),this}),S("row().delete()",function(t){var e=I(this);return e.remove(this[0][0],j(e,t,"remove",1)),this}),S("rows().delete()",function(t){var e=I(this);return e.remove(this[0],j(e,t,"remove",this[0].length)),this}),S("cell().edit()",function(t,e){return t?w.isPlainObject(t)&&(e=t,t="inline"):t="inline",I(this)[t](this[0][0],e),this}),S("cells().edit()",function(t){return I(this).bubble(this[0],t),this}),S("file()",kt),S("files()",Ft),w(y).on("xhr.dt",function(t,e,i){"dt"===t.namespace&&i&&i.files&&w.each(i.files,function(t,e){P.files[t]||(P.files[t]={}),w.extend(P.files[t],e)})});var P,S=w.fn.dataTable.ext.buttons;if(w.extend(S,{create:{action:function(t,e,i,n){var s=this,o=n.editor;this.processing(!0),o.one("preOpen",function(){s.processing(!1)}).create(w.extend({buttons:n.formButtons,message:n.formMessage||o.i18n.create.message,nest:!0,title:n.formTitle||o.i18n.create.title},n.formOptions))},className:"buttons-create",editor:null,formButtons:{action:function(t){this.submit()},text:function(t){return t.i18n.create.submit}},formMessage:null,formOptions:{},formTitle:null,text:function(t,e,i){return t.i18n("buttons.create",i.editor.i18n.create.button)}},createInline:{action:function(t,e,i,n){n.editor.inlineCreate(n.position,n.formOptions)},className:"buttons-create",editor:null,formButtons:{action:function(t){this.submit()},text:function(t){return t.i18n.create.submit}},formOptions:{},position:"start",text:function(t,e,i){return t.i18n("buttons.create",i.editor.i18n.create.button)}},edit:{action:function(t,e,i,n){var s=this,o=n.editor,r=e.rows({selected:!0}).indexes(),a=e.columns({selected:!0}).indexes(),e=e.cells({selected:!0}).indexes(),e=a.length||e.length?{cells:e,columns:a,rows:r}:r;this.processing(!0),o.one("preOpen",function(){s.processing(!1)}).edit(e,w.extend({buttons:n.formButtons,message:n.formMessage||o.i18n.edit.message,nest:!0,title:n.formTitle||o.i18n.edit.title},n.formOptions))},className:"buttons-edit",editor:null,extend:"selected",formButtons:{action:function(t){this.submit()},text:function(t){return t.i18n.edit.submit}},formMessage:null,formOptions:{},formTitle:null,text:function(t,e,i){return t.i18n("buttons.edit",i.editor.i18n.edit.button)}},remove:{action:function(t,e,i,n){var s=this,o=n.editor;this.processing(!0),o.one("preOpen",function(){s.processing(!1)}).remove(e.rows({selected:!0}).indexes(),w.extend({buttons:n.formButtons,message:n.formMessage,nest:!0,title:n.formTitle||o.i18n.remove.title},n.formOptions))},className:"buttons-remove",editor:null,extend:"selected",formButtons:{action:function(t){this.submit()},text:function(t){return t.i18n.remove.submit}},formMessage:function(t,e){e=e.rows({selected:!0}).indexes(),t=t.i18n.remove;return("string"==typeof t.confirm?t.confirm:t.confirm[e.length]||t.confirm._).replace(/%d/g,e.length)},formOptions:{},formTitle:null,limitTo:["rows"],text:function(t,e,i){return t.i18n("buttons.remove",i.editor.i18n.remove.button)}}}),S.editSingle=w.extend({},S.edit),S.editSingle.extend="selectedSingle",S.removeSingle=w.extend({},S.remove),S.removeSingle.extend="selectedSingle",r&&r.versionCheck&&r.versionCheck("1.10.20"))return R.prototype.internalEvent=function(t,e){this._event(t,e)},R.prototype.internalI18n=function(){return this.i18n},R.prototype.internalMultiInfo=function(){return this._multiInfo()},R.prototype.internalSettings=function(){return this.s},R.fieldTypes={checkbox:s,datatable:A,datetime:$e,hidden:We,password:Je,radio:k,readonly:ze,select:n,text:Ge,textarea:Xe,upload:Qe,uploadMany:F},R.files={},R.version="2.1.3",R.classes=X,R.Field=i,R.DateTime=null,R.error=te,R.pairs=ee,R.factory=ne,R.upload=ie,R.defaults=N,R.models={button:Ke,displayController:Ye,fieldType:Ve,formOptions:t,settings:B},R.dataSources={dataTable:m,html:l},R.display={envelope:g,lightbox:D},R.safeId=function(t){return void 0===(e="")&&(e="#"),"string"==typeof(t=t)?e+t.replace(/\./g,"-"):e+t;var e},P=R,r.Editor=P,w.fn.DataTable.Editor=P,r.DateTime&&(P.DateTime=r.DateTime),r.ext.editorFields&&w.extend(P.fieldTypes,r.ext.editorFields),r.ext.editorFields=P.fieldTypes,P;throw new Error("Editor requires DataTables 1.10.20 or newer");function R(t,e){var s=this;if(this.add=ot,this.ajax=rt,this.background=at,this.blur=lt,this.bubble=dt,this.bubblePosition=ut,this.buttons=ct,this.clear=ft,this.close=pt,this.create=ht,this.undependent=mt,this.dependent=vt,this.destroy=bt,this.disable=_t,this.display=yt,this.displayed=gt,this.displayNode=wt,this.edit=Et,this.enable=Tt,this.error=Dt,this.field=xt,this.fields=Ct,this.file=kt,this.files=Ft,this.get=At,this.hide=Ot,this.ids=St,this.inError=It,this.inline=jt,this.inlineCreate=Pt,this.message=Rt,this.mode=Nt,this.modifier=Bt,this.multiGet=Lt,this.multiSet=Mt,this.node=Ut,this.off=Vt,this.on=Ht,this.one=qt,this.open=Wt,this.order=zt,this.remove=Gt,this.set=Jt,this.show=Xt,this.submit=$t,this.table=Qt,this.template=Zt,this.title=Kt,this.val=Yt,this._actionClass=re,this._ajax=ae,this._animate=le,this._assembleMain=de,this._blur=ue,this._clearDynamicInfo=ce,this._close=fe,this._closeReg=pe,this._crudArgs=he,this._dataSource=me,this._displayReorder=ve,this._edit=be,this._event=_e,this._eventName=ye,this._fieldFromNode=ge,this._fieldNames=we,this._focus=Ee,this._formOptions=Te,this._inline=De,this._inputTrigger=xe,this._optionsUpdate=Ce,this._message=ke,this._multiInfo=Fe,this._nestedClose=Ae,this._nestedOpen=Oe,this._postopen=Se,this._preopen=Ie,this._processing=je,this._noProcessing=Pe,this._submit=Re,this._submitTable=Ne,this._submitSuccess=Be,this._submitError=Le,this._tidy=Me,this._weakInArray=Ue,R.factory(t,e))return R;this instanceof R||alert("DataTables Editor must be initialised as a 'new' instance"),t=w.extend(!0,{},R.defaults,t),this.c=t,this.s=w.extend(!0,{},R.models.settings,{actionName:t.actionName,ajax:t.ajax,formOptions:t.formOptions,idSrc:t.idSrc,table:t.domTable||t.table,template:t.template?w(t.template).detach():null}),this.classes=w.extend(!0,{},R.classes),this.i18n=t.i18n,R.models.settings.unique++;var n=this,e=this.classes,i=w('
      '),o=w('
      ');if(this.dom={body:a("body",i)[0],bodyContent:a("body_content",i)[0],buttons:w('
      ')[0],footer:a("foot",i)[0],form:o[0],formContent:a("form_content",o)[0],formError:w('
      ')[0],formInfo:w('
      ')[0],header:w('
      ')[0],processing:a("processing",i)[0],wrapper:i[0]},w.each(t.events,function(t,i){n.on(t,function(){for(var t=[],e=0;eMore information).'},multi:{info:"The selected items contain different values for this input. To edit and set all items for this input to the same value, click or tap here, otherwise they will retain their individual values.",noMulti:"This input can be edited individually, but not part of a group.",restore:"Undo changes",title:"Multiple values"},remove:{button:"Delete",confirm:{1:"Are you sure you wish to delete 1 row?",_:"Are you sure you wish to delete %d rows?"},submit:"Delete",title:"Delete"}},idSrc:"DT_RowId",table:null},settings={action:null,actionName:"action",ajax:null,bubbleNodes:[],bubbleBottom:!1,closeCb:null,closeIcb:null,dataSource:null,displayController:null,displayed:!1,editCount:0,editData:{},editFields:{},editOpts:{},fields:{},formOptions:{bubble:$.extend({},formOptions),inline:$.extend({},formOptions),main:$.extend({},formOptions)},globalError:"",id:-1,idSrc:null,includeFields:[],mode:null,modifier:null,opts:null,order:[],processing:!1,setFocus:null,table:null,template:null,unique:0},DataTable$6=$.fn.dataTable,DtInternalApi=DataTable$6.ext.oApi;function objectKeys(t){var e,i=[];for(e in t)t.hasOwnProperty(e)&&i.push(e);return i}function el(t,e){return void 0===e&&(e=document),$('*[data-dte-e="'+t+'"]',e)}function safeDomId(t,e){return void 0===e&&(e="#"),"string"==typeof t?e+t.replace(/\./g,"-"):e+t}function safeQueryId(t,e){return void 0===e&&(e="#"),"string"==typeof t?e+t.replace(/(:|\.|\[|\]|,)/g,"\\$1"):e+t}function dataGet(t){return DtInternalApi._fnGetObjectDataFn(t)}function dataSet(t){return DtInternalApi._fnSetObjectDataFn(t)}var extend=DtInternalApi._fnExtend;function pluck(t,i){var n=[];return $.each(t,function(t,e){n.push(e[i])}),n}function deepCompare(t,e){if("object"!=typeof t||"object"!=typeof e)return t==e;var i=objectKeys(t),n=objectKeys(e);if(i.length!==n.length)return!1;for(var o=0,s=i.length;o'),n=[],o=[],s={},a=e.table(void 0).body(),r=0,l=e.columns(":visible").count();r").appendTo(i),c=_dtFieldsFromIdx(e,this.s.fields,d,!0),d=e.settings()[0].aoColumns[d].sClass;d&&u.addClass(d),Object.keys(c).length&&(n.push(Object.keys(c)),o.push(u[0]),$.extend(s,c))}function p(){0===e.page.info().recordsDisplay&&$(a).empty(),i["end"===t?"appendTo":"prependTo"](a)}return this.__dtFakeRow=i,p(),e.on("draw.dte-createInline",function(){p()}),{0:{attach:o,attachFields:n,displayFields:s,fields:this.s.fields,type:"row"}}},fakeRowEnd:function(){var t=_dtApi(this.s.table);t.off("draw.dte-createInline"),this.__dtFakeRow.remove(),this.__dtFakeRow=null,0===t.page.info().recordsDisplay&&t.draw(!1)},fields:function(t){var e=dataGet(this.s.idSrc),i=_dtApi(this.s.table),n=this.s.fields,o={};return!$.isPlainObject(t)||void 0===t.rows&&void 0===t.columns&&void 0===t.cells?_dtRowSelector(o,i,t,n,e):(void 0!==t.rows&&_dtRowSelector(o,i,t.rows,n,e),void 0!==t.columns&&_dtColumnSelector(o,i,t.columns,n,e),void 0!==t.cells&&_dtCellSelector(o,i,t.cells,n,e)),o},id:function(t){return dataGet(this.s.idSrc)(t)},individual:function(t,e){var i,n=dataGet(this.s.idSrc),o=_dtApi(this.s.table),s=this.s.fields,a={};return e&&(Array.isArray(e)||(e=[e]),i={},$.each(e,function(t,e){i[e]=s[e]})),_dtCellSelector(a,o,t,s,n,i),a},prep:function(t,e,i,n,o){var s,a=this;"create"===t&&(o.rowIds=$.map(n.data,function(t){return dataSource$1.id.call(a,t)})),"edit"===t?(s=n.cancelled||[],o.rowIds=$.map(i.data,function(t,e){return $.isEmptyObject(i.data[e])||-1!==$.inArray(e,s)?void 0:e})):"remove"===t&&(o.cancelled=n.cancelled||[])},refresh:function(){_dtApi(this.s.table).ajax.reload(null,!1)},remove:function(t,e,i){var n,o=this,s=_dtApi(this.s.table),a=i.cancelled;(0===a.length?s.rows(t):(n=[],s.rows(t).every(function(){var t=dataSource$1.id.call(o,this.data());-1===$.inArray(t,a)&&n.push(this.index())}),s.rows(n))).remove()}};function _htmlId(t){if("keyless"===t)return $(document);var e=$('[data-editor-id="'+t+'"]');if(0===(e=0===e.length?"string"==typeof t?$(safeQueryId(t)):$(t):e).length)throw new Error("Could not find an element with `data-editor-id` or `id` of: "+t);return e}function _htmlEl(t,e){t=_htmlId(t);return $('[data-editor-field="'+e+'"]',t)}function _htmlEls(t,e){for(var i=$(),n=0,o=e.length;n
      ')[0],close:$('
      ')[0],content:null,wrapper:$('
      ')[0]};function findAttachRow(t,e){var i=new $.fn.dataTable.Api(t.s.table);return"head"===e||"create"===t.s.action?i.table(void 0).header():i.row(t.s.modifier).node()}function heightCalc$1(t){var e=$("div.DTE_Header",dom$1.wrapper).outerHeight(),i=$("div.DTE_Footer",dom$1.wrapper).outerHeight(),e=$(window).height()-2*envelope.conf.windowPadding-e-i;return $("div.DTE_Body_Content",dom$1.wrapper).css("maxHeight",e),$(t.dom.wrapper).outerHeight()}function hide$2(t,e){e=e||function(){},displayed$2&&($(dom$1.content).animate({top:-(dom$1.content.offsetHeight+50)},600,function(){$([dom$1.wrapper,dom$1.background]).fadeOut("normal",function(){$(this).detach(),e()})}),displayed$2=!1)}function init$1(){dom$1.content=$("div.DTED_Envelope_Container",dom$1.wrapper)[0],cssBackgroundOpacity=$(dom$1.background).css("opacity")}function show$2(e,t){var i,n,o,s;t=t||function(){},$("body").append(dom$1.background).append(dom$1.wrapper),dom$1.content.style.height="auto",displayed$2||((i=dom$1.wrapper.style).opacity="0",i.display="block",n=heightCalc$1(e),s=(o=findAttachRow(e,envelope.conf.attach)).offsetWidth,i.display="none",i.opacity="1",dom$1.wrapper.style.width=s+"px",dom$1.wrapper.style.marginLeft=-s/2+"px",dom$1.wrapper.style.top=$(o).offset().top+o.offsetHeight+"px",dom$1.content.style.top=-1*n-20+"px",dom$1.background.style.opacity="0",dom$1.background.style.display="block",$(dom$1.background).animate({opacity:cssBackgroundOpacity},"normal"),$(dom$1.wrapper).fadeIn(),$(dom$1.content).animate({top:0},600,t)),$(dom$1.close).attr("title",e.i18n.close).off("click.DTED_Envelope").on("click.DTED_Envelope",function(t){e.close()}),$(dom$1.background).off("click.DTED_Envelope").on("click.DTED_Envelope",function(t){e.background()}),$("div.DTED_Lightbox_Content_Wrapper",dom$1.wrapper).off("click.DTED_Envelope").on("click.DTED_Envelope",function(t){$(t.target).hasClass("DTED_Envelope_Content_Wrapper")&&e.background()}),$(window).off("resize.DTED_Envelope").on("resize.DTED_Envelope",function(){heightCalc$1(e)}),displayed$2=!0}var envelope={close:function(t,e){hide$2(t,e)},conf:{attach:"row",windowPadding:50},destroy:function(t){hide$2()},init:function(t){return init$1(),envelope},node:function(t){return dom$1.wrapper[0]},open:function(t,e,i){$(dom$1.content).children().detach(),dom$1.content.appendChild(e),dom$1.content.appendChild(dom$1.close),show$2(t,i)}};function isMobile(){return void 0!==window.orientation&&window.outerWidth<=576}var displayed$1=!1,ready=!1,scrollTop=0,dom={background:$('
      '),close:$('
      '),content:null,wrapper:$('
      ')};function heightCalc(){var t=$("div.DTE_Header",dom.wrapper).outerHeight()+$("div.DTE_Footer",dom.wrapper).outerHeight();isMobile()?$("div.DTE_Body_Content",dom.wrapper).css("maxHeight","calc(100vh - "+t+"px)"):(t=$(window).height()-2*self.conf.windowPadding-t,$("div.DTE_Body_Content",dom.wrapper).css("maxHeight",t))}function hide$1(t,e){e=e||function(){},$("body").scrollTop(scrollTop),t._animate(dom.wrapper,{opacity:0,top:self.conf.offsetAni},function(){$(this).detach(),e()}),t._animate(dom.background,{opacity:0},function(){$(this).detach()}),displayed$1=!1,$(window).off("resize.DTED_Lightbox")}function init(){ready||(dom.content=$("div.DTED_Lightbox_Content",dom.wrapper),dom.wrapper.css("opacity",0),dom.background.css("opacity",0),ready=!0)}function show$1(e,t){isMobile()&&$("body").addClass("DTED_Lightbox_Mobile"),$("body").append(dom.background).append(dom.wrapper),heightCalc(),displayed$1||(displayed$1=!0,dom.content.css("height","auto"),dom.wrapper.css({top:-self.conf.offsetAni}),e._animate(dom.wrapper,{opacity:1,top:0},t),e._animate(dom.background,{opacity:1}),$(window).on("resize.DTED_Lightbox",function(){heightCalc()}),scrollTop=$("body").scrollTop()),dom.close.attr("title",e.i18n.close).off("click.DTED_Lightbox").on("click.DTED_Lightbox",function(t){e.close()}),dom.background.off("click.DTED_Lightbox").on("click.DTED_Lightbox",function(t){t.stopImmediatePropagation(),e.background()}),$("div.DTED_Lightbox_Content_Wrapper",dom.wrapper).off("click.DTED_Lightbox").on("click.DTED_Lightbox",function(t){$(t.target).hasClass("DTED_Lightbox_Content_Wrapper")&&(t.stopImmediatePropagation(),e.background())})}var self={close:function(t,e){hide$1(t,e)},conf:{offsetAni:25,windowPadding:25},destroy:function(t){displayed$1&&hide$1(t)},init:function(t){return init(),self},node:function(t){return dom.wrapper[0]},open:function(t,e,i){var n=dom.content;n.children().detach(),n.append(e).append(dom.close),show$1(t,i)}},DataTable$5=$.fn.dataTable;function add(t,e,i){if(void 0===i&&(i=!0),Array.isArray(t)){void 0!==e&&t.reverse();for(var n=0,o=t;n
      '),n=$('
      '),t=(r&&(n.appendTo("body"),i.appendTo("body")),n.children().eq(0)),o=t.children(),s=o.children(),a=(t.append(u.dom.formError),o.prepend(u.dom.form),l.message&&t.prepend(u.dom.formInfo),l.title&&t.prepend(u.dom.header),l.buttons&&o.append(u.dom.buttons),$().add(n).add(i));u._closeReg(function(t){u._animate(a,{opacity:0},function(){this===n[0]&&(a.detach(),$(window).off("resize."+e+" scroll."+e),u._clearDynamicInfo(),u._event("closed",["bubble"]))})}),i.on("click",function(){u.blur()}),s.on("click",function(){u._close()}),u.bubblePosition(),u._postopen("bubble",!1);u._animate(a,{opacity:1},function(){this===n[0]&&(u._focus(u.s.includeFields,l.focus),u._event("opened",["bubble",u.s.action]))})})),this}function bubblePosition(){var t=$("div.DTE_Bubble"),e=$("div.DTE_Bubble_Liner"),i=this.s.bubbleNodes,n={bottom:0,left:0,right:0,top:0},i=($.each(i,function(t,e){var i=$(e).offset();e=$(e).get(0),n.top+=i.top,n.left+=i.left,n.right+=i.left+e.offsetWidth,n.bottom+=i.top+e.offsetHeight}),n.top/=i.length,n.left/=i.length,n.right/=i.length,n.bottom/=i.length,n.top),o=(n.left+n.right)/2,s=e.outerWidth(),a=e.outerHeight(),r=o-s/2,s=r+s,l=$(window).width(),d=$(window).scrollTop(),o=(t.css({left:o,top:this.s.bubbleBottom?n.bottom:i}),this.s.bubbleBottom&&t.addClass("below"),t.position());return e.length&&o.top+a>d+window.innerHeight?(t.css("top",i).removeClass("below"),this.s.bubbleBottom=!1):e.length&&o.top-a",{class:s.classes.form.button+(e.className?" "+e.className:"")}).html("function"==typeof i?i(s):i||"").attr("tabindex",void 0!==e.tabIndex?e.tabIndex:0).attr(o).on("keyup",function(t){13===t.which&&n&&n.call(s)}).on("keypress",function(t){13===t.which&&t.preventDefault()}).on("click",function(t){t.preventDefault(),n&&n.call(s,t)}).appendTo(s.dom.buttons)}),this}function clear(t){var i=this,e=this.s.fields;return"string"==typeof t?(i.field(t).destroy(),delete e[t],e=$.inArray(t,this.s.order),this.s.order.splice(e,1),-1!==(e=$.inArray(t,this.s.includeFields))&&this.s.includeFields.splice(e,1)):$.each(this._fieldNames(t),function(t,e){i.clear(e)}),this}function close(){return this._close(!1),this}function create(t,e,i,n){var o=this,s=this,a=this.s.fields,r=1;if(!this._tidy(function(){s.create(t,e,i,n)})){"number"==typeof t&&(r=t,t=e,e=i),this.s.editFields={};for(var l=0;lUploading file"),u.onload=function(t){var e,i=new FormData;if(i.append("action","upload"),i.append("uploadField",a.name),i.append("upload",r[c]),a.ajaxData&&a.ajaxData(i,r[c],c),a.ajax?e=a.ajax:$.isPlainObject(s.s.ajax)?e=s.s.ajax.upload||s.s.ajax:"string"==typeof s.s.ajax&&(e=s.s.ajax),!e)throw new Error("No Ajax option specified for upload plug-in");if("function"==typeof(e="string"==typeof e?{url:e}:e).data){var n={},o=e.data(n);void 0!==o&&"string"!=typeof o&&(n=o),$.each(n,function(t,e){i.append(t,e)})}else if($.isPlainObject(e.data))throw new Error("Upload feature cannot use `ajax.data` with an object. Please use it as a function instead.");s._event("preUpload",[a.name,r[c],i],function(t){var o;!1===t?c
      ')),m.find("div."+s.liner.replace(/ /g,".")).append(h.field.node()).append(this.dom.formError),n=h.field.node(),e.buttons&&m.find("div."+s.buttons.replace(/ /g,".")).append(this.dom.buttons)}var b=this._inputTrigger("submit",e,n),_=this._inputTrigger("cancel",e,n);this._closeReg(function(t,e){return o=!0,$(document).off("click"+c),t&&"edit"===e||l.forEach(function(t){t.node.contents().detach(),t.node.append(t.children)}),b(),_(),r._clearDynamicInfo(),i&&i(),"inline"}),setTimeout(function(){var s,a;o||(s=$.fn.addBack?"addBack":"andSelf",$(document).on("mousedown"+c,function(t){a=t.target}).on("keydown"+c,function(t){a=t.target}).on("click"+c,function(t){for(var e=!1,i=0,n=l;i")),this._event("submitUnsuccessful",[t]),l&&l.call(this,t)}else{var m={};if(!t.data||"create"!==o&&"edit"!==o)"remove"===o&&(this._dataSource("prep",o,f,n,t,m),this._event("preRemove",[t,this.ids()]),this._dataSource("remove",f,c,m),this._event(["remove","postRemove"],[t,this.ids()]),this._dataSource("commit",o,f,t.data,m));else{this._dataSource("prep",o,f,n,t,m);for(var v=0,b=t.data;v
      ');return e._input=a,e._enabled=!0,e.id&&a.find("input[type=file]").attr("id",Editor.safeId(e.id)),e.attr&&a.find("input[type=file]").attr(e.attr),_buttonText(e),window.FileReader&&!1!==e.dragDrop?(a.find("div.drop span").text(e.dragDropText||"Drag and drop a file here to upload"),(o=a.find("div.drop")).on("drop",function(t){return e._enabled&&(Editor.upload(i,e,t.originalEvent.dataTransfer.files,_buttonText,n),o.removeClass("over")),!1}).on("dragleave dragexit",function(t){return e._enabled&&o.removeClass("over"),!1}).on("dragover",function(t){return e._enabled&&o.addClass("over"),!1}),i.on("open",function(){$("body").on("dragover.DTE_Upload drop.DTE_Upload",function(t){return!1})}).on("close",function(){$("body").off("dragover.DTE_Upload drop.DTE_Upload")})):(a.addClass("noDrop"),a.append(a.find("div.rendered"))),a.find("div.clearValue button").on("click",function(t){t.preventDefault(),e._enabled&&upload.set.call(i,e,"")}),a.find("input[type=file]").on("input",function(){Editor.upload(i,e,this.files,_buttonText,function(t,e){e||n.call(i,t),a.find("input[type=file]")[0].value=""})}),a}function _triggerChange(t){setTimeout(function(){t.trigger("change",{editor:!0,editorSet:!0})},0)}var baseFieldType=$.extend(!0,{},fieldType,{canReturnSubmit:function(t,e){return!0},disable:function(t){t._input.prop("disabled",!0)},enable:function(t){t._input.prop("disabled",!1)},get:function(t){return t._input.val()},set:function(t,e){t._input.val(e),_triggerChange(t._input)}}),hidden={create:function(t){return t._input=$(""),t._val=t.value,null},get:function(t){return t._val},set:function(t,e){var i=t._val;t._val=e,t._input.val(e),i!==e&&_triggerChange(t._input)}},readonly=$.extend(!0,{},baseFieldType,{create:function(t){return t._input=$("").attr($.extend({id:Editor.safeId(t.id),readonly:"readonly",type:"text"},t.attr||{})),t._input[0]}}),text=$.extend(!0,{},baseFieldType,{create:function(t){return t._input=$("").attr($.extend({id:Editor.safeId(t.id),type:"text"},t.attr||{})),t._input[0]}}),password=$.extend(!0,{},baseFieldType,{create:function(t){return t._input=$("").attr($.extend({id:Editor.safeId(t.id),type:"password"},t.attr||{})),t._input[0]}}),textarea=$.extend(!0,{},baseFieldType,{canReturnSubmit:function(t,e){return!1},create:function(t){return t._input=$("").attr($.extend({id:Editor.safeId(t.id)},t.attr||{})),t._input[0]}}),select=$.extend(!0,{},baseFieldType,{_addOptions:function(t,e,i){var n,o=t._input[0].options,s=0;(i=void 0===i?!1:i)?s=o.length:void(o.length=0)!==t.placeholder&&(i=void 0!==t.placeholderValue?t.placeholderValue:"",s+=1,o[0]=new Option(t.placeholder,i),n=void 0===t.placeholderDisabled||t.placeholderDisabled,o[0].hidden=n,o[0].disabled=n,o[0]._editor_val=i),e&&Editor.pairs(e,t.optionsPair,function(t,e,i,n){e=new Option(e,t);e._editor_val=t,n&&$(e).attr(n),o[i+s]=e})},create:function(i){return i._input=$("").attr($.extend({id:Editor.safeId(i.id),multiple:!0===i.multiple},i.attr||{})).on("change.dte",function(t,e){e&&e.editor||(i._lastSet=select.get(i))}),select._addOptions(i,i.options||i.ipOpts),i._input[0]},destroy:function(t){t._input.off("change.dte")},get:function(t){var e=t._input.find("option:selected").map(function(){return this._editor_val}).toArray();return t.multiple?t.separator?e.join(t.separator):e:e.length?e[0]:null},set:function(t,e,i){i||(t._lastSet=e),t.multiple&&t.separator&&!Array.isArray(e)?e="string"==typeof e?e.split(t.separator):[]:Array.isArray(e)||(e=[e]);var n,o,s=e.length,a=!1,r=t._input.find("option");return t._input.find("option").each(function(){for(o=!1,n=0;n"),$("input:last",s).attr("value",t)[0]._editor_val=t,n&&$("input:last",s).attr(n)})},create:function(t){return t._input=$("
      "),checkbox._addOptions(t,t.options||t.ipOpts),t._input[0]},disable:function(t){t._input.find("input").prop("disabled",!0)},enable:function(t){t._input.find("input").prop("disabled",!1)},get:function(t){var e=[],i=t._input.find("input:checked");return i.length?i.each(function(){e.push(this._editor_val)}):void 0!==t.unselectedValue&&e.push(t.unselectedValue),void 0===t.separator||null===t.separator?e:e.join(t.separator)},set:function(t,e){var i,n,o=t._input.find("input"),s=(Array.isArray(e)||"string"!=typeof e?Array.isArray(e)||(e=[e]):e=e.split(t.separator||"|"),e.length);o.each(function(){for(n=!1,i=0;i"),$("input:last",s).attr("value",t)[0]._editor_val=t,n&&$("input:last",s).attr(n)})},create:function(t){return t._input=$("
      "),radio._addOptions(t,t.options||t.ipOpts),this.on("open",function(){t._input.find("input").each(function(){this._preChecked&&(this.checked=!0)})}),t._input[0]},disable:function(t){t._input.find("input").prop("disabled",!0)},enable:function(t){t._input.find("input").prop("disabled",!1)},get:function(t){var e=t._input.find("input:checked");return e.length?e[0]._editor_val:void 0!==t.unselectedValue?t.unselectedValue:void 0},set:function(t,e){t._input.find("input").each(function(){this._preChecked=!1,this._editor_val==e?(this.checked=!0,this._preChecked=!0):(this.checked=!1,this._preChecked=!1)}),_triggerChange(t._input.find("input:checked"))},update:function(t,e,i){var n=radio.get(t),e=(radio._addOptions(t,e,i),t._input.find("input"));radio.set(t,e.filter('[value="'+n+'"]').length?n:e.eq(0).attr("value"))}}),datetime=$.extend(!0,{},baseFieldType,{create:function(t){return t._input=$("").attr($.extend(!0,{id:Editor.safeId(t.id),type:"text"},t.attr)),DataTable$3.DateTime||Editor.error("DateTime library is required",15),t.momentLocale&&!t.opts.locale&&(t.opts.locale=t.momentLocale),t.momentStrict&&!t.opts.strict&&(t.opts.strict=t.momentStrict),t._picker=new DataTable$3.DateTime(t._input,$.extend({format:t.displayFormat||t.format,i18n:this.i18n.datetime},t.opts)),!(t._closeFn=function(){t._picker.hide()})===t.keyInput&&t._input.on("keydown",function(t){t.preventDefault()}),this.on("close",t._closeFn),t._input[0]},destroy:function(t){this.off("close",t._closeFn),t._input.off("keydown"),t._picker.destroy()},errorMessage:function(t,e){t._picker.errorMsg(e)},get:function(t){return t.wireFormat?t._picker.valFormat(t.wireFormat):t._input.val()},maxDate:function(t,e){t._picker.max(e)},minDate:function(t,e){t._picker.min(e)},owns:function(t,e){return t._picker.owns(e)},set:function(t,e){"string"==typeof e&&e&&0!==e.indexOf("--")&&t.wireFormat?t._picker.valFormat(t.wireFormat,e):t._picker.val(e),_triggerChange(t._input)}}),upload=$.extend(!0,{},baseFieldType,{canReturnSubmit:function(t,e){return!1},create:function(e){var i=this;return _commonUpload(i,e,function(t){upload.set.call(i,e,t[0]),i._event("postUpload",[e.name,t[0]])})},disable:function(t){t._input.find("input").prop("disabled",!0),t._enabled=!1},enable:function(t){t._input.find("input").prop("disabled",!1),t._enabled=!0},get:function(t){return t._val},set:function(t,e){t._val=e,t._input.val("");var i=t._input,n=(t.display&&(n=i.find("div.rendered"),t._val?n.html(t.display(t._val)):n.empty().append(""+(t.noFileText||"No file")+"")),i.find("div.clearValue button"));e&&t.clearText?(n.html(t.clearText),i.removeClass("noClear")):i.addClass("noClear"),t._input.find("input").triggerHandler("upload.editor",[t._val])}}),uploadMany=$.extend(!0,{},baseFieldType,{_showHide:function(t){t.limit&&(t._container.find("div.limitHide").css("display",t._val.length>=t.limit?"none":"block"),t._limitLeft=t.limit-t._val.length)},canReturnSubmit:function(t,e){return!1},create:function(e){var i=this,t=_commonUpload(i,e,function(t){e._val=e._val.concat(t),uploadMany.set.call(i,e,e._val),i._event("postUpload",[e.name,e._val])},!0);return t.addClass("multi").on("click","button.remove",function(t){t.stopPropagation(),e._enabled&&(t=$(this).data("idx"),e._val.splice(t,1),uploadMany.set.call(i,e,e._val))}),e._container=t},disable:function(t){t._input.find("input").prop("disabled",!0),t._enabled=!1},enable:function(t){t._input.find("input").prop("disabled",!1),t._enabled=!0},get:function(t){return t._val},set:function(i,t){if(t=t||[],!Array.isArray(t))throw new Error("Upload collections must have an array as a value");i._val=t,i._input.val("");var n,o=this,e=i._input;i.display&&(e=e.find("div.rendered").empty(),t.length?(n=$("
        ").appendTo(e),$.each(t,function(t,e){e=i.display(e,t);null!==e&&n.append("
      • "+e+'
      • ')})):e.append(""+(i.noFileText||"No files")+"")),uploadMany._showHide(i),i._input.find("input").triggerHandler("upload.editor",[i._val])}}),datatable=$.extend(!0,{},baseFieldType,{_addOptions:function(t,e,i){t=t.dt;(i=void 0===i?!1:i)||t.clear(),t.rows.add(e).draw()},_jumpToFirst:function(t,e){function i(){var t=o.row({order:"applied",selected:!0}).node();t&&a.height()-10<(t=$(t).position().top)&&a.scrollTop(t)}var n,o=t.dt,t=o.row({order:"applied",selected:!0}).index(),s=0,a=("number"==typeof t&&(n=o.page.info().length,t=o.rows({order:"applied"}).indexes().indexOf(t),s=0")),t=$("
        ").append(n),o=$('
        '),l=(a.footer&&$("
        ").html(t)})):a.footer).appendTo(n),n.addClass(datatable.tableClass).width("100%").on("init.dt",function(t,e){var i;e.nTable===n[0]&&(e=new DataTable$3.Api(e),i=$(e.table(void 0).container()),DataTable$3.select.init(e),o.append(i.find("div.dataTables_filter")).append(i.find("div.dt-buttons")).append(i.find("div.dataTables_info")))}).DataTable($.extend({buttons:[],columns:[{data:a.optionsPair.label,title:"Label"}],deferRender:!0,dom:"fiBtp",language:{paginate:{next:">",previous:"<"},search:"",searchPlaceholder:"Search"},lengthChange:!1,select:{style:a.multiple?"os":"single"}},a.config)));return this.on("open",function(){l.search()&&l.search("").draw(),l.columns.adjust()}),l.on("user-select",function(){_triggerChange($(a.dt.table().container()))}),a.editor&&(a.editor.table(l),a.editor.on("submitComplete",function(t,e,i,n){if("create"===n)for(var o=0,s=e.data;o
        '+o.title+''+o.info+'
        '+o.restore+'
        '+s.message+'
        '+s.fieldInfo+'
        '),t=this._typeFn("create",s),i=null;t&&t.side&&(i=t.side,t=t.input),null!==t?el("input-control",a).prepend(t):a.css("display","none"),this.dom={container:a,fieldError:el("msg-error",a),fieldInfo:el("msg-info",a),fieldMessage:el("msg-message",a),inputControl:el("input-control",a),label:el("label",a).append(i),labelInfo:el("msg-label",a),multi:el("multi-value",a),multiInfo:el("multi-info",a),multiReturn:el("msg-multi",a),processing:el("field-processing",a)},this.dom.multi.on("click",function(){n.s.opts.multiEditable&&!a.hasClass(e.disabled)&&"readonly"!==s.type&&(n.val(""),n.focus())}),this.dom.multiReturn.on("click",function(){n.multiRestore()}),$.each(this.s.type,function(e,t){"function"==typeof t&&void 0===n[e]&&(n[e]=function(){var t=Array.prototype.slice.call(arguments),t=(t.unshift(e),n._typeFn.apply(n,t));return void 0===t?n:t})})}return r.prototype.def=function(t){var e,i=this.s.opts;return void 0===t?"function"==typeof(e=void 0!==i.default?i.default:i.def)?e():e:(i.def=t,this)},r.prototype.disable=function(){return this.dom.container.addClass(this.s.classes.disabled),this._typeFn("disable"),this},r.prototype.displayed=function(){var t=this.dom.container;return!(!t.parents("body").length||"none"===t.css("display"))},r.prototype.enable=function(t){return!1===(t=void 0===t?!0:t)?this.disable():(this.dom.container.removeClass(this.s.classes.disabled),this._typeFn("enable"),this)},r.prototype.enabled=function(){return!1===this.dom.container.hasClass(this.s.classes.disabled)},r.prototype.error=function(t,e){var i=this.s.classes;return t?this.dom.container.addClass(i.error):this.dom.container.removeClass(i.error),this._typeFn("errorMessage",t),this._msg(this.dom.fieldError,t,e)},r.prototype.fieldInfo=function(t){return this._msg(this.dom.fieldInfo,t)},r.prototype.isMultiValue=function(){return this.s.multiValue&&1!==this.s.multiIds.length},r.prototype.inError=function(){return this.dom.container.hasClass(this.s.classes.error)},r.prototype.input=function(){return this.s.type.input?this._typeFn("input"):$("input, select, textarea",this.dom.container)},r.prototype.focus=function(){return this.s.type.focus?this._typeFn("focus"):$("input, select, textarea",this.dom.container).focus(),this},r.prototype.get=function(){if(!this.isMultiValue())return this._format(this._typeFn("get"),this.s.opts.getFormatter)},r.prototype.hide=function(t){var e=this.dom.container;return void 0===t&&(t=!0),this.s.host.display()&&t&&$.fn.slideUp?e.slideUp():e.css("display","none"),this},r.prototype.label=function(t){var e=this.dom.label,i=this.dom.labelInfo.detach();return void 0===t?e.html():(e.html(t),e.append(i),this)},r.prototype.labelInfo=function(t){return this._msg(this.dom.labelInfo,t)},r.prototype.message=function(t,e){return this._msg(this.dom.fieldMessage,t,e)},r.prototype.multiGet=function(t){var e=this.s.multiValues,i=this.s.multiIds,n=this.isMultiValue();if(void 0===t)for(var o=this.val(),s={},a=0,r=i;a").replace(/</g,"<").replace(/&/g,"&").replace(/"/g,'"').replace(/£/g,"£").replace(/�?39;/g,"'").replace(/�?10;/g,"\n")}this.s.multiValue=!1;var n=this.s.opts.entityDecode;if(void 0===n||!0===n)if(Array.isArray(t))for(var o=0,s=t.length;o
        '),s=$('
        ');if(this.dom={body:el("body",i)[0],bodyContent:el("body_content",i)[0],buttons:$('
        ')[0],footer:el("foot",i)[0],form:s[0],formContent:el("form_content",s)[0],formError:$('
        ')[0],formInfo:$('
        ')[0],header:$('
        ')[0],processing:el("processing",i)[0],wrapper:i[0]},$.each(t.events,function(t,i){n.on(t,function(){for(var t=[],e=0;e + * DataTables internationalisation options to provide a fully language + * customised table interface. + * + * @namespace + * + * @example + * // Set the 'create' button text. All other strings used are the + * // default values. + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "create": { + * "button": "New user" + * } + * } + * } ); + * + * @example + * // Set the submit text for all three actions + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "create": { + * "submit": "Create new user" + * }, + * "edit": { + * "submit": "Update user" + * }, + * "remove": { + * "submit": "Remove user" + * } + * } + * } ); + */ + i18n: { + /** + * Close button title text + * + * @type string + * @default Close + */ + close: 'Close', + /** + * Strings used when working with the Editor 'create' action (creating new + * records). + * + * @namespace + */ + create: { + /** + * Buttons button text + * + * @type string + * @default New + */ + button: 'New', + /** + * Submit button text + * + * @type string + * @default Create + */ + submit: 'Create', + /** + * Display container title (when showing the editor display) + * + * @type string + * @default Create new entry + */ + title: 'Create new entry' + }, + datetime: { + amPm: ['am', 'pm'], + hours: 'Hour', + minutes: 'Minute', + months: [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December' + ], + next: 'Next', + previous: 'Previous', + seconds: 'Second', + unknown: '-', + weekdays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + }, + /** + * Strings used when working with the Editor 'edit' action (editing existing + * records). + * + * @namespace + */ + edit: { + /** + * Buttons button text + * + * @type string + * @default Edit + */ + button: 'Edit', + /** + * Submit button text + * + * @type string + * @default Update + */ + submit: 'Update', + /** + * Display container title (when showing the editor display) + * + * @type string + * @default Edit entry + */ + title: 'Edit entry' + }, + /** + * Strings used for error conditions. + * + * @namespace + */ + error: { + /** + * Generic server error message + * + * @type string + * @default + * A system error has occurred (More information) + */ + system: 'A system error has occurred (More information).' + }, + /** + * Strings used for multi-value editing + * + * @namespace + */ + multi: { + /** + * Shown below the multi title text, although only the first + * instance of this text is shown in the form to reduce redundancy + */ + info: 'The selected items contain different values for this input. To edit and set all items for this input to the same value, click or tap here, otherwise they will retain their individual values.', + /** + * Disabled for multi-row editing + */ + noMulti: 'This input can be edited individually, but not part of a group.', + /** + * Shown below the field input when group editing a value to allow + * the user to return to the original multiple values + */ + restore: 'Undo changes', + /** + * Shown in place of the field value when a field has multiple values + */ + title: 'Multiple values' + }, + /** + * Strings used when working with the Editor 'delete' action (deleting + * existing records). + * + * @namespace + */ + remove: { + /** + * Buttons button text + * + * @type string + * @default Delete + */ + button: 'Delete', + /** + * Deletion confirmation message. + * + * As Editor has the ability to delete either a single or multiple rows + * at a time, this option can be given as either a string (which will be + * used regardless of how many records are selected) or as an object + * where the property "_" will be used (with %d substituted for the number + * of records to be deleted) as the delete message, unless there is a + * key with the number of records to be deleted. This allows Editor + * to consider the different pluralisation characteristics of different + * languages. + * + * @type object|string + * @default Are you sure you wish to delete %d rows? + * + * @example + * // String - no plural consideration + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "remove": { + * "confirm": "Are you sure you wish to delete %d record(s)?" + * } + * } + * } ); + * + * @example + * // Basic 1 (singular) or _ (plural) + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "remove": { + * "confirm": { + * "_": "Confirm deletion of %d records.", + * "1": "Confirm deletion of record." + * } + * } + * } ); + * + * @example + * // Singular, dual and plural + * var editor = new $.fn.Editor( { + * "ajax": "data/source", + * "table": "#example", + * "i18n": { + * "remove": { + * "confirm": { + * "_": "Confirm deletion of %d records.", + * "1": "Confirm deletion of record.", + * "2": "Confirm deletion of both record." + * } + * } + * } ); + * + */ + confirm: { + 1: 'Are you sure you wish to delete 1 row?', + _: 'Are you sure you wish to delete %d rows?' + }, + /** + * Submit button text + * + * @type string + * @default Delete + */ + submit: 'Delete', + /** + * Display container title (when showing the editor display) + * + * @type string + * @default Delete + */ + title: 'Delete', + } + }, + /** + * JSON property from which to read / write the row's ID property (i.e. its + * unique column index that identifies the row to the database). By default + * Editor will use the `DT_RowId` property from the data source object + * (DataTable's magic property to set the DOM id for the row). + * + * If you want to read a parameter from the data source object instead of + * using `DT_RowId`, set this option to the property name to use. + * + * Like other data source options the `srcId` option can be given in dotted + * object notation to read nested objects. + * + * @type null|string + * @default DT_RowId + * + * @example + * // Using a data source such as: + * // { "id":12, "browser":"Chrome", ... } + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": "php/index.php", + * "table": "#example", + * "idSrc": "id" + * } ); + * } ); + */ + idSrc: 'DT_RowId', + /** + * jQuery selector that can be used to identify the table you wish to apply + * this editor instance to. + * + * In previous versions of Editor (1.2 and earlier), this parameter was + * called `table`. The name has been altered in 1.3+ to simplify the + * initialisation. This is a backwards compatible change - if you pass in + * a `table` option it will be used. + * + * @type string + * @default Empty string + * + * @example + * $(document).ready(function() { + * var editor = new $.fn.Editor( { + * "ajax": "php/index.php", + * "table": "#example" + * } ); + * } ); + */ + table: null, +}; + +var settings = { + action: null, + actionName: 'action', + ajax: null, + bubbleNodes: [], + bubbleBottom: false, + closeCb: null, + closeIcb: null, + dataSource: null, + displayController: null, + displayed: false, + editCount: 0, + editData: {}, + editFields: {}, + editOpts: {}, + fields: {}, + formOptions: { + bubble: $.extend({}, formOptions), + inline: $.extend({}, formOptions), + main: $.extend({}, formOptions), + }, + globalError: '', + id: -1, + idSrc: null, + includeFields: [], + mode: null, + modifier: null, + opts: null, + order: [], + processing: false, + setFocus: null, + table: null, + template: null, + unique: 0 +}; + +var DataTable$6 = $.fn.dataTable; +var DtInternalApi = DataTable$6.ext.oApi; +function objectKeys(o) { + var out = []; + for (var key in o) { + if (o.hasOwnProperty(key)) { + out.push(key); + } + } + return out; +} +function el(tag, ctx) { + if (ctx === undefined) { + ctx = document; + } + return $('*[data-dte-e="' + tag + '"]', ctx); +} +function safeDomId(id, prefix) { + if (prefix === void 0) { prefix = '#'; } + return typeof id === 'string' ? + prefix + id.replace(/\./g, '-') : + prefix + id; +} +function safeQueryId(id, prefix) { + if (prefix === void 0) { prefix = '#'; } + return typeof id === 'string' ? + prefix + id.replace(/(:|\.|\[|\]|,)/g, '\\$1') : + prefix + id; +} +function dataGet(src) { + return DtInternalApi._fnGetObjectDataFn(src); +} +function dataSet(src) { + return DtInternalApi._fnSetObjectDataFn(src); +} +var extend = DtInternalApi._fnExtend; +function pluck(a, prop) { + var out = []; + $.each(a, function (idx, elIn) { + out.push(elIn[prop]); + }); + return out; +} +/** + * Compare parameters for difference - diving into arrays and objects if + * needed, allowing the object reference to be different, but the contents to + * match. + * + * Please note that LOOSE type checking is used + */ +function deepCompare(o1, o2) { + if (typeof o1 !== 'object' || typeof o2 !== 'object') { + return o1 == o2; + } + var o1Props = objectKeys(o1); + var o2Props = objectKeys(o2); + if (o1Props.length !== o2Props.length) { + return false; + } + for (var i = 0, ien = o1Props.length; i < ien; i++) { + var propName = o1Props[i]; + if (typeof o1[propName] === 'object') { + if (!deepCompare(o1[propName], o2[propName])) { + return false; + } + } + else if (o1[propName] != o2[propName]) { + return false; + } + } + return true; +} + +/* - - - - - - - - - - + * DataTables editor interface + */ +var _dtIsSsp = function (dt, editor) { + // If the draw type is `none`, then we still need to use the DT API to + // update the display with the new data + return dt.settings()[0].oFeatures.bServerSide && + editor.s.editOpts.drawType !== 'none'; +}; +var _dtApi = function (table) { + return table instanceof $.fn.dataTable.Api + ? table + : $(table).DataTable(); +}; +var _dtHighlight = function (node) { + // Highlight a row using CSS transitions. The timeouts need to match the + // transition duration from the CSS + node = $(node); + setTimeout(function () { + node.addClass('highlight'); + setTimeout(function () { + node + .addClass('noHighlight') + .removeClass('highlight'); + setTimeout(function () { + node.removeClass('noHighlight'); + }, 550); + }, 500); + }, 20); +}; +var _dtRowSelector = function (out, dt, identifier, fields, idFn) { + dt.rows(identifier).indexes().each(function (idx) { + var row = dt.row(idx); + var data = row.data(); + var idSrc = idFn(data); + if (idSrc === undefined) { + Editor.error('Unable to find row identifier', 14); + } + out[idSrc] = { + data: data, + fields: fields, + idSrc: idSrc, + node: row.node(), + type: 'row' + }; + }); +}; +var _dtFieldsFromIdx = function (dt, fields, idx, ignoreUnknown) { + var col = dt.settings()[0].aoColumns[idx]; + var dataSrc = col.editField !== undefined ? + col.editField : + col.mData; + var resolvedFields = {}; + var run = function (field, dataSrcIn) { + if (field.name() === dataSrcIn) { + resolvedFields[field.name()] = field; + } + }; + $.each(fields, function (name, fieldInst) { + if (Array.isArray(dataSrc)) { + for (var _i = 0, dataSrc_1 = dataSrc; _i < dataSrc_1.length; _i++) { + var data = dataSrc_1[_i]; + run(fieldInst, data); + } + } + else { + run(fieldInst, dataSrc); + } + }); + if ($.isEmptyObject(resolvedFields) && !ignoreUnknown) { + Editor.error('Unable to automatically determine field from source. Please specify the field name.', 11); + } + return resolvedFields; +}; +var _dtCellSelector = function (out, dt, identifier, allFields, idFn, forceFields) { + if (forceFields === void 0) { forceFields = null; } + var cells = dt.cells(identifier); + cells.indexes().each(function (idx) { + var cell = dt.cell(idx); + var row = dt.row(idx.row); + var data = row.data(); + var idSrc = idFn(data); + var fields = forceFields || _dtFieldsFromIdx(dt, allFields, idx.column, cells.count() > 1); + var isNode = (typeof identifier === 'object' && identifier.nodeName) || identifier instanceof $; + var prevDisplayFields; + var prevAttach; + var prevAttachFields; + // Only add if a field was found to edit + if (Object.keys(fields).length) { + // The row selector will create a new `out` object for the identifier, and the + // cell selector might be called multiple times for a row, so we need to save + // our specific items + if (out[idSrc]) { + prevAttach = out[idSrc].attach; + prevAttachFields = out[idSrc].attachFields; + prevDisplayFields = out[idSrc].displayFields; + } + // Use the row selector to get the row information + _dtRowSelector(out, dt, idx.row, allFields, idFn); + out[idSrc].attachFields = prevAttachFields || []; + out[idSrc].attachFields.push(Object.keys(fields)); + out[idSrc].attach = prevAttach || []; + out[idSrc].attach.push(isNode ? + $(identifier).get(0) : + cell.fixedNode ? // If its under a fixed column, get the floating node + cell.fixedNode() : + cell.node()); + out[idSrc].displayFields = prevDisplayFields || {}; + $.extend(out[idSrc].displayFields, fields); + } + }); +}; +var _dtColumnSelector = function (out, dt, identifier, fields, idFn) { + dt.cells(null, identifier).indexes().each(function (idx) { + _dtCellSelector(out, dt, idx, fields, idFn); + }); +}; +var dataSource$1 = { + commit: function (action, identifier, data, store) { + // Updates complete - redraw + var that = this; + var dt = _dtApi(this.s.table); + var ssp = dt.settings()[0].oFeatures.bServerSide; + var ids = store.rowIds; + // On edit, if there are any rows left in the `store.rowIds`, then they + // were not returned by the server and should be removed (they might not + // meet filtering requirements any more for example) + if (!_dtIsSsp(dt, this) && action === 'edit' && store.rowIds.length) { + var row = void 0; + var compare = function (id) { + return function (rowIdx, rowData, rowNode) { + return id == dataSource$1.id.call(that, rowData); + }; + }; + for (var i = 0, ien = ids.length; i < ien; i++) { + // Find the row to edit - attempt to do an id look up first for speed + try { + row = dt.row(safeQueryId(ids[i])); + } + catch (e) { + row = dt; + } + // If not found, then we need to do it the slow way + if (!row.any()) { + row = dt.row(compare(ids[i])); + } + if (row.any() && !ssp) { + row.remove(); + } + } + } + var drawType = this.s.editOpts.drawType; + if (drawType !== 'none') { + var dtAny = dt; + // SSP highlighting has to go after the draw, but this can't be + // merged with client-side processing highlight as we want that + // to work even when there isn't a draw happening. + if (ssp && ids && ids.length) { + dt.one('draw', function () { + for (var i = 0, ien = ids.length; i < ien; i++) { + var row = dt.row(safeQueryId(ids[i])); + if (row.any()) { + _dtHighlight(row.node()); + } + } + }); + } + dt.draw(drawType); + // Responsive needs to take account of new data column widths + if (dtAny.responsive) { + dtAny.responsive.recalc(); + } + // Rebuild searchpanes + if (typeof dtAny.searchPanes === 'function' && !ssp) { + dtAny.searchPanes.rebuildPane(undefined, true); + } + // Rebuild searchbuilder + if (dtAny.searchBuilder !== undefined && typeof dtAny.searchBuilder.rebuild === 'function' && !ssp) { + dtAny.searchBuilder.rebuild(dtAny.searchBuilder.getDetails()); + } + } + }, + create: function (fields, data) { + var dt = _dtApi(this.s.table); + if (!_dtIsSsp(dt, this)) { + var row = dt.row.add(data); + _dtHighlight(row.node()); + } + }, + edit: function (identifier, fields, data, store) { + var that = this; + var dt = _dtApi(this.s.table); + // No point in doing anything when server-side processing - the commit + // will redraw the table + if (!_dtIsSsp(dt, this) || this.s.editOpts.drawType === 'none') { + // The identifier can select one or more rows, but the data will + // refer to just a single row. We need to determine which row from + // the set is the one to operator on. + var rowId_1 = dataSource$1.id.call(this, data); + var row = void 0; + // Find the row to edit - attempt to do an id look up first for speed + try { + row = dt.row(safeQueryId(rowId_1)); + } + catch (e) { + row = dt; + } + // If not found, then we need to do it the slow way + if (!row.any()) { + row = dt.row(function (rowIdx, rowData, rowNode) { + return rowId_1 == dataSource$1.id.call(that, rowData); + }); + } + if (row.any()) { + // Merge data to allow for a sub-set to be returned + var toSave = extend({}, row.data(), true); + toSave = extend(toSave, data, true); + row.data(toSave); + // Remove the item from the list of indexes now that is has been + // updated + var idx = $.inArray(rowId_1, store.rowIds); + store.rowIds.splice(idx, 1); + } + else { + // If not found, then its a new row (change in pkey possibly) + row = dt.row.add(data); + } + _dtHighlight(row.node()); + } + }, + fakeRow: function (insertPoint) { + var dt = _dtApi(this.s.table); + var tr = $('
        ').appendTo(tr); + var fields = _dtFieldsFromIdx(dt, this.s.fields, visIdx, true); + var settings = dt.settings()[0]; + var className = settings.aoColumns[visIdx].sClass; + if (className) { + td.addClass(className); + } + if (Object.keys(fields).length) { + attachFields.push(Object.keys(fields)); + attach.push(td[0]); + $.extend(displayFields, fields); + } + } + var append = function () { + // Remove the data empty message + if (dt.page.info().recordsDisplay === 0) { + $(tbody).empty(); + } + var action = insertPoint === 'end' + ? 'appendTo' + : 'prependTo'; + tr[action](tbody); + }; + this.__dtFakeRow = tr; + // Insert into the table + append(); + dt.on('draw.dte-createInline', function () { + append(); + }); + return { + 0: { + attach: attach, + attachFields: attachFields, + displayFields: displayFields, + fields: this.s.fields, + type: 'row' + } + }; + }, + fakeRowEnd: function () { + var dt = _dtApi(this.s.table); + dt.off('draw.dte-createInline'); + this.__dtFakeRow.remove(); + this.__dtFakeRow = null; + // Restore data empty row + if (dt.page.info().recordsDisplay === 0) { + dt.draw(false); + } + }, + // get idSrc, fields to edit, data and node for each item + fields: function (identifier) { + var idFn = dataGet(this.s.idSrc); + var dt = _dtApi(this.s.table); + var fields = this.s.fields; + var out = {}; + if ($.isPlainObject(identifier) && + (identifier.rows !== undefined || identifier.columns !== undefined || identifier.cells !== undefined)) { + // Multi-item type selector + if (identifier.rows !== undefined) { + _dtRowSelector(out, dt, identifier.rows, fields, idFn); + } + if (identifier.columns !== undefined) { + _dtColumnSelector(out, dt, identifier.columns, fields, idFn); + } + if (identifier.cells !== undefined) { + _dtCellSelector(out, dt, identifier.cells, fields, idFn); + } + } + else { + // Just a rows selector + _dtRowSelector(out, dt, identifier, fields, idFn); + } + return out; + }, + id: function (data) { + var idFn = dataGet(this.s.idSrc); + return idFn(data); + }, + individual: function (identifier, fieldNames) { + var idFn = dataGet(this.s.idSrc); + var dt = _dtApi(this.s.table); + var fields = this.s.fields; + var out = {}; + var forceFields; + if (fieldNames) { + if (!Array.isArray(fieldNames)) { + fieldNames = [fieldNames]; + } + forceFields = {}; + $.each(fieldNames, function (i, name) { + forceFields[name] = fields[name]; + }); + } + _dtCellSelector(out, dt, identifier, fields, idFn, forceFields); + return out; + }, + prep: function (action, identifier, submit, json, store) { + var _this = this; + // Get the id of the rows created / edited + if (action === 'create') { + store.rowIds = $.map(json.data, function (row) { return dataSource$1.id.call(_this, row); }); + } + if (action === 'edit') { + var cancelled_1 = json.cancelled || []; + store.rowIds = $.map(submit.data, function (val, key) { + return !$.isEmptyObject(submit.data[key]) && // was submitted + $.inArray(key, cancelled_1) === -1 ? // was not cancelled on the server-side + key : + undefined; + }); + } + else if (action === 'remove') { + store.cancelled = json.cancelled || []; + } + }, + refresh: function () { + // Reload a table's data - used when nested data is changed + var dt = _dtApi(this.s.table); + dt.ajax.reload(null, false); + }, + remove: function (identifier, fields, store) { + // No confirmation from the server + var that = this; + var dt = _dtApi(this.s.table); + var cancelled = store.cancelled; + if (cancelled.length === 0) { + // No rows were cancelled on the server-side, remove them all + dt.rows(identifier).remove(); + } + else { + // One or more rows were cancelled, so we need to identify them + // and not remove those rows + var indexes_1 = []; + dt.rows(identifier).every(function () { + var id = dataSource$1.id.call(that, this.data()); + if ($.inArray(id, cancelled) === -1) { + // Don't use `remove` here - it messes up the indexes + indexes_1.push(this.index()); + } + }); + dt.rows(indexes_1).remove(); + } + } +}; + +/* - - - - - - - - + * HTML editor interface + */ +function _htmlId(identifier) { + if (identifier === 'keyless') { + return $(document); + } + var specific = $('[data-editor-id="' + identifier + '"]'); + if (specific.length === 0) { + specific = typeof identifier === 'string' ? + $(safeQueryId(identifier)) : + $(identifier); + } + if (specific.length === 0) { + throw new Error('Could not find an element with `data-editor-id` or `id` of: ' + identifier); + } + return specific; +} +function _htmlEl(identifier, name) { + var context = _htmlId(identifier); + return $('[data-editor-field="' + name + '"]', context); +} +function _htmlEls(identifier, names) { + var out = $(); + for (var i = 0, ien = names.length; i < ien; i++) { + out = out.add(_htmlEl(identifier, names[i])); + } + return out; +} +function _htmlGet(identifier, dataSrc) { + var el = _htmlEl(identifier, dataSrc); + return el.filter('[data-editor-value]').length ? + el.attr('data-editor-value') : + el.html(); +} +function _htmlSet(identifier, fields, data) { + $.each(fields, function (name, field) { + var val = field.valFromData(data); + if (val !== undefined) { + var el = _htmlEl(identifier, field.dataSrc()); + if (el.filter('[data-editor-value]').length) { + el.attr('data-editor-value', val); + } + else { + el.each(function () { + // This is very frustrating, but in IE if you just write directly + // to innerHTML, and elements that are overwritten are GC'ed, + // even if there is a reference to them elsewhere + while (this.childNodes.length) { + this.removeChild(this.firstChild); + } + }) + .html(val); + } + } + }); +} +var dataSource = { + create: function (fields, data) { + // If there is an element with the id that has been created, then use it + // to assign the values + if (data) { + var id = dataSource.id.call(this, data); + try { + if (_htmlId(id).length) { + _htmlSet(id, fields, data); + } + } + catch (e) { + // noop - use `postCreate` to add items to the DOM + } + } + }, + edit: function (identifier, fields, data) { + // Get the ids from the returned data or `keyless` if not found + var id = dataSource.id.call(this, data) || 'keyless'; + _htmlSet(id, fields, data); + }, + // get idSrc, fields to edit, data and node for each item + fields: function (identifier) { + var out = {}; + // Allow multi-point editing + if (Array.isArray(identifier)) { + for (var i = 0, ien = identifier.length; i < ien; i++) { + var res = dataSource.fields.call(this, identifier[i]); + out[identifier[i]] = res[identifier[i]]; + } + return out; + } + // else + var data = {}; + var fields = this.s.fields; + if (!identifier) { + identifier = 'keyless'; + } + $.each(fields, function (name, field) { + var val = _htmlGet(identifier, field.dataSrc()); + // If no HTML element is present, jQuery returns null. We want undefined + field.valToData(data, val === null ? undefined : val); + }); + out[identifier] = { + data: data, + fields: fields, + idSrc: identifier, + node: document, + type: 'row' + }; + return out; + }, + id: function (data) { + var idFn = dataGet(this.s.idSrc); + return idFn(data); + }, + individual: function (identifier, fieldNames) { + var attachEl; + // Auto detection of the field name and id + if (identifier instanceof $ || identifier.nodeName) { + attachEl = identifier; + if (!fieldNames) { + fieldNames = [$(identifier).attr('data-editor-field')]; + } + var back = $.fn.addBack ? 'addBack' : 'andSelf'; + identifier = $(identifier).parents('[data-editor-id]')[back]().data('editor-id'); + } + // no id given and none found + if (!identifier) { + identifier = 'keyless'; + } + // no field name - cannot continue + if (fieldNames && !Array.isArray(fieldNames)) { + fieldNames = [fieldNames]; + } + if (!fieldNames || fieldNames.length === 0) { + throw new Error('Cannot automatically determine field name from data source'); + } + var out = dataSource.fields.call(this, identifier); + var fields = this.s.fields; + var forceFields = {}; + $.each(fieldNames, function (i, name) { + forceFields[name] = fields[name]; + }); + $.each(out, function (id, set) { + set.type = 'cell'; + set.attachFields = [fieldNames]; + set.attach = attachEl ? + $(attachEl) : + _htmlEls(identifier, fieldNames).toArray(); + set.fields = fields; + set.displayFields = forceFields; + }); + return out; + }, + initField: function (cfg) { + // This is before the field has been initialised so can't use it API + var label = $('[data-editor-label="' + (cfg.data || cfg.name) + '"]'); + if (!cfg.label && label.length) { + cfg.label = label.html(); + } + }, + remove: function (identifier, fields) { + // If there is an element with an ID property matching the identifier, + // remove it + if (identifier !== 'keyless') { + _htmlId(identifier).remove(); + } + } +}; + +/** + * Class names that are used by Editor for its various display components. + * A copy of this object is taken when an Editor instance is initialised, thus + * allowing different classes to be used in different instances if required. + * Class name changes can be useful for easy integration with CSS frameworks, + * for example Twitter Bootstrap. + * + * @namespace + */ +var classNames = { + /** + * Action classes - these are added to the Editor base element ("wrapper") + * and allows styling based on the type of form view that is being employed. + * + * @namespace + */ + actions: { + /** + * Editor is in 'create' state + */ + create: 'DTE_Action_Create', + /** + * Editor is in 'edit' state + */ + edit: 'DTE_Action_Edit', + /** + * Editor is in 'remove' state + */ + remove: 'DTE_Action_Remove' + }, + /** + * Display body classes + * + * @namespace + */ + body: { + /** + * Liner for the body content + */ + content: 'DTE_Body_Content', + /** + * Container for the body elements + */ + wrapper: 'DTE_Body' + }, + /** + * Bubble editing classes - these are used to display the bubble editor + * + * @namespace + */ + bubble: { + /** + * Fixed background + */ + bg: 'DTE_Bubble_Background', + /** + * Close button + */ + close: 'icon close', + /** + * Bubble content liner + */ + liner: 'DTE_Bubble_Liner', + /** + * Pointer shown which node is being edited + */ + pointer: 'DTE_Bubble_Triangle', + /** + * Bubble table display wrapper, so the buttons and form can be shown + * as table cells (via css) + */ + table: 'DTE_Bubble_Table', + /** + * Bubble container element + */ + wrapper: 'DTE DTE_Bubble' + }, + /** + * Field classes + * + * @namespace + */ + field: { + /** + * Field is disabled + */ + 'disabled': 'disabled', + /** + * Field error state (added to the field.wrapper element when in error state + */ + 'error': 'DTE_Field_StateError', + /** + * Field input container + */ + 'input': 'DTE_Field_Input', + /** + * Input elements wrapper + */ + 'inputControl': 'DTE_Field_InputControl', + /** + * Field label + */ + 'label': 'DTE_Label', + /** + * Error information text + */ + 'msg-error': 'DTE_Field_Error', + /** + * General information text + */ + 'msg-info': 'DTE_Field_Info', + /** + * Label information text + */ + 'msg-label': 'DTE_Label_Info', + /** + * Live messaging (API) information text + */ + 'msg-message': 'DTE_Field_Message', + /** + * Multi-value information descriptive text + */ + 'multiInfo': 'multi-info', + /** + * Multi-value not editable (field.multiEditable) + */ + 'multiNoEdit': 'multi-noEdit', + /** + * Multi-value information display + */ + 'multiRestore': 'multi-restore', + /** + * Multi-value information display wrapper + */ + 'multiValue': 'multi-value', + /** + * Class prefix for the field name - field name is added to the end allowing + * styling based on field name. + */ + 'namePrefix': 'DTE_Field_Name_', + /** + * Field's processing element + */ + 'processing': 'DTE_Processing_Indicator', + /** + * Class prefix for the field type - field type is added to the end allowing + * styling based on field type. + */ + 'typePrefix': 'DTE_Field_Type_', + /** + * Container for each field + */ + 'wrapper': 'DTE_Field' + }, + /** + * Display footer classes + * + * @namespace + */ + footer: { + /** + * Liner for the footer content + */ + content: 'DTE_Footer_Content', + /** + * Container for the footer elements + */ + wrapper: 'DTE_Footer' + }, + /** + * Form classes + * + * @namespace + */ + form: { + /** + * Button + */ + button: 'btn', + /** + * Button inside the form + */ + buttonInternal: 'btn', + /** + * Buttons container + */ + buttons: 'DTE_Form_Buttons', + /** + * Liner for the form content + */ + content: 'DTE_Form_Content', + /** + * Global error imformation + */ + error: 'DTE_Form_Error', + /** + * Global form information + */ + info: 'DTE_Form_Info', + /** + * Applied to the
        tag + */ + tag: '', + /** + * Container for the form elements + */ + wrapper: 'DTE_Form' + }, + /** + * Display header classes + * + * @namespace + */ + header: { + /** + * Liner for the header content + */ + content: 'DTE_Header_Content', + /** + * Title tag + */ + title: { + tag: null, + class: '' + }, + /** + * Container for the header elements + */ + wrapper: 'DTE_Header' + }, + /** + * Inline editing classes - these are used to display the inline editor + * + * @namespace + */ + inline: { + buttons: 'DTE_Inline_Buttons', + liner: 'DTE_Inline_Field', + wrapper: 'DTE DTE_Inline', + }, + /** + * Processing classes + * + * @namespace + */ + processing: { + /** + * Added to the base element ("wrapper") when the form is "processing" + */ + active: 'processing', + /** + * Processing indicator element + */ + indicator: 'DTE_Processing_Indicator' + }, + /** + * Applied to the base DIV element that contains all other Editor elements + */ + wrapper: 'DTE' +}; + +var displayed$2 = false; +var cssBackgroundOpacity = 1; +var dom$1 = { + background: $('
        ')[0], + close: $('
        ')[0], + content: null, + wrapper: $('
        ' + + '
        ' + + '
        ' + + '
        ')[0] +}; +function findAttachRow(editor, attach) { + var dt = new $.fn.dataTable.Api(editor.s.table); + // Figure out where we want to put the form display + if (attach === 'head') { + return dt.table(undefined).header(); // typing error in DT type file + } + else if (editor.s.action === 'create') { + return dt.table(undefined).header(); + } + else { + return dt.row(editor.s.modifier).node(); + } +} +function heightCalc$1(dte) { + // Set the max-height for the form content + var header = $('div.DTE_Header', dom$1.wrapper).outerHeight(); + var footer = $('div.DTE_Footer', dom$1.wrapper).outerHeight(); + var maxHeight = $(window).height() - (envelope.conf.windowPadding * 2) - + header - footer; + $('div.DTE_Body_Content', dom$1.wrapper).css('maxHeight', maxHeight); + return $(dte.dom.wrapper).outerHeight(); +} +function hide$2(dte, callback) { + if (!callback) { + callback = function () { }; + } + if (displayed$2) { + $(dom$1.content).animate({ + top: -(dom$1.content.offsetHeight + 50) + }, 600, function () { + $([dom$1.wrapper, dom$1.background]).fadeOut('normal', function () { + $(this).detach(); + callback(); + }); + }); + displayed$2 = false; + } +} +function init$1() { + dom$1.content = $('div.DTED_Envelope_Container', dom$1.wrapper)[0]; + cssBackgroundOpacity = $(dom$1.background).css('opacity'); +} +function show$2(dte, callback) { + if (!callback) { + callback = function () { }; + } + $('body') + .append(dom$1.background) + .append(dom$1.wrapper); + // Adjust size for the content + dom$1.content.style.height = 'auto'; + if (!displayed$2) { + var style = dom$1.wrapper.style; + style.opacity = '0'; + style.display = 'block'; + var height = heightCalc$1(dte); + var targetRow = findAttachRow(dte, envelope.conf.attach); + var width = targetRow.offsetWidth; + style.display = 'none'; + style.opacity = '1'; + // Prep the display + dom$1.wrapper.style.width = width + 'px'; + dom$1.wrapper.style.marginLeft = -(width / 2) + 'px'; + dom$1.wrapper.style.top = ($(targetRow).offset().top + targetRow.offsetHeight) + 'px'; + dom$1.content.style.top = ((-1 * height) - 20) + 'px'; + // Start animating in the background + dom$1.background.style.opacity = '0'; + dom$1.background.style.display = 'block'; + $(dom$1.background).animate({ + opacity: cssBackgroundOpacity + }, 'normal'); + // Animate in the display + $(dom$1.wrapper).fadeIn(); + $(dom$1.content).animate({ top: 0 }, 600, callback); + } + // Event handlers + $(dom$1.close) + .attr('title', dte.i18n.close) + .off('click.DTED_Envelope') + .on('click.DTED_Envelope', function (e) { + dte.close(); + }); + $(dom$1.background) + .off('click.DTED_Envelope') + .on('click.DTED_Envelope', function (e) { + dte.background(); + }); + $('div.DTED_Lightbox_Content_Wrapper', dom$1.wrapper) + .off('click.DTED_Envelope') + .on('click.DTED_Envelope', function (e) { + if ($(e.target).hasClass('DTED_Envelope_Content_Wrapper')) { + dte.background(); + } + }); + $(window) + .off('resize.DTED_Envelope') + .on('resize.DTED_Envelope', function () { + heightCalc$1(dte); + }); + displayed$2 = true; +} +var envelope = { + close: function (dte, callback) { + hide$2(dte, callback); + }, + conf: { + attach: 'row', + windowPadding: 50 + }, + destroy: function (dte) { + hide$2(); + }, + init: function (dte) { + init$1(); + return envelope; + }, + node: function (dte) { + return dom$1.wrapper[0]; + }, + open: function (dte, append, callback) { + $(dom$1.content).children().detach(); + dom$1.content.appendChild(append); + dom$1.content.appendChild(dom$1.close); + show$2(dte, callback); + } +}; + +function isMobile() { + return typeof window.orientation !== 'undefined' && window.outerWidth <= 576 + ? true + : false; +} +var displayed$1 = false; +var ready = false; +var scrollTop = 0; +var dom = { + background: $('
        '), + close: $('
        '), + content: null, + wrapper: $('
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ') +}; +function heightCalc() { + var headerFooter = $('div.DTE_Header', dom.wrapper).outerHeight() + + $('div.DTE_Footer', dom.wrapper).outerHeight(); + if (isMobile()) { + $('div.DTE_Body_Content', dom.wrapper).css('maxHeight', 'calc(100vh - ' + headerFooter + 'px)'); + } + else { + // Set the max-height for the form content + var maxHeight = $(window).height() - (self.conf.windowPadding * 2) - headerFooter; + $('div.DTE_Body_Content', dom.wrapper).css('maxHeight', maxHeight); + } +} +function hide$1(dte, callback) { + if (!callback) { + callback = function () { }; + } + // Restore scroll state + $('body').scrollTop(scrollTop); + dte._animate(dom.wrapper, { + opacity: 0, + top: self.conf.offsetAni + }, function () { + $(this).detach(); + callback(); + }); + dte._animate(dom.background, { + opacity: 0 + }, function () { + $(this).detach(); + }); + displayed$1 = false; + $(window).off('resize.DTED_Lightbox'); +} +function init() { + if (ready) { + return; + } + dom.content = $('div.DTED_Lightbox_Content', dom.wrapper); + dom.wrapper.css('opacity', 0); + dom.background.css('opacity', 0); + ready = true; +} +function show$1(dte, callback) { + // Mobiles have very poor position fixed abilities, so we need to know + // when using mobile A media query isn't good enough + if (isMobile()) { + $('body').addClass('DTED_Lightbox_Mobile'); + } + $('body') + .append(dom.background) + .append(dom.wrapper); + heightCalc(); + if (!displayed$1) { + displayed$1 = true; + dom.content.css('height', 'auto'); + dom.wrapper.css({ + top: -self.conf.offsetAni + }); + dte._animate(dom.wrapper, { + opacity: 1, + top: 0 + }, callback); + dte._animate(dom.background, { + opacity: 1 + }); + $(window).on('resize.DTED_Lightbox', function () { + heightCalc(); + }); + scrollTop = $('body').scrollTop(); + } + // Event handlers - assign on show, premoving previous bindings + dom.close + .attr('title', dte.i18n.close) + .off('click.DTED_Lightbox') + .on('click.DTED_Lightbox', function (e) { + dte.close(); + }); + dom.background + .off('click.DTED_Lightbox') + .on('click.DTED_Lightbox', function (e) { + e.stopImmediatePropagation(); + dte.background(); + }); + $('div.DTED_Lightbox_Content_Wrapper', dom.wrapper) + .off('click.DTED_Lightbox') + .on('click.DTED_Lightbox', function (e) { + if ($(e.target).hasClass('DTED_Lightbox_Content_Wrapper')) { + e.stopImmediatePropagation(); + dte.background(); + } + }); +} +var self = { + close: function (dte, callback) { + hide$1(dte, callback); + }, + conf: { + offsetAni: 25, + windowPadding: 25 + }, + destroy: function (dte) { + if (displayed$1) { + hide$1(dte); + } + }, + init: function (dte) { + init(); + return self; + }, + node: function (dte) { + return dom.wrapper[0]; + }, + open: function (dte, append, callback) { + var content = dom.content; + content.children().detach(); + content + .append(append) + .append(dom.close); + show$1(dte, callback); + }, +}; + +var DataTable$5 = $.fn.dataTable; +/** + * Add a new field to the from. This is the method that is called automatically when + * fields are given in the initialisation objects as `Editor.defaults.fields`. + * + * @param this Editor instance + * @param cfg The object that describes the field (the full + * object is described by `Editor.model.field`. Note that multiple + * fields can be given by passing in an array of field definitions. + * @param after Existing field to insert the new field after. This + * can be `undefined` (insert at end), `null` (insert at start) or `string` + * the field name to insert after. + * @param reorder INTERNAL for array adding performance only + * @returns Editor instance + */ +function add(cfg, after, reorder) { + if (reorder === void 0) { reorder = true; } + // Allow multiple fields to be added at the same time + if (Array.isArray(cfg)) { + // Do it in reverse to allow fields to appear in the same order given, otherwise, + // the would appear in reverse if given an `after` + if (after !== undefined) { + cfg.reverse(); + } + for (var _i = 0, cfg_1 = cfg; _i < cfg_1.length; _i++) { + var cfgDp = cfg_1[_i]; + this.add(cfgDp, after, false); + } + this._displayReorder(this.order()); + return this; + } + var name = cfg.name; + if (name === undefined) { + throw new Error('Error adding field. The field requires a `name` option'); + } + if (this.s.fields[name]) { + throw new Error('Error adding field \'' + name + '\'. A field already exists with this name'); + } + // Allow the data source to add / modify the field properties + // Dev: would this be better as an event `preAddField`? And have the + // data sources init only once, but can listen for such events? More + // complexity, but probably more flexible... + this._dataSource('initField', cfg); + var editorField = new Editor.Field(cfg, this.classes.field, this); + // If in an editing mode, we need to set the field up for the data + if (this.s.mode) { + var editFields = this.s.editFields; + editorField.multiReset(); + $.each(editFields, function (idSrc, editIn) { + var value; + if (editIn.data) { + value = editorField.valFromData(editIn.data); + } + editorField.multiSet(idSrc, value !== undefined ? + value : + editorField.def()); + }); + } + this.s.fields[name] = editorField; + if (after === undefined) { + this.s.order.push(name); + } + else if (after === null) { + this.s.order.unshift(name); + } + else { + var idx = $.inArray(after, this.s.order); + this.s.order.splice(idx + 1, 0, name); + } + if (reorder !== false) { + this._displayReorder(this.order()); + } + return this; +} +function ajax(newAjax) { + if (newAjax) { + this.s.ajax = newAjax; + return this; + } + return this.s.ajax; +} +/** + * Perform background activation tasks. + * + * This is NOT publicly documented on the Editor web-site, but rather can be + * used by display controller plug-ins to perform the required task on + * background activation. + * + * @param this Editor instance + * @returns Editor instance + */ +function background() { + var onBackground = this.s.editOpts.onBackground; + if (typeof onBackground === 'function') { + onBackground(this); + } + else if (onBackground === 'blur') { + this.blur(); + } + else if (onBackground === 'close') { + this.close(); + } + else if (onBackground === 'submit') { + this.submit(); + } + return this; +} +/** + * Blur the currently displayed editor. + * + * A blur is different from a `close()` in that it might cause either a close or + * the form to be submitted. A typical example of a blur would be clicking on + * the background of the bubble or main editing forms - i.e. it might be a + * close, or it might submit depending upon the configuration, while a click on + * the close box is a very definite close. + * + * @returns Editor instance + */ +function blur() { + this._blur(); + return this; +} +function bubble(cells, fieldNames, showIn, opts) { + var _this = this; + if (showIn === void 0) { showIn = true; } + var that = this; + // Some other field in inline edit mode? + if (this._tidy(function () { + that.bubble(cells, fieldNames, opts); + })) { + return this; + } + // Argument shifting + if ($.isPlainObject(fieldNames)) { + opts = fieldNames; + fieldNames = undefined; + showIn = true; + } + else if (typeof fieldNames === 'boolean') { + showIn = fieldNames; + fieldNames = undefined; + opts = undefined; + } + if ($.isPlainObject(showIn)) { + opts = showIn; + showIn = true; + } + if (showIn === undefined) { + showIn = true; + } + opts = $.extend({}, this.s.formOptions.bubble, opts); + var editFields = this._dataSource('individual', cells, fieldNames); + this._edit(cells, editFields, 'bubble', opts, function () { + var namespace = _this._formOptions(opts); + var ret = _this._preopen('bubble'); + if (!ret) { + return _this; + } + // Keep the bubble in position on resize + $(window).on('resize.' + namespace + ' scroll.' + namespace, function () { + _this.bubblePosition(); + }); + // Store the nodes this are being used so the bubble can be positioned + var nodes = []; + _this.s.bubbleNodes = nodes.concat.apply(nodes, pluck(editFields, 'attach')); + // Create container display + var classes = _this.classes.bubble; + var backgroundNode = $('
        '); + var container = $('
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        '); + if (showIn) { + container.appendTo('body'); + backgroundNode.appendTo('body'); + } + var liner = container.children().eq(0); + var tableNode = liner.children(); + var closeNode = tableNode.children(); + liner.append(_this.dom.formError); + tableNode.prepend(_this.dom.form); + if (opts.message) { + liner.prepend(_this.dom.formInfo); + } + if (opts.title) { + liner.prepend(_this.dom.header); + } + if (opts.buttons) { + tableNode.append(_this.dom.buttons); + } + // Need to use a small anon function here as the animate callback is the scope + // of the element being animated and TS won't allow access to the private methods + var finish = function () { + _this._clearDynamicInfo(); + _this._event('closed', ['bubble']); + }; + var pair = $().add(container).add(backgroundNode); + _this._closeReg(function (submitComplete) { + _this._animate(pair, { opacity: 0 }, function () { + if (this === container[0]) { + pair.detach(); + $(window).off('resize.' + namespace + ' scroll.' + namespace); + finish(); + } + }); + }); + // Close event handlers + backgroundNode.on('click', function () { + _this.blur(); + }); + closeNode.on('click', function () { + _this._close(); + }); + _this.bubblePosition(); + _this._postopen('bubble', false); + var opened = function () { + _this._focus(_this.s.includeFields, opts.focus); + _this._event('opened', ['bubble', _this.s.action]); + }; + _this._animate(pair, { opacity: 1 }, function () { + // Otherwise the callback will happen on both elements + if (this === container[0]) { + opened(); + } + }); + }); + return this; +} +/** + * Reposition the editing bubble (`bubble()`) when it is visible. This can be + * used to update the bubble position if other elements on the page change + * position. Editor will automatically call this method on window resize. + * + * @returns Editor instance + */ +function bubblePosition() { + var wrapper = $('div.DTE_Bubble'); + var liner = $('div.DTE_Bubble_Liner'); + var nodes = this.s.bubbleNodes; + // Average the node positions to insert the container + var position = { bottom: 0, left: 0, right: 0, top: 0 }; + $.each(nodes, function (i, nodeIn) { + var pos = $(nodeIn).offset(); + nodeIn = $(nodeIn).get(0); + position.top += pos.top; + position.left += pos.left; + position.right += pos.left + nodeIn.offsetWidth; + position.bottom += pos.top + nodeIn.offsetHeight; + }); + position.top /= nodes.length; + position.left /= nodes.length; + position.right /= nodes.length; + position.bottom /= nodes.length; + var top = position.top; + var left = (position.left + position.right) / 2; + var width = liner.outerWidth(); + var height = liner.outerHeight(); + var visLeft = left - (width / 2); + var visRight = visLeft + width; + var docWidth = $(window).width(); + var viewportTop = $(window).scrollTop(); + var padding = 15; + // Show above or below depending on bubbleBottom + wrapper.css({ + left: left, + top: this.s.bubbleBottom ? position.bottom : top + }); + if (this.s.bubbleBottom) { + wrapper.addClass('below'); + } + var curPosition = wrapper.position(); + // Correct for overflow below the fold + if (liner.length && curPosition.top + height > viewportTop + window.innerHeight) { + wrapper + .css('top', top) + .removeClass('below'); + this.s.bubbleBottom = false; + } + else if (liner.length && curPosition.top - height < viewportTop) { + // Correct for overflow from the top of the document by positioning below + // the field if needed + wrapper + .css('top', position.bottom) + .addClass('below'); + this.s.bubbleBottom = true; + } + // Attempt to correct for overflow to the right of the document + if (visRight + padding > docWidth) { + var diff = visRight - docWidth; + // If left overflowing, that takes priority + liner.css('left', visLeft < padding ? + -(visLeft - padding) : + -(diff + padding)); + } + else { + // Correct overflow to the left + liner.css('left', visLeft < padding ? -(visLeft - padding) : 0); + } + return this; +} +/** + * Setup the buttons that will be shown in the footer of the form - calling this + * method will replace any buttons which are currently shown in the form. + * + * @param this Editor instance + * @param buttonsIn A single button definition to add to the form or + * an array of objects with the button definitions to add more than one button. + * The options for the button definitions are fully defined by the + * @returns Editor instance + */ +function buttons(buttonsIn) { + var _this = this; + if (buttonsIn === '_basic') { + // Special string to create a basic button - undocumented + buttonsIn = [{ + action: function () { + this.submit(); + }, + text: this.i18n[this.s.action].submit + }]; + } + else if (!Array.isArray(buttonsIn)) { + // Allow a single button to be passed in as an object with an array + buttonsIn = [buttonsIn]; + } + $(this.dom.buttons).empty(); + $.each(buttonsIn, function (i, btn) { + if (typeof btn === 'string') { + btn = { + action: function () { + this.submit(); + }, + text: btn + }; + } + var text = btn.text || btn.label; // legacy support + var action = btn.action || btn.fn; // legacy support + var attr = btn.attr || {}; + $('', { + class: _this.classes.form.button + (btn.className ? ' ' + btn.className : '') + }) + .html(typeof text === 'function' ? + text(_this) : + text || '') + .attr('tabindex', btn.tabIndex !== undefined ? btn.tabIndex : 0) + .attr(attr) + .on('keyup', function (e) { + if (e.which === 13 && action) { + action.call(_this); + } + }) + .on('keypress', function (e) { + // Stop the browser activating the click event - if we don't + // have this and the Ajax return is fast, the keyup in + // `_formOptions()` might trigger another submit + if (e.which === 13) { + e.preventDefault(); + } + }) + .on('click', function (e) { + e.preventDefault(); + if (action) { + action.call(_this, e); + } + }) + .appendTo(_this.dom.buttons); + }); + return this; +} +/** + * Remove fields from the form. + * + * @param this Editor instance + * @param fieldName Field to remove + * @returns Editor instance + */ +function clear(fieldName) { + var that = this; + var sFields = this.s.fields; + if (typeof fieldName === 'string') { + // Remove an individual form element + that.field(fieldName).destroy(); + delete sFields[fieldName]; + var orderIdx = $.inArray(fieldName, this.s.order); + this.s.order.splice(orderIdx, 1); + var includeIdx = $.inArray(fieldName, this.s.includeFields); + if (includeIdx !== -1) { + this.s.includeFields.splice(includeIdx, 1); + } + } + else { + $.each(this._fieldNames(fieldName), function (i, name) { + that.clear(name); + }); + } + return this; +} +/** + * Close the form display. + * + * @param this Editor instance + * @returns Editor instance + */ +function close() { + this._close(false); + return this; +} +function create(arg1, arg2, arg3, arg4) { + var _this = this; + var that = this; + var sFields = this.s.fields; + var count = 1; + // Some other field in inline edit mode? + if (this._tidy(function () { + that.create(arg1, arg2, arg3, arg4); + })) { + return this; + } + // Multi-row creation support (only supported by the 1.3+ style of calling + // this method, so a max of three arguments + if (typeof arg1 === 'number') { + count = arg1; + arg1 = arg2; + arg2 = arg3; + } + // Set up the edit fields for submission + this.s.editFields = {}; + for (var i = 0; i < count; i++) { + this.s.editFields[i] = { + fields: this.s.fields + }; + } + var argOpts = this._crudArgs(arg1, arg2, arg3, arg4); + this.s.mode = 'main'; + this.s.action = 'create'; + this.s.modifier = null; + this.dom.form.style.display = 'block'; + this._actionClass(); + // Allow all fields to be displayed for the create form + this._displayReorder(this.fields()); + // Set the default for the fields + $.each(sFields, function (name, fieldIn) { + var def = fieldIn.def(); + fieldIn.multiReset(); + // Set a value marker for each multi, so the field + // knows what the id's are (ints in this case) + for (var i = 0; i < count; i++) { + fieldIn.multiSet(i, def); + } + fieldIn.set(def); + }); + this._event('initCreate', null, function () { + _this._assembleMain(); + _this._formOptions(argOpts.opts); + argOpts.maybeOpen(); + }); + return this; +} +/** + * Remove dependent links from a field + * + * @param this Editor instance + * @param parent The name of the field to remove the existing dependencies + * @returns Editor instance + */ +function undependent(parent) { + if (Array.isArray(parent)) { + for (var i = 0, ien = parent.length; i < ien; i++) { + this.undependent(parent[i]); + } + return this; + } + $(this.field(parent).node()).off('.edep'); + return this; +} +/** + * Create a dependent link between two or more fields. This method is used to + * listen for a change in a field's value which will trigger updating of the + * form. This update can consist of updating an options list, changing values + * or making fields hidden / visible. + * + * @param this Editor instance + * @param parent Field(s) to attach a dependency to + * @param url Action to perform on data change + * @param optsIn Configuration options + * @returns Editor instance + */ +function dependent(parent, url, optsIn) { + var _this = this; + if (Array.isArray(parent)) { + for (var i = 0, ien = parent.length; i < ien; i++) { + this.dependent(parent[i], url, optsIn); + } + return this; + } + var that = this; + var parentField = this.field(parent); + var ajaxOpts = { + dataType: 'json', + type: 'POST' + }; + var opts = $.extend({}, { + data: null, + event: 'change', + postUpdate: null, + preUpdate: null + }, optsIn); + var update = function (json) { + if (opts.preUpdate) { + opts.preUpdate(json); + } + // Field specific + $.each({ + errors: 'error', + labels: 'label', + messages: 'message', + options: 'update', + values: 'val' + }, function (jsonProp, fieldFn) { + if (json[jsonProp]) { + $.each(json[jsonProp], function (fieldIn, valIn) { + that.field(fieldIn)[fieldFn](valIn); + }); + } + }); + // Form level + $.each(['hide', 'show', 'enable', 'disable'], function (i, key) { + if (json[key]) { + that[key](json[key], json.animate); + } + }); + if (opts.postUpdate) { + opts.postUpdate(json); + } + parentField.processing(false); + }; + // Use a delegate handler to account for field elements which are added and + // removed after `depenedent` has been called + $(parentField.node()).on(opts.event + '.edep', function (e) { + // Make sure that it was one of the field's elements that triggered the ev + if ($(parentField.node()).find(e.target).length === 0) { + return; + } + parentField.processing(true); + var data = {}; + data.rows = _this.s.editFields ? + pluck(_this.s.editFields, 'data') : + null; + data.row = data.rows ? + data.rows[0] : + null; + data.values = _this.val(); + if (opts.data) { + var ret = opts.data(data); + if (ret) { + data = ret; + } + } + if (typeof url === 'function') { + var o = url.call(_this, parentField.val(), data, update, e); + if (o) { + if (typeof o === 'object' && typeof o.then === 'function') { + o.then(function (resolved) { + if (resolved) { + update(resolved); + } + }); + } + else { + update(o); + } + } + } + else { + if ($.isPlainObject(url)) { + $.extend(ajaxOpts, url); + } + else { + ajaxOpts.url = url; + } + $.ajax($.extend(ajaxOpts, { + data: data, + success: update + })); + } + }); + return this; +} +/** + * Destroy the Editor instance, cleaning up fields, display and event handlers + */ +function destroy() { + if (this.s.displayed) { + this.close(); + } + this.clear(); + // Stick the template back into the document so it can be reused + if (this.s.template) { + $('body').append(this.s.template); + } + var controller = this.s.displayController; + if (controller.destroy) { + controller.destroy(this); + } + $(document).off('.dte' + this.s.unique); + this.dom = null; + this.s = null; +} +/** + * Disable one or more field inputs, disallowing subsequent user interaction with the + * fields until they are re-enabled. + * + * @param this Editor instance + * @param name Field(s) to disable. Disables all if not given. + * @returns Editor instance + */ +function disable(name) { + var that = this; + $.each(this._fieldNames(name), function (i, n) { + that.field(n).disable(); + }); + return this; +} +function display(showIn) { + if (showIn === undefined) { + return this.s.displayed; + } + return this[showIn ? 'open' : 'close'](); +} +/** + * Get a list of the fields that are currently shown in the Editor form. + * + * @param this Editor instance + * @returns Array of field names + */ +function displayed() { + return $.map(this.s.fields, function (fieldIn, name) { + return fieldIn.displayed() ? name : null; + }); +} +/** + * Get display controller node + * + * @returns Display controller host element + */ +function displayNode() { + return this.s.displayController.node(this); +} +function edit(items, arg1, arg2, arg3, arg4) { + var _this = this; + var that = this; + // Some other field in inline edit mode? + if (this._tidy(function () { + that.edit(items, arg1, arg2, arg3, arg4); + })) { + return this; + } + var argOpts = this._crudArgs(arg1, arg2, arg3, arg4); + this._edit(items, this._dataSource('fields', items), 'main', argOpts.opts, function () { + _this._assembleMain(); + _this._formOptions(argOpts.opts); + argOpts.maybeOpen(); + }); + return this; +} +/** + * Enable one or more field inputs, restoring user interaction with the fields. + * + * @param this Editor instance + * @param name Field(s) to enable. If not given, all fields in the form are enabled + * @returns Editor instance + */ +function enable(name) { + var that = this; + $.each(this._fieldNames(name), function (i, n) { + that.field(n).enable(); + }); + return this; +} +function error$1(name, msg) { + var wrapper = $(this.dom.wrapper); + if (msg === undefined) { + // Global error + this._message(this.dom.formError, name, true, function () { + wrapper.toggleClass('inFormError', name !== undefined && name !== ''); + }); + // Store the error message so `inError` can check if there is an + // error or not without considering animation + this.s.globalError = name; + } + else { + // Field error + this.field(name).error(msg); + } + return this; +} +/** + * Get a field object, configured for a named field, which can then be + * manipulated through its API. + * + * @param this Editor instance + * @param name Field to get + * @returns Field instance + */ +function field(name) { + var sFields = this.s.fields; + if (!sFields[name]) { + throw new Error('Unknown field name - ' + name); + } + return sFields[name]; +} +/** + * Get a list of the fields that are used by the Editor instance. + * + * @param this Editor instance + * @returns Editor instance + */ +function fields() { + return $.map(this.s.fields, function (fieldIn, name) { + return name; + }); +} +/** + * Get data object for a file from a table and id + * + * @param name Table name + * @param id Primary key identifier + * @returns File information + */ +function file(name, id) { + var tableFromFile = this.files(name); // can throw. `this` will be Editor or + var fileFromTable = tableFromFile[id]; // DataTables.Api context. Both work. + if (!fileFromTable) { + throw new Error('Unknown file id ' + id + ' in table ' + name); + } + return tableFromFile[id]; +} +function files(name) { + if (!name) { + return Editor.files; + } + var editorTable = Editor.files[name]; + if (!editorTable) { + throw new Error('Unknown file table name: ' + name); + } + return editorTable; +} +function get(name) { + var that = this; + if (!name) { + name = this.fields(); + } + if (Array.isArray(name)) { + var out_1 = {}; + $.each(name, function (i, n) { + out_1[n] = that.field(n).get(); + }); + return out_1; + } + return this.field(name).get(); +} +/** + * Hide one or more fields from the form display. + * + * @param this Editor instance + * @param names Fields to hide. Will hide all if not given + * @param animate Animate (default true) + * @returns Editor instance + */ +function hide(names, animate) { + var that = this; + $.each(this._fieldNames(names), function (i, n) { + that.field(n).hide(animate); + }); + return this; +} +/** + * Get the ids of the rows being edited + * + * @param includeHash Include a prefixed `#`, useful if to be used as a selector + */ +function ids(includeHash) { + if (includeHash === void 0) { includeHash = false; } + return $.map(this.s.editFields, function (editIn, idSrc) { + return includeHash === true ? + '#' + idSrc : + idSrc; + }); +} +/** + * Determine if there is an error state in the form, either the form's global + * error message, or one or more fields. + * + * @param this Editor instance + * @param inNames Fields to check. All checked if not given + * @returns true if in error, false otherwise + */ +function inError(inNames) { + $(this.dom.formError); + // Is there a global error? + if (this.s.globalError) { + return true; + } + // Field specific + var names = this._fieldNames(inNames); + for (var i = 0, ien = names.length; i < ien; i++) { + if (this.field(names[i]).inError()) { + return true; + } + } + return false; +} +function inline(cell, fieldName, opts) { + var _this = this; + var that = this; + // Argument shifting + if ($.isPlainObject(fieldName)) { + opts = fieldName; + fieldName = undefined; + } + opts = $.extend({}, this.s.formOptions.inline, opts); + var editFields = this._dataSource('individual', cell, fieldName); + var keys = Object.keys(editFields); + // Only a single row + if (keys.length > 1) { + throw new Error('Cannot edit more than one row inline at a time'); + } + var editRow = editFields[keys[0]]; + // Remap so easier to use + var hosts = []; + for (var _i = 0, _a = editRow.attach; _i < _a.length; _i++) { + var row = _a[_i]; + hosts.push(row); + } + // Already in edit mode for this cell? + if ($('div.DTE_Field', hosts).length) { + return this; + } + // Some other field in inline edit mode? + if (this._tidy(function () { + that.inline(cell, fieldName, opts); + })) { + return this; + } + // Start a full row edit, but don't display - we will be showing the field + this._edit(cell, editFields, 'inline', opts, function () { + _this._inline(editFields, opts); + }); + return this; +} +/** + * Inline creation of data. + * + * @param this Editor instance + * @param insertPoint Where to insert the create row + * @param opts Form options + * @returns Editor instance + */ +function inlineCreate(insertPoint, opts) { + var _this = this; + // Argument juggling - allow no insert point, just options + if ($.isPlainObject(insertPoint)) { + opts = insertPoint; + insertPoint = null; + } + if (this._tidy(function () { + _this.inlineCreate(insertPoint, opts); + })) { + return this; + } + // Set the default for the fields + $.each(this.s.fields, function (name, fieldIn) { + fieldIn.multiReset(); + fieldIn.multiSet(0, fieldIn.def()); + fieldIn.set(fieldIn.def()); + }); + this.s.mode = 'main'; + this.s.action = 'create'; + this.s.modifier = null; + this.s.editFields = this._dataSource('fakeRow', insertPoint); + opts = $.extend({}, this.s.formOptions.inline, opts); + this._actionClass(); + this._inline(this.s.editFields, opts, function () { + // When the form is closed (cancelled or submitted) we need to remove the + // fake row + _this._dataSource('fakeRowEnd'); + }); + this._event('initCreate', null); + return this; +} +function message(name, msg) { + if (msg === undefined) { + // Global message + this._message(this.dom.formInfo, name); + } + else { + // Field message + this.field(name).message(msg); + } + return this; +} +function mode(modeIn) { + if (!modeIn) { + return this.s.action; + } + if (!this.s.action) { + throw new Error('Not currently in an editing mode'); + } + else if (this.s.action === 'create' && modeIn !== 'create') { + throw new Error('Changing from create mode is not supported'); + } + this.s.action = modeIn; + return this; +} +/** + * Get the modifier that was used to trigger the edit or delete action. + * + * @returns The identifier that was used for the editing / remove method + * called. + */ +function modifier() { + return this.s.modifier; +} +/** + * Get the values for one or more fields (multi-row editing aware). + * + * @param this Editor instance + * @param fieldNames Fields to get values for, or all fields if not given + * @returns Editor instance + */ +function multiGet(fieldNames) { + var that = this; + if (fieldNames === undefined) { + fieldNames = this.fields(); + } + if (Array.isArray(fieldNames)) { + var out_2 = {}; + $.each(fieldNames, function (i, name) { + out_2[name] = that.field(name).multiGet(); + }); + return out_2; + } + // String + return this.field(fieldNames).multiGet(); +} +function multiSet(fieldNames, valIn) { + var that = this; + if ($.isPlainObject(fieldNames) && valIn === undefined) { + $.each(fieldNames, function (name, value) { + that.field(name).multiSet(value); + }); + } + else { + this.field(fieldNames).multiSet(valIn); + } + return this; +} +function node(name) { + var that = this; + if (!name) { + name = this.order(); + } + return Array.isArray(name) ? + $.map(name, function (n) { + return that.field(n).node(); + }) : + this.field(name).node(); +} +/** + * Remove a bound event listener to the editor instance. + * + * @param this Editor instance + * @param name Event name to remove + * @param fn Handler to remove, or all if not specified + * @returns Editor instance + */ +function off(name, fn) { + $(this).off(this._eventName(name), fn); + return this; +} +/** + * Listen for an event which is fired off by Editor when it performs certain + * actions. + * + * @param this Editor instance + * @param name Event to listen for + * @param fn Event handler to apply + * @returns Editor instance + */ +function on(name, fn) { + $(this).on(this._eventName(name), fn); + return this; +} +/** + * Listen for a single event event which is fired off by Editor when it performs + * certain actions + * + * @param this Editor instance + * @param name Event to listen for + * @param fn Event handler to apply + * @returns Editor instance + */ +function one(name, fn) { + $(this).one(this._eventName(name), fn); + return this; +} +/** + * Display the main form editor to the end user in the web-browser. + * + * @param this Editor instance + * @returns Editor instance + */ +function open() { + var _this = this; + // Insert the display elements in order + this._displayReorder(); + // Define how to do a close + this._closeReg(function () { + _this._nestedClose(function () { + _this._clearDynamicInfo(); + _this._event('closed', ['main']); + }); + }); + // Run the standard open with common events + var ret = this._preopen('main'); + if (!ret) { + return this; + } + this._nestedOpen(function () { + _this._focus($.map(_this.s.order, function (name) { return _this.s.fields[name]; }), _this.s.editOpts.focus); + _this._event('opened', ['main', _this.s.action]); + }, this.s.editOpts.nest); + this._postopen('main', false); + return this; +} +function order(setIn /* , ... */) { + if (!setIn) { + return this.s.order; + } + // Allow new layout to be passed in as arguments + if (arguments.length && !Array.isArray(setIn)) { + setIn = Array.prototype.slice.call(arguments); + } + // Sanity check - array must exactly match the fields we have available + if (this.s.order.slice().sort().join('-') !== setIn.slice().sort().join('-')) { + throw new Error('All fields, and no additional fields, must be provided for ordering.'); + } + // Copy the new array into the order (so the reference is maintained) + $.extend(this.s.order, setIn); + this._displayReorder(); + return this; +} +function remove(items, arg1, arg2, arg3, arg4) { + var _this = this; + var that = this; + // Some other field in inline edit mode? + if (this._tidy(function () { + that.remove(items, arg1, arg2, arg3, arg4); + })) { + return this; + } + if (!items && !this.s.table) { + items = 'keyless'; + } + // Allow a single row node to be passed in to remove, Can't use Array.isArray + // as we also allow array like objects to be passed in (API, jQuery) + if (items.length === undefined) { + items = [items]; + } + var argOpts = this._crudArgs(arg1, arg2, arg3, arg4); + var editFields = this._dataSource('fields', items); + this.s.action = 'remove'; + this.s.modifier = items; + this.s.editFields = editFields; + this.dom.form.style.display = 'none'; + this._actionClass(); + this._event('initRemove', [ + pluck(editFields, 'node'), + pluck(editFields, 'data'), + items + ], function () { + _this._event('initMultiRemove', // undocumented and to be removed in v2 + [editFields, items], function () { + _this._assembleMain(); + _this._formOptions(argOpts.opts); + argOpts.maybeOpen(); + var opts = _this.s.editOpts; + if (opts.focus !== null) { + $('button', _this.dom.buttons).eq(opts.focus).focus(); + } + }); + }); + return this; +} +function set(setIn, valIn) { + var that = this; + if (!$.isPlainObject(setIn)) { + var o = {}; + o[setIn] = valIn; + setIn = o; + } + $.each(setIn, function (n, v) { + that.field(n).set(v); + }); + return this; +} +/** + * Show fields in the display that were previously hidden. + * + * @param this Editor instance + * @param names Field(s) to show. All if not given. + * @param animate Animate the visual change or not + * @returns Editor instance + */ +function show(names, animate) { + var that = this; + $.each(this._fieldNames(names), function (i, n) { + that.field(n).show(animate); + }); + return this; +} +/** + * Submit a form for processing. + * + * @param this Editor instance + * @param successCallback Function executed when submit is completed + * @param errorCallback Function executed on error + * @param formatdata Data formatting function + * @param hideIn Disable default close action by passing in false + * @returns Editor instance + */ +function submit(successCallback, errorCallback, formatdata, hideIn) { + var _this = this; + var fields = this.s.fields; + var errorFields = []; + var errorReady = 0; + var sent = false; + if (this.s.processing || !this.s.action) { + return this; + } + this._processing(true); + // If there are fields in error, we want to wait for the error notification + // to be cleared before the form is submitted - errorFields tracks the + // fields which are in the error state, while errorReady tracks those which + // are ready to submit + var send = function () { + if (errorFields.length !== errorReady || sent) { + return; + } + _this._event('initSubmit', [_this.s.action], function (result) { + if (result === false) { + _this._processing(false); + return; + } + sent = true; + _this._submit(successCallback, errorCallback, formatdata, hideIn); + }); + }; + // Blur the current focus if it is a form input element - this allows any + // actions on change event (e.g. dpendent) to happen + var active = document.activeElement; + if ($(active).closest('div.DTE_Field').length !== 0) { + active.blur(); + } + // Remove the global error (don't know if the form is still in an error + // state!) + this.error(); + // Count how many fields are in error + $.each(fields, function (name, fieldIn) { + if (fieldIn.inError()) { + errorFields.push(name); + } + }); + // Remove the error display + $.each(errorFields, function (i, name) { + fields[name].error('', function () { + errorReady++; + send(); + }); + }); + send(); + return this; +} +function table(setIn) { + if (setIn === undefined) { + return this.s.table; + } + this.s.table = setIn; + return this; +} +function template(setIn) { + if (setIn === undefined) { + return this.s.template; + } + this.s.template = setIn === null ? + null : + $(setIn); + return this; +} +function title(titleIn) { + var header = $(this.dom.header).children('div.' + this.classes.header.content); + var titleClass = this.classes.header.title; + if (titleIn === undefined) { + return header.data('title'); + } + if (typeof titleIn === 'function') { + titleIn = titleIn(this, new DataTable$5.Api(this.s.table)); + } + var set = titleClass.tag + ? $("<" + titleClass.tag + ">Uploading file'); + reader.onload = function (e) { + var data = new FormData(); + var ajax; + data.append('action', 'upload'); + data.append('uploadField', conf.name); + data.append('upload', files[counter]); + if (conf.ajaxData) { + conf.ajaxData(data, files[counter], counter); + } + if (conf.ajax) { + ajax = conf.ajax; + } + else if ($.isPlainObject(editor.s.ajax)) { + ajax = editor.s.ajax.upload ? + editor.s.ajax.upload : + editor.s.ajax; + } + else if (typeof editor.s.ajax === 'string') { + ajax = editor.s.ajax; + } + if (!ajax) { + throw new Error('No Ajax option specified for upload plug-in'); + } + if (typeof ajax === 'string') { + ajax = { url: ajax }; + } + // Handle the case when the ajax data is given as a function + if (typeof ajax.data === 'function') { + var d = {}; + var ret = ajax.data(d); + // Allow the return to be used, or the object passed in + if (ret !== undefined && typeof ret !== 'string') { + d = ret; + } + $.each(d, function (key, value) { + data.append(key, value); + }); + } + else if ($.isPlainObject(ajax.data)) { + throw new Error('Upload feature cannot use `ajax.data` with an object. Please use it as a function instead.'); + } + // Dev cancellable event + editor._event('preUpload', [conf.name, files[counter], data], function (preRet) { + // Upload was cancelled + if (preRet === false) { + // If there are other files still to read, spin through them + if (counter < files.length - 1) { + counter++; + reader.readAsDataURL(files[counter]); + } + else { + completeCallback.call(editor, ids); + } + return; + } + // Use preSubmit to stop form submission during an upload, since the + // value won't be known until that point. + var submit = false; + editor + .on('preSubmit.DTE_Upload', function () { + submit = true; + return false; + }); + $.ajax($.extend({}, ajax, { + contentType: false, + data: data, + dataType: 'json', + error: function (xhr) { + var errors = conf.errors; + editor.off('preSubmit.DTE_Upload'); + editor.error(conf.name, errors && errors[xhr.status] + ? errors[xhr.status] + : generalError); + editor._event('uploadXhrError', [conf.name, xhr]); + progressCallback(conf); + }, + processData: false, + success: function (json) { + editor.off('preSubmit.DTE_Upload'); + editor._event('uploadXhrSuccess', [conf.name, json]); + if (json.fieldErrors && json.fieldErrors.length) { + var errors = json.fieldErrors; + for (var i = 0, ien = errors.length; i < ien; i++) { + editor.error(errors[i].name, errors[i].status); + } + completeCallback.call(editor, ids, true); + } + else if (json.error) { + editor.error(json.error); + completeCallback.call(editor, ids, true); + } + else if (!json.upload || !json.upload.id) { + editor.error(conf.name, generalError); + completeCallback.call(editor, ids, true); + } + else { + if (json.files) { + // Loop over the tables that are defined + $.each(json.files, function (table, filesIn) { + if (!Editor.files[table]) { + Editor.files[table] = {}; + } + $.extend(Editor.files[table], filesIn); + }); + } + ids.push(json.upload.id); + if (counter < files.length - 1) { + counter++; + reader.readAsDataURL(files[counter]); + } + else { + completeCallback.call(editor, ids); + if (submit) { + editor.submit(); + } + } + } + progressCallback(conf); + }, + type: 'post', + xhr: function () { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.onprogress = function (e) { + if (e.lengthComputable) { + var percent = (e.loaded / e.total * 100).toFixed(0) + '%'; + progressCallback(conf, files.length === 1 ? + percent : + counter + ':' + files.length + ' ' + percent); + } + }; + xhr.upload.onloadend = function () { + progressCallback(conf, conf.processingText || 'Processing'); + }; + } + return xhr; + } + })); + }); + }; + // Convert to a plain array + files = $.map(files, function (val) { + return val; + }); + // Truncate the selected files if needed + if (conf._limitLeft !== undefined) { + files.splice(conf._limitLeft, files.length); + } + reader.readAsDataURL(files[0]); +} +/** + * CommonJS factory function pass through. Matches DataTables. + * @param {*} root Window + * @param {*} jq jQUery + * @returns {boolean} Indicator + */ +function factory(root, jq) { + var is = false; + // Test if the first parameter is a window object + if (root && root.document) { + window = root; + document = root.document; + } + // Test if the second parameter is a jQuery object + if (jq && jq.fn && jq.fn.jquery) { + $ = jq; + is = true; + } + return is; +} + +var DataTable$4 = $.fn.dataTable; +var _inlineCounter = 0; +/** + * Set the class on the form to relate to the action that is being performed. + * This allows styling to be applied to the form to reflect the state that + * it is in. + * + * @private + */ +function _actionClass() { + var classesActions = this.classes.actions; + var action = this.s.action; + var wrapper = $(this.dom.wrapper); + wrapper.removeClass([classesActions.create, classesActions.edit, classesActions.remove].join(' ')); + if (action === 'create') { + wrapper.addClass(classesActions.create); + } + else if (action === 'edit') { + wrapper.addClass(classesActions.edit); + } + else if (action === 'remove') { + wrapper.addClass(classesActions.remove); + } +} +/** + * Create an Ajax request in the same style as DataTables 1.10, with full + * backwards compatibility for Editor 1.2. + * + * @param {object} data Data to submit + * @param {function} success Success callback + * @param {function} error Error callback + * @param {object} submitParams Submitted data + * @private + */ +function _ajax(data, success, error, submitParams) { + var action = this.s.action; + var thrown; + var opts = { + complete: [function (xhr, text) { + // Use `complete` rather than `success` so that all status codes are + // caught and can return valid JSON (useful when working with REST + // services). + var json = null; + if (xhr.status === 204 || xhr.responseText === 'null') { + json = {}; + } + else { + try { + // jQuery 1.12 or newer for responseJSON, but its the only + // way to get the JSON from a JSONP. So if you want to use + // JSONP with Editor you have to use jQuery 1.12+. + json = xhr.responseJSON ? + xhr.responseJSON : + JSON.parse(xhr.responseText); + } + catch (e) { } + } + if ($.isPlainObject(json) || Array.isArray(json)) { + success(json, xhr.status >= 400, xhr); + } + else { + error(xhr, text, thrown); + } + }], + data: null, + dataType: 'json', + error: [function (xhr, text, err) { + thrown = err; + }], + success: [], + type: 'POST' + }; + var a; + var ajaxSrc = this.s.ajax; + var id = action === 'edit' || action === 'remove' ? + pluck(this.s.editFields, 'idSrc').join(',') : + null; + // Get the correct object for rest style + if ($.isPlainObject(ajaxSrc) && ajaxSrc[action]) { + ajaxSrc = ajaxSrc[action]; + } + if (typeof ajaxSrc === 'function') { + // As a function, execute it, passing in the required parameters + ajaxSrc.call(this, null, null, data, success, error); + return; + } + else if (typeof ajaxSrc === 'string') { + // As a string it gives the URL. For backwards compatibility it can also + // give the method. + if (ajaxSrc.indexOf(' ') !== -1) { + a = ajaxSrc.split(' '); + opts.type = a[0]; + opts.url = a[1]; + } + else { + opts.url = ajaxSrc; + } + } + else { + // As an object, we extend the Editor defaults - with the exception of + // the error and complete functions which get added in so the user can + // specify their own in addition to ours + var optsCopy = $.extend({}, ajaxSrc || {}); + if (optsCopy.complete) { + opts.complete.unshift(optsCopy.complete); + delete optsCopy.complete; + } + if (optsCopy.error) { + opts.error.unshift(optsCopy.error); + delete optsCopy.error; + } + opts = $.extend({}, opts, optsCopy); + } + // URL macros + if (opts.replacements) { + $.each(opts.replacements, function (key, repl) { + opts.url = opts.url.replace('{' + key + '}', repl.call(this, key, id, action, data)); + }); + } + opts.url = opts.url + .replace(/_id_/, id) + .replace(/{id}/, id); + // Data processing option like in DataTables + if (opts.data) { + var isFn = typeof opts.data === 'function'; + var newData = isFn ? + opts.data(data) : // fn can manipulate data or return an object + opts.data; // object or array to merge + // If the function returned something, use that alone + data = isFn && newData ? + newData : + $.extend(true, data, newData); + } + opts.data = data; + // If a DELETE method is used there are a number of servers which will + // reject the request if it has a body. So we need to append to the URL. + // + // http://stackoverflow.com/questions/15088955 + // http://bugs.jquery.com/ticket/11586 + if (opts.type === 'DELETE' && (opts.deleteBody === undefined || opts.deleteBody === true)) { + var params = $.param(opts.data); + opts.url += opts.url.indexOf('?') === -1 ? + '?' + params : + '&' + params; + delete opts.data; + } + // Finally, make the ajax call + $.ajax(opts); +} +/** + * Abstraction for jQuery's animate method, to support jQuery slim which doesn't + * include the animate module + * + * @private + */ +function _animate(target, style, time, callback) { + if ($.fn.animate) { + target + .stop() + .animate(style, time, callback); + } + else { + target.css(style); + var scope = target.length && target.length > 1 + ? target[0] + : target; + if (typeof time === 'function') { + time.call(scope); + } + else if (callback) { + callback.call(scope); + } + } +} +/** + * Create the DOM structure from the source elements for the main form. + * This is required since the elements can be moved around for other form types + * (bubble). + * + * @private + */ +function _assembleMain() { + var dom = this.dom; + $(dom.wrapper) + .prepend(dom.header); + $(dom.footer) + .append(dom.formError) + .append(dom.buttons); + $(dom.bodyContent) + .append(dom.formInfo) + .append(dom.form); +} +/** + * Blur the editing window. A blur is different from a close in that it might + * cause either a close or the form to be submitted. A typical example of a + * blur would be clicking on the background of the bubble or main editing forms + * - i.e. it might be a close, or it might submit depending upon the + * configuration, while a click on the close box is a very definite close. + * + * @private + */ +function _blur() { + var opts = this.s.editOpts; + var onBlur = opts.onBlur; + if (this._event('preBlur') === false) { + return; + } + if (typeof onBlur === 'function') { + onBlur(this); + } + else if (onBlur === 'submit') { + this.submit(); + } + else if (onBlur === 'close') { + this._close(); + } +} +/** + * Clear all of the information that might have been dynamically set while + * the form was visible - specifically errors and dynamic messages + * + * @private + */ +function _clearDynamicInfo(errorsOnly) { + if (errorsOnly === void 0) { errorsOnly = false; } + // Can be triggered due to a destroy if the editor is open + if (!this.s) { + return; + } + var errorClass = this.classes.field.error; + var fields = this.s.fields; + $('div.' + errorClass, this.dom.wrapper).removeClass(errorClass); + $.each(fields, function (name, field) { + field.error(''); + if (!errorsOnly) { + field.message(''); + } + }); + this.error(''); + if (!errorsOnly) { + this.message(''); + } +} +/** + * Close an editing display, firing callbacks and events as needed + * + * @param {function} submitComplete Function to call after the preClose event + * @param {string} mode Editing mode that is just finished + * @private + */ +function _close(submitComplete, mode) { + var closed; + // Allow preClose event to cancel the opening of the display + if (this._event('preClose') === false) { + return; + } + if (this.s.closeCb) { + closed = this.s.closeCb(submitComplete, mode); + this.s.closeCb = null; + } + if (this.s.closeIcb) { + this.s.closeIcb(); + this.s.closeIcb = null; + } + // Remove focus control + $('body').off('focus.editor-focus'); + this.s.displayed = false; + this._event('close'); + if (closed) { + // Note that `bubble` will call this itself due to the animation + this._event('closed', [closed]); + } +} +/** + * Register a function to be called when the editing display is closed. This is + * used by function that create the editing display to tidy up the display on + * close - for example removing event handlers to prevent memory leaks. + * + * @param {function} fn Function to call on close + * @private + */ +function _closeReg(fn) { + this.s.closeCb = fn; +} +/** + * Argument shifting for the create(), edit() and remove() methods. In Editor + * 1.3 the preferred form of calling those three methods is with just two + * parameters (one in the case of create() - the id and the show flag), while in + * previous versions four / three parameters could be passed in, including the + * buttons and title options. In 1.3 the chaining API is preferred, but we want + * to support the old form as well, so this function is provided to perform + * that argument shifting, common to all three. + * + * @private + */ +function _crudArgs(arg1, arg2, arg3, arg4) { + var that = this; + var title; + var buttons; + var show; + var opts; + if ($.isPlainObject(arg1)) { + // Form options passed in as the first option + opts = arg1; + } + else if (typeof arg1 === 'boolean') { + // Show / hide passed in as the first option - form options second + show = arg1; + opts = arg2; // can be undefined + } + else { + // Old style arguments + title = arg1; // can be undefined + buttons = arg2; // can be undefined + show = arg3; // can be undefined + opts = arg4; // can be undefined + } + // If all undefined, then fall into here + if (show === undefined) { + show = true; + } + if (title) { + that.title(title); + } + if (buttons) { + that.buttons(buttons); + } + return { + maybeOpen: function () { + if (show) { + that.open(); + } + }, + opts: $.extend({}, this.s.formOptions.main, opts) + }; +} +/** + * Execute the data source abstraction layer functions. This is simply a case + * of executing the function with the Editor scope, passing in the remaining + * parameters. + * + * @param {string} name Function name to execute + * @private + */ +function _dataSource(name) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + var dataSource = this.s.table + ? Editor.dataSources.dataTable + : Editor.dataSources.html; + var fn = dataSource[name]; + if (fn) { + return fn.apply(this, args); + } +} +/** + * Insert the fields into the DOM, in the correct order + * + * @private + */ +function _displayReorder(includeFields) { + var _this = this; + var formContent = $(this.dom.formContent); + var fields = this.s.fields; + var order = this.s.order; + var template = this.s.template; + var mode = this.s.mode || 'main'; + if (includeFields) { + this.s.includeFields = includeFields; + } + else { + includeFields = this.s.includeFields; + } + // Empty before adding in the required fields + formContent.children().detach(); + $.each(order, function (i, name) { + if (_this._weakInArray(name, includeFields) !== -1) { + if (template && mode === 'main') { + template.find('editor-field[name="' + name + '"]').after(fields[name].node()); + template.find('[data-editor-template="' + name + '"]').append(fields[name].node()); + } + else { + formContent.append(fields[name].node()); + } + } + }); + if (template && mode === 'main') { + template.appendTo(formContent); + } + this._event('displayOrder', [ + this.s.displayed, + this.s.action, + formContent + ]); +} +/** + * Generic editing handler. This can be called by the three editing modes (main, + * bubble and inline) to configure Editor for a row edit, and fire the required + * events to ensure that the editing interfaces all provide a common API. + * + * @param {*} rows Identifier for the item(s) to be edited + * @param {string} type Editing type - for the initEdit event + * @private + */ +function _edit(items, editFields, type, formOptions, setupDone) { + var _this = this; + var fields = this.s.fields; + var usedFields = []; + var includeInOrder; + var editData = {}; + this.s.editFields = editFields; + this.s.editData = editData; + this.s.modifier = items; + this.s.action = 'edit'; + this.dom.form.style.display = 'block'; + this.s.mode = type; + this._actionClass(); + // Setup the field values for editing + $.each(fields, function (name, field) { + field.multiReset(); + includeInOrder = false; + editData[name] = {}; + $.each(editFields, function (idSrc, edit) { + if (edit.fields[name]) { + var val = field.valFromData(edit.data); + var nullDefault = field.nullDefault(); + // Save the set data values so we can decided in submit if data has changed + // Note that `null` is stored as an empty string since fields do not currently + // have the ability to store a null value - when they are read back (in the + // submit) they would be an empty string. When null handling is added to + // fields, this will need to be removed. + editData[name][idSrc] = val === null ? + '' : + Array.isArray(val) ? + val.slice() : + val; + // If scoped to edit the whole row, then set all of the fields + if (!formOptions || formOptions.scope === 'row') { + field.multiSet(idSrc, val === undefined || (nullDefault && val === null) ? + field.def() : + val, false); + if (!edit.displayFields || edit.displayFields[name]) { + includeInOrder = true; + } + } + else { + // Limit editing to only those fields selected if any are selected + if (!edit.displayFields || edit.displayFields[name]) { + field.multiSet(idSrc, val === undefined || (nullDefault && val === null) ? + field.def() : + val, false); + includeInOrder = true; + } + } + } + }); + // Loop finished - can do a multi-value check for display of the field now + field._multiValueCheck(); + // If the field is used, then add it to the fields to be shown + if (field.multiIds().length !== 0 && includeInOrder) { + usedFields.push(name); + } + }); + // Remove the fields that are not required from the display + var currOrder = this.order().slice(); + for (var i = currOrder.length - 1; i >= 0; i--) { + // Use `toString()` to convert numbers to strings, since usedFields + // contains strings (object property names) + if ($.inArray(currOrder[i].toString(), usedFields) === -1) { + currOrder.splice(i, 1); + } + } + this._displayReorder(currOrder); + // Events + this._event('initEdit', [ + pluck(editFields, 'node')[0], + pluck(editFields, 'data')[0], + items, + type + ], function () { + _this._event('initMultiEdit', // undocumented and to be removed in v2 + [editFields, items, type], function () { + setupDone(); + }); + }); +} +/** + * Fire callback functions and trigger events. + * + * @param {string|array} trigger Name(s) of the jQuery custom event to trigger + * @param {array} args Array of arguments to pass to the triggered event + * @return {*} Return from the event + * @private + */ +function _event(trigger, args, promiseComplete) { + if (args === void 0) { args = []; } + if (promiseComplete === void 0) { promiseComplete = undefined; } + // Allow an array to be passed in for the trigger to fire multiple events + if (Array.isArray(trigger)) { + for (var i = 0, ien = trigger.length; i < ien; i++) { + this._event(trigger[i], args); + } + } + else { + var e = $.Event(trigger); + $(this).triggerHandler(e, args); + var result = e.result; + // Automatically trigger a cancelled event if a `pre` event handler + // was cancelled by the callback + if (trigger.indexOf('pre') === 0 && result === false) { + $(this).triggerHandler($.Event(trigger + 'Cancelled'), args); + } + // Allow for a promise to be returned and execute a callback + if (promiseComplete) { + if (result && typeof result === 'object' && result.then) { + // jQuery and "real" promises both provide "then" + result.then(promiseComplete); + } + else { + // If there wasn't a promise returned, then execute immediately + promiseComplete(result); + } + } + return result; + } +} +/** + * 'Modernise' event names, from the old style `on[A-Z]` names to camelCase. + * This is done to provide backwards compatibility with Editor 1.2- event names. + * The names themselves were updated for consistency with DataTables. + * + * @param {string} Event name to modernise + * @return {string} String with new event name structure + * @private + */ +function _eventName(input) { + var name; + var names = input.split(' '); + for (var i = 0, ien = names.length; i < ien; i++) { + name = names[i]; + // Strip the 'on' part and lowercase the first character + var onStyle = name.match(/^on([A-Z])/); + if (onStyle) { + name = onStyle[1].toLowerCase() + name.substring(3); + } + names[i] = name; + } + return names.join(' '); +} +/** + * Find a field from a DOM node. All children are searched. + * + * @param {node} node DOM node to search for + * @return {Field} Field instance + */ +function _fieldFromNode(node) { + var foundField = null; + $.each(this.s.fields, function (name, field) { + if ($(field.node()).find(node).length) { + foundField = field; + } + }); + return foundField; +} +/** + * Convert a field name input parameter to an array of field names. + * + * Many of the API methods provide the ability to pass `undefined` a string or + * array of strings to identify fields. This method harmonises that. + * + * @param {array|string} [fieldNames] Field names to get + * @return {array} Field names + * @private + */ +function _fieldNames(fieldNames) { + if (fieldNames === undefined) { + return this.fields(); + } + else if (!Array.isArray(fieldNames)) { + return [fieldNames]; + } + return fieldNames; +} +/** + * Focus on a field. Providing the logic to allow complex focus expressions + * + * @param {array} fields Array of Field instances or field names for the fields + * that are shown + * @param {null|string|integer} focus Field identifier to focus on + * @private + */ +function _focus(fieldsIn, focus) { + var _this = this; + // Can't focus on a field when in remove mode (they aren't shown). + if (this.s.action === 'remove') { + return; + } + var field; + var fields = $.map(fieldsIn, function (fieldOrName) { return typeof fieldOrName === 'string' ? + _this.s.fields[fieldOrName] : + fieldOrName; }); + if (typeof focus === 'number') { + field = fields[focus]; + } + else if (focus) { + if (focus.indexOf('jq:') === 0) { + field = $('div.DTE ' + focus.replace(/^jq:/, '')); + } + else { + field = this.s.fields[focus]; + } + } + else { + document.activeElement.blur(); + } + this.s.setFocus = field; + if (field) { + field.focus(); + } +} +/** + * Form options - common function so all editing methods can provide the same + * basic options, DRY. + * + * @param {object} opts Editing options. See model.formOptions + * @private + */ +function _formOptions(opts) { + var _this = this; + var that = this; + var inlineCount = _inlineCounter++; + var namespace = '.dteInline' + inlineCount; + // Backwards compatibility with 1.4 + // if ( opts.closeOnComplete !== undefined ) { + // opts.onComplete = opts.closeOnComplete ? 'close' : 'none'; + // } + // if ( opts.submitOnBlur !== undefined ) { + // opts.onBlur = opts.submitOnBlur ? 'submit' : 'close'; + // } + // if ( opts.submitOnReturn !== undefined ) { + // opts.onReturn = opts.submitOnReturn ? 'submit' : 'none'; + // } + // if ( opts.blurOnBackground !== undefined ) { + // opts.onBackground = opts.blurOnBackground ? 'blur' : 'none'; + // } + this.s.editOpts = opts; + // When submitting by Ajax we don't want to close a form that has been + // opened during the ajax request, so we keep a count of the form opening + this.s.editCount = inlineCount; + if (typeof opts.title === 'string' || typeof opts.title === 'function') { + this.title(opts.title); + opts.title = true; + } + if (typeof opts.message === 'string' || typeof opts.message === 'function') { + this.message(opts.message); + opts.message = true; + } + if (typeof opts.buttons !== 'boolean') { + this.buttons(opts.buttons); + opts.buttons = true; + } + // Prevent submit by a host `` + $(document).on('keydown' + namespace, function (e) { + if (e.which === 13 && _this.s.displayed) { // return + var el = $(document.activeElement); + if (el) { + var field = _this._fieldFromNode(el); + if (field && typeof field.canReturnSubmit === 'function' && field.canReturnSubmit(el)) { + e.preventDefault(); + } + } + } + }); + $(document).on('keyup' + namespace, function (e) { + var el = $(document.activeElement); + if (e.which === 13 && _this.s.displayed) { // return + var field = _this._fieldFromNode(el); + // Allow the field plug-in to say if we can submit or not + if (field && typeof field.canReturnSubmit === 'function' && field.canReturnSubmit(el)) { + if (opts.onReturn === 'submit') { + e.preventDefault(); + _this.submit(); + } + else if (typeof opts.onReturn === 'function') { + e.preventDefault(); + opts.onReturn(_this, e); + } + } + } + else if (e.which === 27) { // esc + e.preventDefault(); + if (typeof opts.onEsc === 'function') { + opts.onEsc(that, e); + } + else if (opts.onEsc === 'blur') { + that.blur(); + } + else if (opts.onEsc === 'close') { + that.close(); + } + else if (opts.onEsc === 'submit') { + that.submit(); + } + } + else if (el.parents('.DTE_Form_Buttons').length) { + if (e.which === 37) { // left + el.prev('button').trigger('focus'); + } + else if (e.which === 39) { // right + el.next('button').trigger('focus'); + } + } + }); + this.s.closeIcb = function () { + $(document).off('keydown' + namespace); + $(document).off('keyup' + namespace); + }; + return namespace; +} +/** + * Inline editing insertion of fields + */ +function _inline(editFields, opts, closeCb) { + var _this = this; + if (closeCb === void 0) { closeCb = null; } + var closed = false; + var classes = this.classes.inline; + var keys = Object.keys(editFields); + var editRow = editFields[keys[0]]; + var lastAttachPoint; + var elements = []; + for (var i = 0; i < editRow.attach.length; i++) { + var name_1 = editRow.attachFields[i][0]; + elements.push({ + field: this.s.fields[name_1], + name: name_1, + node: $(editRow.attach[i]), + }); + } + var namespace = this._formOptions(opts); + var ret = this._preopen('inline'); + if (!ret) { + return this; + } + for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { + var el = elements_1[_i]; + var node = el.node; + el.children = node.contents().detach(); + // Note the wdith setting shouldn't be required, but Edge increases the column's + // width if a % width is used (even 1%). This is the workaround + var style = navigator.userAgent.indexOf('Edge/') !== -1 ? + 'style="width:' + node.width() + 'px"' : + ''; + node.append($('
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ')); + node.find('div.' + classes.liner.replace(/ /g, '.')) + .append(el.field.node()) + .append(this.dom.formError); + // Need the last insert point to allow for number submitTrigger + lastAttachPoint = el.field.node(); + if (opts.buttons) { + // Use prepend for the CSS, so we can float the buttons right + node.find('div.' + classes.buttons.replace(/ /g, '.')).append(this.dom.buttons); + } + } + // If there is a submit trigger target, we need to modify the document to allow submission + var submitClose = this._inputTrigger('submit', opts, lastAttachPoint); + var cancelClose = this._inputTrigger('cancel', opts, lastAttachPoint); + this._closeReg(function (submitComplete, action) { + // Mark that this specific inline edit has closed + closed = true; + $(document).off('click' + namespace); + // If there was no submit, we need to put the DOM back as it was. If + // there was a submit, the write of the new value will set the DOM to + // how it should be. Note also, check if it was an edit action, if not + // a create will create new row so we tidy this one up + if (!submitComplete || action !== 'edit') { + elements.forEach(function (el) { + el.node.contents().detach(); + el.node.append(el.children); + }); + } + submitClose(); + cancelClose(); + // Clear error messages "offline" + _this._clearDynamicInfo(); + if (closeCb) { + closeCb(); + } + return 'inline'; // trigger `closed` + }); + // Submit and blur actions + setTimeout(function () { + // If already closed, possibly due to some other aspect of the event + // that triggered the inline call, don't add the event listener - it + // isn't needed (and is dangerous) + if (closed) { + return; + } + // andSelf is deprecated in jQ1.8, but we want 1.7 compat + var back = $.fn.addBack ? 'addBack' : 'andSelf'; + // Chrome uses the target as the element where the mouse up happens, + // but we want the target being where the mouse down is, to allow for + // text selection in an input - so listen on mousedown as well. + var target; + $(document) + .on('mousedown' + namespace, function (e) { + target = e.target; + }) + .on('keydown' + namespace, function (e) { + target = e.target; + }) + .on('click' + namespace, function (e) { + // Was the click inside or owned by one of the editing nodes? If + // not, then come out of editing mode. + var isIn = false; + for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) { + var el = elements_2[_i]; + if (el.field._typeFn('owns', target) || + $.inArray(el.node[0], $(target).parents()[back]()) !== -1) { + isIn = true; + } + } + if (!isIn) { + _this.blur(); + } + }); + }, 0); + this._focus($.map(elements, function (el) { return el.field; }), opts.focus); + this._postopen('inline', true); +} +/** + * Add a triggering action for inline editing, with a return function that + * will tidy up the events. + * + * @param type Action + * @param opts Form options object + * @param insertPoint Insert point in the DOM + * @private + */ +function _inputTrigger(type, opts, insertPoint) { + var _this = this; + var trigger = opts[type + 'Trigger']; + var html = opts[type + 'Html']; + var event = 'click.dte-' + type; + var tr = $(insertPoint).closest('tr'); + if (trigger === undefined) { + return function () { }; + } + // Allow the input to be a column index, including a negative to count from right + if (typeof trigger === 'number') { + var kids = tr.children(); + trigger = trigger < 0 + ? kids[kids.length + trigger] + : kids[trigger]; + } + // Use childNodes to get text nodes as well + var children = $(trigger, tr).length + ? Array.prototype.slice.call($(trigger, tr)[0].childNodes) + : []; + $(children).detach(); + // Event handler to submit the form and do nothing else + var triggerEl = $(trigger, tr) + .on(event, function (e) { + e.stopImmediatePropagation(); + if (type === 'cancel') { + _this.close(); + } + else { + _this.submit(); + } + }) + .append(html); + return function () { + triggerEl + .off(event) + .empty() + .append(children); + }; +} +/** + * Update the field options from a JSON data source + * + * @param {object} json JSON object from the server + * @private + */ +function _optionsUpdate(json) { + var that = this; + if (json && json.options) { + $.each(this.s.fields, function (name, field) { + if (json.options[name] !== undefined) { + var fieldInst = that.field(name); + if (fieldInst && fieldInst.update) { + fieldInst.update(json.options[name]); + } + } + }); + } +} +/** + * Show a message in the form. This can be used for error messages or dynamic + * messages (information display) as the structure for each is basically the + * same. This method will take into account if the form is visible or not - if + * so then the message is shown with an effect for the end user, otherwise + * it is just set immediately. + * + * @param {element} el The field display node to use + * @param {string|function} msg The message to show + * @private + */ +function _message(el, msg, title, fn) { + // Allow for jQuery slim + var canAnimate = $.fn.animate ? true : false; + if (title === undefined) { + title = false; + } + if (!fn) { + fn = function () { }; + } + if (typeof msg === 'function') { + msg = msg(this, new DataTable$4.Api(this.s.table)); + } + el = $(el); + if (canAnimate) { + el.stop(); + } + if (!msg) { + if (this.s.displayed && canAnimate) { + // Clear the message with visual effect since the form is visible + el + .fadeOut(function () { + el.html(''); + fn(); + }); + } + else { + // Clear the message without visual effect + el + .html('') + .css('display', 'none'); + fn(); + } + if (title) { + el.removeAttr('title'); + } + } + else { + fn(); + if (this.s.displayed && canAnimate) { + // Show the message with visual effect + el + .html(msg) + .fadeIn(); + } + else { + // Show the message without visual effect + el + .html(msg) + .css('display', 'block'); + } + if (title) { + el.attr('title', msg); + } + } +} +/** + * Update the multi-value information display to not show redundant information + * + * @private + */ +function _multiInfo() { + var fields = this.s.fields; + var include = this.s.includeFields; + var show = true; + var state; + if (!include) { + return; + } + for (var i = 0, ien = include.length; i < ien; i++) { + var field = fields[include[i]]; + var multiEditable = field.multiEditable(); + if (field.isMultiValue() && multiEditable && show) { + // Multi-row editable. Only show first message + state = true; + show = false; + } + else if (field.isMultiValue() && !multiEditable) { + // Not multi-row editable. Always show message + state = true; + } + else { + state = false; + } + fields[include[i]].multiInfoShown(state); + } +} +/** + * Close the current form, which can result in the display controller + * hiding its display, or showing a form from a level up if nesting + */ +function _nestedClose(cb) { + var disCtrl = this.s.displayController; + var show = disCtrl._show; + if (!show || !show.length) { + // Nothing shown just now + if (cb) { + cb(); + } + } + else if (show.length > 1) { + // Got nested forms - remove current and go one layer up + show.pop(); + // Get the one to show + var last = show[show.length - 1]; + if (cb) { + cb(); + } + this.s.displayController.open(last.dte, last.append, last.callback); + } + else { + this.s.displayController.close(this, cb); + show.length = 0; + } +} +/** + * Display a form, adding it to the display stack for nesting + */ +function _nestedOpen(cb, nest) { + var disCtrl = this.s.displayController; + // This needs to be per display controller, but the controller + // itself doesn't know anything about the nesting, so we add a + // "hidden" property to it, used here, but not by the controller + // itself. + if (!disCtrl._show) { + disCtrl._show = []; + } + if (!nest) { + disCtrl._show.length = 0; + } + disCtrl._show.push({ + append: this.dom.wrapper, + callback: cb, + dte: this, + }); + this.s.displayController.open(this, this.dom.wrapper, cb); +} +/** + * Common display editing form method called by all editing methods after the + * form has been configured and displayed. This is to ensure all fire the same + * events. + * + * @param {string} type Editing type + * @param {boolean} immediate indicate if the open is immediate (in which case + * `opened` is also triggered). + * @return {boolean} `true` + * @private + */ +function _postopen(type, immediate) { + var _this = this; + var focusCapture = this.s.displayController.captureFocus; + if (focusCapture === undefined) { + focusCapture = true; + } + $(this.dom.form) + .off('submit.editor-internal') + .on('submit.editor-internal', function (e) { + e.preventDefault(); + }); + // Focus capture - when the Editor form is shown we capture the browser's + // focus action. Without doing this is would result in the user being able + // to control items under the Editor display - triggering actions that + // shouldn't be possible while the editing is shown. + if (focusCapture && (type === 'main' || type === 'bubble')) { + $('body').on('focus.editor-focus', function () { + if ($(document.activeElement).parents('.DTE').length === 0 && + $(document.activeElement).parents('.DTED').length === 0) { + if (_this.s.setFocus) { + _this.s.setFocus.focus(); + } + } + }); + } + this._multiInfo(); + this._event('open', [type, this.s.action]); + if (immediate) { + this._event('opened', [type, this.s.action]); + } + return true; +} +/** + * Common display editing form method called by all editing methods before the + * form has been configured and displayed. This is to ensure all fire the same + * events. + * + * @param {string} Editing type + * @return {boolean} `false` if the open is cancelled by the preOpen event, + * otherwise `true` + * @private + */ +function _preopen(type) { + // Allow preOpen event to cancel the opening of the display + if (this._event('preOpen', [type, this.s.action]) === false) { + // Tidy- this would normally be done on close, but we never get that far + this._clearDynamicInfo(); + this._event('cancelOpen', [type, this.s.action]); + // inline and bubble methods cannot be opened using `open()`, they + // have to be called again, so we need to clean up the event + // listener added by _formOptions + if ((this.s.mode === 'inline' || this.s.mode === 'bubble') && this.s.closeIcb) { + this.s.closeIcb(); + } + this.s.closeIcb = null; + return false; + } + this._clearDynamicInfo(true); + this.s.displayed = type; + return true; +} +/** + * Set the form into processing mode or take it out of processing mode. In + * processing mode a processing indicator is shown and user interaction with the + * form buttons is blocked + * + * @param {boolean} processing true if to go into processing mode and false if + * to come out of processing mode + * @private + */ +function _processing(processing) { + var procClass = this.classes.processing.active; + $(['div.DTE', this.dom.wrapper]).toggleClass(procClass, processing); + this.s.processing = processing; + this._event('processing', [processing]); +} +/** + * Check if any of the fields are processing for the submit to carry on. It + * can recurse. + * + * @private + */ +function _noProcessing(args) { + var processing = false; + $.each(this.s.fields, function (name, field) { + if (field.processing()) { + processing = true; + } + }); + if (processing) { + this.one('processing-field', function () { + // Are any other fields in a processing state? - Might need to wait again + if (this._noProcessing(args) === true) { + this._submit.apply(this, args); + } + }); + } + return !processing; +} +/** + * Submit a form to the server for processing. This is the private method that is used + * by the 'submit' API method, which should always be called in preference to calling + * this method directly. + * + * @param {function} [successCallback] Callback function that is executed once the + * form has been successfully submitted to the server and no errors occurred. + * @param {function} [errorCallback] Callback function that is executed if the + * server reports an error due to the submission (this includes a JSON formatting + * error should the error return invalid JSON). + * @param {function} [formatdata] Callback function that is passed in the data + * that will be submitted to the server, allowing pre-formatting of the data, + * removal of data or adding of extra fields. + * @param {boolean} [hide=true] When the form is successfully submitted, by default + * the form display will be hidden - this option allows that to be overridden. + * @private + */ +function _submit(successCallback, errorCallback, formatdata, hide) { + var _this = this; + var changed = false; + var allData = {}; + var changedData = {}; + var setBuilder = dataSet; + var fields = this.s.fields; + var editCount = this.s.editCount; + var editFields = this.s.editFields; + var editData = this.s.editData; + var opts = this.s.editOpts; + var changedSubmit = opts.submit; + var submitParamsLocal; + // First - are any of the fields currently "processing"? If so, then we + // want to let them complete before submitting + if (this._noProcessing(arguments) === false) { + Editor.error('Field is still processing', 16, false); + return; + } + // After initSubmit to allow `mode()` to be used as a setter + var action = this.s.action; + var submitParams = { + data: {} + }; + submitParams[this.s.actionName] = action; + // Gather the data that is to be submitted + if (action === 'create' || action === 'edit') { + $.each(editFields, function (idSrc, edit) { + var allRowData = {}; + var changedRowData = {}; + $.each(fields, function (name, field) { + if (edit.fields[name] && field.submittable()) { + var multiGet = field.multiGet(); + var builder = setBuilder(name); + // If it wasn't an edit field, we still need to get the original + // data, so we can submit it if `all` or `allIfChanged` + if (multiGet[idSrc] === undefined) { + var originalVal = field.valFromData(edit.data); + builder(allRowData, originalVal); + return; + } + var value = multiGet[idSrc]; + var manyBuilder = Array.isArray(value) && typeof name === 'string' && name.indexOf('[]') !== -1 ? + setBuilder(name.replace(/\[.*$/, '') + '-many-count') : + null; + builder(allRowData, value); + // We need to tell the server-side if an array submission + // actually has no elements so it knows if the array was + // being submitted or not (since otherwise it doesn't know + // if the array was empty, or just not being submitted) + if (manyBuilder) { + manyBuilder(allRowData, value.length); + } + // Build a changed object for if that is the selected data + // type + if (action === 'edit' && (!editData[name] || !field.compare(value, editData[name][idSrc]))) { + builder(changedRowData, value); + changed = true; + if (manyBuilder) { + manyBuilder(changedRowData, value.length); + } + } + } + }); + if (!$.isEmptyObject(allRowData)) { + allData[idSrc] = allRowData; + } + if (!$.isEmptyObject(changedRowData)) { + changedData[idSrc] = changedRowData; + } + }); + // Decide what data to submit to the server for edit (create is all, always) + if (action === 'create' || changedSubmit === 'all' || (changedSubmit === 'allIfChanged' && changed)) { + submitParams.data = allData; + } + else if (changedSubmit === 'changed' && changed) { + submitParams.data = changedData; + } + else { + // Nothing to submit + this.s.action = null; + if (opts.onComplete === 'close' && (hide === undefined || hide)) { + this._close(false); + } + else if (typeof opts.onComplete === 'function') { + opts.onComplete(this); + } + if (successCallback) { + successCallback.call(this); + } + this._processing(false); + this._event('submitComplete'); + return; + } + } + else if (action === 'remove') { + $.each(editFields, function (idSrc, edit) { + submitParams.data[idSrc] = edit.data; + }); + } + // Local copy of the submit parameters, needed for the data lib prep since + // the preSubmit can modify the format and we need to know what the format is + submitParamsLocal = $.extend(true, {}, submitParams); + // Allow the data to be submitted to the server to be preprocessed by callback + // and event functions + if (formatdata) { + formatdata(submitParams); + } + this._event('preSubmit', [submitParams, action], function (result) { + if (result === false) { + _this._processing(false); + } + else { + // Submit to the server (or whatever method is defined in the settings) + var submitWire = _this.s.ajax ? + _this._ajax : + _this._submitTable; + submitWire.call(_this, submitParams, function (json, notGood, xhr) { + _this._submitSuccess(json, notGood, submitParams, submitParamsLocal, _this.s.action, editCount, hide, successCallback, errorCallback, xhr); + }, function (xhr, err, thrown) { + _this._submitError(xhr, err, thrown, errorCallback, submitParams, _this.s.action); + }, submitParams); + } + }); +} +/** + * Save submitted data without an Ajax request. This will write to a local + * table only - not saving it permanently, but rather using the DataTable itself + * as a data store. + * + * @param {object} data Data to submit + * @param {function} success Success callback + * @param {function} error Error callback + * @param {object} submitParams Submitted data + * @private + */ +function _submitTable(data, success, error, submitParams) { + var action = data.action; + var out = { data: [] }; + var idGet = dataGet(this.s.idSrc); + var idSet = dataSet(this.s.idSrc); + // Nothing required for remove - create and edit get a copy of the data + if (action !== 'remove') { + var originalData_1 = this.s.mode === 'main' ? + this._dataSource('fields', this.modifier()) : + this._dataSource('individual', this.modifier()); + $.each(data.data, function (key, vals) { + var toSave; + var extender = extend; + // Get the original row's data, so we can modify it with new values. + // This allows Editor to not need to submit all fields + if (action === 'edit') { + var rowData = originalData_1[key].data; + toSave = extender({}, rowData, true); + toSave = extender(toSave, vals, true); + } + else { + toSave = extender({}, vals, true); + } + // If create and there isn't an id for the new row, create + // one. An id could be creased by `preSubmit` + var overrideId = idGet(toSave); + if (action === 'create' && overrideId === undefined) { + idSet(toSave, +new Date() + key.toString()); + } + else { + idSet(toSave, overrideId); + } + out.data.push(toSave); + }); + } + success(out); +} +/** + * Submit success callback function + * + * @param {object} json Payload + * @param {bool} notGood True if the returned status code was + * >=400 (i.e. processing failed). This is called `notGood` rather than + * `success` since the request was successfully processed, just not written to + * the db. It is also inverted from "good" to make it optional when overriding + * the `ajax` function. + * @param {object} submitParams Submitted data + * @param {object} submitParamsLocal Unmodified copy of submitted data + * (before it could be modified by the user) + * @param {string} action CRUD action being taken + * @param {int} editCount Protection against async errors + * @param {bool} hide Hide the form flag + * @param {function} successCallback Success callback + * @param {function} errorCallback Error callback + * @private + */ +function _submitSuccess(json, notGood, submitParams, submitParamsLocal, action, editCount, hide, successCallback, errorCallback, xhr) { + var _this = this; + var that = this; + var setData; + var fields = this.s.fields; + var opts = this.s.editOpts; + var modifier = this.s.modifier; + this._event('postSubmit', [json, submitParams, action, xhr]); + if (!json.error) { + json.error = ''; + } + if (!json.fieldErrors) { + json.fieldErrors = []; + } + if (notGood || json.error || json.fieldErrors.length) { + // Global form error + var globalError_1 = []; + if (json.error) { + globalError_1.push(json.error); + } + // Field specific errors + $.each(json.fieldErrors, function (i, err) { + var field = fields[err.name]; + if (!field) { + throw new Error('Unknown field: ' + err.name); + } + else if (field.displayed()) { + field.error(err.status || 'Error'); + if (i === 0) { + if (opts.onFieldError === 'focus') { + // Scroll the display to the first error and focus + _this._animate($(_this.dom.bodyContent), { scrollTop: $(field.node()).position().top }, 500); + field.focus(); + } + else if (typeof opts.onFieldError === 'function') { + opts.onFieldError(_this, err); + } + } + } + else { + // If the field isn't visible, we need to make it display as a global error + // This _shouldn't_ happen - it means there is invalid data if it does + globalError_1.push(field.name() + ': ' + (err.status || 'Error')); + } + }); + this.error(globalError_1.join('
        ')); + this._event('submitUnsuccessful', [json]); + if (errorCallback) { + errorCallback.call(that, json); + } + } + else { + // Create a data store that the data source can use, which is + // unique to this action + var store = {}; + if (json.data && (action === 'create' || action === 'edit')) { + this._dataSource('prep', action, modifier, submitParamsLocal, json, store); + for (var _i = 0, _a = json.data; _i < _a.length; _i++) { + var data = _a[_i]; + setData = data; + var id = this._dataSource('id', data); + this._event('setData', [json, data, action]); // legacy + if (action === 'create') { + // New row was created to add it to the DT + this._event('preCreate', [json, data, id]); + this._dataSource('create', fields, data, store); + this._event(['create', 'postCreate'], [json, data, id]); + } + else if (action === 'edit') { + // Row was updated, so tell the DT + this._event('preEdit', [json, data, id]); + this._dataSource('edit', modifier, fields, data, store); + this._event(['edit', 'postEdit'], [json, data, id]); + } + } + this._dataSource('commit', action, modifier, json.data, store); + } + else if (action === 'remove') { + this._dataSource('prep', action, modifier, submitParamsLocal, json, store); + // Remove the rows given and then redraw the table + this._event('preRemove', [json, this.ids()]); + this._dataSource('remove', modifier, fields, store); + this._event(['remove', 'postRemove'], [json, this.ids()]); + this._dataSource('commit', action, modifier, json.data, store); + } + // Submission complete + if (editCount === this.s.editCount) { + var sAction = this.s.action; + this.s.action = null; // Must do before close, in case close starts a new edit + if (opts.onComplete === 'close' && (hide === undefined || hide)) { + // If no data returned, then treat as not complete + this._close(json.data ? true : false, sAction); + } + else if (typeof opts.onComplete === 'function') { + opts.onComplete(this); + } + } + // All done - fire off the callbacks and events + if (successCallback) { + successCallback.call(that, json); + } + this._event('submitSuccess', [json, setData, action]); + } + this._processing(false); + this._event('submitComplete', [json, setData, action]); +} +/** + * Submit error callback function + * + * @private + */ +function _submitError(xhr, err, thrown, errorCallback, submitParams, action) { + this._event('postSubmit', [null, submitParams, action, xhr]); + this.error(this.i18n.error.system); + this._processing(false); + if (errorCallback) { + errorCallback.call(this, xhr, err, thrown); + } + this._event(['submitError', 'submitComplete'], [xhr, err, thrown, submitParams]); +} +/** + * Check to see if the form needs to be tidied before a new action can be performed. + * This includes if the from is currently processing an old action and if it + * is inline editing. + * + * @param {function} fn Callback function + * @returns {boolean} `true` if was in inline mode, `false` otherwise + * @private + */ +function _tidy(fn) { + var _this = this; + var dt = this.s.table ? + new $.fn.dataTable.Api(this.s.table) : + null; + var ssp = false; + if (dt) { + ssp = dt.settings()[0].oFeatures.bServerSide; + } + if (this.s.processing) { + // If currently processing, wait until the action is complete + this.one('submitComplete', function () { + // If server-side processing is being used in DataTables, first + // check that we are still processing (might not be if nothing was + // submitted) and then wait for the draw to finished + if (ssp) { + dt.one('draw', fn); + } + else { + setTimeout(function () { + fn(); + }, 10); + } + }); + return true; + } + else if (this.display() === 'inline' || this.display() === 'bubble') { + // If there is an inline edit box, it needs to be tidied + this + .one('close', function () { + // On close if processing then we need to wait for the submit to + // complete before running the callback as onBlur was set to + // submit + if (!_this.s.processing) { + // IE needs a small timeout, otherwise it may not focus on a + // field if one already has focus + setTimeout(function () { + // Check this Editor wasn't destroyed + if (_this.s) { + fn(); + } + }, 10); + } + else { + // Need to wait for the submit to finish + _this.one('submitComplete', function (e, json) { + // If SSP then need to wait for the draw + if (ssp && json) { + dt.one('draw', fn); + } + else { + setTimeout(function () { + if (_this.s) { + fn(); + } + }, 10); + } + }); + } + }) + .blur(); + return true; + } + return false; +} +/** + * Same as $.inArray but with weak type checking + * + * @param {any} name Value to look for in the array + * @param {array} arr Array to scan through + * @returns {number} -1 if not found, index otherwise + */ +function _weakInArray(name, arr) { + for (var i = 0, ien = arr.length; i < ien; i++) { + if (name == arr[i]) { + return i; + } + } + return -1; +} + +var fieldType = { + create: function () { }, + disable: function () { }, + enable: function () { }, + get: function () { }, + set: function () { } +}; + +var DataTable$3 = $.fn.dataTable; +// Upload private helper method +function _buttonText(conf, textIn) { + if (textIn === null || textIn === undefined) { + textIn = conf.uploadText || 'Choose file...'; + } + conf._input.find('div.upload button').html(textIn); +} +function _commonUpload(editor, conf, dropCallback, multiple) { + if (multiple === void 0) { multiple = false; } + var btnClass = editor.classes.form.buttonInternal; + var container = $('
        ' + + '
        ' + + '
        ' + + '
        ' + + '' + + '' + + '
        ' + + '
        ' + + '' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        '); + conf._input = container; + conf._enabled = true; + if (conf.id) { + container.find('input[type=file]').attr('id', Editor.safeId(conf.id)); + } + if (conf.attr) { + container.find('input[type=file]').attr(conf.attr); + } + _buttonText(conf); + if (window.FileReader && conf.dragDrop !== false) { + container.find('div.drop span').text(conf.dragDropText || 'Drag and drop a file here to upload'); + var dragDrop_1 = container.find('div.drop'); + dragDrop_1 + .on('drop', function (e) { + if (conf._enabled) { + Editor.upload(editor, conf, e.originalEvent.dataTransfer.files, _buttonText, dropCallback); + dragDrop_1.removeClass('over'); + } + return false; + }) + .on('dragleave dragexit', function (e) { + if (conf._enabled) { + dragDrop_1.removeClass('over'); + } + return false; + }) + .on('dragover', function (e) { + if (conf._enabled) { + dragDrop_1.addClass('over'); + } + return false; + }); + // When an Editor is open with a file upload input there is a + // reasonable chance that the user will miss the drop point when + // dragging and dropping. Rather than loading the file in the browser, + // we want nothing to happen, otherwise the form will be lost. + editor + .on('open', function () { + $('body').on('dragover.DTE_Upload drop.DTE_Upload', function (e) { + return false; + }); + }) + .on('close', function () { + $('body').off('dragover.DTE_Upload drop.DTE_Upload'); + }); + } + else { + container.addClass('noDrop'); + container.append(container.find('div.rendered')); + } + container.find('div.clearValue button').on('click', function (e) { + e.preventDefault(); + if (conf._enabled) { + upload.set.call(editor, conf, ''); + } + }); + container.find('input[type=file]').on('input', function () { + Editor.upload(editor, conf, this.files, _buttonText, function (ids, error) { + if (!error) { + dropCallback.call(editor, ids); + } + container.find('input[type=file]')[0].value = ''; + }); + }); + return container; +} +// Typically a change event caused by the end user will be added to a queue that +// the browser will handle when no other script is running. However, using +// `$().trigger()` will cause it to happen immediately, so in order to simulate +// the standard browser behaviour we use setTimeout. This also means that +// `dependent()` and other change event listeners will trigger when the field +// values have all been set, rather than as they are being set - 31594 +function _triggerChange(input) { + setTimeout(function () { + input.trigger('change', { editor: true, editorSet: true }); // editorSet legacy + }, 0); +} +// A number of the fields in this file use the same get, set, enable and disable +// methods (specifically the text based controls), so in order to reduce the code +// size, we just define them once here in our own local base model for the field +// types. +var baseFieldType = $.extend(true, {}, fieldType, { + canReturnSubmit: function (conf, node) { + return true; + }, + disable: function (conf) { + conf._input.prop('disabled', true); + }, + enable: function (conf) { + conf._input.prop('disabled', false); + }, + get: function (conf) { + return conf._input.val(); + }, + set: function (conf, val) { + conf._input.val(val); + _triggerChange(conf._input); + } +}); +var hidden = { + create: function (conf) { + conf._input = $(''); + conf._val = conf.value; + return null; + }, + get: function (conf) { + return conf._val; + }, + set: function (conf, val) { + var oldVal = conf._val; + conf._val = val; + conf._input.val(val); + if (oldVal !== val) { + _triggerChange(conf._input); + } + } +}; +var readonly = $.extend(true, {}, baseFieldType, { + create: function (conf) { + conf._input = $('').attr($.extend({ + id: Editor.safeId(conf.id), + readonly: 'readonly', + type: 'text' + }, conf.attr || {})); + return conf._input[0]; + } +}); +var text = $.extend(true, {}, baseFieldType, { + create: function (conf) { + conf._input = $('').attr($.extend({ + id: Editor.safeId(conf.id), + type: 'text' + }, conf.attr || {})); + return conf._input[0]; + } +}); +var password = $.extend(true, {}, baseFieldType, { + create: function (conf) { + conf._input = $('').attr($.extend({ + id: Editor.safeId(conf.id), + type: 'password' + }, conf.attr || {})); + return conf._input[0]; + } +}); +var textarea = $.extend(true, {}, baseFieldType, { + canReturnSubmit: function (conf, node) { + return false; + }, + create: function (conf) { + conf._input = $('').attr($.extend({ + id: Editor.safeId(conf.id) + }, conf.attr || {})); + return conf._input[0]; + } +}); +var select = $.extend(true, {}, baseFieldType, { + // Locally "private" function that can be reused for the create and update methods + _addOptions: function (conf, opts, append) { + if (append === void 0) { append = false; } + var elOpts = conf._input[0].options; + var countOffset = 0; + if (!append) { + elOpts.length = 0; + if (conf.placeholder !== undefined) { + var placeholderValue = conf.placeholderValue !== undefined ? + conf.placeholderValue : + ''; + countOffset += 1; + elOpts[0] = new Option(conf.placeholder, placeholderValue); + var disabled = conf.placeholderDisabled !== undefined ? + conf.placeholderDisabled : + true; + elOpts[0].hidden = disabled; // can't be hidden if not disabled! + elOpts[0].disabled = disabled; + elOpts[0]._editor_val = placeholderValue; + } + } + else { + countOffset = elOpts.length; + } + if (opts) { + Editor.pairs(opts, conf.optionsPair, function (val, label, i, attr) { + var option = new Option(label, val); + option._editor_val = val; + if (attr) { + $(option).attr(attr); + } + elOpts[i + countOffset] = option; + }); + } + }, + create: function (conf) { + conf._input = $('') + .attr($.extend({ + id: Editor.safeId(conf.id), + multiple: conf.multiple === true + }, conf.attr || {})) + .on('change.dte', function (e, d) { + // On change, get the user selected value and store it as the + // last set, so `update` can reflect it. This way `_lastSet` + // always gives the intended value, be it set via the API or by + // the end user. + if (!d || !d.editor) { + conf._lastSet = select.get(conf); + } + }); + select._addOptions(conf, conf.options || conf.ipOpts); + return conf._input[0]; + }, + destroy: function (conf) { + conf._input.off('change.dte'); + }, + get: function (conf) { + var val = conf._input.find('option:selected').map(function () { + return this._editor_val; + }).toArray(); + if (conf.multiple) { + return conf.separator ? + val.join(conf.separator) : + val; + } + return val.length ? val[0] : null; + }, + set: function (conf, val, localUpdate) { + if (!localUpdate) { + conf._lastSet = val; + } + // Can't just use `$().val()` because it won't work with strong types + if (conf.multiple && conf.separator && !Array.isArray(val)) { + val = typeof val === 'string' ? + val.split(conf.separator) : + []; + } + else if (!Array.isArray(val)) { + val = [val]; + } + var i; + var len = val.length; + var found; + var allFound = false; + var options = conf._input.find('option'); + conf._input.find('option').each(function () { + found = false; + for (i = 0; i < len; i++) { + // Weak typing + if (this._editor_val == val[i]) { + found = true; + allFound = true; + break; + } + } + this.selected = found; + }); + // If there is a placeholder, we might need to select it if nothing else + // was selected. It doesn't make sense to select when multi is enabled + if (conf.placeholder && !allFound && !conf.multiple && options.length) { + options[0].selected = true; + } + // Update will call change itself, otherwise multiple might be called + if (!localUpdate) { + _triggerChange(conf._input); + } + return allFound; + }, + update: function (conf, options, append) { + select._addOptions(conf, options, append); + // Attempt to set the last selected value (set by the API or the end + // user, they get equal priority) + var lastSet = conf._lastSet; + if (lastSet !== undefined) { + select.set(conf, lastSet, true); + } + _triggerChange(conf._input); + } +}); +var checkbox = $.extend(true, {}, baseFieldType, { + // Locally "private" function that can be reused for the create and update methods + _addOptions: function (conf, opts, append) { + if (append === void 0) { append = false; } + var jqInput = conf._input; + var offset = 0; + if (!append) { + jqInput.empty(); + } + else { + offset = $('input', jqInput).length; + } + if (opts) { + Editor.pairs(opts, conf.optionsPair, function (val, label, i, attr) { + jqInput.append('
        ' + + '' + + '' + + '
        '); + $('input:last', jqInput).attr('value', val)[0]._editor_val = val; + if (attr) { + $('input:last', jqInput).attr(attr); + } + }); + } + }, + create: function (conf) { + conf._input = $('
        '); + checkbox._addOptions(conf, conf.options || conf.ipOpts); + return conf._input[0]; + }, + disable: function (conf) { + conf._input.find('input').prop('disabled', true); + }, + enable: function (conf) { + conf._input.find('input').prop('disabled', false); + }, + get: function (conf) { + var out = []; + var selected = conf._input.find('input:checked'); + if (selected.length) { + selected.each(function () { + out.push(this._editor_val); + }); + } + else if (conf.unselectedValue !== undefined) { + out.push(conf.unselectedValue); + } + return conf.separator === undefined || conf.separator === null ? + out : + out.join(conf.separator); + }, + set: function (conf, val) { + var jqInputs = conf._input.find('input'); + if (!Array.isArray(val) && typeof val === 'string') { + val = val.split(conf.separator || '|'); + } + else if (!Array.isArray(val)) { + val = [val]; + } + var i; + var len = val.length; + var found; + jqInputs.each(function () { + found = false; + for (i = 0; i < len; i++) { + if (this._editor_val == val[i]) { + found = true; + break; + } + } + this.checked = found; + }); + _triggerChange(jqInputs); + }, + update: function (conf, options, append) { + // Get the current value + var currVal = checkbox.get(conf); + checkbox._addOptions(conf, options, append); + checkbox.set(conf, currVal); + } +}); +var radio = $.extend(true, {}, baseFieldType, { + // Locally "private" function that can be reused for the create and update methods + _addOptions: function (conf, opts, append) { + if (append === void 0) { append = false; } + var jqInput = conf._input; + var offset = 0; + if (!append) { + jqInput.empty(); + } + else { + offset = $('input', jqInput).length; + } + if (opts) { + Editor.pairs(opts, conf.optionsPair, function (val, label, i, attr) { + jqInput.append('
        ' + + '' + + '' + + '
        '); + $('input:last', jqInput).attr('value', val)[0]._editor_val = val; + if (attr) { + $('input:last', jqInput).attr(attr); + } + }); + } + }, + create: function (conf) { + conf._input = $('
        '); + radio._addOptions(conf, conf.options || conf.ipOpts); + // this is ugly, but IE6/7 has a problem with radio elements that are created + // and checked before being added to the DOM! Basically it doesn't check them. As + // such we use the _preChecked property to set cache the checked button and then + // check it again when the display is shown. This has no effect on other browsers + // other than to cook a few clock cycles. + this.on('open', function () { + conf._input.find('input').each(function () { + if (this._preChecked) { + this.checked = true; + } + }); + }); + return conf._input[0]; + }, + disable: function (conf) { + conf._input.find('input').prop('disabled', true); + }, + enable: function (conf) { + conf._input.find('input').prop('disabled', false); + }, + get: function (conf) { + var el = conf._input.find('input:checked'); + if (el.length) { + return el[0]._editor_val; + } + return conf.unselectedValue !== undefined ? + conf.unselectedValue : + undefined; + }, + set: function (conf, val) { + conf._input.find('input').each(function () { + this._preChecked = false; + if (this._editor_val == val) { + this.checked = true; + this._preChecked = true; + } + else { + // In a detached DOM tree, there is no relationship between the + // input elements, so we need to uncheck any element that does + // not match the value + this.checked = false; + this._preChecked = false; + } + }); + _triggerChange(conf._input.find('input:checked')); + }, + update: function (conf, options, append) { + var currVal = radio.get(conf); + radio._addOptions(conf, options, append); + // Select the current value if it exists in the new data set, otherwise + // select the first radio input so there is always a value selected + var inputs = conf._input.find('input'); + radio.set(conf, inputs.filter('[value="' + currVal + '"]').length ? + currVal : + inputs.eq(0).attr('value')); + } +}); +var datetime = $.extend(true, {}, baseFieldType, { + create: function (conf) { + conf._input = $('').attr($.extend(true, { + id: Editor.safeId(conf.id), + type: 'text' + }, conf.attr)); + if (!DataTable$3.DateTime) { + Editor.error('DateTime library is required', 15); + } + // Legacy support for 2.0- parameters + if (conf.momentLocale && !conf.opts.locale) { + conf.opts.locale = conf.momentLocale; + } + if (conf.momentStrict && !conf.opts.strict) { + conf.opts.strict = conf.momentStrict; + } + conf._picker = new DataTable$3.DateTime(conf._input, $.extend({ + format: conf.displayFormat || conf.format, + i18n: this.i18n.datetime, + }, conf.opts)); + conf._closeFn = function () { + conf._picker.hide(); + }; + if (conf.keyInput === false) { + conf._input.on('keydown', function (e) { + e.preventDefault(); + }); + } + this.on('close', conf._closeFn); + return conf._input[0]; + }, + destroy: function (conf) { + this.off('close', conf._closeFn); + conf._input.off('keydown'); + conf._picker.destroy(); + }, + errorMessage: function (conf, msg) { + conf._picker.errorMsg(msg); + }, + get: function (conf) { + return conf.wireFormat + ? conf._picker.valFormat(conf.wireFormat) + : conf._input.val(); + }, + maxDate: function (conf, max) { + conf._picker.max(max); + }, + minDate: function (conf, min) { + conf._picker.min(min); + }, + // default disable and enable options are okay + owns: function (conf, node) { + return conf._picker.owns(node); + }, + set: function (conf, val) { + // If there is a wire format, convert it to the display format + // Note that special values (e.g. `--now` and empty) do not get formatted + if (typeof val === 'string' && val && val.indexOf('--') !== 0 && conf.wireFormat) { + conf._picker.valFormat(conf.wireFormat, val); + } + else { + conf._picker.val(val); + } + _triggerChange(conf._input); + } +}); +var upload = $.extend(true, {}, baseFieldType, { + canReturnSubmit: function (conf, node) { + return false; + }, + create: function (conf) { + var editor = this; + var container = _commonUpload(editor, conf, function (val) { + upload.set.call(editor, conf, val[0]); + editor._event('postUpload', [conf.name, val[0]]); + }); + return container; + }, + disable: function (conf) { + conf._input.find('input').prop('disabled', true); + conf._enabled = false; + }, + enable: function (conf) { + conf._input.find('input').prop('disabled', false); + conf._enabled = true; + }, + get: function (conf) { + return conf._val; + }, + set: function (conf, val) { + conf._val = val; + conf._input.val(''); + var container = conf._input; + if (conf.display) { + var rendered = container.find('div.rendered'); + if (conf._val) { + rendered.html(conf.display(conf._val)); + } + else { + rendered + .empty() + .append('' + (conf.noFileText || 'No file') + ''); + } + } + var button = container.find('div.clearValue button'); + if (val && conf.clearText) { + button.html(conf.clearText); + container.removeClass('noClear'); + } + else { + container.addClass('noClear'); + } + conf._input.find('input').triggerHandler('upload.editor', [conf._val]); + } +}); +var uploadMany = $.extend(true, {}, baseFieldType, { + _showHide: function (conf) { + if (!conf.limit) { + return; + } + conf._container.find('div.limitHide').css('display', conf._val.length >= conf.limit ? + 'none' : + 'block'); + // Used by the Editor.upload static function to truncate if too many + // files are selected for upload + conf._limitLeft = conf.limit - conf._val.length; + }, + canReturnSubmit: function (conf, node) { + return false; + }, + create: function (conf) { + var editor = this; + var container = _commonUpload(editor, conf, function (val) { + conf._val = conf._val.concat(val); + uploadMany.set.call(editor, conf, conf._val); + editor._event('postUpload', [conf.name, conf._val]); + }, true); + container + .addClass('multi') + .on('click', 'button.remove', function (e) { + e.stopPropagation(); + if (conf._enabled) { + var idx = $(this).data('idx'); + conf._val.splice(idx, 1); + uploadMany.set.call(editor, conf, conf._val); + } + }); + conf._container = container; + return container; + }, + disable: function (conf) { + conf._input.find('input').prop('disabled', true); + conf._enabled = false; + }, + enable: function (conf) { + conf._input.find('input').prop('disabled', false); + conf._enabled = true; + }, + get: function (conf) { + return conf._val; + }, + set: function (conf, val) { + // Default value for fields is an empty string, whereas we want [] + if (!val) { + val = []; + } + if (!Array.isArray(val)) { + throw new Error('Upload collections must have an array as a value'); + } + conf._val = val; + conf._input.val(''); + var that = this; + var container = conf._input; + if (conf.display) { + var rendered = container.find('div.rendered').empty(); + if (val.length) { + var list_1 = $('
          ').appendTo(rendered); + $.each(val, function (i, file) { + var display = conf.display(file, i); + if (display !== null) { + list_1.append('
        • ' + + display + + ' ' + + '
        • '); + } + }); + } + else { + rendered.append('' + (conf.noFileText || 'No files') + ''); + } + } + uploadMany._showHide(conf); + conf._input.find('input').triggerHandler('upload.editor', [conf._val]); + } +}); +var datatable = $.extend(true, {}, baseFieldType, { + _addOptions: function (conf, options, append) { + if (append === void 0) { append = false; } + var dt = conf.dt; + if (!append) { + dt.clear(); + } + dt.rows.add(options).draw(); + }, + _jumpToFirst: function (conf, editor) { + var dt = conf.dt; + // Find which page in the table the first selected row is + var idx = dt.row({ order: 'applied', selected: true }).index(); + var page = 0; + if (typeof idx === 'number') { + var pageLen = dt.page.info().length; + var pos = dt.rows({ order: 'applied' }).indexes().indexOf(idx); + page = pageLen > 0 + ? Math.floor(pos / pageLen) + : 0; + } + dt.page(page).draw(false); + // If scrolling is enabled, scroll down to first selected + var container = $('div.dataTables_scrollBody', dt.table().container()); + var scrollTo = function () { + var node = dt.row({ order: 'applied', selected: true }).node(); + if (node) { + var height = container.height(); + var top_1 = $(node).position().top; + if (top_1 > height - 10) { + container.scrollTop(top_1); + } + } + }; + if (container.length) { + // Check that the form has actually been displayed. If not need + // to wait for Editor's open event + if (container.parents('body').length) { + scrollTo(); + } + else { + editor.one('open', function () { + scrollTo(); + }); + } + } + }, + create: function (conf) { + var _this = this; + conf.optionsPair = $.extend({ + label: 'label', + value: 'value' + }, conf.optionsPair); + var table = $(''); + var container = $('
          ').append(table); + var side = $('
          '); + if (conf.footer) { + $('
          ') + .append(Array.isArray(conf.footer) + ? $('').append($.map(conf.footer, function (str) { return $('
          ').html(str); })) + : conf.footer) + .appendTo(table); + } + var dt = table + .addClass(datatable.tableClass) + .width('100%') + .on('init.dt', function (e, settings) { + if (settings.nTable !== table[0]) { + return; + } + var api = new DataTable$3.Api(settings); + var containerNode = $(api.table(undefined).container()); + // Select init + DataTable$3.select.init(api); + // Append side button controls + side + .append(containerNode.find('div.dataTables_filter')) + .append(containerNode.find('div.dt-buttons')) + .append(containerNode.find('div.dataTables_info')); + }) + .DataTable($.extend({ + buttons: [], + columns: [ + { + data: conf.optionsPair.label, + title: 'Label' + } + ], + deferRender: true, + dom: 'fiBtp', + language: { + paginate: { + next: '>', + previous: '<', + }, + search: '', + searchPlaceholder: 'Search' + }, + lengthChange: false, + select: { + style: conf.multiple ? 'os' : 'single' + }, + }, conf.config)); + this.on('open', function () { + if (dt.search()) { + dt.search('').draw(); + } + dt.columns.adjust(); + }); + // Change event for when the user does a select - `set` will do its own + // triggering of the change for the api + dt.on('user-select', function () { + _triggerChange($(conf.dt.table().container())); + }); + if (conf.editor) { + conf.editor.table(dt); + conf.editor.on('submitComplete', function (e, json, data, action) { + if (action === 'create') { + var _loop_1 = function (dp) { + dt + .rows(function (idx, d) { return d === dp; }) + .select(); + }; + // Automatically select the new data + for (var _i = 0, _a = json.data; _i < _a.length; _i++) { + var dp = _a[_i]; + _loop_1(dp); + } + } + else if (action === 'edit' || action === 'remove') { + _this._dataSource('refresh'); + } + datatable._jumpToFirst(conf, _this); + }); + } + conf.dt = dt; + datatable._addOptions(conf, conf.options || []); + return { + input: container, + side: side, + }; + }, + disable: function (conf) { + conf.dt.select.style('api'); + conf.dt.buttons().container().css('display', 'none'); + }, + dt: function (conf) { + return conf.dt; + }, + enable: function (conf) { + conf.dt.select.style(conf.multiple ? 'os' : 'single'); + conf.dt.buttons().container().css('display', 'block'); + }, + get: function (conf) { + var rows = conf.dt + .rows({ selected: true }) + .data() + .pluck(conf.optionsPair.value) + .toArray(); + return conf.separator || !conf.multiple + ? rows.join(conf.separator || ',') + : rows; + }, + set: function (conf, val, localUpdate) { + // Convert to an array of values - works for both single and multiple + if (conf.multiple && conf.separator && !Array.isArray(val)) { + val = typeof val === 'string' ? + val.split(conf.separator) : + []; + } + else if (!Array.isArray(val)) { + val = [val]; + } + // if ( ! localUpdate ) { + // conf._lastSet = val; + // } + var valueFn = dataGet(conf.optionsPair.value); + conf.dt.rows({ selected: true }).deselect(); + conf.dt.rows(function (idx, data, node) { return val.indexOf(valueFn(data)) !== -1; }).select(); + // Jump to the first page with a selected row (if there are any) + datatable._jumpToFirst(conf, this); + // Update will call change itself, otherwise multiple might be called + if (!localUpdate) { + _triggerChange($(conf.dt.table().container())); + } + }, + tableClass: '', + update: function (conf, options, append) { + datatable._addOptions(conf, options, append); + // Attempt to set the last selected value (set by the API or the end + // user, they get equal priority) + var lastSet = conf._lastSet; + if (lastSet !== undefined) { + datatable.set(conf, lastSet, true); + } + _triggerChange($(conf.dt.table().container())); + } +}); + +var defaults = { + className: '', + compare: null, + data: '', + def: '', + entityDecode: true, + fieldInfo: '', + getFormatter: null, + id: '', + label: '', + labelInfo: '', + message: '', + multiEditable: true, + name: null, + nullDefault: false, + setFormatter: null, + submit: true, + type: 'text' +}; + +var DataTable$2 = $.fn.dataTable; +var Field = /** @class */ (function () { + function Field(options, classes, host) { + var that = this; + var multiI18n = host.internalI18n().multi; + var opts = $.extend(true, {}, Field.defaults, options); + if (!Editor.fieldTypes[opts.type]) { + throw new Error('Error adding field - unknown field type ' + opts.type); + } + this.s = { + classes: classes, + host: host, + multiIds: [], + multiValue: false, + multiValues: {}, + name: opts.name, + opts: opts, + processing: false, + type: Editor.fieldTypes[opts.type], + }; + // No id, so assign one to have the label reference work + if (!opts.id) { + opts.id = 'DTE_Field_' + opts.name; + } + // If no `data` option is given, then we use the name from the field as the + // data prop to read data for the field from DataTables + if (opts.data === '') { + opts.data = opts.name; + } + // Get and set functions in the data object for the record + this.valFromData = function (d) { + // wrapper to automatically pass `editor` as the type + return dataGet(opts.data)(d, 'editor'); + }; + this.valToData = dataSet(opts.data); // set val to data + // Field HTML structure + var template = $('
          ' + + '' + + '
          ' + + // Field specific HTML is added here if there is any + '
          ' + + '
          ' + + multiI18n.title + + '' + + multiI18n.info + + '' + + '
          ' + + '
          ' + + multiI18n.restore + + '
          ' + + '
          ' + + '
          ' + opts.message + '
          ' + + '
          ' + opts.fieldInfo + '
          ' + + '
          ' + + '
          ' + + '
          '); + var input = this._typeFn('create', opts); + var side = null; + if (input && input.side) { + side = input.side; + input = input.input; + } + if (input !== null) { + el('input-control', template).prepend(input); + } + else { + template.css('display', 'none'); + } + this.dom = { + container: template, + fieldError: el('msg-error', template), + fieldInfo: el('msg-info', template), + fieldMessage: el('msg-message', template), + inputControl: el('input-control', template), + label: el('label', template).append(side), + labelInfo: el('msg-label', template), + multi: el('multi-value', template), + multiInfo: el('multi-info', template), + multiReturn: el('msg-multi', template), + processing: el('field-processing', template) + }; + // On click - set a common value for the field + this.dom.multi.on('click', function () { + if (that.s.opts.multiEditable && !template.hasClass(classes.disabled) && opts.type !== 'readonly') { + that.val(''); + that.focus(); + } + }); + this.dom.multiReturn.on('click', function () { + that.multiRestore(); + }); + // Field type extension methods - add a method to the field for the public + // methods that each field type defines beyond the default ones that already + // exist as part of this instance + $.each(this.s.type, function (name, fn) { + if (typeof fn === 'function' && that[name] === undefined) { + that[name] = function () { + var args = Array.prototype.slice.call(arguments); + args.unshift(name); + var ret = that._typeFn.apply(that, args); + // Return the given value if there is one, or the field instance + // for chaining if there is no value + return ret === undefined ? + that : + ret; + }; + } + }); + } + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Public + */ + Field.prototype.def = function (set) { + var opts = this.s.opts; + if (set === undefined) { + // Backwards compat + var def = opts['default'] !== undefined ? + opts['default'] : + opts.def; + return typeof def === 'function' ? + def() : + def; + } + opts.def = set; + return this; + }; + Field.prototype.disable = function () { + this.dom.container.addClass(this.s.classes.disabled); + this._typeFn('disable'); + return this; + }; + Field.prototype.displayed = function () { + var container = this.dom.container; + return container.parents('body').length && container.css('display') !== 'none' ? + true : + false; + }; + Field.prototype.enable = function (toggle) { + if (toggle === void 0) { toggle = true; } + if (toggle === false) { + return this.disable(); + } + this.dom.container.removeClass(this.s.classes.disabled); + this._typeFn('enable'); + return this; + }; + Field.prototype.enabled = function () { + return this.dom.container.hasClass(this.s.classes.disabled) === false; + }; + Field.prototype.error = function (msg, fn) { + var classes = this.s.classes; + // Add or remove the error class + if (msg) { + this.dom.container.addClass(classes.error); + } + else { + this.dom.container.removeClass(classes.error); + } + this._typeFn('errorMessage', msg); + return this._msg(this.dom.fieldError, msg, fn); + }; + Field.prototype.fieldInfo = function (msg) { + return this._msg(this.dom.fieldInfo, msg); + }; + Field.prototype.isMultiValue = function () { + return this.s.multiValue && this.s.multiIds.length !== 1; + }; + Field.prototype.inError = function () { + return this.dom.container.hasClass(this.s.classes.error); + }; + Field.prototype.input = function () { + return this.s.type.input ? + this._typeFn('input') : + $('input, select, textarea', this.dom.container); + }; + Field.prototype.focus = function () { + if (this.s.type.focus) { + this._typeFn('focus'); + } + else { + $('input, select, textarea', this.dom.container).focus(); + } + return this; + }; + Field.prototype.get = function () { + // When multi-value a single get is undefined + if (this.isMultiValue()) { + return undefined; + } + return this._format(this._typeFn('get'), this.s.opts.getFormatter); + }; + Field.prototype.hide = function (animate) { + var el = this.dom.container; + if (animate === undefined) { + animate = true; + } + if (this.s.host.display() && animate && $.fn.slideUp) { + el.slideUp(); + } + else { + el.css('display', 'none'); + } + return this; + }; + Field.prototype.label = function (str) { + var label = this.dom.label; + var labelInfo = this.dom.labelInfo.detach(); + if (str === undefined) { + return label.html(); + } + label.html(str); + label.append(labelInfo); + return this; + }; + Field.prototype.labelInfo = function (msg) { + return this._msg(this.dom.labelInfo, msg); + }; + Field.prototype.message = function (msg, fn) { + return this._msg(this.dom.fieldMessage, msg, fn); + }; + // There is no `multiVal()` as its arguments could be ambiguous + // id is an idSrc value _only_ + Field.prototype.multiGet = function (id) { + var value; + var multiValues = this.s.multiValues; + var multiIds = this.s.multiIds; + var isMultiValue = this.isMultiValue(); + if (id === undefined) { + var fieldVal = this.val(); + // Get an object with the values for each item being edited + value = {}; + for (var _i = 0, multiIds_1 = multiIds; _i < multiIds_1.length; _i++) { + var multiId = multiIds_1[_i]; + value[multiId] = isMultiValue ? + multiValues[multiId] : + fieldVal; + } + } + else if (isMultiValue) { + // Individual value + value = multiValues[id]; + } + else { + // Common value + value = this.val(); + } + return value; + }; + Field.prototype.multiRestore = function () { + this.s.multiValue = true; + this._multiValueCheck(); + }; + Field.prototype.multiSet = function (id, val, recalc) { + if (recalc === void 0) { recalc = true; } + var that = this; + var multiValues = this.s.multiValues; + var multiIds = this.s.multiIds; + if (val === undefined) { + val = id; + id = undefined; + } + // Set + var set = function (idSrc, valIn) { + // Get an individual item's value - add the id to the edit ids if + // it isn't already in the set. + if ($.inArray(idSrc, multiIds) === -1) { + multiIds.push(idSrc); + } + multiValues[idSrc] = that._format(valIn, that.s.opts.setFormatter); + }; + if ($.isPlainObject(val) && id === undefined) { + // idSrc / value pairs passed in + $.each(val, function (idSrc, innerVal) { + set(idSrc, innerVal); + }); + } + else if (id === undefined) { + // Set same value for all existing ids + $.each(multiIds, function (i, idSrc) { + set(idSrc, val); + }); + } + else { + // Setting an individual property + set(id, val); + } + this.s.multiValue = true; + if (recalc) { + this._multiValueCheck(); + } + return this; + }; + Field.prototype.name = function () { + return this.s.opts.name; + }; + Field.prototype.node = function () { + return this.dom.container[0]; + }; + Field.prototype.nullDefault = function () { + return this.s.opts.nullDefault; + }; + Field.prototype.processing = function (set) { + if (set === undefined) { + return this.s.processing; + } + this.dom.processing.css('display', set ? 'block' : 'none'); + this.s.processing = set; + this.s.host.internalEvent('processing-field', [set]); + return this; + }; + // multiCheck is not publicly documented + Field.prototype.set = function (val, multiCheck) { + if (multiCheck === void 0) { multiCheck = true; } + var decodeFn = function (d) { + return typeof d !== 'string' ? + d : + d + .replace(/>/g, '>') + .replace(/</g, '<') + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/£/g, '£') + .replace(/�?39;/g, '\'') + .replace(/�?10;/g, '\n'); + }; + this.s.multiValue = false; + var decode = this.s.opts.entityDecode; + if (decode === undefined || decode === true) { + if (Array.isArray(val)) { + for (var i = 0, ien = val.length; i < ien; i++) { + val[i] = decodeFn(val[i]); + } + } + else { + val = decodeFn(val); + } + } + // If triggered from multi check we don't want to do formatting or multi checking again + if (multiCheck === true) { + val = this._format(val, this.s.opts.setFormatter); + this._typeFn('set', val); + this._multiValueCheck(); + } + else { + this._typeFn('set', val); + } + return this; + }; + Field.prototype.show = function (animate, toggle) { + if (animate === void 0) { animate = true; } + if (toggle === void 0) { toggle = true; } + if (toggle === false) { + return this.hide(animate); + } + var el = this.dom.container; + if (this.s.host.display() && animate && $.fn.slideDown) { + el.slideDown(); + } + else { + el.css('display', ''); // empty to restore css default (flex or block) + } + return this; + }; + Field.prototype.update = function (options, append) { + if (append === void 0) { append = false; } + if (this.s.type.update) { + this._typeFn('update', options, append); + } + return this; + }; + Field.prototype.val = function (val) { + return val === undefined ? + this.get() : + this.set(val); + }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Internal - Called from Editor only and are not publicly documented - + * these APIs can change! + */ + Field.prototype.compare = function (value, original) { + var compare = this.s.opts.compare || deepCompare; + return compare(value, original); + }; + Field.prototype.dataSrc = function () { + return this.s.opts.data; + }; + Field.prototype.destroy = function () { + // remove element + this.dom.container.remove(); + // field's own destroy method if there is one + this._typeFn('destroy'); + return this; + }; + Field.prototype.multiEditable = function () { + return this.s.opts.multiEditable; + }; + Field.prototype.multiIds = function () { + return this.s.multiIds; + }; + Field.prototype.multiInfoShown = function (show) { + this.dom.multiInfo.css({ display: show ? 'block' : 'none' }); + }; + Field.prototype.multiReset = function () { + this.s.multiIds = []; + this.s.multiValues = {}; + }; + Field.prototype.submittable = function () { + return this.s.opts.submit; + }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Internal + */ + Field.prototype._msg = function (el, msg, fn) { + if (msg === undefined) { + return el.html(); + } + if (typeof msg === 'function') { + var editor = this.s.host; + msg = msg(editor, new DataTable$2.Api(editor.internalSettings().table)); + } + if (el.parent().is(':visible') && $.fn.animate) { + el.html(msg); + if (msg) { + el.slideDown(fn); // fn can be undefined - so jQuery won't execute it + } + else { + el.slideUp(fn); + } + } + else { + // Not visible, so immediately set, or blank out the element + el + .html(msg || '') + .css('display', msg ? 'block' : 'none'); + if (fn) { + fn(); + } + } + return this; + }; + Field.prototype._multiValueCheck = function () { + var last; + var ids = this.s.multiIds; + var values = this.s.multiValues; + var isMultiValue = this.s.multiValue; + var isMultiEditable = this.s.opts.multiEditable; + var val; + var different = false; + if (ids) { + for (var i = 0; i < ids.length; i++) { + val = values[ids[i]]; + if (i > 0 && !deepCompare(val, last)) { + different = true; + break; + } + last = val; + } + } + if ((different && isMultiValue) || (!isMultiEditable && this.isMultiValue())) { + // Different values or same values, but not multiple editable + this.dom.inputControl.css({ display: 'none' }); + this.dom.multi.css({ display: 'block' }); + } + else { + // All the same value + this.dom.inputControl.css({ display: 'block' }); + this.dom.multi.css({ display: 'none' }); + if (isMultiValue && !different) { + this.set(last, false); + } + } + this.dom.multiReturn.css({ + display: ids && ids.length > 1 && different && !isMultiValue ? + 'block' : + 'none' + }); + // Update information label + var i18n = this.s.host.internalI18n().multi; + this.dom.multiInfo.html(isMultiEditable ? i18n.info : i18n.noMulti); + this.dom.multi.toggleClass(this.s.classes.multiNoEdit, !isMultiEditable); + this.s.host.internalMultiInfo(); + return true; + }; + Field.prototype._typeFn = function (name) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + // Insert the options as the first parameter - all field type methods + // take the field's configuration object as the first parameter + args.unshift(this.s.opts); + var fn = this.s.type[name]; + if (fn) { + return fn.apply(this.s.host, args); + } + }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Private + */ + Field.prototype._errorNode = function () { + return this.dom.fieldError; + }; + Field.prototype._format = function (val, formatter) { + if (formatter) { + if (Array.isArray(formatter)) { + var args = formatter.slice(); + var name_1 = args.shift(); + formatter = Field.formatters[name_1].apply(this, args); + } + return formatter.call(this.s.host, val, this); + } + return val; + }; + Field.defaults = defaults; + Field.formatters = {}; + return Field; +}()); + +var button = { + action: null, + className: null, + tabIndex: 0, + text: null, +}; + +var displayController = { + close: function () { }, + init: function () { }, + node: function () { }, + open: function () { } +}; + +var DataTable$1 = $.fn.dataTable; +/* + * DataTables 1.10 API integration. Provides the ability to control basic Editor + * aspects from the DataTables API. Full control does of course require use of + * the Editor API though. + */ +var apiRegister = DataTable$1.Api.register; +function _getInst(api) { + var ctx = api.context[0]; + return ctx.oInit.editor || ctx._editor; +} +// Set sensible defaults for the editing options +function _setBasic(inst, opts, type, plural) { + if (!opts) { + opts = {}; + } + if (opts.buttons === undefined) { + opts.buttons = '_basic'; + } + if (opts.title === undefined) { + opts.title = inst.i18n[type].title; + } + if (opts.message === undefined) { + if (type === 'remove') { + var confirm_1 = inst.i18n[type].confirm; + opts.message = plural !== 1 ? confirm_1._.replace(/%d/, plural) : confirm_1['1']; + } + else { + opts.message = ''; + } + } + return opts; +} +apiRegister('editor()', function () { + return _getInst(this); +}); +// Row editing +apiRegister('row.create()', function (opts) { + // main + var inst = _getInst(this); + inst.create(_setBasic(inst, opts, 'create')); + return this; +}); +apiRegister('row().edit()', function (opts) { + // main + var inst = _getInst(this); + inst.edit(this[0][0], _setBasic(inst, opts, 'edit')); + return this; +}); +apiRegister('rows().edit()', function (opts) { + // main + var inst = _getInst(this); + inst.edit(this[0], _setBasic(inst, opts, 'edit')); + return this; +}); +apiRegister('row().delete()', function (opts) { + // main + var inst = _getInst(this); + inst.remove(this[0][0], _setBasic(inst, opts, 'remove', 1)); + return this; +}); +apiRegister('rows().delete()', function (opts) { + // main + var inst = _getInst(this); + inst.remove(this[0], _setBasic(inst, opts, 'remove', this[0].length)); + return this; +}); +apiRegister('cell().edit()', function (type, opts) { + // inline or bubble + if (!type) { + type = 'inline'; + } + else if ($.isPlainObject(type)) { + opts = type; + type = 'inline'; + } + _getInst(this)[type](this[0][0], opts); + return this; +}); +apiRegister('cells().edit()', function (opts) { + // bubble only at the moment + _getInst(this).bubble(this[0], opts); + return this; +}); +apiRegister('file()', file); +apiRegister('files()', files); +// Global listener for file information updates via DataTables' Ajax JSON +$(document).on('xhr.dt', function (e, ctx, json) { + if (e.namespace !== 'dt') { + return; + } + if (json && json.files) { + $.each(json.files, function (name, filesIn) { + if (!Editor.files[name]) { + Editor.files[name] = {}; + } + $.extend(Editor.files[name], filesIn); + }); + } +}); + +/* + * Add helpful buttons to make life easier + * + * Note that the values that require a string to make any sense (the button text + * for example) are set by Editor when Editor is initialised through the i18n + * options. + */ +var _buttons = $.fn.dataTable.ext.buttons; +$.extend(_buttons, { + create: { + action: function (e, dt, node, config) { + var that = this; + var editor = config.editor; + this.processing(true); + editor + .one('preOpen', function () { + that.processing(false); + }) + .create($.extend({ + buttons: config.formButtons, + message: config.formMessage || editor.i18n.create.message, + nest: true, + title: config.formTitle || editor.i18n.create.title + }, config.formOptions)); + }, + className: 'buttons-create', + editor: null, + formButtons: { + action: function (e) { + this.submit(); + }, + text: function (editor) { + return editor.i18n.create.submit; + } + }, + formMessage: null, + formOptions: {}, + formTitle: null, + text: function (dt, node, config) { + return dt.i18n('buttons.create', config.editor.i18n.create.button); + }, + }, + createInline: { + action: function (e, dt, node, config) { + config.editor.inlineCreate(config.position, config.formOptions); + }, + className: 'buttons-create', + editor: null, + formButtons: { + action: function (e) { + this.submit(); + }, + text: function (editor) { + return editor.i18n.create.submit; + } + }, + formOptions: {}, + position: 'start', + text: function (dt, node, config) { + return dt.i18n('buttons.create', config.editor.i18n.create.button); + }, + }, + edit: { + action: function (e, dt, node, config) { + var that = this; + var editor = config.editor; + var rows = dt.rows({ selected: true }).indexes(); + var columns = dt.columns({ selected: true }).indexes(); + var cells = dt.cells({ selected: true }).indexes(); + var items = columns.length || cells.length ? + { + cells: cells, + columns: columns, + rows: rows + } : + rows; + this.processing(true); + editor + .one('preOpen', function () { + that.processing(false); + }) + .edit(items, $.extend({ + buttons: config.formButtons, + message: config.formMessage || editor.i18n.edit.message, + nest: true, + title: config.formTitle || editor.i18n.edit.title + }, config.formOptions)); + }, + className: 'buttons-edit', + editor: null, + extend: 'selected', + formButtons: { + action: function (e) { + this.submit(); + }, + text: function (editor) { + return editor.i18n.edit.submit; + }, + }, + formMessage: null, + formOptions: {}, + formTitle: null, + text: function (dt, node, config) { + return dt.i18n('buttons.edit', config.editor.i18n.edit.button); + }, + }, + remove: { + action: function (e, dt, node, config) { + var that = this; + var editor = config.editor; + this.processing(true); + editor + .one('preOpen', function () { + that.processing(false); + }) + .remove(dt.rows({ selected: true }).indexes(), $.extend({ + buttons: config.formButtons, + message: config.formMessage, + nest: true, + title: config.formTitle || editor.i18n.remove.title + }, config.formOptions)); + }, + className: 'buttons-remove', + editor: null, + extend: 'selected', + formButtons: { + action: function (e) { + this.submit(); + }, + text: function (editor) { + return editor.i18n.remove.submit; + }, + }, + formMessage: function (editor, dt) { + var rows = dt.rows({ selected: true }).indexes(); + var i18n = editor.i18n.remove; + var question = typeof i18n.confirm === 'string' ? + i18n.confirm : + i18n.confirm[rows.length] ? + i18n.confirm[rows.length] : i18n.confirm._; + return question.replace(/%d/g, rows.length); + }, + formOptions: {}, + formTitle: null, + limitTo: ['rows'], + text: function (dt, node, config) { + return dt.i18n('buttons.remove', config.editor.i18n.remove.button); + }, + } +}); +// Reuse the standard edit and remove buttons for their singular equivalent, +// but set it to extend the single selected button only +_buttons.editSingle = $.extend({}, _buttons.edit); +_buttons.editSingle.extend = 'selectedSingle'; +_buttons.removeSingle = $.extend({}, _buttons.remove); +_buttons.removeSingle.extend = 'selectedSingle'; + + +if (!DataTable || !DataTable.versionCheck || !DataTable.versionCheck('1.10.20')) { + throw new Error('Editor requires DataTables 1.10.20 or newer'); +} +var Editor = /** @class */ (function () { + function Editor(init, cjsJq) { + var _this = this; + this.add = add; + this.ajax = ajax; + this.background = background; + this.blur = blur; + this.bubble = bubble; + this.bubblePosition = bubblePosition; + this.buttons = buttons; + this.clear = clear; + this.close = close; + this.create = create; + this.undependent = undependent; + this.dependent = dependent; + this.destroy = destroy; + this.disable = disable; + this.display = display; + this.displayed = displayed; + this.displayNode = displayNode; + this.edit = edit; + this.enable = enable; + this.error = error$1; + this.field = field; + this.fields = fields; + this.file = file; + this.files = files; + this.get = get; + this.hide = hide; + this.ids = ids; + this.inError = inError; + this.inline = inline; + this.inlineCreate = inlineCreate; + this.message = message; + this.mode = mode; + this.modifier = modifier; + this.multiGet = multiGet; + this.multiSet = multiSet; + this.node = node; + this.off = off; + this.on = on; + this.one = one; + this.open = open; + this.order = order; + this.remove = remove; + this.set = set; + this.show = show; + this.submit = submit; + this.table = table; + this.template = template; + this.title = title; + this.val = val; + this._actionClass = _actionClass; + this._ajax = _ajax; + this._animate = _animate; + this._assembleMain = _assembleMain; + this._blur = _blur; + this._clearDynamicInfo = _clearDynamicInfo; + this._close = _close; + this._closeReg = _closeReg; + this._crudArgs = _crudArgs; + this._dataSource = _dataSource; + this._displayReorder = _displayReorder; + this._edit = _edit; + this._event = _event; + this._eventName = _eventName; + this._fieldFromNode = _fieldFromNode; + this._fieldNames = _fieldNames; + this._focus = _focus; + this._formOptions = _formOptions; + this._inline = _inline; + this._inputTrigger = _inputTrigger; + this._optionsUpdate = _optionsUpdate; + this._message = _message; + this._multiInfo = _multiInfo; + this._nestedClose = _nestedClose; + this._nestedOpen = _nestedOpen; + this._postopen = _postopen; + this._preopen = _preopen; + this._processing = _processing; + this._noProcessing = _noProcessing; + this._submit = _submit; + this._submitTable = _submitTable; + this._submitSuccess = _submitSuccess; + this._submitError = _submitError; + this._tidy = _tidy; + this._weakInArray = _weakInArray; + // Check if called with a window or jQuery object for DOM less applications + // This is for backwards compatibility with CommonJS loader + if (Editor.factory(init, cjsJq)) { + return Editor; + } + if (!(this instanceof Editor)) { + alert('DataTables Editor must be initialised as a \'new\' instance'); + } + init = $.extend(true, {}, Editor.defaults, init); + this.c = init; + this.s = $.extend(true, {}, Editor.models.settings, { + actionName: init.actionName, + ajax: init.ajax, + formOptions: init.formOptions, + idSrc: init.idSrc, + table: init.domTable || init.table, + template: init.template ? + $(init.template).detach() : null + }); + this.classes = $.extend(true, {}, Editor.classes); + this.i18n = init.i18n; + // Increment the unique counter for the next instance + Editor.models.settings.unique++; + var that = this; + var classes = this.classes; + var wrapper = $('
          ' + + '
          ' + + '
          ' + + '
          ' + + '
          ' + + '
          ' + + '
          ' + + '
          ' + + '
          '); + var form = $('' + + '
          ' + + ''); + this.dom = { + body: el('body', wrapper)[0], + bodyContent: el('body_content', wrapper)[0], + buttons: $('
          ')[0], + footer: el('foot', wrapper)[0], + form: form[0], + formContent: el('form_content', form)[0], + formError: $('
          ')[0], + formInfo: $('
          ')[0], + header: $('
          ')[0], + processing: el('processing', wrapper)[0], + wrapper: wrapper[0], + }; + // Bind callback methods + $.each(init.events, function (evt, fn) { + that.on(evt, function () { + var argsIn = []; + for (var _i = 0; _i < arguments.length; _i++) { + argsIn[_i] = arguments[_i]; + } + // When giving events in the constructor the event argument was not + // given in 1.2-, so we remove it here. This is solely for + // backwards compatibility as the events in the initialisation are + // not documented in 1.3+. + fn.apply(that, argsIn); + }); + }); + // Cache the DOM nodes + this.dom; + // Add any fields which are given on initialisation + if (init.fields) { + this.add(init.fields); + } + $(document) + .on('init.dt.dte' + this.s.unique, function (e, settings, json) { + // Resolve this reference in the event handlers so the + // table() API method can be used to change it and the + // change still be operated on here. + var table = _this.s.table; + if (table) { + var dtApi = new DataTable.Api(table); + if (settings.nTable === dtApi.table().node()) { + // Attempt to attach to a DataTable automatically when the table is + // initialised + settings._editor = _this; + } + } + }) + .on('i18n.dt.dte' + this.s.unique, function (e, settings) { + var table = _this.s.table; + if (table) { + var dtApi = new DataTable.Api(table); + if (settings.nTable === dtApi.table().node()) { + // Use loaded language options + if (settings.oLanguage.editor) { + $.extend(true, _this.i18n, settings.oLanguage.editor); + } + } + } + }) + .on('xhr.dt.dte' + this.s.unique, function (e, settings, json) { + var table = _this.s.table; + if (table) { + var dtApi = new DataTable.Api(table); + if (settings.nTable === dtApi.table().node()) { + // Automatically update fields which have a field name defined in + // the returned json - saves an `initComplete` for the user + _this._optionsUpdate(json); + } + } + }); + // Prep the display controller + if (!Editor.display[init.display]) { + throw new Error('Cannot find display controller ' + init.display); + } + this.s.displayController = Editor.display[init.display].init(this); + this._event('initComplete', []); + $(document).trigger('initEditor', [this]); + } + // Expose internal methods and options for the Field class to use + // These are not publicly documented. + /** @internal */ + Editor.prototype.internalEvent = function (name, args) { + this._event(name, args); + }; + /** @internal */ + Editor.prototype.internalI18n = function () { + return this.i18n; + }; + /** @internal */ + Editor.prototype.internalMultiInfo = function () { + return this._multiInfo(); + }; + /** @internal */ + Editor.prototype.internalSettings = function () { + return this.s; + }; + Editor.fieldTypes = { + checkbox: checkbox, + datatable: datatable, + datetime: datetime, + hidden: hidden, + password: password, + radio: radio, + readonly: readonly, + select: select, + text: text, + textarea: textarea, + upload: upload, + uploadMany: uploadMany + }; + Editor.files = {}; + Editor.version = '2.1.3'; + Editor.classes = classNames; + Editor.Field = Field; + Editor.DateTime = null; + Editor.error = error; + Editor.pairs = pairs; + Editor.factory = factory; + Editor.upload = upload$1; + Editor.defaults = defaults$1; + Editor.models = { + button: button, + displayController: displayController, + fieldType: fieldType, + formOptions: formOptions, + settings: settings, + }; + Editor.dataSources = { + dataTable: dataSource$1, + html: dataSource, + }; + Editor.display = { + envelope: envelope, + lightbox: self, + }; + Editor.safeId = function (id) { + return safeDomId(id, ''); + }; + return Editor; +}()); +DataTable.Editor = Editor; +$.fn.DataTable.Editor = Editor; +if (DataTable.DateTime) { + Editor.DateTime = DataTable.DateTime; +} +// If there are field types available on DataTables we copy them in (after the +// built in ones to allow overrides) and then expose the field types object. +if (DataTable.ext.editorFields) { + $.extend(Editor.fieldTypes, DataTable.ext.editorFields); +} +DataTable.ext.editorFields = Editor.fieldTypes; + + + +export default Editor; diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bootstrap.js b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bootstrap.js new file mode 100644 index 00000000..2bc68d60 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bootstrap.js @@ -0,0 +1,272 @@ +/*! Bootstrap integration for DataTables' Editor + * © SpryMedia Ltd - datatables.net/license + */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net-bs', 'datatables.net-editor'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + var jq = require('jquery'); + var cjsRequires = function (root, $) { + if ( ! $.fn.dataTable ) { + require('datatables.net-bs')(root, $); + } + + if ( ! $.fn.dataTable.Editor ) { + require('datatables.net-editor')(root, $); + } + }; + + if (typeof window === 'undefined') { + module.exports = function (root, $) { + if ( ! root ) { + // CommonJS environments without a window global must pass a + // root. This will give an error otherwise + root = window; + } + + if ( ! $ ) { + $ = jq( root ); + } + + cjsRequires( root, $ ); + return factory( $, root, root.document ); + }; + } + else { + cjsRequires( window, jq ); + module.exports = factory( jq, window, window.document ); + } + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + + +var Editor = DataTable.Editor; + +/* + * Set the default display controller to be our bootstrap control + */ +DataTable.Editor.defaults.display = "bootstrap"; + + +/* + * Change the default classes from Editor to be classes for Bootstrap + */ +$.extend( true, $.fn.dataTable.Editor.classes, { + "header": { + "wrapper": "DTE_Header modal-header", + title: { + tag: 'h4', + class: 'modal-title' + } + }, + "body": { + "wrapper": "DTE_Body modal-body" + }, + "footer": { + "wrapper": "DTE_Footer modal-footer" + }, + "form": { + "tag": "form-horizontal", + "button": "btn btn-default", + "buttonInternal": "btn btn-default" + }, + "field": { + "wrapper": "DTE_Field", + "label": "col-lg-4 control-label", + "input": "col-lg-8 controls", + "error": "error has-error", + "msg-labelInfo": "help-block", + "msg-info": "help-block", + "msg-message": "help-block", + "msg-error": "help-block", + "multiValue": "well well-sm multi-value", + "multiInfo": "small", + "multiRestore": "well well-sm multi-restore" + } +} ); + +$.extend( true, DataTable.ext.buttons, { + create: { + formButtons: { + className: 'btn-primary' + } + }, + edit: { + formButtons: { + className: 'btn-primary' + } + }, + remove: { + formButtons: { + className: 'btn-danger' + } + } +} ); + +DataTable.Editor.fieldTypes.datatable.tableClass = 'table'; + +let shown = false; +let fullyShown = false; + +const dom = { + // Note that `modal-dialog-scrollable` is BS4.3+ only. It has no effect on 4.0-4.2 + content: $( + '' + ), + close: $(''+ + '' + ) +}; + +DataTable.Editor.display.bulma = $.extend( true, {}, DataTable.Editor.models.displayController, { + /* + * API methods + */ + init: function ( dte ) { + // Add `form-control` to required elements + dte.on( 'displayOrder.dtebm open.dtebm', function ( e, display, action, form ) { + $.each( dte.s.fields, function ( key, field ) { + $('input:not([type=checkbox]):not([type=radio]), select, textarea', field.node() ) + .addClass( 'input' ); + + $('input[type=checkbox], input[type=radio]', field.node() ) + .removeClass('input'); + + $('select', field.node() ) + .addClass( 'select' ) + .parent().addClass('select'); + + $('select[multiple]', field.node() ) + .parent().addClass('is-multiple'); + } ); + } ); + + return DataTable.Editor.display.bulma; + }, + + open: function ( dte, append, callback ) { + $(append).removeClass('is-hidden').addClass('is-active'); + $(append).find('.modal-title').addClass('title'); + dom.content.find('.modal-content').append(append); + dom.content.addClass('is-active is-clipped'); + + dom.content.appendTo("body"); + // Setup events on each show + $('.modal-close') + .attr('title', dte.i18n.close) + .one('click', function () { + dte.close('icon'); + }) + .appendTo($('div.modal-header', append)); + + // This is a bit horrible, but if you mousedown and then drag out of the modal container, we don't + // want to trigger a background action. + let allowBackgroundClick = false; + $(document) + .off('mousedown.dte-bs5') + .on('mousedown.dte-bs5', 'div.modal-background', function (e) { + allowBackgroundClick = $(e.target).hasClass('modal-background'); + } ); + + $(document) + .off('click.dte-bs5') + .on('click.dte-bs5', 'div.modal-background', function (e) { + if ( $(e.target).hasClass('modal-background') && allowBackgroundClick ) { + dte.background(); + } + } ); + + if ( callback ) { + callback(); + } + return; + }, + + close: function ( dte, callback ) { + dom.content + .find('.is-active') + .removeClass('is-active') + .addClass('is-hidden'); + + dom.content.removeClass('is-active is-clipped'); + if ( callback ) { + callback(); + } + }, + + node: function ( dte ) { + return dom.content[0]; + } +} ); + + +return Editor; +})); diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.min.js b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.min.js new file mode 100644 index 00000000..16e2faba --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.min.js @@ -0,0 +1,4 @@ +/*! Bulma integration for DataTables' Editor + * © SpryMedia Ltd - datatables.net/license + */ +!function(o){var a,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bm","datatables.net-editor"],function(e){return o(e,window,document)}):"object"==typeof exports?(a=require("jquery"),d=function(e,t){t.fn.dataTable||require("datatables.net-bm")(e,t),t.fn.dataTable.Editor||require("datatables.net-editor")(e,t)},"undefined"==typeof window?module.exports=function(e,t){return e=e||window,t=t||a(e),d(e,t),o(t,0,e.document)}:(d(window,a),module.exports=o(a,window,window.document))):o(jQuery,window,document)}(function(n,e,d,t){"use strict";var o=n.fn.dataTable,a=o.Editor;o.Editor.defaults.display="bulma",n.extend(!0,n.fn.dataTable.Editor.classes,{header:{wrapper:"DTE_Header modal-header",title:{tag:"h5",class:"modal-title"}},body:{wrapper:"DTE_Body modal-body"},footer:{wrapper:"DTE_Footer modal-footer"},form:{tag:"form-horizontal",button:"button",buttonInternal:"button",error:"DTE_Form_Error help is-danger"},field:{wrapper:"DTE_Field field",label:"label",error:"DTE_Field_Error help is-danger",multiValue:"card multi-value",multiInfo:"small",multiRestore:"card multi-restore"}}),n.extend(!0,o.ext.buttons,{create:{formButtons:{className:"button is-primary"}},edit:{formButtons:{className:"button is-primary"}},remove:{formButtons:{className:"button is-danger"}}}),o.Editor.fieldTypes.datatable.tableClass="table";const i={content:n('')};return o.Editor.display.bulma=n.extend(!0,{},o.Editor.models.displayController,{init:function(d){return d.on("displayOrder.dtebm open.dtebm",function(e,t,o,a){n.each(d.s.fields,function(e,t){n("input:not([type=checkbox]):not([type=radio]), select, textarea",t.node()).addClass("input"),n("input[type=checkbox], input[type=radio]",t.node()).removeClass("input"),n("select",t.node()).addClass("select").parent().addClass("select"),n("select[multiple]",t.node()).parent().addClass("is-multiple")})}),o.Editor.display.bulma},open:function(t,e,o){n(e).removeClass("is-hidden").addClass("is-active"),n(e).find(".modal-title").addClass("title"),i.content.find(".modal-content").append(e),i.content.addClass("is-active is-clipped"),i.content.appendTo("body"),n(".modal-close").attr("title",t.i18n.close).one("click",function(){t.close("icon")}).appendTo(n("div.modal-header",e));let a=!1;n(d).off("mousedown.dte-bs5").on("mousedown.dte-bs5","div.modal-background",function(e){a=n(e.target).hasClass("modal-background")}),n(d).off("click.dte-bs5").on("click.dte-bs5","div.modal-background",function(e){n(e.target).hasClass("modal-background")&&a&&t.background()}),o&&o()},close:function(e,t){i.content.find(".is-active").removeClass("is-active").addClass("is-hidden"),i.content.removeClass("is-active is-clipped"),t&&t()},node:function(e){return i.content[0]}}),a}); \ No newline at end of file diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.min.mjs b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.min.mjs new file mode 100644 index 00000000..c2abcbae --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.min.mjs @@ -0,0 +1,4 @@ +/*! Bulma integration for DataTables' Editor + * © SpryMedia Ltd - datatables.net/license + */ +import jQuery from"jquery";import DataTable from"datatables.net-bm";import Editor from"datatables.net-editor";let $=jQuery;var Editor=DataTable.Editor;DataTable.Editor.defaults.display="bulma",$.extend(!0,$.fn.dataTable.Editor.classes,{header:{wrapper:"DTE_Header modal-header",title:{tag:"h5",class:"modal-title"}},body:{wrapper:"DTE_Body modal-body"},footer:{wrapper:"DTE_Footer modal-footer"},form:{tag:"form-horizontal",button:"button",buttonInternal:"button",error:"DTE_Form_Error help is-danger"},field:{wrapper:"DTE_Field field",label:"label",error:"DTE_Field_Error help is-danger",multiValue:"card multi-value",multiInfo:"small",multiRestore:"card multi-restore"}}),$.extend(!0,DataTable.ext.buttons,{create:{formButtons:{className:"button is-primary"}},edit:{formButtons:{className:"button is-primary"}},remove:{formButtons:{className:"button is-danger"}}});let shown=!(DataTable.Editor.fieldTypes.datatable.tableClass="table"),fullyShown=!1;const dom={content:$('')};DataTable.Editor.display.bulma=$.extend(!0,{},DataTable.Editor.models.displayController,{init:function(d){return d.on("displayOrder.dtebm open.dtebm",function(e,t,a,o){$.each(d.s.fields,function(e,t){$("input:not([type=checkbox]):not([type=radio]), select, textarea",t.node()).addClass("input"),$("input[type=checkbox], input[type=radio]",t.node()).removeClass("input"),$("select",t.node()).addClass("select").parent().addClass("select"),$("select[multiple]",t.node()).parent().addClass("is-multiple")})}),DataTable.Editor.display.bulma},open:function(t,e,a){$(e).removeClass("is-hidden").addClass("is-active"),$(e).find(".modal-title").addClass("title"),dom.content.find(".modal-content").append(e),dom.content.addClass("is-active is-clipped"),dom.content.appendTo("body"),$(".modal-close").attr("title",t.i18n.close).one("click",function(){t.close("icon")}).appendTo($("div.modal-header",e));let o=!1;$(document).off("mousedown.dte-bs5").on("mousedown.dte-bs5","div.modal-background",function(e){o=$(e.target).hasClass("modal-background")}),$(document).off("click.dte-bs5").on("click.dte-bs5","div.modal-background",function(e){$(e.target).hasClass("modal-background")&&o&&t.background()}),a&&a()},close:function(e,t){dom.content.find(".is-active").removeClass("is-active").addClass("is-hidden"),dom.content.removeClass("is-active is-clipped"),t&&t()},node:function(e){return dom.content[0]}});export default Editor; \ No newline at end of file diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.mjs b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.mjs new file mode 100644 index 00000000..49ff3982 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.bulma.mjs @@ -0,0 +1,172 @@ +/*! Bulma integration for DataTables' Editor + * © SpryMedia Ltd - datatables.net/license + */ + +import jQuery from 'jquery'; +import DataTable from 'datatables.net-bm'; +import Editor from 'datatables.net-editor'; + +// Allow reassignment of the $ variable +let $ = jQuery; + +var Editor = DataTable.Editor; + +/* + * Set the default display controller to be our bulma control + */ +DataTable.Editor.defaults.display = "bulma"; + + +/* + * Change the default classes from Editor to be classes for Bulma + */ +$.extend( true, $.fn.dataTable.Editor.classes, { + "header": { + "wrapper": "DTE_Header modal-header", + title: { + tag: 'h5', + class: 'modal-title' + } + }, + "body": { + "wrapper": "DTE_Body modal-body" + }, + "footer": { + "wrapper": "DTE_Footer modal-footer" + }, + "form": { + "tag": "form-horizontal", + "button": "button", + "buttonInternal": "button", + "error": "DTE_Form_Error help is-danger" + }, + "field": { + "wrapper": "DTE_Field field", + "label": "label", + "error": "DTE_Field_Error help is-danger", + "multiValue": "card multi-value", + "multiInfo": "small", + "multiRestore": "card multi-restore" + }, +} ); + +$.extend( true, DataTable.ext.buttons, { + create: { + formButtons: { + className: 'button is-primary' + } + }, + edit: { + formButtons: { + className: 'button is-primary' + } + }, + remove: { + formButtons: { + className: 'button is-danger' + } + } +} ); + +DataTable.Editor.fieldTypes.datatable.tableClass = 'table'; + +/* + * Bulma display controller - this is effectively a proxy to the Bulma + * modal control. + */ +let shown = false; +let fullyShown = false; + +const dom = { + content: $( + '' + ) +}; + +DataTable.Editor.display.bulma = $.extend( true, {}, DataTable.Editor.models.displayController, { + /* + * API methods + */ + init: function ( dte ) { + // Add `form-control` to required elements + dte.on( 'displayOrder.dtebm open.dtebm', function ( e, display, action, form ) { + $.each( dte.s.fields, function ( key, field ) { + $('input:not([type=checkbox]):not([type=radio]), select, textarea', field.node() ) + .addClass( 'input' ); + + $('input[type=checkbox], input[type=radio]', field.node() ) + .removeClass('input'); + + $('select', field.node() ) + .addClass( 'select' ) + .parent().addClass('select'); + + $('select[multiple]', field.node() ) + .parent().addClass('is-multiple'); + } ); + } ); + + return DataTable.Editor.display.bulma; + }, + + open: function ( dte, append, callback ) { + $(append).removeClass('is-hidden').addClass('is-active'); + $(append).find('.modal-title').addClass('title'); + dom.content.find('.modal-content').append(append); + dom.content.addClass('is-active is-clipped'); + + dom.content.appendTo("body"); + // Setup events on each show + $('.modal-close') + .attr('title', dte.i18n.close) + .one('click', function () { + dte.close('icon'); + }) + .appendTo($('div.modal-header', append)); + + // This is a bit horrible, but if you mousedown and then drag out of the modal container, we don't + // want to trigger a background action. + let allowBackgroundClick = false; + $(document) + .off('mousedown.dte-bs5') + .on('mousedown.dte-bs5', 'div.modal-background', function (e) { + allowBackgroundClick = $(e.target).hasClass('modal-background'); + } ); + + $(document) + .off('click.dte-bs5') + .on('click.dte-bs5', 'div.modal-background', function (e) { + if ( $(e.target).hasClass('modal-background') && allowBackgroundClick ) { + dte.background(); + } + } ); + + if ( callback ) { + callback(); + } + return; + }, + + close: function ( dte, callback ) { + dom.content + .find('.is-active') + .removeClass('is-active') + .addClass('is-hidden'); + + dom.content.removeClass('is-active is-clipped'); + if ( callback ) { + callback(); + } + }, + + node: function ( dte ) { + return dom.content[0]; + } +} ); + + +export default Editor; diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.js b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.js new file mode 100644 index 00000000..a5b074ab --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.js @@ -0,0 +1,59 @@ +/*! DataTables styling integration for DataTables' Editor + * ©SpryMedia Ltd - datatables.net/license + */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net-dt', 'datatables.net-editor'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + var jq = require('jquery'); + var cjsRequires = function (root, $) { + if ( ! $.fn.dataTable ) { + require('datatables.net-dt')(root, $); + } + + if ( ! $.fn.dataTable.Editor ) { + require('datatables.net-editor')(root, $); + } + }; + + if (typeof window === 'undefined') { + module.exports = function (root, $) { + if ( ! root ) { + // CommonJS environments without a window global must pass a + // root. This will give an error otherwise + root = window; + } + + if ( ! $ ) { + $ = jq( root ); + } + + cjsRequires( root, $ ); + return factory( $, root, root.document ); + }; + } + else { + cjsRequires( window, jq ); + module.exports = factory( jq, window, window.document ); + } + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + + +var Editor = DataTable.Editor; + + +return Editor; +})); diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.min.js b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.min.js new file mode 100644 index 00000000..d8111120 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.min.js @@ -0,0 +1,4 @@ +/*! DataTables styling integration for DataTables' Editor + * ©SpryMedia Ltd - datatables.net/license + */ +!function(n){var d,o;"function"==typeof define&&define.amd?define(["jquery","datatables.net-dt","datatables.net-editor"],function(e){return n(e,window,document)}):"object"==typeof exports?(d=require("jquery"),o=function(e,t){t.fn.dataTable||require("datatables.net-dt")(e,t),t.fn.dataTable.Editor||require("datatables.net-editor")(e,t)},"undefined"==typeof window?module.exports=function(e,t){return e=e||window,t=t||d(e),o(e,t),n(t,0,e.document)}:(o(window,d),module.exports=n(d,window,window.document))):n(jQuery,window,document)}(function(e,t,n,d){"use strict";return e.fn.dataTable.Editor}); \ No newline at end of file diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.min.mjs b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.min.mjs new file mode 100644 index 00000000..ea3eead9 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.min.mjs @@ -0,0 +1,4 @@ +/*! DataTables styling integration for DataTables' Editor + * ©SpryMedia Ltd - datatables.net/license + */ +import jQuery from"jquery";import DataTable from"datatables.net-dt";import Editor from"datatables.net-editor";let $=jQuery;var Editor;export default Editor=DataTable.Editor; \ No newline at end of file diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.mjs b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.mjs new file mode 100644 index 00000000..c3659004 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.dataTables.mjs @@ -0,0 +1,15 @@ +/*! DataTables styling integration for DataTables' Editor + * ©SpryMedia Ltd - datatables.net/license + */ + +import jQuery from 'jquery'; +import DataTable from 'datatables.net-dt'; +import Editor from 'datatables.net-editor'; + +// Allow reassignment of the $ variable +let $ = jQuery; + +var Editor = DataTable.Editor; + + +export default Editor; diff --git a/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.foundation.js b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.foundation.js new file mode 100644 index 00000000..913d3d47 --- /dev/null +++ b/httpdocs/themes/vuexy/vendor/libs/datatable-editor/js/editor.foundation.js @@ -0,0 +1,171 @@ +/*! Foundation integration for DataTables' Editor + * © SpryMedia Ltd - datatables.net/license + */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net-zf', 'datatables.net-editor'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + var jq = require('jquery'); + var cjsRequires = function (root, $) { + if ( ! $.fn.dataTable ) { + require('datatables.net-zf')(root, $); + } + + if ( ! $.fn.dataTable.Editor ) { + require('datatables.net-editor')(root, $); + } + }; + + if (typeof window === 'undefined') { + module.exports = function (root, $) { + if ( ! root ) { + // CommonJS environments without a window global must pass a + // root. This will give an error otherwise + root = window; + } + + if ( ! $ ) { + $ = jq( root ); + } + + cjsRequires( root, $ ); + return factory( $, root, root.document ); + }; + } + else { + cjsRequires( window, jq ); + module.exports = factory( jq, window, window.document ); + } + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + + +var Editor = DataTable.Editor; + +/* + * Set the default display controller to be our foundation control + */ +DataTable.Editor.defaults.display = "foundation"; + + +/* + * Change the default classes from Editor to be classes for Foundation + */ +$.extend( true, $.fn.dataTable.Editor.classes, { + field: { + wrapper: "DTE_Field row", + label: "small-4 columns inline", + input: "small-8 columns", + error: "error", + multiValue: "panel radius multi-value", + multiInfo: "small", + multiRestore: "panel radius multi-restore", + "msg-labelInfo": "label secondary", + "msg-info": "label secondary", + "msg-message": "label secondary", + "msg-error": "label alert" + }, + form: { + button: "button small", + buttonInternal: "button small" + } +} ); + + +/* + * Foundation display controller - this is effectively a proxy to the Foundation + * modal control. + */ +var shown = false; +var reveal; + +const dom = { + content: $( + '
          ' + ), + close: $('