|
|
|
@ -0,0 +1,121 @@ |
|
|
|
import fs from 'fs'; |
|
|
|
import path from 'path'; |
|
|
|
import { fileURLToPath } from 'url'; |
|
|
|
|
|
|
|
const __filename = fileURLToPath(import.meta.url); |
|
|
|
const __dirname = path.dirname(__filename); |
|
|
|
|
|
|
|
// Mapping of sidebar links to actual file locations
|
|
|
|
const linkMappings = { |
|
|
|
'dashboard-finance.html': 'pages/dashboards/finance.html', |
|
|
|
'dashboard-sales.html': 'pages/dashboards/sales.html', |
|
|
|
'dashboard-influencer.html': 'pages/dashboards/influencer.html', |
|
|
|
'ui-cards.html': 'pages/ui-elements/cards.html', |
|
|
|
'ui-general.html': 'pages/ui-elements/general.html', |
|
|
|
'ui-typography.html': 'pages/ui-elements/typography.html', |
|
|
|
'general-tables.html': 'pages/tables/general-tables.html', |
|
|
|
'data-tables.html': 'pages/tables/data-tables.html', |
|
|
|
'products.html': 'pages/ecommerce/products.html', |
|
|
|
'product-single.html': 'pages/ecommerce/product-single.html', |
|
|
|
'checkout.html': 'pages/ecommerce/checkout.html', |
|
|
|
'blank-page.html': 'pages/misc/blank-page.html', |
|
|
|
'login.html': 'pages/auth/login.html', |
|
|
|
'signup.html': 'pages/auth/signup.html', |
|
|
|
'forgot-password.html': 'pages/auth/forgot-password.html', |
|
|
|
'404.html': 'pages/misc/404.html', |
|
|
|
'calendar.html': 'pages/calendar.html', |
|
|
|
'chat.html': 'pages/chat.html', |
|
|
|
'inbox.html': 'pages/email/inbox.html', |
|
|
|
'influencer-finder.html': 'pages/apps/influencer-finder.html', |
|
|
|
'influencer-profile.html': 'pages/apps/influencer-profile.html', |
|
|
|
'users.html': 'pages/users.html', |
|
|
|
'timeline.html': 'pages/timeline.html', |
|
|
|
'settings.html': 'pages/settings.html', |
|
|
|
'form-elements.html': 'pages/form-elements.html', |
|
|
|
'form-validation.html': 'pages/form-validation.html', |
|
|
|
'multiselect.html': 'pages/multiselect.html', |
|
|
|
'charts.html': 'pages/charts/index.html' |
|
|
|
}; |
|
|
|
|
|
|
|
// Function to update paths in a file
|
|
|
|
function updatePathsInFile(filePath, rootDir) { |
|
|
|
const content = fs.readFileSync(filePath, 'utf8'); |
|
|
|
const fileRelativeToRoot = path.relative(rootDir, filePath); |
|
|
|
const fileDepth = fileRelativeToRoot.split(path.sep).length - 1; |
|
|
|
|
|
|
|
let updatedContent = content; |
|
|
|
|
|
|
|
// Update all .html links
|
|
|
|
updatedContent = updatedContent.replace(/href="([^"]+\.html)"/g, (match, p1) => { |
|
|
|
// Skip if already has ../ or is an absolute URL or anchor
|
|
|
|
if (p1.startsWith('../') || p1.startsWith('http') || p1.startsWith('#') || p1.startsWith('/')) { |
|
|
|
return match; |
|
|
|
} |
|
|
|
|
|
|
|
// Check if this link needs mapping
|
|
|
|
const mappedPath = linkMappings[p1] || p1; |
|
|
|
|
|
|
|
// For nested files, calculate the correct relative path
|
|
|
|
if (fileDepth > 0) { |
|
|
|
const fromDir = path.dirname(fileRelativeToRoot); |
|
|
|
const toPath = mappedPath === 'index.html' ? 'index.html' : mappedPath; |
|
|
|
const relativePath = path.relative(fromDir, toPath).replace(/\\/g, '/'); |
|
|
|
return `href="${relativePath}"`; |
|
|
|
} |
|
|
|
|
|
|
|
// For root files, use the mapped path directly
|
|
|
|
return `href="${mappedPath}"`; |
|
|
|
}); |
|
|
|
|
|
|
|
// Update asset paths
|
|
|
|
updatedContent = updatedContent.replace(/(?:href|src)="(assets\/[^"]+)"/g, (match, p1) => { |
|
|
|
if (p1.startsWith('../') || p1.startsWith('http')) { |
|
|
|
return match; |
|
|
|
} |
|
|
|
const prefix = fileDepth > 0 ? '../'.repeat(fileDepth) : ''; |
|
|
|
return match.replace(p1, prefix + p1); |
|
|
|
}); |
|
|
|
|
|
|
|
// Update special paths like /pages/email/compose.html
|
|
|
|
updatedContent = updatedContent.replace(/href="\/pages\/([^"]+)"/g, (match, p1) => { |
|
|
|
const prefix = fileDepth > 0 ? '../'.repeat(fileDepth) : ''; |
|
|
|
return `href="${prefix}pages/${p1}"`; |
|
|
|
}); |
|
|
|
|
|
|
|
// Only write if content changed
|
|
|
|
if (content !== updatedContent) { |
|
|
|
fs.writeFileSync(filePath, updatedContent); |
|
|
|
console.log(`Updated paths in: ${path.relative(rootDir, filePath)}`); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Function to recursively find all HTML files
|
|
|
|
function findHtmlFiles(dir, files = []) { |
|
|
|
const items = fs.readdirSync(dir); |
|
|
|
|
|
|
|
for (const item of items) { |
|
|
|
const fullPath = path.join(dir, item); |
|
|
|
const stat = fs.statSync(fullPath); |
|
|
|
|
|
|
|
if (stat.isDirectory()) { |
|
|
|
findHtmlFiles(fullPath, files); |
|
|
|
} else if (item.endsWith('.html')) { |
|
|
|
files.push(fullPath); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return files; |
|
|
|
} |
|
|
|
|
|
|
|
// Main execution
|
|
|
|
const distDir = path.resolve(__dirname, '../dist'); |
|
|
|
console.log('Fixing paths for universal deployment...\n'); |
|
|
|
|
|
|
|
const htmlFiles = findHtmlFiles(distDir); |
|
|
|
console.log(`Found ${htmlFiles.length} HTML files to process\n`); |
|
|
|
|
|
|
|
htmlFiles.forEach(file => { |
|
|
|
updatePathsInFile(file, distDir); |
|
|
|
}); |
|
|
|
|
|
|
|
console.log('\nPath fixing complete! The project can now be deployed to any subfolder.'); |