var nodebb_admin = (function(nodebb_admin) { var themes = {}; themes.render = function(bootswatch) { var themeFrag = document.createDocumentFragment(), themeEl = document.createElement('li'), themeContainer = document.querySelector('#bootstrap_themes'), numThemes = bootswatch.themes.length; 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 = '<img src="' + theme.thumbnail + '" />' + '<div>' + '<div class="pull-right">' + '<button class="btn btn-primary" data-action="use">Use</button> ' + '<button class="btn" data-action="preview">Preview</button>' + '</div>' + '<h4>' + theme.name + '</h4>' + '<p>' + theme.description + '</p>' + '</div>' + '<div class="clear">'; themeFrag.appendChild(themeEl.cloneNode(true)); } themeContainer.innerHTML = ''; themeContainer.appendChild(themeFrag); } nodebb_admin.themes = themes; return nodebb_admin; }(nodebb_admin || {})); (function() { var scriptEl = document.createElement('script'); scriptEl.src = 'http://api.bootswatch.com/2/?callback=nodebb_admin.themes.render'; 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'), cssSrc = parentEl.attr('data-css'), cssName = parentEl.attr('data-theme'); socket.emit('api:config.set', { key: 'theme:id', value: 'bootswatch:' + cssName }); 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) { nodebb_admin.remove('theme:id'); nodebb_admin.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'); if (themes.length > 0) { for(var x=0,numThemes=themes.length;x<numThemes;x++) { liEl.setAttribute('data-theme', themes[x].id); liEl.setAttribute('data-css', themes[x].src); liEl.innerHTML = '<img src="' + themes[x].screenshot + '" />' + '<div>' + '<div class="pull-right">' + '<button class="btn btn-primary" data-action="use">Use</button> ' + '<button class="btn" data-action="preview">Preview</button>' + '</div>' + '<h4>' + themes[x].name + '</h4>' + '<p>' + themes[x].description + (themes[x].url ? ' (<a href="' + themes[x].url + '">Homepage</a>)' : '') + '</p>' + '</div>' + '<div class="clear">'; 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); }); })();