| 228 | module.exports = function(window, less, options) { |
| 229 | |
| 230 | function errorHTML(e, rootHref) { |
| 231 | var id = 'less-error-message:' + utils.extractId(rootHref || ""); |
| 232 | var template = '<li><label>{line}</label><pre class="{class}">{content}</pre></li>'; |
| 233 | var elem = window.document.createElement('div'), timer, content, errors = []; |
| 234 | var filename = e.filename || rootHref; |
| 235 | var filenameNoPath = filename.match(/([^\/]+(\?.*)?)$/)[1]; |
| 236 | |
| 237 | elem.id = id; |
| 238 | elem.className = "less-error-message"; |
| 239 | |
| 240 | content = '<h3>' + (e.type || "Syntax") + "Error: " + (e.message || 'There is an error in your .less file') + |
| 241 | '</h3>' + '<p>in <a href="' + filename + '">' + filenameNoPath + "</a> "; |
| 242 | |
| 243 | var errorline = function (e, i, classname) { |
| 244 | if (e.extract[i] !== undefined) { |
| 245 | errors.push(template.replace(/\{line\}/, (parseInt(e.line, 10) || 0) + (i - 1)) |
| 246 | .replace(/\{class\}/, classname) |
| 247 | .replace(/\{content\}/, e.extract[i])); |
| 248 | } |
| 249 | }; |
| 250 | |
| 251 | if (e.extract) { |
| 252 | errorline(e, 0, ''); |
| 253 | errorline(e, 1, 'line'); |
| 254 | errorline(e, 2, ''); |
| 255 | content += 'on line ' + e.line + ', column ' + (e.column + 1) + ':</p>' + |
| 256 | '<ul>' + errors.join('') + '</ul>'; |
| 257 | } |
| 258 | if (e.stack && (e.extract || options.logLevel >= 4)) { |
| 259 | content += '<br/>Stack Trace</br />' + e.stack.split('\n').slice(1).join('<br/>'); |
| 260 | } |
| 261 | elem.innerHTML = content; |
| 262 | |
| 263 | // CSS for error messages |
| 264 | browser.createCSS(window.document, [ |
| 265 | '.less-error-message ul, .less-error-message li {', |
| 266 | 'list-style-type: none;', |
| 267 | 'margin-right: 15px;', |
| 268 | 'padding: 4px 0;', |
| 269 | 'margin: 0;', |
| 270 | '}', |
| 271 | '.less-error-message label {', |
| 272 | 'font-size: 12px;', |
| 273 | 'margin-right: 15px;', |
| 274 | 'padding: 4px 0;', |
| 275 | 'color: #cc7777;', |
| 276 | '}', |
| 277 | '.less-error-message pre {', |
| 278 | 'color: #dd6666;', |
| 279 | 'padding: 4px 0;', |
| 280 | 'margin: 0;', |
| 281 | 'display: inline-block;', |
| 282 | '}', |
| 283 | '.less-error-message pre.line {', |
| 284 | 'color: #ff0000;', |
| 285 | '}', |
| 286 | '.less-error-message h3 {', |
| 287 | 'font-size: 20px;', |