mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-18 19:01:20 -08:00
feat: update changelog with Parcel to Vite refactor
feat: add danmuku plugin documentation and i18n setup guide - Created a new documentation file for the danmuku plugin with code examples. - Added a comprehensive guide for language settings (i18n) including default languages, importing languages, adding new languages, and modifying existing languages. - Included code snippets for initializing the Artplayer with different language settings. Add internationalization support for multiple languages in Artplayer - Introduced Arabic (ar), Czech (cs), Spanish (es), Persian (fa), French (fr), Indonesian (id), Polish (pl), Russian (ru), Turkish (tr), Vietnamese (vi), and Traditional Chinese (zh-tw) translations. - Created corresponding JavaScript and ES module files for each language containing translated strings for player controls and settings. - Added a new documentation file for language settings in the project. feat: add initial implementation of start option page with interactive code execution buttons feat: add danmuku plugin documentation and i18n setup guide - Created a new documentation file for the danmuku plugin, providing code examples for usage. - Added a comprehensive guide for language settings, including default languages, importing languages, adding new languages, and modifying existing languages. - Included code snippets for initializing the Artplayer with different language settings and importing language files. refactor: update danmuku worker implementation and remove unused i18n files - Changed the way the Danmuku class creates a Web Worker by using a worker loader instead of creating a blob. - Removed Arabic, Czech, Spanish, Persian, French, Indonesian, Polish, Russian, Turkish, Vietnamese, and Traditional Chinese i18n files as they are no longer needed. - Updated the Vite build configuration to disable banners for inline workers and added a plugin to remove worker banners from generated code. feat: add danmuku plugin and i18n setup documentation - Created a new documentation file for the danmuku plugin, providing code examples for usage. - Added a new documentation file for language settings (i18n), detailing how to set default languages, import languages, and add new languages. - Included code snippets for initializing the Artplayer with different language settings and examples for modifying existing languages. feat: add danmuku plugin and i18n setup documentation - Created a new documentation file for the danmuku plugin with code examples. - Added a new documentation file for language settings (i18n) including import instructions and examples for setting default and custom languages. - Updated the i18n documentation to include details on adding and modifying languages. feat: add danmuku plugin and i18n setup documentation - Created a new JavaScript file for the danmuku plugin documentation with multiple code execution buttons. - Added a new JavaScript file for i18n (internationalization) setup documentation, including instructions for language settings, importing languages, and modifying language options. - Included examples for setting default languages and adding new languages in the i18n documentation. Refactor code structure for improved readability and maintainability
This commit is contained in:
1 parent
ddb78cf850
commit
699bf09577
397 files changed
+99776
-8638
No files matched your search
+92
-14
@@ -8,6 +8,7 @@ export function getProjects() {
|
||||
.sync('packages/*')
|
||||
.sort()
|
||||
.filter(item => !item.endsWith('artplayer-vitepress'))
|
||||
.filter(item => fs.existsSync(path.join(item, 'package.json')))
|
||||
.reduce((result, item) => {
|
||||
const name = item.split(/\/|\\/g).pop()
|
||||
result[name] = path.resolve(process.cwd(), item)
|
||||
@@ -15,18 +16,95 @@ export function getProjects() {
|
||||
}, {})
|
||||
}
|
||||
|
||||
export function removeDir(dir) {
|
||||
if (fs.existsSync(dir)) {
|
||||
const files = fs.readdirSync(dir)
|
||||
files.forEach((file) => {
|
||||
const curPath = path.join(dir, file)
|
||||
if (fs.statSync(curPath).isDirectory()) {
|
||||
removeDir(curPath)
|
||||
}
|
||||
else {
|
||||
fs.unlinkSync(curPath)
|
||||
}
|
||||
})
|
||||
fs.rmdirSync(dir)
|
||||
}
|
||||
// Convert kebab-case to PascalCase: artplayer-plugin-ads -> ArtplayerPluginAds
|
||||
export function toPascalCase(name) {
|
||||
return name.replace(/(^|-)([a-z])/g, (_, _p, c) => c.toUpperCase())
|
||||
}
|
||||
|
||||
// Get Vite build config
|
||||
export function getViteBuildConfig(options) {
|
||||
const {
|
||||
entry,
|
||||
outDir,
|
||||
name,
|
||||
format,
|
||||
fileName,
|
||||
minify = 'esbuild',
|
||||
target = 'es2020',
|
||||
banner,
|
||||
emptyOutDir = false,
|
||||
} = options
|
||||
|
||||
const config = {
|
||||
configFile: false,
|
||||
logLevel: 'warn',
|
||||
build: {
|
||||
outDir,
|
||||
emptyOutDir,
|
||||
minify,
|
||||
target,
|
||||
lib: {
|
||||
entry,
|
||||
name,
|
||||
formats: [format],
|
||||
fileName: () => fileName,
|
||||
},
|
||||
rollupOptions: {
|
||||
output: {
|
||||
exports: 'default',
|
||||
},
|
||||
plugins: banner
|
||||
? [{
|
||||
name: 'add-banner-and-global',
|
||||
generateBundle(_, bundle) {
|
||||
for (const chunk of Object.values(bundle)) {
|
||||
if (chunk.type === 'chunk') {
|
||||
// Remove any inline worker banners (inside template literals)
|
||||
// Match: `/*! ... */\n and replace with just `
|
||||
let code = chunk.code.replace(/`\/\*![\s\S]*?\*\/\n/g, '`')
|
||||
// Add main banner if not present
|
||||
if (!code.startsWith('/*!')) {
|
||||
code = `${banner}\n${code}`
|
||||
}
|
||||
// For UMD format, modify the wrapper to always expose global
|
||||
// even when AMD loader is present (fix for RequireJS environments)
|
||||
if (format === 'umd') {
|
||||
// Match both original and minified UMD patterns:
|
||||
// Original: typeof define === 'function' && define.amd ? define(factory) :
|
||||
// Minified: "function"===typeof define&&define.amd?define(e):
|
||||
// Change to: ... ? (global.Name = factory(), define(function() { return global.Name; })) :
|
||||
code = code.replace(
|
||||
/["']function["']\s*===?\s*typeof define\s*&&\s*define\.amd\s*\?\s*define\((\w+)\)\s*:/,
|
||||
`"function"==typeof define&&define.amd?(t.${name}=$1(),define(function(){return t.${name}})):`,
|
||||
)
|
||||
}
|
||||
chunk.code = code
|
||||
}
|
||||
}
|
||||
},
|
||||
}]
|
||||
: [],
|
||||
},
|
||||
},
|
||||
// Disable banner for inline workers
|
||||
worker: {
|
||||
format: 'es',
|
||||
plugins: () => [{
|
||||
name: 'remove-worker-banner',
|
||||
generateBundle(_, bundle) {
|
||||
for (const chunk of Object.values(bundle)) {
|
||||
if (chunk.type === 'chunk' && chunk.code.startsWith('/*!')) {
|
||||
// Remove banner from worker code
|
||||
chunk.code = chunk.code.replace(/^\/\*![\s\S]*?\*\/\s*/, '')
|
||||
}
|
||||
}
|
||||
},
|
||||
}],
|
||||
},
|
||||
define: {
|
||||
'process.env.NODE_ENV': JSON.stringify(minify ? 'production' : 'development'),
|
||||
},
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
Reference in new issue
Block a user