forked from rojo-rbx/rojo
Uses Stylua to format all existing Lua files, and adds a CI check in `lint` to pin this improvement. Excludes formatting dependencies, of course.
62 lines
1.5 KiB
Lua
62 lines
1.5 KiB
Lua
local Rojo = script:FindFirstAncestor("Rojo")
|
|
local Packages = Rojo.Packages
|
|
|
|
local Roact = require(Packages.Roact)
|
|
local Highlighter = require(Packages.Highlighter)
|
|
Highlighter.matchStudioSettings()
|
|
|
|
local e = Roact.createElement
|
|
|
|
local CodeLabel = Roact.PureComponent:extend("CodeLabel")
|
|
|
|
function CodeLabel:init()
|
|
self.labelRef = Roact.createRef()
|
|
self.highlightsRef = Roact.createRef()
|
|
end
|
|
|
|
function CodeLabel:didMount()
|
|
Highlighter.highlight({
|
|
textObject = self.labelRef:getValue(),
|
|
})
|
|
self:updateHighlights()
|
|
end
|
|
|
|
function CodeLabel:didUpdate()
|
|
self:updateHighlights()
|
|
end
|
|
|
|
function CodeLabel:updateHighlights()
|
|
local highlights = self.highlightsRef:getValue()
|
|
if not highlights then
|
|
return
|
|
end
|
|
|
|
for _, lineLabel in highlights:GetChildren() do
|
|
local lineNum = tonumber(string.match(lineLabel.Name, "%d+") or "0")
|
|
lineLabel.BackgroundColor3 = self.props.lineBackground
|
|
lineLabel.BorderSizePixel = 0
|
|
lineLabel.BackgroundTransparency = if self.props.markedLines[lineNum] then 0.25 else 1
|
|
end
|
|
end
|
|
|
|
function CodeLabel:render()
|
|
return e("TextLabel", {
|
|
Size = self.props.size,
|
|
Position = self.props.position,
|
|
Text = self.props.text,
|
|
BackgroundTransparency = 1,
|
|
Font = Enum.Font.RobotoMono,
|
|
TextSize = 16,
|
|
TextXAlignment = Enum.TextXAlignment.Left,
|
|
TextYAlignment = Enum.TextYAlignment.Top,
|
|
TextColor3 = Color3.fromRGB(255, 255, 255),
|
|
[Roact.Ref] = self.labelRef,
|
|
}, {
|
|
SyntaxHighlights = e("Folder", {
|
|
[Roact.Ref] = self.highlightsRef,
|
|
}),
|
|
})
|
|
end
|
|
|
|
return CodeLabel
|