Refactor SEO automation into unified CLI application
Major refactoring to create a clean, integrated CLI application: ### New Features: - Unified CLI executable (./seo) with simple command structure - All commands accept optional CSV file arguments - Auto-detection of latest files when no arguments provided - Simplified output directory structure (output/ instead of output/reports/) - Cleaner export filename format (all_posts_YYYY-MM-DD.csv) ### Commands: - export: Export all posts from WordPress sites - analyze [csv]: Analyze posts with AI (optional CSV input) - recategorize [csv]: Recategorize posts with AI - seo_check: Check SEO quality - categories: Manage categories across sites - approve [files]: Review and approve recommendations - full_pipeline: Run complete workflow - analytics, gaps, opportunities, report, status ### Changes: - Moved all scripts to scripts/ directory - Created config.yaml for configuration - Updated all scripts to use output/ directory - Deprecated old seo-cli.py in favor of new ./seo - Added AGENTS.md and CHANGELOG.md documentation - Consolidated README.md with updated usage ### Technical: - Added PyYAML dependency - Removed hardcoded configuration values - All scripts now properly integrated - Better error handling and user feedback Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
256
wordpress-plugins/rank-math-api-manager/assets/css/admin.css
Normal file
256
wordpress-plugins/rank-math-api-manager/assets/css/admin.css
Normal file
@@ -0,0 +1,256 @@
|
||||
/**
|
||||
* Rank Math API Manager - Admin Styles
|
||||
*
|
||||
* @since 1.0.7
|
||||
*/
|
||||
|
||||
/* Plugin header styling */
|
||||
.rank-math-api-header {
|
||||
background: #fff;
|
||||
border: 1px solid #ccd0d4;
|
||||
border-radius: 4px;
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.rank-math-api-header h1 {
|
||||
margin: 0 0 10px 0;
|
||||
color: #23282d;
|
||||
}
|
||||
|
||||
.rank-math-api-header .description {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Status cards */
|
||||
.rank-math-api-status-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 20px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card {
|
||||
background: #fff;
|
||||
border: 1px solid #ccd0d4;
|
||||
border-radius: 4px;
|
||||
padding: 20px;
|
||||
box-shadow: 0 1px 1px rgba(0,0,0,.04);
|
||||
}
|
||||
|
||||
.rank-math-api-status-card h3 {
|
||||
margin: 0 0 15px 0;
|
||||
color: #23282d;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 8px 0;
|
||||
border-bottom: 1px solid #f0f0f1;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-label {
|
||||
font-weight: 500;
|
||||
color: #50575e;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-value {
|
||||
color: #23282d;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-value.success {
|
||||
color: #00a32a;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-value.warning {
|
||||
color: #dba617;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-value.error {
|
||||
color: #d63638;
|
||||
}
|
||||
|
||||
/* Update section */
|
||||
.rank-math-api-update-section {
|
||||
background: #fff;
|
||||
border: 1px solid #ccd0d4;
|
||||
border-radius: 4px;
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.rank-math-api-update-section h3 {
|
||||
margin: 0 0 15px 0;
|
||||
color: #23282d;
|
||||
}
|
||||
|
||||
.rank-math-api-update-actions {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.rank-math-api-update-actions .button {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* API endpoints section */
|
||||
.rank-math-api-endpoints {
|
||||
background: #fff;
|
||||
border: 1px solid #ccd0d4;
|
||||
border-radius: 4px;
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoints h3 {
|
||||
margin: 0 0 15px 0;
|
||||
color: #23282d;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint {
|
||||
background: #f6f7f7;
|
||||
border: 1px solid #dcdcde;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint h4 {
|
||||
margin: 0 0 10px 0;
|
||||
color: #23282d;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint .endpoint-url {
|
||||
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
||||
background: #fff;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #dcdcde;
|
||||
border-radius: 3px;
|
||||
color: #50575e;
|
||||
font-size: 13px;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint .endpoint-method {
|
||||
display: inline-block;
|
||||
background: #0073aa;
|
||||
color: #fff;
|
||||
padding: 2px 8px;
|
||||
border-radius: 3px;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint .endpoint-description {
|
||||
margin: 10px 0 0 0;
|
||||
color: #666;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
/* Loading states */
|
||||
.rank-math-api-loading {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
color: #666;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.rank-math-api-loading .spinner {
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Notices */
|
||||
.rank-math-api-notice {
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.rank-math-api-notice.success {
|
||||
border-left-color: #00a32a;
|
||||
}
|
||||
|
||||
.rank-math-api-notice.warning {
|
||||
border-left-color: #dba617;
|
||||
}
|
||||
|
||||
.rank-math-api-notice.error {
|
||||
border-left-color: #d63638;
|
||||
}
|
||||
|
||||
/* Responsive design */
|
||||
@media (max-width: 782px) {
|
||||
.rank-math-api-status-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.rank-math-api-update-actions {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.rank-math-api-update-actions .button {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
/* Dark mode support */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.rank-math-api-header,
|
||||
.rank-math-api-status-card,
|
||||
.rank-math-api-update-section,
|
||||
.rank-math-api-endpoints {
|
||||
background: #1e1e1e;
|
||||
border-color: #3c434a;
|
||||
}
|
||||
|
||||
.rank-math-api-header h1,
|
||||
.rank-math-api-status-card h3,
|
||||
.rank-math-api-update-section h3,
|
||||
.rank-math-api-endpoints h3,
|
||||
.rank-math-api-endpoint h4 {
|
||||
color: #f0f0f1;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-label {
|
||||
color: #a7aaad;
|
||||
}
|
||||
|
||||
.rank-math-api-status-card .status-value {
|
||||
color: #f0f0f1;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint {
|
||||
background: #2c3338;
|
||||
border-color: #3c434a;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint .endpoint-url {
|
||||
background: #1e1e1e;
|
||||
border-color: #3c434a;
|
||||
color: #a7aaad;
|
||||
}
|
||||
|
||||
.rank-math-api-endpoint .endpoint-description {
|
||||
color: #a7aaad;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user