diff --git a/.gitignore b/.gitignore index 4172c07..28d9e23 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ .mcattributes package-lock.json +dist/ \ No newline at end of file diff --git a/assets/adv_computer.png b/assets/adv_computer.png new file mode 100644 index 0000000..19ae720 Binary files /dev/null and b/assets/adv_computer.png differ diff --git a/assets/adv_pocket_computer.png b/assets/adv_pocket_computer.png new file mode 100644 index 0000000..743f5c0 Binary files /dev/null and b/assets/adv_pocket_computer.png differ diff --git a/assets/adv_turtle.png b/assets/adv_turtle.png new file mode 100644 index 0000000..e488e0f Binary files /dev/null and b/assets/adv_turtle.png differ diff --git a/assets/basic_computer.png b/assets/basic_computer.png new file mode 100644 index 0000000..2f45e0e Binary files /dev/null and b/assets/basic_computer.png differ diff --git a/assets/command_computer.png b/assets/command_computer.png new file mode 100644 index 0000000..0b00de6 Binary files /dev/null and b/assets/command_computer.png differ diff --git a/assets/library.png b/assets/library.png new file mode 100644 index 0000000..1d70e27 Binary files /dev/null and b/assets/library.png differ diff --git a/assets/network-require.png b/assets/network-require.png new file mode 100644 index 0000000..3ffe356 Binary files /dev/null and b/assets/network-require.png differ diff --git a/assets/organization-logo.png b/assets/organization-logo.png deleted file mode 100644 index 6d52394..0000000 Binary files a/assets/organization-logo.png and /dev/null differ diff --git a/assets/peripheral.png b/assets/peripheral.png new file mode 100644 index 0000000..826f724 Binary files /dev/null and b/assets/peripheral.png differ diff --git a/assets/pocket_computer.png b/assets/pocket_computer.png new file mode 100644 index 0000000..06d5ff8 Binary files /dev/null and b/assets/pocket_computer.png differ diff --git a/assets/turtle.png b/assets/turtle.png new file mode 100644 index 0000000..a3cfb66 Binary files /dev/null and b/assets/turtle.png differ diff --git a/blocks/IDE/index.json b/blocks/IDE/index.json index 744bbbe..6e73aec 100644 --- a/blocks/IDE/index.json +++ b/blocks/IDE/index.json @@ -7,9 +7,16 @@ "keyword": "test", "license": "GPL-3.0-or-later", "peripherals": false, - "library": false, - "turtle": false, - "pocket": false, + "library": true, "require_network": false, - "dependencies": {} + "dependencies": {}, + "design_for_computer": { + "basic": true, + "adv": true, + "command": true, + "pocket": true, + "advpocket": true, + "turtle": true, + "advturtle": true + } } \ No newline at end of file diff --git a/blocks/Template/index.json b/blocks/Template/index.json index c23bd58..e0e7681 100644 --- a/blocks/Template/index.json +++ b/blocks/Template/index.json @@ -8,8 +8,15 @@ "license": "GPL-3.0-or-later", "peripherals": false, "library": false, - "turtle": false, - "pocket": false, "require_network": false, - "dependencies": {} + "dependencies": {}, + "design_for_computer": { + "basic": false, + "adv": false, + "command": false, + "pocket": false, + "advpocket": false, + "turtle": false, + "advturtle": false + } } diff --git a/package.json b/package.json index 689272b..5873519 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "ccide", - "version": "1.0.2", + "version": "1.1", "description": "ComputerCraft mod virtual lua IDE", "main": "index.js", "scripts": { "dev": "electron .", - "nodedev": "node ." + "build": "electron-packager . ccIDE --platform=win32 --arch=x64 --icon=assets/ccIDEIcon.ico --out=dist --overwrite" }, "author": "DPSoftware Foundation", "license": "GPL-3.0-or-later", diff --git a/src/blocksmanager.js b/src/blocksmanager.js index 62af5ea..99d403b 100644 --- a/src/blocksmanager.js +++ b/src/blocksmanager.js @@ -4,8 +4,25 @@ const { DOMParser, XMLSerializer } = require('xmldom'); const peripheralsfolder = path.join(__dirname, "../blocks"); +const fallbackImagePath = path.join(__dirname, '..', 'assets', 'noimagefallback.png'); // Path to fallback image + let registedblock = {} +const defineicon = { + computer: { + basic: path.join(__dirname, '..', 'assets', 'basic_computer.png'), + adv: path.join(__dirname, '..', 'assets', 'adv_computer.png'), + command: path.join(__dirname, '..', 'assets', 'command_computer.png'), + pocket: path.join(__dirname, '..', 'assets', 'pocket_computer.png'), + advpocket: path.join(__dirname, '..', 'assets', 'adv_pocket_computer.png'), + turtle: path.join(__dirname, '..', 'assets', 'turtle.png'), + advturtle: path.join(__dirname, '..', 'assets', 'adv_turtle.png') + }, + peripheral: path.join(__dirname, '..', 'assets', 'peripheral.png'), + library: path.join(__dirname, '..', 'assets', 'library.png'), + networkreq: path.join(__dirname, '..', 'assets', 'network-require.png') +} + function mergeXml(xml1, xml2) { const parser = new DOMParser(); const serializer = new XMLSerializer(); @@ -82,7 +99,31 @@ function extractFolderName(path) { return folderName; } +function fileExists(filePath) { + try { + return fs.existsSync(filePath); + } catch (err) { + return false; + } +} + +function addimageiconinfo(div, src, tiptool) { + const img = document.createElement('img'); + img.src = src + img.classList.add("libimageicon"); + img.setAttribute('data-bs-toggle', "tooltip"); + img.setAttribute('data-bs-placement', "bottom"); + img.setAttribute('data-bs-title', tiptool); + div.appendChild(img); + console.log(`added image ${img}`); +} + function scanindex() { + let foundedpackages = 0; + document.getElementById('statusMessage').textContent = "Scanning Packages..."; + // clear all item in libcontainer + document.getElementById('libcontainer').innerHTML = ""; + const files = fs.readdirSync(peripheralsfolder); // Iterate through files and directories @@ -101,18 +142,96 @@ function scanindex() { const jsonData = JSON.parse(content); blockfoldername = extractFolderName(filePath); - registedblock[blockfoldername] = { - infomation: jsonData, - image: null - }; - console.log(`registered ${blockfoldername} blocks`) + registedblock[blockfoldername] = jsonData; + foundedpackages++; + + // create item in list + const imagePath = path.join(filePath, "icon.png"); + + const libraryItem = document.createElement('div'); + libraryItem.classList.add('library-item', 'overflow-auto', 'library-container'); + libraryItem.setAttribute('data-libraryfolder', blockfoldername); + + // add image + const img = document.createElement('img'); + img.classList.add('libimage'); + if (fileExists(imagePath)) { + img.src = imagePath; + } else { + img.src = fallbackImagePath; + } + libraryItem.appendChild(img); + + // Create the library details container + const libraryDetails = document.createElement('div'); + libraryDetails.classList.add('library-details'); + + // Create the title element + const title = document.createElement('h3'); + title.textContent = jsonData.name + ` [v${jsonData.version} by ${jsonData.author}]`; + libraryDetails.appendChild(title); + + // Create the description element + const description = document.createElement('p'); + description.innerHTML = jsonData.description; + libraryDetails.appendChild(description); + + console.log(jsonData) + if (jsonData.design_for_computer.basic) { + addimageiconinfo(libraryDetails, defineicon.computer.basic, "Basic Computer Supported"); + } + if (jsonData.design_for_computer.adv) { + addimageiconinfo(libraryDetails, defineicon.computer.adv, "Advanced Computer Supported"); + } + if (jsonData.design_for_computer.command) { + addimageiconinfo(libraryDetails, defineicon.computer.command, "Command Computer Supported"); + } + if (jsonData.design_for_computer.pocket) { + addimageiconinfo(libraryDetails, defineicon.computer.pocket, "Pocket Computer Supported"); + } + if (jsonData.design_for_computer.advpocket) { + addimageiconinfo(libraryDetails, defineicon.computer.advpocket, "Advanced Pocket Computer Supported"); + } + if (jsonData.design_for_computer.turtle) { + addimageiconinfo(libraryDetails, defineicon.computer.turtle, "Turtle Supported"); + } + if (jsonData.design_for_computer.advturtle) { + addimageiconinfo(libraryDetails, defineicon.computer.advturtle, "Advanced Turtle Supported"); + } + + // check computer type support + if (jsonData.peripherals) { + addimageiconinfo(libraryDetails, defineicon.peripheral, "Peripheral"); + } + if (jsonData.library) { + addimageiconinfo(libraryDetails, defineicon.library, "Library"); + } + if (jsonData.require_network) { + addimageiconinfo(libraryDetails, defineicon.networkreq, "Require Network"); + } + + libraryItem.appendChild(libraryDetails); + document.getElementById('libcontainer').appendChild(libraryItem); + console.log(`registered ${blockfoldername} blocks and added to packages managers`) } }) } }); + + document.querySelectorAll('.library-item').forEach(item => { + item.addEventListener('click', () => { + item.classList.toggle('selected'); + }); + }); + + document.getElementById('statusMessage').textContent = `Founded ${foundedpackages} Packages`; + setTimeout(() => { + document.getElementById('statusMessage').textContent = `Ready`; + }, 1000); } + module.exports = { loadperipheral, scanindex diff --git a/src/index.html b/src/index.html index c9c53a1..1ad9467 100644 --- a/src/index.html +++ b/src/index.html @@ -7,6 +7,7 @@ @@ -17,12 +18,9 @@ - - @@ -99,21 +97,44 @@ -