Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bcf8855
Add binary expression
chibicode Sep 28, 2019
1a896bb
Bugfix on buildFromParams
chibicode Sep 28, 2019
712117a
Fix steps
chibicode Sep 28, 2019
d06733b
Implement basic binaryExpressionBox
chibicode Sep 28, 2019
2263a0d
Fix prioritizeExpression
chibicode Sep 28, 2019
ea1be57
Fix more logic
chibicode Sep 28, 2019
08feb8e
YC Demo
chibicode Sep 28, 2019
4c3efdf
Fix display
chibicode Sep 28, 2019
eb58f68
Fix the visual for binary expression
chibicode Sep 29, 2019
a0547b3
showDefaultAndActiveOnly
chibicode Sep 29, 2019
18f84b2
Improve multiplyicon
chibicode Sep 29, 2019
b368a57
Fix spacing
chibicode Sep 29, 2019
5d45d93
Add calculateNumLeafNodes
chibicode Sep 30, 2019
f641ba6
Fix typecheck
chibicode Sep 30, 2019
e69accd
Add numLeafNodes
chibicode Sep 30, 2019
8829372
Take shorthandNumberAfterConvert into account
chibicode Sep 30, 2019
3507a16
Implement numLeafNodesToVariableSize
chibicode Sep 30, 2019
83adcc7
Add populateMaxNestedFunctionDepths
chibicode Sep 30, 2019
83231a2
Fix populateMaxNestedFunctionDepths
chibicode Sep 30, 2019
916fefe
Add maxNestedFunctionDepth
chibicode Sep 30, 2019
0e7ec9e
Precompute maxNestedFunctionDepth
chibicode Sep 30, 2019
31cdcec
Fix maxNestedFunctionDepth
chibicode Sep 30, 2019
55892f7
Remove variableSize
chibicode Sep 30, 2019
b093c1d
Remove variableSize and containerSize
chibicode Sep 30, 2019
ef6edcc
Continue with 15
chibicode Sep 30, 2019
4962326
:pencil:
chibicode Sep 30, 2019
b2b5cd8
:pencil:
chibicode Sep 30, 2019
36a5dcf
Continue with 15
chibicode Sep 30, 2019
e530b3c
:pencil:
chibicode Oct 1, 2019
95a2048
:pencil:
chibicode Oct 1, 2019
dd8ec5d
Remove unused
chibicode Oct 1, 2019
411b15e
Remove ddrg
chibicode Oct 1, 2019
0b9a52d
:pencil:
chibicode Oct 1, 2019
ad5766d
Last topic
chibicode Oct 1, 2019
5c2fb98
Finish 15
chibicode Oct 1, 2019
80f6074
Update demos
chibicode Oct 1, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 10 additions & 2 deletions scripts/lib/buildExpressionContainer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@ import {
ExpressionParams,
FunctionExpressionParams,
ConditionalExpressionParams,
VariableExpressionParams
VariableExpressionParams,
BinaryExpressionParams
} from 'src/types/ExpressionParamTypes'
import {
NonExecutableStepCall,
StepChild,
StepFunction,
StepConditional,
StepBinary,
StepVariable
} from 'src/types/ExpressionTypes'
import calculateNumLeafNodes from 'scripts/lib/calculateNumLeafNodes'

export default function buildExpressionContainer(
expressionParams: VariableExpressionParams
Expand All @@ -27,14 +30,19 @@ export default function buildExpressionContainer(
export default function buildExpressionContainer(
expressionParams: ConditionalExpressionParams
): ContainerWithState<'needsPrioritize', StepConditional>
export default function buildExpressionContainer(
expressionParams: BinaryExpressionParams
): ContainerWithState<'needsPrioritize', StepBinary>
export default function buildExpressionContainer(
expressionParams: ExpressionParams
): ContainerWithState<'needsPrioritize', StepChild>
export default function buildExpressionContainer(
expressionParams: ExpressionParams
): ContainerWithState<'needsPrioritize', StepChild> {
const expression = buildExpressionFromParams(expressionParams)
return {
expression: buildExpressionFromParams(expressionParams),
expression,
numLeafNodes: calculateNumLeafNodes(expression),
containerState: 'needsPrioritize',
previouslyChangedExpressionState: 'default'
}
Expand Down
12 changes: 11 additions & 1 deletion scripts/lib/buildExpressionContainers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const buildExpressionContainers = ({
showAllShowSteps,
skipAlphaConvert,
skipActive,
showDefaultAndActiveOnly,
skipToTheEnd,
hideControls,
lastAllowedExpressionState,
Expand Down Expand Up @@ -116,7 +117,16 @@ const buildExpressionContainers = ({
}
}

return results
if (showDefaultAndActiveOnly) {
return results.filter(
x =>
x.previouslyChangedExpressionState === 'conditionActive' ||
x.previouslyChangedExpressionState === 'default' ||
x.previouslyChangedExpressionState === 'active'
)
} else {
return results
}
} else if (initialExpressionContainers) {
return initialExpressionContainers
} else {
Expand Down
21 changes: 18 additions & 3 deletions scripts/lib/buildExpressionFromParams.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import {
isConditionalParams,
isVariableShorthandFuncParams,
isQuestionPlusOrMinusOneParams,
isQuestionShorthandNumberAfterConvertParams
isQuestionShorthandNumberAfterConvertParams,
isRepeatExpressionParams
} from 'scripts/lib/expressionParamGuards'
import {
CallExpressionParams,
Expand All @@ -20,7 +21,8 @@ import {
RepeatExpressionParams,
QuestionPlusOrMinusOneParams,
QuestionShorthandNumberAfterConvertParams,
VariableShorthandFuncParams
VariableShorthandFuncParams,
BinaryExpressionParams
} from 'src/types/ExpressionParamTypes'
import {
NonExecutableStepCall,
Expand All @@ -29,6 +31,7 @@ import {
StepVariable,
StepVariableShorthandNumber,
StepConditional,
StepBinary,
RepeatExpression
} from 'src/types/ExpressionTypes'
import { VariableNames } from 'src/types/VariableNames'
Expand Down Expand Up @@ -89,6 +92,9 @@ export default function buildExpressionFromParams(
export default function buildExpressionFromParams(
expressionParams: ConditionalExpressionParams
): StepConditional
export default function buildExpressionFromParams(
expressionParams: BinaryExpressionParams
): StepBinary
export default function buildExpressionFromParams(
expressionParams: RepeatExpressionParams
): RepeatExpression
Expand Down Expand Up @@ -192,12 +198,21 @@ export default function buildExpressionFromParams(
),
shorthandNumberAfterConvert: expressionParams.shorthandNumberAfterConvert
}
} else {
} else if (isRepeatExpressionParams(expressionParams)) {
return {
type: 'repeat',
count: expressionParams.count,
countVariable: expressionParams.countVariable,
child: buildExpressionFromParams(expressionParams.child)
}
} else {
return {
type: 'binary',
binaryType: expressionParams.binaryType,
first: buildExpressionFromParams(expressionParams.first),
second: buildExpressionFromParams(expressionParams.second),
state: 'default',
priority: 0
}
}
}
30 changes: 8 additions & 22 deletions scripts/lib/buildExpressionRunnerConfigFromShorthand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import {
isExpressionRunnerSingleStepConfig
} from 'scripts/lib/expressionRunnerShorthandConfig'
import { ExpressionContainer } from 'src/types/ExpressionContainerTypes'
import { allMaxWidths } from 'src/lib/theme/maxWidths'
import {
InitializeInstruction,
ExpressionRunnerContextProps,
Expand All @@ -25,16 +24,15 @@ export interface ExpressionRunnerConfig {
hideBottomRightBadges: ExpressionRunnerContextProps['hideBottomRightBadges']
hideControls: boolean
explanationsVisibility: 'visible' | 'hidden' | 'hiddenInitialPausedOnly'
variableSize: ExpressionRunnerContextProps['variableSize']
initializeInstructions: readonly InitializeInstruction[]
lastAllowedExpressionState?: ExpressionContainer['previouslyChangedExpressionState']
lastAllowedExpressionStateAfterIterations?: number
containerSize: keyof typeof allMaxWidths
hidePlayButton?: boolean
speed: number
showAllShowSteps?: boolean
skipAlphaConvert?: boolean
skipActive?: boolean
showDefaultAndActiveOnly?: boolean
skipToTheEnd: boolean
hideFuncUnboundBadgeOnExplanation: boolean
highlightOverridesCallArgAndFuncUnboundOnly: boolean
Expand All @@ -51,9 +49,7 @@ const expressionRunnerDefaults = {
hideBottomRightBadges: expressionRunnerContextDefault.hideBottomRightBadges,
hideControls: false,
explanationsVisibility: 'visible',
variableSize: expressionRunnerContextDefault.variableSize,
initializeInstructions: [],
containerSize: 'xxs',
skipToTheEnd: false,
hidePlayButton: false,
speed: 1,
Expand Down Expand Up @@ -119,13 +115,12 @@ const buildExpressionRunnerConfigFromShorthand = (
isDone,
skipAlphaConvert,
skipActive,
showDefaultAndActiveOnly,
nextIterations,
showPriorities,
showAllShowSteps,
explanationsVisibility,
bottomRightBadgeOverrides,
variableSize,
containerSize,
highlightOverrides,
highlightOverrideActiveAfterStart,
highlightOverridesCallArgAndFuncUnboundOnly,
Expand All @@ -142,11 +137,10 @@ const buildExpressionRunnerConfigFromShorthand = (
hidePriorities: !showPriorities,
explanationsVisibility,
showAllShowSteps,
variableSize,
highlightOverridesCallArgAndFuncUnboundOnly,
containerSize,
skipAlphaConvert,
skipActive,
showDefaultAndActiveOnly,
bottomRightBadgeOverrides,
highlightOverrides,
highlightFunctions,
Expand All @@ -172,8 +166,7 @@ const buildExpressionRunnerConfigFromShorthand = (
speed,
skipAlphaConvert,
skipActive,
variableSize,
containerSize,
showDefaultAndActiveOnly,
highlightOverrides,
explanationsVisibility
} = mergeWithDefault<
Expand All @@ -189,10 +182,9 @@ const buildExpressionRunnerConfigFromShorthand = (
showAllShowSteps,
hideFuncUnboundBadgeOnExplanation,
skipToTheEnd,
variableSize,
containerSize,
skipAlphaConvert,
skipActive,
showDefaultAndActiveOnly,
explanationsVisibility:
explanationsVisibility || 'hiddenInitialPausedOnly',
lastAllowedExpressionState,
Expand All @@ -211,18 +203,15 @@ const buildExpressionRunnerConfigFromShorthand = (
showPriorities,
explanationsVisibility,
showAllShowSteps,
variableSize,
containerSize,
nextIterations,
skipActive
skipActive,
showDefaultAndActiveOnly
} = mergeWithDefault<
typeof config,
typeof expressionRunnerSingleStepConfigDefault
>(config, expressionRunnerSingleStepConfigDefault)

runnerProps = {
variableSize,
containerSize,
initialExpressionContainer,
hidePriorities: !showPriorities,
hideFuncUnboundBadgeOnExplanation,
Expand All @@ -232,6 +221,7 @@ const buildExpressionRunnerConfigFromShorthand = (
lastAllowedExpressionStateAfterIterations: nextIterations,
showAllShowSteps,
skipActive,
showDefaultAndActiveOnly,
initializeInstructions: buildInitializeInstructions({
nextIterations,
initialState
Expand All @@ -244,8 +234,6 @@ const buildExpressionRunnerConfigFromShorthand = (
showPriorities,
explanationsVisibility,
showAllShowSteps,
variableSize,
containerSize,
nextIterations,
skipToTheEnd,
convert
Expand All @@ -256,8 +244,6 @@ const buildExpressionRunnerConfigFromShorthand = (

runnerProps = {
initialExpressionContainers,
variableSize,
containerSize,
hidePriorities: !showPriorities,
hideFuncUnboundBadgeOnExplanation,
hidePlayButton: false,
Expand Down
38 changes: 38 additions & 0 deletions scripts/lib/calculateNumLeafNodes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import {
isCall,
isVariable,
isFunction,
isConditional,
isBinary
} from 'src/lib/expressionTypeGuards'
import { Expression } from 'src/types/ExpressionTypes'

export default function calculateNumLeafNodes(expression: Expression): number {
if (isVariable(expression)) {
if (expression.shorthandNumberAfterConvert !== undefined) {
return 2
} else {
return 1
}
} else if (isCall(expression)) {
return (
calculateNumLeafNodes(expression.arg) +
calculateNumLeafNodes(expression.func)
)
} else if (isFunction(expression)) {
return calculateNumLeafNodes(expression.body)
} else if (isConditional(expression)) {
return (
calculateNumLeafNodes(expression.condition) +
calculateNumLeafNodes(expression.trueCase) +
calculateNumLeafNodes(expression.falseCase)
)
} else if (isBinary(expression)) {
return (
calculateNumLeafNodes(expression.first) +
calculateNumLeafNodes(expression.second)
)
} else {
return calculateNumLeafNodes(expression.child)
}
}
9 changes: 8 additions & 1 deletion scripts/lib/expressionParamGuards.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ import {
ConditionalExpressionParams,
VariableShorthandFuncParams,
QuestionPlusOrMinusOneParams,
QuestionShorthandNumberAfterConvertParams
QuestionShorthandNumberAfterConvertParams,
RepeatExpressionParams
} from 'src/types/ExpressionParamTypes'

export function isHighlightedVariableExpressionParams(
Expand Down Expand Up @@ -85,3 +86,9 @@ export function isQuestionShorthandNumberAfterConvertParams(
return !!(expressionParams as QuestionShorthandNumberAfterConvertParams)
.shorthandNumberAfterConvert
}

export function isRepeatExpressionParams(
expressionParams: ExpressionParams
): expressionParams is RepeatExpressionParams {
return !!(expressionParams as RepeatExpressionParams).child
}
17 changes: 4 additions & 13 deletions scripts/lib/expressionRunnerShorthandConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ export const expressionRunnerSimpleConfigDefault = {
initialState: 'default',
showPriorities: false,
explanationsVisibility: 'hidden',
variableSize: 'lg',
skipAlphaConvert: false
}

Expand All @@ -18,13 +17,12 @@ interface ExpressionRunnerSimpleConfig {
isDone?: boolean
skipAlphaConvert?: boolean
skipActive?: boolean
showDefaultAndActiveOnly?: boolean
nextIterations?: number
showPriorities?: boolean
showAllShowSteps?: ExpressionRunnerProps['showAllShowSteps']
explanationsVisibility?: ExpressionRunnerProps['explanationsVisibility']
bottomRightBadgeOverrides?: ExpressionRunnerProps['bottomRightBadgeOverrides']
variableSize?: ExpressionRunnerProps['variableSize']
containerSize?: ExpressionRunnerProps['containerSize']
highlightOverrides?: ExpressionRunnerProps['highlightOverrides']
highlightOverrideActiveAfterStart?: ExpressionRunnerProps['highlightOverrideActiveAfterStart']
highlightOverridesCallArgAndFuncUnboundOnly?: ExpressionRunnerProps['highlightOverridesCallArgAndFuncUnboundOnly']
Expand All @@ -45,7 +43,6 @@ export const expressionRunnerPlayButtonOnlyConfigDefault = {
showPriorities: false,
speed: 1,
skipAlphaConvert: false,
variableSize: 'lg',
explanationsVisibility: 'hiddenInitialPausedOnly'
}

Expand All @@ -69,17 +66,15 @@ interface ExpressionRunnerPlayButtonOnlyConfig {
speed?: number
skipAlphaConvert?: boolean
skipActive?: boolean
variableSize?: ExpressionRunnerProps['variableSize']
containerSize?: ExpressionRunnerProps['containerSize']
showDefaultAndActiveOnly?: boolean
highlightOverrides?: ExpressionRunnerProps['highlightOverrides']
explanationsVisibility?: ExpressionRunnerProps['explanationsVisibility']
}

export const expressionRunnerSingleStepConfigDefault = {
hideFuncUnboundBadgeOnExplanation: false,
showPriorities: false,
explanationsVisibility: 'hiddenInitialPausedOnly',
variableSize: 'lg'
explanationsVisibility: 'hiddenInitialPausedOnly'
}

export function isExpressionRunnerSingleStepConfig(
Expand All @@ -96,9 +91,8 @@ interface ExpressionRunnerSingleStepConfig {
hideFuncUnboundBadgeOnExplanation?: boolean
showPriorities?: boolean
skipActive?: boolean
showDefaultAndActiveOnly?: boolean
nextIterations?: number
variableSize?: ExpressionRunnerProps['variableSize']
containerSize?: ExpressionRunnerProps['containerSize']
explanationsVisibility?: ExpressionRunnerProps['explanationsVisibility']
showAllShowSteps?: ExpressionRunnerProps['showAllShowSteps']
}
Expand All @@ -113,7 +107,6 @@ export const expressionRunnerPredefinedConfigDefault = {
hideFuncUnboundBadgeOnExplanation: false,
showPriorities: false,
explanationsVisibility: 'hiddenInitialPausedOnly',
variableSize: 'lg',
skipToTheEnd: true
}

Expand All @@ -123,8 +116,6 @@ interface ExpressionRunnerPredefinedConfig {
hideFuncUnboundBadgeOnExplanation?: boolean
showPriorities?: boolean
nextIterations?: number
variableSize?: ExpressionRunnerProps['variableSize']
containerSize?: ExpressionRunnerProps['containerSize']
explanationsVisibility?: ExpressionRunnerProps['explanationsVisibility']
showAllShowSteps?: ExpressionRunnerProps['showAllShowSteps']
skipToTheEnd?: boolean
Expand Down
Loading