[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fIWKOozbvVM_pFJFjbHXvte-mqdz_RHFIbrqY5bpLunI":3,"$fPmeDgLQPnd_zcD05z4NWocrfNK5ZSnd1ukCODpinHS4":128,"$fUD-0Mlb_NnN7-cUdx7J1yUCXWIo3C0jv9rk4-PmqinY":132},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":11,"num_ratings":11,"last_updated":13,"tested_up_to":14,"requires_at_least":15,"requires_php":16,"tags":17,"homepage":19,"download_link":20,"security_score":21,"vuln_count":11,"unpatched_count":11,"last_vuln_date":22,"fetched_at":23,"discovery_status":24,"vulnerabilities":25,"developer":26,"crawl_stats":22,"alternatives":33,"analysis":34,"fingerprints":102},"nmr-jsgrid","NMR jsGrid","1.0.0","mirceatm","https:\u002F\u002Fprofiles.wordpress.org\u002Fmirceatm\u002F","\u003Cp>Add jsGrid http:\u002F\u002Fjs-grid.com tables to your website using the shortcode: \u003Ccode>[nmr_jsgrid id='your-grid-name']\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Data grids or tables have configurable number of columns, filters, edit, update and delete functionalities.\u003Cbr \u002F>\nConfiguration of grids is performed on the admin back-end.\u003Cbr \u002F>\nTables can be paginated and need back-end pagination. Ajax calls help to avoid entire page reload.\u003C\u002Fp>\n\u003Cp>Example of a toy back-end pagination:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_action('wp_ajax_nopriv_sample_pagination', function () {\n    \u002F\u002F assume HTTP GET for this example\n    $data = $_GET;\n    global $wpdb;\n    $sql_base = $wpdb->prepare(\"SELECT umeta_id, meta_key FROM {$wpdb->prefix}usermeta\");\n    $sql = $wpdb->prepare(\"SELECT COUNT(*) FROM ({$sql_base}) t\");\n    $itemsCount = $wpdb->get_var($sql);\n    $pageIndex = intval($data['pageIndex']);\n    if ($pageIndex \u003C 1) {\n        $pageIndex = 1;\n    }\n    $pageSize = intval($data['pageSize']);\n    if ($pageSize \u003C 1) {\n        $pageSize = 20;\n    }\n    $endIndex = $pageIndex * $pageSize;\n    $startIndex = $endIndex - $pageSize;\n    $limit = \"LIMIT {$pageSize} OFFSET {$startIndex}\";\n    $sql = \"SELECT t.* FROM ({$sql_base}) t {$limit}\";\n    wp_send_json(json_encode(['data' => $wpdb->get_results($sql, ARRAY_A), 'itemsCount' => $itemsCount]));\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Having prepared the back-end to provide paginated data, the front-end data-grid cand be built in the Admin->NMR jsGrids interface.\u003Cbr \u002F>\nAdd a row and set the column values accordingly.\u003Cbr \u002F>\nPlease consult \u003Ca href=\"http:\u002F\u002Fjs-grid.com\u002Fdocs\u002F\" rel=\"nofollow ugc\">the documentation\u003C\u002Fa> for more details:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>Name\u003C\u002Fcode> will be used as DOM id for the data-grid\u003C\u002Fli>\n\u003Cli>\u003Ccode>URL\u003C\u002Fcode> back-end endpoint, usually https:\u002F\u002Fyour-website.com\u002Fwp-admin\u002Fadmin-ajax.php\u003C\u002Fli>\n\u003Cli>\u003Ccode>Action\u003C\u002Fcode> should be sincronized with back-end. In our example \u003Ccode>Action=sample_pagination\u003C\u002Fcode> taken from: \u003Ccode>wp_ajax_nopriv_sample_pagination\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>Fields\u003C\u002Fcode> JSON array of columns as text. In our example could be:\u003Cbr \u002F>\n[{“name”: “umeta_id”,”title”: “Id”,”type”: “number”},{“name”: “meta_key”,”title”: “Key”,”type”: “text”}]\u003Cbr \u002F>\nFor a complete list of possible columns check \u003Ca href=\"http:\u002F\u002Fjs-grid.com\u002Fdocs\u002F#grid-fields\" rel=\"nofollow ugc\">the documentation\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ccode>Height\u003C\u002Fcode> could be \u003Ccode>auto\u003C\u002Fcode>, a percent like \u003Ccode>80%\u003C\u002Fcode>, a number: \u003Ccode>400\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>Width\u003C\u002Fcode> same as above\u003C\u002Fli>\n\u003Cli>\u003Ccode>Paging\u003C\u002Fcode>, \u003Ccode>Editing\u003C\u002Fcode>, \u003Ccode>Sorting\u003C\u002Fcode>, \u003Ccode>Autoload\u003C\u002Fcode>, \u003Ccode>Deleting\u003C\u002Fcode>, \u003Ccode>Filtering\u003C\u002Fcode>, \u003Ccode>Inserting\u003C\u002Fcode>, \u003Ccode>Page size\u003C\u002Fcode> are self explanatory: allow pagination, editing, sorting, auto-loading, deleting, filtering and inserting of data. Page size determines the number of rows in one page.\u003C\u002Fli>\n\u003Cli>\u003Ccode>Pager format\u003C\u002Fcode> can have a value of: \u003Cem>Rows: {itemCount} – Pages: {first} {prev} {pages} {next} {last} &nbsp;&nbsp; {pageIndex} of {pageCount}\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>\u003Ccode>Page buttons\u003C\u002Fcode> 5 is a good choice\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Plugin will enqueue \u003Ccode>nmr-jsgrid.js\u003C\u002Fcode> javascript file.\u003Cbr \u002F>\nTo use the plugin on the Admin module one should add the Admin slug\u002Fhook in the filter: \u003Ccode>nmr_jsgrid_admin_enqueue_scripts\u003C\u002Fcode>\u003Cbr \u002F>\nEx:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter('nmr_jsgrid_admin_enqueue_scripts', function ($admin_php_files) {\n    \u002F\u002F NMR jsGrid will be available in Admin->My page->My subpage\n    $admin_php_files[] = 'admin-my_page_admin-my_subpage';\n    return $admin_php_files;\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If you enjoy using \u003Cem>NMR JSGrid\u003C\u002Fem> and find it useful, please consider \u003Ca href=\"https:\u002F\u002Fpaypal.me\u002Fmirceatm\" rel=\"nofollow ugc\">\u003Cstrong>making a donation\u003C\u002Fstrong>\u003C\u002Fa>. Your donation will help encourage and support the plugin’s continued development and better user support.\u003C\u002Fp>\n\u003Ch4>Privacy Notices\u003C\u002Fh4>\n","Add jsGrid http:\u002F\u002Fjs-grid.com tables to your website using the shortcode: [nmr_jsgrid id='your-grid-name'].",0,2687,"2023-01-26T14:46:00.000Z","6.1.10","5.2","",[18],"jsgrid-table-jquery-javascript-ajax-pagination","https:\u002F\u002Fnamir.ro\u002Fjsgrid\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fnmr-jsgrid.1.0.0.zip",85,null,"2026-04-06T09:54:40.288Z","no_bundle",[],{"slug":7,"display_name":7,"profile_url":8,"plugin_count":27,"total_installs":28,"avg_security_score":29,"avg_patch_time_days":30,"trust_score":31,"computed_at":32},4,2100,90,39,81,"2026-05-20T08:01:19.739Z",[],{"attackSurface":35,"codeSignals":79,"taintFlows":92,"riskAssessment":93,"analyzedAt":101},{"hooks":36,"ajaxHandlers":59,"restRoutes":71,"shortcodes":72,"cronEvents":77,"entryPointCount":27,"unprotectedCount":78},[37,43,47,51,55],{"type":38,"name":39,"callback":40,"file":41,"line":42},"action","plugins_loaded","update_db_check","nmr-jsgrid.php",28,{"type":38,"name":44,"callback":45,"file":41,"line":46},"admin_menu","setup_admin_menu",29,{"type":38,"name":48,"callback":49,"file":41,"line":50},"init","shortcodes_init",30,{"type":38,"name":52,"callback":53,"file":41,"line":54},"wp_enqueue_scripts","scripts_for_profile_page",31,{"type":38,"name":56,"callback":57,"file":41,"line":58},"admin_enqueue_scripts","scripts_for_admin",32,[60,65,68],{"action":61,"nopriv":62,"callback":63,"hasNonce":62,"hasCapCheck":62,"file":41,"line":64},"nmrjsgridconfig",false,"config_callback",33,{"action":61,"nopriv":66,"callback":63,"hasNonce":62,"hasCapCheck":62,"file":41,"line":67},true,34,{"action":4,"nopriv":62,"callback":69,"hasNonce":62,"hasCapCheck":66,"file":41,"line":70},"admin_grid_callback",35,[],[73],{"tag":74,"callback":75,"file":41,"line":76},"nmr_jsgrid","nmr_jsgrid_func",161,[],2,{"dangerousFunctions":80,"sqlUsage":81,"outputEscaping":84,"fileOperations":86,"externalRequests":11,"nonceChecks":11,"capabilityChecks":86,"bundledLibraries":91},[],{"prepared":82,"raw":11,"locations":83},9,[],{"escaped":85,"rawEcho":86,"locations":87},6,1,[88],{"file":41,"line":89,"context":90},55,"raw output",[],[],{"summary":94,"deductions":95},"The \"nmr-jsgrid\" v1.0.0 plugin demonstrates several good security practices, including the exclusive use of prepared statements for all SQL queries and a high percentage of properly escaped outputs. The absence of known CVEs and a clean vulnerability history suggest a generally well-maintained codebase. However, the plugin has a notable security weakness in its handling of AJAX requests. Two out of three AJAX handlers lack authentication checks, presenting a potential attack vector. While the static analysis did not reveal any critical or high severity taint flows or dangerous functions, the presence of unprotected entry points into the application significantly elevates the risk profile. The limited attack surface overall is a positive, but the identified unprotected AJAX handlers remain a primary concern.",[96,99],{"reason":97,"points":98},"Unprotected AJAX handlers",10,{"reason":100,"points":98},"No nonce checks on AJAX","2026-03-17T06:16:07.801Z",{"wat":103,"direct":113},{"assetPaths":104,"generatorPatterns":109,"scriptPaths":110,"versionParams":111},[105,106,107,108],"\u002Fwp-content\u002Fplugins\u002Fnmr-jsgrid\u002Fjsgrid.min.css","\u002Fwp-content\u002Fplugins\u002Fnmr-jsgrid\u002Fjsgrid-theme.min.css","\u002Fwp-content\u002Fplugins\u002Fnmr-jsgrid\u002Fjsgrid.min.js","\u002Fwp-content\u002Fplugins\u002Fnmr-jsgrid\u002Fnmr-jsgrid.js",[],[108],[112],"nmr-jsgrid\u002Fnmr-jsgrid.js?ver=",{"cssClasses":114,"htmlComments":117,"htmlAttributes":118,"restEndpoints":121,"jsGlobals":124,"shortcodeOutput":126},[115,116],"wrap","jsgrid-grid",[],[119,120],"data-nmrtype","data-nmrjsgridtype",[122,123],"\u002Fwp-json\u002Fnmrjsgridconfig","\u002Fwp-json\u002Fnmr-jsgrid",[125],"nmrapi",[127],"\u003Cdiv id=\"nmr-jsgrid\" data-nmrtype=\"jsgrid\" data-nmrjsgridtype=\"1\">\u003C\u002Fdiv>",{"error":66,"url":129,"statusCode":130,"statusMessage":131,"message":131},"http:\u002F\u002Flocalhost\u002Fapi\u002Fplugins\u002Fnmr-jsgrid\u002Fbundle",404,"no bundle for this plugin yet",{"slug":4,"current_version":6,"total_versions":86,"versions":133},[134],{"version":6,"download_url":20,"svn_tag_url":135,"released_at":22,"has_diff":62,"diff_files_changed":136,"diff_lines":22,"trac_diff_url":22,"vulnerabilities":137,"is_current":66},"https:\u002F\u002Fplugins.svn.wordpress.org\u002Fnmr-jsgrid\u002Ftags\u002F1.0.0\u002F",[],[]]