web前端格式化缩进Razor代码,razor format


上效果图,利用js-beautify美化Razor代码格式化,缩进

web前端格式化缩进Razor代码,razor format

 

如果直接用js-beautify格式化razor代码,结果如下所示,看起来不美观的地方已经标记

web前端格式化缩进Razor代码,razor format

解决方案

js-beautify美化razor代码的结果,在做一些针对razor的特殊处理

JavaScript 全选
// 格式化html
$("#format_pluginHtml").click(function() {
	try {
		// 获得CoeMirror组件代码内容
		var source = editorPluginHtml.getValue();
		// 使用js-beautify格式化代码
		var output = new beautifyHelper().beautify(source, 'html')
		// 更新美化的代码到组件,beautify不支持razor,直接用结果会存在一些缩进问题
		//editorPluginHtml.setValue(output);
		//return
		// 添加一些razor的配置,按行来
		var lines = output.split('\n') var addTabSize = 0;
		var tag_blocks = [];

		lines.forEach((value, index, arr) = >{

			var txt = value.trim() if (txt == '}') {
				// 遇到razor 代码块结尾,随后的行减少一个缩进
				if (tag_blocks.length == 0 || tag_blocks[tag_blocks.length - 1] == 'razor') addTabSize -= 1;
				tag_blocks.pop()
			}

			if (addTabSize > 0) {
				var str = ''
				for (var i = 0; i < addTabSize; i++) str += '  '
				// 代码增加一个razor缩进
				arr[index] = str + value;
			}

			if (txt == '@{' || txt == '{') {
				// 如果当前行是@{ 或者 {,随后的行增加一个缩进
				addTabSize += 1;
				tag_blocks.push('razor')
			} else {
				var _v = (value.split('{').length - 1) - (value.split('}').length - 1) if (_v > 0) {
					tag_blocks.push('other');
				}
			}

		});
		var cursor = editorCode.getCursor() var scroller_y = editorCode.getScrollInfo().top;
		editorCode.setValue(lines.join('\n'));
		editorCode.setCursor(cursor) editorCode.scrollTo(0, scroller_y)
	} catch(err) {
		console.log(err.message)
	} finally {
		return false;
	}
})

效果如下,基本达到要求,如果还存在不合理之处的,可以再根据实际情况自行调整代码

web前端格式化缩进Razor代码,razor format

beautifyHelper,类库

JavaScript 全选
class beautifyHelper {
    beautify(source, language) {
        //var language = "js";// js html css

        var opts = {
            indent_size: "2",
            indent_char: " ",
            max_preserve_newlines: "5",
            preserve_newlines: true,
            keep_array_indentation: false,
            break_chained_methods: false,
            indent_scripts: "normal",
            brace_style: "collapse",
            space_before_conditional: true,
            unescape_strings: false,
            jslint_happy: false,
            end_with_newline: false,
            wrap_line_length: "0",
            indent_inner_html: false,
            comma_first: false,
            e4x: false,
            indent_empty_lines: false
        };

        var the = this;

        var output = "";
        if (language === 'html') {
            output = html_beautify(source, opts);
        } else if (language === 'css') {
            output = css_beautify(source, opts);
        } else {
            if ($('#detect-packers').prop('checked')) {
                source = this.unpacker_filter(source);
            }
            output = js_beautify(source, opts);

        }

        return output;

    };

    mergeObjects(allOptions, additionalOptions) {
        var finalOpts = {};
        var name;

        for (name in allOptions) {
            finalOpts[name] = allOptions[name];
        }
        for (name in additionalOptions) {
            finalOpts[name] = additionalOptions[name];
        }
        return finalOpts;
    };

    unpacker_filter(source) {
        var leading_comments = ''
        var comment = ''
        var unpacked = ''
        var found = false

        // cuts leading comments
        do {
            found = false;
            if (/^\s*\/\*/.test(source)) {
                found = true;
                comment = source.substr(0, source.indexOf('*/') + 2);
                source = source.substr(comment.length);
                leading_comments += comment;
            } else if (/^\s*\/\//.test(source)) {
                found = true;
                comment = source.match(/^\s*\/\/.*/)[0];
                source = source.substr(comment.length);
                leading_comments += comment;
            }
        } while (found);
        leading_comments += '\n';
        source = source.replace(/^\s+/, '');

        var unpackers = [P_A_C_K_E_R, Urlencoded, JavascriptObfuscator /*, MyObfuscate*/];
        for (var i = 0; i < unpackers.length; i++) {
            if (unpackers[i].detect(source)) {
                unpacked = unpackers[i].unpack(source);
                if (unpacked !== source) {
                    source = unpacker_filter(unpacked);
                }
            }
        }

        return leading_comments + source;
    };
}

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:VS调试运行ASP.NET MVC项目,上传静态资源图片404问题,Debug路径
下一篇:EF Linq查找所有子节点或者所有父节点
评论列表

发表评论

评论内容
昵称:
关联文章

web前端格式化Razor代码razor format
Razor模板编辑高亮CodeMirror和格式化JS-Beautify
css样式首行2个长度的宽度 text-indent 属性
.NETCore动态解析Razor代码cshtml代码解析RazorEngine.NetCore
dotnet 将自动代码格式化机器人带入团队 GitLab 平台
VSCode无法格式化python代码py文件的解决办法
JSON.stringify 输出格式化文本
【推荐】Razor文件编译 ASP.NET Core
CodeMirror Razor支持
YES-WEB快速开发框架,.NET WEB开发平台,高效的web项目开发框架
CodeMirror配合js-beautify格式化代码后,光标恢复到原来位置
YES-WEB开发框架 VS中配置代码生成器快捷按钮
C#格式化JSON字符串
.NET中大型项目开发必备(10)--图片的裁剪、放、与加水印
代码编辑插件使用
.Net Core Razor 预编译,动态编译,混合编译
DTCMS:html模板中格式化时间
CodeMirror 格式化内容和内容选择
C# Newtonsoft.Json.JsonConvert.SerializeObject生成格式化的JSON字符串
C#代码编码规范手册 软件开发规范 开发指南

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码