From 203a508acd01dca643564e61671fabf269428c6d Mon Sep 17 00:00:00 2001 From: Henri215 <77684085+Henri215@users.noreply.github.com> Date: Mon, 13 Mar 2023 19:16:36 -0300 Subject: [PATCH] Ports SS220 AutoComplete for Documents (#20481) * documents_autocomplete * part 2 * final adjustments * Removed some comments by accident * Apply suggestions from code review Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> * Duplicate definition * fixing runtime * S43NW review --------- Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> --- code/modules/paperwork/paper.dm | 110 ++++++++++++++++++-------------- 1 file changed, 63 insertions(+), 47 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c5743dd64d0..de940873f7c 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -250,11 +250,11 @@ /obj/item/paper/proc/updateinfolinks() info_links = info - var/i = 0 - for(i=1,i<=fields,i++) - addtofield(i, "write", 1) - info_links = info_links + "write" - + for(var/i in 1 to length(fields)) + var/write_1 = "write" + var/write_2 = "\[a\]" + addtofield(i, "[write_1][write_2]", 1) + info_links = info_links + "write" + "\[a\]" /obj/item/paper/proc/clearpaper() info = null @@ -304,53 +304,69 @@ \[time\] : Inserts the current station time in HH:MM:SS.
"}, "window=paper_help") +/obj/item/paper/proc/topic_href_write(id, input_element) + var/obj/item/item_write = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen. + add_hiddenprint(usr) // No more forging nasty documents as someone else, you jerks + if(!istype(item_write, /obj/item/pen) && !istype(item_write, /obj/item/toy/crayon)) + return + if(loc != usr && !Adjacent(usr) && !((istype(loc, /obj/item/clipboard) || istype(loc, /obj/item/folder)) && (usr in get_turf(src) || loc.Adjacent(usr)))) + return // If paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr + input_element = parsepencode(input_element, item_write, usr) // Encode everything from pencode to html + if(id != "end") + addtofield(text2num(id), input_element) // He wants to edit a field, let him. + else + info += input_element // Oh, he wants to edit to the end of the file, let him. + populatefields() + updateinfolinks() + item_write.on_write(src, usr) + show_content(usr, forceshow = TRUE, infolinks = TRUE) + update_icon() + /obj/item/paper/Topic(href, href_list) ..() if(!usr || (usr.stat || usr.restrained())) return - - if(href_list["write"]) + if(href_list["auto_write"]) + var/id = href_list["auto_write"] + var/const/sign_text = "\[Sign\]" + var/const/time_text = "\[Current time\]" + var/const/date_text = "\[Current date\]" + var/const/num_text = "\[Account number\]" + var/const/pin_text = "\[PIN\]" + var/const/station_text = "\[Station name\]" + var/list/menu_list = list() //text items in the menu + menu_list.Add(usr.real_name) //the real name of the character, even if it is hidden + if(usr.real_name != usr.name || usr.name != "unknown") //if the player is masked or the name is different a new answer option is added + menu_list.Add("[usr.name]") + menu_list.Add(usr.job, //current job + num_text, //account number + pin_text, //pin code number + sign_text, //signature + time_text, //time + date_text, //date + station_text, // station name + usr.gender, //current gender + usr.dna.species //current species + ) + var/input_element = input("Select the text you want to add:", "Select item") as null|anything in menu_list + switch(input_element) //format selected menu items in pencode and internal data + if(sign_text) + input_element = "\[sign\]" + if(time_text) + input_element = "\[time\]" + if(date_text) + input_element = "\[date\]" + if(station_text) + input_element = "\[station\]" + if(num_text) + input_element = usr.mind.initial_account.account_number + if(pin_text) + input_element = usr.mind.initial_account.account_pin + topic_href_write(id, input_element) + if(href_list["write"] ) var/id = href_list["write"] - //var/t = strip_html_simple(input(usr, "What text do you wish to add to " + (id=="end" ? "the end of the paper" : "field "+id) + "?", "[name]", null),8192) as message - //var/t = strip_html_simple(input("Enter what you want to write:", "Write", null, null) as message, MAX_MESSAGE_LEN) - var/t = input("Enter what you want to write:", "Write", null, null) as message - var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen. - add_hiddenprint(usr) // No more forging nasty documents as someone else, you jerks - if(!is_pen(i)) - if(!istype(i, /obj/item/toy/crayon)) - return - - - // if paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr - if(src.loc != usr && !src.Adjacent(usr) && !((istype(src.loc, /obj/item/clipboard) || istype(src.loc, /obj/item/folder)) && (src.loc.loc == usr || src.loc.Adjacent(usr)) ) ) - return -/* - t = checkhtml(t) - - // check for exploits - for(var/bad in paper_blacklist) - if(findtext(t,bad)) - to_chat(usr, "You think to yourself, \"Hm.. this is only paper...\"") - log_admin("PAPER: [key_name(usr)] tried to use forbidden word in [src]: [bad].") - message_admins("PAPER: [key_name_admin(usr)] tried to use forbidden word in [src]: [bad].") - return -*/ - t = parsepencode(t, i, usr) // Encode everything from pencode to html - - if(id!="end") - addtofield(text2num(id), t) // He wants to edit a field, let him. - else - info += t // Oh, he wants to edit to the end of the file, let him. - - populatefields() - updateinfolinks() - - i.on_write(src,usr) - - show_content(usr, forceshow = 1, infolinks = 1) - - update_icon() - + var/input_element = input("Enter what you want to write:", "Write", null, null) as message + topic_href_write(id, input_element) /obj/item/paper/attackby(obj/item/P, mob/living/user, params) ..()