package org.smartly.packages.velocity.impl.vtools; import org.smartly.Smartly; import org.smartly.commons.io.repository.deploy.FileDeployer; import org.smartly.commons.util.FormatUtils; import org.smartly.commons.util.PathUtils; import java.util.Collection; /** * Script utilities. * This methods are useful in javascript or html files. */ public class ScriptTool { public static final String NAME = "script"; public ScriptTool() { } public String resource(final String filename){ final boolean debug = isDebug(); return geRealFileName(debug, filename); } public String require(final String filename) { return require(isDebug(), filename); } public String require(final boolean debug, final String filename) { try { final String ext = PathUtils.getFilenameExtension(filename, true); if (".js".equalsIgnoreCase(ext)) { return requireJs(debug, filename); } else if (".css".equalsIgnoreCase(ext)) { return requireCss(debug, filename); } } catch (Throwable ignored) { } return ""; } public String requireJs(final String filename) { return requireJs(isDebug(), filename); } public String requireJs(final boolean debug, final String filename) { try { final String name = geRealFileName(debug, filename); return FormatUtils.format("<script type=\"text/javascript\" src=\"{0}\"></script>", name); } catch (Throwable ignored) { } return ""; } public String requireJs(final String filenameDebug, final String filenameMini) { try { final String name = isDebug()?filenameDebug:filenameMini; return FormatUtils.format("<script type=\"text/javascript\" src=\"{0}\"></script>", name); } catch (Throwable ignored) { } return ""; } /** * Returns a script that load a javascript library checking for modern browsers.<br/> * Useful for IE support.<br> * i.e. <code>$script.requireJsCond("/js/lib/zepto/zepto.min.js", "/js/lib/jquery/jquery-1.7.2.min.js")</code> * @param modern i.e. "zepto.js" * @param legacy i.e. "jquery.js" * @return script */ public String requireJsCond (final String modern, final String legacy) { return requireJsCond(isDebug(), modern, legacy); } public String requireJsCond (final boolean debug, final String modern, final String legacy) { try { final String name1 = geRealFileName(debug, modern); final String name2 = geRealFileName(debug, legacy); return FormatUtils.format("<script>\n" + "document.write('<script src=' +\n" + "('__proto__' in {} ? '{0}' : '{1}') +\n" + "'><\\/script>')\n" + "</script>", name1, name2); } catch (Throwable ignored) { } return ""; } public String requireCss(final String filename) { return requireCss(isDebug(), filename); } public String requireCss(final boolean debug, final String filename) { try { final String name = geRealFileName(debug, filename); return FormatUtils.format("<link rel=\"stylesheet\" href=\"{0}\"/>", name); } catch (Throwable ignored) { } return ""; } /** * Returns javascript array from java array or collection * * @param obj Array or Collection * @return javascript array */ public String toArray(final Object obj) { if (null != obj) { final StringBuilder sb = new StringBuilder(); if (obj.getClass().isArray()) { for (final Object item : (Object[]) obj) { if (sb.length() > 0) { sb.append(","); } sb.append("'").append(null != item ? item.toString() : "").append("'"); } } else if (obj instanceof Collection) { for (final Object item : (Collection) obj) { if (sb.length() > 0) { sb.append(","); } sb.append("'").append(null != item ? item.toString() : "").append("'"); } } return "[".concat(sb.toString()).concat("]"); } return "[]"; } // ------------------------------------------------------------------------ // p r i v a t e // ------------------------------------------------------------------------ private static boolean isDebug() { return Smartly.isDebugMode(); } private static String geRealFileName(final boolean debug, final String filename){ final String min_name = FileDeployer.getMiniFilename(filename); return !debug ? null!=min_name?min_name:filename : filename; } }