diff --git a/basaltInstaller.lua b/basaltInstaller.lua index 41c91b1..840f19b 100644 --- a/basaltInstaller.lua +++ b/basaltInstaller.lua @@ -1,58 +1,122 @@ +-- this file can download the project or other tools from github local args = table.pack(...) - -local function downloadProject(dir) - local function split(inputstr, sep) - if sep == nil then - sep = "%s" - end - local t={} - for str in string.gmatch(inputstr, "([^"..sep.."]+)") do - table.insert(t, str) - end - return t - end - shell.run("wget https://raw.githubusercontent.com/Pyroxenium/Basalt/master/projectFiles.txt .projectFiles.txt") - local projectFiles = {} - local pFile = fs.open(".projectFiles.txt", "r") - - for line in pFile.readLine do - local t = split(line, "/") - if(#t>1)then - if(projectFiles[t[1]]==nil)then projectFiles[t[1]] = {} end - table.insert(projectFiles[t[1]], t[2]) - else - if(projectFiles["default"]==nil)then projectFiles["default"] = {} end - table.insert(projectFiles["default"], line) +-- Creates a filetree based on my github project, ofc you can use this in your projects if you'd like to +local function createTree(page) + local tree = {} + local request = http.get(page) + if not(page)then return end + for _,v in pairs(textutils.unserialiseJSON(request.readAll()).tree)do + if(v.type=="blob")then + table.insert(tree, v.path) + elseif(v.type=="tree")then + tree[v.path] = createTree(page.."/"..v.path) end end - pFile.close() - shell.run("rm .projectFiles.txt") + return tree +end + +local function splitString(str, sep) + if sep == nil then + sep = "%s" + end + local t={} + for v in string.gmatch(str, "([^"..sep.."]+)") do + table.insert(t, v) + end + return t +end + +local function download(url, file) + print("Downloading "..url) + local httpReq = http.get(url) + if(httpReq~=nil)then + local content = httpReq.readAll() + if not content then + error("Could not connect to website") + end + local f = fs.open(file, "w") + f.write(content) + f.close() + end +end + +local function downloadProject(dir, ignoreList) + local projTree = createTree("https://api.github.com/repos/Pyroxenium/Basalt/git/trees/master:Basalt") + local projectFiles = {base={}} + + local function isFileInIgnoreList(folder, file) + if(ignoreList~=nil)then + if(ignoreList[folder]~=nil)then + for k,v in pairs(ignoreList[folder])do + if(v==file)then + return true + end + end + end + end + return false + end + for k,v in pairs(projTree)do + if(k=="objects")then + projectFiles.objects = {} + for a,b in pairs(v)do + if not(isFileInIgnoreList("objects", b))then + table.insert(projectFiles.objects, b) + end + end + elseif(k=="libraries")then + projectFiles.libraries = {} + for a,b in pairs(v)do + if not(isFileInIgnoreList("libraries", b))then + table.insert(projectFiles.libraries, b) + end + end + else + table.insert(projectFiles.base, v) + end + end + fs.makeDir(dir) fs.makeDir(dir.."/objects") fs.makeDir(dir.."/libraries") - for k,v in pairs(projectFiles["objects"])do - shell.run("wget https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/objects/"..v.." "..dir.."/objects/"..v) + for _,v in pairs(projectFiles["objects"])do + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/objects/"..v, dir.."/objects/"..v) end - for k,v in pairs(projectFiles["libraries"])do - shell.run("wget https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/libraries/"..v.." "..dir.."/libraries/"..v) + for _,v in pairs(projectFiles["libraries"])do + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/libraries/"..v, dir.."/libraries/"..v) end - for k,v in pairs(projectFiles["default"])do - shell.run("wget https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/"..v.." "..dir.."/"..v) + for _,v in pairs(projectFiles["base"])do + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/"..v, dir.."/"..v) end end if(#args>0)then if(string.lower(args[1])=="bpm")or(string.lower(args[1])=="basaltpackagemanager")then - shell.run("wget https://raw.githubusercontent.com/Pyroxenium/Basalt/master/basaltPackageManager.lua basaltPackageManager.lua") + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/basaltPackageManager.lua", "basaltPackageManager.lua") + shell.run("basaltPackageManager.lua") + --shell.run("rm basaltPackageManager.lua") end if(string.lower(args[1])=="single")then downloadProject("Basalt") - shell.run("wget https://raw.githubusercontent.com/Pyroxenium/Basalt/master/basaltPackager.lua basaltPackager.lua") + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/basaltPackager.lua", "basaltPackager.lua") shell.run("basaltPackager.lua "..tostring(args[2] and false or true)) fs.delete("Basalt") end + if(string.lower(args[1])=="modified")then + if(args[2]~=nil)then + local arg = splitString(args[2], ":") + downloadProject("Basalt", { + objects = splitString(arg[1], "|"), + libraries = splitString(arg[2], "|") + }) + else + downloadProject("Basalt") + end + end else + print("Downloading the project...") downloadProject("Basalt") + print("Done!") end \ No newline at end of file diff --git a/basaltPackageManager.lua b/basaltPackageManager.lua index 2cb4e62..05b2fb5 100644 --- a/basaltPackageManager.lua +++ b/basaltPackageManager.lua @@ -19,19 +19,66 @@ local getProject = function(subDir) end project['objects'] = {}project['libraries'] = {}project['default'] = {}project['objects']['Animation'] = function(...) return -function(a)local b={}local c="Animation"local d;local _a={}local aa=1;local ba=0;local ca -local function da()if(_a[aa]~=nil)then -_a[aa].f(b,aa)end;aa=aa+1;if(_a[aa]~=nil)then if(_a[aa].t>0)then -d=os.startTimer(_a[aa].t)else da()end end end -b={name=a,getType=function(_b)return c end,getZIndex=function(_b)return 1 end,getName=function(_b)return _b.name end,add=function(_b,ab,bb)ca=ab;table.insert(_a,{f=ab,t= -bb or ba})return _b end,wait=function(_b,ab) -ba=ab;return _b end,rep=function(_b,ab) -for x=1,ab do table.insert(_a,{f=ca,t=ba})end;return _b end,clear=function(_b)_a={}ca=nil;ba=0;aa=1;return _b end,play=function(_b) -aa=1;if(_a[aa]~=nil)then -if(_a[aa].t>0)then d=os.startTimer(_a[aa].t)else da()end end;return _b end,cancel=function(_b) -os.cancelTimer(d)return _b end,eventHandler=function(_b,ab,bb)if(ab=="timer")and(bb==d)then -if(_a[aa]~=nil)then da()end end end}b.__index=b;return b end -end; +function(a)local b={}local c="Animation"local d;local _a={}local aa=1;local ba=false;local ca=0;local da;local _b +local function ab()if(_a[aa]~=nil)then +_a[aa].f(b,aa)end;aa=aa+1 +if(_a[aa]==nil)then if(ba)then aa=1 else return end end +if(_a[aa].t>0)then d=os.startTimer(_a[aa].t)else ab()end end +b={name=a,getType=function(bb)return c end,getZIndex=function(bb)return 1 end,getName=function(bb)return bb.name end,add=function(bb,cb,db)da=cb;table.insert(_a,{f=cb,t= +db or ca})return bb end,setObject=function(bb,cb) +_b=cb;return bb end,move=function(bb,cb,db,_c,ac,bc)if(bc~=nil)then _b=bc end;if(_b.setPosition==nil)or(_b.getPosition== +nil)then return bb end +local cc,dc=_b:getPosition()if(cc==cb)and(dc==db)then return bb end;local _d=cc<=cb and(cb-cc)/ac or +(cc-cb)/ac;local ad=dc<=db and(db-dc)/ac or +(dc-db)/ac;local bd,cd=cc>cb and true or false, +dc>db and true or false +for n=1,math.floor(ac)do local dd +if +(n==ac)then dd=function()_b:setPosition(cb,db)end else +dd=function() +_b:setPosition(math.floor( +bd and cc+ (-_d*n)or cc+_d*n),math.floor(cd and dc+ (- +ad*n)or dc+ad*n))end end;table.insert(_a,{f=dd,t=_c/ac})end;return bb end,offset=function(bb,cb,db,_c,ac,bc)if( +bc~=nil)then _b=bc end;if +(_b.setOffset==nil)or(_b.getOffset==nil)then return bb end;local cc,dc=_b:getOffset() +cc=math.abs(cc)dc=math.abs(dc)if(cc==cb)and(dc==db)then return bb end;local _d=cc<=cb and +(cb-cc)/ac or(cc-cb)/ac;local ad=dc<=db and +(db-dc)/ac or(dc-db)/ac;local bd,cd= +cc>cb and true or false,dc>db and true or false +for n=1,math.floor(ac) +do local dd +if(n==ac)then dd=function()_b:setOffset(cb,db)end else +dd=function() +_b:setOffset(math.floor( +bd and cc+ (-_d*n)or cc+_d*n),math.floor(cd and dc+ (- +ad*n)or dc+ad*n))end end;table.insert(_a,{f=dd,t=_c/ac})end;return bb end,textColoring=function(bb,cb,...) +local db=table.pack(...)for n=1,#db do +table.insert(_a,{f=function()_b:setForeground(db[n])end,t=cb/#db})end;return bb end,backgroundColoring=function(bb,cb,...) +local db=table.pack(...)for n=1,#db do +table.insert(_a,{f=function()_b:setBackground(db[n])end,t=cb/#db})end;return bb end,setText=function(bb,cb,db) +if( +_b.setText~=nil)then for n=1,db:len()do +table.insert(_a,{f=function()_b:setText(db:sub(1,n))end,t= +cb/db:len()})end end;return bb end,changeText=function(bb,cb,...) +if( +_b.setText~=nil)then local db=table.pack(...)for n=1,#db do +table.insert(_a,{f=function() +_b:setText(db[n])end,t=cb/#db})end end;return bb end,coloring=function(bb,cb,...) +local db=table.pack(...) +for n=1,#db do +if(type(db[n]=="table"))then +table.insert(_a,{f=function()if(db[n][1]~=nil)then +_b:setBackground(db[n][1])end;if(db[n][2]~=nil)then +_b:setForeground(db[n][2])end end,t= +cb/#db})end end;return bb end,wait=function(bb,cb) +ca=cb;return bb end,rep=function(bb,cb) +for n=1,cb do table.insert(_a,{f=da,t=ca})end;return bb end,clear=function(bb)_a={}da=nil;ca=0;aa=1;ba=false;return bb end,play=function(bb,cb)ba= +cb and true or false;aa=1;if(_a[aa]~=nil)then if(_a[aa].t>0)then +d=os.startTimer(_a[aa].t)else ab()end end +return bb end,cancel=function(bb) +os.cancelTimer(d)ba=false;return bb end,eventHandler=function(bb,cb,db)if(cb=="timer")and(db==d)then if +(_a[aa]~=nil)then ab()end end end}b.__index=b;return b end +end; project['objects']['Button'] = function(...)local d=require("Object")local _a=require("theme") local aa=require("utils") return @@ -632,7 +679,7 @@ cc end,setOffset=function(_ca,aca,bca) _ba=aca~=nil and math.floor(aca<0 and math.abs(aca)or-aca)or _ba aba=bca~=nil and -math.floor(bca<0 and math.abs(bca)or-bca)or aba;return _ca end,getFrameOffset=function(_ca)return +math.floor(bca<0 and math.abs(bca)or-bca)or aba;return _ca end,getOffset=function(_ca)return _ba,aba end,removeFocusedObject=function(_ca)if(cc.getFocusedObject()~=nil)then cc.getFocusedObject():loseFocusHandler()end;cc.setFocusedObject(nil)return _ca end,getFocusedObject=function(_ca)return @@ -908,15 +955,14 @@ _d.parent.height+bd-1 elseif(ba=="left")then bd= math.floor(_d.parent.height/2)+bd-1 elseif(ba=="center")then ad=math.floor( _d.parent.width/2)+ad-1 -bd=math.floor(_d.parent.height/2)+bd-1 end;local dd,__a=_d:getOffset() -if not(ca or cd)then return ad+dd,bd+__a end;return ad,bd end,getOffset=function(_d) -if( -_d.parent~=nil)then return _d.parent:getFrameOffset()end;return 0,0 end,ignoreOffset=function(_d,ad)ca=ad -if(ad==nil)then ca=true end;return _d end,getBaseFrame=function(_d)if(_d.parent~=nil)then return -_d.parent:getBaseFrame()end;return _d end,setAnchor=function(_d,ad) -ba=ad;bc=true;return _d end,getAnchor=function(_d)return ba end,onChange=function(_d,...) -for ad,bd in -pairs(table.pack(...))do if(type(bd)=="function")then +bd=math.floor(_d.parent.height/2)+bd-1 end +if(_d.parent~=nil)then local dd,__a=_d.parent:getOffset()if not(ca or cd)then return +ad+dd,bd+__a end end;return ad,bd end,ignoreOffset=function(_d,ad) +ca=ad;if(ad==nil)then ca=true end;return _d end,getBaseFrame=function(_d)if +(_d.parent~=nil)then return _d.parent:getBaseFrame()end +return _d end,setAnchor=function(_d,ad)ba=ad;bc=true;return _d end,getAnchor=function(_d)return +ba end,onChange=function(_d,...) +for ad,bd in pairs(table.pack(...))do if(type(bd)=="function")then _d:registerEvent("value_changed",bd)end end;return _d end,onClick=function(_d,...) for ad,bd in pairs(table.pack(...))do if(type(bd)=="function")then _d:registerEvent("mouse_click",bd) @@ -1008,59 +1054,79 @@ pairs(a_a)do if(_ca.name==bba)then return nil end end;local cba=_d(bba, nil,nil,caa)table.insert(a_a,cba)return cba end,removeFrame=function(bba)a_a[bba]= nil end,setProjectDir=function(bba)dd=bba end} -local basalt = aba - - -- Basalt installer beginns here: -local function split(inputstr, sep) - if sep == nil then - sep = "%s" - end - local t={} - for str in string.gmatch(inputstr, "([^"..sep.."]+)") do - table.insert(t, str) - end - return t - end +local basalt = aba +local projectDir = "Basalt" -local projectFiles = {} -local pFile = fs.open("projectFiles.txt", "r") +local animTime = 0.2 +local animFrames = 8 -for line in pFile.readLine do - local t = split(line, "/") - if(#t>1)then - if(projectFiles[t[1]]==nil)then projectFiles[t[1]] = {} end - table.insert(projectFiles[t[1]], t[2]) - else - if(projectFiles[t[1]]==nil)then projectFiles["default"] = {} end - table.insert(projectFiles["default"], line) +local function download(url, file) +local httpReq = http.get(url) + if(httpReq~=nil)then + local content = httpReq.readAll() + if not content then + error("Could not connect to website") + end + local f = fs.open(file, "w") + f.write(content) + f.close() end end + +local function createTree(page) +local tree = {} + local request = http.get(page) + if not(request)then return end + for k,v in pairs(textutils.unserialiseJSON(request.readAll()).tree)do + if(v.type=="blob")then + table.insert(tree, v.path) + elseif(v.type=="tree")then + tree[v.path] = createTree(page.."/"..v.path) + end + end + return tree +end + +local projectFiles = {base={}} + local w, h = term.getSize() local main = basalt.createFrame("InstallerFrame"):show() local anim = main:addAnimation("movingFrameAnimation") local libFrame = main:addFrame("LibraryFrame"):setBackground(colors.lightGray):setForeground(colors.black):show() local objFrame = main:addFrame("ObjectFrame"):setBackground(colors.lightGray):setForeground(colors.black):setPosition(w+1,1):show() local configFrame = main:addFrame("ConfigFrame"):setBackground(colors.lightGray):setForeground(colors.black):setPosition(w+w+1,1):show() +local installFrame = main:addFrame("installFrame"):setBackground(colors.lightGray):setForeground(colors.black):setPosition(w+w+w+1,1):show() +local fileTreeInfo = main:addLabel("getFileTree"):setText("Downloading file structure..."):setForeground(colors.red):ignoreOffset():setAnchor("bottomLeft"):setPosition(2,1):setZIndex(15):show() -libFrame:addLabel("setupMessage"):setText("Setup the Project's libraries:"):setPosition(2, 2):show() -libFrame:addLabel("included"):setText("Included"):setPosition(2, 4):show() -local libInc = libFrame:addList("includedLibList"):setPosition(2,5):setSize(14,10):show() -for _,v in pairs(projectFiles["libraries"])do - libInc:addItem(v) -end - -local libExc = libFrame:addList("exludedLibList"):setPosition(20,5):setSize(14,10):show() -libFrame:addLabel("excluded"):setText("Excluded"):setPosition(26, 4):show() -libFrame:addButton("excludeItem"):setPosition(13,4):setSize(3,1):setText(">"):onClick(function() +libFrame:addLabel("setupMessage"):setText("Basalt Libary List:"):setPosition(2, 1):show() +libFrame:addLabel("included"):setText("Included"):setPosition(2, 3):show() +local libInc = libFrame:addList("includedLibList"):setPosition(2,4):setSize(20,11):show() +local libExc = libFrame:addList("exludedLibList"):setPosition(31,4):setSize(20,11):show() +libFrame:addLabel("excluded"):setText("Excluded"):setPosition(43, 3):show() +libFrame:addButton("excludeItem"):setPosition(25,5):setSize(3,1):setText(">"):onClick(function() local item = libInc:getItem(libInc:getItemIndex()) if(item~=nil)then libInc:removeItem(libInc:getItemIndex()) libExc:addItem(item.text) end end):show() -libFrame:addButton("includeItem"):setSize(3,1):setText("<"):setPosition(20,4):onClick(function() +libFrame:addButton("includeItem"):setSize(3,1):setText("<"):setPosition(25,7):onClick(function() + local item = libExc:getItem(libExc:getItemIndex()) + if(item~=nil)then + libExc:removeItem(libExc:getItemIndex()) + libInc:addItem(item.text) + end +end):show() +libFrame:addButton("includeItems"):setSize(5,1):setText("<<<"):setPosition(24,10):onClick(function() + local item = libExc:getItem(libExc:getItemIndex()) + if(item~=nil)then + libExc:removeItem(libExc:getItemIndex()) + libInc:addItem(item.text) + end +end):show() +libFrame:addButton("excludeItems"):setSize(5,1):setText(">>>"):setPosition(24,12):onClick(function() local item = libExc:getItem(libExc:getItemIndex()) if(item~=nil)then libExc:removeItem(libExc:getItemIndex()) @@ -1068,114 +1134,149 @@ libFrame:addButton("includeItem"):setSize(3,1):setText("<"):setPosition(20,4):on end end):show() libFrame:addButton("nextBtn"):setAnchor("bottomRight"):setPosition(-11,-2):setSize(10,3):setText("Next"):onClick(function() - anim:clear() - anim:add(function() - main:setOffset(w/4,0) - end) - :wait(0.1) - :add(function() - main:setOffset(w/2,0) - end) - :wait(0.1) - :add(function() - main:setOffset(w/2+w/4,0) - end) - :wait(0.1) - :add(function() - main:setOffset(w,0) - end):play() + anim:clear():setObject(main):offset(w,0,animTime,animFrames):play() end):show() +objFrame:addLabel("setupMessage"):setText("Basalt Object List:"):setPosition(2, 1):show() +objFrame:addLabel("included"):setText("Included"):setPosition(2, 3):show() +local objInc = objFrame:addList("includedObjList"):setPosition(2,4):setSize(20,11):show() +local objExc = objFrame:addList("exludedObjList"):setPosition(31,4):setSize(20,11):show() +objFrame:addLabel("excluded"):setText("Excluded"):setPosition(43, 3):show() -objFrame:addLabel("setupMessage"):setText("Setup the Project's objects:"):setPosition(2, 2):show() -objFrame:addLabel("included"):setText("Included"):setPosition(2, 4):show() -local objInc = objFrame:addList("includedObjList"):setPosition(2,5):setSize(14,10):show() -for _,v in pairs(projectFiles["objects"])do - objInc:addItem(v) -end - -local objExc = objFrame:addList("exludedObjList"):setPosition(20,5):setSize(14,10):show() -objFrame:addLabel("excluded"):setText("Excluded"):setPosition(26, 4):show() -objFrame:addButton("excludeItem"):setPosition(13,4):setSize(3,1):setText(">"):onClick(function() +objFrame:addButton("excludeItem"):setPosition(25,5):setSize(3,1):setText(">"):onClick(function() local item = objInc:getItem(objInc:getItemIndex()) if(item~=nil)then objInc:removeItem(objInc:getItemIndex()) objExc:addItem(item.text) end end):show() -objFrame:addButton("includeItem"):setSize(3,1):setText("<"):setPosition(20,4):onClick(function() +objFrame:addButton("includeItem"):setSize(3,1):setText("<"):setPosition(25,7):onClick(function() local item = objExc:getItem(objExc:getItemIndex()) if(item~=nil)then objExc:removeItem(objExc:getItemIndex()) objInc:addItem(item.text) end end):show() + +objFrame:addButton("includeItems"):setSize(5,1):setText("<<<"):setPosition(24,10):onClick(function() + local item = libExc:getItem(libExc:getItemIndex()) + if(item~=nil)then + libExc:removeItem(libExc:getItemIndex()) + libInc:addItem(item.text) + end +end):show() + +objFrame:addButton("excludeItems"):setSize(5,1):setText(">>>"):setPosition(24,12):onClick(function() + local item = libExc:getItem(libExc:getItemIndex()) + if(item~=nil)then + libExc:removeItem(libExc:getItemIndex()) + libInc:addItem(item.text) + end +end):show() + objFrame:addButton("nextBtn"):setAnchor("bottomRight"):setPosition(-11,-2):setSize(10,3):setText("Next"):onClick(function() - anim:clear() - anim:add(function() - main:setOffset((w*2)/4,0) - end) - :wait(0.1) - :add(function() - main:setOffset((w*2)/2,0) - end) - :wait(0.1) - :add(function() - main:setOffset((w*2)/2+(w*2)/4,0) - end) - :wait(0.1) - :add(function() - main:setOffset((w*2),0) - end):play() + anim:clear():setObject(main):offset(w*2,0,animTime,animFrames):play() end):show() objFrame:addButton("backBtn"):setAnchor("bottomLeft"):setPosition(2,-2):setSize(10,3):setText("Back"):onClick(function() - anim:clear() - anim:add(function() - main:setOffset(w/2+w/4,0) - end) - :wait(0.1) - :add(function() - main:setOffset(w/2,0) - end) - :wait(0.1) - :add(function() - main:setOffset(w/4,0) - end) - :wait(0.1) - :add(function() - main:setOffset(0,0) - end):play() + anim:clear():setObject(main):offset(0,0,animTime,animFrames):play() end):show() configFrame:addButton("backBtn"):setAnchor("bottomLeft"):setPosition(2,-2):setSize(10,3):setText("Back"):onClick(function() - anim:clear() - anim:add(function() - main:setOffset((w*2)/2+(w*2)/4,0) - end) - :wait(0.1) - :add(function() - main:setOffset((w*2)/2,0) - end) - :wait(0.1) - :add(function() - main:setOffset((w*2)/4,0) - end) - :wait(0.1) - :add(function() - main:setOffset(w,0) - end):play() + anim:clear():setObject(main):offset(w,0,animTime,animFrames):play() end):show() + configFrame:addLabel("configInfo"):setPosition(2,2):setText("Setup the configuration:"):show() -configFrame:addRadio("singleOrMultiFile"):setPosition(2,4):addItem("Single file project",1,1,colors.lightGray,colors.black):addItem("Multiple files project",1,3,colors.lightGray,colors.black):setSelectedItem(colors.lightGray,colors.black):show() -configFrame:addCheckbox("minify"):setPosition(2,8):show() +local sOrM = configFrame:addRadio("singleOrMultiFile"):setPosition(2,4):addItem("Single file project",1,1,colors.lightGray,colors.black,true):addItem("Multiple files project",1,3,colors.lightGray,colors.black,false):setSelectedItem(colors.lightGray,colors.black):show() +local minProject = configFrame:addCheckbox("minify"):setPosition(2,8):show() configFrame:addLabel("minifyInfo"):setPosition(4,8):setText("Minify the project"):show() configFrame:addLabel("betaInfo"):setPosition(2,11):setText("The Basalt Package Manager is still in alpha!"):setForeground(colors.red):show() configFrame:addLabel("discord"):setPosition(2,12):setText("Checkout discord.com/invite/yNNnmBVBpE if you get"):setForeground(colors.red):show() configFrame:addLabel("discord2"):setPosition(2,13):setText("into errors."):setForeground(colors.red):show() -configFrame:addButton("installBtn"):setAnchor("bottomRight"):setPosition(-11,-2):setSize(11,3):setText("Install"):onClick(function() -end):show() +installFrame:addLabel("installingInfo"):setPosition(2,2):setText("Installing Menu:"):show() +local state = installFrame:addLabel("installStatus"):setAnchor("bottomLeft"):setPosition(2,-1):setText("Currently installing..."):show() +local installLog = installFrame:addList("installLog"):setPosition(2,4):setSize(w-2, 11):show() +local doneButton = installFrame:addButton("doneButton"):setText("Done"):setAnchor("bottomRight"):setPosition(-13,-2):setSize(12, 3):onClick(function() + basalt.stop() + term.clear() +end) +installLog:addItem("Installing Basalt...") + +local function addToInstallLog(text) + installLog:addItem(text) + installLog:setValue(installLog:getItem(installLog:getItemCount())) + if(installLog.getItemCount() > installLog:getHeight())then + installLog:setIndexOffset(installLog:getItemCount() - installLog:getHeight()) + end +end + +local installThread = installFrame:addThread("installingThread") +local function installProject() + fs.makeDir(projectDir) + fs.makeDir(projectDir.."/objects") + fs.makeDir(projectDir.."/libraries") + for _,v in pairs(libInc:getAll())do + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/libraries/"..v.text, projectDir.."/libraries/"..v.text) + addToInstallLog("Installed: "..projectDir.."/libraries/"..v.text) + end + for _,v in pairs(objInc:getAll())do + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/objects/"..v.text, projectDir.."/objects/"..v.text) + addToInstallLog("Installed: "..projectDir.."/objects/"..v.text) + end + for _,v in pairs(projectFiles.base)do + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/"..v, projectDir.."/"..v) + addToInstallLog("Installed: "..projectDir.."/"..v) + end + addToInstallLog("Finished downloading!") + if(sOrM:getValue().args)then + if(minProject:getValue())then + addToInstallLog("Packaging and minifying project to a single file...") + else + addToInstallLog("Packaging project to a single file...") + end + download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/basaltPackager.lua", "basaltPackager.lua") + shell.run("basaltPackager.lua "..projectDir.." "..tostring(minProject:getValue())) + fs.delete("basaltPackager.lua") + fs.delete("Basalt") + end + addToInstallLog("Done!") + state:setText("Finished installing!") + doneButton:show() +end + +local installBtn = configFrame:addButton("installBtn"):setAnchor("bottomRight"):setPosition(-11,-2):setSize(11,3):setText("Install"):onClick(function() + installLog:addItem("Creating directory: "..projectDir) + anim:clear():setObject(main):offset(w*3,0,animTime,animFrames):play() + installThread:start(installProject) +end) + + +local function getProjectFileTree() + local projTree = createTree("https://api.github.com/repos/Pyroxenium/Basalt/git/trees/master:Basalt") + if(projTree~=nil)then + for k,v in pairs(projTree)do + if(k=="objects")then + projectFiles.objects = v + elseif(k=="libraries")then + projectFiles.libraries = v + else + table.insert(projectFiles.base, v) + end + end + for _,v in pairs(projectFiles.libraries)do + libInc:addItem(v) + end + for _,v in pairs(projectFiles.objects)do + objInc:addItem(v) + end + fileTreeInfo:hide() + installBtn:show() + else + fileTreeInfo:setText("Error: Unable to download file structure...") + end +end +main:addThread("fileTreeThread"):start(getProjectFileTree) basalt.autoUpdate() \ No newline at end of file diff --git a/basaltPackager.lua b/basaltPackager.lua index 83e20fc..8fbacd6 100644 --- a/basaltPackager.lua +++ b/basaltPackager.lua @@ -320,7 +320,7 @@ if ad[baa]or _d[baa]or baa=='_'then if not (ad[caa]or _d[caa]or caa=='_'or bd[caa])then return d_a.._aa elseif caa=='('then -print("==============>>>",baa,caa)return d_a..aaa.._aa else return d_a..aaa.._aa end elseif bd[baa]then +return d_a..aaa.._aa else return d_a..aaa.._aa end elseif bd[baa]then if caa=='('then return d_a.._aa else return d_a..aaa.._aa end elseif baa==''then return d_a.._aa else if caa=='('then return d_a..aaa.._aa else return d_a.._aa end end end __a=function(d_a)local _aa=string.rep('(',d_a.ParenCount or 0) @@ -390,7 +390,7 @@ _aa.."(" if#d_a.Arguments>0 then for i=1,#d_a.Arguments do _aa=_aa.. d_a.Arguments[i].Name;if i~=#d_a.Arguments then _aa=_aa..","elseif d_a.VarArg then -print("Apply vararg")_aa=_aa..",..."end end elseif d_a.VarArg then _aa=_aa.."..."end;_aa=_aa..")"_aa=b_a(_aa,dd(d_a.Body)) +_aa=_aa..",..."end end elseif d_a.VarArg then _aa=_aa.."..."end;_aa=_aa..")"_aa=b_a(_aa,dd(d_a.Body)) _aa=b_a(_aa,"end")elseif d_a.AstType=='GenericForStatement'then d_a.Scope:RenameVars() _aa="for " for i=1,#d_a.VariableList do