Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*============================================================================
- * ## Plugin Info
- *----------------------------------------------------------------------------
- * # Plugin Name
- * DoubleX RMMV Object Properties
- *----------------------------------------------------------------------------
- * # Terms Of Use
- * You shall keep this plugin's Plugin Info part's contents intact
- * You shalln't claim that this plugin's written by anyone other than
- * DoubleX or his aliases
- * None of the above applies to DoubleX or his aliases
- *----------------------------------------------------------------------------
- * # Prerequisites
- * Abilities:
- * 1. Basic knowledge of inspecting object properties in Javascript
- * 2. Some Javascript coding proficiency to fully utilize this plugin
- *----------------------------------------------------------------------------
- * # Links
- * This plugin:
- * 1. http://pastebin.com/nZRhF8vc
- * Mentioned Patreon Supporters:
- * https://www.patreon.com/posts/71738797
- *----------------------------------------------------------------------------
- * # Author
- * DoubleX
- *----------------------------------------------------------------------------
- * # Changelog
- * v1.00d(GMT 1500 27-1-2016):
- * 1. Fixed enumerating this plugin's functions via for in loops bug
- * v1.00c(GMT 0100 13-11-2015):
- * 1. Fixed tracing properties from null or non object object bug
- * v1.00b(GMT 1100 11-11-2015):
- * 1. Added descriptions that will be shown in the plugin manager
- * v1.00a(GMT 1500 27-10-2015):
- * 1. 1st version of this plugin finished
- *============================================================================*/
- /*:
- * @plugindesc Traces all object properties meeting some conditions linked to
- * the queried object
- * Designed as a bug diagnosis tool used by Javascript coders with
- * debug experience
- * @author DoubleX
- *
- * @help
- *============================================================================
- * ## Plugin Call Info
- * A path in the object property trace will stop if it'd be cyclic
- *----------------------------------------------------------------------------
- * # Object manipulations
- * 1. trace_obj_prop(cond, label)
- * - Traces all object properties satisfying function cond linked to
- * this object
- * - Labels all traced object properties with function label
- * - cond and label are functions written in
- * Object Property Tracing Condition Function and
- * Object Property Tracing Label Function respectively
- * 2. _obj_prop_log[cond]
- * - Returns the log of all traced object properties satisfying
- * function cond linked to this object
- *============================================================================
- */
- "use strict";
- var DoubleX_RMMV = DoubleX_RMMV || {};
- DoubleX_RMMV["Obj_Prop"] = "v1.00d";
- DoubleX_RMMV.Obj_Prop = {
- /*------------------------------------------------------------------------
- * Object Property Tracing Condition Function
- * - Setups cond used by trace_obj_prop(cond, label)
- *------------------------------------------------------------------------*/
- /* cond must be a function taking the object property as the only argument
- The below examples are added to help you setup your own cond functions */
- // Checks if the currently traced object's indeed an object
- cond_obj: function(obj) {
- return typeof obj === "object";
- }, // substitute cond with "cond_obj" to use this function
- // Checks if the currently traced object's an array
- cond_array: function(obj) {
- return Array.isArray(obj);
- }, // substitute cond with "cond_array" to use this function
- // Add your own cond functions here
- /*------------------------------------------------------------------------
- * Object Property Tracing Label Function
- * - Setups label used by trace_obj_prop(cond, label)
- *------------------------------------------------------------------------*/
- /* label must be a function taking the object property as the only argument
- All label functions must return a string
- The below examples are added to help you setup your own label functions */
- // Always returns the entire object
- label_obj: function(obj) {
- return obj;
- }, // substitute label with "label_obj" to use this function
- // Always returns the type(including Array) of each traced object property
- label_array: function(obj) {
- return Array.isArray(obj) ? "array" : typeof obj;
- } // substitute label with "label_array" to use this function
- // Add your own label functions here
- }; // DoubleX_RMMV.Obj_Prop
- /*============================================================================
- * ## Plugin Implementations
- * You need not edit this part as it's about how this plugin works
- *----------------------------------------------------------------------------
- * # Plugin Support Info:
- * 1. Prerequisites
- * - Solid understanding of inspecting object properties in Javascript
- * - Decent Javascript coding proficiency to fully comprehend this
- * plugin
- * 2. Function documentation
- * - The 1st part describes why this function's rewritten/extended for
- * rewritten/extended functions or what the function does for new
- * functions
- * - The 2nd part describes what the arguments of the function are
- * - The 3rd part informs which version rewritten, extended or created
- * this function
- * - The 4th part informs whether the function's rewritten or new
- * - The 5th part informs whether the function's a real or potential
- * hotspot
- * - The 6th part describes how this function works for new functions
- * only, and describes the parts added, removed or rewritten for
- * rewritten or extended functions only
- * Example:
- * /*----------------------------------------------------------------------
- * * Why rewrite/extended/What this function does
- * *----------------------------------------------------------------------*/
- /* // arguments: What these arguments are
- * function function_name(arguments) // Version X+; Rewrite/New; Hotspot
- * // Added/Removed/Rewritten to do something/How this function works
- * function_name_code
- * //
- * end // function_name
- *----------------------------------------------------------------------------*/
- Object.defineProperties(Object.prototype, {
- "trace_obj_prop": {
- /* cond: The function checking whether an object property will be traced
- * label: The function returning the label of an traced object property
- */
- value: function(cond, label) { // New
- if (!this._obj_prop_trace) {
- this._obj_prop_log = {};
- this._obj_prop_trace = {};
- }
- // Stop tracing the object property if the path would be cyclic
- if (this._obj_prop_trace[cond]) { return; }
- //
- this._obj_prop_log[cond] = "";
- this._obj_prop_trace[cond] = {};
- this.log_obj_prop(cond, label);
- }, // Object.prototype.trace_obj_prop
- writable: true,
- configurable: true
- },
- "log_obj_prop": {
- /* cond: The function checking whether an object property will be traced
- * label: The function returning the label of an traced object property
- */
- value: function(cond, label) { // New
- // Checks if currently traced object property has object properties
- var has_obj_prop = false;
- for (var prop in this) {
- if (this.hasOwnProperty(prop) && this.is_obj_prop(prop)) {
- has_obj_prop = true;
- break;
- }
- }
- //
- if (!has_obj_prop) { return; }
- this._obj_prop_log[cond] = "{";
- this.traverse_obj_prop_tree(cond, label);
- this._obj_prop_log[cond] += "}";
- }, // Object.prototype.log_obj_prop
- writable: true,
- configurable: true
- },
- /*------------------------------------------------------------------------
- * Label and use all nonempty subtrees to form the object property tree
- *------------------------------------------------------------------------*/
- "traverse_obj_prop_tree": {
- /* cond: The function checking whether an object property will be traced
- * label: The function returning the label of an traced object property
- */
- value: function(cond, label) { // New
- var op = DoubleX_RMMV.Obj_Prop;
- for (var prop in this) {
- if (this.hasOwnProperty(prop) && this.is_obj_prop(prop)) {
- var obj = this[prop];
- // Recursively traverse property tree via Depth First Search
- if (op[cond](obj)) {
- this._obj_prop_log[cond] += " " + prop + ": " +
- op[label](obj) + " ";
- this._obj_prop_trace[cond][obj] = [prop];
- }
- var temp_prop = prop;
- if (obj === null || typeof obj !== "object") { continue; }
- obj.trace_obj_prop(cond, label);
- if (Object.keys(obj._obj_prop_trace[cond]).length > 0) {
- if (this._obj_prop_trace[cond][obj] === undefined) {
- this._obj_prop_trace[cond][obj] = [];
- }
- this._obj_prop_log[cond] += " " + temp_prop + ": " +
- obj._obj_prop_log[cond];
- this._obj_prop_trace[cond][obj].push(
- obj._obj_prop_trace[cond]);
- }
- //
- }
- }
- }, // Object.prototype.traverse_obj_prop_tree
- writable: true,
- configurable: true
- },
- "is_obj_prop": {
- // prop: The current object property to be traced
- value: function(prop) { // New
- // Return false for all object properties added by this plugin
- if (prop === "_obj_prop_log" || prop === "_obj_prop_trace") {
- return false;
- } else if (prop === "trace_obj_prop" || prop === "log_obj_prop") {
- return false;
- }
- return prop !== "traverse_obj_prop_tree" && prop !== "is_obj_prop";
- //
- }, // Object.prototype.is_obj_prop
- writable: true,
- configurable: true
- }
- });
- /*============================================================================*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement