package com.jetbrains.lang.dart.projectWizard; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.jetbrains.lang.dart.DartBundle; import com.jetbrains.lang.dart.DartLanguage; import com.jetbrains.lang.dart.util.PubspecYamlUtil; import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.charset.Charset; import java.util.Arrays; import java.util.Collection; import java.util.Locale; class WebAppTemplate extends DartProjectTemplate { public WebAppTemplate() { super(DartBundle.message("dart.web.app.title"), ""); } @Override public Collection<VirtualFile> generateProject(@NotNull final String sdkRoot, @NotNull final Module module, @NotNull final VirtualFile baseDir) throws IOException { final String projectTitle = StringUtil.toTitleCase(module.getName()); final String lowercaseName = module.getName().toLowerCase(Locale.US); final VirtualFile pubspecFile = baseDir.createChildData(this, PubspecYamlUtil.PUBSPEC_YAML); pubspecFile.setBinaryContent(("name: " + module.getName() + "\n" + "version: 0.0.1\n" + "description: A sample web application\n" + "dependencies:\n" + " browser: any\n" + "dev_dependencies:\n" + "# unittest: any\n").getBytes(Charset.forName("UTF-8"))); final VirtualFile webDir = VfsUtil.createDirectoryIfMissing(baseDir, "web"); final VirtualFile dartFile = webDir.createChildData(this, lowercaseName + ".dart"); dartFile.setBinaryContent(("import 'dart:html';\n\n" + "void main() {\n" + " querySelector('#sample_text_id')\n" + " ..text = 'Click me!'\n" + " ..onClick.listen(reverseText);\n" + "}\n\n" + "void reverseText(MouseEvent event) {\n" + " var text = querySelector('#sample_text_id').text;\n" + " var buffer = new StringBuffer();\n" + " for (int i = text.length - 1; i >= 0; i--) {\n" + " buffer.write(text[i]);\n" + " }\n" + " querySelector('#sample_text_id').text = buffer.toString();\n" + "}\n").getBytes(Charset.forName("UTF-8"))); final VirtualFile htmlFile = webDir.createChildData(this, lowercaseName + ".html"); htmlFile.setBinaryContent(("<!DOCTYPE html>\n\n" + "<html>\n" + " <head>\n" + " <meta charset=\"utf-8\">\n" + " <title>" + projectTitle + "</title>\n" + " <link rel=\"stylesheet\" href=\"" + lowercaseName + ".css\">\n" + " </head>\n" + " <body>\n" + " <h1>" + projectTitle + "</h1>\n\n" + " <p>Hello world from Dart!</p>\n\n" + " <div id=\"sample_container_id\">\n" + " <p id=\"sample_text_id\">Click me!</p>\n" + " </div>\n\n" + " <script type=\"" + DartLanguage.DART_MIME_TYPE + "\" src=\"" + lowercaseName + ".dart\"></script>\n" + " <script src=\"packages/browser/dart.js\"></script>\n" + " </body>\n" + "</html>\n").getBytes(Charset.forName("UTF-8"))); final VirtualFile cssFile = webDir.createChildData(this, lowercaseName + ".css"); cssFile.setBinaryContent(("body {\n" + " background-color: #F8F8F8;\n" + " font-family: 'Open Sans', sans-serif;\n" + " font-size: 14px;\n" + " font-weight: normal;\n" + " line-height: 1.2em;\n" + " margin: 15px;\n" + "}\n\n" + "h1, p {\n" + " color: #333;\n" + "}\n\n" + "#sample_container_id {\n" + " width: 100%;\n" + " height: 400px;\n" + " position: relative;\n" + " border: 1px solid #ccc;\n" + " background-color: #fff;\n" + "}\n\n" + "#sample_text_id {\n" + " font-size: 24pt;\n" + " text-align: center;\n" + " margin-top: 140px;\n" + " -webkit-user-select: none;\n" + " user-select: none;\n" + "}\n").getBytes(Charset.forName("UTF-8"))); createWebRunConfiguration(module, htmlFile); return Arrays.asList(pubspecFile, htmlFile, cssFile, dartFile); } }