diff --git a/build.gradle b/build.gradle
index bbfd7b40a55f7fa12a4f776e70dfedc9df6fc137..10f117bd0aff244e3a11bae8c9eb7c543615b6b3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -156,14 +156,13 @@ dependencies {
}
publishPlugin {
- token intellijPublishToken
+// token intellijPublishToken
}
version = "3.5.3"
patchPluginXml {
- sinceBuild = "203"
- untilBuild = "203.*"
+ sinceBuild = "211"
version = version
changeNotes = """
diff --git a/resources/wxml/elementDescriptions.json b/resources/wxml/elementDescriptions.json
index d3012f33e216cbeb745ec77b32d0432400c1a3d2..ceded7df92c3046150af407f2dbfa92af83f87d6 100644
--- a/resources/wxml/elementDescriptions.json
+++ b/resources/wxml/elementDescriptions.json
@@ -4287,5 +4287,186 @@
"canOpen": true,
"canClose": false,
"url": "https://developers.weixin.qq.com/miniprogram/dev/component/page-meta.html"
+ },
+ "share-element": {
+ "description": "共享元素,一种动画形式,类似于 flutter Hero动画,表现为元素像是在页面间穿越一样。该组件需与 page-container 组件结合使用。",
+ "attributeDescriptors": [
+ {
+ "key": "key",
+ "types": [
+ "STRING"
+ ],
+ "default": null,
+ "required": true,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "映射标记,与 page-container 中的 shar-element 对应。"
+ },
+ {
+ "key": "transform",
+ "types": [
+ "BOOLEAN"
+ ],
+ "default": false,
+ "required": false,
+ "enums": [
+ true,
+ false
+ ],
+ "requiredInEnums": true,
+ "description": "是否进行动画"
+ },
+ {
+ "key": "duration",
+ "types": [
+ "NUMBER"
+ ],
+ "default": 300,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "动画时长,单位毫秒"
+ },
+ {
+ "key": "easing-function",
+ "types": [
+ "STRING"
+ ],
+ "default": "ease-out",
+ "required": false,
+ "enums": [
+ "ease-out"
+ ],
+ "requiredInEnums": true,
+ "description": "css 缓动函数"
+ }
+ ],
+ "events": [
+ ],
+ "canOpen": true,
+ "canClose": false,
+ "url": "https://developers.weixin.qq.com/miniprogram/dev/component/share-element.html"
+ },
+ "page-container": {
+ "description": "页面容器,“假页”容器组件,效果类似于 popup 弹出层,页面内存在该容器时,当用户进行返回操作,关闭该容器不关闭页面。返回操作包括三种情形,右滑手势、安卓物理返回键和调用 navigateBack 接口。",
+ "attributeDescriptors": [
+ {
+ "key": "show",
+ "types": [
+ "BOOLEAN"
+ ],
+ "default": false,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "是否显示容器组件。"
+ },
+ {
+ "key": "duration",
+ "types": [
+ "NUMBER"
+ ],
+ "default": 300,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "动画时长,单位毫秒。"
+ },
+ {
+ "key": "z-index",
+ "types": [
+ "NUMBER"
+ ],
+ "default": 100,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "z-index 层级"
+ },
+ {
+ "key": "overlay",
+ "types": [
+ "BOOLEAN"
+ ],
+ "default": true,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "是否显示遮罩层。"
+ },
+ {
+ "key": "position",
+ "types": [
+ "STRING"
+ ],
+ "default": "bottom",
+ "required": false,
+ "enums": [
+ "top",
+ "bottom",
+ "right",
+ "center"
+ ],
+ "requiredInEnums": true,
+ "description": "弹出位置。"
+ },
+ {
+ "key": "round",
+ "types": [
+ "BOOLEAN"
+ ],
+ "default": false,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "是否显示圆角"
+ },
+ {
+ "key": "close-on-slideDown",
+ "types": [
+ "BOOLEAN"
+ ],
+ "default": false,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "是否在下滑一段距离后关闭。"
+ },
+ {
+ "key": "overlay-style",
+ "types": [
+ "STRING"
+ ],
+ "default": null,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "自定义遮罩层样式。"
+ },
+ {
+ "key": "custom-style",
+ "types": [
+ "STRING"
+ ],
+ "default": null,
+ "required": false,
+ "enums": [],
+ "requiredInEnums": true,
+ "description": "自定义弹出层样式。"
+ }
+ ],
+ "events": [
+ "bind:beforeenter",
+ "bind:enter",
+ "bind:afterenter",
+ "bind:beforeleave",
+ "bind:leave",
+ "bind:afterleave",
+ "bind:afterleave",
+ "bind:clickoverlay"
+ ],
+ "canOpen": true,
+ "canClose": false,
+ "url": "https://developers.weixin.qq.com/miniprogram/dev/component/page-container.html"
}
}
\ No newline at end of file
diff --git a/src/com/zxy/ijplugin/wechat_miniprogram/context/MyJSPredefinedLibraryProvider.kt b/src/com/zxy/ijplugin/wechat_miniprogram/context/MyJSPredefinedLibraryProvider.kt
index 26ac884ebb34ed48211a10645937fb9f9e1d13e5..7b75a107bc13da3f5d057d49d10614bfe88513ca 100644
--- a/src/com/zxy/ijplugin/wechat_miniprogram/context/MyJSPredefinedLibraryProvider.kt
+++ b/src/com/zxy/ijplugin/wechat_miniprogram/context/MyJSPredefinedLibraryProvider.kt
@@ -98,7 +98,7 @@ class MyJSPredefinedLibraryProvider : JSPredefinedLibraryProvider() {
arrayOf(
VfsUtil.findFileByURL(
ResourceUtil.getResource(
- javaClass, "/", "wx.d.ts"
+ javaClass.classLoader, "./", "wx.d.ts"
)
)
).filterNotNull().toTypedArray(),
@@ -109,7 +109,7 @@ class MyJSPredefinedLibraryProvider : JSPredefinedLibraryProvider() {
arrayOf(
VfsUtil.findFileByURL(
ResourceUtil.getResource(
- javaClass, "/", "qq.d.ts"
+ javaClass.classLoader, "./", "qq.d.ts"
)
)
).filterNotNull().toTypedArray(),
diff --git a/src/com/zxy/ijplugin/wechat_miniprogram/reference/refactoring/MoveComponentReferenceHandler.kt b/src/com/zxy/ijplugin/wechat_miniprogram/reference/refactoring/MoveComponentReferenceHandler.kt
index 6b29d8a2b306558e598f0ad3a0d50e8b4075eaaf..fe4e183a355a065d64f59443aeb23250d6e77418 100644
--- a/src/com/zxy/ijplugin/wechat_miniprogram/reference/refactoring/MoveComponentReferenceHandler.kt
+++ b/src/com/zxy/ijplugin/wechat_miniprogram/reference/refactoring/MoveComponentReferenceHandler.kt
@@ -80,6 +80,7 @@ import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiReference
+import com.intellij.psi.util.parentOfType
import com.intellij.refactoring.move.MoveCallback
import com.intellij.refactoring.move.MoveHandlerDelegate
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesHandler
@@ -93,13 +94,13 @@ import com.zxy.ijplugin.wechat_miniprogram.reference.ComponentFileReference
class MoveComponentReferenceHandler : MoveHandlerDelegate() {
override fun canMove(
- elements: Array?, targetContainer: PsiElement?, reference: PsiReference?
+ elements: Array?, targetContainer: PsiElement?, reference: PsiReference?
): Boolean {
return reference is ComponentFileReference
}
override fun doMove(
- project: Project?, elements: Array?, targetContainer: PsiElement?, callback: MoveCallback?
+ project: Project?, elements: Array?, targetContainer: PsiElement?, callback: MoveCallback?
) {
val moveFilesOrDirectoriesHandler = MoveFilesOrDirectoriesHandler()
if (moveFilesOrDirectoriesHandler.canMove(elements, targetContainer, null)) {
@@ -108,16 +109,18 @@ class MoveComponentReferenceHandler : MoveHandlerDelegate() {
}
override fun tryToMove(
- element: PsiElement?, project: Project, dataContext: DataContext, reference: PsiReference?,
- editor: Editor?
+ element: PsiElement?, project: Project, dataContext: DataContext, reference: PsiReference?,
+ editor: Editor?
): Boolean {
element ?: return false
- val componentReference = element.references.asSequence().filterIsInstance()
- .firstOrNull()
- if (element is JsonStringLiteral && componentReference != null) {
+ val componentReference = element.parentOfType()?.references?.asSequence()
+ ?.filterIsInstance()
+ ?.lastOrNull()
+ // TODO Change component registration when it moved
+ if (componentReference != null) {
this.doMove(
- project, componentReference.multiResolve(false).mapNotNull { it.element }.toTypedArray(),
- LangDataKeys.TARGET_PSI_ELEMENT.getData(dataContext), null
+ project, componentReference.multiResolve(false).mapNotNull { it.element }.toTypedArray(),
+ LangDataKeys.TARGET_PSI_ELEMENT.getData(dataContext), null
)
return true
}
diff --git a/src/com/zxy/ijplugin/wechat_miniprogram/utils/ComponentJsUtils.kt b/src/com/zxy/ijplugin/wechat_miniprogram/utils/ComponentJsUtils.kt
index b277788cdb8538125fa3076121ced2ec2d7f95c0..6a6054925f70d213202deb0ca2847ab1e9638c2c 100644
--- a/src/com/zxy/ijplugin/wechat_miniprogram/utils/ComponentJsUtils.kt
+++ b/src/com/zxy/ijplugin/wechat_miniprogram/utils/ComponentJsUtils.kt
@@ -75,7 +75,7 @@ package com.zxy.ijplugin.wechat_miniprogram.utils
import com.intellij.lang.javascript.psi.*
import com.intellij.lang.javascript.psi.impl.JSLiteralExpressionImpl
-import com.intellij.psi.util.findDescendantOfType
+import com.intellij.psi.util.descendantsOfType
object ComponentJsUtils {
@@ -113,11 +113,12 @@ object ComponentJsUtils {
* 找到js文件中的第一个component API的选项列表
*/
private fun findComponentApiOptionProperties(jsFile: JSFile): Array? {
- return jsFile.findDescendantOfType { jsCallExpression -> jsCallExpression.children.any { it is JSReferenceExpression && it.text == "Component" } }
- ?.let { jsCallExpression ->
- jsCallExpression.argumentList?.children?.asSequence()?.filterIsInstance()
- ?.firstOrNull()
- }?.properties
+ return jsFile.descendantsOfType()
+ .find { jsCallExpression -> jsCallExpression.children.any { it is JSReferenceExpression && it.text == "Component" } }
+ ?.let { jsCallExpression ->
+ jsCallExpression.argumentList?.children?.asSequence()?.filterIsInstance()
+ ?.firstOrNull()
+ }?.properties
}
/**
diff --git a/src/com/zxy/ijplugin/wechat_miniprogram/utils/ResourceUtils.kt b/src/com/zxy/ijplugin/wechat_miniprogram/utils/ResourceUtils.kt
index adad15c64dd1246591442d55284cef62fe0c2fe5..fa6243f0a78ce77ef33f834e9ed33b18e1896571 100644
--- a/src/com/zxy/ijplugin/wechat_miniprogram/utils/ResourceUtils.kt
+++ b/src/com/zxy/ijplugin/wechat_miniprogram/utils/ResourceUtils.kt
@@ -79,6 +79,12 @@ import com.intellij.util.ResourceUtil
object ResourceUtils {
fun findWXMLMetaDataFile(): VirtualFile? {
- return VfsUtil.findFileByURL(ResourceUtil.getResource(ResourceUtils.javaClass, "wxml", "elementDescriptions.json"))
+ return VfsUtil.findFileByURL(
+ ResourceUtil.getResource(
+ ResourceUtils.javaClass.classLoader,
+ "wxml",
+ "elementDescriptions.json"
+ )
+ )
}
}