Files
Jyotisha/jyotish-app/glossary.js
T
732642856 2457e23271 feat: Jyotish Web App v4.3 完整印度占星前端应用
技术栈: Vite + 原生HTML/JS/CSS + swisseph-wasm
功能模块:
- 排盘引擎: 行星/宫位/Dasha/Yoga/相位/燃烧检测/130+城市
- 高级计算: Karaka/Arudha/16分盘/Ashtakavarga/Shadbala/Panchanga/Chara Dasha
- 73个Yoga识别 (Pancha Mahapurusha + 扩展A/B)
- 生时校正v2.0: K.N.Rao方法论, 多维评分
- Transit v2.0: 日期选择/全行星/AV评分/Sade Sati
- 深度分析7子模块 + 扩展分析5子模块
- 导出v2.0: JSON 100%覆盖Python 13模块 + SVG/PNG
- i18n中英双语 + 点读机95词条 + AI聊天面板
- 认证+订阅 (JWT/Apple Sign-In/IAP)
- 浅色极简主题 (fatetell.com风格)
2026-04-30 03:51:30 +08:00

338 lines
28 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Jyotish Glossary v2.0 — "点读机"系统
* 点击任何文本 → 自动匹配术语 → 弹出解释
*/
export const G = {
Sun:{sk:'Surya',cn:'太阳',en:'Sun',cat:'graha',desc:'代表自我、灵魂、生命力、权威、父亲。强旺者自信、领导力强;受克则自我中心。'},
Moon:{sk:'Chandra',cn:'月亮',en:'Moon',cat:'graha',desc:'代表心智、情感、直觉、母亲。月亮的星座揭示内在情感需求。强旺者善解人意;受克则情绪不稳。'},
Mars:{sk:'Mangala',cn:'火星',en:'Mars',cat:'graha',desc:'代表行动力、勇气、竞争、体力。强旺者果断勇敢;受克则暴躁冲动。在婚姻匹配中至关重要。'},
Mercury:{sk:'Budha',cn:'水星',en:'Mercury',cat:'graha',desc:'代表智力、沟通、商业、分析。最灵活的"王子"行星。强旺者口才好;受克则优柔寡断。'},
Jupiter:{sk:'Guru',cn:'木星',en:'Jupiter',cat:'graha',desc:'最大吉星(Great Benefic)。代表智慧、信仰、子女、财富。女性盘中代表丈夫。强旺者慷慨乐观。'},
Venus:{sk:'Shukra',cn:'金星',en:'Venus',cat:'graha',desc:'代表爱情、美感、艺术、婚姻。男性盘中代表妻子。强旺者有品味、浪漫;受克则虚荣。'},
Saturn:{sk:'Shani',cn:'土星',en:'Saturn',cat:'graha',desc:'代表纪律、责任、考验、时间。"法官"行星,掌管因果业力。强旺者自律;受克则拖延悲观。'},
Rahu:{sk:'Rahu',cn:'北交点/罗睺',en:'Rahu',cat:'graha',desc:'月亮北交点,代表欲望、执念、创新、跨领域突破。像放大镜放大触及的能量。'},
Ketu:{sk:'Ketu',cn:'南交点/计都',en:'Ketu',cat:'graha',desc:'月亮南交点,代表解脱、灵性、直觉、前世课题。与Rahu相对——Rahu"想要"Ketu"已拥有"。'},
H1:{sk:'Lagna Bhava',cn:'第一宫·命宫',en:'1st House',cat:'bhava',desc:'代表自我、身体、性格、人生方向。整个星盘的"起点",上升星座决定基础气质。'},
H2:{sk:'Dhana Bhava',cn:'第二宫·财帛宫',en:'2nd House',cat:'bhava',desc:'代表财富、收入、家庭、语言能力。直接反映经济状况。也是Maraka(致命宫)。'},
H3:{sk:'Sahaja Bhava',cn:'第三宫·兄弟宫',en:'3rd House',cat:'bhava',desc:'代表兄弟姐妹、短途旅行、沟通、勇气、努力。展示如何通过主动行动获得成就。'},
H4:{sk:'Sukha Bhava',cn:'第四宫·田宅宫',en:'4th House',cat:'bhava',desc:'代表家庭、母亲、房产、教育、内心平静。"幸福宫",反映内在安全感和归属感。'},
H5:{sk:'Putra Bhava',cn:'第五宫·子女宫',en:'5th House',cat:'bhava',desc:'代表子女、创造力、恋爱、投资、智力。星盘中最"甜美"的宫位之一。'},
H6:{sk:'Ripu Bhava',cn:'第六宫·奴仆宫',en:'6th House',cat:'bhava',desc:'代表疾病、敌人、债务、竞争。Dusthana凶宫,但也代表克服困难的能力。'},
H7:{sk:'Kalatra Bhava',cn:'第七宫·夫妻宫',en:'7th House',cat:'bhava',desc:'代表婚姻、合作关系、配偶。"关系宫",直接反映婚姻质量和配偶特质。'},
H8:{sk:'Randhra Bhava',cn:'第八宫·疾厄宫',en:'8th House',cat:'bhava',desc:'代表长寿、遗产、神秘学、转化。最"神秘"的宫位,掌管人生重大转变。'},
H9:{sk:'Dharma Bhava',cn:'第九宫·迁移宫',en:'9th House',cat:'bhava',desc:'代表宗教、哲学、长途旅行、导师、运气。最重要的三合宫(Trikona)之一。'},
H10:{sk:'Karma Bhava',cn:'第十宫·官禄宫',en:'10th House',cat:'bhava',desc:'代表事业、社会地位、名声、成就。星盘中最"公共"的宫位。'},
H11:{sk:'Labha Bhava',cn:'第十一宫·福德宫',en:'11th House',cat:'bhava',desc:'代表收入、愿望实现、朋友。"收入宫",反映通过事业获得的回报。'},
H12:{sk:'Vyaya Bhava',cn:'第十二宫·玄秘宫',en:'12th House',cat:'bhava',desc:'代表损失、支出、灵性修行、海外。Dusthana凶宫,但也代表灵性觉醒。'},
Aries:{sk:'Mesha',cn:'白羊座',en:'Aries',cat:'rashi',desc:'火象星座,火星守护。代表新开始、勇气、行动力。太阳在此10°入旺,土星在此落陷。'},
Taurus:{sk:'Vrishabha',cn:'金牛座',en:'Taurus',cat:'rashi',desc:'土象星座,金星守护。代表稳定、财富、感官享受。月亮在此3°入旺(最强月亮位置)。'},
Gemini:{sk:'Mithuna',cn:'双子座',en:'Gemini',cat:'rashi',desc:'风象星座,水星守护。代表沟通、学习、多变。Rahu在此入旺。'},
Cancer:{sk:'Karka',cn:'巨蟹座',en:'Cancer',cat:'rashi',desc:'水象星座,月亮守护。代表情感、家庭、安全感。木星在此入旺,火星在此落陷。'},
Leo:{sk:'Simha',cn:'狮子座',en:'Leo',cat:'rashi',desc:'火象星座,太阳守护。代表创造力、领导力、王者风范。'},
Virgo:{sk:'Kanya',cn:'处女座',en:'Virgo',cat:'rashi',desc:'土象星座,水星守护。代表分析、服务、健康。水星在此15°入旺,金星在此落陷。'},
Libra:{sk:'Tula',cn:'天秤座',en:'Libra',cat:'rashi',desc:'风象星座,金星守护。代表平衡、关系、和谐。土星在此20°入旺,太阳在此落陷。'},
Scorpio:{sk:'Vrischika',cn:'天蝎座',en:'Scorpio',cat:'rashi',desc:'水象星座,火星守护。代表深度转化、秘密、重生。月亮在此落陷。'},
Sagittarius:{sk:'Dhanu',cn:'射手座',en:'Sagittarius',cat:'rashi',desc:'火象星座,木星守护。代表哲学、宗教、长途旅行、追求真理。'},
Capricorn:{sk:'Makara',cn:'摩羯座',en:'Capricorn',cat:'rashi',desc:'土象星座,土星守护。代表纪律、事业、结构。火星在此28°入旺,木星在此落陷。'},
Aquarius:{sk:'Kumbha',cn:'水瓶座',en:'Aquarius',cat:'rashi',desc:'风象星座,土星守护。代表创新、集体、人道主义、未来愿景。'},
Pisces:{sk:'Meena',cn:'双鱼座',en:'Pisces',cat:'rashi',desc:'水象星座,木星守护。代表灵性、直觉、想象力。金星在此27°入旺,水星在此落陷。'},
Exaltation:{sk:'Uccha',cn:'入旺',en:'Exaltation',cat:'status',desc:'行星最强位置。如太阳在白羊10°、月亮在金牛3°入旺。入旺行星赋予极强正面影响。'},
Debilitation:{sk:'Neecha',cn:'落陷',en:'Debilitation',cat:'status',desc:'行星最弱位置。位于入旺星座的对冲位置。但也有"落陷取消"(Neecha Bhanga)的可能。'},
OwnSign:{sk:'Swa Kshetra',cn:'入庙',en:'Own Sign',cat:'status',desc:'行星在守护的星座中。如火星在白羊或天蝎。能量稳定、正面,仅次于入旺。'},
Combustion:{sk:'Asta',cn:'燃烧',en:'Combustion',cat:'status',desc:'行星距太阳太近被"灼烧",功能被压制。水星和金星最容易被燃烧。'},
Retrograde:{sk:'Vakri',cn:'逆行',en:'Retrograde',cat:'status',desc:'行星看似"倒退"。逆行行星力量更强(Chesta Bala),但表达更内向反思。'},
Nakshatra:{sk:'Nakshatra',cn:'星宿',en:'Lunar Mansion',cat:'concept',desc:'27个月亮星宿,每个跨13°20\',由守护行星掌管。月亮所在Nakshatra决定思维模式,也是Dasha计算基础。'},
Karaka:{sk:'Karaka',cn:'征象星',en:'Significator',cat:'concept',desc:'"指示者"。按度数排列:AK(灵魂目标)、AmK(事业)、BK(兄弟)、MK(母亲)、PK(子女)、GK(障碍)、DK(配偶)。'},
Arudha:{sk:'Arudha',cn:'映像/表象',en:'Image',cat:'concept',desc:'Jaimini概念。Arudha Lagna代表世人眼中的形象(与真实Lagna不同)。'},
Ashtakavarga:{sk:'Ashtakavarga',cn:'八分法',en:'Eight-fold Division',cat:'concept',desc:'Transit评估系统。7行星+上升的"吉星贡献"量化为Bindu分数。SAV总分337,≥30吉利,<20挑战。'},
Shadbala:{sk:'Shadbala',cn:'六维力量',en:'Six-fold Strength',cat:'concept',desc:'行星综合力量评估:位置/方向/时间/运动/自然/相位六维度。达标率≥100%为强。'},
Dasha:{sk:'Dasha',cn:'大运',en:'Planetary Period',cat:'concept',desc:'Jyotish独有时间系统。三级:Maha大运(数年)→Antar次运(数月)→Pratyantar三运(数天)。'},
MahaDasha:{sk:'Maha Dasha',cn:'大运',en:'Major Period',cat:'concept',desc:'Vimshottari第一级。Ketu7/Venus20/Sun6/Moon10/Mars7/Rahu18/Jupiter16/Saturn19/Mercury17年。'},
Antardasha:{sk:'Antardasha',cn:'次运',en:'Sub-period',cat:'concept',desc:'Dasha第二级。与大运行星的相互关系决定实际体验。'},
Pratyantardasha:{sk:'Pratyantardasha',cn:'三运',en:'Sub-sub-period',cat:'concept',desc:'Dasha第三级。持续数天到数月,是事件定时的关键工具。'},
Yoga:{sk:'Yoga',cn:'格局',en:'Combination',cat:'concept',desc:'特定行星排列产生的特殊影响。分吉Yoga(Raja/Dhana)和凶Yoga(Daridra/Kemadruma)。'},
Yogakaraka:{sk:'Yogakaraka',cn:'王者行星',en:'Yoga-producing',cat:'concept',desc:'同时守护角宫(Kendra)和三合宫(Trikona)的行星。无论在哪都能带来极好结果。'},
Vargottama:{sk:'Vargottama',cn:'同座(D1=D9)',en:'Same in D1 & D9',cat:'concept',desc:'行星在D1和D9同星座,能量放大。吉星加倍吉,凶星加倍凶。'},
PACDARES:{sk:'PACDARES',cn:'八维分析',en:'8-dimension',cat:'concept',desc:'K.N.Rao体系:Position位置/Aspect相位/Conjunction合相/Dhana财富/Arishta凶象/Raja王者/Exchange互换/Special特殊。'},
GrahaDrishti:{sk:'Graha Drishti',cn:'行星相位',en:'Planetary Aspect',cat:'concept',desc:'所有行星第7宫相位。Mars额外4/8宫,Jupiter 5/9宫,Saturn 3/10宫。'},
SadeSati:{sk:'Sade Sati',cn:'土星七年半',en:'7.5yr Saturn Cycle',cat:'concept',desc:'Transit土星经过月亮星座及前后星座的7.5年。三阶段各2.5年,约每30年一次。'},
Transit:{sk:'Gochara',cn:'行星过境/推运',en:'Transit',cat:'concept',desc:'当前天空行星实时位置对本命盘的影响。慢星(Saturn~2.5年/宫、Jupiter~1年/宫)影响最大。'},
Panchanga:{sk:'Panchanga',cn:'五要素历法',en:'Five Elements',cat:'concept',desc:'Vara星期/Tithi月相/Nakshatra星宿/Yoga日月瑜伽/Karana半月相。用于择日和评估出生能量。'},
Varga:{sk:'Varga',cn:'分盘',en:'Divisional Chart',cat:'concept',desc:'星座细分生成独立星盘。D1本命/D9婚姻/D10事业/D7子女/D12父母等。'},
Ayanamsa:{sk:'Ayanamsa',cn:'岁差',en:'Precession',cat:'concept',desc:'恒星黄道与回归黄道差距(~24°)。Jyotish使用恒星黄道,最常用Lahiri Ayanamsa。'},
Lagna:{sk:'Lagna',cn:'上升/命度',en:'Ascendant',cat:'concept',desc:'出生时刻东方地平线对应的黄道点。决定所有宫位划分。守护星Lagnesha是星盘最关键行星。'},
Maraka:{sk:'Maraka',cn:'致命星',en:'Killer Planet',cat:'concept',desc:'第2/7宫守护星。在长寿和健康分析中需特别关注其Dasha和Transit。'},
Trikona:{sk:'Trikona',cn:'三合宫(1/5/9)',en:'Trine',cat:'concept',desc:'第1/5/9宫,最吉祥三宫位,代表Dharma正道。守护星良好关系预示极大好运。'},
Kendra:{sk:'Kendra',cn:'角宫(1/4/7/10)',en:'Angular',cat:'concept',desc:'最有力的四宫位,代表人生核心支柱。角宫+三合宫主星结合形成最强大Raja Yoga。'},
Dusthana:{sk:'Dusthana',cn:'凶宫(6/8/12)',en:'Evil Houses',cat:'concept',desc:'带来挑战的宫位。6宫克服困难,8宫研究遗产,12宫灵性海外。'},
BhavaBala:{sk:'Bhava Bala',cn:'宫位强度',en:'House Strength',cat:'concept',desc:'宫位综合强度评估:宫主星力量/方向力量/相位力量。'},
Vimsopaka:{sk:'Vimsopaka Bala',cn:'二十分力量',en:'20-point Strength',cat:'concept',desc:'行星在不同分盘中综合尊严评分。满分20,入旺/入庙=20,大友=18,友=15。'},
Avastha:{sk:'Avastha',cn:'行星状态',en:'Planet State',cat:'concept',desc:'行星状态维度:Activity(觉醒/梦境/沉睡)、Age(幼/青/成/老)、Mood(喜悦/愤怒/平静)。'},
DoubleTransit:{sk:'Double Transit',cn:'双重过境锁定',en:'Double Transit Lock',cat:'concept',desc:'两颗慢星(Saturn+Jupiter)同时通过相位影响同一宫位,形成"锁定",预示重大事件。'},
Navamsa:{sk:'Navamsa (D9)',cn:'九分盘',en:'9th Division',cat:'concept',desc:'最重要分盘。D9反映婚姻、内在力量和后半生。"D1是树,D9是果实"。'},
Dasamsa:{sk:'Dasamsa (D10)',cn:'十分盘',en:'10th Division',cat:'concept',desc:'事业分盘。D1显示事业潜力,D10揭示实际表现。'},
Raman:{sk:'B.V. Raman',cn:'B.V. Raman 方法',en:'Raman Method',cat:'concept',desc:'20世纪最著名Jyotish大师。功能吉凶星表+宫位六步评级法(A-F)。'},
SAV:{sk:'SAV',cn:'SAV 综合八分法',en:'Total AV Score',cat:'concept',desc:'所有BAV分数总和。每个星座最高56分,≥30吉利,<20挑战。'},
Rashi:{sk:'Rashi',cn:'星座',en:'Zodiac Sign',cat:'concept',desc:'黄道12等分,每宫30°。分火/土/风/水四组。'},
Conjunction:{sk:'Yuti',cn:'合相',en:'Conjunction',cat:'concept',desc:'两颗或多颗行星落在同一星座/宫位。能量交织融合,紧密合相影响力更大。'},
Benefic:{sk:'Shubha',cn:'吉星',en:'Benefic',cat:'concept',desc:'天然吉星:Jupiter(大吉)、Venus(小吉)、饱满Moon、未受克Mercury。功能吉星取决于上升。'},
Malefic:{sk:'Papa',cn:'凶星',en:'Malefic',cat:'concept',desc:'天然凶星:Saturn(大凶)、Mars(小凶)、Rahu、Ketu。功能凶星取决于上升。'},
HouseLord:{sk:'Bhavesha',cn:'宫主星',en:'House Lord',cat:'concept',desc:'守护某宫对应星座的行星。宫主星位置和状态决定该宫事务的成败。'},
Aspect:{sk:'Drishti',cn:'相位',en:'Aspect',cat:'concept',desc:'行星对特定宫位的"注视"。所有行星第7宫相位,Mars额外4/8Jupiter 5/9Saturn 3/10。'},
Upachaya:{sk:'Upachaya',cn:'成长宫(3/6/10/11)',en:'Growth Houses',cat:'concept',desc:'随时间改善的宫位。凶星在此反而能发挥正面作用。'},
D1:{sk:'Rasi Chart',cn:'本命盘(D1)',en:'Birth Chart',cat:'concept',desc:'最基础的星盘,显示出生时所有行星位置。是所有分析的根基。'},
D9:{sk:'Navamsa',cn:'九分盘(D9)',en:'9th Division',cat:'concept',desc:'最重要分盘,反映婚姻和内在力量。'},
D10:{sk:'Dasamsa',cn:'十分盘(D10)',en:'10th Division',cat:'concept',desc:'事业分盘,分析事业成就和职业方向。'},
Tithi:{sk:'Tithi',cn:'月相',en:'Lunar Day',cat:'concept',desc:'月亮与太阳角距,每月30个。分盈月(Shukla)和亏月(Krishna)各15个。'},
Vara:{sk:'Vara',cn:'星期',en:'Weekday',cat:'concept',desc:'每天由行星守护:周日Sun/周一Moon/周二Mars/周三Mercury/周四Jupiter/周五Venus/周六Saturn。'},
Paksha:{sk:'Paksha',cn:'月相期',en:'Lunar Phase',cat:'concept',desc:'盈月(Shukla)代表增长开始,亏月(Krishna)代表减少完成。'},
Bindu:{sk:'Bindu',cn:'分数点',en:'Point',cat:'concept',desc:'Ashtakavarga中的基本单位,代表行星对某星座的"吉星贡献"。'},
BAV:{sk:'Bhinnashtakavarga',cn:'BAV 单星八分法',en:'Individual AV',cat:'concept',desc:'每颗行星各自的Ashtakavarga分数表(0-8)。'},
RajaYoga:{sk:'Raja Yoga',cn:'王者格局',en:'Royal Combination',cat:'concept',desc:'角宫+三合宫主星关联时形成,预示权力、地位和重大成就。'},
DhanaYoga:{sk:'Dhana Yoga',cn:'财富格局',en:'Wealth Combination',cat:'concept',desc:'2/11宫主星与1/5/9宫主星关联时形成,预示经济富裕。'},
Lagnesha:{sk:'Lagnesha',cn:'命主星',en:'Ascendant Lord',cat:'concept',desc:'上升星座守护行星,星盘中最关键的行星,决定整体人生基调。'},
Atmakaraka:{sk:'Atmakaraka',cn:'灵魂目标星(AK)',en:'Soul Planet',cat:'concept',desc:'度数最高的行星,代表此生灵魂的最高目标和课题。'},
Darakaraka:{sk:'Darakaraka',cn:'配偶征象星(DK)',en:'Spouse Planet',cat:'concept',desc:'度数最低的行星(7K),代表配偶的特质和关系模式。'},
Amatyakaraka:{sk:'Amatyakaraka',cn:'事业征象星(AmK)',en:'Minister Planet',cat:'concept',desc:'度数第二高的行星,代表事业方向和职业路径。'},
Mahapurusha:{sk:'Pancha Mahapurusha',cn:'五大伟人格局',en:'5 Great Yogas',cat:'concept',desc:'Hamsa/Malavya/Ruchaka/Bhadra/Shasha五种吉Yoga。入旺或入庙行星落角宫时形成。'},
Neechabhanga:{sk:'Neechabhanga',cn:'落陷取消',en:'Cancellation of Debilitation',cat:'concept',desc:'落陷被特定条件取消反而形成强大Raja Yoga——"最黑暗处有最光明"。'},
FunctionalBenefic:{sk:'Functional Benefic',cn:'功能吉星',en:'Functional Benefic',cat:'concept',desc:'守护角宫和三合宫的行星。每个上升的功能吉凶星不同。'},
FunctionalMalefic:{sk:'Functional Malefic',cn:'功能凶星',en:'Functional Malefic',cat:'concept',desc:'守护凶宫(6/8/12)的行星。某些天然吉星可能成为功能凶星。'},
};
// ===== 术语匹配表(长度降序,长优先) =====
export const TERM_BINDINGS = (() => {
const raw = [
['北交点/罗睺','Rahu'],['南交点/计都','Ketu'],['北交点','Rahu'],['南交点','Ketu'],
['太阳','Sun'],['月亮','Moon'],['火星','Mars'],['水星','Mercury'],['木星','Jupiter'],['金星','Venus'],['土星','Saturn'],
['Jupiter','Jupiter'],['Mercury','Mercury'],['Saturn','Saturn'],['Venus','Venus'],
['Mars','Mars'],['Moon','Moon'],['Sun','Sun'],['Rahu','Rahu'],['Ketu','Ketu'],
['白羊座','Aries'],['金牛座','Taurus'],['双子座','Gemini'],['巨蟹座','Cancer'],
['狮子座','Leo'],['处女座','Virgo'],['天秤座','Libra'],['天蝎座','Scorpio'],
['射手座','Sagittarius'],['摩羯座','Capricorn'],['水瓶座','Aquarius'],['双鱼座','Pisces'],
['Sagittarius','Sagittarius'],['Capricorn','Capricorn'],['Aquarius','Aquarius'],['Pisces','Pisces'],
['Aries','Aries'],['Taurus','Taurus'],['Gemini','Gemini'],['Cancer','Cancer'],
['Leo','Leo'],['Virgo','Virgo'],['Libra','Libra'],['Scorpio','Scorpio'],
['入旺','Exaltation'],['落陷','Debilitation'],['入庙','OwnSign'],['燃烧','Combustion'],['逆行','Retrograde'],
['Nakshatra','Nakshatra'],['Ashtakavarga','Ashtakavarga'],['Shadbala','Shadbala'],
['Vargottama','Vargottama'],['PACDARES','PACDARES'],['Yogakaraka','Yogakaraka'],
['Double Transit','DoubleTransit'],['Graha Drishti','GrahaDrishti'],
['Sade Sati','SadeSati'],['Bhava Bala','BhavaBala'],
['Panchanga','Panchanga'],['Navamsa','Navamsa'],['Dasamsa','Dasamsa'],
['Vimsopaka','Vimsopaka'],['Avastha','Avastha'],['Ayanamsa','Ayanamsa'],
['Karaka','Karaka'],['Arudha','Arudha'],['Transit','Transit'],
['Dasha','Dasha'],['Yoga','Yoga'],['Maraka','Maraka'],['SAV','SAV'],['Raman','Raman'],
['Rashi','Rashi'],['星座','Rashi'],['合相','Conjunction'],['吉星','Benefic'],['凶星','Malefic'],
['宫主星','HouseLord'],['相位','Aspect'],['成长宫','Upachaya'],
['本命盘','D1'],['九分盘','D9'],['十分盘','D10'],['分盘','Varga'],
['月相期','Paksha'],['分数点','Bindu'],['BAV','BAV'],
['王者格局','RajaYoga'],['财富格局','DhanaYoga'],
['命主星','Lagnesha'],['灵魂目标','Atmakaraka'],['配偶征象','Darakaraka'],['事业征象','Amatyakaraka'],
['五大伟人','Mahapurusha'],['落陷取消','Neechabhanga'],
['功能吉星','FunctionalBenefic'],['功能凶星','FunctionalMalefic'],
['角宫','Kendra'],['三合宫','Trikona'],['凶宫','Dusthana'],
['宫位强度','BhavaBala'],['八维','PACDARES'],
['大运','MahaDasha'],['次运','Antardasha'],['三运','Pratyantardasha'],
['月相','Tithi'],['星期','Vara'],['五要素','Panchanga'],
['上升','Lagna'],['命度','Lagna'],['征象星','Karaka'],
['映像','Arudha'],['六维','Shadbala'],['八分法','Ashtakavarga'],
['过境','Transit'],['推运','Transit'],['格局','Yoga'],
['岁差','Ayanamsa'],['同座','Vargottama'],['致命星','Maraka'],
['王者行星','Yogakaraka'],
// 星宿名(前6个最常见的)
['Ashwini','Nakshatra'],['Bharani','Nakshatra'],['Krittika','Nakshatra'],
['Rohini','Nakshatra'],['Mrigashira','Nakshatra'],['Ardra','Nakshatra'],
['Punarvasu','Nakshatra'],['Pushya','Nakshatra'],['Ashlesha','Nakshatra'],
['Magha','Nakshatra'],['Purva Phalguni','Nakshatra'],['Uttara Phalguni','Nakshatra'],
['Hasta','Nakshatra'],['Chitra','Nakshatra'],['Swati','Nakshatra'],
['Vishakha','Nakshatra'],['Anuradha','Nakshatra'],['Jyeshtha','Nakshatra'],
['Mula','Nakshatra'],['Purva Ashadha','Nakshatra'],['Uttara Ashadha','Nakshatra'],
['Shravana','Nakshatra'],['Dhanishta','Nakshatra'],['Shatabhisha','Nakshatra'],
['Purva Bhadrapada','Nakshatra'],['Uttara Bhadrapada','Nakshatra'],['Revati','Nakshatra'],
// 宫位 H1-H12
...Array.from({length:12},(_,i)=>[`H${i+1}`,`H${i+1}`]),
// 第N宫
...Array.from({length:12},(_,i)=>[`${i+1}`,`H${i+1}`]),
];
// 按长度降序排列(长的优先匹配)
raw.sort((a,b) => b[0].length - a[0].length);
return raw.map(([pattern,key]) => ({pattern,key}));
})();
// ===== Tooltip DOM =====
let tooltipEl = null;
export function initTooltip() {
tooltipEl = document.createElement('div');
tooltipEl.className = 'jt-tooltip hidden';
tooltipEl.innerHTML = `<div class="jt-overlay"></div><div class="jt-card">
<div class="jt-header"><span class="jt-cat"></span><span class="jt-close">&times;</span></div>
<div class="jt-title"></div><div class="jt-names"></div><div class="jt-desc"></div></div>`;
document.body.appendChild(tooltipEl);
tooltipEl.querySelector('.jt-overlay').addEventListener('click', hideTooltip);
tooltipEl.querySelector('.jt-close').addEventListener('click', hideTooltip);
// 核心改变:全局点击不再只依赖 data-term,而是扫描文本
document.addEventListener('click', handleUniversalClick);
}
// ===== 通用点击处理器("点读机"核心) =====
function handleUniversalClick(e) {
// 1. 检查是否点击了 tooltip 自身
if (tooltipEl && tooltipEl.contains(e.target)) return;
// 2. 排除按钮/输入框/链接
const tag = e.target.tagName;
if (['BUTTON','INPUT','SELECT','TEXTAREA','A','SVG'].includes(tag)) return;
// 3. 排除 AI 聊天面板
if (e.target.closest('.ai-chat-panel') || e.target.closest('.ai-fab')) return;
// 4. Fast path: 已有 data-term 的元素(含祖先)
let el = e.target;
while (el && el !== document.body) {
if (el.dataset && el.dataset.term) {
e.preventDefault();
showTooltip(el.dataset.term);
return;
}
el = el.parentElement;
}
// 5. Universal scan: 在 #page-chart 区域内,扫描点击元素的文本
const chartPage = document.querySelector('#page-chart');
if (!chartPage || !chartPage.contains(e.target)) return;
const key = matchText(e.target);
if (key) {
e.preventDefault();
showTooltip(key);
}
}
// ===== 文本匹配引擎 =====
function matchText(el) {
// 获取元素自身文本(不含子元素文本,更精确)
const ownText = getOwnText(el);
if (ownText) {
const k = scanBindings(ownText);
if (k) return k;
}
// 如果自身文本太短或没匹配,尝试包含子元素的完整文本
const fullText = el.textContent || '';
if (fullText.length <= 300) {
return scanBindings(fullText);
}
return null;
}
function getOwnText(el) {
let t = '';
for (const n of el.childNodes) {
if (n.nodeType === Node.TEXT_NODE) t += n.textContent;
}
return t.trim();
}
function scanBindings(text) {
for (const {pattern, key} of TERM_BINDINGS) {
if (text.includes(pattern) && G[key]) return key;
}
return null;
}
// ===== Tooltip 显示/隐藏 =====
const CAT_MAP = {graha:'行星 Graha',bhava:'宫位 Bhava',rashi:'星座 Rashi',status:'状态',concept:'概念 Concept'};
function showTooltip(key) {
const entry = G[key];
if (!entry) return;
tooltipEl.querySelector('.jt-cat').textContent = CAT_MAP[entry.cat] || entry.cat;
tooltipEl.querySelector('.jt-title').textContent = entry.cn;
tooltipEl.querySelector('.jt-names').innerHTML = `<span class="jt-sk">${entry.sk}</span><span class="jt-en">${entry.en}</span>`;
tooltipEl.querySelector('.jt-desc').textContent = entry.desc;
tooltipEl.classList.remove('hidden');
}
function hideTooltip() {
if (tooltipEl) tooltipEl.classList.add('hidden');
}
// ===== 视觉标记:bindTerms 仍然用于添加高亮样式 =====
export function bindTerms(root) {
if (!root) return;
const selMap = [
['.planets-table td:first-child', mapPlanetTd],
['.planets-table td:nth-child(4)', mapHouseEl],
['.planets-table td:nth-child(5)', mapStatusTd],
['.planets-table td:nth-child(6)', () => 'Nakshatra'],
['.av-house-num', mapHouseEl], ['.hi-num', mapHouseEl],
['.hi-house', mapHouseEl], ['.house-card-num', mapHouseCard],
['.rg-num', mapHouseEl], ['.transit-house-badge', mapHouseEl],
['.sub-title', mapSubtitle], ['.section-title', mapSubtitle],
['.planet-symbol', mapPlanetSymbol],
['.k-label', mapKaraka], ['.k-planet', mapPlanetTd],
['.status-exalted', () => 'Exaltation'], ['.status-debilitated', () => 'Debilitation'],
['.status-own', () => 'OwnSign'],
['.yoga-name', () => 'Yoga'], ['.yoga-strength', () => 'Yoga'],
['.dasha-planet', mapPlanetText], ['.ad-planet', mapPlanetText],
['.praty-planet', mapPlanetText], ['.dasha-name', mapPlanetText],
['.av-planet', mapPlanetText],
['.transit-planet-name', mapTransitPlanetName],
['*', mapCombust],
];
for (const [sel, fn] of selMap) {
try {
root.querySelectorAll(sel).forEach(el => {
if (el.dataset.term) return;
const key = fn(el);
if (key) { el.dataset.term = key; el.classList.add('jt-clickable'); }
});
} catch(_) {}
}
}
// ===== 映射辅助函数 =====
const PM = {'太阳':'Sun','月亮':'Moon','火星':'Mars','水星':'Mercury','木星':'Jupiter','金星':'Venus','土星':'Saturn','北交点':'Rahu','南交点':'Ketu'};
const PSM = {'☉':'Sun','☽':'Moon','♂':'Mars','☿':'Mercury','♃':'Jupiter','♀':'Venus','♄':'Saturn','☊':'Rahu','☋':'Ketu'};
function mapPlanetTd(el) {
const t = el.textContent.trim();
for (const [s,k] of Object.entries(PSM)) if (t.includes(s)) return k;
for (const [c,k] of Object.entries(PM)) if (t.includes(c)) return k;
for (const en of ['Jupiter','Mercury','Saturn','Venus','Mars','Moon','Sun','Rahu','Ketu'])
if (t.includes(en)) return en;
return null;
}
function mapPlanetText(el) {
const t = el.textContent.trim().replace(' ◀','').replace(' ℞','');
return PM[t] || (G[t] ? t : null);
}
function mapPlanetSymbol(el) { const t=el.textContent.trim(); return PSM[t]||PM[t]||null; }
function mapHouseEl(el) { const m=el.textContent.match(/H(\d+)/); return m?`H${m[1]}`:null; }
function mapHouseCard(el) { const m=el.textContent.match(/第(\d+)宫/); return m?`H${m[1]}`:null; }
function mapStatusTd(el) {
const t=el.textContent.trim();
if(t==='入旺')return'Exaltation';if(t==='落陷')return'Debilitation';if(t==='入庙')return'OwnSign';
if(t.includes('逆行'))return'Retrograde';if(t.includes('燃烧')||t.includes('[燃]'))return'Combustion';return null;
}
function mapTransitPlanetName(el) {
const t=el.textContent.trim().replace(' ℞','');
for(const[c,k]of Object.entries(PM))if(t.includes(c))return k;
for(const en of['Jupiter','Mercury','Saturn','Venus','Mars','Moon','Sun','Rahu','Ketu'])if(t.includes(en))return en;
return null;
}
function mapSubtitle(el) {
const t=el.textContent;
const m=[['Ashtakavarga','Ashtakavarga'],['Shadbala','Shadbala'],['Nakshatra','Nakshatra'],['Vargottama','Vargottama'],
['PACDARES','PACDARES'],['Karaka','Karaka'],['Arudha','Arudha'],['Panchanga','Panchanga'],['Sade Sati','SadeSati'],
['Double Transit','DoubleTransit'],['Graha Drishti','GrahaDrishti'],['Transit','Transit'],['Dasha','Dasha'],
['Navamsa','Navamsa'],['Dasamsa','Dasamsa'],['Yogakaraka','Yogakaraka'],['Vimsopaka','Vimsopaka'],['Avastha','Avastha'],
['Bhava Bala','BhavaBala'],['Raman','Raman'],['Maraka','Maraka'],['分盘','Varga'],['大运','Dasha'],
['相位','GrahaDrishti'],['Yoga','Yoga'],['SAV','SAV'],['Ayanamsa','Ayanamsa'],
['星座','Rashi'],['八维','PACDARES'],['六维','Shadbala'],['八分法','Ashtakavarga'],
['月相','Tithi'],['月相期','Paksha'],['星期','Vara'],['五要素','Panchanga'],
['上升','Lagna'],['命度','Lagna'],['角宫','Kendra'],['三合宫','Trikona'],['凶宫','Dusthana'],
['王者格局','RajaYoga'],['财富格局','DhanaYoga'],['命主星','Lagnesha'],
['功能吉星','FunctionalBenefic'],['功能凶星','FunctionalMalefic']];
for(const[p,k]of m)if(t.includes(p))return k;
return null;
}
function mapKaraka() { return 'Karaka'; }
function mapCombust(el) {
if(el.textContent.includes('[燃]')){el.dataset.term='Combustion';el.classList.add('jt-clickable');}
return null;
}