/** * Service which exposes various utility methods. */ angular.module('quay').factory('UtilService', ['$sanitize', function($sanitize) { var utilService = {}; utilService.isEmailAddress = function(val) { var emailRegex = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; return emailRegex.test(val); }; utilService.getMarkedDown = function(string) { return Markdown.getSanitizingConverter().makeHtml(string || ''); }; utilService.getFirstMarkdownLineAsText = function(commentString) { if (!commentString) { return ''; } var lines = commentString.split('\n'); var MARKDOWN_CHARS = { '#': true, '-': true, '>': true, '`': true }; for (var i = 0; i < lines.length; ++i) { // Skip code lines. if (lines[i].indexOf(' ') == 0) { continue; } // Skip empty lines. if ($.trim(lines[i]).length == 0) { continue; } // Skip control lines. if (MARKDOWN_CHARS[$.trim(lines[i])[0]]) { continue; } return utilService.getMarkedDown(lines[i]); } return ''; }; utilService.escapeHtmlString = function(text) { var adjusted = text.replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); return adjusted; }; utilService.getRestUrl = function(args) { var url = ''; for (var i = 0; i < arguments.length; ++i) { if (i > 0) { url += '/'; } url += encodeURI(arguments[i]) } return url; }; utilService.textToSafeHtml = function(text) { return $sanitize(utilService.escapeHtmlString(text)); }; utilService.clickElement = function(el) { // From: http://stackoverflow.com/questions/16802795/click-not-working-in-mocha-phantomjs-on-certain-elements var ev = document.createEvent("MouseEvent"); ev.initMouseEvent( "click", true /* bubble */, true /* cancelable */, window, null, 0, 0, 0, 0, /* coordinates */ false, false, false, false, /* modifier keys */ 0 /*left*/, null); el.dispatchEvent(ev); }; return utilService; }]);