|
112 | 112 | if(!D)
|
113 | 113 | return
|
114 | 114 |
|
| 115 | + var/datum/asset/asset_cache_datum = get_asset_datum(/datum/asset/simple/vv) |
| 116 | + asset_cache_datum.send(usr) |
115 | 117 |
|
116 | 118 | var/islist = islist(D)
|
117 | 119 | var/isclient = isclient(D)
|
|
249 | 251 |
|
250 | 252 | var/html = {"
|
251 | 253 | <html>
|
252 |
| - <meta charset="UTF-8"> |
253 | 254 | <head>
|
| 255 | + <meta charset="UTF-8"> |
254 | 256 | <title>[title]</title>
|
255 |
| - <style> |
256 |
| - body { |
257 |
| - font-family: Verdana, sans-serif; |
258 |
| - font-size: 9pt; |
259 |
| - } |
260 |
| - .value { |
261 |
| - font-family: "Courier New", monospace; |
262 |
| - font-size: 8pt; |
263 |
| - } |
264 |
| - .var { |
265 |
| - display: none; |
266 |
| - } |
267 |
| - .var.visible { |
268 |
| - display: list-item; |
269 |
| - } |
270 |
| - .var.selected { |
271 |
| - background-color: "#ffee88"; |
272 |
| - } |
273 |
| - </style> |
| 257 | + <link rel="stylesheet" type="text/css" href="[SSassets.transport.get_asset_url("view_variables.css")]"> |
274 | 258 | </head>
|
275 | 259 | <body onload='selectTextField(); updateSearch()' onkeydown='return checkreload()' onkeyup='updateSearch()'>
|
276 | 260 | <script type="text/javascript">
|
|
472 | 456 | usr << browse(html, "window=variables[refid];size=475x650")
|
473 | 457 |
|
474 | 458 | #define VV_HTML_ENCODE(thing) ( sanitize ? html_encode(thing) : thing )
|
475 |
| -/proc/debug_variable(name, value, level, datum/DA = null, sanitize = TRUE) |
| 459 | +/proc/debug_variable(name, value, level, datum/owner, sanitize = TRUE) |
476 | 460 | var/header
|
477 |
| - if(DA) |
478 |
| - if(islist(DA)) |
479 |
| - var/list/debug_list = DA |
| 461 | + if(owner) |
| 462 | + if(islist(owner)) |
| 463 | + var/list/debug_list = owner |
480 | 464 | var/index = name
|
481 | 465 | if(value)
|
482 | 466 | name = debug_list[name] // name is really the index until this line
|
483 | 467 | else
|
484 | 468 | value = debug_list[name]
|
485 |
| - header = "<li class='vars visible'>(<a href='byond://?_src_=vars;listedit=\ref[DA];index=[index]'>E</a>) (<a href='byond://?_src_=vars;listchange=\ref[DA];index=[index]'>C</a>) (<a href='byond://?_src_=vars;listremove=\ref[DA];index=[index]'>-</a>) " |
| 469 | + header = "<li class='vars visible'>(<a href='byond://?_src_=vars;listedit=\ref[owner];index=[index]'>E</a>) (<a href='byond://?_src_=vars;listchange=\ref[owner];index=[index]'>C</a>) (<a href='byond://?_src_=vars;listremove=\ref[owner];index=[index]'>-</a>) " |
486 | 470 | else
|
487 |
| - header = "<li class='vars visible'>(<a href='byond://?_src_=vars;datumedit=[DA.UID()];varnameedit=[name]'>E</a>) (<a href='byond://?_src_=vars;datumchange=[DA.UID()];varnamechange=[name]'>C</a>) (<a href='byond://?_src_=vars;datummass=[DA.UID()];varnamemass=[name]'>M</a>) " |
| 471 | + header = "<li class='vars visible'>(<a href='byond://?_src_=vars;datumedit=[owner.UID()];varnameedit=[name]'>E</a>) (<a href='byond://?_src_=vars;datumchange=[owner.UID()];varnamechange=[name]'>C</a>) (<a href='byond://?_src_=vars;datummass=[owner.UID()];varnamemass=[name]'>M</a>) " |
488 | 472 | else
|
489 | 473 | header = "<li>"
|
490 | 474 |
|
491 |
| - var/item |
| 475 | + var/name_part = VV_HTML_ENCODE(name) |
| 476 | + if(level > 0 || islist(owner)) //handling keys in assoc lists |
| 477 | + if(isdatum(name)) |
| 478 | + var/datum/datum_key = name |
| 479 | + name_part = "<a href='byond://?_src_=vars;Vars=[datum_key.UID()]'>[VV_HTML_ENCODE(name)] \ref[datum_key]</a>" |
| 480 | + else if(isclient(name)) |
| 481 | + var/client/client_key = name |
| 482 | + name_part = "<a href='byond://?_src_=vars;Vars=[client_key.UID()]'>[VV_HTML_ENCODE(client_key)] \ref[client_key]</a> ([client_key] [client_key.type])" |
| 483 | + else if(islist(name)) |
| 484 | + var/list/list_value = name |
| 485 | + name_part = "<a href='byond://?_src_=vars;VarsList=\ref[list_value]'> /list ([length(list_value)]) \ref[name]</a>" |
| 486 | + |
| 487 | + var/item = _debug_variable_value(name, value, level, owner, sanitize) |
| 488 | + |
| 489 | + return "[header][name_part] = [item]</li>" |
| 490 | + |
| 491 | +/proc/_debug_variable_value(name, value, level, datum/owner, sanitize) |
| 492 | + |
| 493 | + . = "<font color='red'>DISPLAY_ERROR:</font> ([value] \ref[value]s)" |
| 494 | + |
492 | 495 | if(isnull(value))
|
493 |
| - item = "[VV_HTML_ENCODE(name)] = <span class='value'>null</span>" |
| 496 | + return "<span class='value'>null</span>" |
494 | 497 |
|
495 | 498 | else if(is_color_text(value))
|
496 |
| - item = "[VV_HTML_ENCODE(name)] = <span class='value'><span class='colorbox' style='width: 1em; background-color: [value]; border: 1px solid black; display: inline-block'> </span> \"[value]\"</span>" |
| 499 | + return "<span class='value'><span class='colorbox' style='width: 1em; background-color: [value]; border: 1px solid black; display: inline-block'> </span> \"[value]\"</span>" |
497 | 500 |
|
498 | 501 | else if(istext(value))
|
499 |
| - item = "[VV_HTML_ENCODE(name)] = <span class='value'>\"[VV_HTML_ENCODE(value)]\"</span>" |
| 502 | + return "<span class='value'>\"[VV_HTML_ENCODE(value)]\"</span>" |
500 | 503 |
|
501 | 504 | else if(isicon(value))
|
502 | 505 | #ifdef VARSICON
|
503 |
| - item = "[name] = /icon (<span class='value'>[value]</span>) [bicon(value, use_class=0)]" |
| 506 | + return "/icon (<span class='value'>[value]</span>) [bicon(value, use_class=0)]" |
504 | 507 | #else
|
505 |
| - item = "[name] = /icon (<span class='value'>[value]</span>)" |
| 508 | + return "/icon (<span class='value'>[value]</span>)" |
506 | 509 | #endif
|
507 | 510 |
|
508 | 511 | else if(istype(value, /image))
|
509 | 512 | var/image/I = value
|
510 | 513 | #ifdef VARSICON
|
511 |
| - item = "<a href='byond://?_src_=vars;Vars=[I.UID()]'>[name] \ref[value]</a> = /image (<span class='value'>[value]</span>) [bicon(value, use_class=0)]" |
| 514 | + return "<a href='byond://?_src_=vars;Vars=[I.UID()]'>[name] \ref[value]</a> /image (<span class='value'>[value]</span>) [bicon(value, use_class=0)]" |
512 | 515 | #else
|
513 |
| - item = "<a href='byond://?_src_=vars;Vars=[I.UID()]'>[name] \ref[value]</a> = /image (<span class='value'>[value]</span>)" |
| 516 | + return "<a href='byond://?_src_=vars;Vars=[I.UID()]'>[name] \ref[value]</a> /image (<span class='value'>[value]</span>)" |
514 | 517 | #endif
|
515 | 518 |
|
516 | 519 | else if(isfile(value))
|
517 |
| - item = "[VV_HTML_ENCODE(name)] = <span class='value'>'[value]'</span>" |
| 520 | + return "<span class='value'>'[value]'</span>" |
518 | 521 |
|
519 | 522 | else if(istype(value, /datum))
|
520 | 523 | var/datum/D = value
|
521 |
| - item = "<a href='byond://?_src_=vars;Vars=[D.UID()]'>[VV_HTML_ENCODE(name)] \ref[value]</a> = [D.type]" |
| 524 | + return D.debug_variable_value(sanitize) |
522 | 525 |
|
523 |
| - else if(isclient(value)) |
524 |
| - var/client/C = value |
525 |
| - item = "<a href='byond://?_src_=vars;Vars=[C.UID()]'>[VV_HTML_ENCODE(name)] \ref[value]</a> = [C] [C.type]" |
526 |
| -// |
527 | 526 | else if(islist(value))
|
528 | 527 | var/list/L = value
|
529 | 528 | var/list/items = list()
|
|
540 | 539 |
|
541 | 540 | items += debug_variable(key, val, level + 1, sanitize = sanitize)
|
542 | 541 |
|
543 |
| - if(isdatum(name)) |
544 |
| - item = "<a href='byond://?_src_=vars;VarsList=\ref[name]'>[VV_HTML_ENCODE(name)]</a> = <a href='byond://?_src_=vars;VarsList=\ref[L]'>/list ([length(L)])</a><ul>[items.Join()]</ul>" |
545 |
| - else |
546 |
| - item = "<a href='byond://?_src_=vars;VarsList=\ref[L]'>[VV_HTML_ENCODE(name)] = /list ([length(L)])</a><ul>[items.Join()]</ul>" |
| 542 | + return "<a href='byond://?_src_=vars;VarsList=\ref[L]'>/list ([length(L)])</a><ul>[items.Join()]</ul>" |
547 | 543 |
|
548 | 544 | else
|
549 |
| - item = "<a href='byond://?_src_=vars;VarsList=\ref[L]'>[VV_HTML_ENCODE(name)] = /list ([length(L)])</a>" |
| 545 | + return "<a href='byond://?_src_=vars;VarsList=\ref[L]'>/list ([length(L)])</a>" |
550 | 546 |
|
551 | 547 | else if(name in GLOB.bitfields)
|
552 |
| - item = "[VV_HTML_ENCODE(name)] = <span class='value'>[VV_HTML_ENCODE(translate_bitfield(VV_BITFIELD, name, value))]</span>" |
| 548 | + return "<span class='value'>[VV_HTML_ENCODE(translate_bitfield(VV_BITFIELD, name, value))]</span>" |
553 | 549 | else
|
554 |
| - item = "[VV_HTML_ENCODE(name)] = <span class='value'>[VV_HTML_ENCODE(value)]</span>" |
555 |
| - |
556 |
| - return "[header][item]</li>" |
557 |
| - |
558 |
| -#undef VV_HTML_ENCODE |
| 550 | + return "<span class='value'>[VV_HTML_ENCODE(value)]</span>" |
| 551 | + |
| 552 | +/datum/proc/debug_variable_value(sanitize) |
| 553 | + return "<a href='byond://?_src_=vars;Vars=[UID()]'>[VV_HTML_ENCODE(src)] \ref[src]</a> ([type])" |
| 554 | + |
| 555 | +/matrix/debug_variable_value(sanitize) |
| 556 | + return {"<span class='value'> |
| 557 | + <table class='matrixbrak'><tbody><tr><td class='lbrak'> </td><td> |
| 558 | + <table class='matrix'> |
| 559 | + <tbody> |
| 560 | + <tr><td>[a]</td><td>[d]</td><td>0</td></tr> |
| 561 | + <tr><td>[b]</td><td>[e]</td><td>0</td></tr> |
| 562 | + <tr><td>[c]</td><td>[f]</td><td>1</td></tr> |
| 563 | + </tbody> |
| 564 | + </table></td><td class='rbrak'> </td></tr></tbody></table></span>"} //TODO link to modify_transform wrapper for all matrices |
559 | 565 |
|
560 | 566 | /client/proc/view_var_Topic(href, href_list, hsrc)
|
561 | 567 | //This should all be moved over to datum/admins/Topic() or something ~Carn
|
|
1478 | 1484 | to_chat(src, "<span class='debug'>Now showing GLOB.[var_search].</span>")
|
1479 | 1485 | return debug_variables(result)
|
1480 | 1486 | to_chat(src, "<span class='debug'>GLOB.[var_search] returned [result].</span>")
|
| 1487 | + |
| 1488 | +#undef VV_HTML_ENCODE |
0 commit comments