wp plugin loaded

This commit is contained in:
alorig
2025-11-21 19:18:24 +05:00
parent 4a39c349f6
commit 1eba4a4e15
35 changed files with 11730 additions and 0 deletions

View File

@@ -0,0 +1,347 @@
/**
* Admin Styles
*
* All styles for IGNY8 Bridge admin interface
* Update this file to change global design
*
* @package Igny8Bridge
*/
/* ============================================
Container & Layout
============================================ */
.igny8-settings-container {
max-width: 1200px;
}
.igny8-settings-card {
background: #fff;
border: 1px solid #ccd0d4;
box-shadow: 0 1px 1px rgba(0,0,0,.04);
padding: 20px;
margin: 20px 0;
}
.igny8-settings-card h2 {
margin-top: 0;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
/* ============================================
Status Indicators
============================================ */
.igny8-status-connected {
color: #46b450;
font-weight: bold;
}
.igny8-status-disconnected {
color: #dc3232;
font-weight: bold;
}
.igny8-test-result {
margin-left: 10px;
}
.igny8-test-result .igny8-success {
color: #46b450;
}
.igny8-test-result .igny8-error {
color: #dc3232;
}
.igny8-test-result .igny8-loading {
color: #2271b1;
}
/* ============================================
Sync Operations
============================================ */
.igny8-sync-actions {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 20px;
}
.igny8-sync-actions .button {
min-width: 150px;
}
.igny8-sync-status {
margin-top: 15px;
padding: 10px;
border-radius: 4px;
display: none;
}
.igny8-sync-status.igny8-sync-status-success {
background-color: #d4edda;
border: 1px solid #c3e6cb;
color: #155724;
display: block;
}
.igny8-sync-status.igny8-sync-status-error {
background-color: #f8d7da;
border: 1px solid #f5c6cb;
color: #721c24;
display: block;
}
.igny8-sync-status.igny8-sync-status-loading {
background-color: #d1ecf1;
border: 1px solid #bee5eb;
color: #0c5460;
display: block;
}
/* ============================================
Statistics
============================================ */
.igny8-stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-top: 15px;
}
.igny8-stat-item {
padding: 15px;
background: #f9f9f9;
border: 1px solid #ddd;
border-radius: 4px;
}
.igny8-stat-label {
font-size: 12px;
color: #666;
text-transform: uppercase;
margin-bottom: 8px;
}
.igny8-stat-value {
font-size: 24px;
font-weight: bold;
color: #2271b1;
}
/* ============================================
Diagnostics
============================================ */
.igny8-diagnostics-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 16px;
margin-top: 15px;
}
.igny8-diagnostic-item {
padding: 15px;
background-color: #f6f7f7;
border: 1px solid #dcdcde;
border-radius: 4px;
}
.igny8-diagnostic-label {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.05em;
color: #555d66;
margin-bottom: 6px;
}
.igny8-diagnostic-value {
font-size: 18px;
font-weight: 600;
color: #1d2327;
}
.igny8-diagnostic-item .description {
margin: 6px 0 0;
color: #646970;
}
/* ============================================
Buttons
============================================ */
.igny8-button-group {
display: flex;
gap: 10px;
margin: 15px 0;
}
.igny8-button-group .button {
flex: 1;
}
/* ============================================
Loading States
============================================ */
.igny8-loading {
opacity: 0.6;
pointer-events: none;
}
.igny8-spinner {
display: inline-block;
width: 16px;
height: 16px;
border: 2px solid #f3f3f3;
border-top: 2px solid #2271b1;
border-radius: 50%;
animation: igny8-spin 1s linear infinite;
margin-right: 8px;
vertical-align: middle;
}
@keyframes igny8-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* ============================================
Messages & Notifications
============================================ */
.igny8-message {
padding: 12px;
margin: 15px 0;
border-left: 4px solid;
background: #fff;
}
.igny8-message.igny8-message-success {
border-color: #46b450;
background-color: #f0f8f0;
}
.igny8-message.igny8-message-error {
border-color: #dc3232;
background-color: #fff5f5;
}
.igny8-message.igny8-message-info {
border-color: #2271b1;
background-color: #f0f6fc;
}
.igny8-message.igny8-message-warning {
border-color: #f0b849;
background-color: #fffbf0;
}
/* ============================================
Tables
============================================ */
.igny8-table {
width: 100%;
border-collapse: collapse;
margin: 15px 0;
}
.igny8-table th,
.igny8-table td {
padding: 10px;
text-align: left;
border-bottom: 1px solid #ddd;
}
.igny8-table th {
background-color: #f9f9f9;
font-weight: 600;
}
.igny8-table tr:hover {
background-color: #f9f9f9;
}
/* ============================================
Admin Columns
============================================ */
.igny8-badge {
display: inline-block;
padding: 3px 8px;
border-radius: 3px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
line-height: 1.4;
}
.igny8-badge-igny8 {
background-color: #2271b1;
color: #fff;
}
.igny8-badge-wordpress {
background-color: #646970;
color: #fff;
}
.igny8-terms-list {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.igny8-term-badge {
display: inline-block;
padding: 2px 6px;
background-color: #f0f0f1;
border: 1px solid #c3c4c7;
border-radius: 2px;
font-size: 11px;
color: #50575e;
}
.igny8-empty {
color: #a7aaad;
font-style: italic;
}
.igny8-action-link {
color: #2271b1;
text-decoration: none;
cursor: pointer;
}
.igny8-action-link:hover {
color: #135e96;
text-decoration: underline;
}
/* ============================================
Responsive
============================================ */
@media (max-width: 782px) {
.igny8-sync-actions {
flex-direction: column;
}
.igny8-sync-actions .button {
width: 100%;
}
.igny8-stats-grid {
grid-template-columns: 1fr;
}
.igny8-diagnostics-grid {
grid-template-columns: 1fr;
}
}

View File

@@ -0,0 +1,178 @@
/**
* Admin JavaScript
*
* @package Igny8Bridge
*/
(function($) {
'use strict';
$(document).ready(function() {
// Test connection button
$('#igny8-test-connection').on('click', function() {
var $button = $(this);
var $result = $('#igny8-test-result');
$button.prop('disabled', true).addClass('igny8-loading');
$result.html('<span class="igny8-loading">Testing...</span>');
$.ajax({
url: igny8Admin.ajaxUrl,
type: 'POST',
data: {
action: 'igny8_test_connection',
nonce: igny8Admin.nonce
},
success: function(response) {
if (response.success) {
$result.html('<span class="igny8-success">✓ Connection successful</span>');
} else {
$result.html('<span class="igny8-error">✗ ' + (response.data.message || 'Connection failed') + '</span>');
}
},
error: function() {
$result.html('<span class="igny8-error">✗ Request failed</span>');
},
complete: function() {
$button.prop('disabled', false).removeClass('igny8-loading');
}
});
});
// Sync posts to IGNY8
$('#igny8-sync-posts').on('click', function() {
igny8TriggerSync('igny8_sync_posts', 'Syncing posts to IGNY8...');
});
// Sync taxonomies
$('#igny8-sync-taxonomies').on('click', function() {
igny8TriggerSync('igny8_sync_taxonomies', 'Syncing taxonomies...');
});
// Sync from IGNY8
$('#igny8-sync-from-igny8').on('click', function() {
igny8TriggerSync('igny8_sync_from_igny8', 'Syncing from IGNY8...');
});
// Collect and send site data
$('#igny8-collect-site-data').on('click', function() {
igny8TriggerSync('igny8_collect_site_data', 'Collecting and sending site data...');
});
// Load sync statistics
igny8LoadStats();
// Handle row action links
$(document).on('click', '.igny8-action-link', function(e) {
e.preventDefault();
var $link = $(this);
var postId = $link.data('post-id');
var action = $link.data('action');
if (!postId) {
return;
}
if (!confirm('Are you sure you want to ' + (action === 'send' ? 'send' : 'update') + ' this post to IGNY8?')) {
return;
}
$link.text('Processing...').prop('disabled', true);
$.ajax({
url: igny8Admin.ajaxUrl,
type: 'POST',
data: {
action: 'igny8_send_to_igny8',
post_id: postId,
action_type: action,
nonce: igny8Admin.nonce
},
success: function(response) {
if (response.success) {
alert(response.data.message || 'Success!');
location.reload();
} else {
alert(response.data.message || 'Failed to send to IGNY8');
$link.text(action === 'send' ? 'Send to IGNY8' : 'Update in IGNY8').prop('disabled', false);
}
},
error: function() {
alert('Request failed');
$link.text(action === 'send' ? 'Send to IGNY8' : 'Update in IGNY8').prop('disabled', false);
}
});
});
});
/**
* Trigger sync operation
*/
function igny8TriggerSync(action, message) {
var $status = $('#igny8-sync-status');
var $button = $('#' + action.replace('igny8_', 'igny8-'));
$status.removeClass('igny8-sync-status-success igny8-sync-status-error')
.addClass('igny8-sync-status-loading')
.html('<span class="igny8-spinner"></span>' + message);
$button.prop('disabled', true).addClass('igny8-loading');
$.ajax({
url: igny8Admin.ajaxUrl,
type: 'POST',
data: {
action: action,
nonce: igny8Admin.nonce
},
success: function(response) {
if (response.success) {
$status.removeClass('igny8-sync-status-loading')
.addClass('igny8-sync-status-success')
.html('✓ ' + (response.data.message || 'Operation completed successfully'));
// Reload stats
igny8LoadStats();
} else {
$status.removeClass('igny8-sync-status-loading')
.addClass('igny8-sync-status-error')
.html('✗ ' + (response.data.message || 'Operation failed'));
}
},
error: function() {
$status.removeClass('igny8-sync-status-loading')
.addClass('igny8-sync-status-error')
.html('✗ Request failed');
},
complete: function() {
$button.prop('disabled', false).removeClass('igny8-loading');
}
});
}
/**
* Load sync statistics
*/
function igny8LoadStats() {
$.ajax({
url: igny8Admin.ajaxUrl,
type: 'POST',
data: {
action: 'igny8_get_stats',
nonce: igny8Admin.nonce
},
success: function(response) {
if (response.success && response.data) {
if (response.data.synced_posts !== undefined) {
$('#igny8-stat-posts').text(response.data.synced_posts);
}
if (response.data.last_sync) {
$('#igny8-stat-last-sync').text(response.data.last_sync);
}
}
}
});
}
})(jQuery);

View File

@@ -0,0 +1,200 @@
/**
* Post Editor JavaScript
*
* Handles AJAX interactions for Planner and Optimizer meta boxes
*
* @package Igny8Bridge
*/
(function($) {
'use strict';
$(document).ready(function() {
// Fetch Planner Brief
$('#igny8-fetch-brief').on('click', function() {
var $button = $(this);
var $message = $('#igny8-planner-brief-message');
var postId = $button.data('post-id');
var taskId = $button.data('task-id');
$button.prop('disabled', true).text('Fetching...');
$message.hide().removeClass('notice-success notice-error');
$.ajax({
url: igny8PostEditor.ajaxUrl,
type: 'POST',
data: {
action: 'igny8_fetch_planner_brief',
nonce: igny8PostEditor.nonce,
post_id: postId,
task_id: taskId
},
success: function(response) {
if (response.success) {
$message.addClass('notice notice-success inline')
.html('<p>' + response.data.message + '</p>')
.show();
// Reload page to show updated brief
setTimeout(function() {
location.reload();
}, 1000);
} else {
$message.addClass('notice notice-error inline')
.html('<p>' + (response.data.message || 'Failed to fetch brief') + '</p>')
.show();
$button.prop('disabled', false).text('Fetch Brief');
}
},
error: function() {
$message.addClass('notice notice-error inline')
.html('<p>Request failed</p>')
.show();
$button.prop('disabled', false).text('Fetch Brief');
}
});
});
// Refresh Planner Task
$('#igny8-refresh-task').on('click', function() {
var $button = $(this);
var $message = $('#igny8-planner-brief-message');
var postId = $button.data('post-id');
var taskId = $button.data('task-id');
if (!confirm('Are you sure you want to request a refresh of this task from IGNY8 Planner?')) {
return;
}
$button.prop('disabled', true).text('Requesting...');
$message.hide().removeClass('notice-success notice-error');
$.ajax({
url: igny8PostEditor.ajaxUrl,
type: 'POST',
data: {
action: 'igny8_refresh_planner_task',
nonce: igny8PostEditor.nonce,
post_id: postId,
task_id: taskId
},
success: function(response) {
if (response.success) {
$message.addClass('notice notice-success inline')
.html('<p>' + response.data.message + '</p>')
.show();
} else {
$message.addClass('notice notice-error inline')
.html('<p>' + (response.data.message || 'Failed to request refresh') + '</p>')
.show();
}
$button.prop('disabled', false).text('Request Refresh');
},
error: function() {
$message.addClass('notice notice-error inline')
.html('<p>Request failed</p>')
.show();
$button.prop('disabled', false).text('Request Refresh');
}
});
});
// Create Optimizer Job
$('#igny8-create-optimizer-job').on('click', function() {
var $button = $(this);
var $message = $('#igny8-optimizer-message');
var postId = $button.data('post-id');
var taskId = $button.data('task-id');
if (!confirm('Create a new optimizer job for this post?')) {
return;
}
$button.prop('disabled', true).text('Creating...');
$message.hide().removeClass('notice-success notice-error');
$.ajax({
url: igny8PostEditor.ajaxUrl,
type: 'POST',
data: {
action: 'igny8_create_optimizer_job',
nonce: igny8PostEditor.nonce,
post_id: postId,
task_id: taskId,
job_type: 'audit',
priority: 'normal'
},
success: function(response) {
if (response.success) {
$message.addClass('notice notice-success inline')
.html('<p>' + response.data.message + '</p>')
.show();
// Reload page to show updated status
setTimeout(function() {
location.reload();
}, 1000);
} else {
$message.addClass('notice notice-error inline')
.html('<p>' + (response.data.message || 'Failed to create job') + '</p>')
.show();
$button.prop('disabled', false).text('Request Optimization');
}
},
error: function() {
$message.addClass('notice notice-error inline')
.html('<p>Request failed</p>')
.show();
$button.prop('disabled', false).text('Request Optimization');
}
});
});
// Check Optimizer Status
$('#igny8-check-optimizer-status').on('click', function() {
var $button = $(this);
var $message = $('#igny8-optimizer-message');
var postId = $button.data('post-id');
var jobId = $button.data('job-id');
$button.prop('disabled', true).text('Checking...');
$message.hide().removeClass('notice-success notice-error');
$.ajax({
url: igny8PostEditor.ajaxUrl,
type: 'POST',
data: {
action: 'igny8_get_optimizer_status',
nonce: igny8PostEditor.nonce,
post_id: postId,
job_id: jobId
},
success: function(response) {
if (response.success) {
$message.addClass('notice notice-success inline')
.html('<p>Status: <strong>' + response.data.status + '</strong></p>')
.show();
// Reload page to show updated status
setTimeout(function() {
location.reload();
}, 1000);
} else {
$message.addClass('notice notice-error inline')
.html('<p>' + (response.data.message || 'Failed to get status') + '</p>')
.show();
}
$button.prop('disabled', false).text('Check Status');
},
error: function() {
$message.addClass('notice notice-error inline')
.html('<p>Request failed</p>')
.show();
$button.prop('disabled', false).text('Check Status');
}
});
});
});
})(jQuery);