* Calculate the 'type' of a column * @param {object} settings dataTables settings object * @memberof DataTable#oApi
(settings)
| 2118 | * @memberof DataTable#oApi |
| 2119 | */ |
| 2120 | function _fnColumnTypes(settings) { |
| 2121 | var columns = settings.aoColumns |
| 2122 | var data = settings.aoData |
| 2123 | var types = DataTable.ext.type.detect |
| 2124 | var i, ien, j, jen, k, ken |
| 2125 | var col, detectedType, cache |
| 2126 | |
| 2127 | // For each column, spin over the data type detection functions, seeing if one matches |
| 2128 | for (i = 0, ien = columns.length; i < ien; i++) { |
| 2129 | col = columns[i] |
| 2130 | cache = [] |
| 2131 | |
| 2132 | if (!col.sType && col._sManualType) { |
| 2133 | col.sType = col._sManualType |
| 2134 | } else if (!col.sType) { |
| 2135 | // With SSP type detection can be unreliable and error prone, so we provide a way |
| 2136 | // to turn it off. |
| 2137 | if (!settings.typeDetect) { |
| 2138 | return |
| 2139 | } |
| 2140 | |
| 2141 | for (j = 0, jen = types.length; j < jen; j++) { |
| 2142 | var typeDetect = types[j] |
| 2143 | |
| 2144 | // There can be either one, or three type detection functions |
| 2145 | var oneOf = typeDetect.oneOf |
| 2146 | var allOf = typeDetect.allOf || typeDetect |
| 2147 | var init = typeDetect.init |
| 2148 | var one = false |
| 2149 | |
| 2150 | detectedType = null |
| 2151 | |
| 2152 | // Fast detect based on column assignment |
| 2153 | if (init) { |
| 2154 | detectedType = _typeResult(typeDetect, init(settings, col, i)) |
| 2155 | |
| 2156 | if (detectedType) { |
| 2157 | col.sType = detectedType |
| 2158 | break |
| 2159 | } |
| 2160 | } |
| 2161 | |
| 2162 | for (k = 0, ken = data.length; k < ken; k++) { |
| 2163 | if (!data[k]) { |
| 2164 | continue |
| 2165 | } |
| 2166 | |
| 2167 | // Use a cache array so we only need to get the type data |
| 2168 | // from the formatter once (when using multiple detectors) |
| 2169 | if (cache[k] === undefined) { |
| 2170 | cache[k] = _fnGetCellData(settings, k, i, "type") |
| 2171 | } |
| 2172 | |
| 2173 | // Only one data point in the column needs to match this function |
| 2174 | if (oneOf && !one) { |
| 2175 | one = _typeResult(typeDetect, oneOf(cache[k], settings)) |
| 2176 | } |
| 2177 |
no test coverage detected