define(function() { var Themes = {}; Themes.init = function() { var scriptEl = document.createElement('script'); scriptEl.src = 'http://api.bootswatch.com/3/?callback=bootswatchListener'; document.body.appendChild(scriptEl); var bootstrapThemeContainer = document.querySelector('#bootstrap_themes'), installedThemeContainer = document.querySelector('#installed_themes'), themeEvent = function(e) { if (e.target.hasAttribute('data-action')) { switch (e.target.getAttribute('data-action')) { case 'preview': var cssSrc = $(e.target).parents('li').attr('data-css'), cssEl = document.getElementById('base-theme'); cssEl.href = cssSrc; break; case 'use': var parentEl = $(e.target).parents('li'), themeType = parentEl.attr('data-type'), cssSrc = parentEl.attr('data-css'), cssName = parentEl.attr('data-theme'); socket.emit('api:config.set', { key: 'theme:type', value: themeType }); socket.emit('api:config.set', { key: 'theme:id', value: cssName }); if (themeType === 'bootswatch') { socket.emit('api:config.set', { key: 'theme:src', value: cssSrc }); } break; } } }; bootstrapThemeContainer.addEventListener('click', themeEvent); installedThemeContainer.addEventListener('click', themeEvent); var revertEl = document.getElementById('revert_theme'); revertEl.addEventListener('click', function() { bootbox.confirm('Are you sure you wish to remove the custom theme and restore the NodeBB default theme?', function(confirm) { if (confirm) { require(['forum/admin/settings'], function(Settings) { Settings.remove('theme:id'); Settings.remove('theme:src'); }); } }); }, false); // Installed Themes socket.emit('api:admin.themes.getInstalled', function(themes) { var instListEl = document.getElementById('installed_themes'), themeFrag = document.createDocumentFragment(), liEl = document.createElement('li'); liEl.setAttribute('data-type', 'local'); if (themes.length > 0) { for (var x = 0, numThemes = themes.length; x < numThemes; x++) { liEl.setAttribute('data-theme', themes[x].id); liEl.innerHTML = '' + '
' + '
' + ' ' + '' + '
' + '

' + themes[x].name + '

' + '

' + themes[x].description + (themes[x].url ? ' (Homepage)' : '') + '

' + '
' + '
'; themeFrag.appendChild(liEl.cloneNode(true)); } } else { // No themes found liEl.className = 'no-themes'; liEl.innerHTML = 'No installed themes found'; themeFrag.appendChild(liEl); } instListEl.innerHTML = ''; instListEl.appendChild(themeFrag); }); } Themes.render = function(bootswatch) { var themeFrag = document.createDocumentFragment(), themeEl = document.createElement('li'), themeContainer = document.querySelector('#bootstrap_themes'), numThemes = bootswatch.themes.length; themeEl.setAttribute('data-type', 'bootswatch'); for (var x = 0; x < numThemes; x++) { var theme = bootswatch.themes[x]; themeEl.setAttribute('data-css', theme.cssMin); themeEl.setAttribute('data-theme', theme.name); themeEl.innerHTML = '' + '
' + '
' + ' ' + '' + '
' + '

' + theme.name + '

' + '

' + theme.description + '

' + '
' + '
'; themeFrag.appendChild(themeEl.cloneNode(true)); } themeContainer.innerHTML = ''; themeContainer.appendChild(themeFrag); } return Themes; });