mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 23:17:02 +01:00
Merge branch 'master' into Holoparasite-spended
This commit is contained in:
@@ -381,6 +381,8 @@
|
||||
if(!welded)
|
||||
if(open)
|
||||
for(var/obj/item/W in src)
|
||||
if(istype(W, /obj/item/pipe))
|
||||
continue
|
||||
W.forceMove(get_turf(src))
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
// /datum signals
|
||||
#define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component)
|
||||
#define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component)
|
||||
#define COMSIG_PARENT_QDELETED "parent_qdeleted" //before a datum's Destroy() is called: ()
|
||||
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
|
||||
#define COMSIG_PARENT_QDELETED "parent_qdeleted" //after a datum's Destroy() is called: (force, qdel_hint), at this point none of the other components chose to interrupt qdel and Destroy has been called
|
||||
|
||||
// /atom signals
|
||||
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
|
||||
|
||||
@@ -11,14 +11,12 @@
|
||||
#define QDEL_HINT_IFFAIL_FINDREFERENCE 6 //Above but only if gc fails.
|
||||
//defines for the gc_destroyed var
|
||||
|
||||
#define GC_QUEUE_PREQUEUE 1
|
||||
#define GC_QUEUE_CHECK 2
|
||||
#define GC_QUEUE_HARDDELETE 3
|
||||
#define GC_QUEUE_COUNT 3 //increase this when adding more steps.
|
||||
#define GC_QUEUE_CHECK 1
|
||||
#define GC_QUEUE_HARDDELETE 2
|
||||
#define GC_QUEUE_COUNT 2 //increase this when adding more steps.
|
||||
|
||||
#define GC_QUEUED_FOR_QUEUING -1
|
||||
#define GC_QUEUED_FOR_HARD_DEL -2
|
||||
#define GC_CURRENTLY_BEING_QDELETED -3
|
||||
#define GC_CURRENTLY_BEING_QDELETED -2
|
||||
|
||||
#define QDELING(X) (X.gc_destroyed)
|
||||
#define QDELETED(X) (!X || QDELING(X))
|
||||
|
||||
@@ -59,7 +59,6 @@ SUBSYSTEM_DEF(garbage)
|
||||
msg += " | Fail:[fail_counts.Join(",")]"
|
||||
..(msg)
|
||||
|
||||
|
||||
/datum/controller/subsystem/garbage/Shutdown()
|
||||
//Adds the del() log to the qdel log file
|
||||
var/list/dellog = list()
|
||||
@@ -86,41 +85,21 @@ SUBSYSTEM_DEF(garbage)
|
||||
|
||||
/datum/controller/subsystem/garbage/fire()
|
||||
//the fact that this resets its processing each fire (rather then resume where it left off) is intentional.
|
||||
var/queue = GC_QUEUE_PREQUEUE
|
||||
var/queue = GC_QUEUE_CHECK
|
||||
|
||||
while(state == SS_RUNNING)
|
||||
switch(queue)
|
||||
if(GC_QUEUE_PREQUEUE)
|
||||
HandlePreQueue()
|
||||
queue = GC_QUEUE_PREQUEUE + 1
|
||||
if(GC_QUEUE_CHECK)
|
||||
HandleQueue(GC_QUEUE_CHECK)
|
||||
queue = GC_QUEUE_CHECK + 1
|
||||
if(GC_QUEUE_HARDDELETE)
|
||||
HandleQueue(GC_QUEUE_HARDDELETE)
|
||||
if(state == SS_PAUSED) //make us wait again before the next run.
|
||||
state = SS_RUNNING
|
||||
break
|
||||
|
||||
if(state == SS_PAUSED) //make us wait again before the next run.
|
||||
state = SS_RUNNING
|
||||
|
||||
//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond.
|
||||
//Don't attempt to optimize, not worth the effort.
|
||||
/datum/controller/subsystem/garbage/proc/HandlePreQueue()
|
||||
var/list/tobequeued = queues[GC_QUEUE_PREQUEUE]
|
||||
var/static/count = 0
|
||||
if(count)
|
||||
var/c = count
|
||||
count = 0 //so if we runtime on the Cut, we don't try again.
|
||||
tobequeued.Cut(1, c + 1)
|
||||
|
||||
for(var/ref in tobequeued)
|
||||
count++
|
||||
Queue(ref, GC_QUEUE_PREQUEUE + 1)
|
||||
if(MC_TICK_CHECK)
|
||||
break
|
||||
if(count)
|
||||
tobequeued.Cut(1, count + 1)
|
||||
count = 0
|
||||
|
||||
/datum/controller/subsystem/garbage/proc/HandleQueue(level = GC_QUEUE_CHECK)
|
||||
if(level == GC_QUEUE_CHECK)
|
||||
@@ -142,7 +121,7 @@ SUBSYSTEM_DEF(garbage)
|
||||
if(!refID)
|
||||
count++
|
||||
if(MC_TICK_CHECK)
|
||||
break
|
||||
return
|
||||
continue
|
||||
|
||||
var/GCd_at_time = queue[refID]
|
||||
@@ -161,7 +140,7 @@ SUBSYSTEM_DEF(garbage)
|
||||
reference_find_on_fail -= refID //It's deleted we don't care anymore.
|
||||
#endif
|
||||
if(MC_TICK_CHECK)
|
||||
break
|
||||
return
|
||||
continue
|
||||
|
||||
// Something's still referring to the qdel'd object.
|
||||
@@ -184,27 +163,20 @@ SUBSYSTEM_DEF(garbage)
|
||||
if(GC_QUEUE_HARDDELETE)
|
||||
HardDelete(D)
|
||||
if(MC_TICK_CHECK)
|
||||
break
|
||||
return
|
||||
continue
|
||||
|
||||
Queue(D, level + 1)
|
||||
|
||||
if(MC_TICK_CHECK)
|
||||
break
|
||||
return
|
||||
if(count)
|
||||
queue.Cut(1, count + 1)
|
||||
count = 0
|
||||
|
||||
/datum/controller/subsystem/garbage/proc/PreQueue(datum/D)
|
||||
if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
|
||||
queues[GC_QUEUE_PREQUEUE] += D
|
||||
D.gc_destroyed = GC_QUEUED_FOR_QUEUING
|
||||
|
||||
/datum/controller/subsystem/garbage/proc/Queue(datum/D, level = GC_QUEUE_CHECK)
|
||||
if(isnull(D))
|
||||
return
|
||||
if(D.gc_destroyed == GC_QUEUED_FOR_HARD_DEL)
|
||||
level = GC_QUEUE_HARDDELETE
|
||||
if(level > GC_QUEUE_COUNT)
|
||||
HardDelete(D)
|
||||
return
|
||||
@@ -250,11 +222,6 @@ SUBSYSTEM_DEF(garbage)
|
||||
message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time / 10] seconds to delete).")
|
||||
postpone(time)
|
||||
|
||||
/datum/controller/subsystem/garbage/proc/HardQueue(datum/D)
|
||||
if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
|
||||
queues[GC_QUEUE_PREQUEUE] += D
|
||||
D.gc_destroyed = GC_QUEUED_FOR_HARD_DEL
|
||||
|
||||
/datum/controller/subsystem/garbage/Recover()
|
||||
if(istype(SSgarbage.queues))
|
||||
for(var/i in 1 to SSgarbage.queues.len)
|
||||
@@ -294,11 +261,13 @@ SUBSYSTEM_DEF(garbage)
|
||||
|
||||
|
||||
if(isnull(D.gc_destroyed))
|
||||
D.SendSignal(COMSIG_PARENT_QDELETED)
|
||||
if(D.SendSignal(COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted
|
||||
return
|
||||
D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED
|
||||
var/start_time = world.time
|
||||
var/start_tick = world.tick_usage
|
||||
var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
|
||||
D.SendSignal(COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy
|
||||
if(world.time != start_time)
|
||||
I.slept_destroy++
|
||||
else
|
||||
@@ -307,7 +276,7 @@ SUBSYSTEM_DEF(garbage)
|
||||
return
|
||||
switch(hint)
|
||||
if(QDEL_HINT_QUEUE) //qdel should queue the object for deletion.
|
||||
SSgarbage.PreQueue(D)
|
||||
SSgarbage.Queue(D)
|
||||
if(QDEL_HINT_IWILLGC)
|
||||
D.gc_destroyed = world.time
|
||||
return
|
||||
@@ -327,18 +296,18 @@ SUBSYSTEM_DEF(garbage)
|
||||
#endif
|
||||
I.no_respect_force++
|
||||
|
||||
SSgarbage.PreQueue(D)
|
||||
if(QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate()
|
||||
SSgarbage.HardQueue(D)
|
||||
SSgarbage.Queue(D)
|
||||
if(QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete
|
||||
SSgarbage.Queue(D, GC_QUEUE_HARDDELETE)
|
||||
if(QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste.
|
||||
SSgarbage.HardDelete(D)
|
||||
if(QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion.
|
||||
SSgarbage.PreQueue(D)
|
||||
SSgarbage.Queue(D)
|
||||
#ifdef TESTING
|
||||
D.find_references()
|
||||
#endif
|
||||
if(QDEL_HINT_IFFAIL_FINDREFERENCE)
|
||||
SSgarbage.PreQueue(D)
|
||||
SSgarbage.Queue(D)
|
||||
#ifdef TESTING
|
||||
SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE
|
||||
#endif
|
||||
@@ -348,7 +317,7 @@ SUBSYSTEM_DEF(garbage)
|
||||
testing("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.")
|
||||
#endif
|
||||
I.no_hint++
|
||||
SSgarbage.PreQueue(D)
|
||||
SSgarbage.Queue(D)
|
||||
else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
|
||||
CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic")
|
||||
|
||||
@@ -463,4 +432,4 @@ SUBSYSTEM_DEF(garbage)
|
||||
CHECK_TICK
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -347,7 +347,7 @@
|
||||
G.icon_state = "[theme][color]"
|
||||
G.icon_dead = "[theme][color]"
|
||||
to_chat(user, "[G.magic_fluff_string].")
|
||||
|
||||
|
||||
/obj/item/guardiancreator/choose
|
||||
random = FALSE
|
||||
|
||||
|
||||
@@ -391,6 +391,9 @@ Class Procs:
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/proc/is_operational()
|
||||
return !(stat & (NOPOWER|BROKEN|MAINT))
|
||||
|
||||
/obj/machinery/CheckParts(list/parts_list)
|
||||
..()
|
||||
RefreshParts()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -180,7 +180,6 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
|
||||
var/turf/simulated/floor/plating/P = pry_tile(CB, user, TRUE)
|
||||
if(!istype(P))
|
||||
return
|
||||
update_icon()
|
||||
P.attackby(T, user, params)
|
||||
|
||||
/turf/simulated/floor/proc/pry_tile(obj/item/C, mob/user, silent = FALSE)
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
/turf/simulated/floor/plating/New()
|
||||
..()
|
||||
icon_plating = icon_state
|
||||
if(icon == 'icons/turf/floors/plating.dmi')
|
||||
smooth = SMOOTH_MORE
|
||||
canSmoothWith = list(/turf/simulated/floor/plating, /turf/space)
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/floor/plating/update_icon()
|
||||
@@ -25,7 +22,6 @@
|
||||
return
|
||||
if(!broken && !burnt)
|
||||
icon_state = icon_plating //Because asteroids are 'platings' too.
|
||||
underlays += image(icon, icon_state)
|
||||
|
||||
/turf/simulated/floor/plating/attackby(obj/item/C, mob/user, params)
|
||||
if(..())
|
||||
|
||||
@@ -226,8 +226,6 @@
|
||||
for(var/obj/structure/cable/C in contents)
|
||||
qdel(C)
|
||||
|
||||
smooth_icon(src)
|
||||
|
||||
/turf/simulated/AfterChange(ignore_air, keep_cabling = FALSE)
|
||||
..()
|
||||
RemoveLattice()
|
||||
|
||||
@@ -11,7 +11,7 @@ var/list/chem_t2_reagents = list(
|
||||
|
||||
var/list/chem_t3_reagents = list(
|
||||
"ethanol", "chlorine", "potassium",
|
||||
"aluminium", "radium", "fluorine",
|
||||
"aluminum", "radium", "fluorine",
|
||||
"iron", "fuel", "silver",
|
||||
"stable_plasma"
|
||||
)
|
||||
|
||||
@@ -462,10 +462,10 @@ var/global/list/rockTurfEdgeCache = list(
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/New()
|
||||
var/proper_name = name
|
||||
..()
|
||||
name = proper_name
|
||||
if(prob(20))
|
||||
icon_state = "asteroid[rand(0,12)]"
|
||||
..()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/ex_act(severity, target)
|
||||
switch(severity)
|
||||
|
||||
@@ -38,6 +38,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
var/obj/item/paicard/card = locate(href_list["device"])
|
||||
if(card.pai)
|
||||
return
|
||||
if(usr.incapacitated() || isobserver(usr) || !card.Adjacent(usr))
|
||||
return
|
||||
if(istype(card,/obj/item/paicard) && istype(candidate,/datum/paiCandidate))
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
if(!candidate.name)
|
||||
|
||||
@@ -4,10 +4,11 @@ var/global/file_uid = 0
|
||||
var/filename = "NewFile" // Placeholder. No spacebars
|
||||
var/filetype = "XXX" // File full names are [filename].[filetype] so like NewFile.XXX in this case
|
||||
var/size = 1 // File size in GQ. Integers only!
|
||||
var/obj/item/computer_hardware/hard_drive/holder // Holder that contains this file.
|
||||
var/obj/item/computer_hardware/hard_drive/holder // Holder that contains this file.
|
||||
var/unsendable = 0 // Whether the file may be sent to someone via NTNet transfer or other means.
|
||||
var/undeletable = 0 // Whether the file may be deleted. Setting to 1 prevents deletion/renaming/etc.
|
||||
var/uid // UID of this file
|
||||
var/password = "" // Placeholder for password.
|
||||
|
||||
/datum/computer_file/New()
|
||||
..()
|
||||
@@ -36,4 +37,14 @@ var/global/file_uid = 0
|
||||
else
|
||||
temp.filename = filename
|
||||
temp.filetype = filetype
|
||||
return temp
|
||||
temp.password = password
|
||||
return temp
|
||||
|
||||
/datum/computer_file/proc/can_access_file(mob/user, input_password = "")
|
||||
if(!password)
|
||||
return TRUE
|
||||
if(!input_password)
|
||||
input_password = sanitize(input(user, "Please enter a password to access file '[filename]':"))
|
||||
if(input_password == password)
|
||||
return TRUE
|
||||
return FALSE
|
||||
@@ -55,7 +55,8 @@
|
||||
"name" = F.filename,
|
||||
"type" = F.filetype,
|
||||
"size" = F.size,
|
||||
"undeletable" = F.undeletable
|
||||
"undeletable" = F.undeletable,
|
||||
"encrypted" = !!F.password
|
||||
)))
|
||||
data["files"] = files
|
||||
if(RHDD)
|
||||
@@ -66,7 +67,8 @@
|
||||
"name" = F.filename,
|
||||
"type" = F.filetype,
|
||||
"size" = F.size,
|
||||
"undeletable" = F.undeletable
|
||||
"undeletable" = F.undeletable,
|
||||
"encrypted" = !!F.password
|
||||
)))
|
||||
data["usbfiles"] = usbfiles
|
||||
|
||||
@@ -83,6 +85,9 @@
|
||||
switch(href_list["action"])
|
||||
if("PRG_openfile")
|
||||
. = 1
|
||||
var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"])
|
||||
if(!F.can_access_file(usr))
|
||||
return
|
||||
open_file = href_list["name"]
|
||||
if("PRG_newtextfile")
|
||||
. = 1
|
||||
@@ -197,4 +202,27 @@
|
||||
if(!F || !istype(F))
|
||||
return 1
|
||||
var/datum/computer_file/C = F.clone(0)
|
||||
HDD.store_file(C)
|
||||
HDD.store_file(C)
|
||||
if("PRG_encrypt")
|
||||
. = 1
|
||||
if(!HDD)
|
||||
return 1
|
||||
var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"])
|
||||
if(!F || F.undeletable)
|
||||
return 1
|
||||
if(F.password)
|
||||
return
|
||||
var/new_password = sanitize(input(usr, "Enter an encryption key:", "Encrypt File"))
|
||||
if(!new_password)
|
||||
to_chat(usr, "<span class='warning'>File not encrypted.</span>")
|
||||
return
|
||||
F.password=new_password
|
||||
if("PRG_decrypt")
|
||||
. = 1
|
||||
if(!HDD)
|
||||
return 1
|
||||
var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"])
|
||||
if(!F || F.undeletable)
|
||||
return 1
|
||||
if(F.can_access_file(usr))
|
||||
F.password = ""
|
||||
@@ -192,7 +192,7 @@
|
||||
/datum/reagent/medicine/styptic_powder
|
||||
name = "Styptic Powder"
|
||||
id = "styptic_powder"
|
||||
description = "Styptic (aluminium sulfate) powder helps control bleeding and heal physical wounds."
|
||||
description = "Styptic (aluminum sulfate) powder helps control bleeding and heal physical wounds."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
metabolization_rate = 3
|
||||
|
||||
@@ -233,12 +233,19 @@
|
||||
if(!health)
|
||||
spawn(0)
|
||||
message_to_riders("<span class='userdanger'>Critical damage to the vessel detected, core explosion imminent!</span>")
|
||||
for(var/i = 10, i >= 0; --i)
|
||||
message_to_riders("<span class='warning'>[i]</span>")
|
||||
if(i == 0)
|
||||
explosion(loc, 2, 4, 8)
|
||||
qdel(src)
|
||||
for(var/i in 1 to 3)
|
||||
var/count = 3
|
||||
message_to_riders("<span class='warning'>[count]</span>")
|
||||
count--
|
||||
sleep(10)
|
||||
if(LAZYLEN(pilot) || LAZYLEN(passengers))
|
||||
for(var/M in passengers + pilot)
|
||||
var/mob/living/L = M
|
||||
L.adjustBruteLoss(300)
|
||||
explosion(loc, 0, 0, 2)
|
||||
robogibs(loc)
|
||||
robogibs(loc)
|
||||
qdel(src)
|
||||
|
||||
update_icons()
|
||||
|
||||
|
||||
@@ -56,6 +56,25 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">20 October 2018</h2>
|
||||
<h3 class="author">Dapocalypse updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds password protected files to modular computer.</li>
|
||||
</ul>
|
||||
<h3 class="author">Purpose updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Suit storage units now contain magboots for relevant roles.</li>
|
||||
<li class="bugfix">Adds the captains jetpack to his suit storage unit, so it is now stealable again on Delta.</li>
|
||||
</ul>
|
||||
<h3 class="author">uc_guy updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">It is no longer possible to duplicate uvents.</li>
|
||||
</ul>
|
||||
<h3 class="author">variableundefined updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Plating's icon is back to the old one once again.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">19 October 2018</h2>
|
||||
<h3 class="author">Fox McCloud updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -7579,3 +7579,14 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- rscdel: Removed old UI from safe
|
||||
- tweak: Safe now is only Right - Left - Right. Safe is 0-99 rather than 0-71.
|
||||
- imageadd: Added safe dial for it's nanoui.
|
||||
2018-10-20:
|
||||
Dapocalypse:
|
||||
- rscadd: Adds password protected files to modular computer.
|
||||
Purpose:
|
||||
- rscadd: Suit storage units now contain magboots for relevant roles.
|
||||
- bugfix: Adds the captains jetpack to his suit storage unit, so it is now stealable
|
||||
again on Delta.
|
||||
uc_guy:
|
||||
- bugfix: It is no longer possible to duplicate uvents.
|
||||
variableundefined:
|
||||
- tweak: Plating's icon is back to the old one once again.
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "craftxbox"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "added check to make sure person downloading pAI isnt dead."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Birdtalon"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Spacepods explosions are significantly reduced."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Fox McCloud"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Updates the Garbage SS so it's less likely to induce lag"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Purpose"
|
||||
delete-after: True
|
||||
changes:
|
||||
- spellcheck: "Aluminum & Aluminium properly standardized."
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 32 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
@@ -32,6 +32,11 @@
|
||||
{{:helper.link('DELETE', 'trash', {'action' : 'PRG_deletefile', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
|
||||
{{:helper.link('RENAME', 'pencil', {'action' : 'PRG_rename', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
|
||||
{{:helper.link('CLONE', 'files-o', {'action' : 'PRG_clone', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
|
||||
{{if !value.encrypted}}
|
||||
{{:helper.link('ENCRYPT', null, {'action' : 'PRG_encrypt', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
|
||||
{{else}}
|
||||
{{:helper.link('DECRYPT', null, {'action' : 'PRG_decrypt', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
|
||||
{{/if}}
|
||||
{{if data.usbconnected}}
|
||||
{{:helper.link('EXPORT', 'upload', {'action' : 'PRG_copytousb', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
|
||||
{{/if}}
|
||||
|
||||
Reference in New Issue
Block a user