/*! © Fedonyuk Anton - 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; /** * @name anchor * @summary Renders the column data as HTML anchor (`a` tag) * @author [Fedonyuk Anton](http://ensostudio.ru) * @requires DataTables 1.10+ * * @param {string} type The anchor type: 'link'(by default), 'phone' or 'email' * @param {object|function} attributes The attributes of the anchor tag or the * callback function returning the tag attributes, the callback syntax: * `function (mixed data, object|array row, object meta): object` * @param {string|null} innerText The inner text of the anchor tag or `null` to * set text by column `data` (by default) * @returns {string} * * @example * // Display `...` * $('#example').DataTable({ * columnDefs: [{ * targets: 1, * render: $.fn.dataTable.render.anchor() * }] * }); * * @example * // Display `...` * $('#example').DataTable({ * columnDefs: [{ * targets: 2, * render: $.fn.dataTable.render.anchor('email', {'class': 'link'}) * }] * }); */ DataTable.render.anchor = function (type = 'link', attributes = {}, innerText = null) { return function (data, type, row, meta = {}) { // restriction only for table display rendering if (type !== 'display') { return data; } if (innerText === null) { innerText = data; } var attrs = typeof attributes === 'function' ? attributes(data, row, meta) : attributes; if (!attrs.href) { switch (type) { case 'mail': attrs.href = 'mailto:' + data; break; case 'phone': attrs.href = 'tel:' + data.replace(/[^+\d]+/g, ''); break; case 'link': default: try { attrs.href = new URL(data); } catch (e) { attrs.href = data; } } } var anchorEl = jQuery(''); return anchorEl.attr(attrs).text(innerText || '')[0].outerText; }; }; return DataTable; }));