package org.apache.sling.webresource.util;
import java.util.Map;
import org.apache.sling.commons.json.JSONObject;
import org.apache.sling.webresource.model.GlobalCompileOptions;
public class ScriptUtils {
/**
* Transforms a java multi-line string into javascript multi-line string.
* This technique was found at {@link http
* ://stackoverflow.com/questions/805107/multiline-strings-in-javascript/}
*
* @param data
* a string containing new lines.
* @return a string which being evaluated on the client-side will be treated
* as a correct multi-line string.
*/
public static String toJSMultiLineString(final String data) {
final String[] lines = data.split("\n");
final StringBuffer result = new StringBuffer("[");
if (lines.length == 0) {
result.append("\"\"");
}
for (int i = 0; i < lines.length; i++) {
final String line = lines[i];
result.append("\"");
result.append(line.replace("\\", "\\\\").replace("\"", "\\\"")
.replaceAll("\\r|\\n", ""));
// this is used to force a single line to have at least one new line
// (otherwise cssLint fails).
if (lines.length == 1) {
result.append("\\n");
}
result.append("\"");
if (i < lines.length - 1) {
result.append(",");
}
}
result.append("].join(\"\\n\")");
return result.toString();
}
/**
*
* Change compile options into a string
*
* @param compileOptions
* @return
*/
public static String generateCompileOptionsString(
Map<String, Object> compileOptions) {
JSONObject keysJson = new JSONObject(compileOptions);
return keysJson.toString();
}
/**
*
* Gets global compile options.
*
* @param compileOptions
* @return
*/
public static GlobalCompileOptions getGlobalCompileOptions(
Map<String, Object> compileOptions) {
GlobalCompileOptions result = null;
if (compileOptions != null) {
result = (GlobalCompileOptions) compileOptions.get("global");
}
return result;
}
}