mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
* Removes Unicode stuff * Fixes capitalize() and examine * Not important but how did this happen * No more emoji in say or HTML in me * Clarifies comment * Better HTML sanitization * Rebuilds dll * Fixes some browser windows * Fixes telecomms scripts (lazily) This is the easy way out, but could probably be made faster by doing the byte counting ourselves
195 lines
5.5 KiB
Plaintext
195 lines
5.5 KiB
Plaintext
/datum/browser
|
|
var/mob/user
|
|
var/title
|
|
var/window_id // window_id is used as the window name for browse and onclose
|
|
var/width = 0
|
|
var/height = 0
|
|
var/atom/ref = null
|
|
var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id
|
|
var/stylesheets[0]
|
|
var/scripts[0]
|
|
var/title_image
|
|
var/head_elements
|
|
var/body_elements
|
|
var/head_content = ""
|
|
var/content = ""
|
|
|
|
|
|
/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
|
|
|
|
user = nuser
|
|
window_id = nwindow_id
|
|
if (ntitle)
|
|
title = format_text(ntitle)
|
|
if (nwidth)
|
|
width = nwidth
|
|
if (nheight)
|
|
height = nheight
|
|
if (nref)
|
|
ref = nref
|
|
add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs
|
|
|
|
/datum/browser/proc/add_head_content(nhead_content)
|
|
head_content = nhead_content
|
|
|
|
/datum/browser/proc/set_window_options(nwindow_options)
|
|
window_options = nwindow_options
|
|
|
|
/datum/browser/proc/set_title_image(ntitle_image)
|
|
//title_image = ntitle_image
|
|
|
|
/datum/browser/proc/add_stylesheet(name, file)
|
|
stylesheets[name] = file
|
|
|
|
/datum/browser/proc/remove_stylesheets()
|
|
stylesheets = list()
|
|
|
|
/datum/browser/proc/add_script(name, file)
|
|
scripts[name] = file
|
|
|
|
/datum/browser/proc/set_content(ncontent)
|
|
content = ncontent
|
|
|
|
/datum/browser/proc/add_content(ncontent)
|
|
content += ncontent
|
|
|
|
/datum/browser/proc/get_header()
|
|
var/key
|
|
var/filename
|
|
for (key in stylesheets)
|
|
filename = "[ckey(key)].css"
|
|
user << browse_rsc(stylesheets[key], filename)
|
|
head_content += "<link rel='stylesheet' type='text/css' href='[filename]'>"
|
|
|
|
for (key in scripts)
|
|
filename = "[ckey(key)].js"
|
|
user << browse_rsc(scripts[key], filename)
|
|
head_content += "<script type='text/javascript' src='[filename]'></script>"
|
|
|
|
var/title_attributes = "class='uiTitle'"
|
|
if (title_image)
|
|
title_attributes = "class='uiTitle icon' style='background-image: url([title_image]);'"
|
|
|
|
return {"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
<head>
|
|
[head_content]
|
|
</head>
|
|
<body scroll=auto>
|
|
<div class='uiWrapper'>
|
|
[title ? "<div class='uiTitleWrapper'><div [title_attributes]><tt>[title]</tt></div></div>" : ""]
|
|
<div class='uiContent'>
|
|
"}
|
|
|
|
/datum/browser/proc/get_footer()
|
|
return {"
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>"}
|
|
|
|
/datum/browser/proc/get_content()
|
|
return {"
|
|
[get_header()]
|
|
[content]
|
|
[get_footer()]
|
|
"}
|
|
|
|
/datum/browser/proc/open(var/use_onclose = 1)
|
|
var/window_size = ""
|
|
if (width && height)
|
|
window_size = "size=[width]x[height];"
|
|
user << browse(get_content(), "window=[window_id];[window_size][window_options]")
|
|
if (use_onclose)
|
|
onclose(user, window_id, ref)
|
|
|
|
/datum/browser/proc/close()
|
|
user << browse(null, "window=[window_id]")
|
|
|
|
// This will allow you to show an icon in the browse window
|
|
// This is added to mob so that it can be used without a reference to the browser object
|
|
// There is probably a better place for this...
|
|
/mob/proc/browse_rsc_icon(icon, icon_state, dir = -1)
|
|
/*
|
|
var/icon/I
|
|
if (dir >= 0)
|
|
I = new /icon(icon, icon_state, dir)
|
|
else
|
|
I = new /icon(icon, icon_state)
|
|
dir = "default"
|
|
|
|
var/filename = "[ckey("[icon]_[icon_state]_[dir]")].png"
|
|
src << browse_rsc(I, filename)
|
|
return filename
|
|
*/
|
|
|
|
/proc/format_text(text)
|
|
return replacetext(replacetext(text,"\proper ",""),"\improper ","")
|
|
|
|
// to_chat(world, "OnClose [user]: [windowid] : ["on-close=\".windowclose [param]\""]")
|
|
|
|
|
|
// the on-close client verb
|
|
// called when a browser popup window is closed after registering with proc/onclose()
|
|
// if a valid atom reference is supplied, call the atom's Topic() with "close=1"
|
|
// otherwise, just reset the client mob's machine var.
|
|
//
|
|
/client/verb/windowclosed(var/atomref as text)
|
|
set hidden = 1 // hide this verb from the user's panel
|
|
set name = ".windowclose" // no autocomplete on cmd line
|
|
|
|
// to_chat(world, "windowclose: [atomref]")
|
|
if(atomref!="null") // if passed a real atomref
|
|
var/hsrc = locate(atomref) // find the reffed atom
|
|
var/href = "close=1"
|
|
if(hsrc)
|
|
// to_chat(world, "[src] Topic [href] [hsrc]")
|
|
usr = src.mob
|
|
src.Topic(href, params2list(href), hsrc) // this will direct to the atom's
|
|
return // Topic() proc via client.Topic()
|
|
|
|
// no atomref specified (or not found)
|
|
// so just reset the user mob's machine var
|
|
if(src && src.mob)
|
|
// to_chat(world, "[src] was [src.mob.machine], setting to null")
|
|
src.mob.unset_machine()
|
|
return
|
|
|
|
///////////////////////
|
|
// CLEAN UI STYLE.
|
|
///////////////////////
|
|
|
|
/datum/browser/clean/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
|
|
..(nuser,nwindow_id,ntitle,nwidth,nheight,nref)
|
|
add_stylesheet("common",'html/browser/clean.css') // Clean style.
|
|
|
|
// Re-implemented without the extra divs.
|
|
/datum/browser/clean/get_header()
|
|
var/key
|
|
var/filename
|
|
for (key in stylesheets)
|
|
filename = "[ckey(key)].css"
|
|
user << browse_rsc(stylesheets[key], filename)
|
|
head_content += "<link rel='stylesheet' type='text/css' href='[filename]'>"
|
|
|
|
for (key in scripts)
|
|
filename = "[ckey(key)].js"
|
|
user << browse_rsc(scripts[key], filename)
|
|
head_content += "<script type='text/javascript' src='[filename]'></script>"
|
|
|
|
return {"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<head>
|
|
[head_content]
|
|
</head>
|
|
<body scroll=auto>
|
|
"}
|
|
|
|
/datum/browser/clean/get_footer()
|
|
return {"
|
|
</body>
|
|
</html>"}
|