package views.html.helper; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; import models.Post; import models.User; import org.ocpsoft.prettytime.PrettyTime; import play.api.templates.Html; import play.i18n.Lang; import play.i18n.Messages; import play.mvc.Http.Request; import com.avaje.ebean.Page; import scala.collection.mutable.StringBuilder; /** * HTML Utils * * @author hakan */ public class H { private final static Map<String, PrettyTime> prettyTimes = new HashMap<String, PrettyTime>(); private final static PrettyTime prettyTimeDefault = new PrettyTime(Locale.ENGLISH); private final static DateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm"); static { prettyTimes.put(Locale.ENGLISH.getLanguage(), new PrettyTime(Locale.ENGLISH)); prettyTimes.put(new Locale("tr").getLanguage(), new PrettyTime(new Locale("tr"))); } /** * textual representation of the given object * * @param s * object to display * @return HTML output */ public static Html string(Object s) { return new Html(new StringBuilder(s + "")); } /** * prettifies the given date using Prettytime library * * @param d * date to show * @return HTML output */ public static Html prettify(Date d) { if (d == null) return new Html(new StringBuilder()); String language = getLang().language(); PrettyTime pt = prettyTimes.get(language); if (pt == null) pt = prettyTimeDefault; String s = pt.format(d); return new Html(new StringBuilder(s)); } /** * simplifies the given date using a simple format * * @param d * date to show * @return HTML output */ public static Html simplify(Date d) { if (d == null) return new Html(new StringBuilder()); String s = simpleDateFormat.format(d); return new Html(new StringBuilder(s)); } /** * Sanitizes and replaces the given text to be used in an URL * * @param s * url to sanitize * @return sanitized URL */ public static String sanitizeURL(String s) { if (s == null) return ""; s = s.replaceAll("[\u00df]", "ss"); s = s.replaceAll("[\u00E4\u00C4]", "ae"); s = s.replaceAll("[\u011E\u011F]", "g"); s = s.replaceAll("[\u015E\u015F]", "s"); s = s.replaceAll("[\u00C7\u00E7]", "c"); s = s.replaceAll("[\u00F6\u00D6]", "o"); s = s.replaceAll("[\u00FC\u00DC]", "u"); s = s.replaceAll("[\u20AC]", "euro"); s = s.replaceAll("[\u0024]", "dollar"); s = s.replaceAll("[^A-Za-z0-9]", "_"); s = s.toLowerCase(Locale.ENGLISH); return s; } public static <T> Html paging(Page<T> page) { if (page == null) return new Html(new StringBuilder()); Lang lang = getLang(); int pageIndex = page.getPageIndex() + 1; int totalPage = page.getTotalPageCount(); return new Html(new StringBuilder(Messages.get(lang, "displaying_num_of_num_pages", pageIndex, totalPage))); } public static String getProfileImageURLWithNormalSize(User user) { return user.getProfileImageURL() + "?type=normal"; } public static String formatDateToDayAndYear(Date dateToFormat) { DateFormat df = new SimpleDateFormat("dd.MM.yyyy"); return df.format(dateToFormat); } public static String subStringWithGivenLength(String stringToCut, int length) { if (stringToCut.length() <= length) { return stringToCut; } else { return stringToCut.substring(0, length); } } public static String getKeywordsFromTopPage(Page<Post> topPostPage) { String keyword = null; for (Post post : topPostPage.getList()) { keyword += post.getTitle() + " "; } keyword += Messages.get("Project_definition_keywords"); return subStringWithGivenLength(keyword.replace(" ", ","), 300); } private static Lang getLang() { Lang lang = null; if (play.mvc.Http.Context.current.get() != null) { lang = play.mvc.Http.Context.Implicit.lang(); } else { Locale defaultLocale = Locale.getDefault(); lang = new Lang(new play.api.i18n.Lang(defaultLocale.getLanguage(), defaultLocale.getCountry())); } return lang; } public static Html requestUrl() { StringBuilder sb = new StringBuilder(); Request req = play.mvc.Http.Context.current().request(); if (req != null) { sb.append("http://").append(req.host()).append(req.uri()); } return new Html(sb); } }