Plugin Directory

Changeset 3478194


Ignore:
Timestamp:
03/09/2026 02:01:06 PM (4 weeks ago)
Author:
a1tools
Message:

Fix Media Management JS: use nowdoc to prevent PHP variable interpolation breaking jQuery variables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • a1-tools/trunk/includes/class-a1-tools-media-management.php

    r3478187 r3478194  
    626626     */
    627627    private function get_admin_js() {
    628         return "
     628        // Using nowdoc to avoid PHP variable interpolation ($item, $btn, $msg, $p).
     629        return <<<'JSEOF'
    629630(function($){
    630631    'use strict';
     
    640641
    641642    function escAttr(s) {
    642         return s.replace(/&/g,'&amp;').replace(/\"/g,'&quot;').replace(/'/g,'&#39;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
     643        return s.replace(/&/g,'&amp;').replace(/"/g,'&quot;').replace(/'/g,'&#39;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
    643644    }
    644645
     
    662663            $('#a1mm-loading').hide();
    663664
    664             if (!res.success || !res.data.items.length) {
     665            if (!res || !res.success) {
     666                var msg = (res && res.data && res.data.message) ? res.data.message : 'Failed to load media.';
     667                $('#a1mm-empty').show().find('p').text(msg);
     668                $('#a1mm-status').text('');
     669                return;
     670            }
     671
     672            if (!res.data.items.length) {
    665673                $('#a1mm-empty').show();
    666674                $('#a1mm-status').text('0 items');
     
    680688        }).fail(function() {
    681689            $('#a1mm-loading').hide();
    682             $('#a1mm-empty').show().find('p').text('Error loading media.');
     690            $('#a1mm-empty').show().find('p').text('Error loading media. Check browser console.');
    683691        });
    684692    }
    685693
    686694    function buildItem(item) {
    687         var nameNoExt = item.filename.replace(/\\.[^.]+$/, '');
     695        var nameNoExt = item.filename.replace(/\.[^.]+$/, '');
    688696        var ext       = item.filename.split('.').pop();
    689697        var thumbHtml = item.is_image
    690             ? '<img src=\"' + escAttr(item.thumbnail_url) + '\" alt=\"\" />'
    691             : '<span class=\"dashicons dashicons-media-default\"></span>';
     698            ? '<img src="' + escAttr(item.thumbnail_url) + '" alt="" />'
     699            : '<span class="dashicons dashicons-media-default"></span>';
    692700
    693701        var metaParts = [escHtml(item.mime_type), escHtml(item.file_size_formatted)];
     
    697705        metaParts.push(escHtml(item.date));
    698706
    699         var html = '<div class=\"a1mm-item\" data-id=\"' + item.id + '\">'
    700             + '<div class=\"a1mm-thumb\">' + thumbHtml + '</div>'
    701             + '<div class=\"a1mm-info\">'
    702             + '  <div class=\"a1mm-current\"><code>' + escHtml(item.filename) + '</code></div>'
    703             + '  <div class=\"a1mm-meta\">' + metaParts.join(' &nbsp;|&nbsp; ') + '</div>'
    704             + '  <div class=\"a1mm-rename-row\">'
    705             + '    <input type=\"text\" class=\"a1mm-new-name\" value=\"' + escAttr(nameNoExt) + '\" />'
    706             + '    <span class=\"a1mm-ext\">.' + escHtml(ext) + '</span>'
    707             + '    <label class=\"a1mm-refs-label\"><input type=\"checkbox\" class=\"a1mm-refs-cb\" /> Update refs</label>'
    708             + '    <button type=\"button\" class=\"button button-primary a1mm-rename-btn\">Rename</button>'
    709             + '    <span class=\"a1mm-item-msg\"></span>'
     707        var html = '<div class="a1mm-item" data-id="' + item.id + '">'
     708            + '<div class="a1mm-thumb">' + thumbHtml + '</div>'
     709            + '<div class="a1mm-info">'
     710            + '  <div class="a1mm-current"><code>' + escHtml(item.filename) + '</code></div>'
     711            + '  <div class="a1mm-meta">' + metaParts.join(' &nbsp;|&nbsp; ') + '</div>'
     712            + '  <div class="a1mm-rename-row">'
     713            + '    <input type="text" class="a1mm-new-name" value="' + escAttr(nameNoExt) + '" />'
     714            + '    <span class="a1mm-ext">.' + escHtml(ext) + '</span>'
     715            + '    <label class="a1mm-refs-label"><input type="checkbox" class="a1mm-refs-cb" /> Update refs</label>'
     716            + '    <button type="button" class="button button-primary a1mm-rename-btn">Rename</button>'
     717            + '    <span class="a1mm-item-msg"></span>'
    710718            + '  </div>'
    711719            + '</div>'
     
    718726        var $p = $('#a1mm-pagination');
    719727        if (current > 1) {
    720             $p.append('<button type=\"button\" class=\"button a1mm-page-btn\" data-page=\"' + (current - 1) + '\">&lsaquo; Prev</button>');
    721         }
    722         $p.append('<span class=\"a1mm-page-info\">Page ' + current + ' of ' + total + '</span>');
     728            $p.append('<button type="button" class="button a1mm-page-btn" data-page="' + (current - 1) + '">&lsaquo; Prev</button>');
     729        }
     730        $p.append('<span class="a1mm-page-info">Page ' + current + ' of ' + total + '</span>');
    723731        if (current < total) {
    724             $p.append('<button type=\"button\" class=\"button a1mm-page-btn\" data-page=\"' + (current + 1) + '\">Next &rsaquo;</button>');
     732            $p.append('<button type="button" class="button a1mm-page-btn" data-page="' + (current + 1) + '">Next &rsaquo;</button>');
    725733        }
    726734    }
     
    761769                // Update displayed info.
    762770                $item.find('.a1mm-current code').text(d.new_filename);
    763                 var nameNoExt = d.new_filename.replace(/\\.[^.]+$/, '');
     771                var nameNoExt = d.new_filename.replace(/\.[^.]+$/, '');
    764772                $item.find('.a1mm-new-name').val(nameNoExt);
    765773                if (d.new_thumbnail_url) {
     
    808816
    809817})(jQuery);
    810 ";
     818JSEOF;
    811819    }
    812820}
Note: See TracChangeset for help on using the changeset viewer.