diff --git a/docs/assets/search.js b/docs/assets/search.js index 0b67ad3d..85c015b3 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/classes/BoardState.html b/docs/classes/BoardState.html index b7de30af..bc19f132 100644 --- a/docs/classes/BoardState.html +++ b/docs/classes/BoardState.html @@ -1,4 +1,4 @@ -BoardState | goban

Class BoardState

Hierarchy (view full)

Implements

Constructors

constructor +BoardState | goban

Class BoardState

Hierarchy (view full)

Implements

Constructors

Properties

black_prisoners board board_is_repeating @@ -25,23 +25,23 @@ default to 19x19 if no board is provided.

Any state matrices (board, removal, etc..) provided will be cloned and must have the same dimensionality.

-

Parameters

Returns BoardState

Properties

black_prisoners: number
board_is_repeating: boolean
goban_callback?: GobanBase
height: number = 19
removal: boolean[][]
white_prisoners: number
width: number = 19

Methods

  • Returns true if the .board field from the other board is equal to this one

    -

    Parameters

    Returns boolean

Properties

black_prisoners: number
board_is_repeating: boolean
goban_callback?: GobanBase
height: number = 19
removal: boolean[][]
white_prisoners: number
width: number = 19

Methods

  • Returns true if the .board field from the other board is equal to this one

    +

    Parameters

    Returns boolean

  • Computes scoring locations for the board. If area_scoring is true, we will use area scoring rules, otherwise we will use territory scoring rules (which implies omitting territory in seki).

    -

    Parameters

    • area_scoring: boolean

    Returns ScoringLocations

  • Sets a position as being removed or not removed. If emit_stone_removal_updated is set to false, the "stone-removal.updated" event will not be emitted, and it is up to the caller to emit this event appropriately.

    -

    Parameters

    • x: number
    • y: number
    • removed: boolean
    • emit_stone_removal_updated: boolean = true

    Returns void

  • Toggles a group of stones for removal or restoration.

    +

    Parameters

    • x: number
    • y: number
    • removed: boolean
    • emit_stone_removal_updated: boolean = true

    Returns void

  • Toggles a group of stones for removal or restoration.

    By default, if we are marking a group for removal but the group is almost certainly alive (two eyes, etc), this will result in a no-op, unless force_removal is set to true.

    -

    Parameters

    • x: number
    • y: number
    • force_removal: boolean = false

    Returns {
        group: RawStoneString;
        removed: boolean;
    }

\ No newline at end of file +

Parameters

  • x: number
  • y: number
  • force_removal: boolean = false

Returns {
    group: RawStoneString;
    removed: boolean;
}

\ No newline at end of file diff --git a/docs/classes/ConditionalMoveTree.html b/docs/classes/ConditionalMoveTree.html index a9f3b57a..86c2a7eb 100644 --- a/docs/classes/ConditionalMoveTree.html +++ b/docs/classes/ConditionalMoveTree.html @@ -1,4 +1,4 @@ -ConditionalMoveTree | goban

Class ConditionalMoveTree

Constructors

constructor +ConditionalMoveTree | goban

Class ConditionalMoveTree

Constructors

Properties

Constructors

Properties

children: {
    [move: string]: ConditionalMoveTree;
}

Type declaration

move: null | string

Methods

\ No newline at end of file +

Constructors

Properties

children: {
    [move: string]: ConditionalMoveTree;
}

Type declaration

move: null | string

Methods

\ No newline at end of file diff --git a/docs/classes/Goban.html b/docs/classes/Goban.html index 1b849e9f..f3d01e1d 100644 --- a/docs/classes/Goban.html +++ b/docs/classes/Goban.html @@ -2,7 +2,7 @@ classes, types, and enums.

You can't create an instance of a Goban directly, you have to create an instance of one of the renderers, such as GobanSVG.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

__board_redraw_pen_layer_timer: any = null
__clock_timer?: Timeout
__draw_state: string[][]
__last_pt: {
    i: number;
    j: number;
    valid: boolean;
} = ...

Type declaration

  • i: number
  • j: number
  • valid: boolean
__update_move_tree: any = null
analysis_move_counter: number
analysis_removal_last_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
analysis_removal_state?: boolean
analysis_scoring_color?: string
analysis_scoring_last_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
bounded_height: number
bounded_width: number
bounds: GobanBounds
chat_log: GobanChatLog = []
circle_radius: number
clock_should_be_paused_for_move_submission: boolean = false
colored_circles?: (undefined | ColoredCircle)[][]
conditional_path: string = ""
conditional_starting_color: "black" | "white" | "invalid" = "invalid"
conditional_tree: ConditionalMoveTree = ...
config: GobanConfig
connectToReviewSent?: boolean
current_cmove?: ConditionalMoveTree
currently_my_cmove: boolean = false
dirty_redraw: any = null
disconnectedFromGame: boolean = true
display_width?: number
done_loading_review: boolean = false
dont_draw_last_move: boolean
double_click_submit: boolean
draw_bottom_labels: boolean
draw_left_labels: boolean
draw_right_labels: boolean
draw_top_labels: boolean
edit_color?: "black" | "white"
engine: GobanEngine
errorHandler: ((e) => void)

Type declaration

    • (e): void
    • Parameters

      • e: Error

      Returns void

game_id: number
game_type: string
getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
goban_id: number = ++last_goban_id

Base fields *

-
heatmap?: NumberMatrix
height: number
highlight_movetree_moves: boolean
interactive: boolean
isInPushedAnalysis: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerController: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerOwner: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

label_character: string
label_mark: string = "[UNSET]"
last_clock?: AdHocClock
last_emitted_clock?: JGOFClockWithTransmitting
last_hover_square?: JGOFIntersection
last_move?: MoveTree
last_move_radius: number
last_paused_by_player_state: null | boolean = null
last_paused_state: null | boolean = null
last_phase?: GobanEnginePhase
last_review_message: ReviewMessage
last_sound_played_for_a_stone_placement?: string
last_stone_sound: number
leavePushedAnalysis: (() => void)

Type declaration

    • (): void
    • Returns void

marked_analysis_score?: boolean[][]
move_selected?: JGOFIntersection
no_display: boolean
onError?: ((error) => void)

Type declaration

    • (error): void
    • Parameters

      • error: Error

      Returns void

on_game_screen: boolean
one_click_submit: boolean
original_square_size: number | ((goban) => number) | "auto"

Type declaration

    • (goban): number
    • Parameters

      Returns number

parent: HTMLElement
pause_control?: AdHocPauseControl
paused_since?: number
pen_marks: any[]
player_id: number
preloaded_data?: GobanConfig
previous_mode: string
puzzle_autoplace_delay: number
restrict_moves_to_movetree: boolean
review_had_gamedata: boolean
review_id: number
scoring_mode: boolean | "stalling-scoring-mode"
sendLatencyTimer?: Timeout
sent_timed_out_message: boolean = false
shift_key_is_down: boolean
show_variation_move_numbers: boolean
showing_scores: boolean = false
socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
square_size: number = 10
stalling_score_estimate?: StallingScoreEstimate
stone_placement_enabled: boolean
stone_removal_auto_scoring_done?: boolean = false
variation_stone_opacity: number
width: number
THEMES: ThemesInterface = THEMES
THEMES_SORTED: {
    black: GobanTheme[];
    board: GobanTheme[];
    white: GobanTheme[];
    [key: string]: GobanTheme[];
} = THEMES_SORTED

Type declaration

setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

Type declaration

    • (newCallbacks): void
    • Set's callback functions to be called in various situations. You can set any +

Constructors

Properties

__board_redraw_pen_layer_timer: any = null
__clock_timer?: Timeout
__draw_state: string[][]
__last_pt: {
    i: number;
    j: number;
    valid: boolean;
} = ...

Type declaration

  • i: number
  • j: number
  • valid: boolean
__update_move_tree: any = null
analysis_move_counter: number
analysis_removal_last_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
analysis_removal_state?: boolean
analysis_scoring_color?: string
analysis_scoring_last_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
bounded_height: number
bounded_width: number
bounds: GobanBounds
chat_log: GobanChatLog = []
circle_radius: number
clock_should_be_paused_for_move_submission: boolean = false
colored_circles?: (undefined | ColoredCircle)[][]
conditional_path: string = ""
conditional_starting_color: "black" | "white" | "invalid" = "invalid"
conditional_tree: ConditionalMoveTree = ...
config: GobanConfig
connectToReviewSent?: boolean
current_cmove?: ConditionalMoveTree
currently_my_cmove: boolean = false
dirty_redraw: any = null
disconnectedFromGame: boolean = true
display_width?: number
done_loading_review: boolean = false
dont_draw_last_move: boolean
double_click_submit: boolean
draw_bottom_labels: boolean
draw_left_labels: boolean
draw_right_labels: boolean
draw_top_labels: boolean
edit_color?: "black" | "white"
engine: GobanEngine
errorHandler: ((e) => void)

Type declaration

    • (e): void
    • Parameters

      • e: Error

      Returns void

game_id: number
game_type: string
getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
goban_id: number = ++last_goban_id

Base fields *

+
heatmap?: NumberMatrix
height: number
highlight_movetree_moves: boolean
interactive: boolean
isInPushedAnalysis: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerController: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerOwner: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

label_character: string
label_mark: string = "[UNSET]"
last_clock?: AdHocClock
last_emitted_clock?: JGOFClockWithTransmitting
last_hover_square?: JGOFIntersection
last_move?: MoveTree
last_move_radius: number
last_paused_by_player_state: null | boolean = null
last_paused_state: null | boolean = null
last_phase?: GobanEnginePhase
last_review_message: ReviewMessage
last_sound_played_for_a_stone_placement?: string
last_stone_sound: number
leavePushedAnalysis: (() => void)

Type declaration

    • (): void
    • Returns void

marked_analysis_score?: boolean[][]
move_selected?: JGOFIntersection
no_display: boolean
onError?: ((error) => void)

Type declaration

    • (error): void
    • Parameters

      • error: Error

      Returns void

on_game_screen: boolean
one_click_submit: boolean
original_square_size: number | ((goban) => number) | "auto"

Type declaration

    • (goban): number
    • Parameters

      Returns number

parent: HTMLElement
pause_control?: AdHocPauseControl
paused_since?: number
pen_marks: any[]
player_id: number
preloaded_data?: GobanConfig
previous_mode: string
puzzle_autoplace_delay: number
restrict_moves_to_movetree: boolean
review_had_gamedata: boolean
review_id: number
scoring_mode: boolean | "stalling-scoring-mode"
sendLatencyTimer?: Timeout
sent_timed_out_message: boolean = false
shift_key_is_down: boolean
show_variation_move_numbers: boolean
showing_scores: boolean = false
socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
square_size: number = 10
stalling_score_estimate?: StallingScoreEstimate
stone_font_scale: number
stone_placement_enabled: boolean
stone_removal_auto_scoring_done?: boolean = false
variation_stone_opacity: number
width: number
THEMES: ThemesInterface = THEMES
THEMES_SORTED: {
    black: GobanTheme[];
    board: GobanTheme[];
    white: GobanTheme[];
    [key: string]: GobanTheme[];
} = THEMES_SORTED

Type declaration

setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

Type declaration

    • (newCallbacks): void
    • Set's callback functions to be called in various situations. You can set any or all of the callbacks, only the provided callbacks will be updated.

      -

      Parameters

      Returns void

setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

Type declaration

    • (_catalog, _debug_mode?): void
    • Parameters

      Returns void

Accessors

Methods

setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

Type declaration

    • (_catalog, _debug_mode?): void
    • Parameters

      Returns void

Accessors

Methods

\ No newline at end of file +

Returns void

\ No newline at end of file diff --git a/docs/classes/GobanBase.html b/docs/classes/GobanBase.html index 5dabd697..0c4f9688 100644 --- a/docs/classes/GobanBase.html +++ b/docs/classes/GobanBase.html @@ -2,7 +2,7 @@ classes, types, and enums.

You can't create an instance of a Goban directly, you have to create an instance of one of the renderers, such as GobanSVG.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

_destroyed: boolean = false
engine: GobanEngine
goban_id: number = ++last_goban_id

Base fields *

-
setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

Type declaration

    • (newCallbacks): void
    • Set's callback functions to be called in various situations. You can set any +

Constructors

Properties

_destroyed: boolean = false
engine: GobanEngine
goban_id: number = ++last_goban_id

Base fields *

+
setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

Type declaration

    • (newCallbacks): void
    • Set's callback functions to be called in various situations. You can set any or all of the callbacks, only the provided callbacks will be updated.

      -

      Parameters

      Returns void

setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

Type declaration

    • (_catalog, _debug_mode?): void
    • Parameters

      Returns void

Accessors

Methods

setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

Type declaration

    • (_catalog, _debug_mode?): void
    • Parameters

      Returns void

Accessors

Methods

\ No newline at end of file +

Parameters

Returns JGOFMove

\ No newline at end of file diff --git a/docs/classes/GobanCanvas.html b/docs/classes/GobanCanvas.html index 1139d780..648a6a91 100644 --- a/docs/classes/GobanCanvas.html +++ b/docs/classes/GobanCanvas.html @@ -2,7 +2,7 @@ classes, types, and enums.

You can't create an instance of a Goban directly, you have to create an instance of one of the renderers, such as GobanSVG.

-

Hierarchy (view full)

Implements

Constructors

Hierarchy (view full)

Implements

Constructors

Properties

__board_redraw_pen_layer_timer: any = null
__borders_initialized: boolean = false
__clock_timer?: Timeout
__draw_state: string[][]
__last_pt: {
    i: number;
    j: number;
    valid: boolean;
} = ...

Type declaration

  • i: number
  • j: number
  • valid: boolean
__set_board_height: number = -1
__set_board_width: number = -1
__update_move_tree: any = null
analysis_move_counter: number
analysis_removal_last_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
analysis_removal_state?: boolean
autoplaying_puzzle_move: boolean = false
board: HTMLCanvasElement
bounded_height: number
bounded_width: number
bounds: GobanBounds
byoyomi_label: string = ""
chat_log: GobanChatLog = []
circle_radius: number
clock_should_be_paused_for_move_submission: boolean = false
colored_circles?: (undefined | ColoredCircle)[][]
conditional_path: string = ""
conditional_starting_color: "black" | "white" | "invalid" = "invalid"
conditional_tree: ConditionalMoveTree = ...
config: GobanConfig
connectToReviewSent?: boolean
ctx: CanvasRenderingContext2D
current_cmove?: ConditionalMoveTree
current_pen_mark?: {
    color: string;
    points: [number, number];
}

Type declaration

  • color: string
  • points: [number, number]
currently_my_cmove: boolean = false
dirty_redraw: any = null
disconnectedFromGame: boolean = true
display_width?: number
done_loading_review: boolean = false
dont_draw_last_move: boolean
double_click_submit: boolean
draw_bottom_labels: boolean
draw_left_labels: boolean
draw_right_labels: boolean
draw_top_labels: boolean
drawing_enabled: boolean = true
edit_color?: "black" | "white"
engine: GobanEngine
errorHandler: ((e) => void)

Type declaration

    • (e): void
    • Parameters

      • e: Error

      Returns void

game_id: number
game_type: string
getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
goban_id: number = ++last_goban_id

Base fields *

-
handleShiftKey: ((ev) => void)

Type declaration

    • (ev): void
    • Parameters

      • ev: KeyboardEvent

      Returns void

heatmap?: NumberMatrix
height: number
highlight_movetree_moves: boolean
interactive: boolean
isInPushedAnalysis: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerController: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerOwner: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

label_character: string
label_mark: string = "[UNSET]"
labeling_mode?: "put" | "clear"
last_clock?: AdHocClock
last_emitted_clock?: JGOFClockWithTransmitting
last_hover_square?: JGOFIntersection
last_label_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
last_move?: MoveTree
last_move_opacity: number = 1
last_move_radius: number
last_paused_by_player_state: null | boolean = null
last_paused_state: null | boolean = null
last_pen_position?: [number, number]
last_phase?: GobanEnginePhase
last_review_message: ReviewMessage
last_sound_played_for_a_stone_placement?: string
last_stone_sound: number
leavePushedAnalysis: (() => void)

Type declaration

    • (): void
    • Returns void

marked_analysis_score?: boolean[][]
message_div?: HTMLDivElement
message_td?: HTMLElement
message_text?: HTMLDivElement
message_timeout?: number
metrics: GobanMetrics = ...
move_selected?: JGOFIntersection
move_tree_canvas?: HTMLCanvasElement
move_tree_container?: HTMLElement
move_tree_inner_container?: HTMLDivElement
no_display: boolean
onError?: ((error) => void)

Type declaration

    • (error): void
    • Parameters

      • error: Error

      Returns void

on_game_screen: boolean
one_click_submit: boolean
original_square_size: number | ((goban) => number) | "auto"

Type declaration

    • (goban): number
    • Parameters

      Returns number

parent: HTMLElement
pause_control?: AdHocPauseControl
paused_since?: number
pen_ctx?: CanvasRenderingContext2D
pen_layer?: HTMLCanvasElement
pen_marks: any[]
player_id: number
preloaded_data?: GobanConfig
previous_mode: string
puzzle_autoplace_delay: number
ready_to_draw: boolean = false
restrict_moves_to_movetree: boolean
review_had_gamedata: boolean
review_id: number
scoring_mode: boolean | "stalling-scoring-mode"
sendLatencyTimer?: Timeout
sent_timed_out_message: boolean = false
shadow_ctx?: CanvasRenderingContext2D
shadow_layer?: HTMLCanvasElement
shift_key_is_down: boolean
show_variation_move_numbers: boolean
showing_scores: boolean = false
socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
square_size: number = 10
stalling_score_estimate?: StallingScoreEstimate
stone_placement_enabled: boolean
stone_removal_auto_scoring_done?: boolean = false
theme_black: GobanTheme
theme_black_stones: any[] = []
theme_black_text_color: string = HOT_PINK
theme_blank_text_color: string = HOT_PINK
theme_board: GobanTheme
theme_faded_line_color: string = HOT_PINK
theme_faded_star_color: string = HOT_PINK
theme_line_color: string = ""
theme_star_color: string = ""
theme_stone_radius: number = 10
theme_white: GobanTheme
theme_white_stones: any[] = []
theme_white_text_color: string = HOT_PINK
themes: GobanSelectedThemes = ...
title_div?: HTMLElement
variation_stone_opacity: number
width: number
THEMES: ThemesInterface = THEMES
THEMES_SORTED: {
    black: GobanTheme[];
    board: GobanTheme[];
    white: GobanTheme[];
    [key: string]: GobanTheme[];
} = THEMES_SORTED

Type declaration

setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

Type declaration

    • (newCallbacks): void
    • Set's callback functions to be called in various situations. You can set any +

Constructors

Properties

__board_redraw_pen_layer_timer: any = null
__borders_initialized: boolean = false
__clock_timer?: Timeout
__draw_state: string[][]
__last_pt: {
    i: number;
    j: number;
    valid: boolean;
} = ...

Type declaration

  • i: number
  • j: number
  • valid: boolean
__set_board_height: number = -1
__set_board_width: number = -1
__update_move_tree: any = null
analysis_move_counter: number
analysis_removal_last_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
analysis_removal_state?: boolean
autoplaying_puzzle_move: boolean = false
board: HTMLCanvasElement
bounded_height: number
bounded_width: number
bounds: GobanBounds
byoyomi_label: string = ""
chat_log: GobanChatLog = []
circle_radius: number
clock_should_be_paused_for_move_submission: boolean = false
colored_circles?: (undefined | ColoredCircle)[][]
conditional_path: string = ""
conditional_starting_color: "black" | "white" | "invalid" = "invalid"
conditional_tree: ConditionalMoveTree = ...
config: GobanConfig
connectToReviewSent?: boolean
ctx: CanvasRenderingContext2D
current_cmove?: ConditionalMoveTree
current_pen_mark?: {
    color: string;
    points: [number, number];
}

Type declaration

  • color: string
  • points: [number, number]
currently_my_cmove: boolean = false
dirty_redraw: any = null
disconnectedFromGame: boolean = true
display_width?: number
done_loading_review: boolean = false
dont_draw_last_move: boolean
double_click_submit: boolean
draw_bottom_labels: boolean
draw_left_labels: boolean
draw_right_labels: boolean
draw_top_labels: boolean
drawing_enabled: boolean = true
edit_color?: "black" | "white"
engine: GobanEngine
errorHandler: ((e) => void)

Type declaration

    • (e): void
    • Parameters

      • e: Error

      Returns void

game_id: number
game_type: string
getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
goban_id: number = ++last_goban_id

Base fields *

+
handleShiftKey: ((ev) => void)

Type declaration

    • (ev): void
    • Parameters

      • ev: KeyboardEvent

      Returns void

heatmap?: NumberMatrix
height: number
highlight_movetree_moves: boolean
interactive: boolean
isInPushedAnalysis: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerController: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerOwner: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

label_character: string
label_mark: string = "[UNSET]"
labeling_mode?: "put" | "clear"
last_clock?: AdHocClock
last_emitted_clock?: JGOFClockWithTransmitting
last_hover_square?: JGOFIntersection
last_label_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
last_move?: MoveTree
last_move_opacity: number = 1
last_move_radius: number
last_paused_by_player_state: null | boolean = null
last_paused_state: null | boolean = null
last_pen_position?: [number, number]
last_phase?: GobanEnginePhase
last_review_message: ReviewMessage
last_sound_played_for_a_stone_placement?: string
last_stone_sound: number
leavePushedAnalysis: (() => void)

Type declaration

    • (): void
    • Returns void

marked_analysis_score?: boolean[][]
message_div?: HTMLDivElement
message_td?: HTMLElement
message_text?: HTMLDivElement
message_timeout?: number
metrics: GobanMetrics = ...
move_selected?: JGOFIntersection
move_tree_canvas?: HTMLCanvasElement
move_tree_container?: HTMLElement
move_tree_inner_container?: HTMLDivElement
no_display: boolean
onError?: ((error) => void)

Type declaration

    • (error): void
    • Parameters

      • error: Error

      Returns void

on_game_screen: boolean
one_click_submit: boolean
original_square_size: number | ((goban) => number) | "auto"

Type declaration

    • (goban): number
    • Parameters

      Returns number

parent: HTMLElement
pause_control?: AdHocPauseControl
paused_since?: number
pen_ctx?: CanvasRenderingContext2D
pen_layer?: HTMLCanvasElement
pen_marks: any[]
player_id: number
preloaded_data?: GobanConfig
previous_mode: string
puzzle_autoplace_delay: number
ready_to_draw: boolean = false
restrict_moves_to_movetree: boolean
review_had_gamedata: boolean
review_id: number
scoring_mode: boolean | "stalling-scoring-mode"
sendLatencyTimer?: Timeout
sent_timed_out_message: boolean = false
shadow_ctx?: CanvasRenderingContext2D
shadow_layer?: HTMLCanvasElement
shift_key_is_down: boolean
show_variation_move_numbers: boolean
showing_scores: boolean = false
socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
square_size: number = 10
stalling_score_estimate?: StallingScoreEstimate
stone_font_scale: number
stone_placement_enabled: boolean
stone_removal_auto_scoring_done?: boolean = false
theme_black: GobanTheme
theme_black_stones: any[] = []
theme_black_text_color: string = HOT_PINK
theme_blank_text_color: string = HOT_PINK
theme_board: GobanTheme
theme_faded_line_color: string = HOT_PINK
theme_faded_star_color: string = HOT_PINK
theme_line_color: string = ""
theme_star_color: string = ""
theme_stone_radius: number = 10
theme_white: GobanTheme
theme_white_stones: any[] = []
theme_white_text_color: string = HOT_PINK
themes: GobanSelectedThemes = ...
title_div?: HTMLElement
variation_stone_opacity: number
width: number
THEMES: ThemesInterface = THEMES
THEMES_SORTED: {
    black: GobanTheme[];
    board: GobanTheme[];
    white: GobanTheme[];
    [key: string]: GobanTheme[];
} = THEMES_SORTED

Type declaration

setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

Type declaration

    • (newCallbacks): void
    • Set's callback functions to be called in various situations. You can set any or all of the callbacks, only the provided callbacks will be updated.

      -

      Parameters

      Returns void

setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

Type declaration

    • (_catalog, _debug_mode?): void
    • Parameters

      Returns void

Accessors

Methods

setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

Type declaration

    • (_catalog, _debug_mode?): void
    • Parameters

      Returns void

Accessors

Methods

\ No newline at end of file +

Returns void

\ No newline at end of file diff --git a/docs/classes/GobanEngine.html b/docs/classes/GobanEngine.html index 6d015f92..0b7fac97 100644 --- a/docs/classes/GobanEngine.html +++ b/docs/classes/GobanEngine.html @@ -1,4 +1,4 @@ -GobanEngine | goban

Class GobanEngine

Hierarchy (view full)

Constructors

constructor +GobanEngine | goban

Class GobanEngine

Hierarchy (view full)

Constructors

Properties

_cur_move: MoveTree
_cur_review_move: undefined | MoveTree
_last_official_move: MoveTree
_outcome: string = ""
_phase: GobanEnginePhase = "play"
_rules: GobanEngineRules = "japanese"
_strict_seki_mode: boolean = false
_undo_requested?: number
_winner?: number | "black" | "white"
aga_handicap_scoring: boolean = false
allow_ko: boolean = false
allow_self_capture: boolean = false
allow_superko: boolean = false
automatic_stone_removal: boolean = false
black_prisoners: number
board_is_repeating: boolean
decoded_moves: JGOFMove[] = []
disable_analysis: boolean = false
dontStoreBoardHistory: boolean
free_handicap_placement: boolean = false
game_id: number = NaN
goban_callback?: GobanBase
group_ids?: number[]
handicap: number = NaN
handicap_rank_difference?: number
height: number = 19
initial_state: GobanEngineInitialState = ...
is_game_record: boolean = false
komi: number = NaN
latencies?: {
    [player_id: string]: number;
}

Type declaration

  • [player_id: string]: number
loading_sgf: boolean = false
move_before_jump?: MoveTree
move_tree: MoveTree
move_tree_layout_dirty: boolean = false
move_tree_layout_hash: {
    [coords: string]: MoveTree;
} = {}

Type declaration

move_tree_layout_vector: number[] = []
name: string = ""
needs_sealing?: JGOFSealingIntersection[]
parentEventEmitter?: EventEmitter<GobanEvents, any>
player_pool: {
    [id: number]: GobanEnginePlayerEntry;
}

Type declaration

players: {
    black: GobanEnginePlayerEntry;
    white: GobanEnginePlayerEntry;
} = ...

Type declaration

puzzle_collection: number = NaN
puzzle_description: string = "[missing puzzle description]"
puzzle_opponent_move_mode: PuzzleOpponentMoveMode = "manual"
puzzle_player_move_mode: PuzzlePlayerMoveMode = "free"
puzzle_rank: number = NaN
puzzle_type: string = "[missing puzzle type]"
removal: boolean[][]
rengo?: boolean
rengo_casual_mode: boolean
rengo_teams?: {
    [colour: string]: GobanEnginePlayerEntry[];
}

Type declaration

review_id?: number
score_handicap: boolean = false
score_prisoners: boolean = false
score_stones: boolean = false
score_territory: boolean = false
score_territory_in_seki: boolean = false
stalling_score_estimate?: StallingScoreEstimate
superko_algorithm: GobanEngineSuperKoAlgorithm = "psk"
territory_included_in_sgf: boolean = false
throw_all_errors?: boolean
time_control: JGOFTimeControl = ...
white_prisoners: number
width: number = 19

Accessors

  • get winner(): undefined | number | "black" | "white"
  • Returns undefined | number | "black" | "white"

  • set winner(winner): void
  • Parameters

    • winner: undefined | number | "black" | "white"

    Returns void

Methods

  • Returns {
        black: string;
        white: string;
    }

    • black: string
    • white: string
  • Computes the score of the current board state.

    +

Constructors

Properties

_cur_move: MoveTree
_cur_review_move: undefined | MoveTree
_last_official_move: MoveTree
_outcome: string = ""
_phase: GobanEnginePhase = "play"
_rules: GobanEngineRules = "japanese"
_strict_seki_mode: boolean = false
_undo_requested?: number
_winner?: number | "black" | "white"
aga_handicap_scoring: boolean = false
allow_ko: boolean = false
allow_self_capture: boolean = false
allow_superko: boolean = false
automatic_stone_removal: boolean = false
black_prisoners: number
board_is_repeating: boolean
decoded_moves: JGOFMove[] = []
disable_analysis: boolean = false
dontStoreBoardHistory: boolean
free_handicap_placement: boolean = false
game_id: number = NaN
goban_callback?: GobanBase
group_ids?: number[]
handicap: number = NaN
handicap_rank_difference?: number
height: number = 19
initial_state: GobanEngineInitialState = ...
is_game_record: boolean = false
komi: number = NaN
latencies?: {
    [player_id: string]: number;
}

Type declaration

  • [player_id: string]: number
loading_sgf: boolean = false
move_before_jump?: MoveTree
move_tree: MoveTree
move_tree_layout_dirty: boolean = false
move_tree_layout_hash: {
    [coords: string]: MoveTree;
} = {}

Type declaration

move_tree_layout_vector: number[] = []
name: string = ""
needs_sealing?: JGOFSealingIntersection[]
parentEventEmitter?: EventEmitter<GobanEvents, any>
player_pool: {
    [id: number]: GobanEnginePlayerEntry;
}

Type declaration

players: {
    black: GobanEnginePlayerEntry;
    white: GobanEnginePlayerEntry;
} = ...

Type declaration

puzzle_collection: number = NaN
puzzle_description: string = "[missing puzzle description]"
puzzle_opponent_move_mode: PuzzleOpponentMoveMode = "manual"
puzzle_player_move_mode: PuzzlePlayerMoveMode = "free"
puzzle_rank: number = NaN
puzzle_type: string = "[missing puzzle type]"
removal: boolean[][]
rengo?: boolean
rengo_casual_mode: boolean
rengo_teams?: {
    [colour: string]: GobanEnginePlayerEntry[];
}

Type declaration

review_id?: number
score_handicap: boolean = false
score_prisoners: boolean = false
score_stones: boolean = false
score_territory: boolean = false
score_territory_in_seki: boolean = false
stalling_score_estimate?: StallingScoreEstimate
superko_algorithm: GobanEngineSuperKoAlgorithm = "psk"
territory_included_in_sgf: boolean = false
throw_all_errors?: boolean
time_control: JGOFTimeControl = ...
white_prisoners: number
width: number = 19

Accessors

  • get winner(): undefined | number | "black" | "white"
  • Returns undefined | number | "black" | "white"

  • set winner(winner): void
  • Parameters

    • winner: undefined | number | "black" | "white"

    Returns void

Methods

  • Returns {
        black: string;
        white: string;
    }

    • black: string
    • white: string
  • Computes the score of the current board state.

    If only_prisoners is true, we return the same data structure for convenience, but only the prisoners will be counted, other sources of points will be zero.

    -

    Parameters

    • Optional only_prisoners: boolean

    Returns Score

  • Decodes a move string like "A11" into a move object like {x: 0, y: 10}. Also handles the special cases like ".." and "pass" which map to {x: -1, y: -1}.

    -

    Parameters

    • coordinates: string

    Returns JGOFMove

  • Parameters

    • from_turn: number
    • moves: string | AdHocPackedMove
    • Optional cb: ((x, y, edited, color) => void)
        • (x, y, edited, color): void
        • Parameters

          • x: number
          • y: number
          • edited: boolean
          • color: number

          Returns void

    Returns MoveTree[]

  • Returns a move string from the given official move number (aka branch point)

    -

    Returns {
        from: number;
        moves: string;
    }

    • from: number
    • moves: string
  • Parameters

    • from_turn: number
    • moves: string | AdHocPackedMove
    • Optional cb: ((x, y, edited, color) => void)
        • (x, y, edited, color): void
        • Parameters

          • x: number
          • y: number
          • edited: boolean
          • color: number

          Returns void

    Returns MoveTree[]

  • Returns a move string from the given official move number (aka branch point)

    +

    Returns {
        from: number;
        moves: string;
    }

    • from: number
    • moves: string
  • returns true if our current move is our last official move

    -

    Returns boolean

  • returns true if our current move is our last official move

    +

    Returns boolean

  • Returns the number of stones removed. If you want the coordinates of the stones removed, pass in a removed_stones array to append the moves to.

    -

    Parameters

    • x: number
    • y: number
    • Optional checkForKo: boolean
    • Optional errorOnSuperKo: boolean
    • Optional dontCheckForSuperKo: boolean
    • Optional dontCheckForSelfCapture: boolean
    • Optional isTrunkMove: boolean
    • Optional removed_stones: JGOFIntersection[]

    Returns number

  • Parameters

    • Optional player_id: number

    Returns "black" | "white" | "invalid"

  • Encodes an x,y pair or a move object like {x: 0, y: 0} into a move string like "A1"

    -

    Parameters

    Returns string

  • Parameters

    • x: number
    • y: number

    Returns string

  • Saves our current move as our last official move

    -

    Returns void

  • Parameters

    • x: number
    • y: number
    • Optional needs_sealing: boolean

    Returns void

  • Sets a position as being removed or not removed. If +

    Parameters

    • x: number
    • y: number
    • Optional checkForKo: boolean
    • Optional errorOnSuperKo: boolean
    • Optional dontCheckForSuperKo: boolean
    • Optional dontCheckForSelfCapture: boolean
    • Optional isTrunkMove: boolean
    • Optional removed_stones: JGOFIntersection[]

    Returns number

  • Parameters

    • Optional player_id: number

    Returns "black" | "white" | "invalid"

  • Encodes an x,y pair or a move object like {x: 0, y: 0} into a move string like "A1"

    +

    Parameters

    Returns string

  • Parameters

    • x: number
    • y: number

    Returns string

  • Saves our current move as our last official move

    +

    Returns void

  • Parameters

    • x: number
    • y: number
    • Optional needs_sealing: boolean

    Returns void

  • Sets a position as being removed or not removed. If emit_stone_removal_updated is set to false, the "stone-removal.updated" event will not be emitted, and it is up to the caller to emit this event appropriately.

    -

    Parameters

    • x: number
    • y: number
    • removed: boolean
    • emit_stone_removal_updated: boolean = true

    Returns void

  • Toggles a group of stones for removal or restoration.

    +

    Parameters

    • x: number
    • y: number
    • removed: boolean
    • emit_stone_removal_updated: boolean = true

    Returns void

  • Toggles a group of stones for removal or restoration.

    By default, if we are marking a group for removal but the group is almost certainly alive (two eyes, etc), this will result in a no-op, unless force_removal is set to true.

    -

    Parameters

    • x: number
    • y: number
    • force_removal: boolean = false

    Returns {
        group: RawStoneString;
        removed: boolean;
    }

\ No newline at end of file +

Parameters

Returns GobanEngineConfig

\ No newline at end of file diff --git a/docs/classes/GobanError.html b/docs/classes/GobanError.html index fe7543c3..62013aa5 100644 --- a/docs/classes/GobanError.html +++ b/docs/classes/GobanError.html @@ -1,2 +1,2 @@ -GobanError | goban

Class GobanError

Hierarchy (view full)

Constructors

Constructors

\ No newline at end of file +GobanError | goban

Class GobanError

Hierarchy (view full)

Constructors

Constructors

\ No newline at end of file diff --git a/docs/classes/GobanInteractive.html b/docs/classes/GobanInteractive.html index 59d6aff0..f3d84fc1 100644 --- a/docs/classes/GobanInteractive.html +++ b/docs/classes/GobanInteractive.html @@ -1,7 +1,7 @@ GobanInteractive | goban

Class GobanInteractiveAbstract

This class serves as a functionality layer encapsulating core interactions we do with a Goban, we have it as a separate base class simply to help with code organization and to keep our Goban class size down.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

__board_redraw_pen_layer_timer: any = null
__clock_timer?: Timeout
__draw_state: string[][]
__last_pt: {
    i: number;
    j: number;
    valid: boolean;
} = ...

Type declaration

  • i: number
  • j: number
  • valid: boolean
__update_move_tree: any = null
_analyze_subtool: string = "alternate"
_analyze_tool: AnalysisTool = "stone"
_mode: GobanModes = "play"
_review_controller_id?: number
_review_owner_id?: number
_score_estimator: null | ScoreEstimator = null
_submit_move?: (() => void)

Type declaration

    • (): void
    • Returns void

_title: string = "play"
analysis_move_counter: number
analysis_removal_last_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
analysis_removal_state?: boolean
bounded_height: number
bounded_width: number
bounds: GobanBounds
chat_log: GobanChatLog = []
circle_radius: number
clock_should_be_paused_for_move_submission: boolean = false
colored_circles?: (undefined | ColoredCircle)[][]
conditional_path: string = ""
conditional_starting_color: "black" | "white" | "invalid" = "invalid"
conditional_tree: ConditionalMoveTree = ...
config: GobanConfig
current_cmove?: ConditionalMoveTree
currently_my_cmove: boolean = false
dirty_redraw: any = null
disconnectedFromGame: boolean = true
display_width?: number
done_loading_review: boolean = false
dont_draw_last_move: boolean
double_click_submit: boolean
draw_bottom_labels: boolean
draw_left_labels: boolean
draw_right_labels: boolean
draw_top_labels: boolean
edit_color?: "black" | "white"
engine: GobanEngine
errorHandler: ((e) => void)

Type declaration

    • (e): void
    • Parameters

      • e: Error

      Returns void

game_id: number
game_type: string
getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
goban_id: number = ++last_goban_id

Base fields *

-
heatmap?: NumberMatrix
height: number
highlight_movetree_moves: boolean
interactive: boolean
isInPushedAnalysis: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerController: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerOwner: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

label_character: string
label_mark: string = "[UNSET]"
last_clock?: AdHocClock
last_emitted_captured_stones: JGOFIntersection[] = []
last_emitted_clock?: JGOFClockWithTransmitting
last_hover_square?: JGOFIntersection
last_move?: MoveTree
last_move_radius: number
last_paused_by_player_state: null | boolean = null
last_paused_state: null | boolean = null
last_phase?: GobanEnginePhase
last_review_message: ReviewMessage
last_sound_played_for_a_stone_placement?: string
last_stone_sound: number
leavePushedAnalysis: (() => void)

Type declaration

    • (): void
    • Returns void

marked_analysis_score?: boolean[][]
move_selected?: JGOFIntersection
no_display: boolean
onError?: ((error) => void)

Type declaration

    • (error): void
    • Parameters

      • error: Error

      Returns void

on_game_screen: boolean
one_click_submit: boolean
original_square_size: number | ((goban) => number) | "auto"

Type declaration

    • (goban): number
    • Parameters

      Returns number

pause_control?: AdHocPauseControl
paused_since?: number
pen_marks: any[]
player_id: number
preloaded_data?: GobanConfig
previous_mode: string
puzzle_autoplace_delay: number
restrict_moves_to_movetree: boolean
review_had_gamedata: boolean
review_id: number
scoring_mode: boolean | "stalling-scoring-mode"
sendLatencyTimer?: Timeout
sent_timed_out_message: boolean
shift_key_is_down: boolean
show_variation_move_numbers: boolean
showing_scores: boolean = false
square_size: number = 10
stalling_score_estimate?: StallingScoreEstimate
stone_placement_enabled: boolean
stone_removal_auto_scoring_done?: boolean = false
variation_stone_opacity: number
width: number
setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

Type declaration

    • (newCallbacks): void
    • Set's callback functions to be called in various situations. You can set any +

Constructors

Properties

__board_redraw_pen_layer_timer: any = null
__clock_timer?: Timeout
__draw_state: string[][]
__last_pt: {
    i: number;
    j: number;
    valid: boolean;
} = ...

Type declaration

  • i: number
  • j: number
  • valid: boolean
__update_move_tree: any = null
_analyze_subtool: string = "alternate"
_analyze_tool: AnalysisTool = "stone"
_mode: GobanModes = "play"
_review_controller_id?: number
_review_owner_id?: number
_score_estimator: null | ScoreEstimator = null
_submit_move?: (() => void)

Type declaration

    • (): void
    • Returns void

_title: string = "play"
analysis_move_counter: number
analysis_removal_last_position: {
    i: number;
    j: number;
} = ...

Type declaration

  • i: number
  • j: number
analysis_removal_state?: boolean
bounded_height: number
bounded_width: number
bounds: GobanBounds
chat_log: GobanChatLog = []
circle_radius: number
clock_should_be_paused_for_move_submission: boolean = false
colored_circles?: (undefined | ColoredCircle)[][]
conditional_path: string = ""
conditional_starting_color: "black" | "white" | "invalid" = "invalid"
conditional_tree: ConditionalMoveTree = ...
config: GobanConfig
current_cmove?: ConditionalMoveTree
currently_my_cmove: boolean = false
dirty_redraw: any = null
disconnectedFromGame: boolean = true
display_width?: number
done_loading_review: boolean = false
dont_draw_last_move: boolean
double_click_submit: boolean
draw_bottom_labels: boolean
draw_left_labels: boolean
draw_right_labels: boolean
draw_top_labels: boolean
edit_color?: "black" | "white"
engine: GobanEngine
errorHandler: ((e) => void)

Type declaration

    • (e): void
    • Parameters

      • e: Error

      Returns void

game_id: number
game_type: string
getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
goban_id: number = ++last_goban_id

Base fields *

+
heatmap?: NumberMatrix
height: number
highlight_movetree_moves: boolean
interactive: boolean
isInPushedAnalysis: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerController: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

isPlayerOwner: (() => boolean)

Type declaration

    • (): boolean
    • Returns boolean

label_character: string
label_mark: string = "[UNSET]"
last_clock?: AdHocClock
last_emitted_captured_stones: JGOFIntersection[] = []
last_emitted_clock?: JGOFClockWithTransmitting
last_hover_square?: JGOFIntersection
last_move?: MoveTree
last_move_radius: number
last_paused_by_player_state: null | boolean = null
last_paused_state: null | boolean = null
last_phase?: GobanEnginePhase
last_review_message: ReviewMessage
last_sound_played_for_a_stone_placement?: string
last_stone_sound: number
leavePushedAnalysis: (() => void)

Type declaration

    • (): void
    • Returns void

marked_analysis_score?: boolean[][]
move_selected?: JGOFIntersection
no_display: boolean
onError?: ((error) => void)

Type declaration

    • (error): void
    • Parameters

      • error: Error

      Returns void

on_game_screen: boolean
one_click_submit: boolean
original_square_size: number | ((goban) => number) | "auto"

Type declaration

    • (goban): number
    • Parameters

      Returns number

pause_control?: AdHocPauseControl
paused_since?: number
pen_marks: any[]
player_id: number
preloaded_data?: GobanConfig
previous_mode: string
puzzle_autoplace_delay: number
restrict_moves_to_movetree: boolean
review_had_gamedata: boolean
review_id: number
scoring_mode: boolean | "stalling-scoring-mode"
sendLatencyTimer?: Timeout
sent_timed_out_message: boolean
shift_key_is_down: boolean
show_variation_move_numbers: boolean
showing_scores: boolean = false
square_size: number = 10
stalling_score_estimate?: StallingScoreEstimate
stone_font_scale: number
stone_placement_enabled: boolean
stone_removal_auto_scoring_done?: boolean = false
variation_stone_opacity: number
width: number
setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

Type declaration

    • (newCallbacks): void
    • Set's callback functions to be called in various situations. You can set any or all of the callbacks, only the provided callbacks will be updated.

      -

      Parameters

      Returns void

setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

Type declaration

    • (_catalog, _debug_mode?): void
    • Parameters

      Returns void

Accessors

  • get destroyed(): boolean
  • Returns boolean

  • get is_game_record(): boolean
  • True if the game is a game record of a real life game

    -

    Returns boolean

Methods

  • Decodes any of the various ways we express moves that we've accumulated over the years into +

    Parameters

    Returns void

setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

Type declaration

    • (_catalog, _debug_mode?): void
    • Parameters

      Returns void

Accessors

  • get destroyed(): boolean
  • Returns boolean

  • get is_game_record(): boolean
  • True if the game is a game record of a real life game

    +

    Returns boolean

Methods

  • Decodes a move string like "A11" into a move object like {x: 0, y: 10}. Also handles the special cases like ".." and "pass" which map to {x: -1, y: -1}.

    -

    Parameters

    • coordinates: string

    Returns JGOFMove

  • Parameters

    • x: number
    • y: number
    • mark: string
    • Optional drawSquare: boolean

    Returns void

  • Parameters

    • perGameSettingAppliesToNonPlayers: boolean = false

    Returns boolean

  • Parameters

    • x: number
    • y: number
    • mark: string
    • Optional drawSquare: boolean

    Returns void

  • Parameters

    • perGameSettingAppliesToNonPlayers: boolean = false

    Returns boolean

  • Goban calls some abstract methods as part of the construction process. Because our subclasses might (and do) need to do some of their own config before these are called, we set this function to be called by our subclass after it's done it's own internal config stuff.

    -

    Returns GobanEngine

  • Parameters

    • colored_marks: {
          [key: string]: {
              color: string;
              move: string;
          };
      }
      • [key: string]: {
            color: string;
            move: string;
        }
        • color: string
        • move: string

    Returns void

  • Parameters

    • x: number
    • y: number
    • mark: string
    • Optional drawSquare: boolean

    Returns void

  • Called when a location is marked or unmarked for removal

    -

    Parameters

    • x: number
    • y: number
    • removed: boolean
    • emit_stone_removal_updated: boolean = true

    Returns void

  • Parameters

    • Optional set_override: "letters" | "numbers"

    Returns void

  • Parameters

    • x: number
    • y: number
    • mark: string
    • Optional drawSquare: boolean

    Returns void

  • Parameters

    • x: number
    • y: number
    • mark: string | number
    • Optional dont_draw: boolean

    Returns void

  • Parameters

    • coordinates: string
    • mark: string | number
    • Optional dont_draw: boolean

    Returns void

  • Parameters

    • colored_marks: {
          [key: string]: {
              color: string;
              move: string;
          };
      }
      • [key: string]: {
            color: string;
            move: string;
        }
        • color: string
        • move: string

    Returns void

  • Parameters

    • x: number
    • y: number
    • mark: string
    • Optional drawSquare: boolean

    Returns void

  • Called when a location is marked or unmarked for removal

    +

    Parameters

    • x: number
    • y: number
    • removed: boolean
    • emit_stone_removal_updated: boolean = true

    Returns void

  • Parameters

    • Optional set_override: "letters" | "numbers"

    Returns void

  • Parameters

    • x: number
    • y: number
    • mark: string
    • Optional drawSquare: boolean

    Returns void

  • Parameters

    • x: number
    • y: number
    • mark: string | number
    • Optional dont_draw: boolean

    Returns void

  • Parameters

    • coordinates: string
    • mark: string | number
    • Optional dont_draw: boolean

    Returns void

  • This is a callback that gets called by GobanEngine.getState to save and board state as it pushes and pops state. Our renderers can override this to save state they need.

    -

    Parameters

    • marks: {
          [mark: string]: string;
      }
      • [mark: string]: string
    • Optional dont_draw: boolean

    Returns void

  • Parameters

    • x: number
    • y: number
    • mark: string
    • drawSquare: boolean = true

    Returns void

  • Parameters

    • Optional dont_jump_to_official_move: boolean

    Returns boolean

  • Parameters

    • x: number
    • y: number
    • mark: string | number
    • Optional dont_draw: boolean

    Returns void

  • Parameters

    • msg_id: MessageID
    • Optional parameters: {
          [key: string]: any;
      }
      • [key: string]: any
    • Optional timeout: number

    Returns void

  • Parameters

    • x: number
    • y: number
    • mark: string | number
    • Optional force_label: boolean
    • Optional force_put: boolean

    Returns boolean

  • Parameters

    • x: number
    • y: number
    • anti_slip: boolean = true

    Returns {
        i: number;
        j: number;
        valid: boolean;
    }

    • i: number
    • j: number
    • valid: boolean
\ No newline at end of file +

Parameters

Returns void

\ No newline at end of file diff --git a/docs/classes/GobanMoveError.html b/docs/classes/GobanMoveError.html index 7ade2e0b..740628c4 100644 --- a/docs/classes/GobanMoveError.html +++ b/docs/classes/GobanMoveError.html @@ -1,6 +1,6 @@ -GobanMoveError | goban

Class GobanMoveError

Hierarchy (view full)

Constructors

constructor +GobanMoveError | goban

Class GobanMoveError

Hierarchy (view full)

Constructors

Properties

coords: string
game_id: number
move_number: number
\ No newline at end of file +

Constructors

Properties

coords: string
game_id: number
move_number: number
\ No newline at end of file diff --git a/docs/classes/GobanSocket.html b/docs/classes/GobanSocket.html index deae1029..33a47e74 100644 --- a/docs/classes/GobanSocket.html +++ b/docs/classes/GobanSocket.html @@ -8,7 +8,7 @@
  • Optional promise support for sends
  • Latency tracking (doubling as keep alive)
  • -

    Type Parameters

    Hierarchy

    Constructors

    Type Parameters

    Hierarchy

    Constructors

    Properties

    authentication?: DataArgument<SendProtocol["authenticate"]>
    callbacks: Map<number, ((data?, error?) => void)> = ...

    Type declaration

      • (data?, error?): void
      • Parameters

        Returns void

    clock_drift: number = 0.0
    current_ping_interval: number
    last_request_id: number = 0
    latency: number = 0.0
    manually_disconnected: boolean = false
    ping_timer?: Timeout
    promises_in_flight: Map<number, {
        args: any[];
        command: string;
        reject: ((...args) => void);
        resolve: ((...args) => void);
    }> = ...

    Type declaration

    • args: any[]
    • command: string
    • reject: ((...args) => void)
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    • resolve: ((...args) => void)
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    reconnect_tries: number = 0
    reconnecting: boolean = false
    send_queue: (() => void)[] = []

    Type declaration

      • (): void
      • Returns void

    socket: WebSocket
    timeout_timer?: Timeout
    url: string

    Accessors

    Methods

    \ No newline at end of file +

    Constructors

    Properties

    authentication?: DataArgument<SendProtocol["authenticate"]>
    callbacks: Map<number, ((data?, error?) => void)> = ...

    Type declaration

      • (data?, error?): void
      • Parameters

        Returns void

    clock_drift: number = 0.0
    current_ping_interval: number
    last_request_id: number = 0
    latency: number = 0.0
    manually_disconnected: boolean = false
    ping_timer?: Timeout
    promises_in_flight: Map<number, {
        args: any[];
        command: string;
        reject: ((...args) => void);
        resolve: ((...args) => void);
    }> = ...

    Type declaration

    • args: any[]
    • command: string
    • reject: ((...args) => void)
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    • resolve: ((...args) => void)
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    reconnect_tries: number = 0
    reconnecting: boolean = false
    send_queue: (() => void)[] = []

    Type declaration

      • (): void
      • Returns void

    socket: WebSocket
    timeout_timer?: Timeout
    url: string

    Accessors

    Methods

    \ No newline at end of file diff --git a/docs/classes/GobanTheme.html b/docs/classes/GobanTheme.html index 24cfff1e..12d467fa 100644 --- a/docs/classes/GobanTheme.html +++ b/docs/classes/GobanTheme.html @@ -1,4 +1,4 @@ -GobanTheme | goban

    Class GobanTheme

    Constructors

    constructor +GobanTheme | goban

    Class GobanTheme

    Constructors

    Properties

    Constructors

    Properties

    name: string
    parent?: GobanTheme
    styles: {
        [style_name: string]: string;
    } = {}

    Type declaration

    • [style_name: string]: string

    Accessors

    Methods

    • Parameters

      • ctx: CanvasRenderingContext2D
      • _shadow_ctx: null | CanvasRenderingContext2D
      • _stone: any
      • cx: number
      • cy: number
      • radius: number

      Returns void

    • Parameters

      • cell: SVGGraphicsElement
      • shadow_cell: undefined | SVGGraphicsElement
      • stone: string
      • cx: number
      • cy: number
      • radius: number

      Returns [SVGElement, undefined | SVGElement]

    • Parameters

      • cell: SVGGraphicsElement
      • shadow_cell: undefined | SVGGraphicsElement
      • stone: string
      • cx: number
      • cy: number
      • radius: number
      • shadow_circle_color: string

      Returns [SVGElement, undefined | SVGElement]

    • Parameters

      • shadow_cell: undefined | SVGGraphicsElement
      • cx: number
      • cy: number
      • radius: number
      • color: string

      Returns undefined | SVGElement

    • Parameters

      • ctx: CanvasRenderingContext2D
      • _shadow_ctx: null | CanvasRenderingContext2D
      • _stone: any
      • cx: number
      • cy: number
      • radius: number

      Returns void

    • Parameters

      • cell: SVGGraphicsElement
      • shadow_cell: undefined | SVGGraphicsElement
      • stone: string
      • cx: number
      • cy: number
      • radius: number

      Returns [SVGElement, undefined | SVGElement]

    • Parameters

      • _radius: number
      • _seed: number
      • _deferredRenderCallback: (() => void)
          • (): void
          • Returns void

      Returns any

    • Parameters

      • defs: SVGDefsElement
      • radius: number
      • _seed: number
      • _deferredRenderCallback: (() => void)
          • (): void
          • Returns void

      Returns string[]

    • Parameters

      • _radius: number
      • _seed: number
      • _deferredRenderCallback: (() => void)
          • (): void
          • Returns void

      Returns any

    • Parameters

      • defs: SVGDefsElement
      • radius: number
      • _seed: number
      • _deferredRenderCallback: (() => void)
          • (): void
          • Returns void

      Returns string[]

    \ No newline at end of file +

    Constructors

    Properties

    name: string
    parent?: GobanTheme
    styles: {
        [style_name: string]: string;
    } = {}

    Type declaration

    • [style_name: string]: string

    Accessors

    Methods

    • Parameters

      • ctx: CanvasRenderingContext2D
      • _shadow_ctx: null | CanvasRenderingContext2D
      • _stone: any
      • cx: number
      • cy: number
      • radius: number

      Returns void

    • Parameters

      • cell: SVGGraphicsElement
      • shadow_cell: undefined | SVGGraphicsElement
      • stone: string
      • cx: number
      • cy: number
      • radius: number

      Returns [SVGElement, undefined | SVGElement]

    • Parameters

      • cell: SVGGraphicsElement
      • shadow_cell: undefined | SVGGraphicsElement
      • stone: string
      • cx: number
      • cy: number
      • radius: number
      • shadow_circle_color: string

      Returns [SVGElement, undefined | SVGElement]

    • Parameters

      • shadow_cell: undefined | SVGGraphicsElement
      • cx: number
      • cy: number
      • radius: number
      • color: string

      Returns undefined | SVGElement

    • Parameters

      • ctx: CanvasRenderingContext2D
      • _shadow_ctx: null | CanvasRenderingContext2D
      • _stone: any
      • cx: number
      • cy: number
      • radius: number

      Returns void

    • Parameters

      • cell: SVGGraphicsElement
      • shadow_cell: undefined | SVGGraphicsElement
      • stone: string
      • cx: number
      • cy: number
      • radius: number

      Returns [SVGElement, undefined | SVGElement]

    • Parameters

      • _radius: number
      • _seed: number
      • _deferredRenderCallback: (() => void)
          • (): void
          • Returns void

      Returns any

    • Parameters

      • defs: SVGDefsElement
      • radius: number
      • _seed: number
      • _deferredRenderCallback: (() => void)
          • (): void
          • Returns void

      Returns string[]

    • Parameters

      • _radius: number
      • _seed: number
      • _deferredRenderCallback: (() => void)
          • (): void
          • Returns void

      Returns any

    • Parameters

      • defs: SVGDefsElement
      • radius: number
      • _seed: number
      • _deferredRenderCallback: (() => void)
          • (): void
          • Returns void

      Returns string[]

    \ No newline at end of file diff --git a/docs/classes/MoveTree.html b/docs/classes/MoveTree.html index 714a40b4..2ac6ef93 100644 --- a/docs/classes/MoveTree.html +++ b/docs/classes/MoveTree.html @@ -1,4 +1,4 @@ -MoveTree | goban

    Class MoveTree

    Constructors

    constructor +MoveTree | goban

    Class MoveTree

    Constructors

    Properties

    active_path_number: number = 0
    branches: MoveTree[]
    chat_log?: MoveTreeChatLine[]
    correct_answer: boolean = false
    edited: boolean
    engine: GobanEngine
    hint_next?: MoveTree
    id: number
    isobranch_hash?: string
    isobranches: any
    label: string = "[unset]"
    label_metrics?: any
    layout_cx: number = 0
    layout_cy: number = 0
    layout_x: number = 0
    layout_y: number = 0
    line_color: number
    marks?: MarkInterface[][]
    move_number: number
    parent: null | MoveTree
    pen_marks: MoveTreePenMarks = []
    played_by: undefined | number
    player_update: undefined | JGOFPlayerSummary
    pretty_coordinates: string
    stashed_marks: MarkInterface[][][] = []
    text: string
    trunk: boolean
    trunk_next?: MoveTree
    wrong_answer: boolean = false
    x: number
    y: number
    active_path_number: number = 0

    ** Layout & Rendering ***

    -
    current_line_color: number = 0
    isobranch_colors: {
        strong: string;
        weak: string;
    } = ...

    Type declaration

    • strong: string
    • weak: string
    line_colors: string[] = ...
    stone_padding: 3 = 3
    stone_radius: 11 = 11
    stone_square_size: number = ...

    Accessors

    • get stoneColor(): "black" | "white" | "empty"
    • Returns "black" | "white" | "empty"

    Methods

    • Calls a callback for each positions that has a mark on it

      -

      Parameters

      • fn: ((i, j) => void)
          • (i, j): void
          • Parameters

            • i: number
            • j: number

            Returns void

      Returns void

    • Returns true if there are any marks that have been set

      -

      Returns boolean

    • Parameters

      • x: number
      • min_y: number
      • layout_hash: {
            [coords: string]: MoveTree;
        }
      • line_color: number

      Returns number

    • Loads the state of this MoveTree node from a MoveTreeJson object

      -

      Parameters

      Returns void

    • Recomputes the isobranches for the entire tree. This needs to be called on the root node.

      -

      Returns void

    • Saves the current marks in our stash, restore them with popMarks

      -

      Returns void

    \ No newline at end of file +

    Constructors

    Properties

    active_path_number: number = 0
    branches: MoveTree[]
    chat_log?: MoveTreeChatLine[]
    correct_answer: boolean = false
    edited: boolean
    engine: GobanEngine
    hint_next?: MoveTree
    id: number
    isobranch_hash?: string
    isobranches: any
    label: string = "[unset]"
    label_metrics?: any
    layout_cx: number = 0
    layout_cy: number = 0
    layout_x: number = 0
    layout_y: number = 0
    line_color: number
    marks?: MarkInterface[][]
    move_number: number
    parent: null | MoveTree
    pen_marks: MoveTreePenMarks = []
    played_by: undefined | number
    player_update: undefined | JGOFPlayerSummary
    pretty_coordinates: string
    stashed_marks: MarkInterface[][][] = []
    text: string
    trunk: boolean
    trunk_next?: MoveTree
    wrong_answer: boolean = false
    x: number
    y: number
    active_path_number: number = 0

    ** Layout & Rendering ***

    +
    current_line_color: number = 0
    isobranch_colors: {
        strong: string;
        weak: string;
    } = ...

    Type declaration

    • strong: string
    • weak: string
    line_colors: string[] = ...
    stone_padding: 3 = 3
    stone_radius: 11 = 11
    stone_square_size: number = ...

    Accessors

    • get stoneColor(): "black" | "white" | "empty"
    • Returns "black" | "white" | "empty"

    Methods

    • Calls a callback for each positions that has a mark on it

      +

      Parameters

      • fn: ((i, j) => void)
          • (i, j): void
          • Parameters

            • i: number
            • j: number

            Returns void

      Returns void

    • Returns true if there are any marks that have been set

      +

      Returns boolean

    • Parameters

      • x: number
      • min_y: number
      • layout_hash: {
            [coords: string]: MoveTree;
        }
      • line_color: number

      Returns number

    • Loads the state of this MoveTree node from a MoveTreeJson object

      +

      Parameters

      Returns void

    • Recomputes the isobranches for the entire tree. This needs to be called on the root node.

      +

      Returns void

    • Saves the current marks in our stash, restore them with popMarks

      +

      Returns void

    \ No newline at end of file diff --git a/docs/classes/SVGRenderer.html b/docs/classes/SVGRenderer.html index eb018d9c..1285e3c8 100644 --- a/docs/classes/SVGRenderer.html +++ b/docs/classes/SVGRenderer.html @@ -2,7 +2,7 @@ classes, types, and enums.

    You can't create an instance of a Goban directly, you have to create an instance of one of the renderers, such as GobanSVG.

    -

    Hierarchy (view full)

    Implements

    Constructors

    Hierarchy (view full)

    Implements

    Constructors

    Properties

    __board_redraw_pen_layer_timer: any = null
    __clock_timer?: Timeout
    __draw_state: string[][]
    __last_pt: {
        i: number;
        j: number;
        valid: boolean;
    } = ...

    Type declaration

    • i: number
    • j: number
    • valid: boolean
    __set_board_height: number = -1
    __set_board_width: number = -1
    __update_move_tree: any = null
    analysis_move_counter: number
    analysis_removal_last_position: {
        i: number;
        j: number;
    } = ...

    Type declaration

    • i: number
    • j: number
    analysis_removal_state?: boolean
    autoplaying_puzzle_move: boolean = false
    bounded_height: number
    bounded_width: number
    bounds: GobanBounds
    byoyomi_label: string = ""
    cells: GCell[][] = []
    chat_log: GobanChatLog = []
    circle_radius: number
    clock_should_be_paused_for_move_submission: boolean = false
    colored_circles?: (undefined | ColoredCircle)[][]
    conditional_path: string = ""
    conditional_starting_color: "black" | "white" | "invalid" = "invalid"
    conditional_tree: ConditionalMoveTree = ...
    config: GobanConfig
    connectToReviewSent?: boolean
    coordinate_labels_layer?: SVGGraphicsElement
    current_cmove?: ConditionalMoveTree
    current_pen_mark?: {
        color: string;
        points: [number, number];
    }

    Type declaration

    • color: string
    • points: [number, number]
    currently_my_cmove: boolean = false
    dirty_redraw: any = null
    disconnectedFromGame: boolean = true
    display_width?: number
    done_loading_review: boolean = false
    dont_draw_last_move: boolean
    double_click_submit: boolean
    draw_bottom_labels: boolean
    draw_left_labels: boolean
    draw_right_labels: boolean
    draw_top_labels: boolean
    drawing_enabled: boolean = true
    edit_color?: "black" | "white"
    engine: GobanEngine
    errorHandler: ((e) => void)

    Type declaration

      • (e): void
      • Parameters

        • e: Error

        Returns void

    event_layer?: HTMLDivElement
    game_id: number
    game_type: string
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    goban_id: number = ++last_goban_id

    Base fields *

    -
    grid: SVGGraphicsElement[][] = []
    grid_layer?: SVGGraphicsElement
    handleShiftKey: ((ev) => void)

    Type declaration

      • (ev): void
      • Parameters

        • ev: KeyboardEvent

        Returns void

    heatmap?: NumberMatrix
    height: number
    highlight_movetree_moves: boolean
    interactive: boolean
    isInPushedAnalysis: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    label_character: string
    label_mark: string = "[UNSET]"
    labeling_mode?: "put" | "clear"
    last_clock?: AdHocClock
    last_emitted_clock?: JGOFClockWithTransmitting
    last_hover_square?: JGOFIntersection
    last_label_position: {
        i: number;
        j: number;
    } = ...

    Type declaration

    • i: number
    • j: number
    last_move?: MoveTree
    last_move_opacity: number = 1
    last_move_radius: number
    last_paused_by_player_state: null | boolean = null
    last_paused_state: null | boolean = null
    last_pen_position?: [number, number]
    last_phase?: GobanEnginePhase
    last_review_message: ReviewMessage
    last_sound_played_for_a_stone_placement?: string
    last_stone_sound: number
    leavePushedAnalysis: (() => void)

    Type declaration

      • (): void
      • Returns void

    lines_layer?: SVGGraphicsElement
    marked_analysis_score?: boolean[][]
    message_div?: HTMLDivElement
    message_td?: HTMLElement
    message_text?: HTMLDivElement
    message_timeout?: number
    metrics: GobanMetrics = ...
    move_selected?: JGOFIntersection
    move_tree_container?: HTMLElement
    move_tree_inner_container?: HTMLDivElement
    move_tree_svg?: SVGElement
    move_tree_svg_defs?: SVGDefsElement
    no_display: boolean
    onError?: ((error) => void)

    Type declaration

      • (error): void
      • Parameters

        • error: Error

        Returns void

    on_game_screen: boolean
    one_click_submit: boolean
    original_square_size: number | ((goban) => number) | "auto"

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    parent: HTMLElement
    pause_control?: AdHocPauseControl
    paused_since?: number
    pen_layer?: SVGGraphicsElement
    pen_marks: any[]
    player_id: number
    preloaded_data?: GobanConfig
    previous_mode: string
    puzzle_autoplace_delay: number
    ready_to_draw: boolean = false
    restrict_moves_to_movetree: boolean
    review_had_gamedata: boolean
    review_id: number
    scoring_mode: boolean | "stalling-scoring-mode"
    sendLatencyTimer?: Timeout
    sent_timed_out_message: boolean = false
    shadow_grid: (undefined | SVGElement)[][] = []
    shadow_layer?: SVGGraphicsElement
    shift_key_is_down: boolean
    show_variation_move_numbers: boolean
    showing_scores: boolean = false
    socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
    square_size: number = 10
    stalling_score_estimate?: StallingScoreEstimate
    stone_placement_enabled: boolean
    stone_removal_auto_scoring_done?: boolean = false
    svg: SVGElement
    svg_defs: SVGDefsElement
    theme_black: GobanTheme
    theme_black_stones: any[] = []
    theme_black_text_color: string = HOT_PINK
    theme_blank_text_color: string = HOT_PINK
    theme_board: GobanTheme
    theme_faded_line_color: string = HOT_PINK
    theme_faded_star_color: string = HOT_PINK
    theme_line_color: string = ""
    theme_star_color: string = ""
    theme_stone_radius: number = 10
    theme_white: GobanTheme
    theme_white_stones: any[] = []
    theme_white_text_color: string = HOT_PINK
    themes: GobanSelectedThemes = ...
    title_div?: HTMLElement
    variation_stone_opacity: number
    width: number
    THEMES: ThemesInterface = THEMES
    THEMES_SORTED: {
        black: GobanTheme[];
        board: GobanTheme[];
        white: GobanTheme[];
        [key: string]: GobanTheme[];
    } = THEMES_SORTED

    Type declaration

    setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

    Type declaration

      • (newCallbacks): void
      • Set's callback functions to be called in various situations. You can set any +

    Constructors

    Properties

    __board_redraw_pen_layer_timer: any = null
    __clock_timer?: Timeout
    __draw_state: string[][]
    __last_pt: {
        i: number;
        j: number;
        valid: boolean;
    } = ...

    Type declaration

    • i: number
    • j: number
    • valid: boolean
    __set_board_height: number = -1
    __set_board_width: number = -1
    __update_move_tree: any = null
    analysis_move_counter: number
    analysis_removal_last_position: {
        i: number;
        j: number;
    } = ...

    Type declaration

    • i: number
    • j: number
    analysis_removal_state?: boolean
    autoplaying_puzzle_move: boolean = false
    bounded_height: number
    bounded_width: number
    bounds: GobanBounds
    byoyomi_label: string = ""
    cells: GCell[][] = []
    chat_log: GobanChatLog = []
    circle_radius: number
    clock_should_be_paused_for_move_submission: boolean = false
    colored_circles?: (undefined | ColoredCircle)[][]
    conditional_path: string = ""
    conditional_starting_color: "black" | "white" | "invalid" = "invalid"
    conditional_tree: ConditionalMoveTree = ...
    config: GobanConfig
    connectToReviewSent?: boolean
    coordinate_labels_layer?: SVGGraphicsElement
    current_cmove?: ConditionalMoveTree
    current_pen_mark?: {
        color: string;
        points: [number, number];
    }

    Type declaration

    • color: string
    • points: [number, number]
    currently_my_cmove: boolean = false
    dirty_redraw: any = null
    disconnectedFromGame: boolean = true
    display_width?: number
    done_loading_review: boolean = false
    dont_draw_last_move: boolean
    double_click_submit: boolean
    draw_bottom_labels: boolean
    draw_left_labels: boolean
    draw_right_labels: boolean
    draw_top_labels: boolean
    drawing_enabled: boolean = true
    edit_color?: "black" | "white"
    engine: GobanEngine
    errorHandler: ((e) => void)

    Type declaration

      • (e): void
      • Parameters

        • e: Error

        Returns void

    event_layer?: HTMLDivElement
    game_id: number
    game_type: string
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    goban_id: number = ++last_goban_id

    Base fields *

    +
    grid: SVGGraphicsElement[][] = []
    grid_layer?: SVGGraphicsElement
    handleShiftKey: ((ev) => void)

    Type declaration

      • (ev): void
      • Parameters

        • ev: KeyboardEvent

        Returns void

    heatmap?: NumberMatrix
    height: number
    highlight_movetree_moves: boolean
    interactive: boolean
    isInPushedAnalysis: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    label_character: string
    label_mark: string = "[UNSET]"
    labeling_mode?: "put" | "clear"
    last_clock?: AdHocClock
    last_emitted_clock?: JGOFClockWithTransmitting
    last_hover_square?: JGOFIntersection
    last_label_position: {
        i: number;
        j: number;
    } = ...

    Type declaration

    • i: number
    • j: number
    last_move?: MoveTree
    last_move_opacity: number = 1
    last_move_radius: number
    last_paused_by_player_state: null | boolean = null
    last_paused_state: null | boolean = null
    last_pen_position?: [number, number]
    last_phase?: GobanEnginePhase
    last_review_message: ReviewMessage
    last_sound_played_for_a_stone_placement?: string
    last_stone_sound: number
    leavePushedAnalysis: (() => void)

    Type declaration

      • (): void
      • Returns void

    lines_layer?: SVGGraphicsElement
    marked_analysis_score?: boolean[][]
    message_div?: HTMLDivElement
    message_td?: HTMLElement
    message_text?: HTMLDivElement
    message_timeout?: number
    metrics: GobanMetrics = ...
    move_selected?: JGOFIntersection
    move_tree_container?: HTMLElement
    move_tree_inner_container?: HTMLDivElement
    move_tree_svg?: SVGElement
    move_tree_svg_defs?: SVGDefsElement
    no_display: boolean
    onError?: ((error) => void)

    Type declaration

      • (error): void
      • Parameters

        • error: Error

        Returns void

    on_game_screen: boolean
    one_click_submit: boolean
    original_square_size: number | ((goban) => number) | "auto"

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    parent: HTMLElement
    pause_control?: AdHocPauseControl
    paused_since?: number
    pen_layer?: SVGGraphicsElement
    pen_marks: any[]
    player_id: number
    preloaded_data?: GobanConfig
    previous_mode: string
    puzzle_autoplace_delay: number
    ready_to_draw: boolean = false
    restrict_moves_to_movetree: boolean
    review_had_gamedata: boolean
    review_id: number
    scoring_mode: boolean | "stalling-scoring-mode"
    sendLatencyTimer?: Timeout
    sent_timed_out_message: boolean = false
    shadow_grid: (undefined | SVGElement)[][] = []
    shadow_layer?: SVGGraphicsElement
    shift_key_is_down: boolean
    show_variation_move_numbers: boolean
    showing_scores: boolean = false
    socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
    square_size: number = 10
    stalling_score_estimate?: StallingScoreEstimate
    stone_font_scale: number
    stone_placement_enabled: boolean
    stone_removal_auto_scoring_done?: boolean = false
    svg: SVGElement
    svg_defs: SVGDefsElement
    theme_black: GobanTheme
    theme_black_stones: any[] = []
    theme_black_text_color: string = HOT_PINK
    theme_blank_text_color: string = HOT_PINK
    theme_board: GobanTheme
    theme_faded_line_color: string = HOT_PINK
    theme_faded_star_color: string = HOT_PINK
    theme_line_color: string = ""
    theme_star_color: string = ""
    theme_stone_radius: number = 10
    theme_white: GobanTheme
    theme_white_stones: any[] = []
    theme_white_text_color: string = HOT_PINK
    themes: GobanSelectedThemes = ...
    title_div?: HTMLElement
    variation_stone_opacity: number
    width: number
    THEMES: ThemesInterface = THEMES
    THEMES_SORTED: {
        black: GobanTheme[];
        board: GobanTheme[];
        white: GobanTheme[];
        [key: string]: GobanTheme[];
    } = THEMES_SORTED

    Type declaration

    setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

    Type declaration

      • (newCallbacks): void
      • Set's callback functions to be called in various situations. You can set any or all of the callbacks, only the provided callbacks will be updated.

        -

        Parameters

        Returns void

    setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

    Type declaration

      • (_catalog, _debug_mode?): void
      • Parameters

        Returns void

    Accessors

    Methods

    setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

    Type declaration

      • (_catalog, _debug_mode?): void
      • Parameters

        Returns void

    Accessors

    Methods

    \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/docs/classes/ScoreEstimator.html b/docs/classes/ScoreEstimator.html index eb8ecf96..24861a2d 100644 --- a/docs/classes/ScoreEstimator.html +++ b/docs/classes/ScoreEstimator.html @@ -1,4 +1,4 @@ -ScoreEstimator | goban

    Class ScoreEstimator

    Hierarchy (view full)

    Constructors

    constructor +ScoreEstimator | goban

    Class ScoreEstimator

    Hierarchy (view full)

    Constructors

    Properties

    amount: number = NaN
    autoscore: boolean = false
    autoscored_needs_sealing?: JGOFSealingIntersection[]
    autoscored_removed?: JGOFMove[]
    autoscored_state?: JGOFNumericPlayerColor[][]
    black: PlayerScore = ...
    black_prisoners: number
    board_is_repeating: boolean
    color_to_move: "black" | "white"
    engine: GobanEngine
    estimated_hard_score: number
    goban_callback?: GobanBase
    height: number = 19
    ownership: number[][]
    prefer_remote: boolean
    removal: boolean[][]
    territory: number[][]
    tolerance: number
    trials: number
    when_ready: Promise<void>
    white: PlayerScore = ...
    white_prisoners: number
    width: number = 19
    winner: string = ""

    Methods

    • Computes scoring locations for the board. If area_scoring is true, we +

    Constructors

    Properties

    amount: number = NaN
    autoscore: boolean = false
    autoscored_needs_sealing?: JGOFSealingIntersection[]
    autoscored_removed?: JGOFMove[]
    autoscored_state?: JGOFNumericPlayerColor[][]
    black: PlayerScore = ...
    black_prisoners: number
    board_is_repeating: boolean
    color_to_move: "black" | "white"
    engine: GobanEngine
    estimated_hard_score: number
    goban_callback?: GobanBase
    height: number = 19
    ownership: number[][]
    prefer_remote: boolean
    removal: boolean[][]
    territory: number[][]
    tolerance: number
    trials: number
    when_ready: Promise<void>
    white: PlayerScore = ...
    white_prisoners: number
    width: number = 19
    winner: string = ""

    Methods

    • Parameters

      • trials: number
      • tolerance: number
      • autoscore: boolean

      Returns Promise<void>

    • Parameters

      • trials: number
      • tolerance: number

      Returns Promise<void>

    • Parameters

      • trials: number
      • tolerance: number
      • autoscore: boolean

      Returns Promise<void>

    • Parameters

      • trials: number
      • tolerance: number

      Returns Promise<void>

    • Parameters

      • i: number
      • j: number
      • mod_key: boolean
      • press_duration_ms: number

      Returns void

    • Parameters

      • i: number
      • j: number
      • mod_key: boolean
      • press_duration_ms: number

      Returns void

    • Sets a position as being removed or not removed. If emit_stone_removal_updated is set to false, the "stone-removal.updated" event will not be emitted, and it is up to the caller to emit this event appropriately.

      -

      Parameters

      • x: number
      • y: number
      • removed: boolean

      Returns void

    • Toggles a group of stones for removal or restoration.

      By default, if we are marking a group for removal but the group is almost certainly alive (two eyes, etc), this will result in a no-op, unless force_removal is set to true.

      -

      Parameters

      • x: number
      • y: number
      • force_removal: boolean = false

      Returns {
          group: RawStoneString;
          removed: boolean;
      }

    • Parameters

      • estimated_score: number
      • ownership: number[][]
      • Optional score: number

      Returns void

    \ No newline at end of file +

    Parameters

    Returns {
        group: RawStoneString;
        removed: boolean;
    }

    \ No newline at end of file diff --git a/docs/classes/StoneString.html b/docs/classes/StoneString.html index c6207165..e80a450e 100644 --- a/docs/classes/StoneString.html +++ b/docs/classes/StoneString.html @@ -1,6 +1,6 @@ StoneString | goban

    Class StoneString

    A StoneString instance represents a group of intersections that are connected to each other and are all the same color.

    -

    Constructors

    Constructors

    Properties

    Constructors

    Properties

    __added_neighbors: {
        [group_id: number]: boolean;
    }

    Type declaration

    • [group_id: number]: boolean
    id: number
    intersections: JGOFIntersection[]
    is_territory: boolean = false
    neighboring_space: StoneString[]
    neighboring_stone_strings: StoneString[]
    neighbors: StoneString[]
    territory_color: JGOFNumericPlayerColor = 0

    Methods

    • Adds a stone string to our neighbor list. This should probably only be called by StoneStringBuilder.

      -

      Parameters

      Returns void

    • Add a stone to the group. This should probably only be called by StoneStringBuilder.

      -

      Parameters

      • x: number
      • y: number

      Returns void

    • Compute if this string is considered potential territory (if all of it's +

    Constructors

    Properties

    __added_neighbors: {
        [group_id: number]: boolean;
    }

    Type declaration

    • [group_id: number]: boolean
    id: number
    intersections: JGOFIntersection[]
    is_territory: boolean = false
    neighboring_space: StoneString[]
    neighboring_stone_strings: StoneString[]
    neighbors: StoneString[]
    territory_color: JGOFNumericPlayerColor = 0

    Methods

    • Adds a stone string to our neighbor list. This should probably only be called by StoneStringBuilder.

      +

      Parameters

      Returns void

    • Add a stone to the group. This should probably only be called by StoneStringBuilder.

      +

      Parameters

      • x: number
      • y: number

      Returns void

    • Compute if this string is considered potential territory (if all of it's neighbors are the same color). NOTE: This does not perform any advanced logic to determine seki status or anything like that, this only looks to see if the string contains EMPTY locations and that all of the surrounding neighboring are the same color. This should probably only be called by StoneStringBuilder.

      -

      Returns void

    • Parameters

      • fn: ((stone_string) => void)
          • (stone_string): void
          • Parameters

            Returns void

      Returns void

    • Parameters

      • fn: ((stone_string) => void)
          • (stone_string): void
          • Parameters

            Returns void

      Returns void

    • Parameters

      • fn: ((stone_string) => void)
          • (stone_string): void
          • Parameters

            Returns void

      Returns void

    \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/docs/classes/StoneStringBuilder.html b/docs/classes/StoneStringBuilder.html index 6ce9d024..2ab7f7bf 100644 --- a/docs/classes/StoneStringBuilder.html +++ b/docs/classes/StoneStringBuilder.html @@ -1,7 +1,7 @@ -StoneStringBuilder | goban

    Class StoneStringBuilder

    Constructors

    constructor +StoneStringBuilder | goban

    Class StoneStringBuilder

    Constructors

    Properties

    state: BoardState
    stone_string_id_map: number[][]
    stone_strings: StoneString[]

    Methods

    \ No newline at end of file +

    Constructors

    Properties

    state: BoardState
    stone_string_id_map: number[][]
    stone_strings: StoneString[]

    Methods

    \ No newline at end of file diff --git a/docs/classes/TestGoban.html b/docs/classes/TestGoban.html index 018df366..1741d395 100644 --- a/docs/classes/TestGoban.html +++ b/docs/classes/TestGoban.html @@ -1,5 +1,5 @@ TestGoban | goban

    Class TestGoban

    This is a minimal implementation of Goban, primarily used for unit tests.

    -

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Properties

    __board_redraw_pen_layer_timer: any = null
    __clock_timer?: Timeout
    __draw_state: string[][]
    __last_pt: {
        i: number;
        j: number;
        valid: boolean;
    } = ...

    Type declaration

    • i: number
    • j: number
    • valid: boolean
    __update_move_tree: any = null
    analysis_move_counter: number
    analysis_removal_last_position: {
        i: number;
        j: number;
    } = ...

    Type declaration

    • i: number
    • j: number
    analysis_removal_state?: boolean
    bounded_height: number
    bounded_width: number
    bounds: GobanBounds
    chat_log: GobanChatLog = []
    circle_radius: number
    clock_should_be_paused_for_move_submission: boolean = false
    colored_circles?: (undefined | ColoredCircle)[][]
    conditional_path: string = ""
    conditional_starting_color: "black" | "white" | "invalid" = "invalid"
    conditional_tree: ConditionalMoveTree = ...
    config: GobanConfig
    connectToReviewSent?: boolean
    current_cmove?: ConditionalMoveTree
    currently_my_cmove: boolean = false
    dirty_redraw: any = null
    disconnectedFromGame: boolean = true
    display_width?: number
    done_loading_review: boolean = false
    dont_draw_last_move: boolean
    double_click_submit: boolean
    draw_bottom_labels: boolean
    draw_left_labels: boolean
    draw_right_labels: boolean
    draw_top_labels: boolean
    edit_color?: "black" | "white"
    engine: GobanEngine
    errorHandler: ((e) => void)

    Type declaration

      • (e): void
      • Parameters

        • e: Error

        Returns void

    game_id: number
    game_type: string
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    goban_id: number = ++last_goban_id

    Base fields *

    -
    heatmap?: NumberMatrix
    height: number
    highlight_movetree_moves: boolean
    interactive: boolean
    isInPushedAnalysis: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    label_character: string
    label_mark: string = "[UNSET]"
    last_clock?: AdHocClock
    last_emitted_clock?: JGOFClockWithTransmitting
    last_hover_square?: JGOFIntersection
    last_move?: MoveTree
    last_move_radius: number
    last_paused_by_player_state: null | boolean = null
    last_paused_state: null | boolean = null
    last_phase?: GobanEnginePhase
    last_review_message: ReviewMessage
    last_sound_played_for_a_stone_placement?: string
    last_stone_sound: number
    leavePushedAnalysis: (() => void)

    Type declaration

      • (): void
      • Returns void

    marked_analysis_score?: boolean[][]
    move_selected?: JGOFIntersection
    no_display: boolean
    onError?: ((error) => void)

    Type declaration

      • (error): void
      • Parameters

        • error: Error

        Returns void

    on_game_screen: boolean
    one_click_submit: boolean
    original_square_size: number | ((goban) => number) | "auto"

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    parent: HTMLElement
    pause_control?: AdHocPauseControl
    paused_since?: number
    pen_marks: any[]
    player_id: number
    preloaded_data?: GobanConfig
    previous_mode: string
    puzzle_autoplace_delay: number
    restrict_moves_to_movetree: boolean
    review_had_gamedata: boolean
    review_id: number
    scoring_mode: boolean | "stalling-scoring-mode"
    sendLatencyTimer?: Timeout
    sent_timed_out_message: boolean = false
    shift_key_is_down: boolean
    show_variation_move_numbers: boolean
    showing_scores: boolean = false
    socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
    square_size: number = 10
    stalling_score_estimate?: StallingScoreEstimate
    stone_placement_enabled: boolean
    stone_removal_auto_scoring_done?: boolean = false
    variation_stone_opacity: number
    width: number
    THEMES: ThemesInterface = THEMES
    THEMES_SORTED: {
        black: GobanTheme[];
        board: GobanTheme[];
        white: GobanTheme[];
        [key: string]: GobanTheme[];
    } = THEMES_SORTED

    Type declaration

    setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

    Type declaration

      • (newCallbacks): void
      • Set's callback functions to be called in various situations. You can set any +

    Constructors

    Properties

    __board_redraw_pen_layer_timer: any = null
    __clock_timer?: Timeout
    __draw_state: string[][]
    __last_pt: {
        i: number;
        j: number;
        valid: boolean;
    } = ...

    Type declaration

    • i: number
    • j: number
    • valid: boolean
    __update_move_tree: any = null
    analysis_move_counter: number
    analysis_removal_last_position: {
        i: number;
        j: number;
    } = ...

    Type declaration

    • i: number
    • j: number
    analysis_removal_state?: boolean
    bounded_height: number
    bounded_width: number
    bounds: GobanBounds
    chat_log: GobanChatLog = []
    circle_radius: number
    clock_should_be_paused_for_move_submission: boolean = false
    colored_circles?: (undefined | ColoredCircle)[][]
    conditional_path: string = ""
    conditional_starting_color: "black" | "white" | "invalid" = "invalid"
    conditional_tree: ConditionalMoveTree = ...
    config: GobanConfig
    connectToReviewSent?: boolean
    current_cmove?: ConditionalMoveTree
    currently_my_cmove: boolean = false
    dirty_redraw: any = null
    disconnectedFromGame: boolean = true
    display_width?: number
    done_loading_review: boolean = false
    dont_draw_last_move: boolean
    double_click_submit: boolean
    draw_bottom_labels: boolean
    draw_left_labels: boolean
    draw_right_labels: boolean
    draw_top_labels: boolean
    edit_color?: "black" | "white"
    engine: GobanEngine
    errorHandler: ((e) => void)

    Type declaration

      • (e): void
      • Parameters

        • e: Error

        Returns void

    game_id: number
    game_type: string
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    goban_id: number = ++last_goban_id

    Base fields *

    +
    heatmap?: NumberMatrix
    height: number
    highlight_movetree_moves: boolean
    interactive: boolean
    isInPushedAnalysis: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    label_character: string
    label_mark: string = "[UNSET]"
    last_clock?: AdHocClock
    last_emitted_clock?: JGOFClockWithTransmitting
    last_hover_square?: JGOFIntersection
    last_move?: MoveTree
    last_move_radius: number
    last_paused_by_player_state: null | boolean = null
    last_paused_state: null | boolean = null
    last_phase?: GobanEnginePhase
    last_review_message: ReviewMessage
    last_sound_played_for_a_stone_placement?: string
    last_stone_sound: number
    leavePushedAnalysis: (() => void)

    Type declaration

      • (): void
      • Returns void

    marked_analysis_score?: boolean[][]
    move_selected?: JGOFIntersection
    no_display: boolean
    onError?: ((error) => void)

    Type declaration

      • (error): void
      • Parameters

        • error: Error

        Returns void

    on_game_screen: boolean
    one_click_submit: boolean
    original_square_size: number | ((goban) => number) | "auto"

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    parent: HTMLElement
    pause_control?: AdHocPauseControl
    paused_since?: number
    pen_marks: any[]
    player_id: number
    preloaded_data?: GobanConfig
    previous_mode: string
    puzzle_autoplace_delay: number
    restrict_moves_to_movetree: boolean
    review_had_gamedata: boolean
    review_id: number
    scoring_mode: boolean | "stalling-scoring-mode"
    sendLatencyTimer?: Timeout
    sent_timed_out_message: boolean = false
    shift_key_is_down: boolean
    show_variation_move_numbers: boolean
    showing_scores: boolean = false
    socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
    square_size: number = 10
    stalling_score_estimate?: StallingScoreEstimate
    stone_font_scale: number
    stone_placement_enabled: boolean
    stone_removal_auto_scoring_done?: boolean = false
    variation_stone_opacity: number
    width: number
    THEMES: ThemesInterface = THEMES
    THEMES_SORTED: {
        black: GobanTheme[];
        board: GobanTheme[];
        white: GobanTheme[];
        [key: string]: GobanTheme[];
    } = THEMES_SORTED

    Type declaration

    setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

    Type declaration

      • (newCallbacks): void
      • Set's callback functions to be called in various situations. You can set any or all of the callbacks, only the provided callbacks will be updated.

        -

        Parameters

        Returns void

    setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

    Type declaration

      • (_catalog, _debug_mode?): void
      • Parameters

        Returns void

    Accessors

    • get analyze_subtool(): string
    • Returns string

    • set analyze_subtool(analyze_subtool): void
    • Parameters

      • analyze_subtool: string

      Returns void

    • get destroyed(): boolean
    • Returns boolean

    • get is_game_record(): boolean
    • True if the game is a game record of a real life game

      -

      Returns boolean

    • get review_controller_id(): undefined | number
    • Returns undefined | number

    • set review_controller_id(review_controller_id): void
    • Parameters

      • review_controller_id: undefined | number

      Returns void

    • get review_owner_id(): undefined | number
    • Returns undefined | number

    • set review_owner_id(review_owner_id): void
    • Parameters

      • review_owner_id: undefined | number

      Returns void

    • get submit_move(): undefined | (() => void)
    • Returns undefined | (() => void)

    • set submit_move(submit_move): void
    • Parameters

      • submit_move: undefined | (() => void)

      Returns void

    Methods

    • Decodes any of the various ways we express moves that we've accumulated over the years into +

      Parameters

      Returns void

    setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

    Type declaration

      • (_catalog, _debug_mode?): void
      • Parameters

        Returns void

    Accessors

    • get analyze_subtool(): string
    • Returns string

    • set analyze_subtool(analyze_subtool): void
    • Parameters

      • analyze_subtool: string

      Returns void

    • get destroyed(): boolean
    • Returns boolean

    • get is_game_record(): boolean
    • True if the game is a game record of a real life game

      +

      Returns boolean

    • get review_controller_id(): undefined | number
    • Returns undefined | number

    • set review_controller_id(review_controller_id): void
    • Parameters

      • review_controller_id: undefined | number

      Returns void

    • get review_owner_id(): undefined | number
    • Returns undefined | number

    • set review_owner_id(review_owner_id): void
    • Parameters

      • review_owner_id: undefined | number

      Returns void

    • get submit_move(): undefined | (() => void)
    • Returns undefined | (() => void)

    • set submit_move(submit_move): void
    • Parameters

      • submit_move: undefined | (() => void)

      Returns void

    Methods

    • Decodes a move string like "A11" into a move object like {x: 0, y: 10}. Also handles the special cases like ".." and "pass" which map to {x: -1, y: -1}.

      -

      Parameters

      • coordinates: string

      Returns JGOFMove

    • Marks scores on the board when in analysis mode. Note: this will not clear existing scores, this is intentional as I think it's the expected behavior of reviewers

      -

      Returns void

    • Goban calls some abstract methods as part of the construction process. Because our subclasses might (and do) need to do some of their own config before these are called, we set this function to be called by our subclass after it's done it's own internal config stuff.

      -

      Returns GobanEngine

    • When we think our clock has runout, send a message to the server letting it know. Otherwise we have to wait for the server grace period to expire for it to time us out.

      -

      Returns void

    • Parameters

      • colored_marks: {
            [key: string]: {
                color: string;
                move: string;
            };
        }
        • [key: string]: {
              color: string;
              move: string;
          }
          • color: string
          • move: string

      Returns void

    • Called when a location is marked or unmarked for removal

      -

      Parameters

      • x: number
      • y: number
      • removed: boolean
      • emit_stone_removal_updated: boolean = true

      Returns void

    • Parameters

      • colored_marks: {
            [key: string]: {
                color: string;
                move: string;
            };
        }
        • [key: string]: {
              color: string;
              move: string;
          }
          • color: string
          • move: string

      Returns void

    • Called when a location is marked or unmarked for removal

      +

      Parameters

      • x: number
      • y: number
      • removed: boolean
      • emit_stone_removal_updated: boolean = true

      Returns void

    • This is a callback that gets called by GobanEngine.getState to save and board state as it pushes and pops state. Our renderers can override this to save state they need.

      -

      Parameters

      • marks: {
            [mark: string]: string;
        }
        • [mark: string]: string
      • Optional dont_draw: boolean

      Returns void

    • This is a callback that gets called by GobanEngine.setState to load +

      Parameters

      • marks: {
            [mark: string]: string;
        }
        • [mark: string]: string
      • Optional dont_draw: boolean

      Returns void

    • Parameters

      • msg_id: MessageID
      • Optional parameters: {
            [key: string]: any;
        }
        • [key: string]: any
      • Optional timeout: number

      Returns void

    • Parameters

      • x: number
      • y: number
      • mark: string | number
      • Optional force_label: boolean
      • Optional force_put: boolean

      Returns boolean

    • Parameters

      • x: number
      • y: number
      • anti_slip: boolean = true

      Returns {
          i: number;
          j: number;
          valid: boolean;
      }

      • i: number
      • j: number
      • valid: boolean
    \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/docs/classes/_internal_.GCell.html b/docs/classes/_internal_.GCell.html index d829630c..4256fc6a 100644 --- a/docs/classes/_internal_.GCell.html +++ b/docs/classes/_internal_.GCell.html @@ -1,4 +1,4 @@ -GCell | goban

    Constructors

    constructor +GCell | goban

    Constructors

    Properties

    Constructors

    Properties

    _g?: SVGGraphicsElement
    _transform: string = ""
    i: number
    j: number
    last_blue_move?: SVGCircleElement
    last_blue_move_border_width?: number
    last_blue_move_color?: string
    last_circle?: SVGCircleElement
    last_circle_fill?: string
    last_circle_radius?: number
    last_circle_stroke?: string
    last_circle_stroke_width?: number
    last_circle_symbol?: SVGCircleElement
    last_circle_symbol_color?: string
    last_circle_symbol_opacity?: number
    last_cross_symbol?: SVGPathElement
    last_cross_symbol_color?: string
    last_cross_symbol_opacity?: number
    last_faded_lines?: SVGPathElement
    last_faded_star_point?: SVGCircleElement
    last_heatmap_rect?: SVGRectElement
    last_heatmap_value?: number
    last_highlight_color?: string
    last_highlight_rect?: SVGRectElement
    last_last_move?: SVGElement
    last_last_move_color?: string
    last_last_move_opacity?: number
    last_last_move_symbol?: "?" | "+" | "o"
    last_letter?: SVGTextElement
    last_letter_color?: string
    last_letter_font_size?: number
    last_letter_letter?: string
    last_letter_opacity?: number
    last_letter_room_for_subscript?: boolean
    last_removal_cross?: SVGPathElement
    last_removal_cross_fill?: string
    last_removal_cross_opacity?: number
    last_removal_cross_radius?: number
    last_score?: SVGRectElement
    last_score_estimate?: SVGRectElement
    last_score_estimate_color?: string
    last_score_estimate_estimate?: number
    last_score_fill?: string
    last_score_opacity?: number
    last_score_stroke?: string
    last_square_symbol?: SVGRectElement
    last_square_symbol_color?: string
    last_square_symbol_opacity?: number
    last_stone?: SVGElement
    last_stone_alpha_value?: number
    last_stone_color?: JGOFNumericPlayerColor
    last_stone_radius?: number
    last_stone_shadow?: SVGElement
    last_stone_stone?: string
    last_stone_transparent?: boolean
    last_subscript?: SVGTextElement
    last_subscript_color?: string
    last_subscript_font_size?: number
    last_subscript_opacity?: number
    last_subscript_room_for_letter?: boolean
    last_subscript_room_for_sub_triangle?: boolean
    last_subscript_subscript?: string
    last_triangle_symbol?: SVGPathElement
    last_triangle_symbol_as_subscript?: boolean
    last_triangle_symbol_color?: string
    last_triangle_symbol_opacity?: number
    renderer: SVGRenderer

    Accessors

    Methods

    • Parameters

      • color: string
      • border_width: number

      Returns void

    • Parameters

      • draw_star_point: boolean
      • star_radius: number

      Returns void

    • Parameters

      • symbol: "?" | "+" | "o"
      • color: string
      • opacity: number

      Returns void

    • Parameters

      • letter: string
      • color: string
      • font_size: number
      • opacity: number
      • room_for_subscript: boolean

      Returns void

    • Parameters

      • fill: string
      • radius: number
      • opacity: number

      Returns void

    • Parameters

      • fill: string
      • stroke: string
      • opacity: number

      Returns void

    • Parameters

      • subscript: string
      • color: string
      • font_size: number
      • opacity: number
      • room_for_letter: boolean
      • room_for_sub_triangle: boolean

      Returns void

    • Parameters

      • color: string
      • opacity: number
      • as_subscript: boolean

      Returns void

    \ No newline at end of file +

    Constructors

    Properties

    _g?: SVGGraphicsElement
    _transform: string = ""
    i: number
    j: number
    last_blue_move?: SVGCircleElement
    last_blue_move_border_width?: number
    last_blue_move_color?: string
    last_circle?: SVGCircleElement
    last_circle_fill?: string
    last_circle_radius?: number
    last_circle_stroke?: string
    last_circle_stroke_width?: number
    last_circle_symbol?: SVGCircleElement
    last_circle_symbol_color?: string
    last_circle_symbol_opacity?: number
    last_cross_symbol?: SVGPathElement
    last_cross_symbol_color?: string
    last_cross_symbol_opacity?: number
    last_faded_lines?: SVGPathElement
    last_faded_star_point?: SVGCircleElement
    last_heatmap_rect?: SVGRectElement
    last_heatmap_value?: number
    last_highlight_color?: string
    last_highlight_rect?: SVGRectElement
    last_last_move?: SVGElement
    last_last_move_color?: string
    last_last_move_opacity?: number
    last_last_move_symbol?: "?" | "+" | "o"
    last_letter?: SVGTextElement
    last_letter_color?: string
    last_letter_font_size?: number
    last_letter_letter?: string
    last_letter_opacity?: number
    last_letter_room_for_subscript?: boolean
    last_removal_cross?: SVGPathElement
    last_removal_cross_fill?: string
    last_removal_cross_opacity?: number
    last_removal_cross_radius?: number
    last_score?: SVGRectElement
    last_score_estimate?: SVGRectElement
    last_score_estimate_color?: string
    last_score_estimate_estimate?: number
    last_score_fill?: string
    last_score_opacity?: number
    last_score_stroke?: string
    last_square_symbol?: SVGRectElement
    last_square_symbol_color?: string
    last_square_symbol_opacity?: number
    last_stone?: SVGElement
    last_stone_alpha_value?: number
    last_stone_color?: JGOFNumericPlayerColor
    last_stone_radius?: number
    last_stone_shadow?: SVGElement
    last_stone_stone?: string
    last_stone_transparent?: boolean
    last_subscript?: SVGTextElement
    last_subscript_color?: string
    last_subscript_font_size?: number
    last_subscript_opacity?: number
    last_subscript_room_for_letter?: boolean
    last_subscript_room_for_sub_triangle?: boolean
    last_subscript_subscript?: string
    last_triangle_symbol?: SVGPathElement
    last_triangle_symbol_as_subscript?: boolean
    last_triangle_symbol_color?: string
    last_triangle_symbol_opacity?: number
    renderer: SVGRenderer

    Accessors

    Methods

    • Parameters

      • color: string
      • border_width: number

      Returns void

    • Parameters

      • draw_star_point: boolean
      • star_radius: number

      Returns void

    • Parameters

      • symbol: "?" | "+" | "o"
      • color: string
      • opacity: number

      Returns void

    • Parameters

      • letter: string
      • color: string
      • font_size: number
      • opacity: number
      • room_for_subscript: boolean

      Returns void

    • Parameters

      • fill: string
      • radius: number
      • opacity: number

      Returns void

    • Parameters

      • fill: string
      • stroke: string
      • opacity: number

      Returns void

    • Parameters

      • subscript: string
      • color: string
      • font_size: number
      • opacity: number
      • room_for_letter: boolean
      • room_for_sub_triangle: boolean

      Returns void

    • Parameters

      • color: string
      • opacity: number
      • as_subscript: boolean

      Returns void

    \ No newline at end of file diff --git a/docs/classes/_internal_.OGSConnectivity.html b/docs/classes/_internal_.OGSConnectivity.html index b7b3c0d2..b352cd16 100644 --- a/docs/classes/_internal_.OGSConnectivity.html +++ b/docs/classes/_internal_.OGSConnectivity.html @@ -2,7 +2,7 @@ that manages connections to the online-go.com servers.

    We have it as a separate base class simply to help with code organization and to keep our Goban class size down.

    -

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Properties

    __board_redraw_pen_layer_timer: any = null
    __clock_timer?: Timeout
    __draw_state: string[][]
    __last_pt: {
        i: number;
        j: number;
        valid: boolean;
    } = ...

    Type declaration

    • i: number
    • j: number
    • valid: boolean
    __update_move_tree: any = null
    analysis_move_counter: number
    analysis_removal_last_position: {
        i: number;
        j: number;
    } = ...

    Type declaration

    • i: number
    • j: number
    analysis_removal_state?: boolean
    bounded_height: number
    bounded_width: number
    bounds: GobanBounds
    chat_log: GobanChatLog = []
    circle_radius: number
    clock_should_be_paused_for_move_submission: boolean = false
    colored_circles?: (undefined | ColoredCircle)[][]
    conditional_path: string = ""
    conditional_starting_color: "black" | "white" | "invalid" = "invalid"
    conditional_tree: ConditionalMoveTree = ...
    config: GobanConfig
    connectToReviewSent?: boolean
    current_cmove?: ConditionalMoveTree
    currently_my_cmove: boolean = false
    dirty_redraw: any = null
    disconnectedFromGame: boolean = true
    display_width?: number
    done_loading_review: boolean = false
    dont_draw_last_move: boolean
    double_click_submit: boolean
    draw_bottom_labels: boolean
    draw_left_labels: boolean
    draw_right_labels: boolean
    draw_top_labels: boolean
    edit_color?: "black" | "white"
    engine: GobanEngine
    errorHandler: ((e) => void)

    Type declaration

      • (e): void
      • Parameters

        • e: Error

        Returns void

    game_id: number
    game_type: string
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    goban_id: number = ++last_goban_id

    Base fields *

    -
    heatmap?: NumberMatrix
    height: number
    highlight_movetree_moves: boolean
    interactive: boolean
    isInPushedAnalysis: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    label_character: string
    label_mark: string = "[UNSET]"
    last_clock?: AdHocClock
    last_emitted_clock?: JGOFClockWithTransmitting
    last_hover_square?: JGOFIntersection
    last_move?: MoveTree
    last_move_radius: number
    last_paused_by_player_state: null | boolean = null
    last_paused_state: null | boolean = null
    last_phase?: GobanEnginePhase
    last_review_message: ReviewMessage
    last_sound_played_for_a_stone_placement?: string
    last_stone_sound: number
    leavePushedAnalysis: (() => void)

    Type declaration

      • (): void
      • Returns void

    marked_analysis_score?: boolean[][]
    move_selected?: JGOFIntersection
    no_display: boolean
    onError?: ((error) => void)

    Type declaration

      • (error): void
      • Parameters

        • error: Error

        Returns void

    on_game_screen: boolean
    one_click_submit: boolean
    original_square_size: number | ((goban) => number) | "auto"

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    pause_control?: AdHocPauseControl
    paused_since?: number
    pen_marks: any[]
    player_id: number
    preloaded_data?: GobanConfig
    previous_mode: string
    puzzle_autoplace_delay: number
    restrict_moves_to_movetree: boolean
    review_had_gamedata: boolean
    review_id: number
    scoring_mode: boolean | "stalling-scoring-mode"
    sendLatencyTimer?: Timeout
    sent_timed_out_message: boolean = false
    shift_key_is_down: boolean
    show_variation_move_numbers: boolean
    showing_scores: boolean = false
    socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
    square_size: number = 10
    stalling_score_estimate?: StallingScoreEstimate
    stone_placement_enabled: boolean
    stone_removal_auto_scoring_done?: boolean = false
    variation_stone_opacity: number
    width: number
    setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

    Type declaration

      • (newCallbacks): void
      • Set's callback functions to be called in various situations. You can set any +

    Constructors

    Properties

    __board_redraw_pen_layer_timer: any = null
    __clock_timer?: Timeout
    __draw_state: string[][]
    __last_pt: {
        i: number;
        j: number;
        valid: boolean;
    } = ...

    Type declaration

    • i: number
    • j: number
    • valid: boolean
    __update_move_tree: any = null
    analysis_move_counter: number
    analysis_removal_last_position: {
        i: number;
        j: number;
    } = ...

    Type declaration

    • i: number
    • j: number
    analysis_removal_state?: boolean
    bounded_height: number
    bounded_width: number
    bounds: GobanBounds
    chat_log: GobanChatLog = []
    circle_radius: number
    clock_should_be_paused_for_move_submission: boolean = false
    colored_circles?: (undefined | ColoredCircle)[][]
    conditional_path: string = ""
    conditional_starting_color: "black" | "white" | "invalid" = "invalid"
    conditional_tree: ConditionalMoveTree = ...
    config: GobanConfig
    connectToReviewSent?: boolean
    current_cmove?: ConditionalMoveTree
    currently_my_cmove: boolean = false
    dirty_redraw: any = null
    disconnectedFromGame: boolean = true
    display_width?: number
    done_loading_review: boolean = false
    dont_draw_last_move: boolean
    double_click_submit: boolean
    draw_bottom_labels: boolean
    draw_left_labels: boolean
    draw_right_labels: boolean
    draw_top_labels: boolean
    edit_color?: "black" | "white"
    engine: GobanEngine
    errorHandler: ((e) => void)

    Type declaration

      • (e): void
      • Parameters

        • e: Error

        Returns void

    game_id: number
    game_type: string
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    goban_id: number = ++last_goban_id

    Base fields *

    +
    heatmap?: NumberMatrix
    height: number
    highlight_movetree_moves: boolean
    interactive: boolean
    isInPushedAnalysis: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    label_character: string
    label_mark: string = "[UNSET]"
    last_clock?: AdHocClock
    last_emitted_clock?: JGOFClockWithTransmitting
    last_hover_square?: JGOFIntersection
    last_move?: MoveTree
    last_move_radius: number
    last_paused_by_player_state: null | boolean = null
    last_paused_state: null | boolean = null
    last_phase?: GobanEnginePhase
    last_review_message: ReviewMessage
    last_sound_played_for_a_stone_placement?: string
    last_stone_sound: number
    leavePushedAnalysis: (() => void)

    Type declaration

      • (): void
      • Returns void

    marked_analysis_score?: boolean[][]
    move_selected?: JGOFIntersection
    no_display: boolean
    onError?: ((error) => void)

    Type declaration

      • (error): void
      • Parameters

        • error: Error

        Returns void

    on_game_screen: boolean
    one_click_submit: boolean
    original_square_size: number | ((goban) => number) | "auto"

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    pause_control?: AdHocPauseControl
    paused_since?: number
    pen_marks: any[]
    player_id: number
    preloaded_data?: GobanConfig
    previous_mode: string
    puzzle_autoplace_delay: number
    restrict_moves_to_movetree: boolean
    review_had_gamedata: boolean
    review_id: number
    scoring_mode: boolean | "stalling-scoring-mode"
    sendLatencyTimer?: Timeout
    sent_timed_out_message: boolean = false
    shift_key_is_down: boolean
    show_variation_move_numbers: boolean
    showing_scores: boolean = false
    socket_event_bindings: [keyof GobanSocketEvents, (() => void)][] = []
    square_size: number = 10
    stalling_score_estimate?: StallingScoreEstimate
    stone_font_scale: number
    stone_placement_enabled: boolean
    stone_removal_auto_scoring_done?: boolean = false
    variation_stone_opacity: number
    width: number
    setCallbacks: ((newCallbacks) => void) = setGobanCallbacks

    Type declaration

      • (newCallbacks): void
      • Set's callback functions to be called in various situations. You can set any or all of the callbacks, only the provided callbacks will be updated.

        -

        Parameters

        Returns void

    setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

    Type declaration

      • (_catalog, _debug_mode?): void
      • Parameters

        Returns void

    Accessors

    Methods

    setTranslations: ((_catalog, _debug_mode?) => void) = setGobanTranslations

    Type declaration

      • (_catalog, _debug_mode?): void
      • Parameters

        Returns void

    Accessors

    Methods

    \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/docs/enums/JGOFNumericPlayerColor.html b/docs/enums/JGOFNumericPlayerColor.html index fc83786e..fb9ec2bb 100644 --- a/docs/enums/JGOFNumericPlayerColor.html +++ b/docs/enums/JGOFNumericPlayerColor.html @@ -1,4 +1,4 @@ -JGOFNumericPlayerColor | goban

    Enumeration JGOFNumericPlayerColor

    Enumeration Members

    BLACK +JGOFNumericPlayerColor | goban

    Enumeration JGOFNumericPlayerColor

    Enumeration Members

    Enumeration Members

    BLACK: 1
    EMPTY: 0
    WHITE: 2
    \ No newline at end of file +

    Enumeration Members

    BLACK: 1
    EMPTY: 0
    WHITE: 2
    \ No newline at end of file diff --git a/docs/enums/protocol.RemoteStorageReplication.html b/docs/enums/protocol.RemoteStorageReplication.html index 1bfdfbb8..4caba7a9 100644 --- a/docs/enums/protocol.RemoteStorageReplication.html +++ b/docs/enums/protocol.RemoteStorageReplication.html @@ -1,13 +1,13 @@ RemoteStorageReplication | goban

    Enumeration RemoteStorageReplication

    This enum defines the various replication strategies for the remote storage system. For more details on the remote storage replication system see: https://github.com/online-go/online-go.com/blob/devel/src/lib/data.ts

    -

    Enumeration Members

    Enumeration Members

    LOCAL_OVERWRITES_REMOTE: 1

    Locally set data will overwrite remotely set data, but if not set will default to remotely set data

    -
    NONE: 0

    No replication of this change

    -
    REMOTE_ONLY: 4

    Remotely set data, but do not update our local value

    -
    REMOTE_OVERWRITES_LOCAL: 2

    Remotely set data will overwrite locally set data

    -
    \ No newline at end of file +
    NONE: 0

    No replication of this change

    +
    REMOTE_ONLY: 4

    Remotely set data, but do not update our local value

    +
    REMOTE_OVERWRITES_LOCAL: 2

    Remotely set data will overwrite locally set data

    +
    \ No newline at end of file diff --git a/docs/functions/adjust_estimate.html b/docs/functions/adjust_estimate.html index d74d2e37..cd09c50b 100644 --- a/docs/functions/adjust_estimate.html +++ b/docs/functions/adjust_estimate.html @@ -4,4 +4,4 @@
  • area_map: number[][]

    Representation of the ownership, 1=Black, -1=White, 0=Undecided using Area rules

  • score: number

    estimated score (not accounting for captures)

    -
  • Returns {
        ownership: Matrix<number>;
        score: number;
    }

    \ No newline at end of file +

    Returns {
        ownership: Matrix<number>;
        score: number;
    }

    \ No newline at end of file diff --git a/docs/functions/allocateCanvasOrError.html b/docs/functions/allocateCanvasOrError.html index 869459ee..acfc8886 100644 --- a/docs/functions/allocateCanvasOrError.html +++ b/docs/functions/allocateCanvasOrError.html @@ -5,4 +5,4 @@

    If string dimensions are used we'll use setAttribute, if numbers are used we'll set the canvas .width and .height parameter. This is for device scaling considerations when the given dimensions are scaled on HDPI devices.

    -

    Parameters

    Returns HTMLCanvasElement

    \ No newline at end of file +

    Parameters

    Returns HTMLCanvasElement

    \ No newline at end of file diff --git a/docs/functions/autoscore.html b/docs/functions/autoscore.html index 11339755..b435121c 100644 --- a/docs/functions/autoscore.html +++ b/docs/functions/autoscore.html @@ -1 +1 @@ -autoscore | goban

    Function autoscore

    \ No newline at end of file +autoscore | goban

    Function autoscore

    \ No newline at end of file diff --git a/docs/functions/char2num.html b/docs/functions/char2num.html index 838c8249..befa047f 100644 --- a/docs/functions/char2num.html +++ b/docs/functions/char2num.html @@ -1 +1 @@ -char2num | goban

    Function char2num

    \ No newline at end of file +char2num | goban

    Function char2num

    \ No newline at end of file diff --git a/docs/functions/cloneMatrix.html b/docs/functions/cloneMatrix.html index b78e445f..d00ecd5f 100644 --- a/docs/functions/cloneMatrix.html +++ b/docs/functions/cloneMatrix.html @@ -1,2 +1,2 @@ cloneMatrix | goban

    Function cloneMatrix

    • Returns a cloned copy of the provided matrix

      -

      Type Parameters

      • T

      Parameters

      • matrix: T[][]

      Returns T[][]

    \ No newline at end of file +

    Type Parameters

    Parameters

    Returns T[][]

    \ No newline at end of file diff --git a/docs/functions/closeErrorCodeToString.html b/docs/functions/closeErrorCodeToString.html index 7fe52e05..7fff1ab9 100644 --- a/docs/functions/closeErrorCodeToString.html +++ b/docs/functions/closeErrorCodeToString.html @@ -1 +1 @@ -closeErrorCodeToString | goban

    Function closeErrorCodeToString

    \ No newline at end of file +closeErrorCodeToString | goban

    Function closeErrorCodeToString

    \ No newline at end of file diff --git a/docs/functions/color_blend.html b/docs/functions/color_blend.html index ae995a87..c6ffeb13 100644 --- a/docs/functions/color_blend.html +++ b/docs/functions/color_blend.html @@ -1,2 +1,2 @@ color_blend | goban

    Function color_blend

    • Simple 50% blend of two colors in hex format

      -

      Parameters

      • c1: string
      • c2: string

      Returns string

    \ No newline at end of file +

    Parameters

    Returns string

    \ No newline at end of file diff --git a/docs/functions/computeAverageMoveTime.html b/docs/functions/computeAverageMoveTime.html index 5e196195..cf666d78 100644 --- a/docs/functions/computeAverageMoveTime.html +++ b/docs/functions/computeAverageMoveTime.html @@ -1,2 +1,2 @@ computeAverageMoveTime | goban

    Function computeAverageMoveTime

    \ No newline at end of file +

    Parameters

    Returns number

    \ No newline at end of file diff --git a/docs/functions/createDeviceScaledCanvas.html b/docs/functions/createDeviceScaledCanvas.html index b7dfbfd6..b74504c7 100644 --- a/docs/functions/createDeviceScaledCanvas.html +++ b/docs/functions/createDeviceScaledCanvas.html @@ -1 +1 @@ -createDeviceScaledCanvas | goban

    Function createDeviceScaledCanvas

    • Parameters

      • width: number
      • height: number

      Returns HTMLCanvasElement

    \ No newline at end of file +createDeviceScaledCanvas | goban

    Function createDeviceScaledCanvas

    • Parameters

      • width: number
      • height: number

      Returns HTMLCanvasElement

    \ No newline at end of file diff --git a/docs/functions/createGoban.html b/docs/functions/createGoban.html index a24f594a..90e16139 100644 --- a/docs/functions/createGoban.html +++ b/docs/functions/createGoban.html @@ -1 +1 @@ -createGoban | goban

    Function createGoban

    \ No newline at end of file +createGoban | goban

    Function createGoban

    \ No newline at end of file diff --git a/docs/functions/decodeCoordinate.html b/docs/functions/decodeCoordinate.html index 3a48fd1b..6b38f0fe 100644 --- a/docs/functions/decodeCoordinate.html +++ b/docs/functions/decodeCoordinate.html @@ -1,2 +1,2 @@ decodeCoordinate | goban

    Function decodeCoordinate

    \ No newline at end of file +

    Parameters

    Returns number

    \ No newline at end of file diff --git a/docs/functions/decodeGTPCoordinates.html b/docs/functions/decodeGTPCoordinates.html index bc6a3c26..5757ce56 100644 --- a/docs/functions/decodeGTPCoordinates.html +++ b/docs/functions/decodeGTPCoordinates.html @@ -1,2 +1,2 @@ decodeGTPCoordinates | goban

    Function decodeGTPCoordinates

    \ No newline at end of file +

    Parameters

    Returns JGOFMove

    \ No newline at end of file diff --git a/docs/functions/decodeMoves.html b/docs/functions/decodeMoves.html index 39caf1a2..88844762 100644 --- a/docs/functions/decodeMoves.html +++ b/docs/functions/decodeMoves.html @@ -1,3 +1,3 @@ decodeMoves | goban

    Function decodeMoves

    \ No newline at end of file +

    Parameters

    Returns JGOFMove[]

    \ No newline at end of file diff --git a/docs/functions/decodePrettyCoordinates.html b/docs/functions/decodePrettyCoordinates.html index 75e4b113..f5f87268 100644 --- a/docs/functions/decodePrettyCoordinates.html +++ b/docs/functions/decodePrettyCoordinates.html @@ -1,2 +1,2 @@ decodePrettyCoordinates | goban

    Function decodePrettyCoordinates

    \ No newline at end of file +

    Parameters

    Returns JGOFMove

    \ No newline at end of file diff --git a/docs/functions/decodePrettyXCoordinate.html b/docs/functions/decodePrettyXCoordinate.html index 7a1fde79..7620bf7d 100644 --- a/docs/functions/decodePrettyXCoordinate.html +++ b/docs/functions/decodePrettyXCoordinate.html @@ -1,2 +1,2 @@ decodePrettyXCoordinate | goban

    Function decodePrettyXCoordinate

    • Decodes the pretty X coordinate to a number

      -

      Parameters

      • ch: string

      Returns number

    \ No newline at end of file +

    Parameters

    Returns number

    \ No newline at end of file diff --git a/docs/functions/deepClone.html b/docs/functions/deepClone.html index 2e80abdb..18182336 100644 --- a/docs/functions/deepClone.html +++ b/docs/functions/deepClone.html @@ -1,2 +1,2 @@ deepClone | goban

    Function deepClone

    \ No newline at end of file +

    Parameters

    Returns any

    \ No newline at end of file diff --git a/docs/functions/deepEqual.html b/docs/functions/deepEqual.html index 7b94b5d5..e57215aa 100644 --- a/docs/functions/deepEqual.html +++ b/docs/functions/deepEqual.html @@ -1,2 +1,2 @@ deepEqual | goban

    Function deepEqual

    \ No newline at end of file +

    Parameters

    Returns boolean

    \ No newline at end of file diff --git a/docs/functions/deviceCanvasScalingRatio.html b/docs/functions/deviceCanvasScalingRatio.html index 76b72c8c..0de75768 100644 --- a/docs/functions/deviceCanvasScalingRatio.html +++ b/docs/functions/deviceCanvasScalingRatio.html @@ -1 +1 @@ -deviceCanvasScalingRatio | goban

    Function deviceCanvasScalingRatio

    \ No newline at end of file +deviceCanvasScalingRatio | goban

    Function deviceCanvasScalingRatio

    \ No newline at end of file diff --git a/docs/functions/elementOffset.html b/docs/functions/elementOffset.html index 9ab29be1..94aca682 100644 --- a/docs/functions/elementOffset.html +++ b/docs/functions/elementOffset.html @@ -1 +1 @@ -elementOffset | goban

    Function elementOffset

    • Parameters

      • element: HTMLElement

      Returns {
          left: number;
          top: number;
      }

      • left: number
      • top: number
    \ No newline at end of file +elementOffset | goban

    Function elementOffset

    • Parameters

      • element: HTMLElement

      Returns {
          left: number;
          top: number;
      }

      • left: number
      • top: number
    \ No newline at end of file diff --git a/docs/functions/encodeCoordinate.html b/docs/functions/encodeCoordinate.html index 9d540268..6b496913 100644 --- a/docs/functions/encodeCoordinate.html +++ b/docs/functions/encodeCoordinate.html @@ -1,2 +1,2 @@ encodeCoordinate | goban

    Function encodeCoordinate

    • Encodes a single coordinate to a number

      -

      Parameters

      • coor: number

      Returns string

    \ No newline at end of file +

    Parameters

    Returns string

    \ No newline at end of file diff --git a/docs/functions/encodeMove.html b/docs/functions/encodeMove.html index 546e4d42..f1f47bdc 100644 --- a/docs/functions/encodeMove.html +++ b/docs/functions/encodeMove.html @@ -1 +1 @@ -encodeMove | goban

    Function encodeMove

    \ No newline at end of file +encodeMove | goban

    Function encodeMove

    \ No newline at end of file diff --git a/docs/functions/encodeMoveToArray.html b/docs/functions/encodeMoveToArray.html index 15c04ace..3c79e6f8 100644 --- a/docs/functions/encodeMoveToArray.html +++ b/docs/functions/encodeMoveToArray.html @@ -1 +1 @@ -encodeMoveToArray | goban

    Function encodeMoveToArray

    \ No newline at end of file +encodeMoveToArray | goban

    Function encodeMoveToArray

    \ No newline at end of file diff --git a/docs/functions/encodeMoves.html b/docs/functions/encodeMoves.html index f43cea14..b3b82dba 100644 --- a/docs/functions/encodeMoves.html +++ b/docs/functions/encodeMoves.html @@ -1 +1 @@ -encodeMoves | goban

    Function encodeMoves

    \ No newline at end of file +encodeMoves | goban

    Function encodeMoves

    \ No newline at end of file diff --git a/docs/functions/encodeMovesToArray.html b/docs/functions/encodeMovesToArray.html index 62c1da4b..6ccf1217 100644 --- a/docs/functions/encodeMovesToArray.html +++ b/docs/functions/encodeMovesToArray.html @@ -1 +1 @@ -encodeMovesToArray | goban

    Function encodeMovesToArray

    \ No newline at end of file +encodeMovesToArray | goban

    Function encodeMovesToArray

    \ No newline at end of file diff --git a/docs/functions/encodePrettyXCoordinate.html b/docs/functions/encodePrettyXCoordinate.html index 7d89e2e6..aa54ed51 100644 --- a/docs/functions/encodePrettyXCoordinate.html +++ b/docs/functions/encodePrettyXCoordinate.html @@ -1,2 +1,2 @@ encodePrettyXCoordinate | goban

    Function encodePrettyXCoordinate

    • Encodes an X coordinate to a display encoding

      -

      Parameters

      • coor: number

      Returns string

    \ No newline at end of file +

    Parameters

    Returns string

    \ No newline at end of file diff --git a/docs/functions/escapeSGFText.html b/docs/functions/escapeSGFText.html index b25a3d5a..09905481 100644 --- a/docs/functions/escapeSGFText.html +++ b/docs/functions/escapeSGFText.html @@ -1 +1 @@ -escapeSGFText | goban

    Function escapeSGFText

    • Parameters

      • txt: string
      • escapeColon: boolean = false

      Returns string

    \ No newline at end of file +escapeSGFText | goban

    Function escapeSGFText

    • Parameters

      • txt: string
      • escapeColon: boolean = false

      Returns string

    \ No newline at end of file diff --git a/docs/functions/getRandomInt.html b/docs/functions/getRandomInt.html index a996b3af..e6f28b1c 100644 --- a/docs/functions/getRandomInt.html +++ b/docs/functions/getRandomInt.html @@ -1,2 +1,2 @@ getRandomInt | goban

    Function getRandomInt

    • Returns a random integer between min (inclusive) and max (exclusive)

      -

      Parameters

      • min: number
      • max: number

      Returns number

    \ No newline at end of file +

    Parameters

    Returns number

    \ No newline at end of file diff --git a/docs/functions/getRelativeEventPosition.html b/docs/functions/getRelativeEventPosition.html index 51f1add9..0938620e 100644 --- a/docs/functions/getRelativeEventPosition.html +++ b/docs/functions/getRelativeEventPosition.html @@ -1,2 +1,2 @@ getRelativeEventPosition | goban

    Function getRelativeEventPosition

    • Returns {x,y} of the event relative to the event target

      -

      Parameters

      • event: TouchEvent | MouseEvent
      • Optional target: HTMLElement

      Returns {
          x: number;
          y: number;
      }

      • x: number
      • y: number
    \ No newline at end of file +

    Parameters

    Returns {
        x: number;
        y: number;
    }

    \ No newline at end of file diff --git a/docs/functions/getWorstMoves.html b/docs/functions/getWorstMoves.html index 730008aa..6c624d1d 100644 --- a/docs/functions/getWorstMoves.html +++ b/docs/functions/getWorstMoves.html @@ -1,4 +1,4 @@ getWorstMoves | goban

    Function getWorstMoves

    \ No newline at end of file +

    Parameters

    Returns AIReviewWorstMoveEntry[]

    \ No newline at end of file diff --git a/docs/functions/init_remote_ownership_estimator.html b/docs/functions/init_remote_ownership_estimator.html index 9d070881..5b5b51e4 100644 --- a/docs/functions/init_remote_ownership_estimator.html +++ b/docs/functions/init_remote_ownership_estimator.html @@ -1 +1 @@ -init_remote_ownership_estimator | goban

    Function init_remote_ownership_estimator

    \ No newline at end of file +init_remote_ownership_estimator | goban

    Function init_remote_ownership_estimator

    \ No newline at end of file diff --git a/docs/functions/init_wasm_ownership_estimator.html b/docs/functions/init_wasm_ownership_estimator.html index fd64d5c1..3c95ad8b 100644 --- a/docs/functions/init_wasm_ownership_estimator.html +++ b/docs/functions/init_wasm_ownership_estimator.html @@ -1 +1 @@ -init_wasm_ownership_estimator | goban

    Function init_wasm_ownership_estimator

    \ No newline at end of file +init_wasm_ownership_estimator | goban

    Function init_wasm_ownership_estimator

    \ No newline at end of file diff --git a/docs/functions/makeEmptyMatrix.html b/docs/functions/makeEmptyMatrix.html index dbad29b7..1af3826f 100644 --- a/docs/functions/makeEmptyMatrix.html +++ b/docs/functions/makeEmptyMatrix.html @@ -1 +1 @@ -makeEmptyMatrix | goban

    Function makeEmptyMatrix

    • Type Parameters

      • T

      Parameters

      • width: number
      • height: number

      Returns (T | undefined)[][]

    \ No newline at end of file +makeEmptyMatrix | goban

    Function makeEmptyMatrix

    • Type Parameters

      • T

      Parameters

      • width: number
      • height: number

      Returns (T | undefined)[][]

    \ No newline at end of file diff --git a/docs/functions/makeMatrix.html b/docs/functions/makeMatrix.html index c92f2473..b3ba29f1 100644 --- a/docs/functions/makeMatrix.html +++ b/docs/functions/makeMatrix.html @@ -1 +1 @@ -makeMatrix | goban

    Function makeMatrix

    \ No newline at end of file +makeMatrix | goban

    Function makeMatrix

    \ No newline at end of file diff --git a/docs/functions/makeObjectMatrix.html b/docs/functions/makeObjectMatrix.html index 94d71bed..4fa389ae 100644 --- a/docs/functions/makeObjectMatrix.html +++ b/docs/functions/makeObjectMatrix.html @@ -1 +1 @@ -makeObjectMatrix | goban

    Function makeObjectMatrix

    • Type Parameters

      • T

      Parameters

      • width: number
      • height: number

      Returns T[][]

    \ No newline at end of file +makeObjectMatrix | goban

    Function makeObjectMatrix

    • Type Parameters

      • T

      Parameters

      • width: number
      • height: number

      Returns T[][]

    \ No newline at end of file diff --git a/docs/functions/matricesAreEqual.html b/docs/functions/matricesAreEqual.html index 826b4a21..3f569511 100644 --- a/docs/functions/matricesAreEqual.html +++ b/docs/functions/matricesAreEqual.html @@ -1,3 +1,3 @@ matricesAreEqual | goban

    Function matricesAreEqual

    • Returns true if the contents of the two 2d matrices are equal when the cells are compared with ===

      -

      Type Parameters

      • T

      Parameters

      • m1: T[][]
      • m2: T[][]

      Returns boolean

    \ No newline at end of file +

    Type Parameters

    Parameters

    Returns boolean

    \ No newline at end of file diff --git a/docs/functions/newlines_to_spaces.html b/docs/functions/newlines_to_spaces.html index 700c47a1..afde4cfb 100644 --- a/docs/functions/newlines_to_spaces.html +++ b/docs/functions/newlines_to_spaces.html @@ -1,3 +1,3 @@ newlines_to_spaces | goban

    Function newlines_to_spaces

    • SGF "simple text", eg used in the LB property, we can't have newlines. This strips them and replaces them with spaces.

      -

      Parameters

      • txt: string

      Returns string

    \ No newline at end of file +

    Parameters

    Returns string

    \ No newline at end of file diff --git a/docs/functions/niceInterval.html b/docs/functions/niceInterval.html index 4a52dc08..69e0b78d 100644 --- a/docs/functions/niceInterval.html +++ b/docs/functions/niceInterval.html @@ -1,4 +1,4 @@ niceInterval | goban

    Function niceInterval

    • Like setInterval, but debounces catchups (multiple invocation in rapid succession less than our desired interval) that happen in some browsers when tabs wake up from sleep. Cleared with the standard clearInterval.

      -

      Parameters

      • callback: (() => void)
          • (): void
          • Returns void

      • interval: number

      Returns ReturnType<typeof setInterval>

    \ No newline at end of file +

    Parameters

    Returns ReturnType<typeof setInterval>

    \ No newline at end of file diff --git a/docs/functions/num2char.html b/docs/functions/num2char.html index dc9bb2c4..4ae3fc14 100644 --- a/docs/functions/num2char.html +++ b/docs/functions/num2char.html @@ -1 +1 @@ -num2char | goban

    Function num2char

    \ No newline at end of file +num2char | goban

    Function num2char

    \ No newline at end of file diff --git a/docs/functions/ojeSequenceToMoves.html b/docs/functions/ojeSequenceToMoves.html index a994b9c8..cba3cb36 100644 --- a/docs/functions/ojeSequenceToMoves.html +++ b/docs/functions/ojeSequenceToMoves.html @@ -1 +1 @@ -ojeSequenceToMoves | goban

    Function ojeSequenceToMoves

    \ No newline at end of file +ojeSequenceToMoves | goban

    Function ojeSequenceToMoves

    \ No newline at end of file diff --git a/docs/functions/placeRenderedImageStone.html b/docs/functions/placeRenderedImageStone.html index ac3fc1f5..9ae68457 100644 --- a/docs/functions/placeRenderedImageStone.html +++ b/docs/functions/placeRenderedImageStone.html @@ -1 +1 @@ -placeRenderedImageStone | goban

    Function placeRenderedImageStone

    • Parameters

      • ctx: CanvasRenderingContext2D
      • shadow_ctx: null | CanvasRenderingContext2D
      • stone: StoneType
      • cx: number
      • cy: number
      • radius: number

      Returns void

    \ No newline at end of file +placeRenderedImageStone | goban

    Function placeRenderedImageStone

    • Parameters

      • ctx: CanvasRenderingContext2D
      • shadow_ctx: null | CanvasRenderingContext2D
      • stone: StoneType
      • cx: number
      • cy: number
      • radius: number

      Returns void

    \ No newline at end of file diff --git a/docs/functions/positionId.html b/docs/functions/positionId.html index dffd9c8a..41de09c8 100644 --- a/docs/functions/positionId.html +++ b/docs/functions/positionId.html @@ -1 +1 @@ -positionId | goban

    Function positionId

    \ No newline at end of file +positionId | goban

    Function positionId

    \ No newline at end of file diff --git a/docs/functions/preRenderImageStone.html b/docs/functions/preRenderImageStone.html index c3023918..20b90df2 100644 --- a/docs/functions/preRenderImageStone.html +++ b/docs/functions/preRenderImageStone.html @@ -1 +1 @@ -preRenderImageStone | goban

    Function preRenderImageStone

    \ No newline at end of file +preRenderImageStone | goban

    Function preRenderImageStone

    \ No newline at end of file diff --git a/docs/functions/prettyCoordinates.html b/docs/functions/prettyCoordinates.html index 7221d21a..5aa7cc20 100644 --- a/docs/functions/prettyCoordinates.html +++ b/docs/functions/prettyCoordinates.html @@ -1,2 +1,2 @@ prettyCoordinates | goban

    Function prettyCoordinates

    • Encodes an x,y pair to "pretty" coordinates, like "A3", or "K10"

      -

      Parameters

      • x: number
      • y: number
      • board_height: number

      Returns string

    \ No newline at end of file +

    Parameters

    Returns string

    \ No newline at end of file diff --git a/docs/functions/resizeDeviceScaledCanvas.html b/docs/functions/resizeDeviceScaledCanvas.html index 9601efc4..fe867d48 100644 --- a/docs/functions/resizeDeviceScaledCanvas.html +++ b/docs/functions/resizeDeviceScaledCanvas.html @@ -1 +1 @@ -resizeDeviceScaledCanvas | goban

    Function resizeDeviceScaledCanvas

    • Parameters

      • canvas: HTMLCanvasElement
      • width: number
      • height: number

      Returns HTMLCanvasElement

    \ No newline at end of file +resizeDeviceScaledCanvas | goban

    Function resizeDeviceScaledCanvas

    • Parameters

      • canvas: HTMLCanvasElement
      • width: number
      • height: number

      Returns HTMLCanvasElement

    \ No newline at end of file diff --git a/docs/functions/setGobanCallbacks.html b/docs/functions/setGobanCallbacks.html index 4c7173f2..f2cdc290 100644 --- a/docs/functions/setGobanCallbacks.html +++ b/docs/functions/setGobanCallbacks.html @@ -1,3 +1,3 @@ setGobanCallbacks | goban

    Function setGobanCallbacks

    • Set's callback functions to be called in various situations. You can set any or all of the callbacks, only the provided callbacks will be updated.

      -

      Parameters

      Returns void

    \ No newline at end of file +

    Parameters

    Returns void

    \ No newline at end of file diff --git a/docs/functions/setGobanRenderer.html b/docs/functions/setGobanRenderer.html index a6c9a1af..f5af7dc1 100644 --- a/docs/functions/setGobanRenderer.html +++ b/docs/functions/setGobanRenderer.html @@ -1 +1 @@ -setGobanRenderer | goban

    Function setGobanRenderer

    • Parameters

      • _renderer: "canvas" | "svg"

      Returns void

    \ No newline at end of file +setGobanRenderer | goban

    Function setGobanRenderer

    • Parameters

      • _renderer: "canvas" | "svg"

      Returns void

    \ No newline at end of file diff --git a/docs/functions/set_local_ownership_estimator.html b/docs/functions/set_local_ownership_estimator.html index b4a787fd..7439dcde 100644 --- a/docs/functions/set_local_ownership_estimator.html +++ b/docs/functions/set_local_ownership_estimator.html @@ -1 +1 @@ -set_local_ownership_estimator | goban

    Function set_local_ownership_estimator

    \ No newline at end of file +set_local_ownership_estimator | goban

    Function set_local_ownership_estimator

    \ No newline at end of file diff --git a/docs/functions/shortDurationString.html b/docs/functions/shortDurationString.html index 6077473d..4870ff6f 100644 --- a/docs/functions/shortDurationString.html +++ b/docs/functions/shortDurationString.html @@ -1,2 +1,2 @@ shortDurationString | goban

    Function shortDurationString

    • Takes a number of seconds and returns a string like "1d 3h 2m 52s"

      -

      Parameters

      • seconds: number

      Returns string

    \ No newline at end of file +

    Parameters

    Returns string

    \ No newline at end of file diff --git a/docs/functions/sortMoves.html b/docs/functions/sortMoves.html index ea6567d7..fefbef0c 100644 --- a/docs/functions/sortMoves.html +++ b/docs/functions/sortMoves.html @@ -1,2 +1,2 @@ sortMoves | goban

    Function sortMoves

    \ No newline at end of file +

    Parameters

    Returns string

  • Parameters

    Returns JGOFMove[]

  • \ No newline at end of file diff --git a/docs/functions/translate._.html b/docs/functions/translate._.html index d0aee3a8..d1fc50a5 100644 --- a/docs/functions/translate._.html +++ b/docs/functions/translate._.html @@ -1 +1 @@ -_ | goban

    Function _

    \ No newline at end of file +_ | goban

    Function _

    \ No newline at end of file diff --git a/docs/functions/translate.interpolate.html b/docs/functions/translate.interpolate.html index 80cd7f03..d1ee7730 100644 --- a/docs/functions/translate.interpolate.html +++ b/docs/functions/translate.interpolate.html @@ -1 +1 @@ -interpolate | goban

    Function interpolate

    • Parameters

      • str: string
      • params: any

      Returns string

    \ No newline at end of file +interpolate | goban

    Function interpolate

    • Parameters

      • str: string
      • params: any

      Returns string

    \ No newline at end of file diff --git a/docs/functions/translate.setGobanTranslations.html b/docs/functions/translate.setGobanTranslations.html index 5a4d3db6..b5fd586f 100644 --- a/docs/functions/translate.setGobanTranslations.html +++ b/docs/functions/translate.setGobanTranslations.html @@ -1 +1 @@ -setGobanTranslations | goban

    Function setGobanTranslations

    \ No newline at end of file +setGobanTranslations | goban

    Function setGobanTranslations

    \ No newline at end of file diff --git a/docs/functions/validateCanvas.html b/docs/functions/validateCanvas.html index 026b65bd..aa0a2608 100644 --- a/docs/functions/validateCanvas.html +++ b/docs/functions/validateCanvas.html @@ -1,4 +1,4 @@ validateCanvas | goban

    Function validateCanvas

    • Validates that a canvas was created successfully and a 2d context can be allocated for it. If not, we call the GobanCore.canvasAllocationErrorHandler hook.

      -

      Parameters

      • canvas: null | HTMLCanvasElement
      • Optional err: Error
      • Optional width: string | number
      • Optional height: string | number

      Returns boolean

    \ No newline at end of file +

    Parameters

    Returns boolean

    \ No newline at end of file diff --git a/docs/functions/voronoi_estimate_ownership.html b/docs/functions/voronoi_estimate_ownership.html index 111e7213..df87dfe7 100644 --- a/docs/functions/voronoi_estimate_ownership.html +++ b/docs/functions/voronoi_estimate_ownership.html @@ -1,4 +1,4 @@ voronoi_estimate_ownership | goban

    Function voronoi_estimate_ownership

    \ No newline at end of file +

    Parameters

    Returns number[][]

    \ No newline at end of file diff --git a/docs/functions/wasm_estimate_ownership.html b/docs/functions/wasm_estimate_ownership.html index 0e7e40a6..8cc6fe8d 100644 --- a/docs/functions/wasm_estimate_ownership.html +++ b/docs/functions/wasm_estimate_ownership.html @@ -1 +1 @@ -wasm_estimate_ownership | goban

    Function wasm_estimate_ownership

    \ No newline at end of file +wasm_estimate_ownership | goban

    Function wasm_estimate_ownership

    \ No newline at end of file diff --git a/docs/interfaces/AIReviewWorstMoveEntry.html b/docs/interfaces/AIReviewWorstMoveEntry.html index e35f109a..2639638f 100644 --- a/docs/interfaces/AIReviewWorstMoveEntry.html +++ b/docs/interfaces/AIReviewWorstMoveEntry.html @@ -1,5 +1,5 @@ -AIReviewWorstMoveEntry | goban

    Interface AIReviewWorstMoveEntry

    interface AIReviewWorstMoveEntry {
        delta: number;
        move: JGOFIntersection;
        move_number: number;
        player: JGOFNumericPlayerColor;
    }

    Properties

    delta +AIReviewWorstMoveEntry | goban

    Interface AIReviewWorstMoveEntry

    interface AIReviewWorstMoveEntry {
        delta: number;
        move: JGOFIntersection;
        move_number: number;
        player: JGOFNumericPlayerColor;
    }

    Properties

    delta: number
    move_number: number
    \ No newline at end of file +

    Properties

    delta: number
    move_number: number
    \ No newline at end of file diff --git a/docs/interfaces/AdHocClock.html b/docs/interfaces/AdHocClock.html index ef8a6aff..1f37b510 100644 --- a/docs/interfaces/AdHocClock.html +++ b/docs/interfaces/AdHocClock.html @@ -1,4 +1,4 @@ -AdHocClock | goban

    Interface AdHocClock

    interface AdHocClock {
        black_player_id: number;
        black_time: number | AdHocPlayerClock;
        current_player: number;
        expiration: number;
        game_id: number;
        last_move: number;
        pause?: {
            pause_control: AdHocPauseControl;
            paused: boolean;
            paused_since: number;
        };
        paused_since?: number;
        start_mode?: boolean;
        title: string;
        white_player_id: number;
        white_time: number | AdHocPlayerClock;
    }

    Properties

    black_player_id +AdHocClock | goban

    Interface AdHocClock

    interface AdHocClock {
        black_player_id: number;
        black_time: number | AdHocPlayerClock;
        current_player: number;
        expiration: number;
        game_id: number;
        last_move: number;
        pause?: {
            pause_control: AdHocPauseControl;
            paused: boolean;
            paused_since: number;
        };
        paused_since?: number;
        start_mode?: boolean;
        title: string;
        white_player_id: number;
        white_time: number | AdHocPlayerClock;
    }

    Properties

    black_player_id: number

    OGS player id for black

    -
    black_time: number | AdHocPlayerClock

    Time left on black's clock. If this is a number (such as is the case +

    black_time: number | AdHocPlayerClock

    Time left on black's clock. If this is a number (such as is the case with simple time), it is expressed in milliseconds.

    -
    current_player: number

    Current player to move

    -
    expiration: number

    Time the game will end if no move is played, in milliseconds since +

    current_player: number

    Current player to move

    +
    expiration: number

    Time the game will end if no move is played, in milliseconds since 1970. This is computed by adding together any main and overtime left on the clock. If start_mode is set, this is the number of milliseconds left on the start clock.

    -
    game_id: number

    OGS Game id

    -
    last_move: number

    Time the last move was made, in milliseconds since 1970

    -
    pause?: {
        pause_control: AdHocPauseControl;
        paused: boolean;
        paused_since: number;
    }

    If set, this AdHocClock is updating the pause state

    -

    Type declaration

    paused_since?: number

    Time the game was paused. This field erroneously exists even after the +

    game_id: number

    OGS Game id

    +
    last_move: number

    Time the last move was made, in milliseconds since 1970

    +
    pause?: {
        pause_control: AdHocPauseControl;
        paused: boolean;
        paused_since: number;
    }

    If set, this AdHocClock is updating the pause state

    +

    Type declaration

    paused_since?: number

    Time the game was paused. This field erroneously exists even after the game has been resumed, this will be removed in these cases.

    -
    start_mode?: boolean

    If true, the game has not started and this is the count down until +

    start_mode?: boolean

    If true, the game has not started and this is the count down until the game is canceled if a move has not been played yet. If this is true, then the duration left on the start clock is stored in expiration (in ms)

    -
    title: string

    Title of the game. This field will be removed.

    -
    white_player_id: number

    OGS player id for white

    -
    white_time: number | AdHocPlayerClock

    Time left on white's clock. If this is a number (such as is the case +

    title: string

    Title of the game. This field will be removed.

    +
    white_player_id: number

    OGS player id for white

    +
    white_time: number | AdHocPlayerClock

    Time left on white's clock. If this is a number (such as is the case with simple time), it is expressed in milliseconds.k

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/interfaces/AdHocFormat.html b/docs/interfaces/AdHocFormat.html index c3437e18..fed55b2f 100644 --- a/docs/interfaces/AdHocFormat.html +++ b/docs/interfaces/AdHocFormat.html @@ -1,8 +1,8 @@ AdHocFormat | goban

    Interface AdHocFormat

    The to-be-deprecated format used by Online-Go.com, will be replaced by JGOF as we develop a migration plan

    -
    interface AdHocFormat {
        black: AdHocPlayer;
        clock: AdHocClock;
        pause_control: AdHocPauseControl;
        time_control: JGOFTimeControl;
        white: AdHocPlayer;
    }

    Properties

    interface AdHocFormat {
        black: AdHocPlayer;
        clock: AdHocClock;
        pause_control: AdHocPauseControl;
        time_control: JGOFTimeControl;
        white: AdHocPlayer;
    }

    Properties

    clock: AdHocClock
    pause_control: AdHocPauseControl
    time_control: JGOFTimeControl
    \ No newline at end of file +

    Properties

    clock: AdHocClock
    pause_control: AdHocPauseControl
    time_control: JGOFTimeControl
    \ No newline at end of file diff --git a/docs/interfaces/AdHocPauseControl.html b/docs/interfaces/AdHocPauseControl.html index 014339fa..fd989474 100644 --- a/docs/interfaces/AdHocPauseControl.html +++ b/docs/interfaces/AdHocPauseControl.html @@ -1,6 +1,6 @@ -AdHocPauseControl | goban

    Interface AdHocPauseControl

    interface AdHocPauseControl {
        moderator_paused?: {
            moderator_id: number;
        };
        paused?: {
            pauses_left: number;
            pausing_player_id: number;
        };
        stone-removal?: true;
        system?: true;
        weekend?: true;
        [vacation: string]: any;
    }

    Indexable

    [vacation: string]: any

    Properties

    moderator_paused? +AdHocPauseControl | goban

    Interface AdHocPauseControl

    interface AdHocPauseControl {
        moderator_paused?: {
            moderator_id: number;
        };
        paused?: {
            pauses_left: number;
            pausing_player_id: number;
        };
        stone-removal?: true;
        system?: true;
        weekend?: true;
        [vacation: string]: any;
    }

    Indexable

    [vacation: string]: any

    Properties

    moderator_paused?: {
        moderator_id: number;
    }

    Type declaration

    • moderator_id: number
    paused?: {
        pauses_left: number;
        pausing_player_id: number;
    }

    Type declaration

    • pauses_left: number
    • pausing_player_id: number
    stone-removal?: true
    system?: true
    weekend?: true
    \ No newline at end of file +

    Properties

    moderator_paused?: {
        moderator_id: number;
    }

    Type declaration

    • moderator_id: number
    paused?: {
        pauses_left: number;
        pausing_player_id: number;
    }

    Type declaration

    • pauses_left: number
    • pausing_player_id: number
    stone-removal?: true
    system?: true
    weekend?: true
    \ No newline at end of file diff --git a/docs/interfaces/AdHocPlayer.html b/docs/interfaces/AdHocPlayer.html index c31fdf25..8e0ec98f 100644 --- a/docs/interfaces/AdHocPlayer.html +++ b/docs/interfaces/AdHocPlayer.html @@ -1,3 +1,3 @@ -AdHocPlayer | goban

    Interface AdHocPlayer

    interface AdHocPlayer {
        id: number;
        name: string;
    }

    Properties

    id +AdHocPlayer | goban

    Interface AdHocPlayer

    interface AdHocPlayer {
        id: number;
        name: string;
    }

    Properties

    Properties

    id: number
    name: string
    \ No newline at end of file +

    Properties

    id: number
    name: string
    \ No newline at end of file diff --git a/docs/interfaces/AdHocPlayerClock.html b/docs/interfaces/AdHocPlayerClock.html index 00b0ef92..b6dc1efa 100644 --- a/docs/interfaces/AdHocPlayerClock.html +++ b/docs/interfaces/AdHocPlayerClock.html @@ -1,4 +1,4 @@ -AdHocPlayerClock | goban

    Interface AdHocPlayerClock

    interface AdHocPlayerClock {
        block_time?: number;
        moves_left?: number;
        period_time?: number;
        periods?: number;
        skip_bonus?: boolean;
        thinking_time: number;
    }

    Properties

    block_time? +AdHocPlayerClock | goban

    Interface AdHocPlayerClock

    interface AdHocPlayerClock {
        block_time?: number;
        moves_left?: number;
        period_time?: number;
        periods?: number;
        skip_bonus?: boolean;
        thinking_time: number;
    }

    Properties

    block_time?: number

    Used with canadian time control. Time left (in seconds) to make the remainder of your moves in yu

    -
    moves_left?: number

    Used with canadian time control. Number of moves left before a new +

    moves_left?: number

    Used with canadian time control. Number of moves left before a new block of time.

    -
    period_time?: number

    Used with byo-yomi time control. Length of each period, in seconds.

    -
    periods?: number

    Used with byo-yomi time control. Number of periods left.

    -
    skip_bonus?: boolean

    Used with fischer time control to denote that the next move should not +

    period_time?: number

    Used with byo-yomi time control. Length of each period, in seconds.

    +
    periods?: number

    Used with byo-yomi time control. Number of periods left.

    +
    skip_bonus?: boolean

    Used with fischer time control to denote that the next move should not increment the clock.

    -
    thinking_time: number

    Thinking time left, in seconds. Also used as main time for byo-yomi and +

    thinking_time: number

    Thinking time left, in seconds. Also used as main time for byo-yomi and canadian clocks.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/interfaces/AudioClockEvent.html b/docs/interfaces/AudioClockEvent.html index e7dcb3cb..cd1042d5 100644 --- a/docs/interfaces/AudioClockEvent.html +++ b/docs/interfaces/AudioClockEvent.html @@ -1,14 +1,14 @@ -AudioClockEvent | goban

    Interface AudioClockEvent

    interface AudioClockEvent {
        clock: JGOFPlayerClock;
        color: PlayerColor;
        countdown_seconds: number;
        in_overtime: boolean;
        player_id: string;
        time_control_system: JGOFTimeControlSystem;
    }

    Properties

    clock +AudioClockEvent | goban

    Interface AudioClockEvent

    interface AudioClockEvent {
        clock: JGOFPlayerClock;
        color: PlayerColor;
        countdown_seconds: number;
        in_overtime: boolean;
        player_id: string;
        time_control_system: JGOFTimeControlSystem;
    }

    Properties

    Full player clock information

    -

    The player whose turn it is

    -
    countdown_seconds: number

    Number of seconds left in the current period

    -
    in_overtime: boolean

    True if we are in overtime. This is only ever set for systems that have +

    The player whose turn it is

    +
    countdown_seconds: number

    Number of seconds left in the current period

    +
    in_overtime: boolean

    True if we are in overtime. This is only ever set for systems that have a concept of overtime.

    -
    player_id: string

    The player (id) whose turn it is

    -
    time_control_system: JGOFTimeControlSystem

    Time control system being used by the clock

    -
    \ No newline at end of file +
    player_id: string

    The player (id) whose turn it is

    +
    time_control_system: JGOFTimeControlSystem

    Time control system being used by the clock

    +
    \ No newline at end of file diff --git a/docs/interfaces/BoardConfig.html b/docs/interfaces/BoardConfig.html index 36a5409a..9c27b9cc 100644 --- a/docs/interfaces/BoardConfig.html +++ b/docs/interfaces/BoardConfig.html @@ -1,4 +1,4 @@ -BoardConfig | goban

    Interface BoardConfig

    interface BoardConfig {
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_is_repeating?: boolean;
        height?: number;
        isobranch_hash?: string;
        player?: JGOFNumericPlayerColor;
        removal?: boolean[][];
        white_prisoners?: number;
        width?: number;
    }

    Hierarchy (view full)

    Implemented by

    Properties

    black_prisoners? +BoardConfig | goban

    Interface BoardConfig

    interface BoardConfig {
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_is_repeating?: boolean;
        height?: number;
        isobranch_hash?: string;
        player?: JGOFNumericPlayerColor;
        removal?: boolean[][];
        white_prisoners?: number;
        width?: number;
    }

    Hierarchy (view full)

    Implemented by

    Properties

    black_prisoners?: number
    board_is_repeating?: boolean
    height?: number
    isobranch_hash?: string
    removal?: boolean[][]
    white_prisoners?: number
    width?: number
    \ No newline at end of file +

    Properties

    black_prisoners?: number
    board_is_repeating?: boolean
    height?: number
    isobranch_hash?: string
    removal?: boolean[][]
    white_prisoners?: number
    width?: number
    \ No newline at end of file diff --git a/docs/interfaces/CanvasRendererGobanConfig.html b/docs/interfaces/CanvasRendererGobanConfig.html index 15d2bc23..5e2626e4 100644 --- a/docs/interfaces/CanvasRendererGobanConfig.html +++ b/docs/interfaces/CanvasRendererGobanConfig.html @@ -1,4 +1,4 @@ -CanvasRendererGobanConfig | goban

    Interface CanvasRendererGobanConfig

    interface CanvasRendererGobanConfig {
        aga_handicap_scoring?: boolean;
        allow_ko?: boolean;
        allow_self_capture?: boolean;
        allow_superko?: boolean;
        auth?: string;
        automatic_stone_removal?: boolean;
        black_player_id?: number;
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_div?: HTMLElement;
        board_is_repeating?: boolean;
        bounds?: GobanBounds;
        chat_log?: GobanChatLog;
        circle_radius?: number;
        clock?: GameClock;
        connect_to_chat?: number | boolean;
        disable_analysis?: boolean;
        display_width?: number;
        dont_draw_last_move?: boolean;
        dont_show_messages?: boolean;
        double_click_submit?: boolean;
        draw_bottom_labels?: boolean;
        draw_left_labels?: boolean;
        draw_right_labels?: boolean;
        draw_top_labels?: boolean;
        end_time?: number;
        errors?: {
            error: string;
            stack: any;
        }[];
        free_handicap_placement?: boolean;
        game_date?: string;
        game_id?: string | number;
        game_name?: string;
        game_type?: "temporary";
        getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting);
        group_ids?: number[];
        handicap?: number;
        handicap_rank_difference?: number;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        interactive?: boolean;
        isInPushedAnalysis?: (() => boolean);
        isPlayerController?: (() => boolean);
        isPlayerOwner?: (() => boolean);
        is_game_record?: boolean;
        isobranch_hash?: string;
        komi?: number;
        ladder?: number;
        ladder_id?: number;
        last_move_opacity?: number;
        last_move_radius?: number;
        latencies?: {
            [player_id: string]: number;
        };
        leavePushedAnalysis?: (() => void);
        malkovich_log?: GobanChatLog;
        marks?: {
            [mark: string]: string;
        };
        mode?: GobanModes;
        move_tree?: MoveTreeJson;
        move_tree_container?: HTMLElement;
        moves?: GobanMovesArray;
        name?: string;
        needs_sealing?: JGOFSealingIntersection[];
        ogs?: {
            black_dead_stones: string;
            black_seki_eyes: string;
            black_stones: string;
            black_territory: string;
            white_dead_stones: string;
            white_seki_eyes: string;
            white_stones: string;
            white_territory: string;
        };
        ogs_import?: boolean;
        onError?: ((err) => void);
        onScoreEstimationUpdated?: ((winning_color, points) => void);
        one_click_submit?: boolean;
        opponent_plays_first_after_resume?: boolean;
        original_disable_analysis?: boolean;
        original_sgf?: string;
        outcome?: string;
        pause_control?: AdHocPauseControl;
        paused_since?: number;
        phase?: GobanEnginePhase;
        player?: JGOFNumericPlayerColor;
        player_id?: number;
        player_pool?: {
            [id: number]: GobanEnginePlayerEntry;
        };
        players?: {
            black: GobanEnginePlayerEntry;
            white: GobanEnginePlayerEntry;
        };
        puzzle_autoplace_delay?: number;
        puzzle_collection?: number;
        puzzle_description?: string;
        puzzle_opponent_move_mode?: PuzzleOpponentMoveMode;
        puzzle_player_move_mode?: PuzzlePlayerMoveMode;
        puzzle_rank?: number;
        puzzle_type?: string;
        ranked?: boolean;
        removal?: boolean[][];
        removed?: string | JGOFMove[];
        rengo?: boolean;
        rengo_casual_mode?: boolean;
        rengo_teams?: {
            black: GobanEnginePlayerEntry[];
            white: GobanEnginePlayerEntry[];
        };
        review_id?: number;
        reviews?: {
            [review_id: number]: GobanEnginePlayerEntry;
        };
        rules?: GobanEngineRules;
        score?: Score;
        score_handicap?: boolean;
        score_passes?: boolean;
        score_prisoners?: boolean;
        score_stones?: boolean;
        score_territory?: boolean;
        score_territory_in_seki?: boolean;
        server_socket?: GobanSocket<ClientToServer, ServerToClient>;
        spectator_log?: GobanChatLog;
        square_size?: number | "auto" | ((goban) => number);
        stalling_score_estimate?: StallingScoreEstimate;
        start_time?: number;
        strict_seki_mode?: boolean;
        superko_algorithm?: GobanEngineSuperKoAlgorithm;
        throw_all_errors?: boolean;
        time_control?: JGOFTimeControl;
        time_per_move?: number;
        title_div?: HTMLElement;
        tournament_id?: number;
        username?: string;
        variation_stone_opacity?: number;
        white_must_pass_last?: boolean;
        white_player_id?: number;
        white_prisoners?: number;
        width?: number;
        winner?: number | "black" | "white";
    }

    Hierarchy (view full)

    Properties

    aga_handicap_scoring? +CanvasRendererGobanConfig | goban

    Interface CanvasRendererGobanConfig

    interface CanvasRendererGobanConfig {
        aga_handicap_scoring?: boolean;
        allow_ko?: boolean;
        allow_self_capture?: boolean;
        allow_superko?: boolean;
        auth?: string;
        automatic_stone_removal?: boolean;
        black_player_id?: number;
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_div?: HTMLElement;
        board_is_repeating?: boolean;
        bounds?: GobanBounds;
        chat_log?: GobanChatLog;
        circle_radius?: number;
        clock?: GameClock;
        connect_to_chat?: number | boolean;
        disable_analysis?: boolean;
        display_width?: number;
        dont_draw_last_move?: boolean;
        dont_show_messages?: boolean;
        double_click_submit?: boolean;
        draw_bottom_labels?: boolean;
        draw_left_labels?: boolean;
        draw_right_labels?: boolean;
        draw_top_labels?: boolean;
        end_time?: number;
        errors?: {
            error: string;
            stack: any;
        }[];
        free_handicap_placement?: boolean;
        game_date?: string;
        game_id?: string | number;
        game_name?: string;
        game_type?: "temporary";
        getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting);
        group_ids?: number[];
        handicap?: number;
        handicap_rank_difference?: number;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        interactive?: boolean;
        isInPushedAnalysis?: (() => boolean);
        isPlayerController?: (() => boolean);
        isPlayerOwner?: (() => boolean);
        is_game_record?: boolean;
        isobranch_hash?: string;
        komi?: number;
        ladder?: number;
        ladder_id?: number;
        last_move_opacity?: number;
        last_move_radius?: number;
        latencies?: {
            [player_id: string]: number;
        };
        leavePushedAnalysis?: (() => void);
        malkovich_log?: GobanChatLog;
        marks?: {
            [mark: string]: string;
        };
        mode?: GobanModes;
        move_tree?: MoveTreeJson;
        move_tree_container?: HTMLElement;
        moves?: GobanMovesArray;
        name?: string;
        needs_sealing?: JGOFSealingIntersection[];
        ogs?: {
            black_dead_stones: string;
            black_seki_eyes: string;
            black_stones: string;
            black_territory: string;
            white_dead_stones: string;
            white_seki_eyes: string;
            white_stones: string;
            white_territory: string;
        };
        ogs_import?: boolean;
        onError?: ((err) => void);
        onScoreEstimationUpdated?: ((winning_color, points) => void);
        one_click_submit?: boolean;
        opponent_plays_first_after_resume?: boolean;
        original_disable_analysis?: boolean;
        original_sgf?: string;
        outcome?: string;
        pause_control?: AdHocPauseControl;
        paused_since?: number;
        phase?: GobanEnginePhase;
        player?: JGOFNumericPlayerColor;
        player_id?: number;
        player_pool?: {
            [id: number]: GobanEnginePlayerEntry;
        };
        players?: {
            black: GobanEnginePlayerEntry;
            white: GobanEnginePlayerEntry;
        };
        puzzle_autoplace_delay?: number;
        puzzle_collection?: number;
        puzzle_description?: string;
        puzzle_opponent_move_mode?: PuzzleOpponentMoveMode;
        puzzle_player_move_mode?: PuzzlePlayerMoveMode;
        puzzle_rank?: number;
        puzzle_type?: string;
        ranked?: boolean;
        removal?: boolean[][];
        removed?: string | JGOFMove[];
        rengo?: boolean;
        rengo_casual_mode?: boolean;
        rengo_teams?: {
            black: GobanEnginePlayerEntry[];
            white: GobanEnginePlayerEntry[];
        };
        review_id?: number;
        reviews?: {
            [review_id: number]: GobanEnginePlayerEntry;
        };
        rules?: GobanEngineRules;
        score?: Score;
        score_handicap?: boolean;
        score_passes?: boolean;
        score_prisoners?: boolean;
        score_stones?: boolean;
        score_territory?: boolean;
        score_territory_in_seki?: boolean;
        server_socket?: GobanSocket<ClientToServer, ServerToClient>;
        spectator_log?: GobanChatLog;
        square_size?: number | "auto" | ((goban) => number);
        stalling_score_estimate?: StallingScoreEstimate;
        start_time?: number;
        stone_font_scale?: number;
        strict_seki_mode?: boolean;
        superko_algorithm?: GobanEngineSuperKoAlgorithm;
        throw_all_errors?: boolean;
        time_control?: JGOFTimeControl;
        time_per_move?: number;
        title_div?: HTMLElement;
        tournament_id?: number;
        username?: string;
        variation_stone_opacity?: number;
        white_must_pass_last?: boolean;
        white_player_id?: number;
        white_prisoners?: number;
        width?: number;
        winner?: number | "black" | "white";
    }

    Hierarchy (view full)

    Properties

    aga_handicap_scoring?: boolean
    allow_ko?: boolean
    allow_self_capture?: boolean
    allow_superko?: boolean
    auth?: string
    automatic_stone_removal?: boolean
    black_player_id?: number
    black_prisoners?: number
    board_div?: HTMLElement
    board_is_repeating?: boolean
    bounds?: GobanBounds
    chat_log?: GobanChatLog
    circle_radius?: number
    clock?: GameClock
    connect_to_chat?: number | boolean
    disable_analysis?: boolean
    display_width?: number
    dont_draw_last_move?: boolean
    dont_show_messages?: boolean
    double_click_submit?: boolean
    draw_bottom_labels?: boolean
    draw_left_labels?: boolean
    draw_right_labels?: boolean
    draw_top_labels?: boolean
    end_time?: number
    errors?: {
        error: string;
        stack: any;
    }[]

    Type declaration

    • error: string
    • stack: any
    free_handicap_placement?: boolean
    game_date?: string
    game_id?: string | number
    game_name?: string
    game_type?: "temporary"
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    group_ids?: number[]
    handicap?: number
    handicap_rank_difference?: number
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    interactive?: boolean
    isInPushedAnalysis?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    is_game_record?: boolean
    isobranch_hash?: string
    komi?: number
    ladder?: number
    ladder_id?: number
    last_move_opacity?: number
    last_move_radius?: number
    latencies?: {
        [player_id: string]: number;
    }

    Type declaration

    • [player_id: string]: number
    leavePushedAnalysis?: (() => void)

    Type declaration

      • (): void
      • Returns void

    malkovich_log?: GobanChatLog
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    mode?: GobanModes
    move_tree?: MoveTreeJson
    move_tree_container?: HTMLElement
    name?: string
    needs_sealing?: JGOFSealingIntersection[]

    Intersections that need to be sealed before scoring should happen

    -
    ogs?: {
        black_dead_stones: string;
        black_seki_eyes: string;
        black_stones: string;
        black_territory: string;
        white_dead_stones: string;
        white_seki_eyes: string;
        white_stones: string;
        white_territory: string;
    }

    Type declaration

    • black_dead_stones: string
    • black_seki_eyes: string
    • black_stones: string
    • black_territory: string
    • white_dead_stones: string
    • white_seki_eyes: string
    • white_stones: string
    • white_territory: string
    ogs_import?: boolean

    Deprecated, I don't think we need this anymore, but need to be sure

    -
    onError?: ((err) => void)

    Type declaration

      • (err): void
      • Parameters

        • err: Error

        Returns void

    onScoreEstimationUpdated?: ((winning_color, points) => void)

    Type declaration

      • (winning_color, points): void
      • Parameters

        • winning_color: "black" | "white"
        • points: number

        Returns void

    one_click_submit?: boolean
    opponent_plays_first_after_resume?: boolean
    original_disable_analysis?: boolean
    original_sgf?: string
    outcome?: string
    pause_control?: AdHocPauseControl
    paused_since?: number
    player_id?: number
    player_pool?: {
        [id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    players?: {
        black: GobanEnginePlayerEntry;
        white: GobanEnginePlayerEntry;
    }

    Type declaration

    puzzle_autoplace_delay?: number
    puzzle_collection?: number
    puzzle_description?: string
    puzzle_opponent_move_mode?: PuzzleOpponentMoveMode
    puzzle_player_move_mode?: PuzzlePlayerMoveMode
    puzzle_rank?: number
    puzzle_type?: string
    ranked?: boolean
    removal?: boolean[][]
    removed?: string | JGOFMove[]

    Removed stones in stone removal phase +

    Properties

    aga_handicap_scoring?: boolean
    allow_ko?: boolean
    allow_self_capture?: boolean
    allow_superko?: boolean
    auth?: string
    automatic_stone_removal?: boolean
    black_player_id?: number
    black_prisoners?: number
    board_div?: HTMLElement
    board_is_repeating?: boolean
    bounds?: GobanBounds
    chat_log?: GobanChatLog
    circle_radius?: number
    clock?: GameClock
    connect_to_chat?: number | boolean
    disable_analysis?: boolean
    display_width?: number
    dont_draw_last_move?: boolean
    dont_show_messages?: boolean
    double_click_submit?: boolean
    draw_bottom_labels?: boolean
    draw_left_labels?: boolean
    draw_right_labels?: boolean
    draw_top_labels?: boolean
    end_time?: number
    errors?: {
        error: string;
        stack: any;
    }[]

    Type declaration

    • error: string
    • stack: any
    free_handicap_placement?: boolean
    game_date?: string
    game_id?: string | number
    game_name?: string
    game_type?: "temporary"
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    group_ids?: number[]
    handicap?: number
    handicap_rank_difference?: number
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    interactive?: boolean
    isInPushedAnalysis?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    is_game_record?: boolean
    isobranch_hash?: string
    komi?: number
    ladder?: number
    ladder_id?: number
    last_move_opacity?: number
    last_move_radius?: number
    latencies?: {
        [player_id: string]: number;
    }

    Type declaration

    • [player_id: string]: number
    leavePushedAnalysis?: (() => void)

    Type declaration

      • (): void
      • Returns void

    malkovich_log?: GobanChatLog
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    mode?: GobanModes
    move_tree?: MoveTreeJson
    move_tree_container?: HTMLElement
    name?: string
    needs_sealing?: JGOFSealingIntersection[]

    Intersections that need to be sealed before scoring should happen

    +
    ogs?: {
        black_dead_stones: string;
        black_seki_eyes: string;
        black_stones: string;
        black_territory: string;
        white_dead_stones: string;
        white_seki_eyes: string;
        white_stones: string;
        white_territory: string;
    }

    Type declaration

    • black_dead_stones: string
    • black_seki_eyes: string
    • black_stones: string
    • black_territory: string
    • white_dead_stones: string
    • white_seki_eyes: string
    • white_stones: string
    • white_territory: string
    ogs_import?: boolean

    Deprecated, I don't think we need this anymore, but need to be sure

    +
    onError?: ((err) => void)

    Type declaration

      • (err): void
      • Parameters

        • err: Error

        Returns void

    onScoreEstimationUpdated?: ((winning_color, points) => void)

    Type declaration

      • (winning_color, points): void
      • Parameters

        • winning_color: "black" | "white"
        • points: number

        Returns void

    one_click_submit?: boolean
    opponent_plays_first_after_resume?: boolean
    original_disable_analysis?: boolean
    original_sgf?: string
    outcome?: string
    pause_control?: AdHocPauseControl
    paused_since?: number
    player_id?: number
    player_pool?: {
        [id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    players?: {
        black: GobanEnginePlayerEntry;
        white: GobanEnginePlayerEntry;
    }

    Type declaration

    puzzle_autoplace_delay?: number
    puzzle_collection?: number
    puzzle_description?: string
    puzzle_opponent_move_mode?: PuzzleOpponentMoveMode
    puzzle_player_move_mode?: PuzzlePlayerMoveMode
    puzzle_rank?: number
    puzzle_type?: string
    ranked?: boolean
    removal?: boolean[][]
    removed?: string | JGOFMove[]

    Removed stones in stone removal phase Passing an array of JGOFMove objects is preferred, the string format exists for historical backwards compatibility. It is an encoded move string, e.g. "aa" for A19

    -
    rengo?: boolean
    rengo_casual_mode?: boolean
    rengo_teams?: {
        black: GobanEnginePlayerEntry[];
        white: GobanEnginePlayerEntry[];
    }

    Type declaration

    review_id?: number
    reviews?: {
        [review_id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    score?: Score
    score_handicap?: boolean
    score_passes?: boolean
    score_prisoners?: boolean
    score_stones?: boolean
    score_territory?: boolean
    score_territory_in_seki?: boolean
    spectator_log?: GobanChatLog
    square_size?: number | "auto" | ((goban) => number)

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    stalling_score_estimate?: StallingScoreEstimate
    start_time?: number
    strict_seki_mode?: boolean
    superko_algorithm?: GobanEngineSuperKoAlgorithm
    throw_all_errors?: boolean

    When loading initial state or moves, by default GobanEngine will try and +

    rengo?: boolean
    rengo_casual_mode?: boolean
    rengo_teams?: {
        black: GobanEnginePlayerEntry[];
        white: GobanEnginePlayerEntry[];
    }

    Type declaration

    review_id?: number
    reviews?: {
        [review_id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    score?: Score
    score_handicap?: boolean
    score_passes?: boolean
    score_prisoners?: boolean
    score_stones?: boolean
    score_territory?: boolean
    score_territory_in_seki?: boolean
    spectator_log?: GobanChatLog
    square_size?: number | "auto" | ((goban) => number)

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    stalling_score_estimate?: StallingScoreEstimate
    start_time?: number
    stone_font_scale?: number
    strict_seki_mode?: boolean
    superko_algorithm?: GobanEngineSuperKoAlgorithm
    throw_all_errors?: boolean

    When loading initial state or moves, by default GobanEngine will try and handle bad data by just resorting to 'edit placing' moves. If this is true, then those errors are thrown instead.

    -
    time_control?: JGOFTimeControl
    time_per_move?: number
    title_div?: HTMLElement
    tournament_id?: number
    username?: string
    variation_stone_opacity?: number
    white_must_pass_last?: boolean
    white_player_id?: number
    white_prisoners?: number
    width?: number
    winner?: number | "black" | "white"
    \ No newline at end of file +
    time_control?: JGOFTimeControl
    time_per_move?: number
    title_div?: HTMLElement
    tournament_id?: number
    username?: string
    variation_stone_opacity?: number
    white_must_pass_last?: boolean
    white_player_id?: number
    white_prisoners?: number
    width?: number
    winner?: number | "black" | "white"
    \ No newline at end of file diff --git a/docs/interfaces/ColoredCircle.html b/docs/interfaces/ColoredCircle.html index a6921011..732be3db 100644 --- a/docs/interfaces/ColoredCircle.html +++ b/docs/interfaces/ColoredCircle.html @@ -1,5 +1,5 @@ -ColoredCircle | goban

    Interface ColoredCircle

    interface ColoredCircle {
        border_color?: string;
        border_width?: number;
        color: string;
        move: JGOFIntersection;
    }

    Properties

    border_color? +ColoredCircle | goban

    Interface ColoredCircle

    interface ColoredCircle {
        border_color?: string;
        border_width?: number;
        color: string;
        move: JGOFIntersection;
    }

    Properties

    border_color?: string
    border_width?: number
    color: string
    \ No newline at end of file +

    Properties

    border_color?: string
    border_width?: number
    color: string
    \ No newline at end of file diff --git a/docs/interfaces/ConditionalMoveResponseTree.html b/docs/interfaces/ConditionalMoveResponseTree.html index ab9df23e..a9e33c7a 100644 --- a/docs/interfaces/ConditionalMoveResponseTree.html +++ b/docs/interfaces/ConditionalMoveResponseTree.html @@ -1 +1 @@ -ConditionalMoveResponseTree | goban

    Interface ConditionalMoveResponseTree

    interface ConditionalMoveResponseTree {
        [move: string]: ConditionalMoveResponse;
    }

    Indexable

    [move: string]: ConditionalMoveResponse
    \ No newline at end of file +ConditionalMoveResponseTree | goban

    Interface ConditionalMoveResponseTree

    interface ConditionalMoveResponseTree {
        [move: string]: ConditionalMoveResponse;
    }

    Indexable

    [move: string]: ConditionalMoveResponse
    \ No newline at end of file diff --git a/docs/interfaces/GobanBounds.html b/docs/interfaces/GobanBounds.html index 66091132..1127cb06 100644 --- a/docs/interfaces/GobanBounds.html +++ b/docs/interfaces/GobanBounds.html @@ -1,5 +1,5 @@ -GobanBounds | goban

    Interface GobanBounds

    interface GobanBounds {
        bottom: number;
        left: number;
        right: number;
        top: number;
    }

    Properties

    bottom +GobanBounds | goban

    Interface GobanBounds

    interface GobanBounds {
        bottom: number;
        left: number;
        right: number;
        top: number;
    }

    Properties

    Properties

    bottom: number
    left: number
    right: number
    top: number
    \ No newline at end of file +

    Properties

    bottom: number
    left: number
    right: number
    top: number
    \ No newline at end of file diff --git a/docs/interfaces/GobanCallbacks.html b/docs/interfaces/GobanCallbacks.html index 39f4e192..bcd212c9 100644 --- a/docs/interfaces/GobanCallbacks.html +++ b/docs/interfaces/GobanCallbacks.html @@ -1,4 +1,4 @@ -GobanCallbacks | goban

    Interface GobanCallbacks

    interface GobanCallbacks {
        addCoordinatesToChatInput?: ((coordinates) => void);
        canvasAllocationErrorHandler?: ((note, error, extra) => void);
        customBlackStoneColor?: (() => string);
        customBlackStoneUrl?: (() => string);
        customBlackTextColor?: (() => string);
        customBoardColor?: (() => string);
        customBoardLineColor?: (() => string);
        customBoardUrl?: (() => string);
        customWhiteStoneColor?: (() => string);
        customWhiteStoneUrl?: (() => string);
        customWhiteTextColor?: (() => string);
        defaultConfig?: (() => any);
        getCDNReleaseBase?: (() => string);
        getClockDrift?: (() => number);
        getCoordinateDisplaySystem?: (() => "A1" | "1-1");
        getLocation?: (() => string);
        getMoveTreeNumbering?: (() => "none" | "move-coordinates" | "move-number");
        getNetworkLatency?: (() => number);
        getSelectedThemes?: (() => GobanSelectedThemes);
        getShowUndoRequestIndicator?: (() => boolean);
        getShowVariationMoveNumbers?: (() => boolean);
        getSoundEnabled?: (() => boolean);
        getSoundVolume?: (() => number);
        isAnalysisDisabled?: ((goban, perGameSettingAppliesToNonPlayers) => boolean);
        toast?: ((message_id, duration) => void);
        updateScoreEstimation?: ((est_winning_color, number_of_points) => void);
        watchSelectedThemes?: ((cb) => {
            remove: (() => any);
        });
    }

    Properties

    addCoordinatesToChatInput? +GobanCallbacks | goban

    Interface GobanCallbacks

    interface GobanCallbacks {
        addCoordinatesToChatInput?: ((coordinates) => void);
        canvasAllocationErrorHandler?: ((note, error, extra) => void);
        customBlackStoneColor?: (() => string);
        customBlackStoneUrl?: (() => string);
        customBlackTextColor?: (() => string);
        customBoardColor?: (() => string);
        customBoardLineColor?: (() => string);
        customBoardUrl?: (() => string);
        customWhiteStoneColor?: (() => string);
        customWhiteStoneUrl?: (() => string);
        customWhiteTextColor?: (() => string);
        defaultConfig?: (() => any);
        getCDNReleaseBase?: (() => string);
        getClockDrift?: (() => number);
        getCoordinateDisplaySystem?: (() => "A1" | "1-1");
        getLocation?: (() => string);
        getMoveTreeNumbering?: (() => "none" | "move-coordinates" | "move-number");
        getNetworkLatency?: (() => number);
        getSelectedThemes?: (() => GobanSelectedThemes);
        getShowUndoRequestIndicator?: (() => boolean);
        getShowVariationMoveNumbers?: (() => boolean);
        getSoundEnabled?: (() => boolean);
        getSoundVolume?: (() => number);
        getStoneFontScale?: (() => number);
        isAnalysisDisabled?: ((goban, perGameSettingAppliesToNonPlayers) => boolean);
        toast?: ((message_id, duration) => void);
        updateScoreEstimation?: ((est_winning_color, number_of_points) => void);
        watchSelectedThemes?: ((cb) => {
            remove: (() => any);
        });
    }

    Properties

    addCoordinatesToChatInput?: ((coordinates) => void)

    Type declaration

      • (coordinates): void
      • Parameters

        • coordinates: string

        Returns void

    canvasAllocationErrorHandler?: ((note, error, extra) => void)

    Type declaration

      • (note, error, extra): void
      • Parameters

        • note: null | string
        • error: Error
        • extra: {
              height?: string | number;
              total_allocations_made: number;
              total_pixels_allocated: number;
              width?: string | number;
          }
          • Optional height?: string | number
          • total_allocations_made: number
          • total_pixels_allocated: number
          • Optional width?: string | number

        Returns void

    customBlackStoneColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBlackStoneUrl?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBlackTextColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBoardColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBoardLineColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBoardUrl?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customWhiteStoneColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customWhiteStoneUrl?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customWhiteTextColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    defaultConfig?: (() => any)

    Type declaration

      • (): any
      • Returns any

    getCDNReleaseBase?: (() => string)

    Type declaration

      • (): string
      • Returns string

    getClockDrift?: (() => number)

    Type declaration

      • (): number
      • Returns number

    getCoordinateDisplaySystem?: (() => "A1" | "1-1")

    Type declaration

      • (): "A1" | "1-1"
      • Returns "A1" | "1-1"

    getLocation?: (() => string)

    Type declaration

      • (): string
      • Returns string

    getMoveTreeNumbering?: (() => "none" | "move-coordinates" | "move-number")

    Type declaration

      • (): "none" | "move-coordinates" | "move-number"
      • Returns "none" | "move-coordinates" | "move-number"

    getNetworkLatency?: (() => number)

    Type declaration

      • (): number
      • Returns number

    getSelectedThemes?: (() => GobanSelectedThemes)

    Type declaration

    getShowUndoRequestIndicator?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    getShowVariationMoveNumbers?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    getSoundEnabled?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    getSoundVolume?: (() => number)

    Type declaration

      • (): number
      • Returns number

    isAnalysisDisabled?: ((goban, perGameSettingAppliesToNonPlayers) => boolean)

    Type declaration

      • (goban, perGameSettingAppliesToNonPlayers): boolean
      • Parameters

        • goban: GobanBase
        • perGameSettingAppliesToNonPlayers: boolean

        Returns boolean

    toast?: ((message_id, duration) => void)

    Type declaration

      • (message_id, duration): void
      • Parameters

        • message_id: string
        • duration: number

        Returns void

    updateScoreEstimation?: ((est_winning_color, number_of_points) => void)

    Type declaration

      • (est_winning_color, number_of_points): void
      • Parameters

        • est_winning_color: "black" | "white"
        • number_of_points: number

        Returns void

    watchSelectedThemes?: ((cb) => {
        remove: (() => any);
    })

    Type declaration

      • (cb): {
            remove: (() => any);
        }
      • Parameters

        Returns {
            remove: (() => any);
        }

        • remove: (() => any)
            • (): any
            • Returns any

    \ No newline at end of file +

    Properties

    addCoordinatesToChatInput?: ((coordinates) => void)

    Type declaration

      • (coordinates): void
      • Parameters

        • coordinates: string

        Returns void

    canvasAllocationErrorHandler?: ((note, error, extra) => void)

    Type declaration

      • (note, error, extra): void
      • Parameters

        • note: null | string
        • error: Error
        • extra: {
              height?: string | number;
              total_allocations_made: number;
              total_pixels_allocated: number;
              width?: string | number;
          }
          • Optional height?: string | number
          • total_allocations_made: number
          • total_pixels_allocated: number
          • Optional width?: string | number

        Returns void

    customBlackStoneColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBlackStoneUrl?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBlackTextColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBoardColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBoardLineColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customBoardUrl?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customWhiteStoneColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customWhiteStoneUrl?: (() => string)

    Type declaration

      • (): string
      • Returns string

    customWhiteTextColor?: (() => string)

    Type declaration

      • (): string
      • Returns string

    defaultConfig?: (() => any)

    Type declaration

      • (): any
      • Returns any

    getCDNReleaseBase?: (() => string)

    Type declaration

      • (): string
      • Returns string

    getClockDrift?: (() => number)

    Type declaration

      • (): number
      • Returns number

    getCoordinateDisplaySystem?: (() => "A1" | "1-1")

    Type declaration

      • (): "A1" | "1-1"
      • Returns "A1" | "1-1"

    getLocation?: (() => string)

    Type declaration

      • (): string
      • Returns string

    getMoveTreeNumbering?: (() => "none" | "move-coordinates" | "move-number")

    Type declaration

      • (): "none" | "move-coordinates" | "move-number"
      • Returns "none" | "move-coordinates" | "move-number"

    getNetworkLatency?: (() => number)

    Type declaration

      • (): number
      • Returns number

    getSelectedThemes?: (() => GobanSelectedThemes)

    Type declaration

    getShowUndoRequestIndicator?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    getShowVariationMoveNumbers?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    getSoundEnabled?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    getSoundVolume?: (() => number)

    Type declaration

      • (): number
      • Returns number

    getStoneFontScale?: (() => number)

    Type declaration

      • (): number
      • Returns number

    isAnalysisDisabled?: ((goban, perGameSettingAppliesToNonPlayers) => boolean)

    Type declaration

      • (goban, perGameSettingAppliesToNonPlayers): boolean
      • Parameters

        • goban: GobanBase
        • perGameSettingAppliesToNonPlayers: boolean

        Returns boolean

    toast?: ((message_id, duration) => void)

    Type declaration

      • (message_id, duration): void
      • Parameters

        • message_id: string
        • duration: number

        Returns void

    updateScoreEstimation?: ((est_winning_color, number_of_points) => void)

    Type declaration

      • (est_winning_color, number_of_points): void
      • Parameters

        • est_winning_color: "black" | "white"
        • number_of_points: number

        Returns void

    watchSelectedThemes?: ((cb) => {
        remove: (() => any);
    })

    Type declaration

      • (cb): {
            remove: (() => any);
        }
      • Parameters

        Returns {
            remove: (() => any);
        }

        • remove: (() => any)
            • (): any
            • Returns any

    \ No newline at end of file diff --git a/docs/interfaces/GobanCanvasInterface.html b/docs/interfaces/GobanCanvasInterface.html index 217ef254..10769671 100644 --- a/docs/interfaces/GobanCanvasInterface.html +++ b/docs/interfaces/GobanCanvasInterface.html @@ -1,4 +1,4 @@ -GobanCanvasInterface | goban

    Interface GobanCanvasInterface

    interface GobanCanvasInterface {
        engine: GobanEngine;
        move_tree_container?: HTMLElement;
        clearAnalysisDrawing(): void;
        clearMessage(): void;
        destroy(): void;
        disablePen(): void;
        drawPenMarks(pen_marks): void;
        drawSquare(i, j): void;
        enablePen(): void;
        move_tree_bindCanvasEvents(canvas): void;
        move_tree_redraw(no_warp?): void;
        setByoYomiLabel(label): void;
        setLastMoveOpacity(opacity): void;
        setMoveTreeContainer(container): void;
        showMessage(message_id_or_error, parameters?, timeout?): void;
    }

    Implemented by

    Properties

    engine +GobanCanvasInterface | goban

    Interface GobanCanvasInterface

    interface GobanCanvasInterface {
        engine: GobanEngine;
        move_tree_container?: HTMLElement;
        clearAnalysisDrawing(): void;
        clearMessage(): void;
        destroy(): void;
        disablePen(): void;
        drawPenMarks(pen_marks): void;
        drawSquare(i, j): void;
        enablePen(): void;
        move_tree_bindCanvasEvents(canvas): void;
        move_tree_redraw(no_warp?): void;
        setByoYomiLabel(label): void;
        setLastMoveOpacity(opacity): void;
        setMoveTreeContainer(container): void;
        showMessage(message_id_or_error, parameters?, timeout?): void;
    }

    Implemented by

    Properties

    engine: GobanEngine
    move_tree_container?: HTMLElement

    Methods

    • Parameters

      • message_id_or_error: MessageID
      • Optional parameters: {
            [key: string]: any;
        }
        • [key: string]: any
      • Optional timeout: number

      Returns void

    \ No newline at end of file +

    Properties

    engine: GobanEngine
    move_tree_container?: HTMLElement

    Methods

    • Parameters

      • message_id_or_error: MessageID
      • Optional parameters: {
            [key: string]: any;
        }
        • [key: string]: any
      • Optional timeout: number

      Returns void

    \ No newline at end of file diff --git a/docs/interfaces/GobanConfig.html b/docs/interfaces/GobanConfig.html index c66e5839..8b7c0f0b 100644 --- a/docs/interfaces/GobanConfig.html +++ b/docs/interfaces/GobanConfig.html @@ -1,4 +1,4 @@ -GobanConfig | goban

    Interface GobanConfig

    interface GobanConfig {
        aga_handicap_scoring?: boolean;
        allow_ko?: boolean;
        allow_self_capture?: boolean;
        allow_superko?: boolean;
        auth?: string;
        automatic_stone_removal?: boolean;
        black_player_id?: number;
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_is_repeating?: boolean;
        bounds?: GobanBounds;
        chat_log?: GobanChatLog;
        circle_radius?: number;
        clock?: GameClock;
        connect_to_chat?: number | boolean;
        disable_analysis?: boolean;
        display_width?: number;
        dont_draw_last_move?: boolean;
        dont_show_messages?: boolean;
        double_click_submit?: boolean;
        draw_bottom_labels?: boolean;
        draw_left_labels?: boolean;
        draw_right_labels?: boolean;
        draw_top_labels?: boolean;
        end_time?: number;
        errors?: {
            error: string;
            stack: any;
        }[];
        free_handicap_placement?: boolean;
        game_date?: string;
        game_id?: string | number;
        game_name?: string;
        game_type?: "temporary";
        getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting);
        group_ids?: number[];
        handicap?: number;
        handicap_rank_difference?: number;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        interactive?: boolean;
        isInPushedAnalysis?: (() => boolean);
        isPlayerController?: (() => boolean);
        isPlayerOwner?: (() => boolean);
        is_game_record?: boolean;
        isobranch_hash?: string;
        komi?: number;
        ladder?: number;
        ladder_id?: number;
        last_move_radius?: number;
        latencies?: {
            [player_id: string]: number;
        };
        leavePushedAnalysis?: (() => void);
        malkovich_log?: GobanChatLog;
        marks?: {
            [mark: string]: string;
        };
        mode?: GobanModes;
        move_tree?: MoveTreeJson;
        moves?: GobanMovesArray;
        name?: string;
        needs_sealing?: JGOFSealingIntersection[];
        ogs?: {
            black_dead_stones: string;
            black_seki_eyes: string;
            black_stones: string;
            black_territory: string;
            white_dead_stones: string;
            white_seki_eyes: string;
            white_stones: string;
            white_territory: string;
        };
        ogs_import?: boolean;
        onError?: ((err) => void);
        onScoreEstimationUpdated?: ((winning_color, points) => void);
        one_click_submit?: boolean;
        opponent_plays_first_after_resume?: boolean;
        original_disable_analysis?: boolean;
        original_sgf?: string;
        outcome?: string;
        pause_control?: AdHocPauseControl;
        paused_since?: number;
        phase?: GobanEnginePhase;
        player?: JGOFNumericPlayerColor;
        player_id?: number;
        player_pool?: {
            [id: number]: GobanEnginePlayerEntry;
        };
        players?: {
            black: GobanEnginePlayerEntry;
            white: GobanEnginePlayerEntry;
        };
        puzzle_autoplace_delay?: number;
        puzzle_collection?: number;
        puzzle_description?: string;
        puzzle_opponent_move_mode?: PuzzleOpponentMoveMode;
        puzzle_player_move_mode?: PuzzlePlayerMoveMode;
        puzzle_rank?: number;
        puzzle_type?: string;
        ranked?: boolean;
        removal?: boolean[][];
        removed?: string | JGOFMove[];
        rengo?: boolean;
        rengo_casual_mode?: boolean;
        rengo_teams?: {
            black: GobanEnginePlayerEntry[];
            white: GobanEnginePlayerEntry[];
        };
        review_id?: number;
        reviews?: {
            [review_id: number]: GobanEnginePlayerEntry;
        };
        rules?: GobanEngineRules;
        score?: Score;
        score_handicap?: boolean;
        score_passes?: boolean;
        score_prisoners?: boolean;
        score_stones?: boolean;
        score_territory?: boolean;
        score_territory_in_seki?: boolean;
        server_socket?: GobanSocket<ClientToServer, ServerToClient>;
        spectator_log?: GobanChatLog;
        square_size?: number | "auto" | ((goban) => number);
        stalling_score_estimate?: StallingScoreEstimate;
        start_time?: number;
        strict_seki_mode?: boolean;
        superko_algorithm?: GobanEngineSuperKoAlgorithm;
        throw_all_errors?: boolean;
        time_control?: JGOFTimeControl;
        time_per_move?: number;
        tournament_id?: number;
        username?: string;
        variation_stone_opacity?: number;
        white_must_pass_last?: boolean;
        white_player_id?: number;
        white_prisoners?: number;
        width?: number;
        winner?: number | "black" | "white";
    }

    Hierarchy (view full)

    Properties

    aga_handicap_scoring? +GobanConfig | goban

    Interface GobanConfig

    interface GobanConfig {
        aga_handicap_scoring?: boolean;
        allow_ko?: boolean;
        allow_self_capture?: boolean;
        allow_superko?: boolean;
        auth?: string;
        automatic_stone_removal?: boolean;
        black_player_id?: number;
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_is_repeating?: boolean;
        bounds?: GobanBounds;
        chat_log?: GobanChatLog;
        circle_radius?: number;
        clock?: GameClock;
        connect_to_chat?: number | boolean;
        disable_analysis?: boolean;
        display_width?: number;
        dont_draw_last_move?: boolean;
        dont_show_messages?: boolean;
        double_click_submit?: boolean;
        draw_bottom_labels?: boolean;
        draw_left_labels?: boolean;
        draw_right_labels?: boolean;
        draw_top_labels?: boolean;
        end_time?: number;
        errors?: {
            error: string;
            stack: any;
        }[];
        free_handicap_placement?: boolean;
        game_date?: string;
        game_id?: string | number;
        game_name?: string;
        game_type?: "temporary";
        getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting);
        group_ids?: number[];
        handicap?: number;
        handicap_rank_difference?: number;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        interactive?: boolean;
        isInPushedAnalysis?: (() => boolean);
        isPlayerController?: (() => boolean);
        isPlayerOwner?: (() => boolean);
        is_game_record?: boolean;
        isobranch_hash?: string;
        komi?: number;
        ladder?: number;
        ladder_id?: number;
        last_move_radius?: number;
        latencies?: {
            [player_id: string]: number;
        };
        leavePushedAnalysis?: (() => void);
        malkovich_log?: GobanChatLog;
        marks?: {
            [mark: string]: string;
        };
        mode?: GobanModes;
        move_tree?: MoveTreeJson;
        moves?: GobanMovesArray;
        name?: string;
        needs_sealing?: JGOFSealingIntersection[];
        ogs?: {
            black_dead_stones: string;
            black_seki_eyes: string;
            black_stones: string;
            black_territory: string;
            white_dead_stones: string;
            white_seki_eyes: string;
            white_stones: string;
            white_territory: string;
        };
        ogs_import?: boolean;
        onError?: ((err) => void);
        onScoreEstimationUpdated?: ((winning_color, points) => void);
        one_click_submit?: boolean;
        opponent_plays_first_after_resume?: boolean;
        original_disable_analysis?: boolean;
        original_sgf?: string;
        outcome?: string;
        pause_control?: AdHocPauseControl;
        paused_since?: number;
        phase?: GobanEnginePhase;
        player?: JGOFNumericPlayerColor;
        player_id?: number;
        player_pool?: {
            [id: number]: GobanEnginePlayerEntry;
        };
        players?: {
            black: GobanEnginePlayerEntry;
            white: GobanEnginePlayerEntry;
        };
        puzzle_autoplace_delay?: number;
        puzzle_collection?: number;
        puzzle_description?: string;
        puzzle_opponent_move_mode?: PuzzleOpponentMoveMode;
        puzzle_player_move_mode?: PuzzlePlayerMoveMode;
        puzzle_rank?: number;
        puzzle_type?: string;
        ranked?: boolean;
        removal?: boolean[][];
        removed?: string | JGOFMove[];
        rengo?: boolean;
        rengo_casual_mode?: boolean;
        rengo_teams?: {
            black: GobanEnginePlayerEntry[];
            white: GobanEnginePlayerEntry[];
        };
        review_id?: number;
        reviews?: {
            [review_id: number]: GobanEnginePlayerEntry;
        };
        rules?: GobanEngineRules;
        score?: Score;
        score_handicap?: boolean;
        score_passes?: boolean;
        score_prisoners?: boolean;
        score_stones?: boolean;
        score_territory?: boolean;
        score_territory_in_seki?: boolean;
        server_socket?: GobanSocket<ClientToServer, ServerToClient>;
        spectator_log?: GobanChatLog;
        square_size?: number | "auto" | ((goban) => number);
        stalling_score_estimate?: StallingScoreEstimate;
        start_time?: number;
        stone_font_scale?: number;
        strict_seki_mode?: boolean;
        superko_algorithm?: GobanEngineSuperKoAlgorithm;
        throw_all_errors?: boolean;
        time_control?: JGOFTimeControl;
        time_per_move?: number;
        tournament_id?: number;
        username?: string;
        variation_stone_opacity?: number;
        white_must_pass_last?: boolean;
        white_player_id?: number;
        white_prisoners?: number;
        width?: number;
        winner?: number | "black" | "white";
    }

    Hierarchy (view full)

    Properties

    aga_handicap_scoring?: boolean
    allow_ko?: boolean
    allow_self_capture?: boolean
    allow_superko?: boolean
    auth?: string
    automatic_stone_removal?: boolean
    black_player_id?: number
    black_prisoners?: number
    board_is_repeating?: boolean
    bounds?: GobanBounds
    chat_log?: GobanChatLog
    circle_radius?: number
    clock?: GameClock
    connect_to_chat?: number | boolean
    disable_analysis?: boolean
    display_width?: number
    dont_draw_last_move?: boolean
    dont_show_messages?: boolean
    double_click_submit?: boolean
    draw_bottom_labels?: boolean
    draw_left_labels?: boolean
    draw_right_labels?: boolean
    draw_top_labels?: boolean
    end_time?: number
    errors?: {
        error: string;
        stack: any;
    }[]

    Type declaration

    • error: string
    • stack: any
    free_handicap_placement?: boolean
    game_date?: string
    game_id?: string | number
    game_name?: string
    game_type?: "temporary"
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    group_ids?: number[]
    handicap?: number
    handicap_rank_difference?: number
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    interactive?: boolean
    isInPushedAnalysis?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    is_game_record?: boolean
    isobranch_hash?: string
    komi?: number
    ladder?: number
    ladder_id?: number
    last_move_radius?: number
    latencies?: {
        [player_id: string]: number;
    }

    Type declaration

    • [player_id: string]: number
    leavePushedAnalysis?: (() => void)

    Type declaration

      • (): void
      • Returns void

    malkovich_log?: GobanChatLog
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    mode?: GobanModes
    move_tree?: MoveTreeJson
    name?: string
    needs_sealing?: JGOFSealingIntersection[]

    Intersections that need to be sealed before scoring should happen

    -
    ogs?: {
        black_dead_stones: string;
        black_seki_eyes: string;
        black_stones: string;
        black_territory: string;
        white_dead_stones: string;
        white_seki_eyes: string;
        white_stones: string;
        white_territory: string;
    }

    Type declaration

    • black_dead_stones: string
    • black_seki_eyes: string
    • black_stones: string
    • black_territory: string
    • white_dead_stones: string
    • white_seki_eyes: string
    • white_stones: string
    • white_territory: string
    ogs_import?: boolean

    Deprecated, I don't think we need this anymore, but need to be sure

    -
    onError?: ((err) => void)

    Type declaration

      • (err): void
      • Parameters

        • err: Error

        Returns void

    onScoreEstimationUpdated?: ((winning_color, points) => void)

    Type declaration

      • (winning_color, points): void
      • Parameters

        • winning_color: "black" | "white"
        • points: number

        Returns void

    one_click_submit?: boolean
    opponent_plays_first_after_resume?: boolean
    original_disable_analysis?: boolean
    original_sgf?: string
    outcome?: string
    pause_control?: AdHocPauseControl
    paused_since?: number
    player_id?: number
    player_pool?: {
        [id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    players?: {
        black: GobanEnginePlayerEntry;
        white: GobanEnginePlayerEntry;
    }

    Type declaration

    puzzle_autoplace_delay?: number
    puzzle_collection?: number
    puzzle_description?: string
    puzzle_opponent_move_mode?: PuzzleOpponentMoveMode
    puzzle_player_move_mode?: PuzzlePlayerMoveMode
    puzzle_rank?: number
    puzzle_type?: string
    ranked?: boolean
    removal?: boolean[][]
    removed?: string | JGOFMove[]

    Removed stones in stone removal phase +

    Properties

    aga_handicap_scoring?: boolean
    allow_ko?: boolean
    allow_self_capture?: boolean
    allow_superko?: boolean
    auth?: string
    automatic_stone_removal?: boolean
    black_player_id?: number
    black_prisoners?: number
    board_is_repeating?: boolean
    bounds?: GobanBounds
    chat_log?: GobanChatLog
    circle_radius?: number
    clock?: GameClock
    connect_to_chat?: number | boolean
    disable_analysis?: boolean
    display_width?: number
    dont_draw_last_move?: boolean
    dont_show_messages?: boolean
    double_click_submit?: boolean
    draw_bottom_labels?: boolean
    draw_left_labels?: boolean
    draw_right_labels?: boolean
    draw_top_labels?: boolean
    end_time?: number
    errors?: {
        error: string;
        stack: any;
    }[]

    Type declaration

    • error: string
    • stack: any
    free_handicap_placement?: boolean
    game_date?: string
    game_id?: string | number
    game_name?: string
    game_type?: "temporary"
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    group_ids?: number[]
    handicap?: number
    handicap_rank_difference?: number
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    interactive?: boolean
    isInPushedAnalysis?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    is_game_record?: boolean
    isobranch_hash?: string
    komi?: number
    ladder?: number
    ladder_id?: number
    last_move_radius?: number
    latencies?: {
        [player_id: string]: number;
    }

    Type declaration

    • [player_id: string]: number
    leavePushedAnalysis?: (() => void)

    Type declaration

      • (): void
      • Returns void

    malkovich_log?: GobanChatLog
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    mode?: GobanModes
    move_tree?: MoveTreeJson
    name?: string
    needs_sealing?: JGOFSealingIntersection[]

    Intersections that need to be sealed before scoring should happen

    +
    ogs?: {
        black_dead_stones: string;
        black_seki_eyes: string;
        black_stones: string;
        black_territory: string;
        white_dead_stones: string;
        white_seki_eyes: string;
        white_stones: string;
        white_territory: string;
    }

    Type declaration

    • black_dead_stones: string
    • black_seki_eyes: string
    • black_stones: string
    • black_territory: string
    • white_dead_stones: string
    • white_seki_eyes: string
    • white_stones: string
    • white_territory: string
    ogs_import?: boolean

    Deprecated, I don't think we need this anymore, but need to be sure

    +
    onError?: ((err) => void)

    Type declaration

      • (err): void
      • Parameters

        • err: Error

        Returns void

    onScoreEstimationUpdated?: ((winning_color, points) => void)

    Type declaration

      • (winning_color, points): void
      • Parameters

        • winning_color: "black" | "white"
        • points: number

        Returns void

    one_click_submit?: boolean
    opponent_plays_first_after_resume?: boolean
    original_disable_analysis?: boolean
    original_sgf?: string
    outcome?: string
    pause_control?: AdHocPauseControl
    paused_since?: number
    player_id?: number
    player_pool?: {
        [id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    players?: {
        black: GobanEnginePlayerEntry;
        white: GobanEnginePlayerEntry;
    }

    Type declaration

    puzzle_autoplace_delay?: number
    puzzle_collection?: number
    puzzle_description?: string
    puzzle_opponent_move_mode?: PuzzleOpponentMoveMode
    puzzle_player_move_mode?: PuzzlePlayerMoveMode
    puzzle_rank?: number
    puzzle_type?: string
    ranked?: boolean
    removal?: boolean[][]
    removed?: string | JGOFMove[]

    Removed stones in stone removal phase Passing an array of JGOFMove objects is preferred, the string format exists for historical backwards compatibility. It is an encoded move string, e.g. "aa" for A19

    -
    rengo?: boolean
    rengo_casual_mode?: boolean
    rengo_teams?: {
        black: GobanEnginePlayerEntry[];
        white: GobanEnginePlayerEntry[];
    }

    Type declaration

    review_id?: number
    reviews?: {
        [review_id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    score?: Score
    score_handicap?: boolean
    score_passes?: boolean
    score_prisoners?: boolean
    score_stones?: boolean
    score_territory?: boolean
    score_territory_in_seki?: boolean
    spectator_log?: GobanChatLog
    square_size?: number | "auto" | ((goban) => number)

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    stalling_score_estimate?: StallingScoreEstimate
    start_time?: number
    strict_seki_mode?: boolean
    superko_algorithm?: GobanEngineSuperKoAlgorithm
    throw_all_errors?: boolean

    When loading initial state or moves, by default GobanEngine will try and +

    rengo?: boolean
    rengo_casual_mode?: boolean
    rengo_teams?: {
        black: GobanEnginePlayerEntry[];
        white: GobanEnginePlayerEntry[];
    }

    Type declaration

    review_id?: number
    reviews?: {
        [review_id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    score?: Score
    score_handicap?: boolean
    score_passes?: boolean
    score_prisoners?: boolean
    score_stones?: boolean
    score_territory?: boolean
    score_territory_in_seki?: boolean
    spectator_log?: GobanChatLog
    square_size?: number | "auto" | ((goban) => number)

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    stalling_score_estimate?: StallingScoreEstimate
    start_time?: number
    stone_font_scale?: number
    strict_seki_mode?: boolean
    superko_algorithm?: GobanEngineSuperKoAlgorithm
    throw_all_errors?: boolean

    When loading initial state or moves, by default GobanEngine will try and handle bad data by just resorting to 'edit placing' moves. If this is true, then those errors are thrown instead.

    -
    time_control?: JGOFTimeControl
    time_per_move?: number
    tournament_id?: number
    username?: string
    variation_stone_opacity?: number
    white_must_pass_last?: boolean
    white_player_id?: number
    white_prisoners?: number
    width?: number
    winner?: number | "black" | "white"
    \ No newline at end of file +
    time_control?: JGOFTimeControl
    time_per_move?: number
    tournament_id?: number
    username?: string
    variation_stone_opacity?: number
    white_must_pass_last?: boolean
    white_player_id?: number
    white_prisoners?: number
    width?: number
    winner?: number | "black" | "white"
    \ No newline at end of file diff --git a/docs/interfaces/GobanEngineConfig.html b/docs/interfaces/GobanEngineConfig.html index fb4f5847..969c4cae 100644 --- a/docs/interfaces/GobanEngineConfig.html +++ b/docs/interfaces/GobanEngineConfig.html @@ -1,4 +1,4 @@ -GobanEngineConfig | goban

    Interface GobanEngineConfig

    interface GobanEngineConfig {
        aga_handicap_scoring?: boolean;
        allow_ko?: boolean;
        allow_self_capture?: boolean;
        allow_superko?: boolean;
        automatic_stone_removal?: boolean;
        black_player_id?: number;
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_is_repeating?: boolean;
        clock?: GameClock;
        disable_analysis?: boolean;
        end_time?: number;
        errors?: {
            error: string;
            stack: any;
        }[];
        free_handicap_placement?: boolean;
        game_date?: string;
        game_id?: string | number;
        game_name?: string;
        group_ids?: number[];
        handicap?: number;
        handicap_rank_difference?: number;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        is_game_record?: boolean;
        isobranch_hash?: string;
        komi?: number;
        ladder?: number;
        ladder_id?: number;
        latencies?: {
            [player_id: string]: number;
        };
        marks?: {
            [mark: string]: string;
        };
        move_tree?: MoveTreeJson;
        moves?: GobanMovesArray;
        needs_sealing?: JGOFSealingIntersection[];
        ogs?: {
            black_dead_stones: string;
            black_seki_eyes: string;
            black_stones: string;
            black_territory: string;
            white_dead_stones: string;
            white_seki_eyes: string;
            white_stones: string;
            white_territory: string;
        };
        ogs_import?: boolean;
        opponent_plays_first_after_resume?: boolean;
        original_disable_analysis?: boolean;
        original_sgf?: string;
        outcome?: string;
        phase?: GobanEnginePhase;
        player?: JGOFNumericPlayerColor;
        player_id?: number;
        player_pool?: {
            [id: number]: GobanEnginePlayerEntry;
        };
        players?: {
            black: GobanEnginePlayerEntry;
            white: GobanEnginePlayerEntry;
        };
        ranked?: boolean;
        removal?: boolean[][];
        removed?: string | JGOFMove[];
        rengo?: boolean;
        rengo_casual_mode?: boolean;
        rengo_teams?: {
            black: GobanEnginePlayerEntry[];
            white: GobanEnginePlayerEntry[];
        };
        review_id?: number;
        reviews?: {
            [review_id: number]: GobanEnginePlayerEntry;
        };
        rules?: GobanEngineRules;
        score?: Score;
        score_handicap?: boolean;
        score_passes?: boolean;
        score_prisoners?: boolean;
        score_stones?: boolean;
        score_territory?: boolean;
        score_territory_in_seki?: boolean;
        stalling_score_estimate?: StallingScoreEstimate;
        start_time?: number;
        strict_seki_mode?: boolean;
        superko_algorithm?: GobanEngineSuperKoAlgorithm;
        throw_all_errors?: boolean;
        time_control?: JGOFTimeControl;
        time_per_move?: number;
        tournament_id?: number;
        white_must_pass_last?: boolean;
        white_player_id?: number;
        white_prisoners?: number;
        width?: number;
        winner?: number | "black" | "white";
    }

    Hierarchy (view full)

    Properties

    aga_handicap_scoring? +GobanEngineConfig | goban

    Interface GobanEngineConfig

    interface GobanEngineConfig {
        aga_handicap_scoring?: boolean;
        allow_ko?: boolean;
        allow_self_capture?: boolean;
        allow_superko?: boolean;
        automatic_stone_removal?: boolean;
        black_player_id?: number;
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_is_repeating?: boolean;
        clock?: GameClock;
        disable_analysis?: boolean;
        end_time?: number;
        errors?: {
            error: string;
            stack: any;
        }[];
        free_handicap_placement?: boolean;
        game_date?: string;
        game_id?: string | number;
        game_name?: string;
        group_ids?: number[];
        handicap?: number;
        handicap_rank_difference?: number;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        is_game_record?: boolean;
        isobranch_hash?: string;
        komi?: number;
        ladder?: number;
        ladder_id?: number;
        latencies?: {
            [player_id: string]: number;
        };
        marks?: {
            [mark: string]: string;
        };
        move_tree?: MoveTreeJson;
        moves?: GobanMovesArray;
        needs_sealing?: JGOFSealingIntersection[];
        ogs?: {
            black_dead_stones: string;
            black_seki_eyes: string;
            black_stones: string;
            black_territory: string;
            white_dead_stones: string;
            white_seki_eyes: string;
            white_stones: string;
            white_territory: string;
        };
        ogs_import?: boolean;
        opponent_plays_first_after_resume?: boolean;
        original_disable_analysis?: boolean;
        original_sgf?: string;
        outcome?: string;
        phase?: GobanEnginePhase;
        player?: JGOFNumericPlayerColor;
        player_id?: number;
        player_pool?: {
            [id: number]: GobanEnginePlayerEntry;
        };
        players?: {
            black: GobanEnginePlayerEntry;
            white: GobanEnginePlayerEntry;
        };
        ranked?: boolean;
        removal?: boolean[][];
        removed?: string | JGOFMove[];
        rengo?: boolean;
        rengo_casual_mode?: boolean;
        rengo_teams?: {
            black: GobanEnginePlayerEntry[];
            white: GobanEnginePlayerEntry[];
        };
        review_id?: number;
        reviews?: {
            [review_id: number]: GobanEnginePlayerEntry;
        };
        rules?: GobanEngineRules;
        score?: Score;
        score_handicap?: boolean;
        score_passes?: boolean;
        score_prisoners?: boolean;
        score_stones?: boolean;
        score_territory?: boolean;
        score_territory_in_seki?: boolean;
        stalling_score_estimate?: StallingScoreEstimate;
        start_time?: number;
        strict_seki_mode?: boolean;
        superko_algorithm?: GobanEngineSuperKoAlgorithm;
        throw_all_errors?: boolean;
        time_control?: JGOFTimeControl;
        time_per_move?: number;
        tournament_id?: number;
        white_must_pass_last?: boolean;
        white_player_id?: number;
        white_prisoners?: number;
        width?: number;
        winner?: number | "black" | "white";
    }

    Hierarchy (view full)

    Properties

    aga_handicap_scoring?: boolean
    allow_ko?: boolean
    allow_self_capture?: boolean
    allow_superko?: boolean
    automatic_stone_removal?: boolean
    black_player_id?: number
    black_prisoners?: number
    board_is_repeating?: boolean
    clock?: GameClock
    disable_analysis?: boolean
    end_time?: number
    errors?: {
        error: string;
        stack: any;
    }[]

    Type declaration

    • error: string
    • stack: any
    free_handicap_placement?: boolean
    game_date?: string
    game_id?: string | number
    game_name?: string
    group_ids?: number[]
    handicap?: number
    handicap_rank_difference?: number
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    is_game_record?: boolean
    isobranch_hash?: string
    komi?: number
    ladder?: number
    ladder_id?: number
    latencies?: {
        [player_id: string]: number;
    }

    Type declaration

    • [player_id: string]: number
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    move_tree?: MoveTreeJson
    needs_sealing?: JGOFSealingIntersection[]

    Intersections that need to be sealed before scoring should happen

    -
    ogs?: {
        black_dead_stones: string;
        black_seki_eyes: string;
        black_stones: string;
        black_territory: string;
        white_dead_stones: string;
        white_seki_eyes: string;
        white_stones: string;
        white_territory: string;
    }

    Type declaration

    • black_dead_stones: string
    • black_seki_eyes: string
    • black_stones: string
    • black_territory: string
    • white_dead_stones: string
    • white_seki_eyes: string
    • white_stones: string
    • white_territory: string
    ogs_import?: boolean

    Deprecated, I don't think we need this anymore, but need to be sure

    -
    opponent_plays_first_after_resume?: boolean
    original_disable_analysis?: boolean
    original_sgf?: string
    outcome?: string
    player_id?: number
    player_pool?: {
        [id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    players?: {
        black: GobanEnginePlayerEntry;
        white: GobanEnginePlayerEntry;
    }

    Type declaration

    ranked?: boolean
    removal?: boolean[][]
    removed?: string | JGOFMove[]

    Removed stones in stone removal phase +

    Properties

    aga_handicap_scoring?: boolean
    allow_ko?: boolean
    allow_self_capture?: boolean
    allow_superko?: boolean
    automatic_stone_removal?: boolean
    black_player_id?: number
    black_prisoners?: number
    board_is_repeating?: boolean
    clock?: GameClock
    disable_analysis?: boolean
    end_time?: number
    errors?: {
        error: string;
        stack: any;
    }[]

    Type declaration

    • error: string
    • stack: any
    free_handicap_placement?: boolean
    game_date?: string
    game_id?: string | number
    game_name?: string
    group_ids?: number[]
    handicap?: number
    handicap_rank_difference?: number
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    is_game_record?: boolean
    isobranch_hash?: string
    komi?: number
    ladder?: number
    ladder_id?: number
    latencies?: {
        [player_id: string]: number;
    }

    Type declaration

    • [player_id: string]: number
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    move_tree?: MoveTreeJson
    needs_sealing?: JGOFSealingIntersection[]

    Intersections that need to be sealed before scoring should happen

    +
    ogs?: {
        black_dead_stones: string;
        black_seki_eyes: string;
        black_stones: string;
        black_territory: string;
        white_dead_stones: string;
        white_seki_eyes: string;
        white_stones: string;
        white_territory: string;
    }

    Type declaration

    • black_dead_stones: string
    • black_seki_eyes: string
    • black_stones: string
    • black_territory: string
    • white_dead_stones: string
    • white_seki_eyes: string
    • white_stones: string
    • white_territory: string
    ogs_import?: boolean

    Deprecated, I don't think we need this anymore, but need to be sure

    +
    opponent_plays_first_after_resume?: boolean
    original_disable_analysis?: boolean
    original_sgf?: string
    outcome?: string
    player_id?: number
    player_pool?: {
        [id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    players?: {
        black: GobanEnginePlayerEntry;
        white: GobanEnginePlayerEntry;
    }

    Type declaration

    ranked?: boolean
    removal?: boolean[][]
    removed?: string | JGOFMove[]

    Removed stones in stone removal phase Passing an array of JGOFMove objects is preferred, the string format exists for historical backwards compatibility. It is an encoded move string, e.g. "aa" for A19

    -
    rengo?: boolean
    rengo_casual_mode?: boolean
    rengo_teams?: {
        black: GobanEnginePlayerEntry[];
        white: GobanEnginePlayerEntry[];
    }

    Type declaration

    review_id?: number
    reviews?: {
        [review_id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    score?: Score
    score_handicap?: boolean
    score_passes?: boolean
    score_prisoners?: boolean
    score_stones?: boolean
    score_territory?: boolean
    score_territory_in_seki?: boolean
    stalling_score_estimate?: StallingScoreEstimate
    start_time?: number
    strict_seki_mode?: boolean
    superko_algorithm?: GobanEngineSuperKoAlgorithm
    throw_all_errors?: boolean

    When loading initial state or moves, by default GobanEngine will try and +

    rengo?: boolean
    rengo_casual_mode?: boolean
    rengo_teams?: {
        black: GobanEnginePlayerEntry[];
        white: GobanEnginePlayerEntry[];
    }

    Type declaration

    review_id?: number
    reviews?: {
        [review_id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    score?: Score
    score_handicap?: boolean
    score_passes?: boolean
    score_prisoners?: boolean
    score_stones?: boolean
    score_territory?: boolean
    score_territory_in_seki?: boolean
    stalling_score_estimate?: StallingScoreEstimate
    start_time?: number
    strict_seki_mode?: boolean
    superko_algorithm?: GobanEngineSuperKoAlgorithm
    throw_all_errors?: boolean

    When loading initial state or moves, by default GobanEngine will try and handle bad data by just resorting to 'edit placing' moves. If this is true, then those errors are thrown instead.

    -
    time_control?: JGOFTimeControl
    time_per_move?: number
    tournament_id?: number
    white_must_pass_last?: boolean
    white_player_id?: number
    white_prisoners?: number
    width?: number
    winner?: number | "black" | "white"
    \ No newline at end of file +
    time_control?: JGOFTimeControl
    time_per_move?: number
    tournament_id?: number
    white_must_pass_last?: boolean
    white_player_id?: number
    white_prisoners?: number
    width?: number
    winner?: number | "black" | "white"
    \ No newline at end of file diff --git a/docs/interfaces/GobanEngineInitialState.html b/docs/interfaces/GobanEngineInitialState.html index d96b1fb7..07c40210 100644 --- a/docs/interfaces/GobanEngineInitialState.html +++ b/docs/interfaces/GobanEngineInitialState.html @@ -1,3 +1,3 @@ -GobanEngineInitialState | goban

    Interface GobanEngineInitialState

    interface GobanEngineInitialState {
        black?: string;
        white?: string;
    }

    Properties

    black? +GobanEngineInitialState | goban

    Interface GobanEngineInitialState

    interface GobanEngineInitialState {
        black?: string;
        white?: string;
    }

    Properties

    Properties

    black?: string
    white?: string
    \ No newline at end of file +

    Properties

    black?: string
    white?: string
    \ No newline at end of file diff --git a/docs/interfaces/GobanEnginePlayerEntry.html b/docs/interfaces/GobanEnginePlayerEntry.html index d2f3b3a3..dd9af82e 100644 --- a/docs/interfaces/GobanEnginePlayerEntry.html +++ b/docs/interfaces/GobanEnginePlayerEntry.html @@ -1,4 +1,4 @@ -GobanEnginePlayerEntry | goban

    Interface GobanEnginePlayerEntry

    interface GobanEnginePlayerEntry {
        accepted_stones?: string;
        accepted_strict_seki_mode?: boolean;
        country?: string;
        id: number;
        name?: string;
        pro?: boolean;
        rank?: number;
        username: string;
    }

    Properties

    accepted_stones? +GobanEnginePlayerEntry | goban

    Interface GobanEnginePlayerEntry

    interface GobanEnginePlayerEntry {
        accepted_stones?: string;
        accepted_strict_seki_mode?: boolean;
        country?: string;
        id: number;
        name?: string;
        pro?: boolean;
        rank?: number;
        username: string;
    }

    Properties

    accepted_stones?: string

    The accepted stones for the stone removal phase that the player has accepted

    -
    accepted_strict_seki_mode?: boolean

    Whether or not the player has accepted scoring with strict seki mode on or not

    -
    country?: string
    id: number
    name?: string

    XXX: The server is using these, the client may or may not be, we need to normalize this

    -
    pro?: boolean
    rank?: number
    username: string
    \ No newline at end of file +
    accepted_strict_seki_mode?: boolean

    Whether or not the player has accepted scoring with strict seki mode on or not

    +
    country?: string
    id: number
    name?: string

    XXX: The server is using these, the client may or may not be, we need to normalize this

    +
    pro?: boolean
    rank?: number
    username: string
    \ No newline at end of file diff --git a/docs/interfaces/GobanEvents.html b/docs/interfaces/GobanEvents.html index 63fa7e11..663a3357 100644 --- a/docs/interfaces/GobanEvents.html +++ b/docs/interfaces/GobanEvents.html @@ -1,4 +1,4 @@ -GobanEvents | goban

    Interface GobanEvents

    interface GobanEvents {
        advance-to-next-board: (() => void);
        analyze_subtool: ((d) => void);
        analyze_tool: ((d) => void);
        audio-capture-stones: ((obj) => void);
        audio-clock: ((event) => void);
        audio-disconnected: (() => void);
        audio-enter-stone-removal: (() => void);
        audio-game-ended: ((winner) => void);
        audio-game-paused: (() => void);
        audio-game-resumed: (() => void);
        audio-game-started: ((obj) => void);
        audio-other-player-disconnected: ((obj) => void);
        audio-other-player-reconnected: ((obj) => void);
        audio-pass: (() => void);
        audio-reconnected: (() => void);
        audio-resume-game-from-stone-removal: (() => void);
        audio-stone: ((obj) => void);
        audio-undo-granted: (() => void);
        audio-undo-requested: (() => void);
        auto-resign: ((obj) => void);
        captured-stones: ((obj) => void);
        chat: ((d) => void);
        chat-remove: ((ids) => void);
        chat-reset: (() => void);
        clear-auto-resign: ((obj) => void);
        clear-message: (() => void);
        clock: ((clock) => void);
        conditional-moves.updated: (() => void);
        cur_move: ((d) => void);
        cur_review_move: ((d) => void);
        destroy: (() => void);
        engine.updated: ((engine) => void);
        error: ((d) => void);
        gamedata: ((d) => void);
        last_official_move: ((d) => void);
        load: ((config) => void);
        mode: ((d) => void);
        move-made: (() => void);
        outcome: ((d) => void);
        paused: ((d) => void);
        phase: ((d) => void);
        played-by-click: ((player) => void);
        player-update: ((player) => void);
        puzzle-correct-answer: (() => void);
        puzzle-place: ((obj) => void);
        puzzle-wrong-answer: (() => void);
        review.load-end: (() => void);
        review.load-start: (() => void);
        review.sync-to-current-move: (() => void);
        review.updated: (() => void);
        review_controller_id: ((d) => void);
        review_owner_id: ((d) => void);
        rules: ((d) => void);
        score_estimate: ((d) => void);
        set-for-removal: {
            removed: boolean;
            x: number;
            y: number;
        };
        show-message: ((message) => void);
        stalling_score_estimate: ((data?) => void);
        state_text: ((state) => void);
        stone-removal.accepted: (() => void);
        stone-removal.auto-scoring-complete: (() => void);
        stone-removal.auto-scoring-started: (() => void);
        stone-removal.needs-sealing: ((positions) => void);
        stone-removal.updated: (() => void);
        strict_seki_mode: ((d) => void);
        submit_move: ((d) => void);
        submitting-move: ((tf) => void);
        title: ((d) => void);
        undo_canceled: (() => void);
        undo_requested: ((d) => void);
        update: (() => void);
        winner: ((d) => void);
    }

    Hierarchy (view full)

    Properties

    advance-to-next-board +GobanEvents | goban

    Interface GobanEvents

    interface GobanEvents {
        advance-to-next-board: (() => void);
        analyze_subtool: ((d) => void);
        analyze_tool: ((d) => void);
        audio-capture-stones: ((obj) => void);
        audio-clock: ((event) => void);
        audio-disconnected: (() => void);
        audio-enter-stone-removal: (() => void);
        audio-game-ended: ((winner) => void);
        audio-game-paused: (() => void);
        audio-game-resumed: (() => void);
        audio-game-started: ((obj) => void);
        audio-other-player-disconnected: ((obj) => void);
        audio-other-player-reconnected: ((obj) => void);
        audio-pass: (() => void);
        audio-reconnected: (() => void);
        audio-resume-game-from-stone-removal: (() => void);
        audio-stone: ((obj) => void);
        audio-undo-granted: (() => void);
        audio-undo-requested: (() => void);
        auto-resign: ((obj) => void);
        captured-stones: ((obj) => void);
        chat: ((d) => void);
        chat-remove: ((ids) => void);
        chat-reset: (() => void);
        clear-auto-resign: ((obj) => void);
        clear-message: (() => void);
        clock: ((clock) => void);
        conditional-moves.updated: (() => void);
        cur_move: ((d) => void);
        cur_review_move: ((d) => void);
        destroy: (() => void);
        engine.updated: ((engine) => void);
        error: ((d) => void);
        gamedata: ((d) => void);
        last_official_move: ((d) => void);
        load: ((config) => void);
        mode: ((d) => void);
        move-made: (() => void);
        outcome: ((d) => void);
        paused: ((d) => void);
        phase: ((d) => void);
        played-by-click: ((player) => void);
        player-update: ((player) => void);
        puzzle-correct-answer: (() => void);
        puzzle-place: ((obj) => void);
        puzzle-wrong-answer: (() => void);
        review.load-end: (() => void);
        review.load-start: (() => void);
        review.sync-to-current-move: (() => void);
        review.updated: (() => void);
        review_controller_id: ((d) => void);
        review_owner_id: ((d) => void);
        rules: ((d) => void);
        score_estimate: ((d) => void);
        set-for-removal: {
            removed: boolean;
            x: number;
            y: number;
        };
        show-message: ((message) => void);
        stalling_score_estimate: ((data?) => void);
        state_text: ((state) => void);
        stone-removal.accepted: (() => void);
        stone-removal.auto-scoring-complete: (() => void);
        stone-removal.auto-scoring-started: (() => void);
        stone-removal.needs-sealing: ((positions) => void);
        stone-removal.updated: (() => void);
        strict_seki_mode: ((d) => void);
        submit_move: ((d) => void);
        submitting-move: ((tf) => void);
        title: ((d) => void);
        undo_canceled: (() => void);
        undo_requested: ((d) => void);
        update: (() => void);
        winner: ((d) => void);
    }

    Hierarchy (view full)

    Properties

    advance-to-next-board: (() => void)

    Type declaration

      • (): void
      • Returns void

    analyze_subtool: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    analyze_tool: ((d) => void)

    Type declaration

    audio-capture-stones: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              already_captured: number;
              count: number;
          }
          • already_captured: number
          • count: number

        Returns void

    audio-clock: ((event) => void)

    Type declaration

    audio-disconnected: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-enter-stone-removal: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-game-ended: ((winner) => void)

    Type declaration

      • (winner): void
      • Parameters

        • winner: "black" | "white" | "tie"

        Returns void

    audio-game-paused: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-game-resumed: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-game-started: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              player_id: number;
          }
          • player_id: number

            Player to move

            -

        Returns void

    audio-other-player-disconnected: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              player_id: number;
          }
          • player_id: number

        Returns void

    audio-other-player-reconnected: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              player_id: number;
          }
          • player_id: number

        Returns void

    audio-pass: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-reconnected: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-resume-game-from-stone-removal: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-stone: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              color: "black" | "white";
              height: number;
              width: number;
              x: number;
              y: number;
          }
          • color: "black" | "white"
          • height: number
          • width: number
          • x: number
          • y: number

        Returns void

    audio-undo-granted: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-undo-requested: (() => void)

    Type declaration

      • (): void
      • Returns void

    auto-resign: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              expiration: number;
              game_id: number;
              player_id: number;
          }
          • expiration: number
          • game_id: number
          • player_id: number

        Returns void

    captured-stones: ((obj) => void)

    Type declaration

    chat: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: any

        Returns void

    chat-remove: ((ids) => void)

    Type declaration

      • (ids): void
      • Parameters

        • ids: {
              chat_ids: string[];
          }
          • chat_ids: string[]

        Returns void

    chat-reset: (() => void)

    Type declaration

      • (): void
      • Returns void

    clear-auto-resign: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              game_id: number;
              player_id: number;
          }
          • game_id: number
          • player_id: number

        Returns void

    clear-message: (() => void)

    Type declaration

      • (): void
      • Returns void

    clock: ((clock) => void)

    Type declaration

    conditional-moves.updated: (() => void)

    Type declaration

      • (): void
      • Returns void

    cur_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    cur_review_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    destroy: (() => void)

    Type declaration

      • (): void
      • Returns void

    engine.updated: ((engine) => void)

    Type declaration

      • (engine): void
      • Parameters

        Returns void

    error: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: any

        Returns void

    gamedata: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: any

        Returns void

    last_official_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    load: ((config) => void)

    Type declaration

      • (config): void
      • Parameters

        Returns void

    mode: ((d) => void)

    Type declaration

    move-made: (() => void)

    Type declaration

      • (): void
      • Returns void

    outcome: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    paused: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: boolean

        Returns void

    phase: ((d) => void)

    Type declaration

    played-by-click: ((player) => void)

    Type declaration

      • (player): void
      • Parameters

        • player: {
              player_id: number;
              x: number;
              y: number;
          }
          • player_id: number
          • x: number
          • y: number

        Returns void

    player-update: ((player) => void)

    Type declaration

    puzzle-correct-answer: (() => void)

    Type declaration

      • (): void
      • Returns void

    puzzle-place: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              color: "black" | "white";
              height: number;
              width: number;
              x: number;
              y: number;
          }
          • color: "black" | "white"
          • height: number
          • width: number
          • x: number
          • y: number

        Returns void

    puzzle-wrong-answer: (() => void)

    Type declaration

      • (): void
      • Returns void

    review.load-end: (() => void)

    Type declaration

      • (): void
      • Returns void

    review.load-start: (() => void)

    Type declaration

      • (): void
      • Returns void

    review.sync-to-current-move: (() => void)

    Type declaration

      • (): void
      • Returns void

    review.updated: (() => void)

    Type declaration

      • (): void
      • Returns void

    review_controller_id: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    review_owner_id: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    rules: ((d) => void)

    Type declaration

    score_estimate: ((d) => void)

    Type declaration

    set-for-removal: {
        removed: boolean;
        x: number;
        y: number;
    }

    Type declaration

    • removed: boolean
    • x: number
    • y: number
    show-message: ((message) => void)

    Type declaration

      • (message): void
      • Parameters

        • message: {
              formatted: string;
              message_id: string;
              parameters?: {
                  [key: string]: any;
              };
          }
          • formatted: string
          • message_id: string
          • Optional parameters?: {
                [key: string]: any;
            }
            • [key: string]: any

        Returns void

    stalling_score_estimate: ((data?) => void)

    Type declaration

    state_text: ((state) => void)

    Type declaration

      • (state): void
      • Parameters

        • state: {
              show_moves_made_count?: boolean;
              title: string;
          }
          • Optional show_moves_made_count?: boolean
          • title: string

        Returns void

    stone-removal.accepted: (() => void)

    Type declaration

      • (): void
      • Returns void

    stone-removal.auto-scoring-complete: (() => void)

    Type declaration

      • (): void
      • Returns void

    stone-removal.auto-scoring-started: (() => void)

    Type declaration

      • (): void
      • Returns void

    stone-removal.needs-sealing: ((positions) => void)

    Type declaration

    stone-removal.updated: (() => void)

    Type declaration

      • (): void
      • Returns void

    strict_seki_mode: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: boolean

        Returns void

    submit_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | (() => void)

        Returns void

    submitting-move: ((tf) => void)

    Type declaration

      • (tf): void
      • Parameters

        • tf: boolean

        Returns void

    title: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    undo_canceled: (() => void)

    Type declaration

      • (): void
      • Returns void

    undo_requested: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    update: (() => void)

    Type declaration

      • (): void
      • Returns void

    winner: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    \ No newline at end of file +

    Properties

    advance-to-next-board: (() => void)

    Type declaration

      • (): void
      • Returns void

    analyze_subtool: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    analyze_tool: ((d) => void)

    Type declaration

    audio-capture-stones: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              already_captured: number;
              count: number;
          }
          • already_captured: number
          • count: number

        Returns void

    audio-clock: ((event) => void)

    Type declaration

    audio-disconnected: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-enter-stone-removal: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-game-ended: ((winner) => void)

    Type declaration

      • (winner): void
      • Parameters

        • winner: "black" | "white" | "tie"

        Returns void

    audio-game-paused: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-game-resumed: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-game-started: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              player_id: number;
          }
          • player_id: number

            Player to move

            +

        Returns void

    audio-other-player-disconnected: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              player_id: number;
          }
          • player_id: number

        Returns void

    audio-other-player-reconnected: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              player_id: number;
          }
          • player_id: number

        Returns void

    audio-pass: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-reconnected: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-resume-game-from-stone-removal: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-stone: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              color: "black" | "white";
              height: number;
              width: number;
              x: number;
              y: number;
          }
          • color: "black" | "white"
          • height: number
          • width: number
          • x: number
          • y: number

        Returns void

    audio-undo-granted: (() => void)

    Type declaration

      • (): void
      • Returns void

    audio-undo-requested: (() => void)

    Type declaration

      • (): void
      • Returns void

    auto-resign: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              expiration: number;
              game_id: number;
              player_id: number;
          }
          • expiration: number
          • game_id: number
          • player_id: number

        Returns void

    captured-stones: ((obj) => void)

    Type declaration

    chat: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: any

        Returns void

    chat-remove: ((ids) => void)

    Type declaration

      • (ids): void
      • Parameters

        • ids: {
              chat_ids: string[];
          }
          • chat_ids: string[]

        Returns void

    chat-reset: (() => void)

    Type declaration

      • (): void
      • Returns void

    clear-auto-resign: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              game_id: number;
              player_id: number;
          }
          • game_id: number
          • player_id: number

        Returns void

    clear-message: (() => void)

    Type declaration

      • (): void
      • Returns void

    clock: ((clock) => void)

    Type declaration

    conditional-moves.updated: (() => void)

    Type declaration

      • (): void
      • Returns void

    cur_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    cur_review_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    destroy: (() => void)

    Type declaration

      • (): void
      • Returns void

    engine.updated: ((engine) => void)

    Type declaration

      • (engine): void
      • Parameters

        Returns void

    error: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: any

        Returns void

    gamedata: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: any

        Returns void

    last_official_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    load: ((config) => void)

    Type declaration

      • (config): void
      • Parameters

        Returns void

    mode: ((d) => void)

    Type declaration

    move-made: (() => void)

    Type declaration

      • (): void
      • Returns void

    outcome: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    paused: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: boolean

        Returns void

    phase: ((d) => void)

    Type declaration

    played-by-click: ((player) => void)

    Type declaration

      • (player): void
      • Parameters

        • player: {
              player_id: number;
              x: number;
              y: number;
          }
          • player_id: number
          • x: number
          • y: number

        Returns void

    player-update: ((player) => void)

    Type declaration

    puzzle-correct-answer: (() => void)

    Type declaration

      • (): void
      • Returns void

    puzzle-place: ((obj) => void)

    Type declaration

      • (obj): void
      • Parameters

        • obj: {
              color: "black" | "white";
              height: number;
              width: number;
              x: number;
              y: number;
          }
          • color: "black" | "white"
          • height: number
          • width: number
          • x: number
          • y: number

        Returns void

    puzzle-wrong-answer: (() => void)

    Type declaration

      • (): void
      • Returns void

    review.load-end: (() => void)

    Type declaration

      • (): void
      • Returns void

    review.load-start: (() => void)

    Type declaration

      • (): void
      • Returns void

    review.sync-to-current-move: (() => void)

    Type declaration

      • (): void
      • Returns void

    review.updated: (() => void)

    Type declaration

      • (): void
      • Returns void

    review_controller_id: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    review_owner_id: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    rules: ((d) => void)

    Type declaration

    score_estimate: ((d) => void)

    Type declaration

    set-for-removal: {
        removed: boolean;
        x: number;
        y: number;
    }

    Type declaration

    • removed: boolean
    • x: number
    • y: number
    show-message: ((message) => void)

    Type declaration

      • (message): void
      • Parameters

        • message: {
              formatted: string;
              message_id: string;
              parameters?: {
                  [key: string]: any;
              };
          }
          • formatted: string
          • message_id: string
          • Optional parameters?: {
                [key: string]: any;
            }
            • [key: string]: any

        Returns void

    stalling_score_estimate: ((data?) => void)

    Type declaration

    state_text: ((state) => void)

    Type declaration

      • (state): void
      • Parameters

        • state: {
              show_moves_made_count?: boolean;
              title: string;
          }
          • Optional show_moves_made_count?: boolean
          • title: string

        Returns void

    stone-removal.accepted: (() => void)

    Type declaration

      • (): void
      • Returns void

    stone-removal.auto-scoring-complete: (() => void)

    Type declaration

      • (): void
      • Returns void

    stone-removal.auto-scoring-started: (() => void)

    Type declaration

      • (): void
      • Returns void

    stone-removal.needs-sealing: ((positions) => void)

    Type declaration

    stone-removal.updated: (() => void)

    Type declaration

      • (): void
      • Returns void

    strict_seki_mode: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: boolean

        Returns void

    submit_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | (() => void)

        Returns void

    submitting-move: ((tf) => void)

    Type declaration

      • (tf): void
      • Parameters

        • tf: boolean

        Returns void

    title: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    undo_canceled: (() => void)

    Type declaration

      • (): void
      • Returns void

    undo_requested: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    update: (() => void)

    Type declaration

      • (): void
      • Returns void

    winner: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    \ No newline at end of file diff --git a/docs/interfaces/GobanIOErrorMessageObject.html b/docs/interfaces/GobanIOErrorMessageObject.html index af994cf6..9aa4851d 100644 --- a/docs/interfaces/GobanIOErrorMessageObject.html +++ b/docs/interfaces/GobanIOErrorMessageObject.html @@ -1,3 +1,3 @@ -GobanIOErrorMessageObject | goban

    Interface GobanIOErrorMessageObject

    interface GobanIOErrorMessageObject {
        message_id: "failed_to_load_sgf";
        url: string;
    }

    Properties

    message_id +GobanIOErrorMessageObject | goban

    Interface GobanIOErrorMessageObject

    interface GobanIOErrorMessageObject {
        message_id: "failed_to_load_sgf";
        url: string;
    }

    Properties

    Properties

    message_id: "failed_to_load_sgf"
    url: string
    \ No newline at end of file +

    Properties

    message_id: "failed_to_load_sgf"
    url: string
    \ No newline at end of file diff --git a/docs/interfaces/GobanMetrics.html b/docs/interfaces/GobanMetrics.html index e80442f4..38e1f6ad 100644 --- a/docs/interfaces/GobanMetrics.html +++ b/docs/interfaces/GobanMetrics.html @@ -1,5 +1,5 @@ -GobanMetrics | goban

    Interface GobanMetrics

    interface GobanMetrics {
        height: number;
        mid: number;
        offset: number;
        width: number;
    }

    Properties

    height +GobanMetrics | goban

    Interface GobanMetrics

    interface GobanMetrics {
        height: number;
        mid: number;
        offset: number;
        width: number;
    }

    Properties

    Properties

    height: number
    mid: number
    offset: number
    width: number
    \ No newline at end of file +

    Properties

    height: number
    mid: number
    offset: number
    width: number
    \ No newline at end of file diff --git a/docs/interfaces/GobanMoveErrorMessageObject.html b/docs/interfaces/GobanMoveErrorMessageObject.html index 43e6cc29..72990609 100644 --- a/docs/interfaces/GobanMoveErrorMessageObject.html +++ b/docs/interfaces/GobanMoveErrorMessageObject.html @@ -1,4 +1,4 @@ -GobanMoveErrorMessageObject | goban

    Interface GobanMoveErrorMessageObject

    interface GobanMoveErrorMessageObject {
        coords: string;
        message_id: GobanMoveErrorMessageId;
        move_number: number;
    }

    Properties

    coords +GobanMoveErrorMessageObject | goban

    Interface GobanMoveErrorMessageObject

    interface GobanMoveErrorMessageObject {
        coords: string;
        message_id: GobanMoveErrorMessageId;
        move_number: number;
    }

    Properties

    coords: string
    move_number: number
    \ No newline at end of file +

    Properties

    coords: string
    move_number: number
    \ No newline at end of file diff --git a/docs/interfaces/GobanSelectedThemes.html b/docs/interfaces/GobanSelectedThemes.html index 0b560fa0..25ff6ba9 100644 --- a/docs/interfaces/GobanSelectedThemes.html +++ b/docs/interfaces/GobanSelectedThemes.html @@ -1,6 +1,6 @@ -GobanSelectedThemes | goban

    Interface GobanSelectedThemes

    interface GobanSelectedThemes {
        black: string;
        board: string;
        removal-graphic: "x" | "square";
        removal-scale: number;
        white: string;
    }

    Properties

    black +GobanSelectedThemes | goban

    Interface GobanSelectedThemes

    interface GobanSelectedThemes {
        black: string;
        board: string;
        removal-graphic: "x" | "square";
        removal-scale: number;
        white: string;
    }

    Properties

    black: string
    board: string
    removal-graphic: "x" | "square"
    removal-scale: number
    white: string
    \ No newline at end of file +

    Properties

    black: string
    board: string
    removal-graphic: "x" | "square"
    removal-scale: number
    white: string
    \ No newline at end of file diff --git a/docs/interfaces/GobanSocketEvents.html b/docs/interfaces/GobanSocketEvents.html index 0d0e572f..9bc6356f 100644 --- a/docs/interfaces/GobanSocketEvents.html +++ b/docs/interfaces/GobanSocketEvents.html @@ -1,4 +1,4 @@ -GobanSocketEvents | goban

    Interface GobanSocketEvents

    interface GobanSocketEvents {
        ERROR: ((data) => void);
        HUP: (() => void);
        active-bots: ((data) => void);
        active_game: ((data) => void);
        automatch/cancel: ((data) => void);
        automatch/entry: ((data) => void);
        automatch/start: ((data) => void);
        chat-join: ((data) => void);
        chat-message: ((data) => void);
        chat-message-removed: ((data) => void);
        chat-part: ((data) => void);
        chat-topic: ((data) => void);
        chat-update-user: ((data) => void);
        connect: (() => void);
        disconnect: ((code) => void);
        game/:id/auto_resign: ((data) => void);
        game/:id/chat: ((data) => void);
        game/:id/chat/remove: ((data) => void);
        game/:id/clear_auto_resign: ((data) => void);
        game/:id/clock: ((data) => void);
        game/:id/conditional_moves: ((data) => void);
        game/:id/error: ((data) => void);
        game/:id/gamedata: ((data) => void);
        game/:id/latency: ((data) => void);
        game/:id/phase: ((data) => void);
        game/:id/removed_stones: ((data) => void);
        game/:id/removed_stones_accepted: ((data) => void);
        game/:id/reset-chats: (() => void);
        game/:id/stalling_score_estimate: ((data?) => void);
        game/:id/undo_accepted: ((data) => void);
        game/:id/undo_canceled: ((data) => void);
        game/:id/undo_requested: ((data) => void);
        gamelist-count: ((data) => void);
        gamelist-count-:channel: ((data) => void);
        hostinfo: ((data) => void);
        incident-report: ((data) => void);
        itc: ((data) => void);
        latency: ((latency, clock_drift) => void);
        net/pong: ((data) => void);
        notification: ((data) => void);
        private-message: ((data) => void);
        private-superchat: ((data) => void);
        reconnect: (() => void);
        remote_storage/sync_complete: (() => void);
        remote_storage/update: ((data) => void);
        review/:id/full_state: ((data) => void);
        review/:id/r: ((data) => void);
        score-estimator-enabled-state: ((data) => void);
        seekgraph/global: ((messages) => void);
        timeout: (() => void);
        ui-push: ((data) => void);
        unrecoverable_error: ((code, tag, message) => void);
        user/jwt: ((jwt) => void);
        user/state: ((data) => void);
        user/update: ((user) => void);
    }

    Hierarchy (view full)

    Properties

    ERROR +GobanSocketEvents | goban

    Interface GobanSocketEvents

    interface GobanSocketEvents {
        ERROR: ((data) => void);
        HUP: (() => void);
        active-bots: ((data) => void);
        active_game: ((data) => void);
        automatch/cancel: ((data) => void);
        automatch/entry: ((data) => void);
        automatch/start: ((data) => void);
        chat-join: ((data) => void);
        chat-message: ((data) => void);
        chat-message-removed: ((data) => void);
        chat-part: ((data) => void);
        chat-topic: ((data) => void);
        chat-update-user: ((data) => void);
        connect: (() => void);
        disconnect: ((code) => void);
        game/:id/auto_resign: ((data) => void);
        game/:id/chat: ((data) => void);
        game/:id/chat/remove: ((data) => void);
        game/:id/clear_auto_resign: ((data) => void);
        game/:id/clock: ((data) => void);
        game/:id/conditional_moves: ((data) => void);
        game/:id/error: ((data) => void);
        game/:id/gamedata: ((data) => void);
        game/:id/latency: ((data) => void);
        game/:id/phase: ((data) => void);
        game/:id/removed_stones: ((data) => void);
        game/:id/removed_stones_accepted: ((data) => void);
        game/:id/reset-chats: (() => void);
        game/:id/stalling_score_estimate: ((data?) => void);
        game/:id/undo_accepted: ((data) => void);
        game/:id/undo_canceled: ((data) => void);
        game/:id/undo_requested: ((data) => void);
        gamelist-count: ((data) => void);
        gamelist-count-:channel: ((data) => void);
        hostinfo: ((data) => void);
        incident-report: ((data) => void);
        itc: ((data) => void);
        latency: ((latency, clock_drift) => void);
        net/pong: ((data) => void);
        notification: ((data) => void);
        private-message: ((data) => void);
        private-superchat: ((data) => void);
        reconnect: (() => void);
        remote_storage/sync_complete: (() => void);
        remote_storage/update: ((data) => void);
        review/:id/full_state: ((data) => void);
        review/:id/r: ((data) => void);
        score-estimator-enabled-state: ((data) => void);
        seekgraph/global: ((messages) => void);
        timeout: (() => void);
        ui-push: ((data) => void);
        unrecoverable_error: ((code, tag, message) => void);
        user/jwt: ((jwt) => void);
        user/state: ((data) => void);
        user/update: ((user) => void);
    }

    Hierarchy (view full)

    Properties

    ERROR HUP active-bots active_game @@ -56,16 +56,16 @@

    Properties

    ERROR: ((data) => void)

    An error occurred, the message string should be displayed to the user. For a list of errcode's used, see https://github.com/online-go/online-go.com/blob/devel/src/components/Errcode/Errcode.tsx

    -

    Type declaration

      • (data): void
      • Parameters

        • data: string | {
              errcode: string;
          }

        Returns void

    HUP: (() => void)

    The client should reload

    -

    Type declaration

      • (): void
      • Returns void

    active-bots: ((data) => void)

    Updates the list of bots that are connected and ready to the server

    -

    Type declaration

      • (data): void
      • Parameters

        • data: {
              [id: number]: User;
          }

        Returns void

    active_game: ((data) => void)

    Message to inform the client of an active game, or a change to an existing game

    -

    Type declaration

    automatch/cancel: ((data) => void)

    An automatch request was canceled

    -

    Type declaration

      • (data): void
      • Parameters

        • data: {
              uuid: string;
          }
          • uuid: string

        Returns void

    automatch/entry: ((data) => void)

    An automatch request is active

    -

    Type declaration

    automatch/start: ((data) => void)

    An automatch request was started

    -

    Type declaration

      • (data): void
      • Parameters

        • data: {
              game_id: number;
              uuid: string;
          }
          • game_id: number
          • uuid: string

        Returns void

    chat-join: ((data) => void)

    User(s) joined a chat channel

    +

    Type declaration

      • (data): void
      • Parameters

        • data: string | {
              errcode: string;
          }

        Returns void

    HUP: (() => void)

    The client should reload

    +

    Type declaration

      • (): void
      • Returns void

    active-bots: ((data) => void)

    Updates the list of bots that are connected and ready to the server

    +

    Type declaration

      • (data): void
      • Parameters

        • data: {
              [id: number]: User;
          }

        Returns void

    active_game: ((data) => void)

    Message to inform the client of an active game, or a change to an existing game

    +

    Type declaration

    automatch/cancel: ((data) => void)

    An automatch request was canceled

    +

    Type declaration

      • (data): void
      • Parameters

        • data: {
              uuid: string;
          }
          • uuid: string

        Returns void

    automatch/entry: ((data) => void)

    An automatch request is active

    +

    Type declaration

    automatch/start: ((data) => void)

    An automatch request was started

    +

    Type declaration

      • (data): void
      • Parameters

        • data: {
              game_id: number;
              uuid: string;
          }
          • game_id: number
          • uuid: string

        Returns void

    chat-join: ((data) => void)

    User(s) joined a chat channel

    Type declaration

      • (data): void
      • Parameters

        • data: {
              channel: string;
              users: User[];
          }
          • channel: string

            The channel

          • users: User[]

            List of users that joined

            -

        Returns void

    chat-message: ((data) => void)

    Chat message was received

    +

    Returns void

    chat-message: ((data) => void)

    Chat message was received

    Type declaration

      • (data): void
      • Parameters

        • data: {
              channel: string;
              country?: string;
              id: number;
              message: {
                  i?: string;
                  m: string;
                  t: number;
              };
              professional: boolean;
              ranking: number;
              system?: true;
              system_message_type?: "flood";
              ui_class: string;
              username: string;
          }
          • channel: string

            The channel

          • Optional country?: string

            Country the user is from

          • id: number

            User id of the sender

            @@ -78,14 +78,14 @@
          • Optional system?: true

            Whether it's a system message or not

          • Optional system_message_type?: "flood"
          • ui_class: string

            UI class of the sender

          • username: string

            Username of the sender

            -

        Returns void

    chat-message-removed: ((data) => void)

    A chat message should be removed from the display

    +

    Returns void

    chat-message-removed: ((data) => void)

    A chat message should be removed from the display

    Type declaration

      • (data): void
      • Parameters

        • data: {
              channel: string;
              uuid: string;
          }
          • channel: string

            The channel

          • uuid: string

            Message id. Note, despite the name, I don't think this is always a uuid in uuid format, just treat it as a string.

            -

        Returns void

    chat-part: ((data) => void)

    User left a chat channel

    +

    Returns void

    chat-part: ((data) => void)

    User left a chat channel

    Type declaration

    chat-topic: ((data) => void)

    Channel topic was updated

    +

    Returns void

    chat-topic: ((data) => void)

    Channel topic was updated

    Type declaration

    chat-update-user: ((data) => void)

    A user's profile was updated

    +

    Returns void

    chat-update-user: ((data) => void)

    A user's profile was updated

    Type declaration

    connect: (() => void)

    Type declaration

    disconnect: ((code) => void)

    Type declaration

    game/:id/auto_resign: ((data) => void)

    Informs the client the player is scheduled to resign if not cleared

    +

    Returns void

    connect: (() => void)

    Type declaration

    disconnect: ((code) => void)

    Type declaration

    game/:id/auto_resign: ((data) => void)

    Informs the client the player is scheduled to resign if not cleared

    Type declaration

    game/:id/chat: ((data) => void)

    A game chat message

    -

    Type declaration

    game/:id/chat/remove: ((data) => void)

    Game chat lines should be removed

    +

    Returns void

    game/:id/chat: ((data) => void)

    A game chat message

    +

    Type declaration

    game/:id/chat/remove: ((data) => void)

    Game chat lines should be removed

    Type declaration

    game/:id/clear_auto_resign: ((data) => void)

    The auto resign for the given player has been cleared

    +

    Returns void

    game/:id/clear_auto_resign: ((data) => void)

    The auto resign for the given player has been cleared

    Type declaration

    game/:id/clock: ((data) => void)

    Game clock update

    -

    Type declaration

    game/:id/conditional_moves: ((data) => void)

    Update the conditional moves currently active

    +

    Returns void

    game/:id/clock: ((data) => void)

    Game clock update

    +

    Type declaration

    game/:id/conditional_moves: ((data) => void)

    Update the conditional moves currently active

    Type declaration

    game/:id/error: ((data) => void)

    Error that should be displayed to the user

    -

    Type declaration

    game/:id/gamedata: ((data) => void)

    Update the entire game state

    -

    Type declaration

    game/:id/latency: ((data) => void)

    Update latency information for a player

    +

    Returns void

    game/:id/error: ((data) => void)

    Error that should be displayed to the user

    +

    Type declaration

    game/:id/gamedata: ((data) => void)

    Update the entire game state

    +

    Type declaration

    game/:id/latency: ((data) => void)

    Update latency information for a player

    Type declaration

    game/:id/phase: ((data) => void)

    The phase has changed for the game

    -

    Type declaration

    game/:id/removed_stones: ((data) => void)

    Update the state of the stone removal phase

    -

    Type declaration

    game/:id/removed_stones_accepted: ((data) => void)

    The stone removal phase has been completed, this is the final state and +

    Returns void

    game/:id/phase: ((data) => void)

    The phase has changed for the game

    +

    Type declaration

    game/:id/removed_stones: ((data) => void)

    Update the state of the stone removal phase

    +

    Type declaration

    game/:id/removed_stones_accepted: ((data) => void)

    The stone removal phase has been completed, this is the final state and indicates a phase change to the given phase (should always be "finished")

    Type declaration

    game/:id/reset-chats: (() => void)

    The chat log should be reset.

    -

    Type declaration

    game/:id/stalling_score_estimate: ((data?) => void)

    A score estimation result has been broadcast, this is used for avoiding game stalling

    -

    Type declaration

    game/:id/undo_accepted: ((data) => void)

    Undo move has been accepted, the parameter is the new move number

    -

    Type declaration

    game/:id/undo_canceled: ((data) => void)

    Undo request has been canceled, the parameter is the move number of the original request

    -

    Type declaration

    game/:id/undo_requested: ((data) => void)

    Undo request has been requested, the parameter is the move number that we want to go back to

    -

    Type declaration

    gamelist-count: ((data) => void)

    Update number of live and correspondence games are currently being +

    Returns void

    game/:id/reset-chats: (() => void)

    The chat log should be reset.

    +

    Type declaration

    game/:id/stalling_score_estimate: ((data?) => void)

    A score estimation result has been broadcast, this is used for avoiding game stalling

    +

    Type declaration

    game/:id/undo_accepted: ((data) => void)

    Undo move has been accepted, the parameter is the new move number

    +

    Type declaration

    game/:id/undo_canceled: ((data) => void)

    Undo request has been canceled, the parameter is the move number of the original request

    +

    Type declaration

    game/:id/undo_requested: ((data) => void)

    Undo request has been requested, the parameter is the move number that we want to go back to

    +

    Type declaration

    gamelist-count: ((data) => void)

    Update number of live and correspondence games are currently being played

    Type declaration

    gamelist-count-:channel: ((data) => void)

    Update number of live and correspondence games are currently being +

    Returns void

    gamelist-count-:channel: ((data) => void)

    Update number of live and correspondence games are currently being played in a particular channel

    Type declaration

    hostinfo: ((data) => void)

    General host information for the termination server you +

    Returns void

    hostinfo: ((data) => void)

    General host information for the termination server you are connected to. This is a response to the hostinfo client message.

    Type declaration

    incident-report: ((data) => void)

    Incident report update

    -

    Type declaration

    itc: ((data) => void)

    "Inter Tab Communication" message. This is a client utility to enable +

    Returns void

    incident-report: ((data) => void)

    Incident report update

    +

    Type declaration

    itc: ((data) => void)

    "Inter Tab Communication" message. This is a client utility to enable relaying of messages between devices - the event and data are application defined, the server blindly relays to all connected devices for the sending user. Note this is relayed to all devices regardless @@ -168,17 +168,17 @@ the web client sending this will arrive on an android and ios instance)

    Type declaration

    latency: ((latency, clock_drift) => void)

    Type declaration

    net/pong: ((data) => void)

    Pong response from a ping

    +

    Returns void

    latency: ((latency, clock_drift) => void)

    Type declaration

    net/pong: ((data) => void)

    Pong response from a ping

    Type declaration

    notification: ((data) => void)

    A notification that should be displayed to the user +

    Returns void

    notification: ((data) => void)

    A notification that should be displayed to the user These are not strongly modeled, see https://github.com/online-go/online-go.com/blob/devel/src/components/Notifications/Notifications.tsx as a reference for what types there are and what data they contain

    Type declaration

    private-message: ((data) => void)

    A private message was received

    +

    Returns void

    private-message: ((data) => void)

    A private message was received

    Type declaration

    private-superchat: ((data) => void)

    Notify the client that a private message "super chat" has started. A +

    Returns void

    private-superchat: ((data) => void)

    Notify the client that a private message "super chat" has started. A super chat is an undismissable chat sent by a moderator. It should take all focus and not let the client do anything until the conversation is resolved (the enable flag is set to false)

    @@ -199,30 +199,30 @@
  • moderator_username: string

    The moderator username contacting the player

  • player_id: number

    Your id

  • player_username: string

    Your username

    -
  • Returns void

    reconnect: (() => void)

    Type declaration

    remote_storage/sync_complete: (() => void)

    Notification that the server has completed sending all remote storage +

    Returns void

    reconnect: (() => void)

    Type declaration

    remote_storage/sync_complete: (() => void)

    Notification that the server has completed sending all remote storage data and the client should now be up to date.

    -

    Type declaration

    remote_storage/update: ((data) => void)

    Updates a key value pair

    +

    Type declaration

    remote_storage/update: ((data) => void)

    Updates a key value pair

    Type declaration

    review/:id/full_state: ((data) => void)

    Replay of the entire full state of the review

    -

    Type declaration

    review/:id/r: ((data) => void)

    An incremental modification to the review stream

    -

    Type declaration

    score-estimator-enabled-state: ((data) => void)

    Notifies the client whether the the client shares an IP with one of the +

    Returns void

    review/:id/full_state: ((data) => void)

    Replay of the entire full state of the review

    +

    Type declaration

    review/:id/r: ((data) => void)

    An incremental modification to the review stream

    +

    Type declaration

    score-estimator-enabled-state: ((data) => void)

    Notifies the client whether the the client shares an IP with one of the players of the game. This is used to disable the score estimator in anonymous browsing windows for players of a game when the score estimator is disabled for the game.

    Type declaration

    seekgraph/global: ((messages) => void)

    Type declaration

    timeout: (() => void)

    Type declaration

    ui-push: ((data) => void)

    A UI Push notification. The event and data are not well defined here, +

    Returns void

    seekgraph/global: ((messages) => void)

    Type declaration

    timeout: (() => void)

    Type declaration

    ui-push: ((data) => void)

    A UI Push notification. The event and data are not well defined here, they come as a result to subscribing to ui push channels with ui-pushes/subscribe.

    Type declaration

    unrecoverable_error: ((code, tag, message) => void)

    Type declaration

    user/jwt: ((jwt) => void)

    Update the user's JWT token

    -

    Type declaration

    user/state: ((data) => void)

    Updates whether a user is online or not. Subscribe to these updates for +

    Returns void

    unrecoverable_error: ((code, tag, message) => void)

    Type declaration

    user/jwt: ((jwt) => void)

    Update the user's JWT token

    +

    Type declaration

    user/state: ((data) => void)

    Updates whether a user is online or not. Subscribe to these updates for particular users using the user/monitor command.

    -

    Type declaration

    user/update: ((user) => void)

    Update user information. For other players, this has the standard User +

    Type declaration

    user/update: ((user) => void)

    Update user information. For other players, this has the standard User fields, when this is the current user, it can have additional fields that are found in the ui/config

    -

    Type declaration

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/docs/interfaces/GobanThemeBackgroundCSS.html b/docs/interfaces/GobanThemeBackgroundCSS.html index 48719d08..7d25dc9c 100644 --- a/docs/interfaces/GobanThemeBackgroundCSS.html +++ b/docs/interfaces/GobanThemeBackgroundCSS.html @@ -1,4 +1,4 @@ -GobanThemeBackgroundCSS | goban

    Interface GobanThemeBackgroundCSS

    interface GobanThemeBackgroundCSS {
        background-color?: string;
        background-image?: string;
        background-size?: string;
    }

    Properties

    background-color? +GobanThemeBackgroundCSS | goban

    Interface GobanThemeBackgroundCSS

    interface GobanThemeBackgroundCSS {
        background-color?: string;
        background-image?: string;
        background-size?: string;
    }

    Properties

    background-color?: string
    background-image?: string
    background-size?: string
    \ No newline at end of file +

    Properties

    background-color?: string
    background-image?: string
    background-size?: string
    \ No newline at end of file diff --git a/docs/interfaces/GobanThemeBackgroundReactStyles.html b/docs/interfaces/GobanThemeBackgroundReactStyles.html index 37560660..1f6fb5f0 100644 --- a/docs/interfaces/GobanThemeBackgroundReactStyles.html +++ b/docs/interfaces/GobanThemeBackgroundReactStyles.html @@ -1,4 +1,4 @@ -GobanThemeBackgroundReactStyles | goban

    Interface GobanThemeBackgroundReactStyles

    interface GobanThemeBackgroundReactStyles {
        backgroundColor?: string;
        backgroundImage?: string;
        backgroundSize?: string;
    }

    Properties

    backgroundColor? +GobanThemeBackgroundReactStyles | goban

    Interface GobanThemeBackgroundReactStyles

    interface GobanThemeBackgroundReactStyles {
        backgroundColor?: string;
        backgroundImage?: string;
        backgroundSize?: string;
    }

    Properties

    backgroundColor?: string
    backgroundImage?: string
    backgroundSize?: string
    \ No newline at end of file +

    Properties

    backgroundColor?: string
    backgroundImage?: string
    backgroundSize?: string
    \ No newline at end of file diff --git a/docs/interfaces/JGOF.html b/docs/interfaces/JGOF.html index 38c3764c..2dd6bfae 100644 --- a/docs/interfaces/JGOF.html +++ b/docs/interfaces/JGOF.html @@ -1,14 +1,14 @@ JGOF | goban

    Interface JGOF

    JGOF (JSON Go Format) is an attempt at normalizing the AdHocFormat.

    -
    interface JGOF {
        ai_reviews?: {
            [id: string]: JGOFAIReview;
        };
        black?: JGOFPlayer | JGOFPlayer[];
        clock?: JGOFClock;
        jgof: 1;
        time_control?: JGOFTimeControl;
        white?: JGOFPlayer | JGOFPlayer[];
    }

    Properties

    interface JGOF {
        ai_reviews?: {
            [id: string]: JGOFAIReview;
        };
        black?: JGOFPlayer | JGOFPlayer[];
        clock?: JGOFClock;
        jgof: 1;
        time_control?: JGOFTimeControl;
        white?: JGOFPlayer | JGOFPlayer[];
    }

    Properties

    ai_reviews?: {
        [id: string]: JGOFAIReview;
    }

    AI Review information computed for this game

    -

    Type declaration

    Player information for those playing Black

    -
    clock?: JGOFClock

    Current clock information, this is used for ongoing games

    -
    jgof: 1

    JGOF version number

    -
    time_control?: JGOFTimeControl

    Time control settings for the game

    -

    Player information for those playing White

    -
    \ No newline at end of file +

    Type declaration

    black?: JGOFPlayer | JGOFPlayer[]

    Player information for those playing Black

    +
    clock?: JGOFClock

    Current clock information, this is used for ongoing games

    +
    jgof: 1

    JGOF version number

    +
    time_control?: JGOFTimeControl

    Time control settings for the game

    +
    white?: JGOFPlayer | JGOFPlayer[]

    Player information for those playing White

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFAIReview.html b/docs/interfaces/JGOFAIReview.html index 80e29d1e..50296d0a 100644 --- a/docs/interfaces/JGOFAIReview.html +++ b/docs/interfaces/JGOFAIReview.html @@ -1,5 +1,5 @@ JGOFAIReview | goban

    Interface JGOFAIReview


    -
    interface JGOFAIReview {
        analyzed_variations?: {
            [var_key: string]: JGOFAIReviewMove;
        };
        date: number;
        engine: string;
        engine_version: string;
        error?: {
            coords: string;
            message_id: GobanMoveErrorMessageId;
            move_number: number;
        };
        id: string;
        moves: {
            [move_number: string]: JGOFAIReviewMove;
        };
        network: string;
        network_size: string;
        scores?: number[];
        strength: number;
        type: "fast" | "full";
        uuid: string;
        win_rate: number;
        win_rates?: number[];
    }

    Properties

    interface JGOFAIReview {
        analyzed_variations?: {
            [var_key: string]: JGOFAIReviewMove;
        };
        date: number;
        engine: string;
        engine_version: string;
        error?: {
            coords: string;
            message_id: GobanMoveErrorMessageId;
            move_number: number;
        };
        id: string;
        moves: {
            [move_number: string]: JGOFAIReviewMove;
        };
        network: string;
        network_size: string;
        scores?: number[];
        strength: number;
        type: "fast" | "full";
        uuid: string;
        win_rate: number;
        win_rates?: number[];
    }

    Properties

    analyzed_variations?: {
        [var_key: string]: JGOFAIReviewMove;
    }

    Analysis of variations in the game.

    -

    Type declaration

    date: number

    millisecond epoch time (ms from 1970 UTC)

    -
    engine: string
    engine_version: string
    error?: {
        coords: string;
        message_id: GobanMoveErrorMessageId;
        move_number: number;
    }

    If there was an error processing the review, it can be stored here

    -

    Type declaration

    id: string
    moves: {
        [move_number: string]: JGOFAIReviewMove;
    }

    Analysis of moves in the game.

    -

    Type declaration

    network: string
    network_size: string
    scores?: number[]

    predicted scores that black will win or lose by (negative for loss) for all moves

    -
    strength: number
    type: "fast" | "full"

    A fast review typically only has a few moves reviewed, whereas a full +

    Type declaration

    date: number

    millisecond epoch time (ms from 1970 UTC)

    +
    engine: string
    engine_version: string
    error?: {
        coords: string;
        message_id: GobanMoveErrorMessageId;
        move_number: number;
    }

    If there was an error processing the review, it can be stored here

    +

    Type declaration

    id: string
    moves: {
        [move_number: string]: JGOFAIReviewMove;
    }

    Analysis of moves in the game.

    +

    Type declaration

    network: string
    network_size: string
    scores?: number[]

    predicted scores that black will win or lose by (negative for loss) for all moves

    +
    strength: number
    type: "fast" | "full"

    A fast review typically only has a few moves reviewed, whereas a full review is expected to have every move reviewed. Note that this sets an expectation but not a requirement on what values are stored in moves, and while games are being reviewed these objects will have zero or more entries in moves regardless of the type.

    -
    uuid: string
    win_rate: number

    predicted probability that black will win the last move

    -
    win_rates?: number[]

    predicted probability that black will win for all moves

    -
    \ No newline at end of file +
    uuid: string
    win_rate: number

    predicted probability that black will win the last move

    +
    win_rates?: number[]

    predicted probability that black will win for all moves

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFAIReviewMove.html b/docs/interfaces/JGOFAIReviewMove.html index 077568c3..b6c2970f 100644 --- a/docs/interfaces/JGOFAIReviewMove.html +++ b/docs/interfaces/JGOFAIReviewMove.html @@ -1,13 +1,13 @@ -JGOFAIReviewMove | goban

    Interface JGOFAIReviewMove

    interface JGOFAIReviewMove {
        branches: JGOFAIReviewMoveVariation[];
        move: JGOFIntersection;
        move_number: number;
        ownership?: number[][];
        score?: number;
        win_rate: number;
    }

    Properties

    branches +JGOFAIReviewMove | goban

    Interface JGOFAIReviewMove

    interface JGOFAIReviewMove {
        branches: JGOFAIReviewMoveVariation[];
        move: JGOFIntersection;
        move_number: number;
        ownership?: number[][];
        score?: number;
        win_rate: number;
    }

    Properties

    Followup move branches explored

    -

    The move that was played.

    -
    move_number: number

    The move number. This is 1 indexed.

    -
    ownership?: number[][]

    A width*height array of ownership values

    -
    score?: number

    How many points black is predicted to win by (if positive, lose by if negative)

    -
    win_rate: number

    Probability of black winning after this move was made

    -
    \ No newline at end of file +

    The move that was played.

    +
    move_number: number

    The move number. This is 1 indexed.

    +
    ownership?: number[][]

    A width*height array of ownership values

    +
    score?: number

    How many points black is predicted to win by (if positive, lose by if negative)

    +
    win_rate: number

    Probability of black winning after this move was made

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFAIReviewMoveVariation.html b/docs/interfaces/JGOFAIReviewMoveVariation.html index 818f0411..fd1bb7fb 100644 --- a/docs/interfaces/JGOFAIReviewMoveVariation.html +++ b/docs/interfaces/JGOFAIReviewMoveVariation.html @@ -1,4 +1,4 @@ -JGOFAIReviewMoveVariation | goban

    Interface JGOFAIReviewMoveVariation

    interface JGOFAIReviewMoveVariation {
        lcb?: number;
        moves: JGOFIntersection[];
        policy?: number;
        score?: number;
        score_mean?: number;
        score_stdev?: number;
        utility?: number;
        utility_lcb?: number;
        visits: number;
        win_rate: number;
    }

    Properties

    lcb? +JGOFAIReviewMoveVariation | goban

    Interface JGOFAIReviewMoveVariation

    interface JGOFAIReviewMoveVariation {
        lcb?: number;
        moves: JGOFIntersection[];
        policy?: number;
        score?: number;
        score_mean?: number;
        score_stdev?: number;
        utility?: number;
        utility_lcb?: number;
        visits: number;
        win_rate: number;
    }

    Properties

    lcb? moves policy? score? @@ -9,13 +9,13 @@ visits win_rate

    Properties

    lcb?: number

    lower confidence bound, both KataGo and LeelaZero provide this

    -

    Followup predicted moves by the AI

    -
    policy?: number

    From Leela Zero

    -
    score?: number

    How many points black is predicted to win for this variation (or lose by if negative)

    -
    score_mean?: number

    From KataGo

    -
    score_stdev?: number

    From KataGo

    -
    utility?: number

    From KataGo

    -
    utility_lcb?: number

    From KataGo

    -
    visits: number

    Number of times the AI considered the first move of this variation

    -
    win_rate: number

    Probability of black wining to report for this variation

    -
    \ No newline at end of file +

    Followup predicted moves by the AI

    +
    policy?: number

    From Leela Zero

    +
    score?: number

    How many points black is predicted to win for this variation (or lose by if negative)

    +
    score_mean?: number

    From KataGo

    +
    score_stdev?: number

    From KataGo

    +
    utility?: number

    From KataGo

    +
    utility_lcb?: number

    From KataGo

    +
    visits: number

    Number of times the AI considered the first move of this variation

    +
    win_rate: number

    Probability of black wining to report for this variation

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFAbsoluteTimeControl.html b/docs/interfaces/JGOFAbsoluteTimeControl.html index 3ff15657..2218aaaf 100644 --- a/docs/interfaces/JGOFAbsoluteTimeControl.html +++ b/docs/interfaces/JGOFAbsoluteTimeControl.html @@ -1,5 +1,5 @@ -JGOFAbsoluteTimeControl | goban

    Interface JGOFAbsoluteTimeControl

    interface JGOFAbsoluteTimeControl {
        pause_on_weekends: boolean;
        speed: JGOFTimeControlSpeed;
        system: "absolute";
        total_time: number;
    }

    Properties

    pause_on_weekends +JGOFAbsoluteTimeControl | goban

    Interface JGOFAbsoluteTimeControl

    interface JGOFAbsoluteTimeControl {
        pause_on_weekends: boolean;
        speed: JGOFTimeControlSpeed;
        system: "absolute";
        total_time: number;
    }

    Properties

    pause_on_weekends: boolean
    system: "absolute"
    total_time: number
    \ No newline at end of file +

    Properties

    pause_on_weekends: boolean
    system: "absolute"
    total_time: number
    \ No newline at end of file diff --git a/docs/interfaces/JGOFByoYomiTimeControl.html b/docs/interfaces/JGOFByoYomiTimeControl.html index 49459905..5e8e40df 100644 --- a/docs/interfaces/JGOFByoYomiTimeControl.html +++ b/docs/interfaces/JGOFByoYomiTimeControl.html @@ -1,7 +1,7 @@ -JGOFByoYomiTimeControl | goban

    Interface JGOFByoYomiTimeControl

    interface JGOFByoYomiTimeControl {
        main_time: number;
        pause_on_weekends: boolean;
        period_time: number;
        periods: number;
        speed: JGOFTimeControlSpeed;
        system: "byoyomi";
    }

    Properties

    main_time +JGOFByoYomiTimeControl | goban

    Interface JGOFByoYomiTimeControl

    interface JGOFByoYomiTimeControl {
        main_time: number;
        pause_on_weekends: boolean;
        period_time: number;
        periods: number;
        speed: JGOFTimeControlSpeed;
        system: "byoyomi";
    }

    Properties

    main_time: number
    pause_on_weekends: boolean
    period_time: number
    periods: number
    system: "byoyomi"
    \ No newline at end of file +

    Properties

    main_time: number
    pause_on_weekends: boolean
    period_time: number
    periods: number
    system: "byoyomi"
    \ No newline at end of file diff --git a/docs/interfaces/JGOFCanadianTimeControl.html b/docs/interfaces/JGOFCanadianTimeControl.html index 08c2c61e..242668ea 100644 --- a/docs/interfaces/JGOFCanadianTimeControl.html +++ b/docs/interfaces/JGOFCanadianTimeControl.html @@ -1,7 +1,7 @@ -JGOFCanadianTimeControl | goban

    Interface JGOFCanadianTimeControl

    interface JGOFCanadianTimeControl {
        main_time: number;
        pause_on_weekends: boolean;
        period_time: number;
        speed: JGOFTimeControlSpeed;
        stones_per_period: number;
        system: "canadian";
    }

    Properties

    main_time +JGOFCanadianTimeControl | goban

    Interface JGOFCanadianTimeControl

    interface JGOFCanadianTimeControl {
        main_time: number;
        pause_on_weekends: boolean;
        period_time: number;
        speed: JGOFTimeControlSpeed;
        stones_per_period: number;
        system: "canadian";
    }

    Properties

    main_time: number
    pause_on_weekends: boolean
    period_time: number
    stones_per_period: number
    system: "canadian"
    \ No newline at end of file +

    Properties

    main_time: number
    pause_on_weekends: boolean
    period_time: number
    stones_per_period: number
    system: "canadian"
    \ No newline at end of file diff --git a/docs/interfaces/JGOFClock.html b/docs/interfaces/JGOFClock.html index 0c3bbbb7..765e078e 100644 --- a/docs/interfaces/JGOFClock.html +++ b/docs/interfaces/JGOFClock.html @@ -1,5 +1,5 @@ JGOFClock | goban

    Interface JGOFClock


    -
    interface JGOFClock {
        black_clock: JGOFPlayerClock;
        current_player: "black" | "white";
        current_player_id: string;
        pause_state?: JGOFPauseState;
        paused_since?: number;
        start_mode?: boolean;
        start_time_left?: number;
        stone_removal_time_left?: number;
        time_of_last_move: number;
        white_clock: JGOFPlayerClock;
    }

    Hierarchy (view full)

    Properties

    interface JGOFClock {
        black_clock: JGOFPlayerClock;
        current_player: "black" | "white";
        current_player_id: string;
        pause_state?: JGOFPauseState;
        paused_since?: number;
        start_mode?: boolean;
        start_time_left?: number;
        stone_removal_time_left?: number;
        time_of_last_move: number;
        white_clock: JGOFPlayerClock;
    }

    Hierarchy (view full)

    Properties

    black_clock: JGOFPlayerClock

    Time left on blacks clock.

    -
    current_player: "black" | "white"

    Player to move, and thus player whose clock is running.

    -
    current_player_id: string

    Player ID of player to move

    -
    pause_state?: JGOFPauseState

    If this field is set, the game clocks are paused for one or more reasons.

    -
    paused_since?: number

    Time the game was paused, in milliseconds since 1970, as observed by the server

    -
    start_mode?: boolean

    True if the game has not begun yet and we are waiting for the first +

    current_player: "black" | "white"

    Player to move, and thus player whose clock is running.

    +
    current_player_id: string

    Player ID of player to move

    +
    pause_state?: JGOFPauseState

    If this field is set, the game clocks are paused for one or more reasons.

    +
    paused_since?: number

    Time the game was paused, in milliseconds since 1970, as observed by the server

    +
    start_mode?: boolean

    True if the game has not begun yet and we are waiting for the first move to be played. If this is true, start_time_left will be set.

    -
    start_time_left?: number

    If start_mode is true, this is the number of milliseconds left +

    start_time_left?: number

    If start_mode is true, this is the number of milliseconds left on the start clock, when the clock reaches zero the game will be canceled.

    -
    stone_removal_time_left?: number

    If pause_State.stone_removal is true, this is the number of +

    stone_removal_time_left?: number

    If pause_State.stone_removal is true, this is the number of milliseconds left before the result is automatically accepted.

    -
    time_of_last_move: number

    Time the last move was made, in milliseconds since 1970, as observed by the server.

    -
    white_clock: JGOFPlayerClock

    Time left on whites clock.

    -
    \ No newline at end of file +
    time_of_last_move: number

    Time the last move was made, in milliseconds since 1970, as observed by the server.

    +
    white_clock: JGOFPlayerClock

    Time left on whites clock.

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFClockWithTransmitting.html b/docs/interfaces/JGOFClockWithTransmitting.html index 8b505b4f..29b57569 100644 --- a/docs/interfaces/JGOFClockWithTransmitting.html +++ b/docs/interfaces/JGOFClockWithTransmitting.html @@ -1,5 +1,5 @@ JGOFClockWithTransmitting | goban

    Interface JGOFClockWithTransmitting


    -
    interface JGOFClockWithTransmitting {
        black_clock: JGOFPlayerClock;
        black_move_transmitting: number;
        current_player: "black" | "white";
        current_player_id: string;
        pause_state?: JGOFPauseState;
        paused_since?: number;
        start_mode?: boolean;
        start_time_left?: number;
        stone_removal_time_left?: number;
        time_of_last_move: number;
        white_clock: JGOFPlayerClock;
        white_move_transmitting: number;
    }

    Hierarchy (view full)

    Properties

    interface JGOFClockWithTransmitting {
        black_clock: JGOFPlayerClock;
        black_move_transmitting: number;
        current_player: "black" | "white";
        current_player_id: string;
        pause_state?: JGOFPauseState;
        paused_since?: number;
        start_mode?: boolean;
        start_time_left?: number;
        stone_removal_time_left?: number;
        time_of_last_move: number;
        white_clock: JGOFPlayerClock;
        white_move_transmitting: number;
    }

    Hierarchy (view full)

    Properties

    black_clock: JGOFPlayerClock

    Time left on blacks clock.

    -
    black_move_transmitting: number
    current_player: "black" | "white"

    Player to move, and thus player whose clock is running.

    -
    current_player_id: string

    Player ID of player to move

    -
    pause_state?: JGOFPauseState

    If this field is set, the game clocks are paused for one or more reasons.

    -
    paused_since?: number

    Time the game was paused, in milliseconds since 1970, as observed by the server

    -
    start_mode?: boolean

    True if the game has not begun yet and we are waiting for the first +

    black_move_transmitting: number
    current_player: "black" | "white"

    Player to move, and thus player whose clock is running.

    +
    current_player_id: string

    Player ID of player to move

    +
    pause_state?: JGOFPauseState

    If this field is set, the game clocks are paused for one or more reasons.

    +
    paused_since?: number

    Time the game was paused, in milliseconds since 1970, as observed by the server

    +
    start_mode?: boolean

    True if the game has not begun yet and we are waiting for the first move to be played. If this is true, start_time_left will be set.

    -
    start_time_left?: number

    If start_mode is true, this is the number of milliseconds left +

    start_time_left?: number

    If start_mode is true, this is the number of milliseconds left on the start clock, when the clock reaches zero the game will be canceled.

    -
    stone_removal_time_left?: number

    If pause_State.stone_removal is true, this is the number of +

    stone_removal_time_left?: number

    If pause_State.stone_removal is true, this is the number of milliseconds left before the result is automatically accepted.

    -
    time_of_last_move: number

    Time the last move was made, in milliseconds since 1970, as observed by the server.

    -
    white_clock: JGOFPlayerClock

    Time left on whites clock.

    -
    white_move_transmitting: number
    \ No newline at end of file +
    time_of_last_move: number

    Time the last move was made, in milliseconds since 1970, as observed by the server.

    +
    white_clock: JGOFPlayerClock

    Time left on whites clock.

    +
    white_move_transmitting: number
    \ No newline at end of file diff --git a/docs/interfaces/JGOFFischerTimeControl.html b/docs/interfaces/JGOFFischerTimeControl.html index 0a70b9a2..6bc255f3 100644 --- a/docs/interfaces/JGOFFischerTimeControl.html +++ b/docs/interfaces/JGOFFischerTimeControl.html @@ -1,7 +1,7 @@ -JGOFFischerTimeControl | goban

    Interface JGOFFischerTimeControl

    interface JGOFFischerTimeControl {
        initial_time: number;
        max_time: number;
        pause_on_weekends: boolean;
        speed: JGOFTimeControlSpeed;
        system: "fischer";
        time_increment: number;
    }

    Properties

    initial_time +JGOFFischerTimeControl | goban

    Interface JGOFFischerTimeControl

    interface JGOFFischerTimeControl {
        initial_time: number;
        max_time: number;
        pause_on_weekends: boolean;
        speed: JGOFTimeControlSpeed;
        system: "fischer";
        time_increment: number;
    }

    Properties

    initial_time: number
    max_time: number
    pause_on_weekends: boolean
    system: "fischer"
    time_increment: number
    \ No newline at end of file +

    Properties

    initial_time: number
    max_time: number
    pause_on_weekends: boolean
    system: "fischer"
    time_increment: number
    \ No newline at end of file diff --git a/docs/interfaces/JGOFIntersection.html b/docs/interfaces/JGOFIntersection.html index 8418a511..0438a0d6 100644 --- a/docs/interfaces/JGOFIntersection.html +++ b/docs/interfaces/JGOFIntersection.html @@ -1,5 +1,5 @@ -JGOFIntersection | goban

    Interface JGOFIntersection

    interface JGOFIntersection {
        x: number;
        y: number;
    }

    Hierarchy (view full)

    Properties

    x +JGOFIntersection | goban

    Interface JGOFIntersection

    interface JGOFIntersection {
        x: number;
        y: number;
    }

    Hierarchy (view full)

    Properties

    x y

    Properties

    x: number

    Horizontal coordinate, counting left to right, starting with zero

    -
    y: number

    Vertical coordinate, counting top to bottom, starting with zero

    -
    \ No newline at end of file +
    y: number

    Vertical coordinate, counting top to bottom, starting with zero

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFMove.html b/docs/interfaces/JGOFMove.html index 7859b416..52134332 100644 --- a/docs/interfaces/JGOFMove.html +++ b/docs/interfaces/JGOFMove.html @@ -1,4 +1,4 @@ -JGOFMove | goban

    Interface JGOFMove

    interface JGOFMove {
        blur?: number;
        color?: JGOFNumericPlayerColor;
        edited?: boolean;
        played_by?: number;
        player_update?: JGOFPlayerSummary;
        removal_reason?: string;
        sgf_downloaded_by?: number[];
        timedelta?: number;
        x: number;
        y: number;
    }

    Hierarchy (view full)

    Properties

    blur? +JGOFMove | goban

    Interface JGOFMove

    interface JGOFMove {
        blur?: number;
        color?: JGOFNumericPlayerColor;
        edited?: boolean;
        played_by?: number;
        player_update?: JGOFPlayerSummary;
        removal_reason?: string;
        sgf_downloaded_by?: number[];
        timedelta?: number;
        x: number;
        y: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    blur?: number
    edited?: boolean
    played_by?: number
    player_update?: JGOFPlayerSummary
    removal_reason?: string

    Stone removal reasoning, primarily for debugging

    -
    sgf_downloaded_by?: number[]
    timedelta?: number
    x: number

    Horizontal coordinate, counting left to right, starting with zero

    -
    y: number

    Vertical coordinate, counting top to bottom, starting with zero

    -
    \ No newline at end of file +

    Properties

    blur?: number
    edited?: boolean
    played_by?: number
    player_update?: JGOFPlayerSummary
    removal_reason?: string

    Stone removal reasoning, primarily for debugging

    +
    sgf_downloaded_by?: number[]
    timedelta?: number
    x: number

    Horizontal coordinate, counting left to right, starting with zero

    +
    y: number

    Vertical coordinate, counting top to bottom, starting with zero

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFNoneTimeControl.html b/docs/interfaces/JGOFNoneTimeControl.html index ff279667..bb382d3c 100644 --- a/docs/interfaces/JGOFNoneTimeControl.html +++ b/docs/interfaces/JGOFNoneTimeControl.html @@ -1,4 +1,4 @@ -JGOFNoneTimeControl | goban

    Interface JGOFNoneTimeControl

    interface JGOFNoneTimeControl {
        pause_on_weekends: boolean;
        speed: "correspondence";
        system: "none";
    }

    Properties

    pause_on_weekends +JGOFNoneTimeControl | goban

    Interface JGOFNoneTimeControl

    interface JGOFNoneTimeControl {
        pause_on_weekends: boolean;
        speed: "correspondence";
        system: "none";
    }

    Properties

    pause_on_weekends: boolean
    speed: "correspondence"
    system: "none"
    \ No newline at end of file +

    Properties

    pause_on_weekends: boolean
    speed: "correspondence"
    system: "none"
    \ No newline at end of file diff --git a/docs/interfaces/JGOFPauseState.html b/docs/interfaces/JGOFPauseState.html index fe4f553e..c992a952 100644 --- a/docs/interfaces/JGOFPauseState.html +++ b/docs/interfaces/JGOFPauseState.html @@ -1,16 +1,16 @@ -JGOFPauseState | goban

    Interface JGOFPauseState

    interface JGOFPauseState {
        moderator?: string;
        player?: {
            pauses_left: number;
            player_id: string;
        };
        server?: true;
        stone_removal?: true;
        vacation?: {
            [player_id: string]: true;
        };
        weekend?: true;
    }

    Properties

    moderator? +JGOFPauseState | goban

    Interface JGOFPauseState

    interface JGOFPauseState {
        moderator?: string;
        player?: {
            pauses_left: number;
            player_id: string;
        };
        server?: true;
        stone_removal?: true;
        vacation?: {
            [player_id: string]: true;
        };
        weekend?: true;
    }

    Properties

    moderator?: string

    Paused by a moderator, value of this field is the moderator's id

    -
    player?: {
        pauses_left: number;
        player_id: string;
    }

    Paused by a player. The game can only be paused by one player at a time.

    +
    player?: {
        pauses_left: number;
        player_id: string;
    }

    Paused by a player. The game can only be paused by one player at a time.

    Type declaration

    • pauses_left: number

      Number of pauses left for the pausing player.

    • player_id: string

      Player id of the player who paused the game.

      -
    server?: true

    Paused by the server

    -
    stone_removal?: true

    Paused because the game is in the stone removal phase

    -
    vacation?: {
        [player_id: string]: true;
    }

    Paused because one or more players is on vacation

    +
    server?: true

    Paused by the server

    +
    stone_removal?: true

    Paused because the game is in the stone removal phase

    +
    vacation?: {
        [player_id: string]: true;
    }

    Paused because one or more players is on vacation

    Type declaration

    • [player_id: string]: true

      Player id that is on vacation

      -
    weekend?: true

    Paused because it is the weekend

    -
    \ No newline at end of file +
    weekend?: true

    Paused because it is the weekend

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFPlayer.html b/docs/interfaces/JGOFPlayer.html index a0436637..b0aec775 100644 --- a/docs/interfaces/JGOFPlayer.html +++ b/docs/interfaces/JGOFPlayer.html @@ -1,5 +1,5 @@ -JGOFPlayer | goban

    Interface JGOFPlayer

    interface JGOFPlayer {
        id?: string;
        name: string;
    }

    Properties

    id? +JGOFPlayer | goban

    Interface JGOFPlayer

    interface JGOFPlayer {
        id?: string;
        name: string;
    }

    Properties

    Properties

    id?: string

    Identifier for the player

    -
    name: string

    Name or username of the player

    -
    \ No newline at end of file +
    name: string

    Name or username of the player

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFPlayerClock.html b/docs/interfaces/JGOFPlayerClock.html index de3a2cdb..c687d964 100644 --- a/docs/interfaces/JGOFPlayerClock.html +++ b/docs/interfaces/JGOFPlayerClock.html @@ -1,13 +1,13 @@ -JGOFPlayerClock | goban

    Interface JGOFPlayerClock

    interface JGOFPlayerClock {
        block_time_left?: number;
        main_time: number;
        moves_left?: number;
        period_time_left?: number;
        periods_left?: number;
    }

    Hierarchy (view full)

    Properties

    block_time_left? +JGOFPlayerClock | goban

    Interface JGOFPlayerClock

    interface JGOFPlayerClock {
        block_time_left?: number;
        main_time: number;
        moves_left?: number;
        period_time_left?: number;
        periods_left?: number;
    }

    Hierarchy (view full)

    Properties

    block_time_left?: number

    Used with canadian time control. Time left in milliseconds to make the remainder of your moves in the current block

    -
    main_time: number

    Main time left on the clock, in milliseconds.

    -
    moves_left?: number

    Used with canadian time control. Number of moves left before a new +

    main_time: number

    Main time left on the clock, in milliseconds.

    +
    moves_left?: number

    Used with canadian time control. Number of moves left before a new block of time.

    -
    period_time_left?: number

    Used with byo-yomi time control. Time left on the period time, in milliseconds.

    -
    periods_left?: number

    Used with byo-yomi time control. Number of periods left.

    -
    \ No newline at end of file +
    period_time_left?: number

    Used with byo-yomi time control. Time left on the period time, in milliseconds.

    +
    periods_left?: number

    Used with byo-yomi time control. Number of periods left.

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFPlayerSummary.html b/docs/interfaces/JGOFPlayerSummary.html index 7f79dd02..fb068d8a 100644 --- a/docs/interfaces/JGOFPlayerSummary.html +++ b/docs/interfaces/JGOFPlayerSummary.html @@ -1,4 +1,4 @@ -JGOFPlayerSummary | goban

    Interface JGOFPlayerSummary

    interface JGOFPlayerSummary {
        dropped_players?: {
            black?: number[];
            white?: number[];
        };
        players: {
            black: number;
            white: number;
        };
        rengo_teams: {
            black: number[];
            white: number[];
        };
    }

    Properties

    dropped_players? +JGOFPlayerSummary | goban

    Interface JGOFPlayerSummary

    interface JGOFPlayerSummary {
        dropped_players?: {
            black?: number[];
            white?: number[];
        };
        players: {
            black: number;
            white: number;
        };
        rengo_teams: {
            black: number[];
            white: number[];
        };
    }

    Properties

    dropped_players?: {
        black?: number[];
        white?: number[];
    }

    Type declaration

    • Optional black?: number[]
    • Optional white?: number[]
    players: {
        black: number;
        white: number;
    }

    Type declaration

    • black: number
    • white: number
    rengo_teams: {
        black: number[];
        white: number[];
    }

    Type declaration

    • black: number[]
    • white: number[]
    \ No newline at end of file +

    Properties

    dropped_players?: {
        black?: number[];
        white?: number[];
    }

    Type declaration

    • Optional black?: number[]
    • Optional white?: number[]
    players: {
        black: number;
        white: number;
    }

    Type declaration

    • black: number
    • white: number
    rengo_teams: {
        black: number[];
        white: number[];
    }

    Type declaration

    • black: number[]
    • white: number[]
    \ No newline at end of file diff --git a/docs/interfaces/JGOFSealingIntersection.html b/docs/interfaces/JGOFSealingIntersection.html index 6f7db767..ee66d368 100644 --- a/docs/interfaces/JGOFSealingIntersection.html +++ b/docs/interfaces/JGOFSealingIntersection.html @@ -1,8 +1,8 @@ -JGOFSealingIntersection | goban

    Interface JGOFSealingIntersection

    interface JGOFSealingIntersection {
        color: JGOFNumericPlayerColor;
        x: number;
        y: number;
    }

    Hierarchy (view full)

    Properties

    color +JGOFSealingIntersection | goban

    Interface JGOFSealingIntersection

    interface JGOFSealingIntersection {
        color: JGOFNumericPlayerColor;
        x: number;
        y: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    Color the intersection is probably presumed to be by the players, but is in fact empty.

    -
    x: number

    Horizontal coordinate, counting left to right, starting with zero

    -
    y: number

    Vertical coordinate, counting top to bottom, starting with zero

    -
    \ No newline at end of file +
    x: number

    Horizontal coordinate, counting left to right, starting with zero

    +
    y: number

    Vertical coordinate, counting top to bottom, starting with zero

    +
    \ No newline at end of file diff --git a/docs/interfaces/JGOFSimpleTimeControl.html b/docs/interfaces/JGOFSimpleTimeControl.html index 39a9140f..342a0a92 100644 --- a/docs/interfaces/JGOFSimpleTimeControl.html +++ b/docs/interfaces/JGOFSimpleTimeControl.html @@ -1,5 +1,5 @@ -JGOFSimpleTimeControl | goban

    Interface JGOFSimpleTimeControl

    interface JGOFSimpleTimeControl {
        pause_on_weekends: boolean;
        per_move: number;
        speed: JGOFTimeControlSpeed;
        system: "simple";
    }

    Properties

    pause_on_weekends +JGOFSimpleTimeControl | goban

    Interface JGOFSimpleTimeControl

    interface JGOFSimpleTimeControl {
        pause_on_weekends: boolean;
        per_move: number;
        speed: JGOFTimeControlSpeed;
        system: "simple";
    }

    Properties

    pause_on_weekends: boolean
    per_move: number
    system: "simple"
    \ No newline at end of file +

    Properties

    pause_on_weekends: boolean
    per_move: number
    system: "simple"
    \ No newline at end of file diff --git a/docs/interfaces/MarkInterface.html b/docs/interfaces/MarkInterface.html index 169830de..48e79499 100644 --- a/docs/interfaces/MarkInterface.html +++ b/docs/interfaces/MarkInterface.html @@ -1,4 +1,4 @@ -MarkInterface | goban

    Interface MarkInterface

    interface MarkInterface {
        black?: boolean;
        blue_move?: boolean;
        chat_triangle?: boolean;
        circle?: boolean;
        color?: string;
        cross?: boolean;
        hint?: boolean;
        letter?: string;
        mark_x?: boolean;
        needs_sealing?: boolean;
        remove?: boolean;
        score?: string;
        square?: boolean;
        stone_removed?: boolean;
        sub_triangle?: boolean;
        subscript?: string;
        transient_letter?: string;
        triangle?: boolean;
        white?: boolean;
        [label: string]: string | boolean | undefined;
    }

    Indexable

    [label: string]: string | boolean | undefined

    Properties

    black? +MarkInterface | goban

    Interface MarkInterface

    interface MarkInterface {
        black?: boolean;
        blue_move?: boolean;
        chat_triangle?: boolean;
        circle?: boolean;
        color?: string;
        cross?: boolean;
        hint?: boolean;
        letter?: string;
        mark_x?: boolean;
        needs_sealing?: boolean;
        remove?: boolean;
        score?: string;
        square?: boolean;
        stone_removed?: boolean;
        sub_triangle?: boolean;
        subscript?: string;
        transient_letter?: string;
        triangle?: boolean;
        white?: boolean;
        [label: string]: string | boolean | undefined;
    }

    Indexable

    [label: string]: string | boolean | undefined

    Properties

    black?: boolean
    blue_move?: boolean
    chat_triangle?: boolean
    circle?: boolean
    color?: string
    cross?: boolean
    hint?: boolean
    letter?: string
    mark_x?: boolean
    needs_sealing?: boolean
    remove?: boolean
    score?: string
    square?: boolean
    stone_removed?: boolean
    sub_triangle?: boolean
    subscript?: string
    transient_letter?: string
    triangle?: boolean
    white?: boolean
    \ No newline at end of file +

    Properties

    black?: boolean
    blue_move?: boolean
    chat_triangle?: boolean
    circle?: boolean
    color?: string
    cross?: boolean
    hint?: boolean
    letter?: string
    mark_x?: boolean
    needs_sealing?: boolean
    remove?: boolean
    score?: string
    square?: boolean
    stone_removed?: boolean
    sub_triangle?: boolean
    subscript?: string
    transient_letter?: string
    triangle?: boolean
    white?: boolean
    \ No newline at end of file diff --git a/docs/interfaces/MoveCommand.html b/docs/interfaces/MoveCommand.html index dc6edc99..57542355 100644 --- a/docs/interfaces/MoveCommand.html +++ b/docs/interfaces/MoveCommand.html @@ -1,5 +1,5 @@ -MoveCommand | goban

    Interface MoveCommand

    interface MoveCommand {
        blur?: number;
        clock?: JGOFPlayerClock;
        game_id: number;
        move: string;
    }

    Properties

    blur? +MoveCommand | goban

    Interface MoveCommand

    interface MoveCommand {
        blur?: number;
        clock?: JGOFPlayerClock;
        game_id: number;
        move: string;
    }

    Properties

    Properties

    blur?: number
    game_id: number
    move: string
    \ No newline at end of file +

    Properties

    blur?: number
    game_id: number
    move: string
    \ No newline at end of file diff --git a/docs/interfaces/MoveTreeChatLine.html b/docs/interfaces/MoveTreeChatLine.html index 8eb975a2..c918a808 100644 --- a/docs/interfaces/MoveTreeChatLine.html +++ b/docs/interfaces/MoveTreeChatLine.html @@ -1,3 +1,3 @@ -MoveTreeChatLine | goban

    Interface MoveTreeChatLine

    interface MoveTreeChatLine {
        body: MoveTreeChatLineBody;
        username: string;
    }

    Properties

    body +MoveTreeChatLine | goban

    Interface MoveTreeChatLine

    interface MoveTreeChatLine {
        body: MoveTreeChatLineBody;
        username: string;
    }

    Properties

    Properties

    username: string
    \ No newline at end of file +

    Properties

    username: string
    \ No newline at end of file diff --git a/docs/interfaces/MoveTreeChatLineBody.html b/docs/interfaces/MoveTreeChatLineBody.html index daac64a4..60113eaa 100644 --- a/docs/interfaces/MoveTreeChatLineBody.html +++ b/docs/interfaces/MoveTreeChatLineBody.html @@ -1,5 +1,5 @@ -MoveTreeChatLineBody | goban

    Interface MoveTreeChatLineBody

    interface MoveTreeChatLineBody {
        from: number;
        moves: string | AdHocPackedMove;
        name: string;
        type: "analysis";
    }

    Properties

    from +MoveTreeChatLineBody | goban

    Interface MoveTreeChatLineBody

    interface MoveTreeChatLineBody {
        from: number;
        moves: string | AdHocPackedMove;
        name: string;
        type: "analysis";
    }

    Properties

    Properties

    from: number
    moves: string | AdHocPackedMove
    name: string
    type: "analysis"
    \ No newline at end of file +

    Properties

    from: number
    moves: string | AdHocPackedMove
    name: string
    type: "analysis"
    \ No newline at end of file diff --git a/docs/interfaces/MoveTreeJson.html b/docs/interfaces/MoveTreeJson.html index be4ee197..6ce4f3ef 100644 --- a/docs/interfaces/MoveTreeJson.html +++ b/docs/interfaces/MoveTreeJson.html @@ -1,4 +1,4 @@ -MoveTreeJson | goban

    Interface MoveTreeJson

    interface MoveTreeJson {
        branches?: MoveTreeJson[];
        correct_answer?: boolean;
        marks?: {
            marks: MarkInterface;
            x: number;
            y: number;
        }[];
        pen_marks?: MoveTreePenMarks;
        text?: string;
        trunk_next?: MoveTreeJson;
        wrong_answer?: boolean;
        x: number;
        y: number;
    }

    Properties

    branches? +MoveTreeJson | goban

    Interface MoveTreeJson

    interface MoveTreeJson {
        branches?: MoveTreeJson[];
        correct_answer?: boolean;
        marks?: {
            marks: MarkInterface;
            x: number;
            y: number;
        }[];
        pen_marks?: MoveTreePenMarks;
        text?: string;
        trunk_next?: MoveTreeJson;
        wrong_answer?: boolean;
        x: number;
        y: number;
    }

    Properties

    branches?: MoveTreeJson[]
    correct_answer?: boolean
    marks?: {
        marks: MarkInterface;
        x: number;
        y: number;
    }[]

    Type declaration

    pen_marks?: MoveTreePenMarks
    text?: string
    trunk_next?: MoveTreeJson
    wrong_answer?: boolean
    x: number
    y: number
    \ No newline at end of file +

    Properties

    branches?: MoveTreeJson[]
    correct_answer?: boolean
    marks?: {
        marks: MarkInterface;
        x: number;
        y: number;
    }[]

    Type declaration

    pen_marks?: MoveTreePenMarks
    text?: string
    trunk_next?: MoveTreeJson
    wrong_answer?: boolean
    x: number
    y: number
    \ No newline at end of file diff --git a/docs/interfaces/PlayerScore.html b/docs/interfaces/PlayerScore.html index 2599450b..42fc4025 100644 --- a/docs/interfaces/PlayerScore.html +++ b/docs/interfaces/PlayerScore.html @@ -1,8 +1,8 @@ -PlayerScore | goban

    Interface PlayerScore

    interface PlayerScore {
        handicap: number;
        komi: number;
        prisoners: number;
        scoring_positions: string;
        stones: number;
        territory: number;
        total: number;
    }

    Properties

    handicap +PlayerScore | goban

    Interface PlayerScore

    interface PlayerScore {
        handicap: number;
        komi: number;
        prisoners: number;
        scoring_positions: string;
        stones: number;
        territory: number;
        total: number;
    }

    Properties

    handicap: number
    komi: number
    prisoners: number
    scoring_positions: string
    stones: number
    territory: number
    total: number
    \ No newline at end of file +

    Properties

    handicap: number
    komi: number
    prisoners: number
    scoring_positions: string
    stones: number
    territory: number
    total: number
    \ No newline at end of file diff --git a/docs/interfaces/PuzzleConfig.html b/docs/interfaces/PuzzleConfig.html index fdfc7a97..cb695288 100644 --- a/docs/interfaces/PuzzleConfig.html +++ b/docs/interfaces/PuzzleConfig.html @@ -1,4 +1,4 @@ -PuzzleConfig | goban

    Interface PuzzleConfig

    interface PuzzleConfig {
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_is_repeating?: boolean;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        isobranch_hash?: string;
        marks?: {
            [mark: string]: string;
        };
        mode?: string;
        move_tree?: MoveTreeJson;
        name?: string;
        player?: JGOFNumericPlayerColor;
        puzzle_autoplace_delay?: number;
        puzzle_collection?: number;
        puzzle_description?: string;
        puzzle_opponent_move_mode?: PuzzleOpponentMoveMode;
        puzzle_player_move_mode?: PuzzlePlayerMoveMode;
        puzzle_rank?: number;
        puzzle_type?: string;
        removal?: boolean[][];
        white_prisoners?: number;
        width?: number;
    }

    Hierarchy (view full)

    Properties

    black_prisoners? +PuzzleConfig | goban

    Interface PuzzleConfig

    interface PuzzleConfig {
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_is_repeating?: boolean;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        isobranch_hash?: string;
        marks?: {
            [mark: string]: string;
        };
        mode?: string;
        move_tree?: MoveTreeJson;
        name?: string;
        player?: JGOFNumericPlayerColor;
        puzzle_autoplace_delay?: number;
        puzzle_collection?: number;
        puzzle_description?: string;
        puzzle_opponent_move_mode?: PuzzleOpponentMoveMode;
        puzzle_player_move_mode?: PuzzlePlayerMoveMode;
        puzzle_rank?: number;
        puzzle_type?: string;
        removal?: boolean[][];
        white_prisoners?: number;
        width?: number;
    }

    Hierarchy (view full)

    Properties

    black_prisoners?: number
    board_is_repeating?: boolean
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    isobranch_hash?: string
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    mode?: string
    move_tree?: MoveTreeJson
    name?: string
    puzzle_autoplace_delay?: number
    puzzle_collection?: number
    puzzle_description?: string
    puzzle_opponent_move_mode?: PuzzleOpponentMoveMode
    puzzle_player_move_mode?: PuzzlePlayerMoveMode
    puzzle_rank?: number
    puzzle_type?: string
    removal?: boolean[][]
    white_prisoners?: number
    width?: number
    \ No newline at end of file +

    Properties

    black_prisoners?: number
    board_is_repeating?: boolean
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    isobranch_hash?: string
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    mode?: string
    move_tree?: MoveTreeJson
    name?: string
    puzzle_autoplace_delay?: number
    puzzle_collection?: number
    puzzle_description?: string
    puzzle_opponent_move_mode?: PuzzleOpponentMoveMode
    puzzle_player_move_mode?: PuzzlePlayerMoveMode
    puzzle_rank?: number
    puzzle_type?: string
    removal?: boolean[][]
    white_prisoners?: number
    width?: number
    \ No newline at end of file diff --git a/docs/interfaces/ReviewMessage.html b/docs/interfaces/ReviewMessage.html index 75a7552b..d6b54ab3 100644 --- a/docs/interfaces/ReviewMessage.html +++ b/docs/interfaces/ReviewMessage.html @@ -1,7 +1,7 @@ ReviewMessage | goban

    Interface ReviewMessage

    Reviews are constructed by a stream of modifications messages, this interface describes the format of those modification messages. A message can contain any number of the fields listed.

    -
    interface ReviewMessage {
        chat?: {
            channel: string;
            chat_id: string;
            date: number;
            from: number;
            moves: string | AdHocPackedMove;
            player_id: number;
        };
        clearpen?: boolean;
        controller?: number | {
            id: number;
            username: string;
        };
        delete?: number;
        f?: number;
        gamedata?: GobanEngineConfig;
        k?: {
            [mark: string]: string;
        };
        m?: string;
        om?: [number, number, number];
        owner?: number | {
            id: number;
            username: string;
        };
        pen?: string;
        player_update?: JGOFPlayerSummary;
        pp?: [number, number];
        remove-chat?: string;
        review_id?: number;
        t?: string;
        t+?: string;
        ts?: number;
        undo?: boolean;
    }

    Properties

    interface ReviewMessage {
        chat?: {
            channel: string;
            chat_id: string;
            date: number;
            from: number;
            moves: string | AdHocPackedMove;
            player_id: number;
        };
        clearpen?: boolean;
        controller?: number | {
            id: number;
            username: string;
        };
        delete?: number;
        f?: number;
        gamedata?: GobanEngineConfig;
        k?: {
            [mark: string]: string;
        };
        m?: string;
        om?: [number, number, number];
        owner?: number | {
            id: number;
            username: string;
        };
        pen?: string;
        player_update?: JGOFPlayerSummary;
        pp?: [number, number];
        remove-chat?: string;
        review_id?: number;
        t?: string;
        t+?: string;
        ts?: number;
        undo?: boolean;
    }

    Properties

    chat? clearpen? controller? delete? @@ -23,24 +23,24 @@

    Properties

    chat?: {
        channel: string;
        chat_id: string;
        date: number;
        from: number;
        moves: string | AdHocPackedMove;
        player_id: number;
    }

    Chat message

    Type declaration

    • channel: string
    • chat_id: string
    • date: number
    • from: number

      Turn number

    • moves: string | AdHocPackedMove

      this might just be "string", i'm not entirely sure

      -
    • player_id: number
    clearpen?: boolean

    Clears the pen drawings on the node

    -
    controller?: number | {
        id: number;
        username: string;
    }

    Sets the controller of the review

    -

    Type declaration

    • id: number
    • username: string
    delete?: number

    Delete

    -
    f?: number

    from (move number)

    -

    Initial gamedata to review

    -
    k?: {
        [mark: string]: string;
    }

    Marks made

    -

    Type declaration

    • [mark: string]: string
    m?: string

    Moves made

    -
    om?: [number, number, number]

    official move [reviewing live game]

    -
    owner?: number | {
        id: number;
        username: string;
    }

    Sets the owner of the review

    -

    Type declaration

    • id: number
    • username: string
    pen?: string

    pen color / pen start

    -
    player_update?: JGOFPlayerSummary

    Updated information about the players, such as name etc.

    -
    pp?: [number, number]

    pen point

    -
    remove-chat?: string

    Remove's the given chat by id

    -
    review_id?: number

    The review ID. This is used when sending from the client to the server, +

  • player_id: number
  • clearpen?: boolean

    Clears the pen drawings on the node

    +
    controller?: number | {
        id: number;
        username: string;
    }

    Sets the controller of the review

    +

    Type declaration

    • id: number
    • username: string
    delete?: number

    Delete

    +
    f?: number

    from (move number)

    +

    Initial gamedata to review

    +
    k?: {
        [mark: string]: string;
    }

    Marks made

    +

    Type declaration

    • [mark: string]: string
    m?: string

    Moves made

    +
    om?: [number, number, number]

    official move [reviewing live game]

    +
    owner?: number | {
        id: number;
        username: string;
    }

    Sets the owner of the review

    +

    Type declaration

    • id: number
    • username: string
    pen?: string

    pen color / pen start

    +
    player_update?: JGOFPlayerSummary

    Updated information about the players, such as name etc.

    +
    pp?: [number, number]

    pen point

    +
    remove-chat?: string

    Remove's the given chat by id

    +
    review_id?: number

    The review ID. This is used when sending from the client to the server, but is not sent by the server back to the client (as the id is encoded in the message event name)

    -
    t?: string

    text note for the current node

    -
    t+?: string

    text append to the current node

    -
    ts?: number

    timestamp (ms)

    -
    undo?: boolean

    official undo [reviewing live game]

    -
    \ No newline at end of file +
    t?: string

    text note for the current node

    +
    t+?: string

    text append to the current node

    +
    ts?: number

    timestamp (ms)

    +
    undo?: boolean

    official undo [reviewing live game]

    +
    \ No newline at end of file diff --git a/docs/interfaces/SVGRendererGobanConfig.html b/docs/interfaces/SVGRendererGobanConfig.html index d2740858..95c04e75 100644 --- a/docs/interfaces/SVGRendererGobanConfig.html +++ b/docs/interfaces/SVGRendererGobanConfig.html @@ -1,4 +1,4 @@ -SVGRendererGobanConfig | goban

    Interface SVGRendererGobanConfig

    interface SVGRendererGobanConfig {
        aga_handicap_scoring?: boolean;
        allow_ko?: boolean;
        allow_self_capture?: boolean;
        allow_superko?: boolean;
        auth?: string;
        automatic_stone_removal?: boolean;
        black_player_id?: number;
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_div?: HTMLElement;
        board_is_repeating?: boolean;
        bounds?: GobanBounds;
        chat_log?: GobanChatLog;
        circle_radius?: number;
        clock?: GameClock;
        connect_to_chat?: number | boolean;
        disable_analysis?: boolean;
        display_width?: number;
        dont_draw_last_move?: boolean;
        dont_show_messages?: boolean;
        double_click_submit?: boolean;
        draw_bottom_labels?: boolean;
        draw_left_labels?: boolean;
        draw_right_labels?: boolean;
        draw_top_labels?: boolean;
        end_time?: number;
        errors?: {
            error: string;
            stack: any;
        }[];
        free_handicap_placement?: boolean;
        game_date?: string;
        game_id?: string | number;
        game_name?: string;
        game_type?: "temporary";
        getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting);
        group_ids?: number[];
        handicap?: number;
        handicap_rank_difference?: number;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        interactive?: boolean;
        isInPushedAnalysis?: (() => boolean);
        isPlayerController?: (() => boolean);
        isPlayerOwner?: (() => boolean);
        is_game_record?: boolean;
        isobranch_hash?: string;
        komi?: number;
        ladder?: number;
        ladder_id?: number;
        last_move_opacity?: number;
        last_move_radius?: number;
        latencies?: {
            [player_id: string]: number;
        };
        leavePushedAnalysis?: (() => void);
        malkovich_log?: GobanChatLog;
        marks?: {
            [mark: string]: string;
        };
        mode?: GobanModes;
        move_tree?: MoveTreeJson;
        move_tree_container?: HTMLElement;
        moves?: GobanMovesArray;
        name?: string;
        needs_sealing?: JGOFSealingIntersection[];
        ogs?: {
            black_dead_stones: string;
            black_seki_eyes: string;
            black_stones: string;
            black_territory: string;
            white_dead_stones: string;
            white_seki_eyes: string;
            white_stones: string;
            white_territory: string;
        };
        ogs_import?: boolean;
        onError?: ((err) => void);
        onScoreEstimationUpdated?: ((winning_color, points) => void);
        one_click_submit?: boolean;
        opponent_plays_first_after_resume?: boolean;
        original_disable_analysis?: boolean;
        original_sgf?: string;
        outcome?: string;
        pause_control?: AdHocPauseControl;
        paused_since?: number;
        phase?: GobanEnginePhase;
        player?: JGOFNumericPlayerColor;
        player_id?: number;
        player_pool?: {
            [id: number]: GobanEnginePlayerEntry;
        };
        players?: {
            black: GobanEnginePlayerEntry;
            white: GobanEnginePlayerEntry;
        };
        puzzle_autoplace_delay?: number;
        puzzle_collection?: number;
        puzzle_description?: string;
        puzzle_opponent_move_mode?: PuzzleOpponentMoveMode;
        puzzle_player_move_mode?: PuzzlePlayerMoveMode;
        puzzle_rank?: number;
        puzzle_type?: string;
        ranked?: boolean;
        removal?: boolean[][];
        removed?: string | JGOFMove[];
        rengo?: boolean;
        rengo_casual_mode?: boolean;
        rengo_teams?: {
            black: GobanEnginePlayerEntry[];
            white: GobanEnginePlayerEntry[];
        };
        review_id?: number;
        reviews?: {
            [review_id: number]: GobanEnginePlayerEntry;
        };
        rules?: GobanEngineRules;
        score?: Score;
        score_handicap?: boolean;
        score_passes?: boolean;
        score_prisoners?: boolean;
        score_stones?: boolean;
        score_territory?: boolean;
        score_territory_in_seki?: boolean;
        server_socket?: GobanSocket<ClientToServer, ServerToClient>;
        spectator_log?: GobanChatLog;
        square_size?: number | "auto" | ((goban) => number);
        stalling_score_estimate?: StallingScoreEstimate;
        start_time?: number;
        strict_seki_mode?: boolean;
        superko_algorithm?: GobanEngineSuperKoAlgorithm;
        throw_all_errors?: boolean;
        time_control?: JGOFTimeControl;
        time_per_move?: number;
        title_div?: HTMLElement;
        tournament_id?: number;
        username?: string;
        variation_stone_opacity?: number;
        white_must_pass_last?: boolean;
        white_player_id?: number;
        white_prisoners?: number;
        width?: number;
        winner?: number | "black" | "white";
    }

    Hierarchy (view full)

    Properties

    aga_handicap_scoring? +SVGRendererGobanConfig | goban

    Interface SVGRendererGobanConfig

    interface SVGRendererGobanConfig {
        aga_handicap_scoring?: boolean;
        allow_ko?: boolean;
        allow_self_capture?: boolean;
        allow_superko?: boolean;
        auth?: string;
        automatic_stone_removal?: boolean;
        black_player_id?: number;
        black_prisoners?: number;
        board?: JGOFNumericPlayerColor[][];
        board_div?: HTMLElement;
        board_is_repeating?: boolean;
        bounds?: GobanBounds;
        chat_log?: GobanChatLog;
        circle_radius?: number;
        clock?: GameClock;
        connect_to_chat?: number | boolean;
        disable_analysis?: boolean;
        display_width?: number;
        dont_draw_last_move?: boolean;
        dont_show_messages?: boolean;
        double_click_submit?: boolean;
        draw_bottom_labels?: boolean;
        draw_left_labels?: boolean;
        draw_right_labels?: boolean;
        draw_top_labels?: boolean;
        end_time?: number;
        errors?: {
            error: string;
            stack: any;
        }[];
        free_handicap_placement?: boolean;
        game_date?: string;
        game_id?: string | number;
        game_name?: string;
        game_type?: "temporary";
        getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting);
        group_ids?: number[];
        handicap?: number;
        handicap_rank_difference?: number;
        height?: number;
        initial_player?: PlayerColor;
        initial_state?: GobanEngineInitialState;
        interactive?: boolean;
        isInPushedAnalysis?: (() => boolean);
        isPlayerController?: (() => boolean);
        isPlayerOwner?: (() => boolean);
        is_game_record?: boolean;
        isobranch_hash?: string;
        komi?: number;
        ladder?: number;
        ladder_id?: number;
        last_move_opacity?: number;
        last_move_radius?: number;
        latencies?: {
            [player_id: string]: number;
        };
        leavePushedAnalysis?: (() => void);
        malkovich_log?: GobanChatLog;
        marks?: {
            [mark: string]: string;
        };
        mode?: GobanModes;
        move_tree?: MoveTreeJson;
        move_tree_container?: HTMLElement;
        moves?: GobanMovesArray;
        name?: string;
        needs_sealing?: JGOFSealingIntersection[];
        ogs?: {
            black_dead_stones: string;
            black_seki_eyes: string;
            black_stones: string;
            black_territory: string;
            white_dead_stones: string;
            white_seki_eyes: string;
            white_stones: string;
            white_territory: string;
        };
        ogs_import?: boolean;
        onError?: ((err) => void);
        onScoreEstimationUpdated?: ((winning_color, points) => void);
        one_click_submit?: boolean;
        opponent_plays_first_after_resume?: boolean;
        original_disable_analysis?: boolean;
        original_sgf?: string;
        outcome?: string;
        pause_control?: AdHocPauseControl;
        paused_since?: number;
        phase?: GobanEnginePhase;
        player?: JGOFNumericPlayerColor;
        player_id?: number;
        player_pool?: {
            [id: number]: GobanEnginePlayerEntry;
        };
        players?: {
            black: GobanEnginePlayerEntry;
            white: GobanEnginePlayerEntry;
        };
        puzzle_autoplace_delay?: number;
        puzzle_collection?: number;
        puzzle_description?: string;
        puzzle_opponent_move_mode?: PuzzleOpponentMoveMode;
        puzzle_player_move_mode?: PuzzlePlayerMoveMode;
        puzzle_rank?: number;
        puzzle_type?: string;
        ranked?: boolean;
        removal?: boolean[][];
        removed?: string | JGOFMove[];
        rengo?: boolean;
        rengo_casual_mode?: boolean;
        rengo_teams?: {
            black: GobanEnginePlayerEntry[];
            white: GobanEnginePlayerEntry[];
        };
        review_id?: number;
        reviews?: {
            [review_id: number]: GobanEnginePlayerEntry;
        };
        rules?: GobanEngineRules;
        score?: Score;
        score_handicap?: boolean;
        score_passes?: boolean;
        score_prisoners?: boolean;
        score_stones?: boolean;
        score_territory?: boolean;
        score_territory_in_seki?: boolean;
        server_socket?: GobanSocket<ClientToServer, ServerToClient>;
        spectator_log?: GobanChatLog;
        square_size?: number | "auto" | ((goban) => number);
        stalling_score_estimate?: StallingScoreEstimate;
        start_time?: number;
        stone_font_scale?: number;
        strict_seki_mode?: boolean;
        superko_algorithm?: GobanEngineSuperKoAlgorithm;
        throw_all_errors?: boolean;
        time_control?: JGOFTimeControl;
        time_per_move?: number;
        title_div?: HTMLElement;
        tournament_id?: number;
        username?: string;
        variation_stone_opacity?: number;
        white_must_pass_last?: boolean;
        white_player_id?: number;
        white_prisoners?: number;
        width?: number;
        winner?: number | "black" | "white";
    }

    Hierarchy (view full)

    Properties

    aga_handicap_scoring?: boolean
    allow_ko?: boolean
    allow_self_capture?: boolean
    allow_superko?: boolean
    auth?: string
    automatic_stone_removal?: boolean
    black_player_id?: number
    black_prisoners?: number
    board_div?: HTMLElement
    board_is_repeating?: boolean
    bounds?: GobanBounds
    chat_log?: GobanChatLog
    circle_radius?: number
    clock?: GameClock
    connect_to_chat?: number | boolean
    disable_analysis?: boolean
    display_width?: number
    dont_draw_last_move?: boolean
    dont_show_messages?: boolean
    double_click_submit?: boolean
    draw_bottom_labels?: boolean
    draw_left_labels?: boolean
    draw_right_labels?: boolean
    draw_top_labels?: boolean
    end_time?: number
    errors?: {
        error: string;
        stack: any;
    }[]

    Type declaration

    • error: string
    • stack: any
    free_handicap_placement?: boolean
    game_date?: string
    game_id?: string | number
    game_name?: string
    game_type?: "temporary"
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    group_ids?: number[]
    handicap?: number
    handicap_rank_difference?: number
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    interactive?: boolean
    isInPushedAnalysis?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    is_game_record?: boolean
    isobranch_hash?: string
    komi?: number
    ladder?: number
    ladder_id?: number
    last_move_opacity?: number
    last_move_radius?: number
    latencies?: {
        [player_id: string]: number;
    }

    Type declaration

    • [player_id: string]: number
    leavePushedAnalysis?: (() => void)

    Type declaration

      • (): void
      • Returns void

    malkovich_log?: GobanChatLog
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    mode?: GobanModes
    move_tree?: MoveTreeJson
    move_tree_container?: HTMLElement
    name?: string
    needs_sealing?: JGOFSealingIntersection[]

    Intersections that need to be sealed before scoring should happen

    -
    ogs?: {
        black_dead_stones: string;
        black_seki_eyes: string;
        black_stones: string;
        black_territory: string;
        white_dead_stones: string;
        white_seki_eyes: string;
        white_stones: string;
        white_territory: string;
    }

    Type declaration

    • black_dead_stones: string
    • black_seki_eyes: string
    • black_stones: string
    • black_territory: string
    • white_dead_stones: string
    • white_seki_eyes: string
    • white_stones: string
    • white_territory: string
    ogs_import?: boolean

    Deprecated, I don't think we need this anymore, but need to be sure

    -
    onError?: ((err) => void)

    Type declaration

      • (err): void
      • Parameters

        • err: Error

        Returns void

    onScoreEstimationUpdated?: ((winning_color, points) => void)

    Type declaration

      • (winning_color, points): void
      • Parameters

        • winning_color: "black" | "white"
        • points: number

        Returns void

    one_click_submit?: boolean
    opponent_plays_first_after_resume?: boolean
    original_disable_analysis?: boolean
    original_sgf?: string
    outcome?: string
    pause_control?: AdHocPauseControl
    paused_since?: number
    player_id?: number
    player_pool?: {
        [id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    players?: {
        black: GobanEnginePlayerEntry;
        white: GobanEnginePlayerEntry;
    }

    Type declaration

    puzzle_autoplace_delay?: number
    puzzle_collection?: number
    puzzle_description?: string
    puzzle_opponent_move_mode?: PuzzleOpponentMoveMode
    puzzle_player_move_mode?: PuzzlePlayerMoveMode
    puzzle_rank?: number
    puzzle_type?: string
    ranked?: boolean
    removal?: boolean[][]
    removed?: string | JGOFMove[]

    Removed stones in stone removal phase +

    Properties

    aga_handicap_scoring?: boolean
    allow_ko?: boolean
    allow_self_capture?: boolean
    allow_superko?: boolean
    auth?: string
    automatic_stone_removal?: boolean
    black_player_id?: number
    black_prisoners?: number
    board_div?: HTMLElement
    board_is_repeating?: boolean
    bounds?: GobanBounds
    chat_log?: GobanChatLog
    circle_radius?: number
    clock?: GameClock
    connect_to_chat?: number | boolean
    disable_analysis?: boolean
    display_width?: number
    dont_draw_last_move?: boolean
    dont_show_messages?: boolean
    double_click_submit?: boolean
    draw_bottom_labels?: boolean
    draw_left_labels?: boolean
    draw_right_labels?: boolean
    draw_top_labels?: boolean
    end_time?: number
    errors?: {
        error: string;
        stack: any;
    }[]

    Type declaration

    • error: string
    • stack: any
    free_handicap_placement?: boolean
    game_date?: string
    game_id?: string | number
    game_name?: string
    game_type?: "temporary"
    getPuzzlePlacementSetting?: (() => PuzzlePlacementSetting)
    group_ids?: number[]
    handicap?: number
    handicap_rank_difference?: number
    height?: number
    initial_player?: PlayerColor
    initial_state?: GobanEngineInitialState
    interactive?: boolean
    isInPushedAnalysis?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerController?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    isPlayerOwner?: (() => boolean)

    Type declaration

      • (): boolean
      • Returns boolean

    is_game_record?: boolean
    isobranch_hash?: string
    komi?: number
    ladder?: number
    ladder_id?: number
    last_move_opacity?: number
    last_move_radius?: number
    latencies?: {
        [player_id: string]: number;
    }

    Type declaration

    • [player_id: string]: number
    leavePushedAnalysis?: (() => void)

    Type declaration

      • (): void
      • Returns void

    malkovich_log?: GobanChatLog
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    mode?: GobanModes
    move_tree?: MoveTreeJson
    move_tree_container?: HTMLElement
    name?: string
    needs_sealing?: JGOFSealingIntersection[]

    Intersections that need to be sealed before scoring should happen

    +
    ogs?: {
        black_dead_stones: string;
        black_seki_eyes: string;
        black_stones: string;
        black_territory: string;
        white_dead_stones: string;
        white_seki_eyes: string;
        white_stones: string;
        white_territory: string;
    }

    Type declaration

    • black_dead_stones: string
    • black_seki_eyes: string
    • black_stones: string
    • black_territory: string
    • white_dead_stones: string
    • white_seki_eyes: string
    • white_stones: string
    • white_territory: string
    ogs_import?: boolean

    Deprecated, I don't think we need this anymore, but need to be sure

    +
    onError?: ((err) => void)

    Type declaration

      • (err): void
      • Parameters

        • err: Error

        Returns void

    onScoreEstimationUpdated?: ((winning_color, points) => void)

    Type declaration

      • (winning_color, points): void
      • Parameters

        • winning_color: "black" | "white"
        • points: number

        Returns void

    one_click_submit?: boolean
    opponent_plays_first_after_resume?: boolean
    original_disable_analysis?: boolean
    original_sgf?: string
    outcome?: string
    pause_control?: AdHocPauseControl
    paused_since?: number
    player_id?: number
    player_pool?: {
        [id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    players?: {
        black: GobanEnginePlayerEntry;
        white: GobanEnginePlayerEntry;
    }

    Type declaration

    puzzle_autoplace_delay?: number
    puzzle_collection?: number
    puzzle_description?: string
    puzzle_opponent_move_mode?: PuzzleOpponentMoveMode
    puzzle_player_move_mode?: PuzzlePlayerMoveMode
    puzzle_rank?: number
    puzzle_type?: string
    ranked?: boolean
    removal?: boolean[][]
    removed?: string | JGOFMove[]

    Removed stones in stone removal phase Passing an array of JGOFMove objects is preferred, the string format exists for historical backwards compatibility. It is an encoded move string, e.g. "aa" for A19

    -
    rengo?: boolean
    rengo_casual_mode?: boolean
    rengo_teams?: {
        black: GobanEnginePlayerEntry[];
        white: GobanEnginePlayerEntry[];
    }

    Type declaration

    review_id?: number
    reviews?: {
        [review_id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    score?: Score
    score_handicap?: boolean
    score_passes?: boolean
    score_prisoners?: boolean
    score_stones?: boolean
    score_territory?: boolean
    score_territory_in_seki?: boolean
    spectator_log?: GobanChatLog
    square_size?: number | "auto" | ((goban) => number)

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    stalling_score_estimate?: StallingScoreEstimate
    start_time?: number
    strict_seki_mode?: boolean
    superko_algorithm?: GobanEngineSuperKoAlgorithm
    throw_all_errors?: boolean

    When loading initial state or moves, by default GobanEngine will try and +

    rengo?: boolean
    rengo_casual_mode?: boolean
    rengo_teams?: {
        black: GobanEnginePlayerEntry[];
        white: GobanEnginePlayerEntry[];
    }

    Type declaration

    review_id?: number
    reviews?: {
        [review_id: number]: GobanEnginePlayerEntry;
    }

    Type declaration

    score?: Score
    score_handicap?: boolean
    score_passes?: boolean
    score_prisoners?: boolean
    score_stones?: boolean
    score_territory?: boolean
    score_territory_in_seki?: boolean
    spectator_log?: GobanChatLog
    square_size?: number | "auto" | ((goban) => number)

    Type declaration

      • (goban): number
      • Parameters

        Returns number

    stalling_score_estimate?: StallingScoreEstimate
    start_time?: number
    stone_font_scale?: number
    strict_seki_mode?: boolean
    superko_algorithm?: GobanEngineSuperKoAlgorithm
    throw_all_errors?: boolean

    When loading initial state or moves, by default GobanEngine will try and handle bad data by just resorting to 'edit placing' moves. If this is true, then those errors are thrown instead.

    -
    time_control?: JGOFTimeControl
    time_per_move?: number
    title_div?: HTMLElement
    tournament_id?: number
    username?: string
    variation_stone_opacity?: number
    white_must_pass_last?: boolean
    white_player_id?: number
    white_prisoners?: number
    width?: number
    winner?: number | "black" | "white"
    \ No newline at end of file +
    time_control?: JGOFTimeControl
    time_per_move?: number
    title_div?: HTMLElement
    tournament_id?: number
    username?: string
    variation_stone_opacity?: number
    white_must_pass_last?: boolean
    white_player_id?: number
    white_prisoners?: number
    width?: number
    winner?: number | "black" | "white"
    \ No newline at end of file diff --git a/docs/interfaces/SVGStoneParameters.html b/docs/interfaces/SVGStoneParameters.html index 8d631c2c..ec1758d3 100644 --- a/docs/interfaces/SVGStoneParameters.html +++ b/docs/interfaces/SVGStoneParameters.html @@ -1,7 +1,7 @@ -SVGStoneParameters | goban

    Interface SVGStoneParameters

    interface SVGStoneParameters {
        fill?: string;
        gradient?: {
            cx?: number;
            cy?: number;
            fx?: number;
            fy?: number;
            r?: number;
            stops: SVGStop[];
            type?: "radial" | "linear";
            x1?: number;
            x2?: number;
            y1?: number;
            y2?: number;
        };
        id: string;
        stroke?: string;
        stroke_scale?: number;
        url?: string;
    }

    Properties

    fill? +SVGStoneParameters | goban

    Interface SVGStoneParameters

    interface SVGStoneParameters {
        fill?: string;
        gradient?: {
            cx?: number;
            cy?: number;
            fx?: number;
            fy?: number;
            r?: number;
            stops: SVGStop[];
            type?: "radial" | "linear";
            x1?: number;
            x2?: number;
            y1?: number;
            y2?: number;
        };
        id: string;
        stroke?: string;
        stroke_scale?: number;
        url?: string;
    }

    Properties

    fill?: string
    gradient?: {
        cx?: number;
        cy?: number;
        fx?: number;
        fy?: number;
        r?: number;
        stops: SVGStop[];
        type?: "radial" | "linear";
        x1?: number;
        x2?: number;
        y1?: number;
        y2?: number;
    }

    Type declaration

    • Optional cx?: number
    • Optional cy?: number
    • Optional fx?: number
    • Optional fy?: number
    • Optional r?: number
    • stops: SVGStop[]
    • Optional type?: "radial" | "linear"
    • Optional x1?: number
    • Optional x2?: number
    • Optional y1?: number
    • Optional y2?: number
    id: string
    stroke?: string
    stroke_scale?: number
    url?: string
    \ No newline at end of file +

    Properties

    fill?: string
    gradient?: {
        cx?: number;
        cy?: number;
        fx?: number;
        fy?: number;
        r?: number;
        stops: SVGStop[];
        type?: "radial" | "linear";
        x1?: number;
        x2?: number;
        y1?: number;
        y2?: number;
    }

    Type declaration

    • Optional cx?: number
    • Optional cy?: number
    • Optional fx?: number
    • Optional fy?: number
    • Optional r?: number
    • stops: SVGStop[]
    • Optional type?: "radial" | "linear"
    • Optional x1?: number
    • Optional x2?: number
    • Optional y1?: number
    • Optional y2?: number
    id: string
    stroke?: string
    stroke_scale?: number
    url?: string
    \ No newline at end of file diff --git a/docs/interfaces/SVGStop.html b/docs/interfaces/SVGStop.html index d327abfd..23bdd07e 100644 --- a/docs/interfaces/SVGStop.html +++ b/docs/interfaces/SVGStop.html @@ -1,3 +1,3 @@ -SVGStop | goban

    Interface SVGStop

    interface SVGStop {
        color: string;
        offset: number;
    }

    Properties

    color +SVGStop | goban

    Interface SVGStop

    interface SVGStop {
        color: string;
        offset: number;
    }

    Properties

    Properties

    color: string
    offset: number
    \ No newline at end of file +

    Properties

    color: string
    offset: number
    \ No newline at end of file diff --git a/docs/interfaces/Score.html b/docs/interfaces/Score.html index 14af4d3e..57345d3e 100644 --- a/docs/interfaces/Score.html +++ b/docs/interfaces/Score.html @@ -1,3 +1,3 @@ -Score | goban

    Interface Score

    interface Score {
        black: PlayerScore;
        white: PlayerScore;
    }

    Properties

    black +Score | goban

    Interface Score

    interface Score {
        black: PlayerScore;
        white: PlayerScore;
    }

    Properties

    Properties

    \ No newline at end of file +

    Properties

    \ No newline at end of file diff --git a/docs/interfaces/ScoreEstimateRequest.html b/docs/interfaces/ScoreEstimateRequest.html index eb2a1256..55b7eee8 100644 --- a/docs/interfaces/ScoreEstimateRequest.html +++ b/docs/interfaces/ScoreEstimateRequest.html @@ -1,4 +1,4 @@ -ScoreEstimateRequest | goban

    Interface ScoreEstimateRequest

    interface ScoreEstimateRequest {
        autoscore?: boolean;
        black_prisoners?: number;
        board_state: JGOFNumericPlayerColor[][];
        height: number;
        jwt: string;
        komi?: number;
        player_to_move: "black" | "white";
        rules: GobanEngineRules;
        white_prisoners?: number;
        width: number;
    }

    Properties

    autoscore? +ScoreEstimateRequest | goban

    Interface ScoreEstimateRequest

    interface ScoreEstimateRequest {
        autoscore?: boolean;
        black_prisoners?: number;
        board_state: JGOFNumericPlayerColor[][];
        height: number;
        jwt: string;
        komi?: number;
        player_to_move: "black" | "white";
        rules: GobanEngineRules;
        white_prisoners?: number;
        width: number;
    }

    Properties

    Properties

    autoscore?: boolean

    Whether to run autoscoring logic. If true, player_to_move is essentially ignored as we compute estimates with each player moving first in turn.

    -
    black_prisoners?: number
    board_state: JGOFNumericPlayerColor[][]
    height: number
    jwt: string
    komi?: number
    player_to_move: "black" | "white"
    white_prisoners?: number
    width: number
    \ No newline at end of file +
    black_prisoners?: number
    board_state: JGOFNumericPlayerColor[][]
    height: number
    jwt: string
    komi?: number
    player_to_move: "black" | "white"
    white_prisoners?: number
    width: number
    \ No newline at end of file diff --git a/docs/interfaces/ScoreEstimateResponse.html b/docs/interfaces/ScoreEstimateResponse.html index e7a591f6..4e30379d 100644 --- a/docs/interfaces/ScoreEstimateResponse.html +++ b/docs/interfaces/ScoreEstimateResponse.html @@ -1,13 +1,13 @@ -ScoreEstimateResponse | goban

    Interface ScoreEstimateResponse

    interface ScoreEstimateResponse {
        autoscored_board_state?: JGOFNumericPlayerColor[][];
        autoscored_needs_sealing?: JGOFSealingIntersection[];
        autoscored_removed?: JGOFMove[];
        ownership: number[][];
        score?: number;
        win_rate?: number;
    }

    Properties

    autoscored_board_state? +ScoreEstimateResponse | goban

    Interface ScoreEstimateResponse

    interface ScoreEstimateResponse {
        autoscored_board_state?: JGOFNumericPlayerColor[][];
        autoscored_needs_sealing?: JGOFSealingIntersection[];
        autoscored_removed?: JGOFMove[];
        ownership: number[][];
        score?: number;
        win_rate?: number;
    }

    Properties

    autoscored_board_state?: JGOFNumericPlayerColor[][]

    Board state after autoscoring logic has been run. Only defined if autoscore was true in the request.

    -
    autoscored_needs_sealing?: JGOFSealingIntersection[]

    Coordinates that still need sealing

    -
    autoscored_removed?: JGOFMove[]

    Intersections that are dead or dame. Only defined if autoscore was true in the request.

    -
    ownership: number[][]

    Matrix of ownership estimates ranged from -1 (white) to 1 (black)

    -
    score?: number

    Estimated score

    -
    win_rate?: number

    Estimated win rate

    -
    \ No newline at end of file +
    autoscored_needs_sealing?: JGOFSealingIntersection[]

    Coordinates that still need sealing

    +
    autoscored_removed?: JGOFMove[]

    Intersections that are dead or dame. Only defined if autoscore was true in the request.

    +
    ownership: number[][]

    Matrix of ownership estimates ranged from -1 (white) to 1 (black)

    +
    score?: number

    Estimated score

    +
    win_rate?: number

    Estimated win rate

    +
    \ No newline at end of file diff --git a/docs/interfaces/ScoringLocations.html b/docs/interfaces/ScoringLocations.html index 31ea8a40..807e3490 100644 --- a/docs/interfaces/ScoringLocations.html +++ b/docs/interfaces/ScoringLocations.html @@ -1,3 +1,3 @@ -ScoringLocations | goban

    Interface ScoringLocations

    interface ScoringLocations {
        black: {
            locations: JGOFIntersection[];
            stones: number;
            territory: number;
        };
        white: {
            locations: JGOFIntersection[];
            stones: number;
            territory: number;
        };
    }

    Properties

    black +ScoringLocations | goban

    Interface ScoringLocations

    interface ScoringLocations {
        black: {
            locations: JGOFIntersection[];
            stones: number;
            territory: number;
        };
        white: {
            locations: JGOFIntersection[];
            stones: number;
            territory: number;
        };
    }

    Properties

    Properties

    black: {
        locations: JGOFIntersection[];
        stones: number;
        territory: number;
    }

    Type declaration

    white: {
        locations: JGOFIntersection[];
        stones: number;
        territory: number;
    }

    Type declaration

    \ No newline at end of file +

    Properties

    black: {
        locations: JGOFIntersection[];
        stones: number;
        territory: number;
    }

    Type declaration

    white: {
        locations: JGOFIntersection[];
        stones: number;
        territory: number;
    }

    Type declaration

    \ No newline at end of file diff --git a/docs/interfaces/StateUpdateEvents.html b/docs/interfaces/StateUpdateEvents.html index 62233020..194c93b9 100644 --- a/docs/interfaces/StateUpdateEvents.html +++ b/docs/interfaces/StateUpdateEvents.html @@ -1,4 +1,4 @@ -StateUpdateEvents | goban

    Interface StateUpdateEvents

    interface StateUpdateEvents {
        analyze_subtool: ((d) => void);
        analyze_tool: ((d) => void);
        cur_move: ((d) => void);
        cur_review_move: ((d) => void);
        last_official_move: ((d) => void);
        mode: ((d) => void);
        outcome: ((d) => void);
        paused: ((d) => void);
        phase: ((d) => void);
        review_controller_id: ((d) => void);
        review_owner_id: ((d) => void);
        rules: ((d) => void);
        score_estimate: ((d) => void);
        stalling_score_estimate: ((data?) => void);
        strict_seki_mode: ((d) => void);
        submit_move: ((d) => void);
        title: ((d) => void);
        undo_canceled: (() => void);
        undo_requested: ((d) => void);
        winner: ((d) => void);
    }

    Hierarchy (view full)

    Properties

    analyze_subtool +StateUpdateEvents | goban

    Interface StateUpdateEvents

    interface StateUpdateEvents {
        analyze_subtool: ((d) => void);
        analyze_tool: ((d) => void);
        cur_move: ((d) => void);
        cur_review_move: ((d) => void);
        last_official_move: ((d) => void);
        mode: ((d) => void);
        outcome: ((d) => void);
        paused: ((d) => void);
        phase: ((d) => void);
        review_controller_id: ((d) => void);
        review_owner_id: ((d) => void);
        rules: ((d) => void);
        score_estimate: ((d) => void);
        stalling_score_estimate: ((data?) => void);
        strict_seki_mode: ((d) => void);
        submit_move: ((d) => void);
        title: ((d) => void);
        undo_canceled: (() => void);
        undo_requested: ((d) => void);
        winner: ((d) => void);
    }

    Hierarchy (view full)

    Properties

    analyze_subtool: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    analyze_tool: ((d) => void)

    Type declaration

    cur_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    cur_review_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    last_official_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    mode: ((d) => void)

    Type declaration

    outcome: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    paused: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: boolean

        Returns void

    phase: ((d) => void)

    Type declaration

    review_controller_id: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    review_owner_id: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    rules: ((d) => void)

    Type declaration

    score_estimate: ((d) => void)

    Type declaration

    stalling_score_estimate: ((data?) => void)

    Type declaration

    strict_seki_mode: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: boolean

        Returns void

    submit_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | (() => void)

        Returns void

    title: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    undo_canceled: (() => void)

    Type declaration

      • (): void
      • Returns void

    undo_requested: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    winner: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    \ No newline at end of file +

    Properties

    analyze_subtool: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    analyze_tool: ((d) => void)

    Type declaration

    cur_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    cur_review_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    last_official_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        Returns void

    mode: ((d) => void)

    Type declaration

    outcome: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    paused: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: boolean

        Returns void

    phase: ((d) => void)

    Type declaration

    review_controller_id: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    review_owner_id: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    rules: ((d) => void)

    Type declaration

    score_estimate: ((d) => void)

    Type declaration

    stalling_score_estimate: ((data?) => void)

    Type declaration

    strict_seki_mode: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: boolean

        Returns void

    submit_move: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | (() => void)

        Returns void

    title: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: string

        Returns void

    undo_canceled: (() => void)

    Type declaration

      • (): void
      • Returns void

    undo_requested: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    winner: ((d) => void)

    Type declaration

      • (d): void
      • Parameters

        • d: undefined | number

        Returns void

    \ No newline at end of file diff --git a/docs/interfaces/ThemesInterface.html b/docs/interfaces/ThemesInterface.html index 5f153458..4c7758fc 100644 --- a/docs/interfaces/ThemesInterface.html +++ b/docs/interfaces/ThemesInterface.html @@ -1,4 +1,4 @@ -ThemesInterface | goban

    Interface ThemesInterface

    interface ThemesInterface {
        black: {
            [name: string]: typeof GobanTheme;
        };
        board: {
            [name: string]: typeof GobanTheme;
        };
        white: {
            [name: string]: typeof GobanTheme;
        };
        [key: string]: {
            [name: string]: typeof GobanTheme;
        };
    }

    Indexable

    [key: string]: {
        [name: string]: typeof GobanTheme;
    }

    Properties

    black +ThemesInterface | goban

    Interface ThemesInterface

    interface ThemesInterface {
        black: {
            [name: string]: typeof GobanTheme;
        };
        board: {
            [name: string]: typeof GobanTheme;
        };
        white: {
            [name: string]: typeof GobanTheme;
        };
        [key: string]: {
            [name: string]: typeof GobanTheme;
        };
    }

    Indexable

    [key: string]: {
        [name: string]: typeof GobanTheme;
    }

    Properties

    Properties

    black: {
        [name: string]: typeof GobanTheme;
    }

    Type declaration

    board: {
        [name: string]: typeof GobanTheme;
    }

    Type declaration

    white: {
        [name: string]: typeof GobanTheme;
    }

    Type declaration

    \ No newline at end of file +

    Properties

    black: {
        [name: string]: typeof GobanTheme;
    }

    Type declaration

    board: {
        [name: string]: typeof GobanTheme;
    }

    Type declaration

    white: {
        [name: string]: typeof GobanTheme;
    }

    Type declaration

    \ No newline at end of file diff --git a/docs/interfaces/_internal_.AbsoluteClock.html b/docs/interfaces/_internal_.AbsoluteClock.html index 28307e12..84c00463 100644 --- a/docs/interfaces/_internal_.AbsoluteClock.html +++ b/docs/interfaces/_internal_.AbsoluteClock.html @@ -1,2 +1,2 @@ -AbsoluteClock | goban

    Interface AbsoluteClock

    interface AbsoluteClock {
        thinking_time: number;
    }

    Properties

    Properties

    thinking_time: number
    \ No newline at end of file +AbsoluteClock | goban

    Interface AbsoluteClock

    interface AbsoluteClock {
        thinking_time: number;
    }

    Properties

    Properties

    thinking_time: number
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.AnalysisComment.html b/docs/interfaces/_internal_.AnalysisComment.html index 59b5e49a..6ff6070a 100644 --- a/docs/interfaces/_internal_.AnalysisComment.html +++ b/docs/interfaces/_internal_.AnalysisComment.html @@ -1,8 +1,8 @@ -AnalysisComment | goban

    Interface AnalysisComment

    interface AnalysisComment {
        branch_move?: number;
        from?: number;
        marks?: {
            [mark: string]: string;
        };
        moves?: string;
        name?: string;
        pen_marks?: unknown[];
        type: "analysis";
    }

    Properties

    branch_move? +AnalysisComment | goban

    Interface AnalysisComment

    interface AnalysisComment {
        branch_move?: number;
        from?: number;
        marks?: {
            [mark: string]: string;
        };
        moves?: string;
        name?: string;
        pen_marks?: unknown[];
        type: "analysis";
    }

    Properties

    branch_move?: number
    from?: number
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    moves?: string
    name?: string
    pen_marks?: unknown[]
    type: "analysis"
    \ No newline at end of file +

    Properties

    branch_move?: number
    from?: number
    marks?: {
        [mark: string]: string;
    }

    Type declaration

    • [mark: string]: string
    moves?: string
    name?: string
    pen_marks?: unknown[]
    type: "analysis"
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.AutoscoreResults.html b/docs/interfaces/_internal_.AutoscoreResults.html index 4c107e0c..a3f446a5 100644 --- a/docs/interfaces/_internal_.AutoscoreResults.html +++ b/docs/interfaces/_internal_.AutoscoreResults.html @@ -1,5 +1,5 @@ -AutoscoreResults | goban

    Interface AutoscoreResults

    interface AutoscoreResults {
        needs_sealing: JGOFSealingIntersection[];
        removed: JGOFMove[];
        result: JGOFNumericPlayerColor[][];
        sealed_result: JGOFNumericPlayerColor[][];
    }

    Properties

    needs_sealing +AutoscoreResults | goban

    Interface AutoscoreResults

    interface AutoscoreResults {
        needs_sealing: JGOFSealingIntersection[];
        removed: JGOFMove[];
        result: JGOFNumericPlayerColor[][];
        sealed_result: JGOFNumericPlayerColor[][];
    }

    Properties

    needs_sealing: JGOFSealingIntersection[]
    removed: JGOFMove[]
    sealed_result: JGOFNumericPlayerColor[][]
    \ No newline at end of file +

    Properties

    needs_sealing: JGOFSealingIntersection[]
    removed: JGOFMove[]
    sealed_result: JGOFNumericPlayerColor[][]
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.BoardStateWithIsobranchHash.html b/docs/interfaces/_internal_.BoardStateWithIsobranchHash.html index 97d86ef8..e47a8a52 100644 --- a/docs/interfaces/_internal_.BoardStateWithIsobranchHash.html +++ b/docs/interfaces/_internal_.BoardStateWithIsobranchHash.html @@ -1,4 +1,4 @@ -BoardStateWithIsobranchHash | goban

    Interface BoardStateWithIsobranchHash

    interface BoardStateWithIsobranchHash {
        black_prisoners: number;
        board: JGOFNumericPlayerColor[][];
        board_is_repeating: boolean;
        goban_callback?: GobanBase;
        height: number;
        isobranch_hash?: string;
        player: JGOFNumericPlayerColor;
        removal: boolean[][];
        white_prisoners: number;
        width: number;
        boardEquals(other): boolean;
        clearRemoved(): void;
        cloneBoard(): JGOFNumericPlayerColor[][];
        cloneBoardState(): BoardState;
        computeScoringLocations(area_scoring): ScoringLocations;
        countLiberties(raw_stone_string): number;
        foreachNeighbor(pt_or_raw_stone_string, callback): void;
        getNeighboringRawStoneStrings(raw_stone_string): RawStoneString[];
        getRawStoneString(x, y, clearMarks): RawStoneString;
        setRemoved(x, y, removed, emit_stone_removal_updated?): void;
        toggleSingleGroupRemoval(x, y, force_removal?): {
            group: RawStoneString;
            removed: boolean;
        };
    }

    Hierarchy (view full)

    Properties

    black_prisoners +BoardStateWithIsobranchHash | goban

    Interface BoardStateWithIsobranchHash

    interface BoardStateWithIsobranchHash {
        black_prisoners: number;
        board: JGOFNumericPlayerColor[][];
        board_is_repeating: boolean;
        goban_callback?: GobanBase;
        height: number;
        isobranch_hash?: string;
        player: JGOFNumericPlayerColor;
        removal: boolean[][];
        white_prisoners: number;
        width: number;
        boardEquals(other): boolean;
        clearRemoved(): void;
        cloneBoard(): JGOFNumericPlayerColor[][];
        cloneBoardState(): BoardState;
        computeScoringLocations(area_scoring): ScoringLocations;
        countLiberties(raw_stone_string): number;
        foreachNeighbor(pt_or_raw_stone_string, callback): void;
        getNeighboringRawStoneStrings(raw_stone_string): RawStoneString[];
        getRawStoneString(x, y, clearMarks): RawStoneString;
        setRemoved(x, y, removed, emit_stone_removal_updated?): void;
        toggleSingleGroupRemoval(x, y, force_removal?): {
            group: RawStoneString;
            removed: boolean;
        };
    }

    Hierarchy (view full)

    Properties

    black_prisoners: number
    board_is_repeating: boolean
    goban_callback?: GobanBase
    height: number = 19
    isobranch_hash?: string

    The isobranch hash is a hash of the board state. This field is used by +

    Properties

    black_prisoners: number
    board_is_repeating: boolean
    goban_callback?: GobanBase
    height: number = 19
    isobranch_hash?: string

    The isobranch hash is a hash of the board state. This field is used by the move tree to detect isomorphic branches. This field is populated when recomputeIsoBranches is called.

    -
    removal: boolean[][]
    white_prisoners: number
    width: number = 19

    Methods

    removal: boolean[][]
    white_prisoners: number
    width: number = 19

    Methods

    • Sets a position as being removed or not removed. If emit_stone_removal_updated is set to false, the "stone-removal.updated" event will not be emitted, and it is up to the caller to emit this event appropriately.

      -

      Parameters

      • x: number
      • y: number
      • removed: boolean
      • emit_stone_removal_updated: boolean = true

      Returns void

    • Toggles a group of stones for removal or restoration.

      +

      Parameters

      • x: number
      • y: number
      • removed: boolean
      • emit_stone_removal_updated: boolean = true

      Returns void

    • Toggles a group of stones for removal or restoration.

      By default, if we are marking a group for removal but the group is almost certainly alive (two eyes, etc), this will result in a no-op, unless force_removal is set to true.

      -

      Parameters

      • x: number
      • y: number
      • force_removal: boolean = false

      Returns {
          group: RawStoneString;
          removed: boolean;
      }

    \ No newline at end of file +

    Parameters

    Returns {
        group: RawStoneString;
        removed: boolean;
    }

    \ No newline at end of file diff --git a/docs/interfaces/_internal_.ByoYomiClock.html b/docs/interfaces/_internal_.ByoYomiClock.html index 1db91dcf..0aafe7cc 100644 --- a/docs/interfaces/_internal_.ByoYomiClock.html +++ b/docs/interfaces/_internal_.ByoYomiClock.html @@ -1,5 +1,5 @@ -ByoYomiClock | goban

    Interface ByoYomiClock

    interface ByoYomiClock {
        period_time: number;
        period_time_left?: number;
        periods: number;
        thinking_time: number;
    }

    Properties

    period_time +ByoYomiClock | goban

    Interface ByoYomiClock

    interface ByoYomiClock {
        period_time: number;
        period_time_left?: number;
        periods: number;
        thinking_time: number;
    }

    Properties

    period_time: number
    period_time_left?: number
    periods: number
    thinking_time: number
    \ No newline at end of file +

    Properties

    period_time: number
    period_time_left?: number
    periods: number
    thinking_time: number
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.CanadianClock.html b/docs/interfaces/_internal_.CanadianClock.html index 67cbd4c3..ccc11ee6 100644 --- a/docs/interfaces/_internal_.CanadianClock.html +++ b/docs/interfaces/_internal_.CanadianClock.html @@ -1,4 +1,4 @@ -CanadianClock | goban

    Interface CanadianClock

    interface CanadianClock {
        block_time: number;
        moves_left: number;
        thinking_time: number;
    }

    Properties

    block_time +CanadianClock | goban

    Interface CanadianClock

    interface CanadianClock {
        block_time: number;
        moves_left: number;
        thinking_time: number;
    }

    Properties

    block_time: number
    moves_left: number
    thinking_time: number
    \ No newline at end of file +

    Properties

    block_time: number
    moves_left: number
    thinking_time: number
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.ErrorResponse.html b/docs/interfaces/_internal_.ErrorResponse.html index 236fb99c..9c607956 100644 --- a/docs/interfaces/_internal_.ErrorResponse.html +++ b/docs/interfaces/_internal_.ErrorResponse.html @@ -1,3 +1,3 @@ -ErrorResponse | goban

    Interface ErrorResponse

    interface ErrorResponse {
        code: string;
        message: string;
    }

    Properties

    code +ErrorResponse | goban

    Interface ErrorResponse

    interface ErrorResponse {
        code: string;
        message: string;
    }

    Properties

    Properties

    code: string
    message: string
    \ No newline at end of file +

    Properties

    code: string
    message: string
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.FischerClock.html b/docs/interfaces/_internal_.FischerClock.html index bbd4ef26..62433f73 100644 --- a/docs/interfaces/_internal_.FischerClock.html +++ b/docs/interfaces/_internal_.FischerClock.html @@ -1,3 +1,3 @@ -FischerClock | goban

    Interface FischerClock

    interface FischerClock {
        skip_bonus: boolean;
        thinking_time: number;
    }

    Properties

    skip_bonus +FischerClock | goban

    Interface FischerClock

    interface FischerClock {
        skip_bonus: boolean;
        thinking_time: number;
    }

    Properties

    skip_bonus: boolean
    thinking_time: number
    \ No newline at end of file +

    Properties

    skip_bonus: boolean
    thinking_time: number
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.GameListPlayer.html b/docs/interfaces/_internal_.GameListPlayer.html index 56eebc1b..8d906a30 100644 --- a/docs/interfaces/_internal_.GameListPlayer.html +++ b/docs/interfaces/_internal_.GameListPlayer.html @@ -1,7 +1,7 @@ -GameListPlayer | goban

    Interface GameListPlayer

    interface GameListPlayer {
        accepted: boolean;
        id: number;
        professional: boolean;
        rank: number;
        ratings: {
            overall: {
                deviation: number;
                rating: number;
                volatility: number;
            };
            version: number;
        };
        username: string;
    }

    Properties

    accepted +GameListPlayer | goban

    Interface GameListPlayer

    interface GameListPlayer {
        accepted: boolean;
        id: number;
        professional: boolean;
        rank: number;
        ratings: {
            overall: {
                deviation: number;
                rating: number;
                volatility: number;
            };
            version: number;
        };
        username: string;
    }

    Properties

    accepted: boolean
    id: number
    professional: boolean
    rank: number
    ratings: {
        overall: {
            deviation: number;
            rating: number;
            volatility: number;
        };
        version: number;
    }

    Type declaration

    • overall: {
          deviation: number;
          rating: number;
          volatility: number;
      }
      • deviation: number
      • rating: number
      • volatility: number
    • version: number
    username: string
    \ No newline at end of file +

    Properties

    accepted: boolean
    id: number
    professional: boolean
    rank: number
    ratings: {
        overall: {
            deviation: number;
            rating: number;
            volatility: number;
        };
        version: number;
    }

    Type declaration

    • overall: {
          deviation: number;
          rating: number;
          volatility: number;
      }
      • deviation: number
      • rating: number
      • volatility: number
    • version: number
    username: string
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.GobanSVGInterface.html b/docs/interfaces/_internal_.GobanSVGInterface.html index ba8a67c4..fe12e70d 100644 --- a/docs/interfaces/_internal_.GobanSVGInterface.html +++ b/docs/interfaces/_internal_.GobanSVGInterface.html @@ -1,4 +1,4 @@ -GobanSVGInterface | goban

    Interface GobanSVGInterface

    interface GobanSVGInterface {
        engine: GobanEngine;
        move_tree_container?: HTMLElement;
        clearAnalysisDrawing(): void;
        clearMessage(): void;
        destroy(): void;
        disablePen(): void;
        drawPenMarks(pen_marks): void;
        drawSquare(i, j): void;
        enablePen(): void;
        move_tree_bindEvents(svg): void;
        move_tree_redraw(no_warp?): void;
        setByoYomiLabel(label): void;
        setLastMoveOpacity(opacity): void;
        setMoveTreeContainer(container): void;
        showMessage(message_id_or_error, parameters?, timeout?): void;
    }

    Implemented by

    Properties

    engine +GobanSVGInterface | goban

    Interface GobanSVGInterface

    interface GobanSVGInterface {
        engine: GobanEngine;
        move_tree_container?: HTMLElement;
        clearAnalysisDrawing(): void;
        clearMessage(): void;
        destroy(): void;
        disablePen(): void;
        drawPenMarks(pen_marks): void;
        drawSquare(i, j): void;
        enablePen(): void;
        move_tree_bindEvents(svg): void;
        move_tree_redraw(no_warp?): void;
        setByoYomiLabel(label): void;
        setLastMoveOpacity(opacity): void;
        setMoveTreeContainer(container): void;
        showMessage(message_id_or_error, parameters?, timeout?): void;
    }

    Implemented by

    Properties

    engine: GobanEngine
    move_tree_container?: HTMLElement

    Methods

    • Parameters

      • message_id_or_error: MessageID
      • Optional parameters: {
            [key: string]: any;
        }
        • [key: string]: any
      • Optional timeout: number

      Returns void

    \ No newline at end of file +

    Properties

    engine: GobanEngine
    move_tree_container?: HTMLElement

    Methods

    • Parameters

      • message_id_or_error: MessageID
      • Optional parameters: {
            [key: string]: any;
        }
        • [key: string]: any
      • Optional timeout: number

      Returns void

    \ No newline at end of file diff --git a/docs/interfaces/_internal_.GobanSocketOptions.html b/docs/interfaces/_internal_.GobanSocketOptions.html index 475d0c2d..cff7478e 100644 --- a/docs/interfaces/_internal_.GobanSocketOptions.html +++ b/docs/interfaces/_internal_.GobanSocketOptions.html @@ -1,7 +1,7 @@ -GobanSocketOptions | goban

    Interface GobanSocketOptions

    interface GobanSocketOptions {
        dont_ping?: boolean;
        ping_interval?: number;
        quiet?: boolean;
        timeout_delay?: number;
    }

    Properties

    dont_ping? +GobanSocketOptions | goban

    Interface GobanSocketOptions

    interface GobanSocketOptions {
        dont_ping?: boolean;
        ping_interval?: number;
        quiet?: boolean;
        timeout_delay?: number;
    }

    Properties

    dont_ping?: boolean

    Don't automatically send pings

    -
    ping_interval?: number
    quiet?: boolean

    Don't log connection/disconnect things

    -
    timeout_delay?: number
    \ No newline at end of file +
    ping_interval?: number
    quiet?: boolean

    Don't log connection/disconnect things

    +
    timeout_delay?: number
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.JGOFPlayerClockWithTimedOut.html b/docs/interfaces/_internal_.JGOFPlayerClockWithTimedOut.html index 3bb19acb..3d4a713f 100644 --- a/docs/interfaces/_internal_.JGOFPlayerClockWithTimedOut.html +++ b/docs/interfaces/_internal_.JGOFPlayerClockWithTimedOut.html @@ -1,4 +1,4 @@ -JGOFPlayerClockWithTimedOut | goban

    Interface JGOFPlayerClockWithTimedOut

    interface JGOFPlayerClockWithTimedOut {
        block_time_left?: number;
        main_time: number;
        moves_left?: number;
        period_time_left?: number;
        periods_left?: number;
        timed_out: boolean;
    }

    Hierarchy (view full)

    Properties

    block_time_left? +JGOFPlayerClockWithTimedOut | goban

    Interface JGOFPlayerClockWithTimedOut

    interface JGOFPlayerClockWithTimedOut {
        block_time_left?: number;
        main_time: number;
        moves_left?: number;
        period_time_left?: number;
        periods_left?: number;
        timed_out: boolean;
    }

    Hierarchy (view full)

    Properties

    block_time_left?: number

    Used with canadian time control. Time left in milliseconds to make the remainder of your moves in the current block

    -
    main_time: number

    Main time left on the clock, in milliseconds.

    -
    moves_left?: number

    Used with canadian time control. Number of moves left before a new +

    main_time: number

    Main time left on the clock, in milliseconds.

    +
    moves_left?: number

    Used with canadian time control. Number of moves left before a new block of time.

    -
    period_time_left?: number

    Used with byo-yomi time control. Time left on the period time, in milliseconds.

    -
    periods_left?: number

    Used with byo-yomi time control. Number of periods left.

    -
    timed_out: boolean
    \ No newline at end of file +
    period_time_left?: number

    Used with byo-yomi time control. Time left on the period time, in milliseconds.

    +
    periods_left?: number

    Used with byo-yomi time control. Number of periods left.

    +
    timed_out: boolean
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.MoveTreeViewPortInterface.html b/docs/interfaces/_internal_.MoveTreeViewPortInterface.html index 1c1cf454..c72365c5 100644 --- a/docs/interfaces/_internal_.MoveTreeViewPortInterface.html +++ b/docs/interfaces/_internal_.MoveTreeViewPortInterface.html @@ -1,7 +1,7 @@ -MoveTreeViewPortInterface | goban

    Interface MoveTreeViewPortInterface

    interface MoveTreeViewPortInterface {
        maxx: number;
        maxy: number;
        minx: number;
        miny: number;
        offset_x: number;
        offset_y: number;
    }

    Properties

    maxx +MoveTreeViewPortInterface | goban

    Interface MoveTreeViewPortInterface

    interface MoveTreeViewPortInterface {
        maxx: number;
        maxy: number;
        minx: number;
        miny: number;
        offset_x: number;
        offset_y: number;
    }

    Properties

    maxx: number
    maxy: number
    minx: number
    miny: number
    offset_x: number
    offset_y: number
    \ No newline at end of file +

    Properties

    maxx: number
    maxy: number
    minx: number
    miny: number
    offset_x: number
    offset_y: number
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.ReviewComment.html b/docs/interfaces/_internal_.ReviewComment.html index 4a9a8f82..9e23dc90 100644 --- a/docs/interfaces/_internal_.ReviewComment.html +++ b/docs/interfaces/_internal_.ReviewComment.html @@ -1,3 +1,3 @@ -ReviewComment | goban

    Interface ReviewComment

    interface ReviewComment {
        review_id: number;
        type: "review";
    }

    Properties

    review_id +ReviewComment | goban

    Interface ReviewComment

    interface ReviewComment {
        review_id: number;
        type: "review";
    }

    Properties

    Properties

    review_id: number
    type: "review"
    \ No newline at end of file +

    Properties

    review_id: number
    type: "review"
    \ No newline at end of file diff --git a/docs/interfaces/_internal_.ViewPortInterface.html b/docs/interfaces/_internal_.ViewPortInterface.html index 16c6e94f..c4068d41 100644 --- a/docs/interfaces/_internal_.ViewPortInterface.html +++ b/docs/interfaces/_internal_.ViewPortInterface.html @@ -1,7 +1,7 @@ -ViewPortInterface | goban

    Interface ViewPortInterface

    interface ViewPortInterface {
        maxx: number;
        maxy: number;
        minx: number;
        miny: number;
        offset_x: number;
        offset_y: number;
    }

    Properties

    maxx +ViewPortInterface | goban

    Interface ViewPortInterface

    interface ViewPortInterface {
        maxx: number;
        maxy: number;
        minx: number;
        miny: number;
        offset_x: number;
        offset_y: number;
    }

    Properties

    maxx: number
    maxy: number
    minx: number
    miny: number
    offset_x: number
    offset_y: number
    \ No newline at end of file +

    Properties

    maxx: number
    maxy: number
    minx: number
    miny: number
    offset_x: number
    offset_y: number
    \ No newline at end of file diff --git a/docs/interfaces/protocol.AIServerToClient.html b/docs/interfaces/protocol.AIServerToClient.html index c7129a7f..d5ecdf1f 100644 --- a/docs/interfaces/protocol.AIServerToClient.html +++ b/docs/interfaces/protocol.AIServerToClient.html @@ -1,6 +1,6 @@ AIServerToClient | goban

    Interface AIServerToClient

    interface AIServerToClient {
        net/pong: ((data) => void);
        [uuid: string]: ((data) => void);
    }

    Indexable

    [uuid: string]: ((data) => void)

    AI review messages are streamed back to the AI review UUID.

    -
      • (data): void
      • Parameters

        • data: any

        Returns void

    Properties

      • (data): void
      • Parameters

        • data: any

        Returns void

    Properties

    Properties

    net/pong: ((data) => void)

    Pong response from a ping

    Type declaration

      • (data): void
      • Parameters

        • data: {
              client: number;
              server: number;
          }
          • client: number

            Client timestamp that was sent

          • server: number

            Server timestamp when it was received

            -

        Returns void

    \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/docs/interfaces/protocol.AutomatchPreferences.html b/docs/interfaces/protocol.AutomatchPreferences.html index 549c2cb4..5ebdaa3c 100644 --- a/docs/interfaces/protocol.AutomatchPreferences.html +++ b/docs/interfaces/protocol.AutomatchPreferences.html @@ -1,4 +1,4 @@ -AutomatchPreferences | goban

    Interface AutomatchPreferences

    interface AutomatchPreferences {
        handicap: {
            condition: AutomatchCondition;
            value: "enabled" | "disabled";
        };
        lower_rank_diff: number;
        rules: {
            condition: AutomatchCondition;
            value: "chinese" | "aga" | "japanese" | "korean" | "ing" | "nz";
        };
        size_speed_options: {
            size: Size;
            speed: Speed;
        }[];
        time_control: {
            condition: AutomatchCondition;
            value: {
                initial_time?: number;
                main_time?: number;
                max_time?: number;
                pause_on_weekends?: boolean;
                per_move?: number;
                period_time?: number;
                periods?: number;
                stones_per_period?: number;
                system: "fischer" | "byoyomi" | "canadian" | "simple";
                time_increment?: number;
            };
        };
        timestamp?: number;
        upper_rank_diff: number;
        uuid: string;
    }

    Properties

    handicap +AutomatchPreferences | goban

    Interface AutomatchPreferences

    interface AutomatchPreferences {
        handicap: {
            condition: AutomatchCondition;
            value: "enabled" | "disabled";
        };
        lower_rank_diff: number;
        rules: {
            condition: AutomatchCondition;
            value: "chinese" | "aga" | "japanese" | "korean" | "ing" | "nz";
        };
        size_speed_options: {
            size: Size;
            speed: Speed;
        }[];
        time_control: {
            condition: AutomatchCondition;
            value: {
                initial_time?: number;
                main_time?: number;
                max_time?: number;
                pause_on_weekends?: boolean;
                per_move?: number;
                period_time?: number;
                periods?: number;
                stones_per_period?: number;
                system: "fischer" | "byoyomi" | "canadian" | "simple";
                time_increment?: number;
            };
        };
        timestamp?: number;
        upper_rank_diff: number;
        uuid: string;
    }

    Properties

    handicap: {
        condition: AutomatchCondition;
        value: "enabled" | "disabled";
    }

    Type declaration

    lower_rank_diff: number
    rules: {
        condition: AutomatchCondition;
        value: "chinese" | "aga" | "japanese" | "korean" | "ing" | "nz";
    }

    Type declaration

    • condition: AutomatchCondition
    • value: "chinese" | "aga" | "japanese" | "korean" | "ing" | "nz"
    size_speed_options: {
        size: Size;
        speed: Speed;
    }[]

    Type declaration

    time_control: {
        condition: AutomatchCondition;
        value: {
            initial_time?: number;
            main_time?: number;
            max_time?: number;
            pause_on_weekends?: boolean;
            per_move?: number;
            period_time?: number;
            periods?: number;
            stones_per_period?: number;
            system: "fischer" | "byoyomi" | "canadian" | "simple";
            time_increment?: number;
        };
    }

    Type declaration

    • condition: AutomatchCondition
    • value: {
          initial_time?: number;
          main_time?: number;
          max_time?: number;
          pause_on_weekends?: boolean;
          per_move?: number;
          period_time?: number;
          periods?: number;
          stones_per_period?: number;
          system: "fischer" | "byoyomi" | "canadian" | "simple";
          time_increment?: number;
      }
      • Optional initial_time?: number
      • Optional main_time?: number
      • Optional max_time?: number
      • Optional pause_on_weekends?: boolean
      • Optional per_move?: number
      • Optional period_time?: number
      • Optional periods?: number
      • Optional stones_per_period?: number
      • system: "fischer" | "byoyomi" | "canadian" | "simple"
      • Optional time_increment?: number
    timestamp?: number
    upper_rank_diff: number
    uuid: string
    \ No newline at end of file +

    Properties

    handicap: {
        condition: AutomatchCondition;
        value: "enabled" | "disabled";
    }

    Type declaration

    lower_rank_diff: number
    rules: {
        condition: AutomatchCondition;
        value: "chinese" | "aga" | "japanese" | "korean" | "ing" | "nz";
    }

    Type declaration

    • condition: AutomatchCondition
    • value: "chinese" | "aga" | "japanese" | "korean" | "ing" | "nz"
    size_speed_options: {
        size: Size;
        speed: Speed;
    }[]

    Type declaration

    time_control: {
        condition: AutomatchCondition;
        value: {
            initial_time?: number;
            main_time?: number;
            max_time?: number;
            pause_on_weekends?: boolean;
            per_move?: number;
            period_time?: number;
            periods?: number;
            stones_per_period?: number;
            system: "fischer" | "byoyomi" | "canadian" | "simple";
            time_increment?: number;
        };
    }

    Type declaration

    • condition: AutomatchCondition
    • value: {
          initial_time?: number;
          main_time?: number;
          max_time?: number;
          pause_on_weekends?: boolean;
          per_move?: number;
          period_time?: number;
          periods?: number;
          stones_per_period?: number;
          system: "fischer" | "byoyomi" | "canadian" | "simple";
          time_increment?: number;
      }
      • Optional initial_time?: number
      • Optional main_time?: number
      • Optional max_time?: number
      • Optional pause_on_weekends?: boolean
      • Optional per_move?: number
      • Optional period_time?: number
      • Optional periods?: number
      • Optional stones_per_period?: number
      • system: "fischer" | "byoyomi" | "canadian" | "simple"
      • Optional time_increment?: number
    timestamp?: number
    upper_rank_diff: number
    uuid: string
    \ No newline at end of file diff --git a/docs/interfaces/protocol.ClientToAIServer.html b/docs/interfaces/protocol.ClientToAIServer.html index 5b498fd1..e61954c4 100644 --- a/docs/interfaces/protocol.ClientToAIServer.html +++ b/docs/interfaces/protocol.ClientToAIServer.html @@ -1,6 +1,6 @@ ClientToAIServer | goban

    Interface ClientToAIServer

    This is an exhaustive list of the messages that the client can send to the AI servers.

    -
    interface ClientToAIServer {
        ai-analyze-position: ((data) => any);
        ai-analyze-subscribe: ((data) => void);
        ai-analyze-unsubscribe: ((data) => void);
        ai-analyze-variation: ((data) => void);
        ai-relay-analyzed-position: ((data) => any);
        ai-review-connect: ((data) => void);
        ai-review-disconnect: ((data) => void);
        authenticate: ((data) => undefined | {
            id: number;
            username: string;
        });
        net/ping: ((data) => void);
    }

    Hierarchy (view full)

    Properties

    interface ClientToAIServer {
        ai-analyze-position: ((data) => any);
        ai-analyze-subscribe: ((data) => void);
        ai-analyze-unsubscribe: ((data) => void);
        ai-analyze-variation: ((data) => void);
        ai-relay-analyzed-position: ((data) => any);
        ai-review-connect: ((data) => void);
        ai-review-disconnect: ((data) => void);
        authenticate: ((data) => undefined | {
            id: number;
            username: string;
        });
        net/ping: ((data) => void);
    }

    Hierarchy (view full)

    Properties

  • rules: RuleSet

    Ruleset to use

  • uuid: string

    UUID identifying the request

  • white_prisoners: number

    Number of captures white has

    -
  • Returns any

    ai-analyze-subscribe: ((data) => void)

    Subscribers to analyze position calls

    -

    Type declaration

      • (data): void
      • Parameters

        • data: {
              channel_id: string;
          }
          • channel_id: string

        Returns void

    ai-analyze-unsubscribe: ((data) => void)

    Un-subscribers to analyze position calls

    -

    Type declaration

      • (data): void
      • Parameters

        • data: {
              channel_id: string;
          }
          • channel_id: string

        Returns void

    ai-analyze-variation: ((data) => void)

    Type declaration

      • (data): void
      • Parameters

        • data: {
              ai_review_id: string | number;
              from: number;
              game_id: string | number;
              uuid: string;
              variation: string;
          }
          • ai_review_id: string | number

            The AI review id we're basing our analysis off of

            +

        Returns any

    ai-analyze-subscribe: ((data) => void)

    Subscribers to analyze position calls

    +

    Type declaration

      • (data): void
      • Parameters

        • data: {
              channel_id: string;
          }
          • channel_id: string

        Returns void

    ai-analyze-unsubscribe: ((data) => void)

    Un-subscribers to analyze position calls

    +

    Type declaration

      • (data): void
      • Parameters

        • data: {
              channel_id: string;
          }
          • channel_id: string

        Returns void

    ai-analyze-variation: ((data) => void)

    Type declaration

      • (data): void
      • Parameters

        • data: {
              ai_review_id: string | number;
              from: number;
              game_id: string | number;
              uuid: string;
              variation: string;
          }
          • ai_review_id: string | number

            The AI review id we're basing our analysis off of

          • from: number

            The move number we're branching from

          • game_id: string | number

            The game id we're analyzing

          • uuid: string

            AI UUID

          • variation: string

            Move string

            -

        Returns void

    ai-relay-analyzed-position: ((data) => any)

    Relay an already analyzed position out to any other viewers

    +

    Returns void

    ai-relay-analyzed-position: ((data) => any)

    Relay an already analyzed position out to any other viewers

    Type declaration

    ai-review-connect: ((data) => void)

    Type declaration

    ai-review-connect: ((data) => void)

    Type declaration

    ai-review-disconnect: ((data) => void)

    Type declaration

    authenticate: ((data) => undefined | {
        id: number;
        username: string;
    })

    Authenticate with the server.

    +

    Returns void

    ai-review-disconnect: ((data) => void)

    Type declaration

    authenticate: ((data) => undefined | {
        id: number;
        username: string;
    })

    Authenticate with the server.

    Prior to authentication, you should perform a GET request to /api/v1/ui/config to get the current configuration. Within the returned JSON @@ -47,7 +47,7 @@

  • Optional language?: string

    ISO 639-1 language code used on this device.

  • Optional language_version?: string

    The version of the translation dictionary.

  • Optional user_agent?: string

    Browser user agent (or websocket library)

    -
  • Returns undefined | {
        id: number;
        username: string;
    }

    net/ping: ((data) => void)

    Sends a ping to the server. This message should be +

    Returns undefined | {
        id: number;
        username: string;
    }

    net/ping: ((data) => void)

    Sends a ping to the server. This message should be sent regularly. The default interval is 10 seconds. This keeps the connection alive and allows a client to measure clock drift and latency, both of which @@ -55,4 +55,4 @@

    Type declaration

    \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/docs/interfaces/protocol.ClientToServer.html b/docs/interfaces/protocol.ClientToServer.html index cc516021..c30a3f86 100644 --- a/docs/interfaces/protocol.ClientToServer.html +++ b/docs/interfaces/protocol.ClientToServer.html @@ -11,7 +11,7 @@
     {
    bot_apikey?: string;
    bot_username?: string;
    client?: string;
    client_version?: string;
    device_id?: string;
    jwt: string;
    language?: string;
    language_version?: string;
    user_agent?: string;
    }

    and you can expect to receive back either undefined or {id: number, username: string}

    -
    interface ClientToServer {
        authenticate: ((data) => undefined | {
            id: number;
            username: string;
        });
        automatch/cancel: ((data) => void);
        automatch/find_match: ((data) => void);
        automatch/list: ((data) => void);
        bot/config: ((config) => void);
        bot/status: ((data) => void);
        challenge/keepalive: ((data) => void);
        chat/join: ((data) => void);
        chat/part: ((data) => void);
        chat/pm: ((data) => undefined | {
            from: User;
            message: {
                i: string;
                m: string;
                t: number;
            };
            to: {
                id: number;
                username: string;
            };
        });
        chat/pm/close: ((data) => void);
        chat/pm/load: ((data) => void);
        chat/pm/superchat: ((data) => void);
        chat/remove: ((data) => void);
        chat/remove_all: ((data) => void);
        chat/send: ((data) => void);
        chat/topic: ((data) => void);
        game/annul: ((data) => void);
        game/cancel: ((data) => void);
        game/chat: ((data) => void);
        game/chat/remove: ((data) => void);
        game/clear_delayed_resign: ((data) => void);
        game/conditional_moves/set: ((data) => void);
        game/connect: ((data) => void);
        game/delayed_resign: ((data) => void);
        game/disconnect: ((data) => void);
        game/latency: ((data) => void);
        game/log: ((data) => {
            data: any;
            event: string;
            timestamp: string;
        }[]);
        game/move: ((data) => void);
        game/pause: ((data) => void);
        game/prevent_escaping: ((data) => void);
        game/prevent_stalling: ((data) => void);
        game/removed_stones/accept: ((data) => void);
        game/removed_stones/reject: ((data) => void);
        game/removed_stones/set: ((data) => void);
        game/resign: ((data) => void);
        game/resume: ((data) => void);
        game/timed_out: ((data) => void);
        game/undo/accept: ((data) => void);
        game/undo/cancel: ((data) => void);
        game/undo/request: ((data) => void);
        gamelist/count/subscribe: ((data) => void);
        gamelist/count/unsubscribe: ((data) => void);
        gamelist/query: ((data) => undefined | {
            by: string;
            from: number;
            limit: number;
            list: string;
            results: GameListEntry[];
            size: number;
            where: GameListWhere;
        });
        hostinfo: ((data) => {
            clients: number;
            ggs-version: string;
            hostname: string;
            uptime: number;
        });
        itc: ((data) => void);
        net/ping: ((data) => void);
        notification/delete: ((data) => void);
        remote_storage/remove: ((data) => {
            error?: string;
            retry?: boolean;
        } | {
            success: true;
        });
        remote_storage/set: ((data) => {
            error?: string;
            retry?: boolean;
        } | {
            success: true;
        });
        remote_storage/sync: ((data) => {
            error?: string;
            retry?: boolean;
        } | {
            success: true;
        });
        review/append: ((data) => void);
        review/chat: ((data) => void);
        review/chat/remove: ((data) => void);
        review/connect: ((data) => void);
        review/disconnect: ((data) => void);
        seek_graph/connect: ((data) => void);
        seek_graph/disconnect: ((data) => void);
        stats/online: ((data) => number);
        ui-pushes/subscribe: ((data) => void);
        ui-pushes/unsubscribe: ((data) => void);
        user/monitor: ((data) => void);
    }

    Hierarchy (view full)

    Properties

    interface ClientToServer {
        authenticate: ((data) => undefined | {
            id: number;
            username: string;
        });
        automatch/cancel: ((data) => void);
        automatch/find_match: ((data) => void);
        automatch/list: ((data) => void);
        bot/config: ((config) => void);
        bot/status: ((data) => void);
        challenge/keepalive: ((data) => void);
        chat/join: ((data) => void);
        chat/part: ((data) => void);
        chat/pm: ((data) => undefined | {
            from: User;
            message: {
                i: string;
                m: string;
                t: number;
            };
            to: {
                id: number;
                username: string;
            };
        });
        chat/pm/close: ((data) => void);
        chat/pm/load: ((data) => void);
        chat/pm/superchat: ((data) => void);
        chat/remove: ((data) => void);
        chat/remove_all: ((data) => void);
        chat/send: ((data) => void);
        chat/topic: ((data) => void);
        game/annul: ((data) => void);
        game/cancel: ((data) => void);
        game/chat: ((data) => void);
        game/chat/remove: ((data) => void);
        game/clear_delayed_resign: ((data) => void);
        game/conditional_moves/set: ((data) => void);
        game/connect: ((data) => void);
        game/delayed_resign: ((data) => void);
        game/disconnect: ((data) => void);
        game/latency: ((data) => void);
        game/log: ((data) => {
            data: any;
            event: string;
            timestamp: string;
        }[]);
        game/move: ((data) => void);
        game/pause: ((data) => void);
        game/prevent_escaping: ((data) => void);
        game/prevent_stalling: ((data) => void);
        game/removed_stones/accept: ((data) => void);
        game/removed_stones/reject: ((data) => void);
        game/removed_stones/set: ((data) => void);
        game/resign: ((data) => void);
        game/resume: ((data) => void);
        game/timed_out: ((data) => void);
        game/undo/accept: ((data) => void);
        game/undo/cancel: ((data) => void);
        game/undo/request: ((data) => void);
        gamelist/count/subscribe: ((data) => void);
        gamelist/count/unsubscribe: ((data) => void);
        gamelist/query: ((data) => undefined | {
            by: string;
            from: number;
            limit: number;
            list: string;
            results: GameListEntry[];
            size: number;
            where: GameListWhere;
        });
        hostinfo: ((data) => {
            clients: number;
            ggs-version: string;
            hostname: string;
            uptime: number;
        });
        itc: ((data) => void);
        net/ping: ((data) => void);
        notification/delete: ((data) => void);
        remote_storage/remove: ((data) => {
            error?: string;
            retry?: boolean;
        } | {
            success: true;
        });
        remote_storage/set: ((data) => {
            error?: string;
            retry?: boolean;
        } | {
            success: true;
        });
        remote_storage/sync: ((data) => {
            error?: string;
            retry?: boolean;
        } | {
            success: true;
        });
        review/append: ((data) => void);
        review/chat: ((data) => void);
        review/chat/remove: ((data) => void);
        review/connect: ((data) => void);
        review/disconnect: ((data) => void);
        seek_graph/connect: ((data) => void);
        seek_graph/disconnect: ((data) => void);
        stats/online: ((data) => number);
        ui-pushes/subscribe: ((data) => void);
        ui-pushes/unsubscribe: ((data) => void);
        user/monitor: ((data) => void);
    }

    Hierarchy (view full)

    Properties

  • Optional language?: string

    ISO 639-1 language code used on this device.

  • Optional language_version?: string

    The version of the translation dictionary.

  • Optional user_agent?: string

    Browser user agent (or websocket library)

    -
  • Returns undefined | {
        id: number;
        username: string;
    }

    automatch/cancel: ((data) => void)

    Cancel a match request

    -

    Type declaration

      • (data): void
      • Parameters

        • data: {
              uuid: string;
          }
          • uuid: string

        Returns void

    automatch/find_match: ((data) => void)

    Request a match via the automatch system

    -

    Type declaration

    automatch/list: ((data) => void)

    Get active automatch entries for the current user

    -

    Type declaration

      • (data): void
      • Parameters

        • data: {}

          Returns void

      bot/config: ((config) => void)

      Updates the config for the bot

      -

      Type declaration

        • (config): void
        • Parameters

          • config: any

          Returns void

      bot/status: ((data) => void)

      Update the number of games that the bot is currently playing

      -

      Type declaration

        • (data): void
        • Parameters

          • data: {
                ongoing_blitz_count: number;
                ongoing_correspondence_count: number;
                ongoing_live_count: number;
            }
            • ongoing_blitz_count: number
            • ongoing_correspondence_count: number
            • ongoing_live_count: number

          Returns void

      challenge/keepalive: ((data) => void)

      Message to let the server know the client is still interested +

      Returns undefined | {
          id: number;
          username: string;
      }

      automatch/cancel: ((data) => void)

      Cancel a match request

      +

      Type declaration

        • (data): void
        • Parameters

          • data: {
                uuid: string;
            }
            • uuid: string

          Returns void

      automatch/find_match: ((data) => void)

      Request a match via the automatch system

      +

      Type declaration

      automatch/list: ((data) => void)

      Get active automatch entries for the current user

      +

      Type declaration

        • (data): void
        • Parameters

          • data: {}

            Returns void

        bot/config: ((config) => void)

        Updates the config for the bot

        +

        Type declaration

          • (config): void
          • Parameters

            • config: any

            Returns void

        bot/status: ((data) => void)

        Update the number of games that the bot is currently playing

        +

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  ongoing_blitz_count: number;
                  ongoing_correspondence_count: number;
                  ongoing_live_count: number;
              }
              • ongoing_blitz_count: number
              • ongoing_correspondence_count: number
              • ongoing_live_count: number

            Returns void

        challenge/keepalive: ((data) => void)

        Message to let the server know the client is still interested in the specified blitz or live challenge. These should be sent about once a second to prevent the server from canceling the challenge.

        -

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  challenge_id: number;
                  game_id: number;
              }
              • challenge_id: number
              • game_id: number

            Returns void

        chat/join: ((data) => void)

        Join a chat channel

        +

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  challenge_id: number;
                  game_id: number;
              }
              • challenge_id: number
              • game_id: number

            Returns void

        chat/join: ((data) => void)

        Join a chat channel

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel: string;
              }
              • channel: string

                Channel to join

                -

            Returns void

        chat/part: ((data) => void)

        Leave a channel

        +

        Returns void

        chat/part: ((data) => void)

        Leave a channel

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel: string;
              }
              • channel: string

                Channel to leave

                -

            Returns void

        chat/pm: ((data) => undefined | {
            from: User;
            message: {
                i: string;
                m: string;
                t: number;
            };
            to: {
                id: number;
                username: string;
            };
        })

        Send a private message to another user

        +

        Returns void

        chat/pm: ((data) => undefined | {
            from: User;
            message: {
                i: string;
                m: string;
                t: number;
            };
            to: {
                id: number;
                username: string;
            };
        })

        Send a private message to another user

        Type declaration

          • (data): undefined | {
                from: User;
                message: {
                    i: string;
                    m: string;
                    t: number;
                };
                to: {
                    id: number;
                    username: string;
                };
            }
          • Parameters

            • data: {
                  as_system?: true;
                  message: string;
                  player_id: number;
                  uid: string;
                  username: string;
              }
              • Optional as_system?: true

                Moderator option to send the chat from the system not from their personal PM

              • message: string

                Message text

              • player_id: number

                Player ID of the recipient

              • uid: string

                UUID for the message

              • username: string

                Username of the recipient

                -

            Returns undefined | {
                from: User;
                message: {
                    i: string;
                    m: string;
                    t: number;
                };
                to: {
                    id: number;
                    username: string;
                };
            }

        chat/pm/close: ((data) => void)

        Closes the current user's private message session with the given player id

        -

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  player_id: number;
              }
              • player_id: number

            Returns void

        chat/pm/load: ((data) => void)

        Loads the current user's private message session history with the given player id

        -

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  player_id: number;
              }
              • player_id: number

            Returns void

        chat/pm/superchat: ((data) => void)

        Begins a "super chat" session with the given player id, which creates an +

        Returns undefined | {
            from: User;
            message: {
                i: string;
                m: string;
                t: number;
            };
            to: {
                id: number;
                username: string;
            };
        }

        chat/pm/close: ((data) => void)

        Closes the current user's private message session with the given player id

        +

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  player_id: number;
              }
              • player_id: number

            Returns void

        chat/pm/load: ((data) => void)

        Loads the current user's private message session history with the given player id

        +

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  player_id: number;
              }
              • player_id: number

            Returns void

        chat/pm/superchat: ((data) => void)

        Begins a "super chat" session with the given player id, which creates an unclosable dialog if enable is true, and makes the dialog closable again if enable is false. This is only available to moderators.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  enable: boolean;
                  player_id: number;
                  username: string;
              }
              • enable: boolean

                Set to true if you want the modal to be unclosable, false if you want the modal to be closable again

              • player_id: number
              • username: string

                Username of the recipient

                -

            Returns void

        chat/remove: ((data) => void)

        Moderator only command to remove a single chat message

        -

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  uuid: string;
              }
              • uuid: string

            Returns void

        chat/remove_all: ((data) => void)

        Moderator only command to remove all chat messages for a given player

        +

        Returns void

        chat/remove: ((data) => void)

        Moderator only command to remove a single chat message

        +

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  uuid: string;
              }
              • uuid: string

            Returns void

        chat/remove_all: ((data) => void)

        Moderator only command to remove all chat messages for a given player

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  player_id: number;
              }
              • player_id: number

                Player id to remove all messages for

                -

            Returns void

        chat/send: ((data) => void)

        Sends a chat message to the given channel

        +

        Returns void

        chat/send: ((data) => void)

        Sends a chat message to the given channel

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel: string;
                  message: string;
                  uuid: string;
              }
              • channel: string

                Channel to send the message to

              • message: string

                Message text

              • uuid: string

                ID for the message

                -

            Returns void

        chat/topic: ((data) => void)

        Sets a channel topic

        -

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel: string;
                  topic: string;
              }
              • channel: string
              • topic: string

            Returns void

        game/annul: ((data) => void)

        In Japanese rules, if the game is found to be repeating, the players +

        Returns void

        chat/topic: ((data) => void)

        Sets a channel topic

        +

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel: string;
                  topic: string;
              }
              • channel: string
              • topic: string

            Returns void

        game/annul: ((data) => void)

        In Japanese rules, if the game is found to be repeating, the players may opt to annul the entire game and start over.

        This is largely undesired in an online setting and support for this will probably be removed in the future, dont' bother implementing this.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/cancel: ((data) => void)

        Cancels a game. This is effectively the same as resign, except the +

        Returns void

        game/cancel: ((data) => void)

        Cancels a game. This is effectively the same as resign, except the game will not be ranked. This is only allowed within the first few moves of the game. (See GobanEngine.gameCanBeCancelled for cancellation )

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/chat: ((data) => void)

        Sends a chat message to a game

        +

        Returns void

        game/chat: ((data) => void)

        Sends a chat message to a game

        Type declaration

        game/chat/remove: ((data) => void)

        Moderator only command to remove a single chat message from a game

        -

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel: string;
                  chat_id: string;
                  game_id: number;
              }
              • channel: string
              • chat_id: string
              • game_id: number

            Returns void

        game/clear_delayed_resign: ((data) => void)

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/conditional_moves/set: ((data) => void)

        Sets conditional moves to be made on behalf of the player in response +

        Returns void

        game/chat/remove: ((data) => void)

        Moderator only command to remove a single chat message from a game

        +

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel: string;
                  chat_id: string;
                  game_id: number;
              }
              • channel: string
              • chat_id: string
              • game_id: number

            Returns void

        game/clear_delayed_resign: ((data) => void)

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                +

            Returns void

        game/conditional_moves/set: ((data) => void)

        Sets conditional moves to be made on behalf of the player in response to a move by the opponent.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  conditional_moves: ConditionalMoveResponse;
                  game_id: number;
                  move_number: number;
              }
              • conditional_moves: ConditionalMoveResponse

                The conditional moves. The top level should be an array that looks like [null, { ... }] where the second element contains the responses to the opponent's move.

              • game_id: number

                The game id

              • move_number: number

                The move number from which the conditional moves are rooted in

                -

            Returns void

        game/connect: ((data) => void)

        Connect to a game. Once connected, the client will receive game +

        Returns void

        game/connect: ((data) => void)

        Connect to a game. Once connected, the client will receive game updates relevant to the game.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  chat?: boolean;
                  game_id: number;
              }
              • Optional chat?: boolean

                If true, the client will receive the game chat log and new chat events

              • game_id: number

                The game id to connect to

                -

            Returns void

        game/delayed_resign: ((data) => void)

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/disconnect: ((data) => void)

        Disconnect from a game. This will stop game updates for a particular game.

        -

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

            Returns void

        game/latency: ((data) => void)

        Update your latency information for a particular game. This is used +

        Returns void

        game/delayed_resign: ((data) => void)

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                +

            Returns void

        game/disconnect: ((data) => void)

        Disconnect from a game. This will stop game updates for a particular game.

        +

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

            Returns void

        game/latency: ((data) => void)

        Update your latency information for a particular game. This is used for clock synchronization. It is not strictly required, however strongly suggested for live games.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
                  latency: number;
              }
              • game_id: number

                The game id

              • latency: number

                Network latency, measured in milliseconds. See net/ping to measure this.

                -

            Returns void

        game/log: ((data) => {
            data: any;
            event: string;
            timestamp: string;
        }[])

        Returns an event log for the given game. This is primarily +

        Returns void

        game/log: ((data) => {
            data: any;
            event: string;
            timestamp: string;
        }[])

        Returns an event log for the given game. This is primarily for moderation purposes, although the endpoint is generally available to all users.

        -

        Type declaration

          • (data): {
                data: any;
                event: string;
                timestamp: string;
            }[]
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

            Returns {
                data: any;
                event: string;
                timestamp: string;
            }[]

        game/move: ((data) => void)

        Submit a move for a game

        +

        Type declaration

          • (data): {
                data: any;
                event: string;
                timestamp: string;
            }[]
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

            Returns {
                data: any;
                event: string;
                timestamp: string;
            }[]

        game/move: ((data) => void)

        Submit a move for a game

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  blur?: number;
                  clock?: JGOFPlayerClock;
                  game_id: number;
                  move: string;
              }
              • Optional blur?: number

                Maximum number of milliseconds the client was out of focus between the last move and this move

              • Optional clock?: JGOFPlayerClock

                Clock according to the client. If this is within the margin of @@ -168,18 +168,18 @@ clock value. If not provided, the server clock will be used.

              • game_id: number

                The game id

              • move: string

                The move number to play at

                -

            Returns void

        game/pause: ((data) => void)

        Pauses the game clocks

        +

        Returns void

        game/pause: ((data) => void)

        Pauses the game clocks

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/prevent_escaping: ((data) => void)

        Request the server end a game that someone has left without resigning +

        Returns void

        game/prevent_escaping: ((data) => void)

        Request the server end a game that someone has left without resigning from

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  annul: boolean;
                  game_id: number;
                  winner: "black" | "white";
              }
              • annul: boolean

                Request that the game be annulled or not

              • game_id: number

                The game id

              • winner: "black" | "white"

                The proposed winner

                -

            Returns void

        game/prevent_stalling: ((data) => void)

        Request the server end a game that is being stalled by one of the +

        Returns void

        game/prevent_stalling: ((data) => void)

        Request the server end a game that is being stalled by one of the players. This will only work if the server agrees in the outcome.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
                  winner: "black" | "white";
              }
              • game_id: number

                The game id

              • winner: "black" | "white"

                The proposed winner

                -

            Returns void

        game/removed_stones/accept: ((data) => void)

        Accepts the stones as removed. Once both players have accepted the same +

        Returns void

        game/removed_stones/accept: ((data) => void)

        Accepts the stones as removed. Once both players have accepted the same stones, the stone removal phase will conclude and the game will finish.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
                  stones: string;
                  strict_seki_mode: boolean;
              }
              • game_id: number

                The game id

              • stones: string

                All of the stones that are accepted as removed, and all @@ -190,9 +190,9 @@ era of the game, the official client no longer displays this as an option to the user as it was very largely unused and was a large source of confusion.

                -

            Returns void

        game/removed_stones/reject: ((data) => void)

        Rejects the removed stones and resumes the game from the stone removal phase

        +

        Returns void

        game/removed_stones/reject: ((data) => void)

        Rejects the removed stones and resumes the game from the stone removal phase

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/removed_stones/set: ((data) => void)

        Sets removed stones in the stone removal phase.

        +

        Returns void

        game/removed_stones/set: ((data) => void)

        Sets removed stones in the stone removal phase.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
                  needs_sealing?: JGOFSealingIntersection[];
                  removed: boolean;
                  stones: string | JGOFMove[];
                  strict_seki_mode?: boolean;
              }
              • game_id: number

                The game id

              • Optional needs_sealing?: JGOFSealingIntersection[]

                List of intersections that need to be sealed before the game can be correctly scored. Note, if this is undefined, the value will not @@ -208,47 +208,47 @@ option to the user as it was very largely unused and was a large source of confusion. This field is deprecated and will likely be removed in the future.

                -

            Returns void

        game/resign: ((data) => void)

        Resigns from the game

        +

        Returns void

        game/resign: ((data) => void)

        Resigns from the game

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/resume: ((data) => void)

        Resumes the game clocks

        +

        Returns void

        game/resume: ((data) => void)

        Resumes the game clocks

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/timed_out: ((data) => void)

        Inform the server that the client believes it's clock has timed out +

        Returns void

        game/timed_out: ((data) => void)

        Inform the server that the client believes it's clock has timed out and the game should be ended in a timeout. This is not strictly necessary to implement as the server will also timeout games, however there is a grace period to account for network latency, so well behaved clients can (and should) send this message to be very exact with timeouts.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
              }
              • game_id: number

                The game id

                -

            Returns void

        game/undo/accept: ((data) => void)

        Accepts an undo

        +

        Returns void

        game/undo/accept: ((data) => void)

        Accepts an undo

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
                  move_number: number;
              }
              • game_id: number

                The game id

              • move_number: number

                The current move number

                -

            Returns void

        game/undo/cancel: ((data) => void)

        Cancels an undo request

        +

        Returns void

        game/undo/cancel: ((data) => void)

        Cancels an undo request

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
                  move_number: number;
              }
              • game_id: number

                The game id

              • move_number: number

                The current move number

                -

            Returns void

        game/undo/request: ((data) => void)

        Requests an undo

        +

        Returns void

        game/undo/request: ((data) => void)

        Requests an undo

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  game_id: number;
                  move_number: number;
              }
              • game_id: number

                The game id

              • move_number: number

                The current move number

                -

            Returns void

        gamelist/count/subscribe: ((data) => void)

        Connects to the game list count. +

        Returns void

        gamelist/count/subscribe: ((data) => void)

        Connects to the game list count. Once connected you'll start receiving gamelist-count or gamelist-count-${channel} messages.

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel?: string;
              }
              • Optional channel?: string

                The group or tournament channel to subscribe to. If no channel is provided, the global server counts will be sent

                -

            Returns void

        gamelist/count/unsubscribe: ((data) => void)

        Disconnects from the game list count

        +

        Returns void

        gamelist/count/unsubscribe: ((data) => void)

        Disconnects from the game list count

        Type declaration

          • (data): void
          • Parameters

            • data: {
                  channel?: string;
              }
              • Optional channel?: string

                The group or tournament channel to unsubscribe from. If no channel is provided, the global server counts will be unsubscribed from

                -

            Returns void

        gamelist/query: ((data) => undefined | {
            by: string;
            from: number;
            limit: number;
            list: string;
            results: GameListEntry[];
            size: number;
            where: GameListWhere;
        })

        Queries the server for a list of games

        +

        Returns void

        gamelist/query: ((data) => undefined | {
            by: string;
            from: number;
            limit: number;
            list: string;
            results: GameListEntry[];
            size: number;
            where: GameListWhere;
        })

        Queries the server for a list of games

        Type declaration

          • (data): undefined | {
                by: string;
                from: number;
                limit: number;
                list: string;
                results: GameListEntry[];
                size: number;
                where: GameListWhere;
            }
          • Parameters

            • data: {
                  channel?: string;
                  from: number;
                  limit: number;
                  list: "live" | "corr" | "kidsgo";
                  sort_by: "rank";
                  where: GameListWhere;
              }
              • Optional channel?: string

                The group or tournament channel to query

              • from: number

                The number of games to skip before returning results

              • limit: number

                Number of games to return, between 1 and 300

              • list: "live" | "corr" | "kidsgo"
              • sort_by: "rank"
              • where: GameListWhere

                Filtering options

                -

            Returns undefined | {
                by: string;
                from: number;
                limit: number;
                list: string;
                results: GameListEntry[];
                size: number;
                where: GameListWhere;
            }

        hostinfo: ((data) => {
            clients: number;
            ggs-version: string;
            hostname: string;
            uptime: number;
        })

        Retrieve host information for the termination server you are connected to

        -

        Type declaration

          • (data): {
                clients: number;
                ggs-version: string;
                hostname: string;
                uptime: number;
            }
          • Parameters

            • data: {}

              Returns {
                  clients: number;
                  ggs-version: string;
                  hostname: string;
                  uptime: number;
              }

              • clients: number
              • ggs-version: string
              • hostname: string
              • uptime: number
          itc: ((data) => void)

          Sends an "Inter Tab Communication" message to all other connected +

          Returns undefined | {
              by: string;
              from: number;
              limit: number;
              list: string;
              results: GameListEntry[];
              size: number;
              where: GameListWhere;
          }

          hostinfo: ((data) => {
              clients: number;
              ggs-version: string;
              hostname: string;
              uptime: number;
          })

          Retrieve host information for the termination server you are connected to

          +

          Type declaration

            • (data): {
                  clients: number;
                  ggs-version: string;
                  hostname: string;
                  uptime: number;
              }
            • Parameters

              • data: {}

                Returns {
                    clients: number;
                    ggs-version: string;
                    hostname: string;
                    uptime: number;
                }

                • clients: number
                • ggs-version: string
                • hostname: string
                • uptime: number
            itc: ((data) => void)

            Sends an "Inter Tab Communication" message to all other connected clients for the current user. This includes other devices, so the "Tab" part is a bit of a misnomer.

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      data: any;
                      event: string;
                  }
                  • data: any

                    User defined data

                  • event: string

                    User defined event string

                    -

                Returns void

            net/ping: ((data) => void)

            Sends a ping to the server. This message should be +

            Returns void

            net/ping: ((data) => void)

            Sends a ping to the server. This message should be sent regularly. The default interval is 10 seconds. This keeps the connection alive and allows a client to measure clock drift and latency, both of which @@ -256,37 +256,37 @@

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      client: number;
                      drift: number;
                      latency: number;
                  }
                  • client: number

                    Client timestamp - milliseconds since epoch

                  • drift: number

                    Last clock drift measurement, or 0

                  • latency: number

                    Last latency measurement, or 0

                    -

                Returns void

            notification/delete: ((data) => void)

            Deletes a notification

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      notification_id: string;
                  }
                  • notification_id: string

                Returns void

            remote_storage/remove: ((data) => {
                error?: string;
                retry?: boolean;
            } | {
                success: true;
            })

            Remove the given key from remote storage system for this user

            +

            Returns void

            notification/delete: ((data) => void)

            Deletes a notification

            +

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      notification_id: string;
                  }
                  • notification_id: string

                Returns void

            remote_storage/remove: ((data) => {
                error?: string;
                retry?: boolean;
            } | {
                success: true;
            })

            Remove the given key from remote storage system for this user

            For more details on the remote storage replication system see: https://github.com/online-go/online-go.com/blob/devel/src/lib/data.ts

            -

            Type declaration

              • (data): {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }
              • Parameters

                Returns {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }

            remote_storage/set: ((data) => {
                error?: string;
                retry?: boolean;
            } | {
                success: true;
            })

            Set the given key in the remote storage system for this user

            +

            Type declaration

              • (data): {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }
              • Parameters

                Returns {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }

            remote_storage/set: ((data) => {
                error?: string;
                retry?: boolean;
            } | {
                success: true;
            })

            Set the given key in the remote storage system for this user

            For more details on the remote storage replication system see: https://github.com/online-go/online-go.com/blob/devel/src/lib/data.ts

            -

            Type declaration

              • (data): {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }
              • Parameters

                Returns {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }

            remote_storage/sync: ((data) => {
                error?: string;
                retry?: boolean;
            } | {
                success: true;
            })

            Requests all updated key/value pairs for this user since the +

            Type declaration

              • (data): {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }
              • Parameters

                Returns {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }

            remote_storage/sync: ((data) => {
                error?: string;
                retry?: boolean;
            } | {
                success: true;
            })

            Requests all updated key/value pairs for this user since the provided timestamp (as as ISO 8601 string).

            For more details on the remote storage replication system see: https://github.com/online-go/online-go.com/blob/devel/src/lib/data.ts

            Type declaration

              • (data): {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }
              • Parameters

                • data: {
                      since: string;
                  }
                  • since: string

                    ISO 8601 timestamp. Updates made after this timestamp will be sent to the client.

                    -

                Returns {
                    error?: string;
                    retry?: boolean;
                } | {
                    success: true;
                }

            review/append: ((data) => void)

            Append a review action to the review log.

            -

            Type declaration

            review/chat: ((data) => void)

            Sends a chat message to a review

            +

            Returns {
                error?: string;
                retry?: boolean;
            } | {
                success: true;
            }

            review/append: ((data) => void)

            Append a review action to the review log.

            +

            Type declaration

            review/chat: ((data) => void)

            Sends a chat message to a review

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      body: string;
                      from: number;
                      moves: string;
                      review_id: number;
                  }
                  • body: string

                    The chat message

                  • from: number

                    The root of the branch the user is viewing

                  • moves: string

                    The analysis branch the user is viewing

                  • review_id: number

                    The review id

                    -

                Returns void

            review/chat/remove: ((data) => void)

            Moderator only command to remove a single chat message from a game

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: string;
                      chat_id: string;
                      review_id: number;
                  }
                  • channel: string
                  • chat_id: string
                  • review_id: number

                Returns void

            review/connect: ((data) => void)

            Connects to a review

            +

            Returns void

            review/chat/remove: ((data) => void)

            Moderator only command to remove a single chat message from a game

            +

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: string;
                      chat_id: string;
                      review_id: number;
                  }
                  • channel: string
                  • chat_id: string
                  • review_id: number

                Returns void

            review/connect: ((data) => void)

            Connects to a review

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      review_id: number;
                  }
                  • review_id: number

                    The review id

                    -

                Returns void

            review/disconnect: ((data) => void)

            Disconnects from a review

            +

            Returns void

            review/disconnect: ((data) => void)

            Disconnects from a review

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      review_id: number;
                  }
                  • review_id: number

                    The review id

                    -

                Returns void

            seek_graph/connect: ((data) => void)

            Subscribes to the seek graph events. The channel is required to be "global" +

            Returns void

            seek_graph/connect: ((data) => void)

            Subscribes to the seek graph events. The channel is required to be "global" for now and the foreseeable future.

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: "global";
                  }
                  • channel: "global"

                Returns void

            seek_graph/disconnect: ((data) => void)

            Un-Subscribes to the seek graph events. The channel is required to be "global" +

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: "global";
                  }
                  • channel: "global"

                Returns void

            seek_graph/disconnect: ((data) => void)

            Un-Subscribes to the seek graph events. The channel is required to be "global" for now and the foreseeable future.

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: "global";
                  }
                  • channel: "global"

                Returns void

            stats/online: ((data) => number)

            Request the number of unique authenticated players +

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: "global";
                  }
                  • channel: "global"

                Returns void

            stats/online: ((data) => number)

            Request the number of unique authenticated players online within the given interval

            Type declaration

              • (data): number
              • Parameters

                • data: {
                      interval: number;
                  }
                  • interval: number

                    Interval in seconds

                    -

                Returns number

            ui-pushes/subscribe: ((data) => void)

            Subscribes to UI related push event messages sent to a particular channel

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: string;
                  }
                  • channel: string

                Returns void

            ui-pushes/unsubscribe: ((data) => void)

            Un-Subscribes to UI related push event messages sent to a particular channel

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: string;
                  }
                  • channel: string

                Returns void

            user/monitor: ((data) => void)

            Subscribes to online status updates for the given player ids

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      user_ids: number[];
                  }
                  • user_ids: number[]

                Returns void

            \ No newline at end of file +

            Returns number

            ui-pushes/subscribe: ((data) => void)

            Subscribes to UI related push event messages sent to a particular channel

            +

            Type declaration

            ui-pushes/unsubscribe: ((data) => void)

            Un-Subscribes to UI related push event messages sent to a particular channel

            +

            Type declaration

            user/monitor: ((data) => void)

            Subscribes to online status updates for the given player ids

            +

            Type declaration

            \ No newline at end of file diff --git a/docs/interfaces/protocol.ClientToServerBase.html b/docs/interfaces/protocol.ClientToServerBase.html index 622788d6..187b54ef 100644 --- a/docs/interfaces/protocol.ClientToServerBase.html +++ b/docs/interfaces/protocol.ClientToServerBase.html @@ -1,5 +1,5 @@ ClientToServerBase | goban

            Interface ClientToServerBase

            Messages that clients send, regardless of target server

            -
            interface ClientToServerBase {
                authenticate: ((data) => undefined | {
                    id: number;
                    username: string;
                });
                net/ping: ((data) => void);
            }

            Hierarchy (view full)

            Properties

            interface ClientToServerBase {
                authenticate: ((data) => undefined | {
                    id: number;
                    username: string;
                });
                net/ping: ((data) => void);
            }

            Hierarchy (view full)

            Properties

            authenticate: ((data) => undefined | {
                id: number;
                username: string;
            })

            Authenticate with the server.

            Prior to authentication, you should perform a GET request to @@ -16,7 +16,7 @@

          • Optional language?: string

            ISO 639-1 language code used on this device.

          • Optional language_version?: string

            The version of the translation dictionary.

          • Optional user_agent?: string

            Browser user agent (or websocket library)

            -
          • Returns undefined | {
                id: number;
                username: string;
            }

            net/ping: ((data) => void)

            Sends a ping to the server. This message should be +

            Returns undefined | {
                id: number;
                username: string;
            }

            net/ping: ((data) => void)

            Sends a ping to the server. This message should be sent regularly. The default interval is 10 seconds. This keeps the connection alive and allows a client to measure clock drift and latency, both of which @@ -24,4 +24,4 @@

            Type declaration

            \ No newline at end of file +

            Returns void

            \ No newline at end of file diff --git a/docs/interfaces/protocol.GameChatAnalysisMessage.html b/docs/interfaces/protocol.GameChatAnalysisMessage.html index aaa11317..9f84489e 100644 --- a/docs/interfaces/protocol.GameChatAnalysisMessage.html +++ b/docs/interfaces/protocol.GameChatAnalysisMessage.html @@ -1,4 +1,4 @@ -GameChatAnalysisMessage | goban

            Interface GameChatAnalysisMessage

            interface GameChatAnalysisMessage {
                branch_move?: number;
                engine_analysis?: {
                    score?: number;
                    visits?: number;
                    win_rate: number;
                    [key: string]: number | undefined;
                };
                from?: number;
                marks?: {
                    [mark: string]: string;
                };
                moves?: string;
                name?: string;
                pen_marks?: unknown[];
                type: "analysis";
            }

            Properties

            branch_move? +GameChatAnalysisMessage | goban

            Interface GameChatAnalysisMessage

            interface GameChatAnalysisMessage {
                branch_move?: number;
                engine_analysis?: {
                    score?: number;
                    visits?: number;
                    win_rate: number;
                    [key: string]: number | undefined;
                };
                from?: number;
                marks?: {
                    [mark: string]: string;
                };
                moves?: string;
                name?: string;
                pen_marks?: unknown[];
                type: "analysis";
            }

            Properties

            branch_move?: number
            engine_analysis?: {
                score?: number;
                visits?: number;
                win_rate: number;
                [key: string]: number | undefined;
            }

            Type declaration

            • [key: string]: number | undefined
            • Optional score?: number
            • Optional visits?: number
            • win_rate: number
            from?: number
            marks?: {
                [mark: string]: string;
            }

            Type declaration

            • [mark: string]: string
            moves?: string
            name?: string
            pen_marks?: unknown[]
            type: "analysis"
            \ No newline at end of file +

            Properties

            branch_move?: number
            engine_analysis?: {
                score?: number;
                visits?: number;
                win_rate: number;
                [key: string]: number | undefined;
            }

            Type declaration

            • [key: string]: number | undefined
            • Optional score?: number
            • Optional visits?: number
            • win_rate: number
            from?: number
            marks?: {
                [mark: string]: string;
            }

            Type declaration

            • [mark: string]: string
            moves?: string
            name?: string
            pen_marks?: unknown[]
            type: "analysis"
            \ No newline at end of file diff --git a/docs/interfaces/protocol.GameChatLine.html b/docs/interfaces/protocol.GameChatLine.html index 2efc3305..441f5196 100644 --- a/docs/interfaces/protocol.GameChatLine.html +++ b/docs/interfaces/protocol.GameChatLine.html @@ -1,4 +1,4 @@ -GameChatLine | goban

            Interface GameChatLine

            interface GameChatLine {
                body: string | AnalysisComment | ReviewComment;
                channel: string;
                chat_id: string;
                date: number;
                from?: number;
                move_number: number;
                moves?: string;
                player_id: number;
                username?: string;
            }

            Properties

            body +GameChatLine | goban

            Interface GameChatLine

            interface GameChatLine {
                body: string | AnalysisComment | ReviewComment;
                channel: string;
                chat_id: string;
                date: number;
                from?: number;
                move_number: number;
                moves?: string;
                player_id: number;
                username?: string;
            }

            Properties

            Properties

            channel: string
            chat_id: string
            date: number
            from?: number
            move_number: number
            moves?: string
            player_id: number
            username?: string
            \ No newline at end of file +

            Properties

            channel: string
            chat_id: string
            date: number
            from?: number
            move_number: number
            moves?: string
            player_id: number
            username?: string
            \ No newline at end of file diff --git a/docs/interfaces/protocol.GameChatMessage.html b/docs/interfaces/protocol.GameChatMessage.html index 8bbee1ee..33f5ae4e 100644 --- a/docs/interfaces/protocol.GameChatMessage.html +++ b/docs/interfaces/protocol.GameChatMessage.html @@ -1,3 +1,3 @@ -GameChatMessage | goban

            Interface GameChatMessage

            interface GameChatMessage {
                channel: "main" | "malkovich" | "hidden" | "personal" | "spectator" | "shadowban";
                line: GameChatLine;
            }

            Properties

            channel +GameChatMessage | goban

            Interface GameChatMessage

            interface GameChatMessage {
                channel: "main" | "malkovich" | "hidden" | "personal" | "spectator" | "shadowban";
                line: GameChatLine;
            }

            Properties

            Properties

            channel: "main" | "malkovich" | "hidden" | "personal" | "spectator" | "shadowban"
            \ No newline at end of file +

            Properties

            channel: "main" | "malkovich" | "hidden" | "personal" | "spectator" | "shadowban"
            \ No newline at end of file diff --git a/docs/interfaces/protocol.GameChatReviewMessage.html b/docs/interfaces/protocol.GameChatReviewMessage.html index d86661cf..978dd5f4 100644 --- a/docs/interfaces/protocol.GameChatReviewMessage.html +++ b/docs/interfaces/protocol.GameChatReviewMessage.html @@ -1,3 +1,3 @@ -GameChatReviewMessage | goban

            Interface GameChatReviewMessage

            interface GameChatReviewMessage {
                review_id: number;
                type: "review";
            }

            Properties

            review_id +GameChatReviewMessage | goban

            Interface GameChatReviewMessage

            interface GameChatReviewMessage {
                review_id: number;
                type: "review";
            }

            Properties

            Properties

            review_id: number
            type: "review"
            \ No newline at end of file +

            Properties

            review_id: number
            type: "review"
            \ No newline at end of file diff --git a/docs/interfaces/protocol.GameChatTranslatedMessage.html b/docs/interfaces/protocol.GameChatTranslatedMessage.html index af3c6903..cc0f5ffc 100644 --- a/docs/interfaces/protocol.GameChatTranslatedMessage.html +++ b/docs/interfaces/protocol.GameChatTranslatedMessage.html @@ -1,3 +1,3 @@ -GameChatTranslatedMessage | goban

            Interface GameChatTranslatedMessage

            interface GameChatTranslatedMessage {
                en: string;
                type: "translated";
                [lang: string]: string;
            }

            Indexable

            [lang: string]: string

            Properties

            en +GameChatTranslatedMessage | goban

            Interface GameChatTranslatedMessage

            interface GameChatTranslatedMessage {
                en: string;
                type: "translated";
                [lang: string]: string;
            }

            Indexable

            [lang: string]: string

            Properties

            Properties

            en: string
            type: "translated"
            \ No newline at end of file +

            Properties

            en: string
            type: "translated"
            \ No newline at end of file diff --git a/docs/interfaces/protocol.GameClock.html b/docs/interfaces/protocol.GameClock.html index abe70e0e..803abe8f 100644 --- a/docs/interfaces/protocol.GameClock.html +++ b/docs/interfaces/protocol.GameClock.html @@ -1,4 +1,4 @@ -GameClock | goban

            Interface GameClock

            interface GameClock {
                black_player_id: number;
                black_time?: ClockTime;
                current_player: number;
                expiration: number;
                expiration_delta?: number;
                game_id: number;
                last_move: number;
                now?: number;
                pause?: {
                    pause_control?: {
                        [key: string]: boolean;
                    };
                    paused?: boolean;
                    paused_since?: number;
                };
                pause_delta?: number;
                paused_since?: number;
                start_mode?: boolean;
                stone_removal_expiration?: number;
                stone_removal_mode?: boolean;
                title: string;
                white_player_id: number;
                white_time?: ClockTime;
            }

            Properties

            black_player_id +GameClock | goban

            Interface GameClock

            interface GameClock {
                black_player_id: number;
                black_time?: ClockTime;
                current_player: number;
                expiration: number;
                expiration_delta?: number;
                game_id: number;
                last_move: number;
                now?: number;
                pause?: {
                    pause_control?: {
                        [key: string]: boolean;
                    };
                    paused?: boolean;
                    paused_since?: number;
                };
                pause_delta?: number;
                paused_since?: number;
                start_mode?: boolean;
                stone_removal_expiration?: number;
                stone_removal_mode?: boolean;
                title: string;
                white_player_id: number;
                white_time?: ClockTime;
            }

            Properties

            black_player_id: number
            black_time?: ClockTime
            current_player: number
            expiration: number
            expiration_delta?: number
            game_id: number
            last_move: number
            now?: number
            pause?: {
                pause_control?: {
                    [key: string]: boolean;
                };
                paused?: boolean;
                paused_since?: number;
            }

            Type declaration

            • Optional pause_control?: {
                  [key: string]: boolean;
              }
              • [key: string]: boolean
            • Optional paused?: boolean
            • Optional paused_since?: number
            pause_delta?: number
            paused_since?: number
            start_mode?: boolean
            stone_removal_expiration?: number
            stone_removal_mode?: boolean
            title: string
            white_player_id: number
            white_time?: ClockTime
            \ No newline at end of file +

            Properties

            black_player_id: number
            black_time?: ClockTime
            current_player: number
            expiration: number
            expiration_delta?: number
            game_id: number
            last_move: number
            now?: number
            pause?: {
                pause_control?: {
                    [key: string]: boolean;
                };
                paused?: boolean;
                paused_since?: number;
            }

            Type declaration

            • Optional pause_control?: {
                  [key: string]: boolean;
              }
              • [key: string]: boolean
            • Optional paused?: boolean
            • Optional paused_since?: number
            pause_delta?: number
            paused_since?: number
            start_mode?: boolean
            stone_removal_expiration?: number
            stone_removal_mode?: boolean
            title: string
            white_player_id: number
            white_time?: ClockTime
            \ No newline at end of file diff --git a/docs/interfaces/protocol.GameListEntry.html b/docs/interfaces/protocol.GameListEntry.html index b66b52a2..b45f1117 100644 --- a/docs/interfaces/protocol.GameListEntry.html +++ b/docs/interfaces/protocol.GameListEntry.html @@ -1,4 +1,4 @@ -GameListEntry | goban

            Interface GameListEntry

            interface GameListEntry {
                _participants?: number[];
                black: GameListPlayer;
                bot_game?: boolean;
                clock_expiration: number;
                dropped_player: number;
                group_ids?: number[];
                group_ids_map?: {
                    [id: string]: boolean;
                };
                handicap?: number;
                height: number;
                id: number;
                in_beginning?: boolean;
                in_end?: boolean;
                in_middle?: boolean;
                kidsgo_game?: boolean;
                komi?: number;
                ladder_id?: number;
                malkovich_present?: boolean;
                move_number: number;
                name: string;
                paused: boolean;
                phase: string;
                player_to_move: number;
                private: boolean;
                ranked?: boolean;
                rengo: boolean;
                rengo_casual_mode: boolean;
                rengo_teams: {
                    black: User[];
                    white: User[];
                };
                socket_id?: any;
                time_per_move: number;
                tournament_id?: number;
                white: GameListPlayer;
                width: number;
            }

            Properties

            _participants? +GameListEntry | goban

            Interface GameListEntry

            interface GameListEntry {
                _participants?: number[];
                black: GameListPlayer;
                bot_game?: boolean;
                clock_expiration: number;
                dropped_player: number;
                group_ids?: number[];
                group_ids_map?: {
                    [id: string]: boolean;
                };
                handicap?: number;
                height: number;
                id: number;
                in_beginning?: boolean;
                in_end?: boolean;
                in_middle?: boolean;
                kidsgo_game?: boolean;
                komi?: number;
                ladder_id?: number;
                malkovich_present?: boolean;
                move_number: number;
                name: string;
                paused: boolean;
                phase: string;
                player_to_move: number;
                private: boolean;
                ranked?: boolean;
                rengo: boolean;
                rengo_casual_mode: boolean;
                rengo_teams: {
                    black: User[];
                    white: User[];
                };
                socket_id?: any;
                time_per_move: number;
                tournament_id?: number;
                white: GameListPlayer;
                width: number;
            }

            Properties

            _participants?: number[]
            bot_game?: boolean
            clock_expiration: number
            dropped_player: number
            group_ids?: number[]
            group_ids_map?: {
                [id: string]: boolean;
            }

            Type declaration

            • [id: string]: boolean
            handicap?: number
            height: number
            id: number
            in_beginning?: boolean
            in_end?: boolean
            in_middle?: boolean
            kidsgo_game?: boolean
            komi?: number
            ladder_id?: number
            malkovich_present?: boolean
            move_number: number
            name: string
            paused: boolean
            phase: string
            player_to_move: number
            private: boolean
            ranked?: boolean
            rengo: boolean
            rengo_casual_mode: boolean
            rengo_teams: {
                black: User[];
                white: User[];
            }

            Type declaration

            socket_id?: any
            time_per_move: number
            tournament_id?: number
            width: number
            \ No newline at end of file +

            Properties

            _participants?: number[]
            bot_game?: boolean
            clock_expiration: number
            dropped_player: number
            group_ids?: number[]
            group_ids_map?: {
                [id: string]: boolean;
            }

            Type declaration

            • [id: string]: boolean
            handicap?: number
            height: number
            id: number
            in_beginning?: boolean
            in_end?: boolean
            in_middle?: boolean
            kidsgo_game?: boolean
            komi?: number
            ladder_id?: number
            malkovich_present?: boolean
            move_number: number
            name: string
            paused: boolean
            phase: string
            player_to_move: number
            private: boolean
            ranked?: boolean
            rengo: boolean
            rengo_casual_mode: boolean
            rengo_teams: {
                black: User[];
                white: User[];
            }

            Type declaration

            socket_id?: any
            time_per_move: number
            tournament_id?: number
            width: number
            \ No newline at end of file diff --git a/docs/interfaces/protocol.GameListWhere.html b/docs/interfaces/protocol.GameListWhere.html index 16fa26df..b539f6d2 100644 --- a/docs/interfaces/protocol.GameListWhere.html +++ b/docs/interfaces/protocol.GameListWhere.html @@ -1,5 +1,5 @@ GameListWhere | goban

            Interface GameListWhere

            Parameters for the gamelist/query message

            -
            interface GameListWhere {
                hide_13x13?: boolean;
                hide_19x19?: boolean;
                hide_9x9?: boolean;
                hide_beginning?: boolean;
                hide_bot_games?: boolean;
                hide_end?: boolean;
                hide_even?: boolean;
                hide_handicap?: boolean;
                hide_ladder?: boolean;
                hide_middle?: boolean;
                hide_open?: boolean;
                hide_other?: boolean;
                hide_ranked?: boolean;
                hide_tournament?: boolean;
                hide_unranked?: boolean;
                ladder_id?: number;
                malk_only?: boolean;
                players?: number[];
                rengo_only?: boolean;
                tournament_id?: number;
            }

            Properties

            interface GameListWhere {
                hide_13x13?: boolean;
                hide_19x19?: boolean;
                hide_9x9?: boolean;
                hide_beginning?: boolean;
                hide_bot_games?: boolean;
                hide_end?: boolean;
                hide_even?: boolean;
                hide_handicap?: boolean;
                hide_ladder?: boolean;
                hide_middle?: boolean;
                hide_open?: boolean;
                hide_other?: boolean;
                hide_ranked?: boolean;
                hide_tournament?: boolean;
                hide_unranked?: boolean;
                ladder_id?: number;
                malk_only?: boolean;
                players?: number[];
                rengo_only?: boolean;
                tournament_id?: number;
            }

            Properties

            hide_13x13?: boolean
            hide_19x19?: boolean
            hide_9x9?: boolean
            hide_beginning?: boolean
            hide_bot_games?: boolean
            hide_end?: boolean
            hide_even?: boolean
            hide_handicap?: boolean
            hide_ladder?: boolean
            hide_middle?: boolean
            hide_open?: boolean
            hide_other?: boolean
            hide_ranked?: boolean
            hide_tournament?: boolean
            hide_unranked?: boolean
            ladder_id?: number
            malk_only?: boolean
            players?: number[]
            rengo_only?: boolean
            tournament_id?: number
            \ No newline at end of file +

            Properties

            hide_13x13?: boolean
            hide_19x19?: boolean
            hide_9x9?: boolean
            hide_beginning?: boolean
            hide_bot_games?: boolean
            hide_end?: boolean
            hide_even?: boolean
            hide_handicap?: boolean
            hide_ladder?: boolean
            hide_middle?: boolean
            hide_open?: boolean
            hide_other?: boolean
            hide_ranked?: boolean
            hide_tournament?: boolean
            hide_unranked?: boolean
            ladder_id?: number
            malk_only?: boolean
            players?: number[]
            rengo_only?: boolean
            tournament_id?: number
            \ No newline at end of file diff --git a/docs/interfaces/protocol.Glicko2.html b/docs/interfaces/protocol.Glicko2.html index 95a0d919..1891659e 100644 --- a/docs/interfaces/protocol.Glicko2.html +++ b/docs/interfaces/protocol.Glicko2.html @@ -1,5 +1,5 @@ -Glicko2 | goban

            Interface Glicko2

            interface Glicko2 {
                deviation: number;
                games_played?: number;
                rating: number;
                volatility: number;
            }

            Properties

            deviation +Glicko2 | goban

            Interface Glicko2

            interface Glicko2 {
                deviation: number;
                games_played?: number;
                rating: number;
                volatility: number;
            }

            Properties

            deviation: number
            games_played?: number
            rating: number
            volatility: number
            \ No newline at end of file +

            Properties

            deviation: number
            games_played?: number
            rating: number
            volatility: number
            \ No newline at end of file diff --git a/docs/interfaces/protocol.SeekgraphChallengeMessage.html b/docs/interfaces/protocol.SeekgraphChallengeMessage.html index a5c7a72a..f92d63f9 100644 --- a/docs/interfaces/protocol.SeekgraphChallengeMessage.html +++ b/docs/interfaces/protocol.SeekgraphChallengeMessage.html @@ -1,4 +1,4 @@ -SeekgraphChallengeMessage | goban

            Interface SeekgraphChallengeMessage

            interface SeekgraphChallengeMessage {
                challenge_id: number;
                challenger_color: "black" | "white" | "automatic";
                disable_analysis: boolean;
                game_id: number;
                handicap: null | number;
                height: number;
                invite_only: boolean;
                komi: null | number;
                max_rank: number;
                min_rank: number;
                name: string;
                professional: boolean;
                ranked: boolean;
                ranking: number;
                rengo: boolean;
                rengo_auto_start: boolean;
                rengo_black_team: number[];
                rengo_casual_mode: boolean;
                rengo_nominees: number[];
                rengo_participants: number[];
                rengo_white_team: number[];
                rules: string;
                time_control: string;
                time_control_parameters: JGOFTimeControl;
                time_per_move: number;
                user_id: number;
                username: string;
                uuid: string;
                width: number;
            }

            Properties

            challenge_id +SeekgraphChallengeMessage | goban

            Interface SeekgraphChallengeMessage

            interface SeekgraphChallengeMessage {
                challenge_id: number;
                challenger_color: "black" | "white" | "automatic";
                disable_analysis: boolean;
                game_id: number;
                handicap: null | number;
                height: number;
                invite_only: boolean;
                komi: null | number;
                max_rank: number;
                min_rank: number;
                name: string;
                professional: boolean;
                ranked: boolean;
                ranking: number;
                rengo: boolean;
                rengo_auto_start: boolean;
                rengo_black_team: number[];
                rengo_casual_mode: boolean;
                rengo_nominees: number[];
                rengo_participants: number[];
                rengo_white_team: number[];
                rules: string;
                time_control: string;
                time_control_parameters: JGOFTimeControl;
                time_per_move: number;
                user_id: number;
                username: string;
                uuid: string;
                width: number;
            }

            Properties

            challenge_id: number

            The ID of the challenge

            -
            challenger_color: "black" | "white" | "automatic"

            Color the accepting player will be

            -
            disable_analysis: boolean

            If analysis is disabled

            -
            game_id: number

            The game ID

            -
            handicap: null | number

            The game handicap

            -
            height: number

            Board height

            -
            invite_only: boolean

            If the game is only joinable by invitation

            -
            komi: null | number

            Komi

            -
            max_rank: number

            Maximum rank allowed to accept the game

            -
            min_rank: number

            Minimum rank allowed to accept the game

            -
            name: string

            Game name

            -
            professional: boolean

            If they are a professional player

            -
            ranked: boolean

            If the game is ranked

            -
            ranking: number

            Their ranking *

            -
            rengo: boolean

            If it's a rengo game

            -
            rengo_auto_start: boolean

            If the rengo game will automatically start

            -
            rengo_black_team: number[]

            Player ids of the players on the Black team

            -
            rengo_casual_mode: boolean

            If the game is a casual rengo game

            -
            rengo_nominees: number[]

            Player ids of people that have been nominated to play

            -
            rengo_participants: number[]

            All player ids involved in the game

            -
            rengo_white_team: number[]

            Player ids of the players on the White team

            -
            rules: string

            Rules being used

            -
            time_control: string

            Time control system type

            -
            time_control_parameters: JGOFTimeControl

            Time control parameters

            -
            time_per_move: number

            Average time per move

            -
            user_id: number

            User id of the player who is looking for a game

            -
            username: string

            Username of the player looking for the game

            -
            uuid: string

            A UUID for the invitation

            -
            width: number

            Board width

            -
            \ No newline at end of file +
            challenger_color: "black" | "white" | "automatic"

            Color the accepting player will be

            +
            disable_analysis: boolean

            If analysis is disabled

            +
            game_id: number

            The game ID

            +
            handicap: null | number

            The game handicap

            +
            height: number

            Board height

            +
            invite_only: boolean

            If the game is only joinable by invitation

            +
            komi: null | number

            Komi

            +
            max_rank: number

            Maximum rank allowed to accept the game

            +
            min_rank: number

            Minimum rank allowed to accept the game

            +
            name: string

            Game name

            +
            professional: boolean

            If they are a professional player

            +
            ranked: boolean

            If the game is ranked

            +
            ranking: number

            Their ranking *

            +
            rengo: boolean

            If it's a rengo game

            +
            rengo_auto_start: boolean

            If the rengo game will automatically start

            +
            rengo_black_team: number[]

            Player ids of the players on the Black team

            +
            rengo_casual_mode: boolean

            If the game is a casual rengo game

            +
            rengo_nominees: number[]

            Player ids of people that have been nominated to play

            +
            rengo_participants: number[]

            All player ids involved in the game

            +
            rengo_white_team: number[]

            Player ids of the players on the White team

            +
            rules: string

            Rules being used

            +
            time_control: string

            Time control system type

            +
            time_control_parameters: JGOFTimeControl

            Time control parameters

            +
            time_per_move: number

            Average time per move

            +
            user_id: number

            User id of the player who is looking for a game

            +
            username: string

            Username of the player looking for the game

            +
            uuid: string

            A UUID for the invitation

            +
            width: number

            Board width

            +
            \ No newline at end of file diff --git a/docs/interfaces/protocol.SeekgraphDeleteMessage.html b/docs/interfaces/protocol.SeekgraphDeleteMessage.html index b8368af6..147ac18c 100644 --- a/docs/interfaces/protocol.SeekgraphDeleteMessage.html +++ b/docs/interfaces/protocol.SeekgraphDeleteMessage.html @@ -1,5 +1,5 @@ -SeekgraphDeleteMessage | goban

            Interface SeekgraphDeleteMessage

            interface SeekgraphDeleteMessage {
                challenge_id: number;
                delete: true;
            }

            Properties

            challenge_id +SeekgraphDeleteMessage | goban

            Interface SeekgraphDeleteMessage

            interface SeekgraphDeleteMessage {
                challenge_id: number;
                delete: true;
            }

            Properties

            Properties

            challenge_id: number

            The ID of the challenge

            -
            delete: true

            The entry should be deleted if this field exists and is true

            -
            \ No newline at end of file +
            delete: true

            The entry should be deleted if this field exists and is true

            +
            \ No newline at end of file diff --git a/docs/interfaces/protocol.SeekgraphStartedMessage.html b/docs/interfaces/protocol.SeekgraphStartedMessage.html index eb3600e7..49b4996f 100644 --- a/docs/interfaces/protocol.SeekgraphStartedMessage.html +++ b/docs/interfaces/protocol.SeekgraphStartedMessage.html @@ -1,4 +1,4 @@ -SeekgraphStartedMessage | goban

            Interface SeekgraphStartedMessage

            interface SeekgraphStartedMessage {
                black: User;
                challenge_id: number;
                creator: number;
                game_id: number;
                game_started?: true;
                rengo?: true;
                rengo_auto_start?: boolean;
                rengo_black_team?: number[];
                rengo_casual_mode?: boolean;
                rengo_white_team?: number[];
                time_control: string;
                time_control_parameters: JGOFTimeControl;
                white: User;
            }

            Properties

            black +SeekgraphStartedMessage | goban

            Interface SeekgraphStartedMessage

            interface SeekgraphStartedMessage {
                black: User;
                challenge_id: number;
                creator: number;
                game_id: number;
                game_started?: true;
                rengo?: true;
                rengo_auto_start?: boolean;
                rengo_black_team?: number[];
                rengo_casual_mode?: boolean;
                rengo_white_team?: number[];
                time_control: string;
                time_control_parameters: JGOFTimeControl;
                white: User;
            }

            Properties

            black: User

            Black player

            -
            challenge_id: number

            The ID of the challenge

            -
            creator: number

            Player ID of the creator

            -
            game_id: number

            The game id

            -
            game_started?: true

            If exists and is true, the game has been started and the entry should be removed from the seek graph

            -
            rengo?: true

            Rengo game if true

            -
            rengo_auto_start?: boolean

            Whether the rengo game with automatically start

            -
            rengo_black_team?: number[]

            Player ids of the players on the Black team

            -
            rengo_casual_mode?: boolean

            Wether it's a Casual mode rengo game

            -
            rengo_white_team?: number[]

            Player ids of the players on the White team

            -
            time_control: string

            Time control system

            -
            time_control_parameters: JGOFTimeControl

            Time control parameters

            -
            white: User

            White player

            -
            \ No newline at end of file +
            challenge_id: number

            The ID of the challenge

            +
            creator: number

            Player ID of the creator

            +
            game_id: number

            The game id

            +
            game_started?: true

            If exists and is true, the game has been started and the entry should be removed from the seek graph

            +
            rengo?: true

            Rengo game if true

            +
            rengo_auto_start?: boolean

            Whether the rengo game with automatically start

            +
            rengo_black_team?: number[]

            Player ids of the players on the Black team

            +
            rengo_casual_mode?: boolean

            Wether it's a Casual mode rengo game

            +
            rengo_white_team?: number[]

            Player ids of the players on the White team

            +
            time_control: string

            Time control system

            +
            time_control_parameters: JGOFTimeControl

            Time control parameters

            +
            white: User

            White player

            +
            \ No newline at end of file diff --git a/docs/interfaces/protocol.ServerToClient.html b/docs/interfaces/protocol.ServerToClient.html index 635b8b19..2b031cb0 100644 --- a/docs/interfaces/protocol.ServerToClient.html +++ b/docs/interfaces/protocol.ServerToClient.html @@ -1,5 +1,5 @@ ServerToClient | goban

            Interface ServerToClient

            interface ServerToClient {
                ERROR: ((data) => void);
                HUP: (() => void);
                active-bots: ((data) => void);
                active_game: ((data) => void);
                automatch/cancel: ((data) => void);
                automatch/entry: ((data) => void);
                automatch/start: ((data) => void);
                chat-join: ((data) => void);
                chat-message: ((data) => void);
                chat-message-removed: ((data) => void);
                chat-part: ((data) => void);
                chat-topic: ((data) => void);
                chat-update-user: ((data) => void);
                game/:id/auto_resign: ((data) => void);
                game/:id/chat: ((data) => void);
                game/:id/chat/remove: ((data) => void);
                game/:id/clear_auto_resign: ((data) => void);
                game/:id/clock: ((data) => void);
                game/:id/conditional_moves: ((data) => void);
                game/:id/error: ((data) => void);
                game/:id/gamedata: ((data) => void);
                game/:id/latency: ((data) => void);
                game/:id/phase: ((data) => void);
                game/:id/removed_stones: ((data) => void);
                game/:id/removed_stones_accepted: ((data) => void);
                game/:id/reset-chats: (() => void);
                game/:id/stalling_score_estimate: ((data?) => void);
                game/:id/undo_accepted: ((data) => void);
                game/:id/undo_canceled: ((data) => void);
                game/:id/undo_requested: ((data) => void);
                gamelist-count: ((data) => void);
                gamelist-count-:channel: ((data) => void);
                hostinfo: ((data) => void);
                incident-report: ((data) => void);
                itc: ((data) => void);
                net/pong: ((data) => void);
                notification: ((data) => void);
                private-message: ((data) => void);
                private-superchat: ((data) => void);
                remote_storage/sync_complete: (() => void);
                remote_storage/update: ((data) => void);
                review/:id/full_state: ((data) => void);
                review/:id/r: ((data) => void);
                score-estimator-enabled-state: ((data) => void);
                seekgraph/global: ((messages) => void);
                ui-push: ((data) => void);
                user/jwt: ((jwt) => void);
                user/state: ((data) => void);
                user/update: ((user) => void);
                [k: `gamelist-count-${string}`]: ServerToClient["gamelist-count-:channel"];
            }

            Hierarchy (view full)

            Indexable

            [k: `gamelist-count-${string}`]: ServerToClient["gamelist-count-:channel"]

            A move was made on a game

            -

            Properties

            Properties

            ERROR HUP active-bots active_game @@ -51,16 +51,16 @@

            Properties

            ERROR: ((data) => void)

            An error occurred, the message string should be displayed to the user. For a list of errcode's used, see https://github.com/online-go/online-go.com/blob/devel/src/components/Errcode/Errcode.tsx

            -

            Type declaration

              • (data): void
              • Parameters

                • data: string | {
                      errcode: string;
                  }

                Returns void

            HUP: (() => void)

            The client should reload

            -

            Type declaration

              • (): void
              • Returns void

            active-bots: ((data) => void)

            Updates the list of bots that are connected and ready to the server

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      [id: number]: User;
                  }

                Returns void

            active_game: ((data) => void)

            Message to inform the client of an active game, or a change to an existing game

            -

            Type declaration

            automatch/cancel: ((data) => void)

            An automatch request was canceled

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      uuid: string;
                  }
                  • uuid: string

                Returns void

            automatch/entry: ((data) => void)

            An automatch request is active

            -

            Type declaration

            automatch/start: ((data) => void)

            An automatch request was started

            -

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      game_id: number;
                      uuid: string;
                  }
                  • game_id: number
                  • uuid: string

                Returns void

            chat-join: ((data) => void)

            User(s) joined a chat channel

            +

            Type declaration

              • (data): void
              • Parameters

                • data: string | {
                      errcode: string;
                  }

                Returns void

            HUP: (() => void)

            The client should reload

            +

            Type declaration

              • (): void
              • Returns void

            active-bots: ((data) => void)

            Updates the list of bots that are connected and ready to the server

            +

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      [id: number]: User;
                  }

                Returns void

            active_game: ((data) => void)

            Message to inform the client of an active game, or a change to an existing game

            +

            Type declaration

            automatch/cancel: ((data) => void)

            An automatch request was canceled

            +

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      uuid: string;
                  }
                  • uuid: string

                Returns void

            automatch/entry: ((data) => void)

            An automatch request is active

            +

            Type declaration

            automatch/start: ((data) => void)

            An automatch request was started

            +

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      game_id: number;
                      uuid: string;
                  }
                  • game_id: number
                  • uuid: string

                Returns void

            chat-join: ((data) => void)

            User(s) joined a chat channel

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: string;
                      users: User[];
                  }
                  • channel: string

                    The channel

                  • users: User[]

                    List of users that joined

                    -

                Returns void

            chat-message: ((data) => void)

            Chat message was received

            +

            Returns void

            chat-message: ((data) => void)

            Chat message was received

            Type declaration

              • (data): void
              • Parameters

                • data: {
                      channel: string;
                      country?: string;
                      id: number;
                      message: {
                          i?: string;
                          m: string;
                          t: number;
                      };
                      professional: boolean;
                      ranking: number;
                      system?: true;
                      system_message_type?: "flood";
                      ui_class: string;
                      username: string;
                  }
                  • channel: string

                    The channel

                  • Optional country?: string

                    Country the user is from

                  • id: number

                    User id of the sender

                    @@ -73,14 +73,14 @@
                  • Optional system?: true

                    Whether it's a system message or not

                  • Optional system_message_type?: "flood"
                  • ui_class: string

                    UI class of the sender

                  • username: string

                    Username of the sender

                    -

                Returns void

            chat-message-removed: ((data) => void)

            A chat message should be removed from the display

            +

            Returns void

            chat-message-removed: ((data) => void)

            A chat message should be removed from the display

            Type declaration

            chat-part: ((data) => void)

            User left a chat channel

            +

            Returns void

            chat-part: ((data) => void)

            User left a chat channel

            Type declaration

            chat-topic: ((data) => void)

            Channel topic was updated

            +

            Returns void

            chat-topic: ((data) => void)

            Channel topic was updated

            Type declaration

            chat-update-user: ((data) => void)

            A user's profile was updated

            +

            Returns void

            chat-update-user: ((data) => void)

            A user's profile was updated

            Type declaration

            game/:id/auto_resign: ((data) => void)

            Informs the client the player is scheduled to resign if not cleared

            +

            Returns void

            game/:id/auto_resign: ((data) => void)

            Informs the client the player is scheduled to resign if not cleared

            Type declaration

            game/:id/chat: ((data) => void)

            A game chat message

            -

            Type declaration

            game/:id/chat/remove: ((data) => void)

            Game chat lines should be removed

            +

            Returns void

            game/:id/chat: ((data) => void)

            A game chat message

            +

            Type declaration

            game/:id/chat/remove: ((data) => void)

            Game chat lines should be removed

            Type declaration

            game/:id/clear_auto_resign: ((data) => void)

            The auto resign for the given player has been cleared

            +

            Returns void

            game/:id/clear_auto_resign: ((data) => void)

            The auto resign for the given player has been cleared

            Type declaration

            game/:id/clock: ((data) => void)

            Game clock update

            -

            Type declaration

            game/:id/conditional_moves: ((data) => void)

            Update the conditional moves currently active

            +

            Returns void

            game/:id/clock: ((data) => void)

            Game clock update

            +

            Type declaration

            game/:id/conditional_moves: ((data) => void)

            Update the conditional moves currently active

            Type declaration

            game/:id/error: ((data) => void)

            Error that should be displayed to the user

            -

            Type declaration

            game/:id/gamedata: ((data) => void)

            Update the entire game state

            -

            Type declaration

            game/:id/latency: ((data) => void)

            Update latency information for a player

            +

            Returns void

            game/:id/error: ((data) => void)

            Error that should be displayed to the user

            +

            Type declaration

            game/:id/gamedata: ((data) => void)

            Update the entire game state

            +

            Type declaration

            game/:id/latency: ((data) => void)

            Update latency information for a player

            Type declaration

            game/:id/phase: ((data) => void)

            The phase has changed for the game

            -

            Type declaration

            game/:id/removed_stones: ((data) => void)

            Update the state of the stone removal phase

            -

            Type declaration

            game/:id/removed_stones_accepted: ((data) => void)

            The stone removal phase has been completed, this is the final state and +

            Returns void

            game/:id/phase: ((data) => void)

            The phase has changed for the game

            +

            Type declaration

            game/:id/removed_stones: ((data) => void)

            Update the state of the stone removal phase

            +

            Type declaration

            game/:id/removed_stones_accepted: ((data) => void)

            The stone removal phase has been completed, this is the final state and indicates a phase change to the given phase (should always be "finished")

            Type declaration

            game/:id/reset-chats: (() => void)

            The chat log should be reset.

            -

            Type declaration

            game/:id/stalling_score_estimate: ((data?) => void)

            A score estimation result has been broadcast, this is used for avoiding game stalling

            -

            Type declaration

            game/:id/undo_accepted: ((data) => void)

            Undo move has been accepted, the parameter is the new move number

            -

            Type declaration

            game/:id/undo_canceled: ((data) => void)

            Undo request has been canceled, the parameter is the move number of the original request

            -

            Type declaration

            game/:id/undo_requested: ((data) => void)

            Undo request has been requested, the parameter is the move number that we want to go back to

            -

            Type declaration

            gamelist-count: ((data) => void)

            Update number of live and correspondence games are currently being +

            Returns void

            game/:id/reset-chats: (() => void)

            The chat log should be reset.

            +

            Type declaration

            game/:id/stalling_score_estimate: ((data?) => void)

            A score estimation result has been broadcast, this is used for avoiding game stalling

            +

            Type declaration

            game/:id/undo_accepted: ((data) => void)

            Undo move has been accepted, the parameter is the new move number

            +

            Type declaration

            game/:id/undo_canceled: ((data) => void)

            Undo request has been canceled, the parameter is the move number of the original request

            +

            Type declaration

            game/:id/undo_requested: ((data) => void)

            Undo request has been requested, the parameter is the move number that we want to go back to

            +

            Type declaration

            gamelist-count: ((data) => void)

            Update number of live and correspondence games are currently being played

            Type declaration

            gamelist-count-:channel: ((data) => void)

            Update number of live and correspondence games are currently being +

            Returns void

            gamelist-count-:channel: ((data) => void)

            Update number of live and correspondence games are currently being played in a particular channel

            Type declaration

            hostinfo: ((data) => void)

            General host information for the termination server you +

            Returns void

            hostinfo: ((data) => void)

            General host information for the termination server you are connected to. This is a response to the hostinfo client message.

            Type declaration

            incident-report: ((data) => void)

            Incident report update

            -

            Type declaration

            itc: ((data) => void)

            "Inter Tab Communication" message. This is a client utility to enable +

            Returns void

            incident-report: ((data) => void)

            Incident report update

            +

            Type declaration

            itc: ((data) => void)

            "Inter Tab Communication" message. This is a client utility to enable relaying of messages between devices - the event and data are application defined, the server blindly relays to all connected devices for the sending user. Note this is relayed to all devices regardless @@ -163,17 +163,17 @@ the web client sending this will arrive on an android and ios instance)

            Type declaration

            net/pong: ((data) => void)

            Pong response from a ping

            +

            Returns void

            net/pong: ((data) => void)

            Pong response from a ping

            Type declaration

            notification: ((data) => void)

            A notification that should be displayed to the user +

            Returns void

            notification: ((data) => void)

            A notification that should be displayed to the user These are not strongly modeled, see https://github.com/online-go/online-go.com/blob/devel/src/components/Notifications/Notifications.tsx as a reference for what types there are and what data they contain

            Type declaration

            private-message: ((data) => void)

            A private message was received

            +

            Returns void

            private-message: ((data) => void)

            A private message was received

            Type declaration

            private-superchat: ((data) => void)

            Notify the client that a private message "super chat" has started. A +

            Returns void

            private-superchat: ((data) => void)

            Notify the client that a private message "super chat" has started. A super chat is an undismissable chat sent by a moderator. It should take all focus and not let the client do anything until the conversation is resolved (the enable flag is set to false)

            @@ -194,30 +194,30 @@
          • moderator_username: string

            The moderator username contacting the player

          • player_id: number

            Your id

          • player_username: string

            Your username

            -
          • Returns void

            remote_storage/sync_complete: (() => void)

            Notification that the server has completed sending all remote storage +

            Returns void

            remote_storage/sync_complete: (() => void)

            Notification that the server has completed sending all remote storage data and the client should now be up to date.

            -

            Type declaration

            remote_storage/update: ((data) => void)

            Updates a key value pair

            +

            Type declaration

            remote_storage/update: ((data) => void)

            Updates a key value pair

            Type declaration

            review/:id/full_state: ((data) => void)

            Replay of the entire full state of the review

            -

            Type declaration

            review/:id/r: ((data) => void)

            An incremental modification to the review stream

            -

            Type declaration

            score-estimator-enabled-state: ((data) => void)

            Notifies the client whether the the client shares an IP with one of the +

            Returns void

            review/:id/full_state: ((data) => void)

            Replay of the entire full state of the review

            +

            Type declaration

            review/:id/r: ((data) => void)

            An incremental modification to the review stream

            +

            Type declaration

            score-estimator-enabled-state: ((data) => void)

            Notifies the client whether the the client shares an IP with one of the players of the game. This is used to disable the score estimator in anonymous browsing windows for players of a game when the score estimator is disabled for the game.

            Type declaration

            seekgraph/global: ((messages) => void)

            Type declaration

            ui-push: ((data) => void)

            A UI Push notification. The event and data are not well defined here, +

            Returns void

            seekgraph/global: ((messages) => void)

            Type declaration

            ui-push: ((data) => void)

            A UI Push notification. The event and data are not well defined here, they come as a result to subscribing to ui push channels with ui-pushes/subscribe.

            Type declaration

            user/jwt: ((jwt) => void)

            Update the user's JWT token

            -

            Type declaration

            user/state: ((data) => void)

            Updates whether a user is online or not. Subscribe to these updates for +

            Returns void

            user/jwt: ((jwt) => void)

            Update the user's JWT token

            +

            Type declaration

            user/state: ((data) => void)

            Updates whether a user is online or not. Subscribe to these updates for particular users using the user/monitor command.

            -

            Type declaration

            user/update: ((user) => void)

            Update user information. For other players, this has the standard User +

            Type declaration

            user/update: ((user) => void)

            Update user information. For other players, this has the standard User fields, when this is the current user, it can have additional fields that are found in the ui/config

            -

            Type declaration

            \ No newline at end of file +

            Type declaration

            \ No newline at end of file diff --git a/docs/interfaces/protocol.StallingScoreEstimate.html b/docs/interfaces/protocol.StallingScoreEstimate.html index 82fb4a73..075d4f40 100644 --- a/docs/interfaces/protocol.StallingScoreEstimate.html +++ b/docs/interfaces/protocol.StallingScoreEstimate.html @@ -1,8 +1,8 @@ -StallingScoreEstimate | goban

            Interface StallingScoreEstimate

            interface StallingScoreEstimate {
                game_id: number;
                move_number: number;
                ownership: any[];
                predicted_winner: "black" | "white";
                removed: string;
                score: number;
                win_rate: number;
            }

            Properties

            game_id +StallingScoreEstimate | goban

            Interface StallingScoreEstimate

            interface StallingScoreEstimate {
                game_id: number;
                move_number: number;
                ownership: any[];
                predicted_winner: "black" | "white";
                removed: string;
                score: number;
                win_rate: number;
            }

            Properties

            game_id: number
            move_number: number
            ownership: any[]
            predicted_winner: "black" | "white"
            removed: string
            score: number
            win_rate: number
            \ No newline at end of file +

            Properties

            game_id: number
            move_number: number
            ownership: any[]
            predicted_winner: "black" | "white"
            removed: string
            score: number
            win_rate: number
            \ No newline at end of file diff --git a/docs/interfaces/protocol.User.html b/docs/interfaces/protocol.User.html index 0fcfd036..e4d8c19c 100644 --- a/docs/interfaces/protocol.User.html +++ b/docs/interfaces/protocol.User.html @@ -1,8 +1,8 @@ -User | goban

            Interface User

            interface User {
                country?: string;
                id: number;
                professional?: boolean;
                ranking?: number;
                ratings?: {
                    [speed_size: string]: Glicko2;
                };
                ui_class?: string;
                username: string;
            }

            Properties

            country? +User | goban

            Interface User

            interface User {
                country?: string;
                id: number;
                professional?: boolean;
                ranking?: number;
                ratings?: {
                    [speed_size: string]: Glicko2;
                };
                ui_class?: string;
                username: string;
            }

            Properties

            country?: string
            id: number
            professional?: boolean
            ranking?: number
            ratings?: {
                [speed_size: string]: Glicko2;
            }

            Type declaration

            ui_class?: string
            username: string
            \ No newline at end of file +

            Properties

            country?: string
            id: number
            professional?: boolean
            ranking?: number
            ratings?: {
                [speed_size: string]: Glicko2;
            }

            Type declaration

            ui_class?: string
            username: string
            \ No newline at end of file diff --git a/docs/interfaces/translate.GobanStrings.html b/docs/interfaces/translate.GobanStrings.html index 25c3ad72..333896ac 100644 --- a/docs/interfaces/translate.GobanStrings.html +++ b/docs/interfaces/translate.GobanStrings.html @@ -1,4 +1,4 @@ -GobanStrings | goban

            Interface GobanStrings

            interface GobanStrings {
                %sd: string;
                %sh: string;
                %sm: string;
                %ss: string;
                %swk: string;
                A stone has already been placed here: string;
                Anime: string;
                Black: string;
                Black Walnut: string;
                Black to move: string;
                Book: string;
                Bright Kaya: string;
                Control passed to %s: string;
                Custom: string;
                Enter the label you want to add to the board: string;
                Error: string;
                Error submitting move: string;
                Game Finished: string;
                Glass: string;
                Granite: string;
                HNG: string;
                HNG Night: string;
                Illegal Ko Move: string;
                Illegal board repetition: string;
                Kaya: string;
                Loading...: string;
                Move is suicidal: string;
                Night: string;
                Night Play: string;
                Persimmon: string;
                Plain: string;
                Processing...: string;
                Red Oak: string;
                Review: string;
                Self-capture is not allowed: string;
                Shell: string;
                Slate: string;
                Stone Removal: string;
                Stone Removal Phase: string;
                Submitting...: string;
                Synchronization error, reloading: string;
                The game would be repeating with that move, please play somewhere else first: string;
                White: string;
                White to move: string;
                Worn Glass: string;
                Your move: string;
                Your move - opponent passed: string;
            }

            Properties

            %sd +GobanStrings | goban

            Interface GobanStrings

            interface GobanStrings {
                %sd: string;
                %sh: string;
                %sm: string;
                %ss: string;
                %swk: string;
                A stone has already been placed here: string;
                Anime: string;
                Black: string;
                Black Walnut: string;
                Black to move: string;
                Book: string;
                Bright Kaya: string;
                Control passed to %s: string;
                Custom: string;
                Enter the label you want to add to the board: string;
                Error: string;
                Error submitting move: string;
                Game Finished: string;
                Glass: string;
                Granite: string;
                HNG: string;
                HNG Night: string;
                Illegal Ko Move: string;
                Illegal board repetition: string;
                Kaya: string;
                Loading...: string;
                Move is suicidal: string;
                Night: string;
                Night Play: string;
                Persimmon: string;
                Plain: string;
                Processing...: string;
                Red Oak: string;
                Review: string;
                Self-capture is not allowed: string;
                Shell: string;
                Slate: string;
                Stone Removal: string;
                Stone Removal Phase: string;
                Submitting...: string;
                Synchronization error, reloading: string;
                The game would be repeating with that move, please play somewhere else first: string;
                White: string;
                White to move: string;
                Worn Glass: string;
                Your move: string;
                Your move - opponent passed: string;
            }

            Properties

            %sd: string
            %sh: string
            %sm: string
            %ss: string
            %swk: string
            A stone has already been placed here: string
            Anime: string
            Black: string
            Black Walnut: string
            Black to move: string
            Book: string
            Bright Kaya: string
            Control passed to %s: string
            Custom: string
            Enter the label you want to add to the board: string
            Error: string
            Error submitting move: string
            Game Finished: string
            Glass: string
            Granite: string
            HNG: string
            HNG Night: string
            Illegal Ko Move: string
            Illegal board repetition: string
            Kaya: string
            Loading...: string
            Move is suicidal: string
            Night: string
            Night Play: string
            Persimmon: string
            Plain: string
            Processing...: string
            Red Oak: string
            Review: string
            Self-capture is not allowed: string
            Shell: string
            Slate: string
            Stone Removal: string
            Stone Removal Phase: string
            Submitting...: string
            Synchronization error, reloading: string
            The game would be repeating with that move, please play somewhere else first: string
            White: string
            White to move: string
            Worn Glass: string
            Your move: string
            Your move - opponent passed: string
            \ No newline at end of file +

            Properties

            %sd: string
            %sh: string
            %sm: string
            %ss: string
            %swk: string
            A stone has already been placed here: string
            Anime: string
            Black: string
            Black Walnut: string
            Black to move: string
            Book: string
            Bright Kaya: string
            Control passed to %s: string
            Custom: string
            Enter the label you want to add to the board: string
            Error: string
            Error submitting move: string
            Game Finished: string
            Glass: string
            Granite: string
            HNG: string
            HNG Night: string
            Illegal Ko Move: string
            Illegal board repetition: string
            Kaya: string
            Loading...: string
            Move is suicidal: string
            Night: string
            Night Play: string
            Persimmon: string
            Plain: string
            Processing...: string
            Red Oak: string
            Review: string
            Self-capture is not allowed: string
            Shell: string
            Slate: string
            Stone Removal: string
            Stone Removal Phase: string
            Submitting...: string
            Synchronization error, reloading: string
            The game would be repeating with that move, please play somewhere else first: string
            White: string
            White to move: string
            Worn Glass: string
            Your move: string
            Your move - opponent passed: string
            \ No newline at end of file diff --git a/docs/modules/protocol.html b/docs/modules/protocol.html index 95d69698..e8a4ca9e 100644 --- a/docs/modules/protocol.html +++ b/docs/modules/protocol.html @@ -59,7 +59,7 @@ for backwards compatibility.

            -

            Index

            Enumerations

            Index

            Enumerations

            Interfaces

            AIServerToClient AutomatchPreferences ClientToAIServer diff --git a/docs/modules/translate.html b/docs/modules/translate.html index 418519a4..8ee1f9c6 100644 --- a/docs/modules/translate.html +++ b/docs/modules/translate.html @@ -1,4 +1,4 @@ -translate | goban

            Namespace translate

            Index

            Interfaces

            GobanStrings +translate | goban

            Namespace translate

            Index

            Interfaces

            Functions

            _ interpolate setGobanTranslations diff --git a/docs/types/AdHocPackedMove.html b/docs/types/AdHocPackedMove.html index db4686d5..a7db8d93 100644 --- a/docs/types/AdHocPackedMove.html +++ b/docs/types/AdHocPackedMove.html @@ -1 +1 @@ -AdHocPackedMove | goban

            Type alias AdHocPackedMove

            AdHocPackedMove: [number, number, number?, JGOFNumericPlayerColor?, {
                [index: string]: any;
            }?]
            \ No newline at end of file +AdHocPackedMove | goban

            Type alias AdHocPackedMove

            AdHocPackedMove: [number, number, number?, JGOFNumericPlayerColor?, {
                [index: string]: any;
            }?]
            \ No newline at end of file diff --git a/docs/types/AnalysisSubTool.html b/docs/types/AnalysisSubTool.html index c4087aba..7d1e5608 100644 --- a/docs/types/AnalysisSubTool.html +++ b/docs/types/AnalysisSubTool.html @@ -1 +1 @@ -AnalysisSubTool | goban

            Type alias AnalysisSubTool

            AnalysisSubTool: "black" | "white" | "alternate" | "letters" | "numbers" | string
            \ No newline at end of file +AnalysisSubTool | goban

            Type alias AnalysisSubTool

            AnalysisSubTool: "black" | "white" | "alternate" | "letters" | "numbers" | string
            \ No newline at end of file diff --git a/docs/types/AnalysisTool.html b/docs/types/AnalysisTool.html index 12e6d163..5be34afa 100644 --- a/docs/types/AnalysisTool.html +++ b/docs/types/AnalysisTool.html @@ -1 +1 @@ -AnalysisTool | goban

            Type alias AnalysisTool

            AnalysisTool: "stone" | "draw" | "label" | "score" | "removal"
            \ No newline at end of file +AnalysisTool | goban

            Type alias AnalysisTool

            AnalysisTool: "stone" | "draw" | "label" | "score" | "removal"
            \ No newline at end of file diff --git a/docs/types/BoardTransform.html b/docs/types/BoardTransform.html index f8d5ff0e..3e013d09 100644 --- a/docs/types/BoardTransform.html +++ b/docs/types/BoardTransform.html @@ -9,4 +9,4 @@

            The "easy to understand" part is that the id can be compared visually to the board position

            The downside is that the id string can be moderately long for boards with lots of stones

            -

            Type declaration

              • (x, y): {
                    x: number;
                    y: number;
                }
              • Parameters

                • x: number
                • y: number

                Returns {
                    x: number;
                    y: number;
                }

                • x: number
                • y: number
            \ No newline at end of file +

            Type declaration

              • (x, y): {
                    x: number;
                    y: number;
                }
              • Parameters

                • x: number
                • y: number

                Returns {
                    x: number;
                    y: number;
                }

                • x: number
                • y: number
            \ No newline at end of file diff --git a/docs/types/ConditionalMoveResponse.html b/docs/types/ConditionalMoveResponse.html index 54d1a7af..9b797a3d 100644 --- a/docs/types/ConditionalMoveResponse.html +++ b/docs/types/ConditionalMoveResponse.html @@ -1,3 +1,3 @@ ConditionalMoveResponse | goban

            Type alias ConditionalMoveResponse

            ConditionalMoveResponse: [string | null, ConditionalMoveResponseTree]

            A branch in the conditional move tree, consists of the response move and the sub-tree of the next possible moves

            -
            \ No newline at end of file +
            \ No newline at end of file diff --git a/docs/types/DataArgument.html b/docs/types/DataArgument.html index d8286499..4d57c36e 100644 --- a/docs/types/DataArgument.html +++ b/docs/types/DataArgument.html @@ -1 +1 @@ -DataArgument | goban

            Type alias DataArgument<Entry>

            DataArgument<Entry>: Entry extends ((...args) => void)
                ? A[0]
                : never

            Type Parameters

            • Entry
            \ No newline at end of file +DataArgument | goban

            Type alias DataArgument<Entry>

            DataArgument<Entry>: Entry extends ((...args) => void)
                ? A[0]
                : never

            Type Parameters

            • Entry
            \ No newline at end of file diff --git a/docs/types/GobanChatLog.html b/docs/types/GobanChatLog.html index 8cf4a026..188c64eb 100644 --- a/docs/types/GobanChatLog.html +++ b/docs/types/GobanChatLog.html @@ -1 +1 @@ -GobanChatLog | goban

            Type alias GobanChatLog

            GobanChatLog: GameChatLine[]
            \ No newline at end of file +GobanChatLog | goban

            Type alias GobanChatLog

            GobanChatLog: GameChatLine[]
            \ No newline at end of file diff --git a/docs/types/GobanEnginePhase.html b/docs/types/GobanEnginePhase.html index 0026c827..7fdfe385 100644 --- a/docs/types/GobanEnginePhase.html +++ b/docs/types/GobanEnginePhase.html @@ -1 +1 @@ -GobanEnginePhase | goban

            Type alias GobanEnginePhase

            GobanEnginePhase: "play" | "stone removal" | "finished"
            \ No newline at end of file +GobanEnginePhase | goban

            Type alias GobanEnginePhase

            GobanEnginePhase: "play" | "stone removal" | "finished"
            \ No newline at end of file diff --git a/docs/types/GobanEngineRules.html b/docs/types/GobanEngineRules.html index ad240a05..117ff442 100644 --- a/docs/types/GobanEngineRules.html +++ b/docs/types/GobanEngineRules.html @@ -1 +1 @@ -GobanEngineRules | goban

            Type alias GobanEngineRules

            GobanEngineRules: "chinese" | "aga" | "japanese" | "korean" | "ing" | "nz"
            \ No newline at end of file +GobanEngineRules | goban

            Type alias GobanEngineRules

            GobanEngineRules: "chinese" | "aga" | "japanese" | "korean" | "ing" | "nz"
            \ No newline at end of file diff --git a/docs/types/GobanEngineSuperKoAlgorithm.html b/docs/types/GobanEngineSuperKoAlgorithm.html index de3a1127..3624df3c 100644 --- a/docs/types/GobanEngineSuperKoAlgorithm.html +++ b/docs/types/GobanEngineSuperKoAlgorithm.html @@ -1 +1 @@ -GobanEngineSuperKoAlgorithm | goban

            Type alias GobanEngineSuperKoAlgorithm

            GobanEngineSuperKoAlgorithm: "psk" | "csk" | "ssk" | "noresult" | "ing"
            \ No newline at end of file +GobanEngineSuperKoAlgorithm | goban

            Type alias GobanEngineSuperKoAlgorithm

            GobanEngineSuperKoAlgorithm: "psk" | "csk" | "ssk" | "noresult" | "ing"
            \ No newline at end of file diff --git a/docs/types/GobanErrorMessageId.html b/docs/types/GobanErrorMessageId.html index 3a00d69d..d49abfe8 100644 --- a/docs/types/GobanErrorMessageId.html +++ b/docs/types/GobanErrorMessageId.html @@ -1 +1 @@ -GobanErrorMessageId | goban

            Type alias GobanErrorMessageId

            \ No newline at end of file +GobanErrorMessageId | goban

            Type alias GobanErrorMessageId

            \ No newline at end of file diff --git a/docs/types/GobanErrorMessageObject.html b/docs/types/GobanErrorMessageObject.html index 28a3f0f9..43dd7e4d 100644 --- a/docs/types/GobanErrorMessageObject.html +++ b/docs/types/GobanErrorMessageObject.html @@ -1 +1 @@ -GobanErrorMessageObject | goban

            Type alias GobanErrorMessageObject

            \ No newline at end of file +GobanErrorMessageObject | goban

            Type alias GobanErrorMessageObject

            \ No newline at end of file diff --git a/docs/types/GobanIOErrorMessageId.html b/docs/types/GobanIOErrorMessageId.html index 5305fa5e..e591e068 100644 --- a/docs/types/GobanIOErrorMessageId.html +++ b/docs/types/GobanIOErrorMessageId.html @@ -1 +1 @@ -GobanIOErrorMessageId | goban

            Type alias GobanIOErrorMessageId

            GobanIOErrorMessageId: "failed_to_load_sgf"
            \ No newline at end of file +GobanIOErrorMessageId | goban

            Type alias GobanIOErrorMessageId

            GobanIOErrorMessageId: "failed_to_load_sgf"
            \ No newline at end of file diff --git a/docs/types/GobanModes.html b/docs/types/GobanModes.html index 84950bac..99431fdb 100644 --- a/docs/types/GobanModes.html +++ b/docs/types/GobanModes.html @@ -1 +1 @@ -GobanModes | goban

            Type alias GobanModes

            GobanModes: "play" | "puzzle" | "score estimation" | "analyze" | "conditional"
            \ No newline at end of file +GobanModes | goban

            Type alias GobanModes

            GobanModes: "play" | "puzzle" | "score estimation" | "analyze" | "conditional"
            \ No newline at end of file diff --git a/docs/types/GobanMoveErrorMessageId.html b/docs/types/GobanMoveErrorMessageId.html index daba42c2..1e50e5ff 100644 --- a/docs/types/GobanMoveErrorMessageId.html +++ b/docs/types/GobanMoveErrorMessageId.html @@ -1 +1 @@ -GobanMoveErrorMessageId | goban

            Type alias GobanMoveErrorMessageId

            GobanMoveErrorMessageId: "stone_already_placed_here" | "illegal_self_capture" | "illegal_ko_move" | "illegal_board_repetition" | "move_error"
            \ No newline at end of file +GobanMoveErrorMessageId | goban

            Type alias GobanMoveErrorMessageId

            GobanMoveErrorMessageId: "stone_already_placed_here" | "illegal_self_capture" | "illegal_ko_move" | "illegal_board_repetition" | "move_error"
            \ No newline at end of file diff --git a/docs/types/GobanMovesArray.html b/docs/types/GobanMovesArray.html index c2b191b6..0c644595 100644 --- a/docs/types/GobanMovesArray.html +++ b/docs/types/GobanMovesArray.html @@ -1 +1 @@ -GobanMovesArray | goban

            Type alias GobanMovesArray

            GobanMovesArray: AdHocPackedMove[] | JGOFMove[]
            \ No newline at end of file +GobanMovesArray | goban

            Type alias GobanMovesArray

            GobanMovesArray: AdHocPackedMove[] | JGOFMove[]
            \ No newline at end of file diff --git a/docs/types/GobanRenderer.html b/docs/types/GobanRenderer.html index 11bce82e..5e177848 100644 --- a/docs/types/GobanRenderer.html +++ b/docs/types/GobanRenderer.html @@ -1 +1 @@ -GobanRenderer | goban

            Type alias GobanRenderer

            GobanRenderer: GobanCanvas | SVGRenderer
            \ No newline at end of file +GobanRenderer | goban

            Type alias GobanRenderer

            GobanRenderer: GobanCanvas | SVGRenderer
            \ No newline at end of file diff --git a/docs/types/GobanRendererConfig.html b/docs/types/GobanRendererConfig.html index a5cef69d..194196d9 100644 --- a/docs/types/GobanRendererConfig.html +++ b/docs/types/GobanRendererConfig.html @@ -1 +1 @@ -GobanRendererConfig | goban

            Type alias GobanRendererConfig

            \ No newline at end of file +GobanRendererConfig | goban

            Type alias GobanRendererConfig

            \ No newline at end of file diff --git a/docs/types/JGOFTimeControl.html b/docs/types/JGOFTimeControl.html index 1e744d93..f82a8c19 100644 --- a/docs/types/JGOFTimeControl.html +++ b/docs/types/JGOFTimeControl.html @@ -1 +1 @@ -JGOFTimeControl | goban
            \ No newline at end of file +JGOFTimeControl | goban
            \ No newline at end of file diff --git a/docs/types/JGOFTimeControlSpeed.html b/docs/types/JGOFTimeControlSpeed.html index aba9a4ba..c3dd2cb3 100644 --- a/docs/types/JGOFTimeControlSpeed.html +++ b/docs/types/JGOFTimeControlSpeed.html @@ -1 +1 @@ -JGOFTimeControlSpeed | goban

            Type alias JGOFTimeControlSpeed

            JGOFTimeControlSpeed: "blitz" | "live" | "correspondence"
            \ No newline at end of file +JGOFTimeControlSpeed | goban

            Type alias JGOFTimeControlSpeed

            JGOFTimeControlSpeed: "blitz" | "live" | "correspondence"
            \ No newline at end of file diff --git a/docs/types/JGOFTimeControlSystem.html b/docs/types/JGOFTimeControlSystem.html index 1ff89e3e..945a5e35 100644 --- a/docs/types/JGOFTimeControlSystem.html +++ b/docs/types/JGOFTimeControlSystem.html @@ -1 +1 @@ -JGOFTimeControlSystem | goban

            Type alias JGOFTimeControlSystem

            JGOFTimeControlSystem: "fischer" | "byoyomi" | "canadian" | "simple" | "absolute" | "none"
            \ No newline at end of file +JGOFTimeControlSystem | goban

            Type alias JGOFTimeControlSystem

            JGOFTimeControlSystem: "fischer" | "byoyomi" | "canadian" | "simple" | "absolute" | "none"
            \ No newline at end of file diff --git a/docs/types/LabelPosition.html b/docs/types/LabelPosition.html index 7d1a532b..22f5d301 100644 --- a/docs/types/LabelPosition.html +++ b/docs/types/LabelPosition.html @@ -1 +1 @@ -LabelPosition | goban

            Type alias LabelPosition

            LabelPosition: "all" | "none" | "top-left" | "top-right" | "bottom-right" | "bottom-left"
            \ No newline at end of file +LabelPosition | goban

            Type alias LabelPosition

            LabelPosition: "all" | "none" | "top-left" | "top-right" | "bottom-right" | "bottom-left"
            \ No newline at end of file diff --git a/docs/types/Matrix.html b/docs/types/Matrix.html index d8abf417..a4963ae9 100644 --- a/docs/types/Matrix.html +++ b/docs/types/Matrix.html @@ -1 +1 @@ -Matrix | goban

            Type alias Matrix<T>

            Matrix<T>: T[][]

            Type Parameters

            • T
            \ No newline at end of file +Matrix | goban

            Type alias Matrix<T>

            Matrix<T>: T[][]

            Type Parameters

            • T
            \ No newline at end of file diff --git a/docs/types/MoveTreePenMarks.html b/docs/types/MoveTreePenMarks.html index 2aeeaaac..8c9692f2 100644 --- a/docs/types/MoveTreePenMarks.html +++ b/docs/types/MoveTreePenMarks.html @@ -1 +1 @@ -MoveTreePenMarks | goban

            Type alias MoveTreePenMarks

            MoveTreePenMarks: {
                color: string;
                points: number[];
            }[]

            Type declaration

            • color: string
            • points: number[]
            \ No newline at end of file +MoveTreePenMarks | goban

            Type alias MoveTreePenMarks

            MoveTreePenMarks: {
                color: string;
                points: number[];
            }[]

            Type declaration

            • color: string
            • points: number[]
            \ No newline at end of file diff --git a/docs/types/NumberMatrix.html b/docs/types/NumberMatrix.html index 6d864cef..fb8f5b91 100644 --- a/docs/types/NumberMatrix.html +++ b/docs/types/NumberMatrix.html @@ -1 +1 @@ -NumberMatrix | goban

            Type alias NumberMatrix

            NumberMatrix: Matrix<number>
            \ No newline at end of file +NumberMatrix | goban

            Type alias NumberMatrix

            NumberMatrix: Matrix<number>
            \ No newline at end of file diff --git a/docs/types/PlayerColor.html b/docs/types/PlayerColor.html index c658ede3..50b70d10 100644 --- a/docs/types/PlayerColor.html +++ b/docs/types/PlayerColor.html @@ -1 +1 @@ -PlayerColor | goban

            Type alias PlayerColor

            PlayerColor: "black" | "white"
            \ No newline at end of file +PlayerColor | goban

            Type alias PlayerColor

            PlayerColor: "black" | "white"
            \ No newline at end of file diff --git a/docs/types/ProtocolResponseType.html b/docs/types/ProtocolResponseType.html index c4f0ff4e..4a21807e 100644 --- a/docs/types/ProtocolResponseType.html +++ b/docs/types/ProtocolResponseType.html @@ -1 +1 @@ -ProtocolResponseType | goban

            Type alias ProtocolResponseType<Entry>

            ProtocolResponseType<Entry>: Entry extends ((...args) => infer R)
                ? R
                : never

            Type Parameters

            • Entry
            \ No newline at end of file +ProtocolResponseType | goban

            Type alias ProtocolResponseType<Entry>

            ProtocolResponseType<Entry>: Entry extends ((...args) => infer R)
                ? R
                : never

            Type Parameters

            • Entry
            \ No newline at end of file diff --git a/docs/types/PuzzleOpponentMoveMode.html b/docs/types/PuzzleOpponentMoveMode.html index 5f173bfd..536a9d1f 100644 --- a/docs/types/PuzzleOpponentMoveMode.html +++ b/docs/types/PuzzleOpponentMoveMode.html @@ -1 +1 @@ -PuzzleOpponentMoveMode | goban

            Type alias PuzzleOpponentMoveMode

            PuzzleOpponentMoveMode: "manual" | "automatic"
            \ No newline at end of file +PuzzleOpponentMoveMode | goban

            Type alias PuzzleOpponentMoveMode

            PuzzleOpponentMoveMode: "manual" | "automatic"
            \ No newline at end of file diff --git a/docs/types/PuzzlePlacementSetting.html b/docs/types/PuzzlePlacementSetting.html index 1428c65d..8f4086fc 100644 --- a/docs/types/PuzzlePlacementSetting.html +++ b/docs/types/PuzzlePlacementSetting.html @@ -1 +1 @@ -PuzzlePlacementSetting | goban

            Type alias PuzzlePlacementSetting

            PuzzlePlacementSetting: {
                mode: "play";
            } | {
                color: JGOFNumericPlayerColor;
                mode: "setup";
            } | {
                color: 0;
                mode: "place";
            }

            Type declaration

            • mode: "play"

            Type declaration

            Type declaration

            • color: 0
            • mode: "place"
            \ No newline at end of file +PuzzlePlacementSetting | goban

            Type alias PuzzlePlacementSetting

            PuzzlePlacementSetting: {
                mode: "play";
            } | {
                color: JGOFNumericPlayerColor;
                mode: "setup";
            } | {
                color: 0;
                mode: "place";
            }

            Type declaration

            • mode: "play"

            Type declaration

            Type declaration

            • color: 0
            • mode: "place"
            \ No newline at end of file diff --git a/docs/types/PuzzlePlayerMoveMode.html b/docs/types/PuzzlePlayerMoveMode.html index 9f092f78..a3799f3a 100644 --- a/docs/types/PuzzlePlayerMoveMode.html +++ b/docs/types/PuzzlePlayerMoveMode.html @@ -1 +1 @@ -PuzzlePlayerMoveMode | goban

            Type alias PuzzlePlayerMoveMode

            PuzzlePlayerMoveMode: "free" | "fixed"
            \ No newline at end of file +PuzzlePlayerMoveMode | goban

            Type alias PuzzlePlayerMoveMode

            PuzzlePlayerMoveMode: "free" | "fixed"
            \ No newline at end of file diff --git a/docs/types/RawStoneString.html b/docs/types/RawStoneString.html index 97a7a97e..df7e3349 100644 --- a/docs/types/RawStoneString.html +++ b/docs/types/RawStoneString.html @@ -1,2 +1,2 @@ RawStoneString | goban

            Type alias RawStoneString

            RawStoneString: JGOFIntersection[]

            A raw stone string is simply an array of intersections

            -
            \ No newline at end of file +
            \ No newline at end of file diff --git a/docs/types/StringMatrix.html b/docs/types/StringMatrix.html index d4e79c6e..de699119 100644 --- a/docs/types/StringMatrix.html +++ b/docs/types/StringMatrix.html @@ -1 +1 @@ -StringMatrix | goban

            Type alias StringMatrix

            StringMatrix: Matrix<string>
            \ No newline at end of file +StringMatrix | goban

            Type alias StringMatrix

            StringMatrix: Matrix<string>
            \ No newline at end of file diff --git a/docs/types/_internal_.ClockTime.html b/docs/types/_internal_.ClockTime.html index ae6c6b4c..39426b04 100644 --- a/docs/types/_internal_.ClockTime.html +++ b/docs/types/_internal_.ClockTime.html @@ -1 +1 @@ -ClockTime | goban
            \ No newline at end of file +ClockTime | goban
            \ No newline at end of file diff --git a/docs/types/_internal_.DebugOutput.html b/docs/types/_internal_.DebugOutput.html index e12f9c89..ca6bb298 100644 --- a/docs/types/_internal_.DebugOutput.html +++ b/docs/types/_internal_.DebugOutput.html @@ -1,2 +1,2 @@ DebugOutput | goban

            Type alias DebugOutput

            DebugOutput: string

            -
            \ No newline at end of file +
            \ No newline at end of file diff --git a/docs/types/_internal_.LocalEstimator.html b/docs/types/_internal_.LocalEstimator.html index 4e32a64b..cf342af5 100644 --- a/docs/types/_internal_.LocalEstimator.html +++ b/docs/types/_internal_.LocalEstimator.html @@ -5,4 +5,4 @@
          • trials: number

            number of playouts. Not applicable to all estimators, but higher generally means higher accuracy and higher compute cost

          • tolerance: number

            (0.0-1.0) confidence required to mark an intersection not neutral.

            -
          • Returns NumberMatrix

            \ No newline at end of file +

            Returns NumberMatrix

            \ No newline at end of file diff --git a/docs/types/_internal_.MessageID.html b/docs/types/_internal_.MessageID.html index b4e9ce66..852806a3 100644 --- a/docs/types/_internal_.MessageID.html +++ b/docs/types/_internal_.MessageID.html @@ -1 +1 @@ -MessageID | goban

            Type alias MessageID

            MessageID: GobanMoveErrorMessageId | "error" | "error_submitting_move" | "loading" | "processing" | "self_capture_not_allowed" | "server_message" | "illegal_ko_move" | "synchronization_error"
            \ No newline at end of file +MessageID | goban

            Type alias MessageID

            MessageID: GobanMoveErrorMessageId | "error" | "error_submitting_move" | "loading" | "processing" | "self_capture_not_allowed" | "server_message" | "illegal_ko_move" | "synchronization_error"
            \ No newline at end of file diff --git a/docs/types/_internal_.NoneClock.html b/docs/types/_internal_.NoneClock.html index 90ccf461..59df9a4b 100644 --- a/docs/types/_internal_.NoneClock.html +++ b/docs/types/_internal_.NoneClock.html @@ -1 +1 @@ -NoneClock | goban

            Type alias NoneClock

            NoneClock: undefined
            \ No newline at end of file +NoneClock | goban

            Type alias NoneClock

            NoneClock: undefined
            \ No newline at end of file diff --git a/docs/types/_internal_.SimpleClock.html b/docs/types/_internal_.SimpleClock.html index f7a9d61b..74e7186f 100644 --- a/docs/types/_internal_.SimpleClock.html +++ b/docs/types/_internal_.SimpleClock.html @@ -1 +1 @@ -SimpleClock | goban

            Type alias SimpleClock

            SimpleClock: number
            \ No newline at end of file +SimpleClock | goban

            Type alias SimpleClock

            SimpleClock: number
            \ No newline at end of file diff --git a/docs/types/_internal_.StoneType.html b/docs/types/_internal_.StoneType.html index 3d9bbfe4..1fdb95b3 100644 --- a/docs/types/_internal_.StoneType.html +++ b/docs/types/_internal_.StoneType.html @@ -1 +1 @@ -StoneType | goban

            Type alias StoneType

            StoneType: {
                shadow: HTMLCanvasElement;
                stone: HTMLCanvasElement;
            }

            Type declaration

            • shadow: HTMLCanvasElement
            • stone: HTMLCanvasElement
            \ No newline at end of file +StoneType | goban

            Type alias StoneType

            StoneType: {
                shadow: HTMLCanvasElement;
                stone: HTMLCanvasElement;
            }

            Type declaration

            • shadow: HTMLCanvasElement
            • stone: HTMLCanvasElement
            \ No newline at end of file diff --git a/docs/types/_internal_.StoneTypeArray.html b/docs/types/_internal_.StoneTypeArray.html index 4cceeb5c..94a61226 100644 --- a/docs/types/_internal_.StoneTypeArray.html +++ b/docs/types/_internal_.StoneTypeArray.html @@ -1 +1 @@ -StoneTypeArray | goban

            Type alias StoneTypeArray

            StoneTypeArray: StoneType[]
            \ No newline at end of file +StoneTypeArray | goban

            Type alias StoneTypeArray

            StoneTypeArray: StoneType[]
            \ No newline at end of file diff --git a/docs/types/protocol.AutomatchCondition.html b/docs/types/protocol.AutomatchCondition.html index 22e36240..31f21f6a 100644 --- a/docs/types/protocol.AutomatchCondition.html +++ b/docs/types/protocol.AutomatchCondition.html @@ -1 +1 @@ -AutomatchCondition | goban

            Type alias AutomatchCondition

            AutomatchCondition: "required" | "preferred" | "no-preference"
            \ No newline at end of file +AutomatchCondition | goban

            Type alias AutomatchCondition

            AutomatchCondition: "required" | "preferred" | "no-preference"
            \ No newline at end of file diff --git a/docs/types/protocol.RuleSet.html b/docs/types/protocol.RuleSet.html index 8e3ff55b..b6bad720 100644 --- a/docs/types/protocol.RuleSet.html +++ b/docs/types/protocol.RuleSet.html @@ -1 +1 @@ -RuleSet | goban

            Type alias RuleSet

            RuleSet: "japanese" | "chinese" | "aga" | "korean" | "nz" | "ing"
            \ No newline at end of file +RuleSet | goban

            Type alias RuleSet

            RuleSet: "japanese" | "chinese" | "aga" | "korean" | "nz" | "ing"
            \ No newline at end of file diff --git a/docs/types/protocol.Size.html b/docs/types/protocol.Size.html index bd32e02e..bae9035f 100644 --- a/docs/types/protocol.Size.html +++ b/docs/types/protocol.Size.html @@ -1 +1 @@ -Size | goban

            Type alias Size

            Size: "9x9" | "13x13" | "19x19"
            \ No newline at end of file +Size | goban

            Type alias Size

            Size: "9x9" | "13x13" | "19x19"
            \ No newline at end of file diff --git a/docs/types/protocol.Speed.html b/docs/types/protocol.Speed.html index f0d5f0d0..c33c5673 100644 --- a/docs/types/protocol.Speed.html +++ b/docs/types/protocol.Speed.html @@ -1 +1 @@ -Speed | goban

            Type alias Speed

            Speed: "blitz" | "live" | "correspondence"
            \ No newline at end of file +Speed | goban

            Type alias Speed

            Speed: "blitz" | "live" | "correspondence"
            \ No newline at end of file diff --git a/docs/variables/AUTOSCORE_TOLERANCE.html b/docs/variables/AUTOSCORE_TOLERANCE.html index 17ff4299..7487a3af 100644 --- a/docs/variables/AUTOSCORE_TOLERANCE.html +++ b/docs/variables/AUTOSCORE_TOLERANCE.html @@ -1 +1 @@ -AUTOSCORE_TOLERANCE | goban

            Variable AUTOSCORE_TOLERANCEConst

            AUTOSCORE_TOLERANCE: 0.1 = 0.1
            \ No newline at end of file +AUTOSCORE_TOLERANCE | goban

            Variable AUTOSCORE_TOLERANCEConst

            AUTOSCORE_TOLERANCE: 0.1 = 0.1
            \ No newline at end of file diff --git a/docs/variables/AUTOSCORE_TRIALS.html b/docs/variables/AUTOSCORE_TRIALS.html index 6ea50558..3b19d4b1 100644 --- a/docs/variables/AUTOSCORE_TRIALS.html +++ b/docs/variables/AUTOSCORE_TRIALS.html @@ -1 +1 @@ -AUTOSCORE_TRIALS | goban

            Variable AUTOSCORE_TRIALSConst

            AUTOSCORE_TRIALS: 1000 = 1000
            \ No newline at end of file +AUTOSCORE_TRIALS | goban

            Variable AUTOSCORE_TRIALSConst

            AUTOSCORE_TRIALS: 1000 = 1000
            \ No newline at end of file diff --git a/docs/variables/GOBAN_FONT.html b/docs/variables/GOBAN_FONT.html index b327062e..82403c66 100644 --- a/docs/variables/GOBAN_FONT.html +++ b/docs/variables/GOBAN_FONT.html @@ -1 +1 @@ -GOBAN_FONT | goban

            Variable GOBAN_FONTConst

            GOBAN_FONT: "Verdana,Arial,sans-serif" = "Verdana,Arial,sans-serif"
            \ No newline at end of file +GOBAN_FONT | goban

            Variable GOBAN_FONTConst

            GOBAN_FONT: "Verdana,Arial,sans-serif" = "Verdana,Arial,sans-serif"
            \ No newline at end of file diff --git a/docs/variables/MARK_TYPES.html b/docs/variables/MARK_TYPES.html index 26b8f593..b2f513f9 100644 --- a/docs/variables/MARK_TYPES.html +++ b/docs/variables/MARK_TYPES.html @@ -1 +1 @@ -MARK_TYPES | goban

            Variable MARK_TYPESConst

            MARK_TYPES: (keyof MarkInterface)[] = ...
            \ No newline at end of file +MARK_TYPES | goban

            Variable MARK_TYPESConst

            MARK_TYPES: (keyof MarkInterface)[] = ...
            \ No newline at end of file diff --git a/docs/variables/SCORE_ESTIMATION_TOLERANCE.html b/docs/variables/SCORE_ESTIMATION_TOLERANCE.html index 7c3f4a0f..4075c2a2 100644 --- a/docs/variables/SCORE_ESTIMATION_TOLERANCE.html +++ b/docs/variables/SCORE_ESTIMATION_TOLERANCE.html @@ -1 +1 @@ -SCORE_ESTIMATION_TOLERANCE | goban

            Variable SCORE_ESTIMATION_TOLERANCEConst

            SCORE_ESTIMATION_TOLERANCE: 0.3 = 0.3
            \ No newline at end of file +SCORE_ESTIMATION_TOLERANCE | goban

            Variable SCORE_ESTIMATION_TOLERANCEConst

            SCORE_ESTIMATION_TOLERANCE: 0.3 = 0.3
            \ No newline at end of file diff --git a/docs/variables/SCORE_ESTIMATION_TRIALS.html b/docs/variables/SCORE_ESTIMATION_TRIALS.html index 2dc10891..e8c7fed4 100644 --- a/docs/variables/SCORE_ESTIMATION_TRIALS.html +++ b/docs/variables/SCORE_ESTIMATION_TRIALS.html @@ -1 +1 @@ -SCORE_ESTIMATION_TRIALS | goban

            Variable SCORE_ESTIMATION_TRIALSConst

            SCORE_ESTIMATION_TRIALS: 1000 = 1000
            \ No newline at end of file +SCORE_ESTIMATION_TRIALS | goban

            Variable SCORE_ESTIMATION_TRIALSConst

            SCORE_ESTIMATION_TRIALS: 1000 = 1000
            \ No newline at end of file diff --git a/docs/variables/THEMES.html b/docs/variables/THEMES.html index 2cea9b65..12b05077 100644 --- a/docs/variables/THEMES.html +++ b/docs/variables/THEMES.html @@ -1 +1 @@ -THEMES | goban

            Variable THEMESConst

            THEMES: ThemesInterface = ...
            \ No newline at end of file +THEMES | goban

            Variable THEMESConst

            THEMES: ThemesInterface = ...
            \ No newline at end of file diff --git a/docs/variables/THEMES_SORTED.html b/docs/variables/THEMES_SORTED.html index da962e0e..3abee7fa 100644 --- a/docs/variables/THEMES_SORTED.html +++ b/docs/variables/THEMES_SORTED.html @@ -1 +1 @@ -THEMES_SORTED | goban

            Variable THEMES_SORTEDConst

            THEMES_SORTED: {
                black: GobanTheme[];
                board: GobanTheme[];
                white: GobanTheme[];
                [key: string]: GobanTheme[];
            } = ...

            Type declaration

            \ No newline at end of file +THEMES_SORTED | goban

            Variable THEMES_SORTEDConst

            THEMES_SORTED: {
                black: GobanTheme[];
                board: GobanTheme[];
                white: GobanTheme[];
                [key: string]: GobanTheme[];
            } = ...

            Type declaration

            \ No newline at end of file diff --git a/docs/variables/callbacks.html b/docs/variables/callbacks.html index 90445062..ca0e1250 100644 --- a/docs/variables/callbacks.html +++ b/docs/variables/callbacks.html @@ -1 +1 @@ -callbacks | goban

            Variable callbacksConst

            callbacks: GobanCallbacks = ...
            \ No newline at end of file +callbacks | goban

            Variable callbacksConst

            callbacks: GobanCallbacks = ...
            \ No newline at end of file diff --git a/docs/variables/remote_estimate_ownership.html b/docs/variables/remote_estimate_ownership.html index 80504158..5c8767f0 100644 --- a/docs/variables/remote_estimate_ownership.html +++ b/docs/variables/remote_estimate_ownership.html @@ -1 +1 @@ -remote_estimate_ownership | goban

            Variable remote_estimate_ownership

            remote_estimate_ownership: ((req) => Promise<ScoreEstimateResponse>) | undefined

            Type declaration

            \ No newline at end of file +remote_estimate_ownership | goban

            Variable remote_estimate_ownership

            remote_estimate_ownership: ((req) => Promise<ScoreEstimateResponse>) | undefined

            Type declaration

            \ No newline at end of file