header.js

6.05 KB
12/10/2025 04:21
JS
header.js
/**
 * Header Plugin
 * ปลั๊กอินสำหรับส่วนหัวของเว็บไซต์
 */
(function(global) {
  'use strict';

  /**
   * คลาส HeaderPlugin
   * ปลั๊กอินสำหรับส่วนหัวของเว็บไซต์
   */
  class HeaderPlugin {
    constructor(editor) {
      this.editor = editor;
      this.name = 'header';
      this.title = 'ส่วนหัว';
      this.icon = 'header';
      this.description = 'ส่วนหัวของเว็บไซต์';
    }

    /**
     * เริ่มต้นปลั๊กอิน
     */
    init() {
      if (this.editor.config.debug) {
        console.log('HeaderPlugin เริ่มต้นแล้ว');
      }
    }

    /**
     * รับเทมเพลตของปลั๊กอิน
     */
    getTemplate() {
      return `
                <header class="editor-component header" data-component="header">
                    <div class="container">
                        <div class="header-logo">
                            <h1 data-editable="true">โลโก้เว็บไซต์</h1>
                        </div>
                        <nav class="header-nav">
                            <ul>
                                <li><a href="#" data-editable="true">หน้าแรก</a></li>
                                <li><a href="#" data-editable="true">เกี่ยวกับ</a></li>
                                <li><a href="#" data-editable="true">บริการ</a></li>
                                <li><a href="#" data-editable="true">ผลงาน</a></li>
                                <li><a href="#" data-editable="true">ติดต่อ</a></li>
                            </ul>
                        </nav>
                        <div class="header-actions">
                            <button class="btn btn-outline" data-editable="true">เข้าสู่ระบบ</button>
                            <button class="btn btn-primary" data-editable="true">สมัครสมาชิก</button>
                        </div>
                    </div>
                </header>
            `;
    }

    /**
     * รับ CSS ของปลั๊กอิน
     */
    getCSS() {
      return `
                .header {
                    background-color: #ffffff;
                    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
                    padding: 15px 0;
                    position: sticky;
                    top: 0;
                    z-index: 100;
                }

                .header .container {
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    max-width: 1200px;
                    margin: 0 auto;
                    padding: 0 20px;
                }

                .header-logo h1 {
                    margin: 0;
                    font-size: 24px;
                    color: #333;
                }

                .header-nav ul {
                    display: flex;
                    list-style: none;
                    margin: 0;
                    padding: 0;
                }

                .header-nav li {
                    margin: 0 15px;
                }

                .header-nav a {
                    text-decoration: none;
                    color: #333;
                    font-weight: 500;
                    transition: color 0.2s;
                }

                .header-nav a:hover {
                    color: #2196F3;
                }

                .header-actions {
                    display: flex;
                    gap: 10px;
                }

                .btn {
                    padding: 8px 16px;
                    border-radius: 4px;
                    font-weight: 500;
                    cursor: pointer;
                    transition: all 0.2s;
                    border: none;
                }

                .btn-outline {
                    background-color: transparent;
                    border: 1px solid #2196F3;
                    color: #2196F3;
                }

                .btn-outline:hover {
                    background-color: #2196F3;
                    color: white;
                }

                .btn-primary {
                    background-color: #2196F3;
                    color: white;
                }

                .btn-primary:hover {
                    background-color: #1976D2;
                }

                @media (max-width: 768px) {
                    .header .container {
                        flex-direction: column;
                        gap: 15px;
                    }

                    .header-nav ul {
                        flex-wrap: wrap;
                        justify-content: center;
                    }

                    .header-nav li {
                        margin: 5px 10px;
                    }
                }
            `;
    }

    /**
     * รับการตั้งค่าของปลั๊กอิน
     */
    getSettings() {
      return {
        logo: {
          type: 'text',
          label: 'ข้อความโลโก้',
          default: 'โลโก้เว็บไซต์'
        },
        backgroundColor: {
          type: 'color',
          label: 'สีพื้นหลัง',
          default: '#ffffff'
        },
        sticky: {
          type: 'checkbox',
          label: 'ติดด้านบน',
          default: true
        },
        showLoginButton: {
          type: 'checkbox',
          label: 'แสดงปุ่มเข้าสู่ระบบ',
          default: true
        },
        showSignupButton: {
          type: 'checkbox',
          label: 'แสดงปุ่มสมัครสมาชิก',
          default: true
        }
      };
    }
  }

  // เปิดเผยคลาส HeaderPlugin ทั่วโลก
  global.HeaderPlugin = HeaderPlugin;

})(typeof window !== 'undefined' ? window : this);