diff --git a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties index 42b53160525..c11fe6aef40 100644 --- a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties +++ b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties @@ -90,6 +90,7 @@ module.configurator.ios.requires.xcode=Requires Xcode module.configurator.js.browser=Browser module.configurator.js.node=Node.js +module.configurator.js.css=CSS Support module.configurator.js.target.settings.kind=Target kind module.configurator.js.target.settings.kind.library=Library module.configurator.js.target.settings.kind.application=Application diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt index 94a702593b6..2aaf211c7cc 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.Reader import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIRListBuilder import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData @@ -48,9 +49,30 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi ): List = irsList { "kotlin" { "js" { - +"browser {}" + +"browser" { + applicationCssSupport() + testCssSupport() + } +"binaries.executable()" } } } +} + +fun GradleIRListBuilder.applicationCssSupport() { + "webpackTask" { + +"cssSupport.enabled = true" + } + "runTask" { + +"cssSupport.enabled = true" + } +} + +fun GradleIRListBuilder.testCssSupport() { + "testTask" { + "useKarma" { + +"useChromeHeadless()" + +"cssSupport.enabled = true" + } + } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt index 14ff0ae4446..35099456e0d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt @@ -1,19 +1,21 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import kotlinx.collections.immutable.toPersistentList import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.Reader - import org.jetbrains.kotlin.tools.projectWizard.core.buildList -import org.jetbrains.kotlin.tools.projectWizard.core.buildPersistenceList import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleStringConstIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetAccessIR -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsBrowserTargetConfigurator.isApplication -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsNodeTargetConfigurator.isApplication import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle @@ -60,7 +62,7 @@ interface SimpleTargetConfigurator : TargetConfigurator { } } -private fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) = +internal fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) = TargetAccessIR( moduleSubType, name.takeIf { it != moduleSubType.name } @@ -75,13 +77,23 @@ interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexi ) { defaultValue = value(JsTargetKind.APPLICATION) } + + val cssSupport by booleanSetting( + KotlinNewProjectWizardBundle.message("module.configurator.js.css"), + GenerationPhase.PROJECT_GENERATION + ) { + defaultValue = value(true) + } } override fun getConfiguratorSettings(): List> = - super.getConfiguratorSettings() + kind + super.getConfiguratorSettings() + kind + cssSupport fun Reader.isApplication(module: Module): Boolean = settingsValue(module, kind) == JsTargetKind.APPLICATION + + fun Reader.hasCssSupport(module: Module): Boolean = + settingsValue(module, cssSupport) } enum class JsTargetKind(override val text: String) : DisplayableSettingItem { @@ -114,6 +126,12 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit if (isApplication(module)) { +"binaries.executable()" } + if (hasCssSupport(module)) { + if (isApplication(module)) { + applicationCssSupport() + } + testCssSupport() + } } } }