index.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <!DOCTYPE HTML>
  2. <html lang="zh-CN">
  3. <head>
  4. <title>FH开发者工具</title>
  5. <meta charset="UTF-8">
  6. <link rel="shortcut icon" href="../static/img/favicon.ico">
  7. <link rel="stylesheet" href="index.css" />
  8. <script type="text/javascript" src="../static/vendor/evalCore.min.js"></script>
  9. <script type="text/javascript" src="../static/vendor/vue/vue.js"></script>
  10. </head>
  11. <body>
  12. <div class="wrapper wp-json" id="pageContainer">
  13. <div class="panel panel-default" style="margin-bottom: 0px;">
  14. <div class="panel-heading">
  15. <h3 class="panel-title">
  16. <a href="https://fehelper.com" target="_blank" class="x-a-high">
  17. <img src="../static/img/fe-16.png" alt="fehelper"/> FeHelper</a>:开发者工具
  18. </h3>
  19. </div>
  20. </div>
  21. <div class="panel-body">
  22. <button class="btn btn-primary" @click="addNewTool">开始我的第一个FH工具</button>
  23. <button class="btn btn-default ui-ml-10" @click="startByDemo()">来个HelloWorld试试</button>
  24. <button class="btn btn-default ui-ml-10" @click="loadTool(false)">载入本地工具包(*.zip)</button>
  25. <button class="btn btn-default ui-ml-10" @click="addNewTool('url')">从远程服务载入工具</button>
  26. <button class="btn btn-default ui-ml-10" @click="givenIcons()">获取现成的图标</button>
  27. <button class="btn btn-default ui-ml-10" @click="fhDeveloperDoc">FH工具开发文档</button>
  28. <hr>
  29. <ul class="box-tools">
  30. <li v-for="tool in Object.keys(myTools)" v-cloak>
  31. <i class="x-icon">{{myTools[tool].icon}}</i>
  32. <div class="x-infos">
  33. <b>{{myTools[tool].name}}</b>
  34. <div class="x-tips">{{myTools[tool].tips}}</div>
  35. </div>
  36. <div class="x-btns">
  37. <button class="btn btn-xs btn-success" @click="upgrade(tool)">{{tool===demo.name ? '在线' : 'zip包'}}更新</button>
  38. <button class="btn btn-xs btn-success ui-ml-10" @click="upgrade(tool,true)" v-if="myTools[tool].updateUrl">URL更新</button>
  39. <button class="btn btn-xs btn-primary ui-ml-10" @click="downloadTool(tool)">下载zip包</button>
  40. <button class="btn btn-xs btn-primary ui-ml-10" @click="toggleEditor(true,tool)">编辑</button>
  41. <button class="btn btn-xs btn-danger ui-ml-10" @click="delToolConfigs(tool)">删除</button>
  42. <button class="btn btn-xs ui-fl-r" :class="myTools[tool]._enable ? 'btn-success' : 'btn-warning'" @click="toggleToolEnableStatus(tool)">{{myTools[tool]._enable ? '启用中' : '已停用'}}</button>
  43. </div>
  44. </li>
  45. <li class="x-addtool" title="创建工具" @click="addNewTool('local')">+</li>
  46. </ul>
  47. </div>
  48. <div class="fh-editor" v-cloak v-show="showEditorFlag">
  49. <div class="x-mask"></div>
  50. <div class="x-editor-container">
  51. <div class="x-topbar">
  52. <i class="x-icon">{{model.icon}}</i>
  53. <b class="x-title">{{model.name + ' : ' + model.editingFile}}</b>
  54. <span class="x-close ui-fl-r" @click="toggleEditor(false)">关闭</span>
  55. </div>
  56. <div class="x-leftside">
  57. <ul class="box-files">
  58. <li v-for="file in model.files" @click="editFile(model.tool,file)" :class="model.editingFile === file ? 'x-selected' : ''">
  59. <span class="x-file">{{file.split('/').pop()}} <i class="x-folder" v-if="file.split('/').length>1">({{file.substr(0,file.lastIndexOf('/')).split('/').splice(-2,2).join('/')}})</i></span>
  60. <span class="x-delete" @click="deleteFile(model.tool,file,$event)" v-if="!['index.html','fh-config.js'].includes(file)">删除</span>
  61. </li>
  62. <li class="x-tools">
  63. <button class="btn btn-xs btn-primary" @click="createFile(model.tool)">创建文件</button>
  64. <button class="btn btn-xs btn-success ui-ml-10" @click="importFile(model.tool)">导入文件</button>
  65. </li>
  66. </ul>
  67. </div>
  68. <div class="x-rightside">
  69. <textarea class="form-control" id="txtEditor" ref="txtEditor" placeholder="FH开发者工具-编辑器"></textarea>
  70. </div>
  71. </div>
  72. </div>
  73. <div class="given-icons" v-cloak v-if="showGivenIcons">
  74. <h3>FeHelper为您提供的字符图标</h3>
  75. <span class="ui-fl-r x-close" @click="givenIcons(true)">关闭</span>
  76. <hr>
  77. <div class="the-icons">
  78. <i class="x-icon" v-for="icon in givenIconList" @click="selectIcon(icon)">{{icon}}</i>
  79. </div>
  80. </div>
  81. <div class="x-new-tool-form" v-cloak v-if="showNewToolForm">
  82. <div class="x-mask"></div>
  83. <form @submit.prevent="newToolAction($event)" action="#" class="form-horizontal">
  84. <div class="form-group">
  85. <label for="toolId" class="col-sm-2 control-label">工具ID</label>
  86. <div class="col-sm-10">
  87. <input type="text" class="form-control" id="toolId" ref="toolId" placeholder="由数字、字母、减号组成,如:hello-world" maxlength="30" required="required" pattern="[a-z\-0-9]+">
  88. </div>
  89. </div>
  90. <div class="form-group">
  91. <label for="toolName" class="col-sm-2 control-label">工具名称</label>
  92. <div class="col-sm-10">
  93. <input type="text" class="form-control" id="toolName" ref="toolName" placeholder="中英文均可,但不要超过6个中文字符的宽度" maxlength="20" required="required" pattern="[^\s]+">
  94. </div>
  95. </div>
  96. <div class="form-group">
  97. <label for="toolIcon" class="col-sm-2 control-label">工具Icon</label>
  98. <div class="col-sm-10">
  99. <input type="text" class="form-control" id="toolIcon" ref="toolIcon" placeholder="工具字符图标" maxlength="1" required="required" pattern="[^\s]+" style="width:300px;display: inline-block">
  100. <span class="btn btn-sm btn-primary" @click="givenIcons()">获取现成图标</span>
  101. </div>
  102. </div>
  103. <div class="form-group" v-if="updateUrlMode">
  104. <label for="updateUrl" class="col-sm-2 control-label">Web地址</label>
  105. <div class="col-sm-10">
  106. <input type="text" class="form-control" id="updateUrl" ref="updateUrl" placeholder="该独立工具所在的Web服务URL" required="required" pattern="http(s)?:\/\/[\w\.\-]+\S+">
  107. </div>
  108. </div>
  109. <div class="form-group">
  110. <div class="col-sm-offset-2 col-sm-10">
  111. <div class="checkbox">
  112. <label>
  113. <input type="checkbox" id="hasContentScript" ref="hasContentScript"> 需要进行页面脚本注入
  114. </label>
  115. </div>
  116. <div class="checkbox">
  117. <label>
  118. <input type="checkbox" id="noPage" ref="noPage"> 此工具不需要独立界面
  119. </label>
  120. </div>
  121. </div>
  122. </div>
  123. <div class="form-group">
  124. <div class="col-sm-offset-2 col-sm-10">
  125. <button type="submit" class="btn btn-success">确认创建</button>
  126. <button class="btn btn-default ui-ml-20" @click="showNewToolForm=false">取消</button>
  127. </div>
  128. </div>
  129. </form>
  130. </div>
  131. </div>
  132. <script src="../static/vendor/jszip/jszip.js"></script>
  133. <script src="../static/vendor/jszip/zip.js"></script>
  134. <script src="../static/vendor/jszip/zip-ext.js"></script>
  135. <script src="../static/vendor/jszip/deflate.js"></script>
  136. <script src="../static/vendor/jszip/inflate.js"></script>
  137. <script src="../static/vendor/jszip/mime-types.js"></script>
  138. <script src="../static/vendor/jszip/zip-fs.js"></script>
  139. <script src="../static/vendor/jszip/z-worker.js"></script>
  140. <script src="../static/vendor/codemirror/codemirror.js"></script>
  141. <script src="../static/vendor/codemirror/javascript.js"></script>
  142. <script src="../static/vendor/codemirror/htmlmixed.js"></script>
  143. <script src="../static/vendor/codemirror/xml.js"></script>
  144. <script src="../static/vendor/codemirror/css.js"></script>
  145. <script src="../static/vendor/codemirror/active-line.js"></script>
  146. <script src="../static/vendor/codemirror/matchbrackets.js"></script>
  147. <script src="../static/vendor/codemirror/placeholder.js"></script>
  148. <script src="../static/vendor/codemirror/formatting.js"></script>
  149. <script src="./file-tpl.js"></script>
  150. <script type="module" src="./index.js"></script>
  151. </body>
  152. </html>