ธีมเป็นวิธีปรับแต่งรูปลักษณ์ของ Blockly คุณสามารถปรับแต่งสีบล็อก สีหมวดหมู่ และคอมโพเนนต์บางอย่างผ่านคลาส Themes หากต้องการปรับแต่งคอมโพเนนต์เพิ่มเติม เราจะระบุชื่อธีมเป็นคลาสใน div ของการแทรก ซึ่งจะช่วยให้ผู้ใช้เปลี่ยนรูปลักษณ์ของคอมโพเนนต์ที่ไม่รองรับผ่าน CSS ได้ เป้าหมายหลักของเราในการสร้างธีมคือการช่วยให้นักพัฒนาแอปสร้างประสบการณ์การใช้งาน Blockly ที่เข้าถึงได้มากขึ้น
พร็อพเพอร์ตี้ของธีม
ธีมคือออบเจ็กต์ที่มีพร็อพเพอร์ตี้หลายรายการ ได้แก่ ธีมฐานที่จะขยาย สไตล์ออบเจ็กต์สำหรับบล็อก หมวดหมู่ คอมโพเนนต์ และแบบอักษร รวมถึงจะใช้หมวกสำหรับบล็อกเริ่มต้นหรือไม่
สไตล์บล็อก
สไตล์บล็อกประกอบด้วยช่อง 4 ช่อง ดังนี้
colourPrimary(ต้องระบุ) - สีพื้นหลังของบล็อกcolourSecondary(ไม่บังคับ) - สีพื้นหลังหากบล็อกเป็นบล็อกเงาcolourTertiary(ไม่บังคับ) - สีเส้นขอบหรือสีไฮไลต์ของบล็อกhat(ไม่บังคับ) - เพิ่มหมวกให้กับบล็อก หากตั้งค่าเป็นcapดูข้อมูลเพิ่มเติมเกี่ยวกับ หมวก
const listBlocks = {
'colourPrimary': '#4a148c',
'colourSecondary':'#AD7BE9',
'colourTertiary':'#CDB6E9',
'hat': 'cap'
}
ธีมจะมีข้อมูลการแมปชื่อสไตล์บล็อกกับออบเจ็กต์สไตล์บล็อก ดังนี้
const blockStyles = {
'list_blocks': {
'colourPrimary': '#4a148c',
'colourSecondary':'#AD7BE9',
'colourTertiary':'#CDB6E9'
},
'logic_blocks': {
'colourPrimary': '#01579b',
'colourSecondary':'#64C7FF',
'colourTertiary':'#C5EAFF'
}
}
สไตล์หมวดหมู่
สไตล์หมวดหมู่มีพร็อพเพอร์ตี้สีเท่านั้น
- สี (ต้องระบุ) - สีของหมวดหมู่ในกล่องเครื่องมือ โดยปกติสีเหล่านี้ควรเหมือนกับ
colourPrimaryในบล็อกส่วนใหญ่ในหมวดหมู่ ซึ่งจะช่วยให้ผู้ใช้ทราบได้ง่ายว่าบล็อกใดอยู่ในหมวดหมู่ใด

const mathCategory = {
'colour':'290'
}
ธีมจะมีข้อมูลการแมปชื่อหมวดหมู่กับออบเจ็กต์สไตล์หมวดหมู่ ดังนี้
const categoryStyles = {
'list_category': {
'colour': '#4a148c'
},
'logic_category': {
'colour': '#01579b',
}
}
สไตล์คอมโพเนนต์
ธีมสามารถตั้งค่าสีหรือค่าของคอมโพเนนต์ด้านล่างได้
workspaceBackgroundColour: สีพื้นหลังของพื้นที่ทำงานtoolboxBackgroundColour: สีพื้นหลังของกล่องเครื่องมือtoolboxForegroundColour: สีข้อความหมวดหมู่ของกล่องเครื่องมือflyoutBackgroundColour: สีพื้นหลังของ FlyoutflyoutForegroundColour: สีข้อความป้ายกำกับของ FlyoutflyoutOpacity: ความทึบของ FlyoutscrollbarColour: สีแถบเลื่อนscrollbarOpacity: ความทึบของแถบเลื่อนinsertionMarkerColour: สีตัวทำเครื่องหมายการแทรก (ไม่รับชื่อสี)insertionMarkerOpacity: ความทึบของตัวทำเครื่องหมายการแทรกmarkerColour: สีของตัวทำเครื่องหมายที่แสดงในโหมดการนำทางด้วยแป้นพิมพ์cursorColour: สีของเคอร์เซอร์ที่แสดงในโหมดการนำทางด้วยแป้นพิมพ์
คุณสามารถเปลี่ยนคอมโพเนนต์อื่นๆ ส่วนใหญ่ได้โดยใช้ชื่อธีมใน CSS อย่างไรก็ตาม หากมีคอมโพเนนต์ที่ต้องการเปลี่ยนซึ่งยังไม่ได้เป็นส่วนหนึ่งของรายการนี้และไม่สามารถเปลี่ยนได้โดยใช้ CSS โปรดรายงานปัญหาพร้อมข้อมูลเพิ่มเติม
const componentStyle = {
'workspaceBackgroundColour': '#1e1e1e',
'toolboxBackgroundColour': '#333'
}
สไตล์แบบอักษร
สไตล์แบบอักษรคือออบเจ็กต์ที่เก็บชุดแบบอักษร ความหนา และขนาดของแบบอักษร
const fontStyle = {
'family': 'Georgia, serif',
'weight': 'bold',
'size': 12
}
หมวกเริ่มต้น
หากตั้งค่า startHats: true โดยตรงในออบเจ็กต์ธีม ระบบจะเพิ่มหมวกให้กับบล็อกทั้งหมดที่ไม่มีการเชื่อมต่อก่อนหน้าหรือการเชื่อมต่อเอาต์พุต หากต้องการควบคุมบล็อกที่จะได้รับหมวกอย่างแม่นยำ คุณสามารถใช้
พร็อพเพอร์ตี้สไตล์บล็อกแทน
ธีมที่กำหนดเอง
หากต้องการเพิ่มธีมลงในแอปพลิเคชัน Blockly คุณจะต้องทำดังนี้
- สร้างธีม
- เพิ่มชื่อสไตล์
- ตั้งค่าธีมในพื้นที่ทำงาน
สร้างธีม
คุณสร้างธีมได้โดยใช้เครื่องมือสร้างหรือใช้ defineTheme การใช้ defineTheme ช่วยให้ขยายธีมที่มีอยู่ก่อนหน้านี้และตั้งค่าทั้งหมดด้วยออบเจ็กต์เดียวได้ง่าย ธีมมีชื่อและเป็นออบเจ็กต์ที่มีสไตล์บล็อก สไตล์หมวดหมู่ และพร็อพเพอร์ตี้อื่นๆ ตามที่กล่าวไว้ข้างต้น
นอกจากนี้ ธีมยังมีธีมฐาน ซึ่งจะระบุค่าเริ่มต้นสำหรับค่าที่ไม่ได้ระบุในธีมที่กำหนดเอง
const theme = Blockly.Theme.defineTheme('themeName', {
'base': Blockly.Themes.Classic,
'blockStyles': {
'logic_blocks': {
'colourPrimary': '#4a148c'
},
'math_blocks': {...}
},
'categoryStyles': {...},
'componentStyles': {...},
'fontStyle': {...},
'startHats': true
});
เพิ่มชื่อสไตล์
เมื่อสร้างธีมแล้ว เราต้องเพิ่มชื่อสไตล์ลงในการกำหนดบล็อกและหมวดหมู่
หมวดหมู่
หากต้องการใช้สไตล์หมวดหมู่ที่กำหนดไว้ใน categoryStyles ของธีม ให้เพิ่มสไตล์ดังกล่าวลงในการกำหนดหมวดหมู่ ดังนี้
JSON
{
"kind": "category",
"name": "Logic",
"categorystyle": "logic_category"
}
XML
<category name="Logic" categorystyle="logic_category"></category>
บล็อก
หากต้องการใช้สไตล์บล็อกที่กำหนดไว้ใน blockStyles ของธีม ให้เพิ่มสไตล์ดังกล่าวลงในการกำหนดบล็อก ดังนี้
JSON
"style":"logic_blocks"
JavaScript
this.setStyle('logic_blocks');
ตั้งค่าธีม
นอกจากนี้ คุณยังต้องบอก Blockly ว่าจะใช้ธีมใด การกำหนดธีมหลายรายการที่ใช้ชื่อสไตล์บล็อกและชื่อหมวดหมู่เดียวกันจะช่วยให้ผู้ใช้เลือกธีมที่เหมาะกับตนเองมากที่สุดและเปลี่ยนธีมแบบไดนามิกได้โดยไม่ต้องเปลี่ยนการกำหนดบล็อกเอง
ธีมเริ่มต้น
วิธีที่ดีที่สุดในการตั้งค่าธีมเริ่มต้นคือการรวมตัวเลือกการกำหนดค่า theme ไว้ในการเรียก Blockly.inject คุณสามารถระบุธีมใน JSON หรือ JavaScript
JSON
Blockly.inject('blocklyDiv', {
theme: {
"blockStyles" : {
"list_blocks": {
"colourPrimary": "#4a148c",
"colourSecondary":"#AD7BE9",
"colourTertiary":"#CDB6E9"
}
},
"categoryStyles" : {
"list_category": {
"colour": "#4a148c"
}
},
"componentStyles" : {
"workspaceBackgroundColour": "#1e1e1e"
}
},
...
});
JavaScript
Blockly.inject('blocklyDiv', {
theme: Blockly.Theme.defineTheme('themeName', {
'blockStyles': blockStyles,
'categoryStyles': categoryStyles,
'componentStyles': componentStyles
}),
...
});
หากไม่ได้ระบุธีม ระบบจะใช้ธีม คลาสสิกเป็นค่าเริ่มต้น
ธีมแบบไดนามิก
หากต้องการเปลี่ยนธีมแบบไดนามิก (เช่น ในกรณีที่อนุญาตให้ผู้ใช้เลือกธีมจากเมนูแบบเลื่อนลง) คุณสามารถเรียก yourWorkspace.setTheme(theme)
สร้างสคริปต์สไตล์บล็อก
Blockly มีสคริปต์ที่จะรับข้อมูลการแมปค่าสีหรือค่า Hex และคำนวณสีรองและสีระดับที่ 3 ให้ คุณดูสคริปต์ได้ ใน โฟลเดอร์ scripts/themes
ธีมในระบบ
Blockly มีธีมจำนวนหนึ่งสำหรับการช่วยเหลือพิเศษ โดยเฉพาะอย่างยิ่งสำหรับภาวะบกพร่องในการมองเห็นสีบางประเภท ดังนี้
นอกจากนี้ เรายังมีธีมต่อไปนี้