## Static Call Graph for JavaScript Files in /rails/public

### Entry Points

**window.onload** (class_app.js:270)
└── **App.create()** (class_app.js:73)
    ├── **App.load_table()** (class_app.js:115)
    │   ├── **App.row_write()** (class_app.js:177)
    │   └── App.dbF() [external]
    ├── new **View2D()** (class_view_2d.js:21)
    │   ├── new **TaskCreate()** (class_task_create.js:15)
    │   │   ├── **this.create()** (class_task_create.js:66) [as event handler]
    │   │   │   ├── this.dbF() [external]
    │   │   │   ├── **endpoint()** (utilities.js:100)
    │   │   │   ├── **this.view.$task_create()** -> **View2D.$task_create()** (class_view_2d.js:330)
    │   │   │   └── **TaskCreate.close()** (class_task_create.js:52)
    │   │   └── **this.cancel()** (class_task_create.js:44) [as event handler]
    │   │       └── **TaskCreate.close()** (class_task_create.js:52)
    │   ├── new **TaskEdit()** (class_task_edit.js:15)
    │   │   ├── **this.update()** (class_task_edit.js:159) [as event handler]
    │   │   │   ├── **endpoint()** (utilities.js:100)
    │   │   │   ├── this.dbF() [external]
    │   │   │   └── **TaskEdit.close()** (class_task_edit.js:75)
    │   │   ├── **this.delete()** (class_task_edit.js:108) [as event handler]
    │   │   │   ├── **endpoint()** (utilities.js:100)
    │   │   │   ├── this.dbF() [external]
    │   │   │   └── **TaskEdit.close()** (class_task_edit.js:75)
    │   │   └── **this.cancel()** (class_task_edit.js:67) [as event handler]
    │   │       └── **TaskEdit.close()** (class_task_edit.js:75)
    │   ├── new **StatusMenu()** (class_status_menu.js:14)
    │   │   └── **this.close()** (class_status_menu.js:63) [as event handler]
    │   │       ├── **endpoint()** (utilities.js:100)
    │   │       └── this.dbF() [external]
    │   ├── new **DayClear()** (class_day_clear.js:15)
    │   │   ├── **this.clear()** (class_day_clear.js:42) [as event handler]
    │   │   │   ├── **endpoint()** (utilities.js:100)
    │   │   │   ├── this.dbF() [external]
    │   │   │   └── **DayClear.close()** (class_day_clear.js:81)
    │   │   └── **this.cancel()** (class_day_clear.js:73) [as event handler]
    │   │       └── **DayClear.close()** (class_day_clear.js:81)
    │   ├── new **DND()** (class_dnd.js:14)
    │   └── **date_to_string()** (utilities.js:14)
    ├── **ViewDef.create()** (class_view_def.js:20)
    │   ├── **FilterDate.create()** (class_filter_date.js:14)
    │   │   ├── **FilterDate.type_click()** (class_filter_date.js:34) [as event handler]
    │   │   ├── **FilterDate.save()** (class_filter_date.js:85) [as event handler]
    │   │   │   ├── **FilterDate.parent.filter_date_close()** -> **ViewDef.filter_date_close()** (class_view_def.js:45)
    │   │   │   │   └── **ViewDef.process_date()** (class_view_def.js:97)
    │   │   │   └── **FilterDate.close()** (class_filter_date.js:44)
    │   │   └── **FilterDate.cancel()** (class_filter_date.js:26) [as event handler]
    │   │       └── **FilterDate.close()** (class_filter_date.js:44)
    │   ├── **VisualColor.create()** (class_visual_color.js:16)
    │   │   ├── **VisualColor.save()** (class_visual_color.js:75) [as event handler]
    │   │   │   ├── **VisualColor.save_edit()** (class_visual_color.js:95)
    │   │   │   ├── **VisualColor.save_update()** (class_visual_color.js:138)
    │   │   │   ├── **VisualColor.close()** (class_visual_color.js:44)
    │   │   │   └── **VisualColor.parent.visual_color_close()** -> **ViewDef.visual_color_close()** (class_view_def.js:119)
    │   │   ├── **VisualColor.cancel()** (class_visual_color.js:36) [as event handler]
    │   │   │   └── **VisualColor.close()** (class_visual_color.js:44)
    │   │   └── **VisualColor.add()** (class_visual_color.js:28) [as event handler]
    │   │       └── **VisualColor.status_create()** (class_visual_color.js:144)
    │   ├── **ViewDef.save()** (class_view_def.js:107) [as event handler]
    │   │   ├── **ViewDef.app.row_write()** -> **App.row_write()** (class_app.js:177)
    │   │   └── **ViewDef.app.transition()** -> **App.transition()** (class_app.js:216)
    │   ├── **ViewDef.cancel()** (class_view_def.js:37) [as event handler]
    │   │   └── **ViewDef.app.transition()** -> **App.transition()** (class_app.js:216)
    │   ├── **FilterDate.open()** (class_filter_date.js:54) [as event handler]
    │   │   └── **dialog_display()** (utilities.js:57)
    │   └── **VisualColor.open()** (class_visual_color.js:64) [as event handler]
    │       └── **dialog_display()** (utilities.js:57)
    ├── **App.transition()** (class_app.js:216) [as event handler]
    └── **App.view.open()** -> **View2D.open()** (class_view_2d.js:255)

--------------------------------------------------------------------------------------------------

### Functions with Multiple Call Sites

**App.row_read()** (class_app.js:156)
├── this.dbF() [external]
└── [called from: ViewDef.open(), View2D.open()]

**App.row_write()** (class_app.js:177)
├── App.dbF() [external]
└── [called from: App.load_table(), ViewDef.save()]

**App.transition()** (class_app.js:216)
├── **View2D.close()** (class_view_2d.js:39)
├── **ViewDef.open()** (class_view_def.js:62)
│   ├── **ViewDef.app.row_read()** -> **App.row_read()** (class_app.js:156)
│   ├── **ViewDef.process_date()** (class_view_def.js:97)
│   └── **VisualColor.load()** (class_visual_color.js:52)
│       └── **VisualColor.status_create()** (class_visual_color.js:144)
└── **View2D.open()** (class_view_2d.js:255)
└── [called from: App.create(), ViewDef.cancel(), ViewDef.save()]

**ViewDef.process_date()** (class_view_def.js:97)
└── [called from: ViewDef.filter_date_close(), ViewDef.open()]

**View2D.open()** (class_view_2d.js:255)
├── **this.appO.row_read()** -> **App.row_read()** (class_app.js:156)
├── **this.css_find()** (class_view_2d.js:55)
├── **TaskCreate.populate()** (class_task_create.js:135)
├── **TaskEdit.populate()** (class_task_edit.js:147)
├── **StatusMenu.populate()** (class_status_menu.js:85)
│   └── **this.mouseenter()** (class_status_menu.js:55) [as event handler]
├── **this.filter()** (class_view_2d.js:214)
│   ├── **this.date_calc()** (class_view_2d.js:121)
│   │   └── **date_to_string()** (utilities.js:14)
│   └── this.dbF() [external]
├── **this.empty_date_fill()** (class_view_2d.js:192)
│   ├── **date_to_string()** (utilities.js:14)
│   └── **this.$day_create()** (class_view_2d.js:153)
├── **this.$day_create()** (class_view_2d.js:153)
└── **this.$task_create()** (class_view_2d.js:330)
└── [called from: App.create(), App.transition()]

**View2D.$day_create()** (class_view_2d.js:153)
├── **DND.drop()** (class_dnd.js:39) [as event handler]
│   ├── **this.copy()** (class_dnd.js:67)
│   │   ├── **DND.search_task_list()** (class_dnd.js:210)
│   │   ├── **endpoint()** (utilities.js:100)
│   │   ├── this.dbF() [external]
│   │   └── **this.view.$task_create()** [undefined - should be $task_create]
│   └── **this.move()** (class_dnd.js:120)
│       ├── **DND.search_task_list()** (class_dnd.js:210)
│       ├── **endpoint()** (utilities.js:100)
│       └── this.dbF() [external]
├── **DayClear.open()** (class_day_clear.js:31) [as event handler]
│   └── **dialog_display()** (utilities.js:57)
└── **TaskCreate.open()** (class_task_create.js:33) [as event handler]
    └── **dialog_display()** (utilities.js:57)
└── [called from: View2D.empty_date_fill(), View2D.open()]

**View2D.$task_create()** (class_view_2d.js:330)
├── **TaskEdit.open()** (class_task_edit.js:36) [as event handler]
│   ├── this.dbF() [external]
│   ├── **endpoint()** (utilities.js:100)
│   ├── **dialog_display()** (utilities.js:57)
│   └── **this.compare()** (class_task_edit.js:98)
├── **DND.dragstart()** (class_dnd.js:25) [as event handler]
└── **StatusMenu.open()** (class_status_menu.js:27) [as event handler]
└── [called from: View2D.open(), TaskCreate.create()]

**FilterDate.close()** (class_filter_date.js:44)
└── [called from: FilterDate.cancel(), FilterDate.save()]

**VisualColor.close()** (class_visual_color.js:44)
└── [called from: VisualColor.cancel(), VisualColor.save()]

**VisualColor.status_create()** (class_visual_color.js:144)
├── **VisualColor.color_click** [undefined - not implemented]
├── **VisualColor.delete** [undefined - should be status_delete]
└── [called from: VisualColor.add(), VisualColor.load()]

**DND.search_task_list()** (class_dnd.js:210)
└── [called from: DND.copy(), DND.move()]

**TaskEdit.close()** (class_task_edit.js:75)
└── [called from: TaskEdit.cancel(), TaskEdit.delete(), TaskEdit.update()]

**TaskCreate.close()** (class_task_create.js:52)
└── [called from: TaskCreate.cancel(), TaskCreate.create()]

**DayClear.close()** (class_day_clear.js:81)
└── [called from: DayClear.clear(), DayClear.cancel()]

**dialog_display()** (utilities.js:57)
└── [called from: FilterDate.open(), VisualColor.open(), View2D.$day_create() -> DayClear.open(),
    View2D.$day_create() -> TaskCreate.open(), View2D.$task_create() -> TaskEdit.open(), ObjectTask.click()]

**endpoint()** (utilities.js:100)
├── fetch() [browser API]
└── [called from: TaskCreate.create(), TaskEdit.open(), TaskEdit.delete(), TaskEdit.update(),
    StatusMenu.close(), DayClear.clear(), DND.copy(), DND.move()]

**date_to_string()** (utilities.js:14)
└── [called from: View2D constructor, View2D.date_calc(), View2D.empty_date_fill()]

---

### utilities.js (other functions)

**view_read()** (utilities.js:23)
└── this.dbF() [external]

**view_write()** (utilities.js:43)
└── this.dbF() [external]

---

### Unused / Potentially Problematic Functions

**App.view_open()** (class_app.js:256)
├── **ViewDef.close()** [undefined]
├── View2D.open() [incorrect reference]
└── [not called anywhere - likely dead code]

**View2D.update_day()** (class_view_2d.js:358)
├── this.dbF() [external]
└── [not called - all calls are commented out]

---

### login_waitlist.js

**IIFE** (login_waitlist.js:1)
├── **$()** (login_waitlist.js:2) [internal helper]
├── **validEmail()** (login_waitlist.js:10)
├── **openModal()** (login_waitlist.js:12)
├── **closeModal()** (login_waitlist.js:24)
└── **saveEmail()** (login_waitlist.js:32)
    ├── **validEmail()** (login_waitlist.js:10)
    └── **closeModal()** (login_waitlist.js:24)

---

### login_forgot.js

**IIFE** (login_forgot.js:2)
├── **$()** (login_forgot.js:3) [internal helper]
└── fetch() [browser API]

---

### account_pane.js

**ready() wrapper** (account_pane.js:3)
├── **$()** (account_pane.js:20) [internal helper]
├── **req()** (account_pane.js:31) [validation helper]
├── **showError()** (account_pane.js:44)
├── **clearError()** (account_pane.js:48)
├── **setDisplay()** (account_pane.js:49)
├── **deactivateAllMenus()** (account_pane.js:50)
├── **isOpen()** (account_pane.js:51)
├── **blockIfOpen()** (account_pane.js:54)
├── **attachMenuBlockers()** (account_pane.js:60)
├── **detachMenuBlockers()** (account_pane.js:63)
├── **showPane()** (account_pane.js:67)
│   ├── **setDisplay()** (account_pane.js:49)
│   ├── **clearError()** (account_pane.js:48)
│   ├── **deactivateAllMenus()** (account_pane.js:50)
│   ├── **attachMenuBlockers()** (account_pane.js:60)
│   └── fetch() [browser API]
├── **showView()** (account_pane.js:95)
│   ├── **clearError()** (account_pane.js:48)
│   ├── **setDisplay()** (account_pane.js:49)
│   ├── **deactivateAllMenus()** (account_pane.js:50)
│   └── **detachMenuBlockers()** (account_pane.js:63)
└── **onSave()** (account_pane.js:111)
    ├── **showError()** (account_pane.js:44)
    ├── **showView()** (account_pane.js:95)
    └── fetch() [browser API]

---

### Potential Issues Found

1. **App.view_open()** (class_app.js:256) references undefined `ViewDef.close()` and incorrect `View2D.open()` - appears to be dead code
2. **DND.copy()** (class_dnd.js:100) calls `this.view.$task_create()` which doesn't exist (should be direct call to View2D.$task_create)
3. **VisualColor.status_create()** (class_visual_color.js:158, 167) references undefined `color_click` and `delete` methods
4. **ObjectTask constructor** (class_object_task.js:35-37) has incorrect static references to instance methods - entire class appears unused
