一、見名知意:見那些class名字知意,見函數名知意,見文件名知意 例如(HISTORY.md
Web 組件更新歷史記錄。)javascript
Web 組件基於 Amaze UI 基礎庫(CSS / JS)開發,在基礎庫已有樣式、功能的基礎上作更多擴展。css
Web 組件的樣式有三個層級:html
Amaze UI 基礎樣式: 每一個網站項目中都會默認引入如下基礎樣式,組件開發時應在如下樣式的基礎上進行。java
variables.less
mixins.less
base.less
grid.less
block-grid.less
utility.less
Amaze UI 其餘樣式組件:Web 組件編寫過程當中使用到相似的樣式時應當引入相關 CSS 組件,在此上進行微調,好比 button.less
、close.less
。node
Web 組件自身樣式:Web 組件自身樣式拆分出骨幹樣式和主題樣式;每一個 Web 組件能夠有多個不一樣主題,主題基於骨幹樣式編寫,每一個主題相互獨立。ios
{widget}.less
命名;{widget}.default.less
命名;{widget}.{theme-name}.less
命名。一個組件的目錄結構以下:git
{widget} |-- package.json |-- README.md |-- HISTORY.md |-- resources | `-- screenshots | |-- 0.jpg | |-- 1.jpg | `-- 2.jpg `-- src |-- {widget}.hbs |-- {widget}.js |-- {widget}.less |-- {widget}.default.less |-- {widget}.[theme1].less |-- {widget}.[themen].less `-- {widget}.png
package.json
Web 組件核心描述文件,json
格式,下面的註釋僅爲方便解釋各項含義添加。github
{
// 組件名稱: 使用小寫字母,不能和存在的組件重名 "name": "sample", // 版本號 "version": "0.0.1", // 組件本地化名字,目前有中文、英文兩個選項 "localName": { "en": "", "zh-cn": "" }, // 組件類型 [""|"layout"|"social"] "type": "", // 組件 ICON,存放在 src 目錄下 "icon": "sample.png", // 做者信息 "author": { "name": "xxx", "email": "xxx@yunshipei.com" }, // 組件描述 "description": "sample 描述", // 組件驅動者 "poweredBy": "AllMobilize", // 基礎樣式(無需修改) "styleBase": [ "variables.less", "mixins.less", "base.less", "grid.less", "block-grid.less", "utility.less" ], // 組件模板,使用 [handlebarsjs](http://handlebarsjs.com/) "template": "sample.hbs", // 依賴的庫樣式 "styleDependencies": [ "icon.less" ], // 組件核心樣式 "style": "sample.less", // 組件主題(沒有主題時將值設置爲 null) "themes": [ { // 主題名稱 sample.{xxx}.less 中的 {xxx},儘可能語義化描述主題 "name": "default", // 主題描述,簡要描述主題 "desc": "默認", // 主題使用配置選項 "options": {}, // 主題鉤子 "hook": "hook-am-sample-default", // 主題使用的less變量 "variables": [ { // 變量名 "variable": "", // 變量描述名字 "name": "", // 默認值 "default": "", // 使用改變量的 css 樣式 "used": [ { "selector": "", "property": "" } ] } ], // 主題演示數據,能夠爲多個 "demos": [ { // 演示描述 "desc": "", // 演示數據 "data": {} } ] } ], // Amaze UI 核心js(無需修改) "jsBase": [ "core.js" ], // 依賴的 Amaze UI js 插件 "jsDependencies": [], // 組件腳本 "script": "sample.js", // api 用於生成用戶 GUI 界面以及保存用戶提交的數據 "api": { "id": { "name": "ID", // 表單提示名稱 "desc": "組件自定義ID,遵循CSS ID命名規範", "type": "text", // 表單類型 "default": "", // 默認值 "pattern": "", // 表單驗證正則表達式 "required": false // 是否爲必填 }, "className": { "name": "Class", "desc": "用戶自定義組件 class,遵循 CSS class 命名規範", "type": "text", "default": "", "required": false }, // 主題選擇(沒有主題時將值設置爲 null) "theme": { "name": "主題", "desc": "組件主題", "type": "select", // 下拉選框 "default": "default", "required": true, "dataList": "<%= pkg.themes %>" // 從 themes 中讀取主題列表 }, // 組件選項(沒有選項時將值設置爲 null) "options": { "multiple": { "name": "同時展開多個面板", "desc": "是否容許同時展開多個面板", "type": "select", "default": false, "required": false, // 表單類型爲 select 時經過 dataList 設置 <option> 數據 "dataList": [ { "value": "false", "title": "不啓用", "selected": true }, { "value": true, "title": "啓用" } ] } }, // 內容 "content": { // 內容類型 Array 數組、Object(對象) "type": "Array", "item": { "title": { "type": "text", "comment": "面板標題" }, "content": { "type": "html", "comment": "面板內容" } } } // 表單接口 - 測試接口,細節還會作調整 // 提供的表單接口必須支持跨域調用,並返回 JSON 數據 "forms": { "signin": { "url": "http://api.xxx.com/signin", // 提交數據的接口 "type": "POST", "desc": "登陸表單,你能夠在這裏寫表單的描述信息", "fields": { // 表單字段,字段名稱應該和返回數據裏的字段對應 "username": { "name": "用戶名", "placeholder": "請使用郵箱", "type": "text", "default": "", "required": true }, "password": { "name": "密碼", "placeholder": "設置密碼", "type": "text", "default": "", "required": true }, "submit": { "name": "提交信息", "type": "submit", "default": "" } } }, "signup": { "url": "http://api.xxx.com/signup", "type": "POST", "desc": "註冊表單,你能夠在這裏寫表單的描述信息", "fields": { "username": { "name": "用戶名", "placeholder": "請使用郵箱", "type": "text", "default": "", "required": true }, "password": { "name": "密碼", "placeholder": "設置密碼", "type": "text",