publish.html 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>layui</title>
  6. <meta name="renderer" content="webkit">
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  8. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  9. <link rel="stylesheet" href="__PUBLIC__/layui/css/layui.css" media="all">
  10. <link rel="stylesheet" href="__PUBLIC__/font-awesome/css/font-awesome.min.css" media="all"/>
  11. <link rel="stylesheet" href="__CSS__/admin.css" media="all">
  12. <link rel="stylesheet" href="__PUBLIC__/codemirror/lib/codemirror.css">
  13. <link rel="stylesheet" href="__PUBLIC__/codemirror/addon/fold/foldgutter.css" />
  14. <script src="__PUBLIC__/codemirror/lib/codemirror.js"></script>
  15. <script src="__PUBLIC__/codemirror/addon/fold/foldcode.js"></script>
  16. <script src="__PUBLIC__/codemirror/addon/fold/foldgutter.js"></script>
  17. <script src="__PUBLIC__/codemirror/addon/fold/brace-fold.js"></script>
  18. <script src="__PUBLIC__/codemirror/addon/fold/xml-fold.js"></script>
  19. <script src="__PUBLIC__/codemirror/addon/fold/indent-fold.js"></script>
  20. <script src="__PUBLIC__/codemirror/addon/fold/comment-fold.js"></script>
  21. <script src="__PUBLIC__/codemirror/mode/javascript/javascript.js"></script>
  22. <script src="__PUBLIC__/codemirror/mode/xml/xml.js"></script>
  23. <script src="__PUBLIC__/codemirror/mode/css/css.js"></script>
  24. <script src="__PUBLIC__/codemirror/mode/htmlmixed/htmlmixed.js"></script>
  25. <link rel="stylesheet" href="__PUBLIC__/codemirror/addon/display/fullscreen.css">
  26. <script src="__PUBLIC__/codemirror/addon/display/fullscreen.js"></script>
  27. </head>
  28. <style>
  29. .CodeMirror {border-top: 1px solid #eee; border-bottom: 1px solid #eee; height: 500px}
  30. </style>
  31. <body style="padding:10px;">
  32. <div class="tplay-body-div">
  33. {empty name="$fullname"}
  34. <div class="layui-tab">
  35. <ul class="layui-tab-title">
  36. <li class="a_menu"><a href="{:url('index')}?relative_path={$relative_path}">文件列表</a></li>
  37. <li class="layui-this">新建文件</li>
  38. </ul>
  39. </div>
  40. {/empty}
  41. <div style="margin-top: 20px;">
  42. </div>
  43. <form class="layui-form" id="publish" method="post">
  44. {empty name="$fullname"}
  45. <div class="layui-form-item">
  46. <label class="layui-form-label">当前路径</label>
  47. <div class="layui-form-mid layui-word-aux">\{$relative_path}</div>
  48. </div>
  49. <div class="layui-form-item">
  50. <label class="layui-form-label">文件名称</label>
  51. <div class="layui-input-inline" style="max-width:300px;">
  52. <input name="name" lay-verify="required" autocomplete="off" placeholder="请输入如:index.html" class="layui-input"
  53. type="text" value="{$fullname|default=''}">
  54. </div>
  55. <div class="layui-form-mid layui-word-aux">须包含文件后缀</div>
  56. </div>
  57. {/empty}
  58. <div class="layui-form-item layui-form-text">
  59. <div class="layui-input-inline" style="width:100%;">
  60. <textarea id="code-html" placeholder="请输入内容" class="layui-textarea" rows="30" name="content">{notempty name="$content"}{$content|htmlspecialchars}{/notempty}</textarea>
  61. </div>
  62. <div class="layui-form-mid layui-word-aux">快捷键:F11全屏,Ctrl+Q折叠代码</div>
  63. </div>
  64. {notempty name="$fullname"}
  65. <input type="hidden" name="fullname" value="{$fullname}">
  66. <input type="hidden" name="filemtime" id="filemtime" value="{$filemtime}">
  67. {/notempty}
  68. <input type="hidden" name="relative_path" value="{$relative_path}">
  69. <div class="layui-form-item">
  70. <div class="layui-input-block">
  71. <button class="layui-btn" lay-submit lay-filter="admin">立即提交</button>
  72. <button type="reset" class="layui-btn layui-btn-primary" onclick="location.reload()">刷新</button>
  73. </div>
  74. </div>
  75. </form>
  76. <script src="__PUBLIC__/layui/layui.js"></script>
  77. <script src="__PUBLIC__/jquery/jquery.min.js"></script>
  78. <script>
  79. layui.use(['layer', 'form'], function () {
  80. var layer = layui.layer,
  81. $ = layui.jquery,
  82. form = layui.form;
  83. $(window).on('load', function () {
  84. //
  85. var te_html = document.getElementById("code-html");
  86. var editor = CodeMirror.fromTextArea(te_html, {
  87. mode: "text/html",
  88. lineNumbers: true,
  89. lineWrapping: true,
  90. extraKeys: {
  91. "Ctrl-Q": function (cm) {
  92. cm.foldCode(cm.getCursor());
  93. },
  94. "F11": function(cm) {
  95. cm.setOption("fullScreen", !cm.getOption("fullScreen"));
  96. },
  97. "Esc": function(cm) {
  98. if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
  99. }
  100. },
  101. foldGutter: true,
  102. gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"]
  103. });
  104. //
  105. form.on('submit(admin)', function (data) {
  106. te_html.value = editor.getValue();
  107. $.ajax({
  108. url: "{:url('publish')}",
  109. data: $('#publish').serialize(),
  110. type: 'post',
  111. async: false,
  112. success: function (res) {
  113. if (res.code == 1) {
  114. {notempty name="$fullname"}
  115. layer.confirm(res.msg, {
  116. btn: ['关闭','继续编辑']
  117. }, function (index) {
  118. window.parent.tab.close('filemanage_{:str_replace(".","",$fullname)}');
  119. }, function (index, layero) {
  120. $('#filemtime').val(res.data)
  121. });
  122. {else/}
  123. layer.alert(res.msg, function (index) {
  124. location.href = res.data.relative_path != null ? res.url + "?relative_path=" + res.data.relative_path : res.url;
  125. })
  126. {/notempty}
  127. } else {
  128. layer.msg(res.msg);
  129. }
  130. }
  131. })
  132. return false;
  133. });
  134. });
  135. });
  136. </script>
  137. </div>
  138. </body>
  139. </html>