重新整理仓库
This commit is contained in:
159
段落首行缩进切换功能说明.md
Normal file
159
段落首行缩进切换功能说明.md
Normal file
@@ -0,0 +1,159 @@
|
||||
# 📐 段落首行缩进切换功能说明
|
||||
|
||||
## 🎯 功能概述
|
||||
|
||||
新增了一个智能的段落首行缩进切换功能,让用户可以根据需要快速切换中文段落的首行缩进格式。
|
||||
|
||||
## ✨ 功能特点
|
||||
|
||||
### 🔄 智能切换
|
||||
- **自动检测**:智能检测当前段落是否已有首行缩进
|
||||
- **一键切换**:点击按钮即可在有缩进/无缩进之间切换
|
||||
- **批量处理**:一次性处理文章中的所有段落
|
||||
|
||||
### 📝 中文优化
|
||||
- **标准缩进**:使用 2em 的首行缩进,符合中文排版规范
|
||||
- **智能识别**:只对段落标签 `<p>` 进行处理
|
||||
- **样式保持**:保留段落的其他样式属性
|
||||
|
||||
### 🎨 用户体验
|
||||
- **友好提示**:使用 emoji 和温馨文案
|
||||
- **状态反馈**:清晰显示当前操作结果
|
||||
- **错误处理**:完善的异常处理和用户指导
|
||||
|
||||
## 🛠️ 技术实现
|
||||
|
||||
### 按钮配置
|
||||
```javascript
|
||||
// 添加段落首行缩进切换按钮
|
||||
editor.ui.registry.addButton('toggle_indent', {
|
||||
text: '首行缩进',
|
||||
icon: 'indent',
|
||||
tooltip: '切换段落首行缩进(适合中文排版)',
|
||||
onAction: () => {
|
||||
toggleParagraphIndent(editor);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### 核心功能
|
||||
```javascript
|
||||
// 🔄 段落首行缩进切换功能
|
||||
const toggleParagraphIndent = (editor: any) => {
|
||||
// 1. 检查内容
|
||||
// 2. 检测当前缩进状态
|
||||
// 3. 执行相应操作(添加/移除)
|
||||
// 4. 显示操作结果
|
||||
}
|
||||
```
|
||||
|
||||
### 添加缩进算法
|
||||
```javascript
|
||||
const addIndentToParagraphs = (content: string): string => {
|
||||
return content.replace(/<p([^>]*)>/g, (match, attrs) => {
|
||||
if (attrs.includes('style=')) {
|
||||
if (attrs.includes('text-indent')) {
|
||||
// 更新现有的 text-indent
|
||||
return match.replace(/text-indent:\s*[^;]+;?/g, 'text-indent: 2em;');
|
||||
} else {
|
||||
// 在现有 style 中添加 text-indent
|
||||
return match.replace(/style="([^"]*)"/, 'style="$1 text-indent: 2em;"');
|
||||
}
|
||||
} else {
|
||||
// 添加新的 style 属性
|
||||
return `<p${attrs} style="text-indent: 2em;">`;
|
||||
}
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
### 移除缩进算法
|
||||
```javascript
|
||||
const removeIndentFromParagraphs = (content: string): string => {
|
||||
return content.replace(/<p([^>]*)>/g, (match, attrs) => {
|
||||
if (attrs.includes('text-indent')) {
|
||||
// 移除 text-indent 属性
|
||||
let newAttrs = attrs.replace(/text-indent:\s*[^;]+;?\s*/g, '');
|
||||
|
||||
// 如果 style 属性变空了,移除整个 style 属性
|
||||
newAttrs = newAttrs.replace(/style="\s*"/g, '');
|
||||
newAttrs = newAttrs.replace(/style=''\s*/g, '');
|
||||
|
||||
return `<p${newAttrs}>`;
|
||||
}
|
||||
return match;
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
## 🧪 使用方法
|
||||
|
||||
### 1. 准备内容
|
||||
在富文本编辑器中输入一些段落内容:
|
||||
```
|
||||
这是第一个段落,用来测试首行缩进功能。
|
||||
|
||||
这是第二个段落,也是用来测试的内容。
|
||||
|
||||
这是第三个段落,包含更多的文字内容来展示效果。
|
||||
```
|
||||
|
||||
### 2. 切换缩进
|
||||
1. 点击工具栏的"首行缩进"按钮
|
||||
2. 观察提示信息:
|
||||
- 添加缩进时:`📐 已添加段落首行缩进`
|
||||
- 移除缩进时:`📐 已移除段落首行缩进`
|
||||
|
||||
### 3. 验证效果
|
||||
- **有缩进时**:每个段落的第一行会向右缩进 2 个字符的距离
|
||||
- **无缩进时**:段落恢复到左对齐状态
|
||||
|
||||
## 🎯 应用场景
|
||||
|
||||
### 📚 中文文章
|
||||
- **学术论文**:符合中文学术写作规范
|
||||
- **新闻报道**:传统中文排版习惯
|
||||
- **小说散文**:提升阅读体验
|
||||
|
||||
### 🌍 多语言内容
|
||||
- **中英混排**:可以选择性应用缩进
|
||||
- **灵活切换**:根据内容类型调整格式
|
||||
- **用户偏好**:满足不同用户的排版需求
|
||||
|
||||
## 💡 设计亮点
|
||||
|
||||
### 🎨 人性化设计
|
||||
- **直观操作**:一键切换,简单易用
|
||||
- **智能检测**:自动判断当前状态
|
||||
- **友好反馈**:清晰的操作提示
|
||||
|
||||
### 🔧 技术优势
|
||||
- **正则匹配**:精确处理 HTML 标签
|
||||
- **样式保持**:不影响其他段落样式
|
||||
- **兼容性好**:与现有功能完美配合
|
||||
|
||||
### 🚀 扩展性强
|
||||
- **模块化设计**:独立的功能模块
|
||||
- **易于维护**:清晰的代码结构
|
||||
- **可扩展**:可以轻松添加更多排版选项
|
||||
|
||||
## 🔍 错误处理
|
||||
|
||||
### 内容检查
|
||||
- **空内容提示**:`📝 请先输入一些段落内容,然后再切换首行缩进`
|
||||
- **异常处理**:`🔧 首行缩进切换失败,请重试`
|
||||
|
||||
### 状态检测
|
||||
- **智能识别**:检查 `text-indent: 2em` 或 `text-indent:2em`
|
||||
- **容错处理**:处理各种可能的样式格式
|
||||
|
||||
## 🎉 总结
|
||||
|
||||
段落首行缩进切换功能是对一键排版功能的完美补充,它:
|
||||
|
||||
1. **提升用户体验**:简单直观的操作方式
|
||||
2. **满足实际需求**:符合中文排版习惯
|
||||
3. **技术实现优雅**:高效的算法和完善的错误处理
|
||||
4. **扩展性良好**:为未来功能扩展奠定基础
|
||||
|
||||
这个功能让用户可以根据具体需求灵活调整段落格式,真正实现了人性化的智能排版体验!
|
||||
Reference in New Issue
Block a user