Add CSS support to new project wizard

#KT-39770 fixed
This commit is contained in:
Ilya Goncharov
2020-06-18 18:41:47 +03:00
parent b8aff0660c
commit 5676d31a1c
3 changed files with 49 additions and 8 deletions
@@ -90,6 +90,7 @@ module.configurator.ios.requires.xcode=Requires Xcode
module.configurator.js.browser=Browser module.configurator.js.browser=Browser
module.configurator.js.node=Node.js 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=Target kind
module.configurator.js.target.settings.kind.library=Library module.configurator.js.target.settings.kind.library=Library
module.configurator.js.target.settings.kind.application=Application module.configurator.js.target.settings.kind.application=Application
@@ -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.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR 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.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.ir.buildsystem.gradle.irsList
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
@@ -48,9 +49,30 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi
): List<BuildSystemIR> = irsList { ): List<BuildSystemIR> = irsList {
"kotlin" { "kotlin" {
"js" { "js" {
+"browser {}" +"browser" {
applicationCssSupport()
testCssSupport()
}
+"binaries.executable()" +"binaries.executable()"
} }
} }
} }
}
fun GradleIRListBuilder.applicationCssSupport() {
"webpackTask" {
+"cssSupport.enabled = true"
}
"runTask" {
+"cssSupport.enabled = true"
}
}
fun GradleIRListBuilder.testCssSupport() {
"testTask" {
"useKarma" {
+"useChromeHeadless()"
+"cssSupport.enabled = true"
}
}
} }
@@ -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 package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import kotlinx.collections.immutable.toPersistentList import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.core.Reader import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.buildList 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.core.entity.settings.ModuleConfiguratorSetting
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR 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.DefaultTargetConfigurationIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetAccessIR 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.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle 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( TargetAccessIR(
moduleSubType, moduleSubType,
name.takeIf { it != moduleSubType.name } name.takeIf { it != moduleSubType.name }
@@ -75,13 +77,23 @@ interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexi
) { ) {
defaultValue = value(JsTargetKind.APPLICATION) defaultValue = value(JsTargetKind.APPLICATION)
} }
val cssSupport by booleanSetting(
KotlinNewProjectWizardBundle.message("module.configurator.js.css"),
GenerationPhase.PROJECT_GENERATION
) {
defaultValue = value(true)
}
} }
override fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> = override fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> =
super.getConfiguratorSettings() + kind super.getConfiguratorSettings() + kind + cssSupport
fun Reader.isApplication(module: Module): Boolean = fun Reader.isApplication(module: Module): Boolean =
settingsValue(module, kind) == JsTargetKind.APPLICATION settingsValue(module, kind) == JsTargetKind.APPLICATION
fun Reader.hasCssSupport(module: Module): Boolean =
settingsValue(module, cssSupport)
} }
enum class JsTargetKind(override val text: String) : DisplayableSettingItem { enum class JsTargetKind(override val text: String) : DisplayableSettingItem {
@@ -114,6 +126,12 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit
if (isApplication(module)) { if (isApplication(module)) {
+"binaries.executable()" +"binaries.executable()"
} }
if (hasCssSupport(module)) {
if (isApplication(module)) {
applicationCssSupport()
}
testCssSupport()
}
} }
} }
} }