如何在没有画布的情况下内联加载 Grapes JS?

问题描述

我正在尝试使用葡萄 Js 来编辑 HTML(即字体大小、颜色等)。我正在将 HTML 和 CSS 动态加载到葡萄 Js 中。

但我想知道有没有一种方法可以在没有葡萄 js 画布的情况下直接在 HTML 中编辑字体大小?。

请找到我用来将 HTML 的 html 和 css 加载到葡萄 JS 中的以下代码

const createGrapesJstemplate = (body) => {
    const str = `<div>
                    <div class="panel__top">
            <div class="panel__basic-actions"></div>
            <div class="panel__switcher"></div>
          </div>

          <div class="editor-row">
            <div class="editor-canvas">
              <div id="gjs">
                ${body}
              </div>
            </div>
            <div class="panel__right" id="panel__right">
              <div class="layers-container"></div>
              <div class="styles-container"></div>
              <div class="add-class" id="add-class">
                <label htmlFor="class">Class Name</label>
                <input
                  style="margin-top: 2%; color:black"
                  type="text"
                  id="add-class-input"
                />
                <button style="background-color:red; color:white" onclick="addClass()">
                  Add
                </button>
              </div>
              <div id="doneChanges" class="doneChanges" style="margin-top:5%; display:flex; justify-content: flex-start">
                <button onclick="onClickingDone()" style="background-color:red; color:white">
                  Done
                </button>
              </div>
            </div>
          </div>
                </div>`

    let html

    if (false) {
    } else {
        var dom = document.createElement('div')
        dom.innerHTML = str;
        html = dom;
    }

    $("body").html(html)
}

const appendGrapesJSScript = (style) => {

    const grapesJSScript = document.createElement("script")
    grapesJSScript.innerHTML = `editor = grapesjs.init({
      // Indicate where to init the editor. You can also pass an HTMLElement
      container: "#gjs",// Get the content for the canvas directly from the element
      // As an alternative we Could use: "components: '<h1>Hello World Component!</h1>'",fromElement: true,// Size of the editor

      // disable the storage manager for the moment
      storageManager: false,// Avoid any default panel
      layerManager: {
        appendTo: ".layers-container",},//we define the panel right as layout manager
      panels: {
        defaults: [
          {
            id: "layers",el: ".panel__right",// Make the panel resizable
            draggable: true
          },// code for layers and style manager
          {
            id: "panel-switcher",el: ".panel__switcher",buttons: [
              {
                id: "show-layers",active: true,label: "Layers",command: "show-layers",// Once activated disable the possibility to turn it off
                togglable: true,{
                id: "show-style",label: "Styles",command: "show-styles",togglable: true,{
                id: "add-class",label: "CLS",command: "add-classes",],// The Selector Manager allows to assign classes and
      // different states (eg. :hover) on components.
      // Generally,it's used in conjunction with Style Manager
      // but it's not mandatory
      // selectorManager: {
      //   appendTo: ".styles-container",// },styleManager: {
        appendTo: ".styles-container",sectors: [
          {
            name: "Dimension",open: false,// Use built-in properties
            buildProps: ["background-size","margin","padding","width","height","font-size","border-radius"],// Use "properties" to define/override single property
            properties: [
              {
                // Type of the input,// options: integer | radio | select | color | slider | file | composite | stack
                type: "integer",name: "The width",// Label for the property
                property: "width",// CSS property (if buildProps contains it will be extended)
                units: ["px","%"],// Units,available only for 'integer' types
                defaults: "auto",// Default value
                min: 0,// Min value,available only for 'integer' types
              },{
            name: "Extra",buildProps: [
              "background-color","Box-shadow","custom-prop",properties: [
              {
                id: "custom-prop",name: "Font Size",property: "font-size",type: "integer",defaults: "32px",units: ["px",min: 0,blockManager: {},});

    editor.Panels.addPanel({
      id: "panel-top",el: ".panel__top",});
    editor.Panels.addPanel({
      id: "basic-actions",el: ".panel__basic-actions",buttons: [
        {
          id: "export",className: "btn-open-export",label: "Exp",command: "export-template",context: "export-template",// For grouping context of buttons from the same panel
        },});

    // Define commands
    editor.Commands.add("show-layers",{
      getRowEl(editor) {
        return editor.getContainer().closest(".editor-row");
      },getLayersEl(row) {
        return row.querySelector(".layers-container");
      },run(editor,sender) {
        document.getElementById("panel__right").style.width = "230px";
        document.getElementById("doneChanges").style.display = "none";
        const lmEl = this.getLayersEl(this.getRowEl(editor));
        lmEl.style.display = "";
      },stop(editor,sender) {
        document.getElementById("panel__right").style.width = "0px";
        document.getElementById("doneChanges").style.display = "none";
        const lmEl = this.getLayersEl(this.getRowEl(editor));
        lmEl.style.display = "none";
      },});
    editor.Commands.add("show-styles",getStyleEl(row) {
        return row.querySelector(".styles-container");
      },sender) {
        document.getElementById("panel__right").style.width = "230px";
        document.getElementById("doneChanges").style.display = "flex";
        const smEl = this.getStyleEl(this.getRowEl(editor));
        smEl.style.display = "";
      },sender) {
        document.getElementById("panel__right").style.width = "0px";
        document.getElementById("doneChanges").style.display = "none";
        const smEl = this.getStyleEl(this.getRowEl(editor));
        smEl.style.display = "none";
      },});

    editor.Commands.add("add-classes",{
      run(editor,sender) {
        document.getElementById("panel__right").style.width = "230px";
        document.getElementById("doneChanges").style.display = "flex";
        document.getElementById("add-class").style.display = "flex";
      },sender) {
        document.getElementById("panel__right").style.width = "0px";
        document.getElementById("doneChanges").style.display = "none";
        document.getElementById("add-class").style.display = "none";
      },});

    editor.setStyle(${JSON.stringify(style)})
    window.editor = editor    
    `

    document.body.appendChild(grapesJSScript)
}

有人可以帮我弄清楚在没有葡萄 JS Canvas 的情况下直接在网页内加载葡萄 JS 文本编辑器吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)