Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 55 additions & 19 deletions src/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -333,14 +333,15 @@ defaultPreviewUrlCallback = function (url, info) {
return this.previewProxy + queryPart
}

normalize = function (settings) {
normalize = function (settings, dirtySettings = []) {
arrayOptions(settings, ['tabs', 'preferredTypes', 'videoPreferredMimeTypes'])
urlOptions(settings, [
'cdnBase',
'socialBase',
'urlBase',
'scriptBase',
'cdnBasePrefixed'
'cdnBasePrefixed',
'topLevelOrigin'
])
flagOptions(settings, [
'doNotStore',
Expand Down Expand Up @@ -404,7 +405,11 @@ normalize = function (settings) {
settings.tabs[skydriveIndex] = 'onedrive'
}

if (settings.publicKey && settings.cdnBase === initialSettings.cdnBase) {
if (
!dirtySettings.includes('cdnBase') &&
settings.publicKey &&
settings.cdnBase === initialSettings.cdnBase
) {
settings.cdnBase = getPrefixedCdnBaseSync(
settings.publicKey,
settings.cdnBasePrefixed
Expand All @@ -415,36 +420,67 @@ normalize = function (settings) {
}

// global variables only
// Publicly-accessible
const globals = function () {
var key, scriptSettings, value
scriptSettings = {}
for (key in defaults) {
value = window[`UPLOADCARE_${upperCase(key)}`]
const globalSettings = {}
const dirtyKeys = []
for (const key in defaults) {
const value = window[`UPLOADCARE_${upperCase(key)}`]
if (value != null) {
scriptSettings[key] = value
dirtyKeys.push(key)
globalSettings[key] = value
}
}
return scriptSettings

// Define non-enumerable property for dirtyKeys on returned object
// This is needed to support backwards compatibility with existing code that relies on this method
Object.defineProperty(globalSettings, '__dirtyKeys', {
value: dirtyKeys,
enumerable: false,
writable: false,
configurable: false
})

return globalSettings
}

// Defaults + global variables + global overrides (once from uploadcare.start)
// Not publicly-accessible
// Publicly-accessible (but under `global` name for some reason)
const common = once(function (settings, ignoreGlobals) {
var result
const dirtyKeys = []
if (!ignoreGlobals) {
defaults = $.extend(defaults, globals())
}
result = normalize($.extend(defaults, settings || {}))
waitForSettings.fire(result)
return result
const globalSettings = globals()
dirtyKeys.push(...globalSettings.__dirtyKeys)
defaults = $.extend(defaults, globalSettings)
}
const userSettings = settings || {}
dirtyKeys.push(...Object.keys(userSettings))
const commonSettings = normalize($.extend(defaults, userSettings), dirtyKeys)
waitForSettings.fire(commonSettings)

// Define non-enumerable property for dirtyKeys on returned object
// This is needed to support backwards compatibility with existing code that relies on this method
Object.defineProperty(commonSettings, '__dirtyKeys', {
value: dirtyKeys,
enumerable: false,
writable: false,
configurable: false
})

return commonSettings
})

// Defaults + global variables + global overrides + local overrides
// Publicly-accessible
const build = function (settings) {
var result
result = $.extend({}, common())
const dirtyKeys = []
const commonSettings = common()
dirtyKeys.push(...commonSettings.__dirtyKeys)
let result = $.extend({}, commonSettings)
if (!$.isEmptyObject(settings)) {
result = normalize($.extend(result, settings))
const userDirtyKeys = Object.keys(settings)
dirtyKeys.push(...userDirtyKeys)
result = normalize($.extend(result, settings), dirtyKeys)
}
return result
}
Expand Down
Loading