sketch-module-user-preferences
Version:
A sketch module to manage a plugin's user preferences
40 lines (37 loc) • 1.47 kB
JavaScript
const SUITE_PREFIX = 'plugin.sketch.'
function isPresent (data) {
return data != null
}
module.exports = {
getUserPreferences: function (pluginName, defaultPrefs) {
var prefs = {}
var store = NSUserDefaults.alloc().initWithSuiteName(SUITE_PREFIX + pluginName)
Object.keys(defaultPrefs).forEach(function (k) {
if (typeof defaultPrefs[k] === 'boolean') {
prefs[k] = isPresent(store.boolForKey(k)) ? Boolean(store.boolForKey(k)) : defaultPrefs[k]
} else if (typeof defaultPrefs[k] === 'number') {
prefs[k] = isPresent(store.doubleForKey(k)) ? store.doubleForKey(k) : defaultPrefs[k]
} else if (typeof defaultPrefs[k] === 'string') {
prefs[k] = isPresent(store.stringForKey(k)) ? '' + store.stringForKey(k) : defaultPrefs[k]
} else if (Array.isArray(defaultPrefs[k])) {
prefs[k] = store.arrayForKey(k) || defaultPrefs[k]
} else {
prefs[k] = store.dictionaryForKey(k) || defaultPrefs[k]
}
})
return prefs
},
setUserPreferences: function (pluginName, prefs) {
var store = NSUserDefaults.alloc().initWithSuiteName(SUITE_PREFIX + pluginName)
Object.keys(prefs).forEach(function (k) {
if (typeof prefs[k] === 'boolean') {
store.setBool_forKey(prefs[k], k)
} else if (typeof prefs[k] === 'number') {
store.setDouble_forKey(prefs[k], k)
} else {
store.setObject_forKey(prefs[k], k)
}
})
store.synchronize()
}
}