Bundling RoStrapUI with a plugin
Let's say we want to Bundle ChoiceDialog with a plugin. Specifically, an "Object to Lua" plugin.
We're going to want all of our libraries under the same Object. In this case we are going to place our libraries under the main Script of the plugin.
Next, we are going to run a script that will replace the Resources functions with some simple replacements.
Enable your command bar (under the View tab) and paste the following script in. Make sure to change PARENT_OF_LIBRARIES
to fit your use case.
local PARENT_OF_LIBRARIES = workspace.ObjectsToLua local LocalTables = {} for _, Object in next, PARENT_OF_LIBRARIES:GetDescendants() do if Object:IsA("LuaSourceContainer") then local Source, Reps = Object.Source :gsub("local Resources = [^\r\n]+[\r\n]", "\nlocal function _Load_Library_(Name)\n\treturn require(script.Parent[Name])\nend\n") :gsub("Resources:LoadLibrary(%b())", "_Load_Library_%1") :gsub("Resources:GetLocalTable(%b())", function(x) local Name = "LocalTable" .. x:sub(3, -3) if not LocalTables[Name] then LocalTables[Name] = true local Mod = Instance.new("ModuleScript", PARENT_OF_LIBRARIES) Mod.Source = "return {}\n" Mod.Name = Name end return "_Load_Library_(\"" .. Name .. "\")" end) :gsub("Resources:Get(%a+)(%b())", function(x, y) return "_Resource_Get_(\"" .. x .. "\", " .. y:sub(2, -2) .. ")" end) if Reps > 0 then Source = "local function _Resource_Get_(ClassName, Name, Parent)\n\tlocal IsPlugin = script.Parent.Parent.ClassName == \"Plugin\"\n\n\tif not Parent then\n\t\tParent = _Resource_Get_(\"Folder\", ClassName .. \"Folder\", game:GetService(IsPlugin and \"CoreGui\" or \"ReplicatedStorage\"))\n\tend\n\n\tif IsPlugin or game:GetService(\"RunService\"):IsServer() then\n\t\tlocal Object = Instance.new(ClassName)\n\t\tObject.Name = Name\n\t\tObject.Parent = Parent\n\t\treturn Object\n\telse\n\t\treturn Parent:WaitForChild(Name)\n\tend\nend\n\n" .. Source end Object.Source = Source end end
This code should work for any of the libraries under the RoStrap organization, with the exception of the Sentry
library.
Now we can write some code for the plugin:
require(script.ChoiceDialog) -- Preload the libraries require(script.ReplicatedPseudoInstance) local PseudoInstance = require(script.PseudoInstance) local Dialog = PseudoInstance.new("ChoiceDialog") Dialog.HeaderText = "Script Class" Dialog.Options = {"ModuleScript", "Script", "LocalScript"} Dialog.DismissText = "CANCEL" Dialog.ConfirmText = "CONVERT" Dialog.PrimaryColor3 = PrimaryColor3 Dialog.Parent = game local _, Choice = Dialog.OnConfirmed:Wait() print(Choice)
Add some glue, and you've got yourself a plugin running RoStrapUI! Publish your plugin and try it out. Also be sure to check out my RbxObject2Lua plugin by clicking the following image: