diff --git a/.eslintcache b/.eslintcache new file mode 100644 index 0000000..e126772 --- /dev/null +++ b/.eslintcache @@ -0,0 +1 @@ +[{"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\3-DOM循环\\svelte\\Colors.svelte":"1","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\3-DOM循环\\vue2\\Colors.vue":"2","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\3-DOM循环\\vue3\\Colors.vue":"3","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\angular\\counter.component.ts":"4","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\aurelia1\\counter.ts":"5","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\aurelia2\\counter.ts":"6","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\ember\\counter.js":"7","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\lit\\x-counter.js":"8","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\mithril\\Counter.js":"9","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\qwik\\Counter.tsx":"10","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\react\\Counter.jsx":"11","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\solid\\Counter.jsx":"12","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\svelte\\Counter.svelte":"13","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\vue2\\Counter.vue":"14","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\vue3\\Counter.vue":"15","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\angular\\inputfocused.component.ts":"16","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\aurelia1\\input-focused.ts":"17","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\aurelia2\\input-focused.ts":"18","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\ember\\input-focused.js":"19","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\lit\\input-focused.js":"20","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\mithril\\InputFocused.js":"21","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\qwik\\InputFocused.tsx":"22","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\react\\InputFocused.jsx":"23","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\solid\\InputFocused.jsx":"24","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\svelte\\InputFocused.svelte":"25","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\vue2\\InputFocused.vue":"26","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\vue3\\InputFocused.vue":"27","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\angular\\trafficlight.component.ts":"28","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\aurelia1\\traffic-light.ts":"29","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\aurelia2\\traffic-light.ts":"30","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\ember\\traffic-light.js":"31","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\lit\\traffic-light.js":"32","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\mithril\\TrafficLight.js":"33","D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\qwik\\TrafficLight.tsx":"34","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\2-向父组件emit事件\\svelte\\App.svelte":"35","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\2-向父组件emit事件\\vue2\\AnswerButton.vue":"36","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\2-向父组件emit事件\\vue2\\App.vue":"37","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\2-向父组件emit事件\\vue3\\AnswerButton.vue":"38","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\2-向父组件emit事件\\vue3\\App.vue":"39","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\angular\\app.component.ts":"40","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\angular\\funny-button.component.ts":"41","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\lit\\funny-button.js":"42","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\lit\\x-app.js":"43","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\mithril\\App.js":"44","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\mithril\\FunnyButton.js":"45","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\qwik\\App.tsx":"46","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\qwik\\FunnyButton.tsx":"47","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\react\\App.jsx":"48","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\react\\FunnyButton.jsx":"49","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\solid\\App.jsx":"50","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\solid\\FunnyButton.jsx":"51","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\svelte\\App.svelte":"52","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\svelte\\FunnyButton.svelte":"53","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\vue2\\App.vue":"54","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\vue2\\FunnyButton.vue":"55","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\vue3\\App.vue":"56","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\vue3\\FunnyButton.vue":"57","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\angular\\app.component.ts":"58","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\angular\\funny-button.component.ts":"59","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\lit\\funny-button.js":"60","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\lit\\x-app.js":"61","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\mithril\\App.js":"62","D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\mithril\\FunnyButton.js":"63"},{"size":136,"mtime":1715085936574,"results":"64","hashOfConfig":"65"},{"size":225,"mtime":1715096394458},{"size":176,"mtime":1715096394486},{"size":282,"mtime":1715086058027,"results":"66","hashOfConfig":"65"},{"size":90,"mtime":1715079136588,"results":"67","hashOfConfig":"65"},{"size":90,"mtime":1715079136589,"results":"68","hashOfConfig":"65"},{"size":203,"mtime":1715079140852,"results":"69","hashOfConfig":"65"},{"size":391,"mtime":1715086058001,"results":"70","hashOfConfig":"65"},{"size":292,"mtime":1715086057997,"results":"71","hashOfConfig":"65"},{"size":334,"mtime":1715086057942,"results":"72","hashOfConfig":"65"},{"size":300,"mtime":1715086057860,"results":"73","hashOfConfig":"65"},{"size":304,"mtime":1715086057815,"results":"74","hashOfConfig":"65"},{"size":157,"mtime":1715086057681,"results":"75","hashOfConfig":"65"},{"size":282,"mtime":1715096394938},{"size":224,"mtime":1715096394954},{"size":374,"mtime":1715079136590,"results":"76","hashOfConfig":"65"},{"size":115,"mtime":1715079136591,"results":"77","hashOfConfig":"65"},{"size":115,"mtime":1715079136591,"results":"78","hashOfConfig":"65"},{"size":544,"mtime":1715079140853,"results":"79","hashOfConfig":"65"},{"size":399,"mtime":1715079140853,"results":"80","hashOfConfig":"65"},{"size":279,"mtime":1715079136592,"results":"81","hashOfConfig":"65"},{"size":271,"mtime":1715079140853,"results":"82","hashOfConfig":"65"},{"size":230,"mtime":1715079136592,"results":"83","hashOfConfig":"65"},{"size":192,"mtime":1715079136592,"results":"84","hashOfConfig":"65"},{"size":163,"mtime":1715079140853,"results":"85","hashOfConfig":"65"},{"size":150,"mtime":1715096395115},{"size":200,"mtime":1715096395131},{"size":735,"mtime":1715090049991,"results":"86","hashOfConfig":"65"},{"size":296,"mtime":1715089781751,"results":"87","hashOfConfig":"65"},{"size":249,"mtime":1715089781741,"results":"88","hashOfConfig":"65"},{"size":391,"mtime":1715089781746,"results":"89","hashOfConfig":"65"},{"size":856,"mtime":1715089987238,"results":"90","hashOfConfig":"65"},{"size":724,"mtime":1715090105129,"results":"91","hashOfConfig":"65"},{"size":701,"mtime":1715090108051,"results":"92","hashOfConfig":"65"},{"size":337,"mtime":1715096403745,"results":"93","hashOfConfig":"65"},{"size":292,"mtime":1715096422727},{"size":510,"mtime":1715096422769},{"size":262,"mtime":1715096422787},{"size":404,"mtime":1715096422805},{"size":173,"mtime":1715096403746,"results":"94","hashOfConfig":"65"},{"size":246,"mtime":1715096403746,"results":"95","hashOfConfig":"65"},{"size":748,"mtime":1715096403747,"results":"96","hashOfConfig":"65"},{"size":255,"mtime":1715096403747,"results":"97","hashOfConfig":"65"},{"size":168,"mtime":1715096403748,"results":"98","hashOfConfig":"65"},{"size":566,"mtime":1715096403748,"results":"99","hashOfConfig":"65"},{"size":121,"mtime":1715096403749,"results":"100","hashOfConfig":"65"},{"size":574,"mtime":1715096403749,"results":"101","hashOfConfig":"65"},{"size":125,"mtime":1715096403749,"results":"102","hashOfConfig":"65"},{"size":599,"mtime":1715096403749,"results":"103","hashOfConfig":"65"},{"size":125,"mtime":1715096403749,"results":"104","hashOfConfig":"65"},{"size":509,"mtime":1715096403749,"results":"105","hashOfConfig":"65"},{"size":105,"mtime":1715096403750,"results":"106","hashOfConfig":"65"},{"size":304,"mtime":1715096403750,"results":"107","hashOfConfig":"65"},{"size":185,"mtime":1715096403750,"results":"108","hashOfConfig":"65"},{"size":403,"mtime":1715096403750,"results":"109","hashOfConfig":"65"},{"size":133,"mtime":1715096403750,"results":"110","hashOfConfig":"65"},{"size":403,"mtime":1715096403750,"results":"111","hashOfConfig":"65"},{"size":291,"mtime":1715096403751,"results":"112","hashOfConfig":"65"},{"size":519,"mtime":1715096403751,"results":"113","hashOfConfig":"65"},{"size":688,"mtime":1715096423679,"results":"114","hashOfConfig":"65"},{"size":322,"mtime":1715096403754,"results":"115","hashOfConfig":"65"},{"size":206,"mtime":1715096403754,"results":"116","hashOfConfig":"65"},{"size":595,"mtime":1715096403755,"results":"117","hashOfConfig":"65"},{"filePath":"118","messages":"119","suppressedMessages":"120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"18d0emy",{"filePath":"121","messages":"122","suppressedMessages":"123","errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"124","messages":"125","suppressedMessages":"126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"127","messages":"128","suppressedMessages":"129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"130","messages":"131","suppressedMessages":"132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"133","messages":"134","suppressedMessages":"135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"136","messages":"137","suppressedMessages":"138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"139","messages":"140","suppressedMessages":"141","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"142","messages":"143","suppressedMessages":"144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"145","messages":"146","suppressedMessages":"147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"148","messages":"149","suppressedMessages":"150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"151","messages":"152","suppressedMessages":"153","errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"154","messages":"155","suppressedMessages":"156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"157","messages":"158","suppressedMessages":"159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"160","messages":"161","suppressedMessages":"162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"163","messages":"164","suppressedMessages":"165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"166","messages":"167","suppressedMessages":"168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"169","messages":"170","suppressedMessages":"171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"172","messages":"173","suppressedMessages":"174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"175","messages":"176","suppressedMessages":"177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"178","messages":"179","suppressedMessages":"180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"181","messages":"182","suppressedMessages":"183","errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"184","messages":"185","suppressedMessages":"186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"187","messages":"188","suppressedMessages":"189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"190","messages":"191","suppressedMessages":"192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"193","messages":"194","suppressedMessages":"195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"196","messages":"197","suppressedMessages":"198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"199","messages":"200","suppressedMessages":"201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"202","messages":"203","suppressedMessages":"204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"205","messages":"206","suppressedMessages":"207","errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"208","messages":"209","suppressedMessages":"210","errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"211","messages":"212","suppressedMessages":"213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"214","messages":"215","suppressedMessages":"216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"217","messages":"218","suppressedMessages":"219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"220","messages":"221","suppressedMessages":"222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"223","messages":"224","suppressedMessages":"225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"226","messages":"227","suppressedMessages":"228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"229","messages":"230","suppressedMessages":"231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"232","messages":"233","suppressedMessages":"234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"235","messages":"236","suppressedMessages":"237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"238","messages":"239","suppressedMessages":"240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"241","messages":"242","suppressedMessages":"243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"244","messages":"245","suppressedMessages":"246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"247","messages":"248","suppressedMessages":"249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"250","messages":"251","suppressedMessages":"252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"253","messages":"254","suppressedMessages":"255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"256","messages":"257","suppressedMessages":"258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"259","messages":"260","suppressedMessages":"261","errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"262","messages":"263","suppressedMessages":"264","errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"265","messages":"266","suppressedMessages":"267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"268","messages":"269","suppressedMessages":"270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"271","messages":"272","suppressedMessages":"273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"274","messages":"275","suppressedMessages":"276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\3-DOM循环\\svelte\\Colors.svelte",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\angular\\counter.component.ts",["277"],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\aurelia1\\counter.ts",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\aurelia2\\counter.ts",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\ember\\counter.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\lit\\x-counter.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\mithril\\Counter.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\qwik\\Counter.tsx",["278"],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\react\\Counter.jsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\solid\\Counter.jsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\4-点击事件\\svelte\\Counter.svelte",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\angular\\inputfocused.component.ts",["279"],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\aurelia1\\input-focused.ts",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\aurelia2\\input-focused.ts",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\ember\\input-focused.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\lit\\input-focused.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\mithril\\InputFocused.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\qwik\\InputFocused.tsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\react\\InputFocused.jsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\solid\\InputFocused.jsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\5-DOM引用\\svelte\\InputFocused.svelte",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\angular\\trafficlight.component.ts",["280"],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\aurelia1\\traffic-light.ts",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\aurelia2\\traffic-light.ts",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\ember\\traffic-light.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\lit\\traffic-light.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\mithril\\TrafficLight.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\2-模板语法\\6-条件渲染\\qwik\\TrafficLight.tsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\2-向父组件emit事件\\svelte\\App.svelte",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\angular\\app.component.ts",["281"],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\angular\\funny-button.component.ts",["282"],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\lit\\funny-button.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\lit\\x-app.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\mithril\\App.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\mithril\\FunnyButton.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\qwik\\App.tsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\qwik\\FunnyButton.tsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\react\\App.jsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\react\\FunnyButton.jsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\solid\\App.jsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\solid\\FunnyButton.jsx",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\svelte\\App.svelte",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\svelte\\FunnyButton.svelte",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\vue2\\App.vue",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\vue2\\FunnyButton.vue",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\vue3\\App.vue",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\3-slot插槽\\vue3\\FunnyButton.vue",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\angular\\app.component.ts",["283"],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\angular\\funny-button.component.ts",["284"],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\lit\\funny-button.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\lit\\x-app.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\mithril\\App.js",[],[],"D:\\Repositories\\Self\\component-party\\content\\4-组件组合\\4-slot插槽内容\\mithril\\FunnyButton.js",[],[],{"ruleId":null,"fatal":true,"severity":2,"message":"285","nodeType":null},{"ruleId":"286","severity":2,"message":"287","line":6,"column":26,"nodeType":"288","messageId":"289","endLine":6,"endColumn":27},{"ruleId":null,"fatal":true,"severity":2,"message":"290","nodeType":null},{"ruleId":null,"fatal":true,"severity":2,"message":"291","nodeType":null},{"ruleId":null,"fatal":true,"severity":2,"message":"292","nodeType":null},{"ruleId":null,"fatal":true,"severity":2,"message":"293","nodeType":null},{"ruleId":null,"fatal":true,"severity":2,"message":"294","nodeType":null},{"ruleId":null,"fatal":true,"severity":2,"message":"295","nodeType":null},"Parsing error: ESLint was configured to run on `/content\\2-模板语法\\4-点击事件\\angular\\counter.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","no-undef","'$' is not defined.","Identifier","undef","Parsing error: ESLint was configured to run on `/content\\2-模板语法\\5-DOM引用\\angular\\inputfocused.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\2-模板语法\\6-条件渲染\\angular\\trafficlight.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\4-组件组合\\3-slot插槽\\angular\\app.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\4-组件组合\\3-slot插槽\\angular\\funny-button.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\4-组件组合\\4-slot插槽内容\\angular\\app.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\4-组件组合\\4-slot插槽内容\\angular\\funny-button.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file"] it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\6-表单输入\\4-选择器\\angular\\color-select.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","qwik/jsx-key","Missing \"key\" prop for element in iterator","JSXElement","missingIterKey"]hat-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\2-模板语法\\6-条件渲染\\angular\\trafficlight.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\6-表单输入\\1-输入框\\angular\\input-hello.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file"]-however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","Parsing error: ESLint was configured to run on `/content\\7-Web应用特性\\2-fetch获取数据\\angular\\users.component.ts` using `parserOptions.project`: /tsconfig.app.json\nHowever, that TSConfig does not include this file. Either:\n- Change ESLint's list of included files to not include this file\n- Change that TSConfig to include this file\n- Create a new TSConfig that includes this file and include it in your parserOptions.project\nSee the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file","no-unused-vars","'useFetchUsers' is defined but never used.","unusedVar",["330"],{"kind":"331","justification":"332"},"directive",""] \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..0f4215b --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,74 @@ +#!/bin/sh + +if [ "$LEFTHOOK_VERBOSE" = "1" -o "$LEFTHOOK_VERBOSE" = "true" ]; then + set -x +fi + +if [ "$LEFTHOOK" = "0" ]; then + exit 0 +fi + +call_lefthook() +{ + if test -n "$LEFTHOOK_BIN" + then + "$LEFTHOOK_BIN" "$@" + elif lefthook.exe -h >/dev/null 2>&1 + then + lefthook.exe "$@" + elif lefthook.bat -h >/dev/null 2>&1 + then + lefthook.bat "$@" + elif D:\Repositories\Self\component-party\node_modules\.pnpm\lefthook-windows-x64@2.0.13\node_modules\lefthook-windows-x64\bin\lefthook.exe -h >/dev/null 2>&1 + then + D:\Repositories\Self\component-party\node_modules\.pnpm\lefthook-windows-x64@2.0.13\node_modules\lefthook-windows-x64\bin\lefthook.exe "$@" + else + dir="$(git rev-parse --show-toplevel)" + osArch=$(uname | tr '[:upper:]' '[:lower:]') + cpuArch=$(uname -m | sed 's/aarch64/arm64/;s/x86_64/x64/') + if test -f "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook.exe" + then + "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook.exe" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook.exe" + then + "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook.exe" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook.exe" + then + "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook.exe" "$@" + elif test -f "$dir/node_modules/lefthook/bin/index.js" + then + "$dir/node_modules/lefthook/bin/index.js" "$@" + elif go tool lefthook -h >/dev/null 2>&1 + then + go tool lefthook "$@" + elif bundle exec lefthook -h >/dev/null 2>&1 + then + bundle exec lefthook "$@" + elif yarn lefthook -h >/dev/null 2>&1 + then + yarn lefthook "$@" + elif pnpm lefthook -h >/dev/null 2>&1 + then + pnpm lefthook "$@" + elif swift package lefthook >/dev/null 2>&1 + then + swift package --build-path .build/lefthook --disable-sandbox lefthook "$@" + elif command -v mint >/dev/null 2>&1 + then + mint run csjones/lefthook-plugin "$@" + elif uv run lefthook -h >/dev/null 2>&1 + then + uv run lefthook "$@" + elif mise exec -- lefthook -h >/dev/null 2>&1 + then + mise exec -- lefthook "$@" + elif devbox run lefthook -h >/dev/null 2>&1 + then + devbox run lefthook "$@" + else + echo "Can't find lefthook in PATH" + fi + fi +} + +call_lefthook run "pre-commit" "$@" diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg new file mode 100644 index 0000000..4e4b13f --- /dev/null +++ b/.husky/prepare-commit-msg @@ -0,0 +1,74 @@ +#!/bin/sh + +if [ "$LEFTHOOK_VERBOSE" = "1" -o "$LEFTHOOK_VERBOSE" = "true" ]; then + set -x +fi + +if [ "$LEFTHOOK" = "0" ]; then + exit 0 +fi + +call_lefthook() +{ + if test -n "$LEFTHOOK_BIN" + then + "$LEFTHOOK_BIN" "$@" + elif lefthook.exe -h >/dev/null 2>&1 + then + lefthook.exe "$@" + elif lefthook.bat -h >/dev/null 2>&1 + then + lefthook.bat "$@" + elif D:\Repositories\Self\component-party\node_modules\.pnpm\lefthook-windows-x64@2.0.13\node_modules\lefthook-windows-x64\bin\lefthook.exe -h >/dev/null 2>&1 + then + D:\Repositories\Self\component-party\node_modules\.pnpm\lefthook-windows-x64@2.0.13\node_modules\lefthook-windows-x64\bin\lefthook.exe "$@" + else + dir="$(git rev-parse --show-toplevel)" + osArch=$(uname | tr '[:upper:]' '[:lower:]') + cpuArch=$(uname -m | sed 's/aarch64/arm64/;s/x86_64/x64/') + if test -f "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook.exe" + then + "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook.exe" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook.exe" + then + "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook.exe" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook.exe" + then + "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook.exe" "$@" + elif test -f "$dir/node_modules/lefthook/bin/index.js" + then + "$dir/node_modules/lefthook/bin/index.js" "$@" + elif go tool lefthook -h >/dev/null 2>&1 + then + go tool lefthook "$@" + elif bundle exec lefthook -h >/dev/null 2>&1 + then + bundle exec lefthook "$@" + elif yarn lefthook -h >/dev/null 2>&1 + then + yarn lefthook "$@" + elif pnpm lefthook -h >/dev/null 2>&1 + then + pnpm lefthook "$@" + elif swift package lefthook >/dev/null 2>&1 + then + swift package --build-path .build/lefthook --disable-sandbox lefthook "$@" + elif command -v mint >/dev/null 2>&1 + then + mint run csjones/lefthook-plugin "$@" + elif uv run lefthook -h >/dev/null 2>&1 + then + uv run lefthook "$@" + elif mise exec -- lefthook -h >/dev/null 2>&1 + then + mise exec -- lefthook "$@" + elif devbox run lefthook -h >/dev/null 2>&1 + then + devbox run lefthook "$@" + else + echo "Can't find lefthook in PATH" + fi + fi +} + +call_lefthook run "prepare-commit-msg" "$@" diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..ba93cd9 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,95 @@ +# Component Party 中文版 - 项目维护指南 + +## 项目概述 + +本项目是 [component-party.dev](https://github.com/matschik/component-party.dev) 的中文汉化 fork,用于对比不同 JavaScript 框架的语法差异,面向中文母语开发者。 + +## 分支策略 + +- **main**: 与上游 `matschik/component-party.dev` 的 main 分支保持完全同步,不做任何修改 +- **deploy**: 基于 main 的汉化分支,包含所有中文翻译,用于部署 +- **upstream**: 远程仓库,指向 `https://github.com/matschik/component-party.dev.git` + +## 同步上游与汉化工作流 + +```bash +# 1. 同步上游到 main +git fetch upstream +git checkout main +git merge upstream/main --ff-only +git push origin main + +# 2. 将 main 合并到 deploy +git checkout deploy +git merge main +# 解决冲突(通常是代码内容冲突,不会有 rename 冲突) +# 汉化新增内容 +git push origin deploy +``` + +## 汉化架构(重要) + +汉化分为两层,设计目标是最小化与上游的合并冲突: + +### 第一层:标题翻译(零冲突) + +- 翻译映射文件: `i18n/zh-CN.json` +- 构建脚本修改: `build/lib/generateContent.ts` 中的 `dirNameToTitle()` 函数 +- **不修改 content 目录名**,通过映射表将英文标题转换为中文 +- 上游新增的 section/snippet 会自动显示英文原文,只需在 JSON 中补充翻译即可 + +### 第二层:代码内容汉化(可控冲突) + +- 直接修改 `content/` 目录下各框架代码文件中的**字符串字面量** +- **不改文件名和路径**,只改文件内容 +- 翻译规则参考 `i18n/zh-CN.json` 中的约定 + +### UI 文案汉化 + +- `src/components/Header.svelte` - 站点标题 +- `src/Index.svelte` - 页面文案、SEO meta、空状态提示等 + +## 常用翻译对照表 + +| 英文 | 中文 | +| ------------------------- | -------------- | +| John | 张三 | +| Jane | 李四 | +| Hello {name} | 你好 {name} | +| Hello world | 你好,世界 | +| red/green/blue | 红/绿/蓝 | +| red/orange/green (交通灯) | 红灯/黄灯/绿灯 | +| Counter: | 计数器: | +| Page title: | 页面标题: | +| Current time: | 当前时间: | +| Are you happy? | 你快乐吗? | +| YES / NO | 是的!/ 不是! | +| Click me! | 点我! | +| unicorn42 | abcdefg | + +完整对照见 `i18n/zh-CN.json`。 + +## 技术栈 + +- 包管理器: pnpm +- 框架: Svelte 5 + Vite +- 构建: `content/` 目录由 Vite 插件在 `buildStart` 时扫描生成到 `src/generatedContent/` +- `src/generatedContent/` 是自动生成的,不要手动编辑,不需要提交 + +## 关键文件 + +| 文件 | 说明 | +| ------------------------------------ | ------------------------------------------ | +| `i18n/zh-CN.json` | 标题翻译映射 + UI 文案翻译 | +| `build/lib/generateContent.ts` | 内容生成脚本(已添加翻译查表逻辑) | +| `build/generateContentVitePlugin.ts` | Vite 插件,负责触发内容生成 | +| `content/` | 各框架代码示例(汉化在此目录的文件内容中) | +| `frameworks.ts` | 框架定义列表 | +| `src/Index.svelte` | 主页面组件 | +| `src/components/Header.svelte` | 头部组件 | + +## 注意事项 + +- content 目录下的文件**只改内容不改路径**,这是避免合并地狱的核心原则 +- 翻译只针对用户可见的字符串字面量,不翻译变量名、API 名、组件名 +- 上游可能会新增框架目录(如 emberPolaris、svelte5),合并后需要检查新文件是否需要汉化 diff --git a/README.md b/README.md index 76aa0a2..3d58f4e 100644 --- a/README.md +++ b/README.md @@ -240,44 +240,6 @@ How do we solve this ? Developers love having framework overview by examples. It -
- - - Ember Octane - - - -- [x] Reactivity - - [x] Declare state - - [x] Update state - - [x] Computed state -- [x] Templating - - [x] Minimal template - - [x] Styling - - [x] Loop - - [x] Event click - - [x] Dom ref - - [x] Conditional -- [x] Lifecycle - - [x] On mount - - [x] On unmount -- [x] Component composition - - [x] Props - - [x] Emit to parent - - [x] Slot - - [x] Slot fallback - - [x] Context -- [x] Form input - - [x] Input text - - [x] Checkbox - - [x] Radio - - [x] Select -- [ ] Webapp features - - [ ] Render app - - [x] Fetch data - -
-
@@ -316,6 +278,44 @@ How do we solve this ? Developers love having framework overview by examples. It
+
+ + + Ember Octane + + + +- [x] Reactivity + - [x] Declare state + - [x] Update state + - [x] Computed state +- [x] Templating + - [x] Minimal template + - [x] Styling + - [x] Loop + - [x] Event click + - [x] Dom ref + - [x] Conditional +- [x] Lifecycle + - [x] On mount + - [x] On unmount +- [x] Component composition + - [x] Props + - [x] Emit to parent + - [x] Slot + - [x] Slot fallback + - [x] Context +- [x] Form input + - [x] Input text + - [x] Checkbox + - [x] Radio + - [x] Select +- [ ] Webapp features + - [ ] Render app + - [x] Fetch data + +
+
diff --git a/build/lib/generateContent.ts b/build/lib/generateContent.ts index f9c32d5..384f092 100644 --- a/build/lib/generateContent.ts +++ b/build/lib/generateContent.ts @@ -13,6 +13,7 @@ import { markdownToHighlightedHtml, } from "./highlighter.ts"; import kebabCase from "just-kebab-case"; +import i18n from "../../i18n/zh-CN.json" with { type: "json" }; interface File { fileName: string; @@ -349,7 +350,12 @@ export default async function generateContent( } function dirNameToTitle(dirName: string): string { - return capitalize(dirName.split("-").splice(1).join(" ")); + const title = capitalize(dirName.split("-").splice(1).join(" ")); + const sectionTranslation = (i18n.sections as Record)[title]; + if (sectionTranslation) return sectionTranslation; + const snippetTranslation = (i18n.snippets as Record)[title]; + if (snippetTranslation) return snippetTranslation; + return title; } function capitalize(string: string): string { diff --git a/content/1-reactivity/1-declare-state/alpine/index.html b/content/1-reactivity/1-declare-state/alpine/index.html index 14e606a..0009248 100644 --- a/content/1-reactivity/1-declare-state/alpine/index.html +++ b/content/1-reactivity/1-declare-state/alpine/index.html @@ -1 +1 @@ -

+

diff --git a/content/1-reactivity/1-declare-state/angular/name.component.ts b/content/1-reactivity/1-declare-state/angular/name.component.ts index 7baf4ff..b2129b1 100644 --- a/content/1-reactivity/1-declare-state/angular/name.component.ts +++ b/content/1-reactivity/1-declare-state/angular/name.component.ts @@ -2,10 +2,10 @@ import { Component, NgModule } from "@angular/core"; @Component({ selector: "app-name", - template: `

Hello {{ name }}

`, + template: `

你好 {{ name }}

`, }) export class NameComponent { - name = "John"; + name = "张三"; } @NgModule({ diff --git a/content/1-reactivity/1-declare-state/angularRenaissance/name.component.ts b/content/1-reactivity/1-declare-state/angularRenaissance/name.component.ts index 942c000..91ad4e5 100644 --- a/content/1-reactivity/1-declare-state/angularRenaissance/name.component.ts +++ b/content/1-reactivity/1-declare-state/angularRenaissance/name.component.ts @@ -2,8 +2,8 @@ import { Component, signal } from "@angular/core"; @Component({ selector: "app-name", - template: `

Hello {{ name() }}

`, + template: `

你好 {{ name() }}

`, }) export class NameComponent { - name = signal("John"); + name = signal("张三"); } diff --git a/content/1-reactivity/1-declare-state/aurelia1/name.html b/content/1-reactivity/1-declare-state/aurelia1/name.html index f1b879b..1145a0c 100644 --- a/content/1-reactivity/1-declare-state/aurelia1/name.html +++ b/content/1-reactivity/1-declare-state/aurelia1/name.html @@ -1,3 +1,3 @@ diff --git a/content/1-reactivity/1-declare-state/aurelia1/name.ts b/content/1-reactivity/1-declare-state/aurelia1/name.ts index d77edfb..8349cdf 100644 --- a/content/1-reactivity/1-declare-state/aurelia1/name.ts +++ b/content/1-reactivity/1-declare-state/aurelia1/name.ts @@ -1,3 +1,3 @@ export class Name { - name = "John"; + name = "张三"; } diff --git a/content/1-reactivity/1-declare-state/aurelia2/name.html b/content/1-reactivity/1-declare-state/aurelia2/name.html index 4c1f91c..003f6e3 100644 --- a/content/1-reactivity/1-declare-state/aurelia2/name.html +++ b/content/1-reactivity/1-declare-state/aurelia2/name.html @@ -1 +1 @@ -

Hello ${name}

+

你好 ${name}

diff --git a/content/1-reactivity/1-declare-state/aurelia2/name.ts b/content/1-reactivity/1-declare-state/aurelia2/name.ts index d77edfb..8349cdf 100644 --- a/content/1-reactivity/1-declare-state/aurelia2/name.ts +++ b/content/1-reactivity/1-declare-state/aurelia2/name.ts @@ -1,3 +1,3 @@ export class Name { - name = "John"; + name = "张三"; } diff --git a/content/1-reactivity/1-declare-state/emberOctane/name.hbs b/content/1-reactivity/1-declare-state/emberOctane/name.hbs index 4619314..8114da2 100644 --- a/content/1-reactivity/1-declare-state/emberOctane/name.hbs +++ b/content/1-reactivity/1-declare-state/emberOctane/name.hbs @@ -1 +1 @@ -

Hello {{this.name}}

\ No newline at end of file +

你好 {{this.name}}

\ No newline at end of file diff --git a/content/1-reactivity/1-declare-state/emberOctane/name.js b/content/1-reactivity/1-declare-state/emberOctane/name.js index 63c085d..1811eee 100644 --- a/content/1-reactivity/1-declare-state/emberOctane/name.js +++ b/content/1-reactivity/1-declare-state/emberOctane/name.js @@ -1,5 +1,5 @@ import Component from "@glimmer/component"; export default class NameComponent extends Component { - name = "John"; + name = "张三"; } diff --git a/content/1-reactivity/1-declare-state/emberPolaris/name.gjs b/content/1-reactivity/1-declare-state/emberPolaris/name.gjs index 74154cd..997838d 100644 --- a/content/1-reactivity/1-declare-state/emberPolaris/name.gjs +++ b/content/1-reactivity/1-declare-state/emberPolaris/name.gjs @@ -1,9 +1,9 @@ import Component from "@glimmer/component"; export default class NameComponent extends Component { - name = "John"; + name = "张三"; } diff --git a/content/1-reactivity/1-declare-state/lit/name.js b/content/1-reactivity/1-declare-state/lit/name.js index 1c9b1a9..d3eda83 100644 --- a/content/1-reactivity/1-declare-state/lit/name.js +++ b/content/1-reactivity/1-declare-state/lit/name.js @@ -4,9 +4,9 @@ import { customElement, state } from "lit/decorators.js"; @customElement("x-name") export class XName extends LitElement { @state() - name = "John"; + name = "张三"; render() { - return html`

Hello ${this.name}!

`; + return html`

你好 ${this.name}!

`; } } diff --git a/content/1-reactivity/1-declare-state/marko/Name.marko b/content/1-reactivity/1-declare-state/marko/Name.marko index b5ae1f5..dcec63a 100644 --- a/content/1-reactivity/1-declare-state/marko/Name.marko +++ b/content/1-reactivity/1-declare-state/marko/Name.marko @@ -1,2 +1,2 @@ - -

Hello ${name}

+ +

你好 ${name}

diff --git a/content/1-reactivity/1-declare-state/mithril/Name.js b/content/1-reactivity/1-declare-state/mithril/Name.js index 279936c..92832f0 100644 --- a/content/1-reactivity/1-declare-state/mithril/Name.js +++ b/content/1-reactivity/1-declare-state/mithril/Name.js @@ -1,9 +1,9 @@ import m from "mithril"; export default function Name() { - let name = "John"; + let name = "张三"; return { - view: () => m("h1", `Hello ${name}`), + view: () => m("h1", `你好 ${name}`), }; } diff --git a/content/1-reactivity/1-declare-state/qwik/Name.tsx b/content/1-reactivity/1-declare-state/qwik/Name.tsx index c7bd334..c038799 100644 --- a/content/1-reactivity/1-declare-state/qwik/Name.tsx +++ b/content/1-reactivity/1-declare-state/qwik/Name.tsx @@ -1,7 +1,7 @@ import { component$, useSignal } from "@builder.io/qwik"; export const Name = component$(() => { - const name = useSignal("John"); + const name = useSignal("张三"); - return

Hello {name.value}

; + return

你好 {name.value}

; }); diff --git a/content/1-reactivity/1-declare-state/react/Name.jsx b/content/1-reactivity/1-declare-state/react/Name.jsx index 3fd61c6..35785bb 100644 --- a/content/1-reactivity/1-declare-state/react/Name.jsx +++ b/content/1-reactivity/1-declare-state/react/Name.jsx @@ -1,7 +1,7 @@ import { useState } from "react"; export default function Name() { - const [name] = useState("John"); + const [name] = useState("张三"); - return

Hello {name}

; + return

你好 {name}

; } diff --git a/content/1-reactivity/1-declare-state/ripple/Name.ripple b/content/1-reactivity/1-declare-state/ripple/Name.ripple index d482e79..668b1ab 100644 --- a/content/1-reactivity/1-declare-state/ripple/Name.ripple +++ b/content/1-reactivity/1-declare-state/ripple/Name.ripple @@ -1,7 +1,7 @@ import { track } from "ripple"; export component Name() { - let name = track("John"); + let name = track("张三"); -

{`Hello ${@name}`}

+

{`你好 ${@name}`}

} \ No newline at end of file diff --git a/content/1-reactivity/1-declare-state/solid/Name.jsx b/content/1-reactivity/1-declare-state/solid/Name.jsx index 3060008..eea04d4 100644 --- a/content/1-reactivity/1-declare-state/solid/Name.jsx +++ b/content/1-reactivity/1-declare-state/solid/Name.jsx @@ -1,7 +1,7 @@ import { createSignal } from "solid-js"; export default function Name() { - const [name] = createSignal("John"); + const [name] = createSignal("张三"); - return

Hello {name()}

; + return

你好 {name()}

; } diff --git a/content/1-reactivity/1-declare-state/svelte4/Name.svelte b/content/1-reactivity/1-declare-state/svelte4/Name.svelte index 33a8376..d23d1a4 100644 --- a/content/1-reactivity/1-declare-state/svelte4/Name.svelte +++ b/content/1-reactivity/1-declare-state/svelte4/Name.svelte @@ -1,5 +1,5 @@ -

Hello {name}

+

你好 {name}

diff --git a/content/1-reactivity/1-declare-state/svelte5/Name.svelte b/content/1-reactivity/1-declare-state/svelte5/Name.svelte index 7f65226..d4eec81 100644 --- a/content/1-reactivity/1-declare-state/svelte5/Name.svelte +++ b/content/1-reactivity/1-declare-state/svelte5/Name.svelte @@ -1,5 +1,5 @@ -

Hello {name}

+

你好 {name}

diff --git a/content/1-reactivity/1-declare-state/vue2/Name.vue b/content/1-reactivity/1-declare-state/vue2/Name.vue index 5501447..0a2a739 100644 --- a/content/1-reactivity/1-declare-state/vue2/Name.vue +++ b/content/1-reactivity/1-declare-state/vue2/Name.vue @@ -2,12 +2,12 @@ export default { data() { return { - name: "John", + name: "张三", }; }, }; diff --git a/content/1-reactivity/1-declare-state/vue3/Name.vue b/content/1-reactivity/1-declare-state/vue3/Name.vue index fe9d507..ef03bc6 100644 --- a/content/1-reactivity/1-declare-state/vue3/Name.vue +++ b/content/1-reactivity/1-declare-state/vue3/Name.vue @@ -1,8 +1,8 @@ diff --git a/content/1-reactivity/2-update-state/alpine/index.html b/content/1-reactivity/2-update-state/alpine/index.html index 756a1af..12d1543 100644 --- a/content/1-reactivity/2-update-state/alpine/index.html +++ b/content/1-reactivity/2-update-state/alpine/index.html @@ -1 +1 @@ -

+

diff --git a/content/1-reactivity/2-update-state/angular/name.component.ts b/content/1-reactivity/2-update-state/angular/name.component.ts index c68cc0e..a1cd21e 100644 --- a/content/1-reactivity/2-update-state/angular/name.component.ts +++ b/content/1-reactivity/2-update-state/angular/name.component.ts @@ -2,13 +2,13 @@ import { Component, NgModule } from "@angular/core"; @Component({ selector: "app-name", - template: `

Hello {{ name }}

`, + template: `

你好 {{ name }}

`, }) export class NameComponent { - name = "John"; + name = "张三"; constructor() { - this.name = "Jane"; + this.name = "李四"; } } diff --git a/content/1-reactivity/2-update-state/angularRenaissance/name.component.ts b/content/1-reactivity/2-update-state/angularRenaissance/name.component.ts index 763aa32..40cfd65 100644 --- a/content/1-reactivity/2-update-state/angularRenaissance/name.component.ts +++ b/content/1-reactivity/2-update-state/angularRenaissance/name.component.ts @@ -2,12 +2,12 @@ import { Component, signal } from "@angular/core"; @Component({ selector: "app-name", - template: `

Hello {{ name() }}

`, + template: `

你好 {{ name() }}

`, }) export class NameComponent { - name = signal("John"); + name = signal("张三"); constructor() { - this.name.set("Jane"); + this.name.set("李四"); } } diff --git a/content/1-reactivity/2-update-state/aurelia1/name.html b/content/1-reactivity/2-update-state/aurelia1/name.html index f1b879b..1145a0c 100644 --- a/content/1-reactivity/2-update-state/aurelia1/name.html +++ b/content/1-reactivity/2-update-state/aurelia1/name.html @@ -1,3 +1,3 @@ diff --git a/content/1-reactivity/2-update-state/aurelia1/name.ts b/content/1-reactivity/2-update-state/aurelia1/name.ts index c428a1d..927faef 100644 --- a/content/1-reactivity/2-update-state/aurelia1/name.ts +++ b/content/1-reactivity/2-update-state/aurelia1/name.ts @@ -1,7 +1,7 @@ export class Name { - name = "John"; + name = "张三"; constructor() { - this.name = "Jane"; + this.name = "李四"; } } diff --git a/content/1-reactivity/2-update-state/aurelia2/name.html b/content/1-reactivity/2-update-state/aurelia2/name.html index 4c1f91c..003f6e3 100644 --- a/content/1-reactivity/2-update-state/aurelia2/name.html +++ b/content/1-reactivity/2-update-state/aurelia2/name.html @@ -1 +1 @@ -

Hello ${name}

+

你好 ${name}

diff --git a/content/1-reactivity/2-update-state/aurelia2/name.ts b/content/1-reactivity/2-update-state/aurelia2/name.ts index c428a1d..927faef 100644 --- a/content/1-reactivity/2-update-state/aurelia2/name.ts +++ b/content/1-reactivity/2-update-state/aurelia2/name.ts @@ -1,7 +1,7 @@ export class Name { - name = "John"; + name = "张三"; constructor() { - this.name = "Jane"; + this.name = "李四"; } } diff --git a/content/1-reactivity/2-update-state/emberOctane/name.hbs b/content/1-reactivity/2-update-state/emberOctane/name.hbs index 4619314..8114da2 100644 --- a/content/1-reactivity/2-update-state/emberOctane/name.hbs +++ b/content/1-reactivity/2-update-state/emberOctane/name.hbs @@ -1 +1 @@ -

Hello {{this.name}}

\ No newline at end of file +

你好 {{this.name}}

\ No newline at end of file diff --git a/content/1-reactivity/2-update-state/emberOctane/name.js b/content/1-reactivity/2-update-state/emberOctane/name.js index b93dd72..2db2195 100644 --- a/content/1-reactivity/2-update-state/emberOctane/name.js +++ b/content/1-reactivity/2-update-state/emberOctane/name.js @@ -2,11 +2,11 @@ import Component from "@glimmer/component"; import { tracked } from "@glimmer/tracking"; export default class NameComponent extends Component { - @tracked name = "John"; + @tracked name = "张三"; constructor(owner, args) { super(owner, args); - this.name = "Jane"; + this.name = "李四"; } } diff --git a/content/1-reactivity/2-update-state/emberPolaris/name.gjs b/content/1-reactivity/2-update-state/emberPolaris/name.gjs index b560c88..6feb3fa 100644 --- a/content/1-reactivity/2-update-state/emberPolaris/name.gjs +++ b/content/1-reactivity/2-update-state/emberPolaris/name.gjs @@ -2,15 +2,15 @@ import Component from "@glimmer/component"; import { tracked } from "@glimmer/tracking"; export default class CounterComponent extends Component { - @tracked name = "John"; + @tracked name = "张三"; constructor(owner, args) { super(owner, args); - this.name = "Jane"; + this.name = "李四"; } } diff --git a/content/1-reactivity/2-update-state/lit/name.js b/content/1-reactivity/2-update-state/lit/name.js index 8687878..320ebd1 100644 --- a/content/1-reactivity/2-update-state/lit/name.js +++ b/content/1-reactivity/2-update-state/lit/name.js @@ -4,14 +4,14 @@ import { customElement, state } from "lit/decorators.js"; @customElement("x-name") export class XName extends LitElement { @state() - name = "John"; + name = "张三"; constructor() { super(); - this.name = "Jane"; + this.name = "李四"; } render() { - return html`

Hello ${this.name}!

`; + return html`

你好 ${this.name}!

`; } } diff --git a/content/1-reactivity/2-update-state/marko/Name.marko b/content/1-reactivity/2-update-state/marko/Name.marko index d56c8e0..efa027e 100644 --- a/content/1-reactivity/2-update-state/marko/Name.marko +++ b/content/1-reactivity/2-update-state/marko/Name.marko @@ -1,3 +1,3 @@ - - -

Hello ${name}

+ + +

你好 ${name}

diff --git a/content/1-reactivity/2-update-state/mithril/Name.js b/content/1-reactivity/2-update-state/mithril/Name.js index c70314a..65dc8a5 100644 --- a/content/1-reactivity/2-update-state/mithril/Name.js +++ b/content/1-reactivity/2-update-state/mithril/Name.js @@ -1,9 +1,9 @@ import m from "mithril"; export default function Name() { - let name = "John"; - name = "Jane"; + let name = "张三"; + name = "李四"; return { - view: () => m("h1", `Hello ${name}`), + view: () => m("h1", `你好 ${name}`), }; } diff --git a/content/1-reactivity/2-update-state/qwik/Name.tsx b/content/1-reactivity/2-update-state/qwik/Name.tsx index cb3ce20..f2cf9de 100644 --- a/content/1-reactivity/2-update-state/qwik/Name.tsx +++ b/content/1-reactivity/2-update-state/qwik/Name.tsx @@ -1,11 +1,11 @@ import { component$, useTask$, useSignal } from "@builder.io/qwik"; export const Name = component$(() => { - const name = useSignal("John"); + const name = useSignal("张三"); useTask$(() => { - name.value = "Jane"; + name.value = "李四"; }); - return

Hello {name.value}

; + return

你好 {name.value}

; }); diff --git a/content/1-reactivity/2-update-state/react/Name.jsx b/content/1-reactivity/2-update-state/react/Name.jsx index 11fa90e..180bbe0 100644 --- a/content/1-reactivity/2-update-state/react/Name.jsx +++ b/content/1-reactivity/2-update-state/react/Name.jsx @@ -1,11 +1,11 @@ import { useEffect, useState } from "react"; export default function Name() { - const [name, setName] = useState("John"); + const [name, setName] = useState("张三"); useEffect(() => { - setName("Jane"); + setName("李四"); }, []); - return

Hello {name}

; + return

你好 {name}

; } diff --git a/content/1-reactivity/2-update-state/ripple/Name.ripple b/content/1-reactivity/2-update-state/ripple/Name.ripple index a96596e..3795aaa 100644 --- a/content/1-reactivity/2-update-state/ripple/Name.ripple +++ b/content/1-reactivity/2-update-state/ripple/Name.ripple @@ -1,8 +1,8 @@ import { track } from "ripple"; export component Name() { - let name = track("John"); - @name = "Jane"; + let name = track("张三"); + @name = "李四"; -

{`Hello ${@name}`}

+

{`你好 ${@name}`}

} \ No newline at end of file diff --git a/content/1-reactivity/2-update-state/solid/Name.jsx b/content/1-reactivity/2-update-state/solid/Name.jsx index 122c734..093f858 100644 --- a/content/1-reactivity/2-update-state/solid/Name.jsx +++ b/content/1-reactivity/2-update-state/solid/Name.jsx @@ -1,8 +1,8 @@ import { createSignal } from "solid-js"; export default function Name() { - const [name, setName] = createSignal("John"); - setName("Jane"); + const [name, setName] = createSignal("张三"); + setName("李四"); - return

Hello {name()}

; + return

你好 {name()}

; } diff --git a/content/1-reactivity/2-update-state/svelte4/Name.svelte b/content/1-reactivity/2-update-state/svelte4/Name.svelte index 290ffe6..800dee5 100644 --- a/content/1-reactivity/2-update-state/svelte4/Name.svelte +++ b/content/1-reactivity/2-update-state/svelte4/Name.svelte @@ -1,6 +1,6 @@ -

Hello {name}

+

你好 {name}

diff --git a/content/1-reactivity/2-update-state/svelte5/Name.svelte b/content/1-reactivity/2-update-state/svelte5/Name.svelte index a6a11e1..527e808 100644 --- a/content/1-reactivity/2-update-state/svelte5/Name.svelte +++ b/content/1-reactivity/2-update-state/svelte5/Name.svelte @@ -1,6 +1,6 @@ -

Hello {name}

+

你好 {name}

diff --git a/content/1-reactivity/2-update-state/vue2/Name.vue b/content/1-reactivity/2-update-state/vue2/Name.vue index ec3eac2..dd15957 100644 --- a/content/1-reactivity/2-update-state/vue2/Name.vue +++ b/content/1-reactivity/2-update-state/vue2/Name.vue @@ -2,15 +2,15 @@ export default { data() { return { - name: "John", + name: "张三", }; }, created() { - this.name = "Jane"; + this.name = "李四"; }, }; diff --git a/content/1-reactivity/2-update-state/vue3/Name.vue b/content/1-reactivity/2-update-state/vue3/Name.vue index 2bdc256..eb88141 100644 --- a/content/1-reactivity/2-update-state/vue3/Name.vue +++ b/content/1-reactivity/2-update-state/vue3/Name.vue @@ -1,9 +1,9 @@ diff --git a/content/2-templating/1-minimal-template/alpine/index.html b/content/2-templating/1-minimal-template/alpine/index.html index 159202e..24e099e 100644 --- a/content/2-templating/1-minimal-template/alpine/index.html +++ b/content/2-templating/1-minimal-template/alpine/index.html @@ -1 +1 @@ -

Hello world

+

你好,世界

diff --git a/content/2-templating/1-minimal-template/angular/helloworld.component.ts b/content/2-templating/1-minimal-template/angular/helloworld.component.ts index f4f6326..849d478 100644 --- a/content/2-templating/1-minimal-template/angular/helloworld.component.ts +++ b/content/2-templating/1-minimal-template/angular/helloworld.component.ts @@ -2,7 +2,7 @@ import { Component, NgModule } from "@angular/core"; @Component({ selector: "app-helloworld", - template: `

Hello world

`, + template: `

你好,世界

`, }) export class HelloworldComponent {} diff --git a/content/2-templating/1-minimal-template/angularRenaissance/helloworld.component.ts b/content/2-templating/1-minimal-template/angularRenaissance/helloworld.component.ts index bb97056..c9298e7 100644 --- a/content/2-templating/1-minimal-template/angularRenaissance/helloworld.component.ts +++ b/content/2-templating/1-minimal-template/angularRenaissance/helloworld.component.ts @@ -2,6 +2,6 @@ import { Component } from "@angular/core"; @Component({ selector: "app-hello-world", - template: `

Hello world

`, + template: `

你好,世界

`, }) export class HelloWorldComponent {} diff --git a/content/2-templating/1-minimal-template/aurelia1/hello-world.html b/content/2-templating/1-minimal-template/aurelia1/hello-world.html index 5fb8e4d..6d5d25a 100644 --- a/content/2-templating/1-minimal-template/aurelia1/hello-world.html +++ b/content/2-templating/1-minimal-template/aurelia1/hello-world.html @@ -1,3 +1,3 @@ diff --git a/content/2-templating/1-minimal-template/aurelia2/hello-world.html b/content/2-templating/1-minimal-template/aurelia2/hello-world.html index 159202e..24e099e 100644 --- a/content/2-templating/1-minimal-template/aurelia2/hello-world.html +++ b/content/2-templating/1-minimal-template/aurelia2/hello-world.html @@ -1 +1 @@ -

Hello world

+

你好,世界

diff --git a/content/2-templating/1-minimal-template/emberOctane/hello-world.hbs b/content/2-templating/1-minimal-template/emberOctane/hello-world.hbs index 6116828..3525602 100644 --- a/content/2-templating/1-minimal-template/emberOctane/hello-world.hbs +++ b/content/2-templating/1-minimal-template/emberOctane/hello-world.hbs @@ -1 +1 @@ -

Hello world

\ No newline at end of file +

你好,世界

\ No newline at end of file diff --git a/content/2-templating/1-minimal-template/emberPolaris/hello-world.gjs b/content/2-templating/1-minimal-template/emberPolaris/hello-world.gjs index e40fbc3..efa37f1 100644 --- a/content/2-templating/1-minimal-template/emberPolaris/hello-world.gjs +++ b/content/2-templating/1-minimal-template/emberPolaris/hello-world.gjs @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/content/2-templating/1-minimal-template/lit/hello-world.js b/content/2-templating/1-minimal-template/lit/hello-world.js index b56842d..80e0a5c 100644 --- a/content/2-templating/1-minimal-template/lit/hello-world.js +++ b/content/2-templating/1-minimal-template/lit/hello-world.js @@ -4,6 +4,6 @@ import { customElement } from "lit/decorators.js"; @customElement("hello-world") export class HelloWorld extends LitElement { render() { - return html`

Hello world

`; + return html`

你好,世界

`; } } diff --git a/content/2-templating/1-minimal-template/marko/HelloWorld.marko b/content/2-templating/1-minimal-template/marko/HelloWorld.marko index 159202e..24e099e 100644 --- a/content/2-templating/1-minimal-template/marko/HelloWorld.marko +++ b/content/2-templating/1-minimal-template/marko/HelloWorld.marko @@ -1 +1 @@ -

Hello world

+

你好,世界

diff --git a/content/2-templating/1-minimal-template/mithril/HelloWorld.js b/content/2-templating/1-minimal-template/mithril/HelloWorld.js index fbdac18..7dfddb6 100644 --- a/content/2-templating/1-minimal-template/mithril/HelloWorld.js +++ b/content/2-templating/1-minimal-template/mithril/HelloWorld.js @@ -2,6 +2,6 @@ import m from "mithril"; export default function HelloWorld() { return { - view: () => m("h1", "Hello World"), + view: () => m("h1", "你好,世界"), }; } diff --git a/content/2-templating/1-minimal-template/qwik/HelloWorld.tsx b/content/2-templating/1-minimal-template/qwik/HelloWorld.tsx index 8d12eab..0463165 100644 --- a/content/2-templating/1-minimal-template/qwik/HelloWorld.tsx +++ b/content/2-templating/1-minimal-template/qwik/HelloWorld.tsx @@ -1,3 +1,3 @@ export const HelloWorld = () => { - return
Hello World
; + return
你好,世界
; }; diff --git a/content/2-templating/1-minimal-template/react/HelloWorld.jsx b/content/2-templating/1-minimal-template/react/HelloWorld.jsx index 79f365f..96d2417 100644 --- a/content/2-templating/1-minimal-template/react/HelloWorld.jsx +++ b/content/2-templating/1-minimal-template/react/HelloWorld.jsx @@ -1,3 +1,3 @@ export default function HelloWorld() { - return

Hello world

; + return

你好,世界

; } diff --git a/content/2-templating/1-minimal-template/ripple/HelloWorld.ripple b/content/2-templating/1-minimal-template/ripple/HelloWorld.ripple index e3984cb..d3ea632 100644 --- a/content/2-templating/1-minimal-template/ripple/HelloWorld.ripple +++ b/content/2-templating/1-minimal-template/ripple/HelloWorld.ripple @@ -1,3 +1,3 @@ export component HelloWorld() { -

{"Hello world"}

+

{"你好,世界"}

} \ No newline at end of file diff --git a/content/2-templating/1-minimal-template/solid/HelloWorld.jsx b/content/2-templating/1-minimal-template/solid/HelloWorld.jsx index d2f8d82..96d2417 100644 --- a/content/2-templating/1-minimal-template/solid/HelloWorld.jsx +++ b/content/2-templating/1-minimal-template/solid/HelloWorld.jsx @@ -1,3 +1,3 @@ export default function HelloWorld() { - return

Hello World!

; + return

你好,世界

; } diff --git a/content/2-templating/1-minimal-template/svelte4/HelloWorld.svelte b/content/2-templating/1-minimal-template/svelte4/HelloWorld.svelte index 159202e..24e099e 100644 --- a/content/2-templating/1-minimal-template/svelte4/HelloWorld.svelte +++ b/content/2-templating/1-minimal-template/svelte4/HelloWorld.svelte @@ -1 +1 @@ -

Hello world

+

你好,世界

diff --git a/content/2-templating/1-minimal-template/svelte5/HelloWorld.svelte b/content/2-templating/1-minimal-template/svelte5/HelloWorld.svelte index 159202e..24e099e 100644 --- a/content/2-templating/1-minimal-template/svelte5/HelloWorld.svelte +++ b/content/2-templating/1-minimal-template/svelte5/HelloWorld.svelte @@ -1 +1 @@ -

Hello world

+

你好,世界

diff --git a/content/2-templating/1-minimal-template/vue2/HelloWorld.vue b/content/2-templating/1-minimal-template/vue2/HelloWorld.vue index 5fb8e4d..6d5d25a 100644 --- a/content/2-templating/1-minimal-template/vue2/HelloWorld.vue +++ b/content/2-templating/1-minimal-template/vue2/HelloWorld.vue @@ -1,3 +1,3 @@ diff --git a/content/2-templating/1-minimal-template/vue3/HelloWorld.vue b/content/2-templating/1-minimal-template/vue3/HelloWorld.vue index 5fb8e4d..6d5d25a 100644 --- a/content/2-templating/1-minimal-template/vue3/HelloWorld.vue +++ b/content/2-templating/1-minimal-template/vue3/HelloWorld.vue @@ -1,3 +1,3 @@ diff --git a/content/2-templating/2-styling/alpine/index.html b/content/2-templating/2-styling/alpine/index.html index d7d0849..228cde3 100644 --- a/content/2-templating/2-styling/alpine/index.html +++ b/content/2-templating/2-styling/alpine/index.html @@ -1,5 +1,5 @@ -

I am red

- +

我是红色的

+