diff --git a/app.js b/app.js index 7142c368ed..66b2c5116a 100644 --- a/app.js +++ b/app.js @@ -49,7 +49,9 @@ fs.readFile(path.join(__dirname, 'config.json'), function(err, data) { templates.init([ 'header', 'footer', 'logout', 'admin/header', 'admin/footer', 'admin/index', 'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext', - 'emails/header', 'emails/footer', 'install/header', 'install/footer', 'install/redis' + 'emails/header', 'emails/footer', 'install/header', 'install/footer', 'install/redis', + + 'noscript/topic' ]); templates.ready(function() { diff --git a/public/css/admin.less b/public/css/admin.less index 946a2233af..97615c5f24 100644 --- a/public/css/admin.less +++ b/public/css/admin.less @@ -1,13 +1,4 @@ -.inline-block { - display: inline-block; - *display: inline; - zoom: 1; -} - -.pointer { - cursor: pointer; - *cursor: hand; -} +@import "mixins"; .entry-row { border-radius: 10px; @@ -58,7 +49,7 @@ li { padding: 10px 16px; margin: 0.25em 1em; - .inline-block; + list-style-type: none; .pointer; -webkit-border-radius: 10px; -moz-border-radius: 10px; @@ -69,6 +60,19 @@ -o-transition: background-color 250ms linear; transition: background-color 250ms linear; + img { + max-width: 150px; + float: left; + } + + h4, p { + margin-left: 170px; + } + + p { + font-size: 0.9em; + } + &:hover { background-color: rgba(128, 128, 128, 0.2); } diff --git a/public/css/mixins.less b/public/css/mixins.less new file mode 100644 index 0000000000..fec0b45add --- /dev/null +++ b/public/css/mixins.less @@ -0,0 +1,23 @@ +.no-select { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.pointer { + cursor: pointer; + *cursor: hand; +} + +.inline-block { + display: inline-block; + *display: inline; + zoom: 1; +} + +.clear { + clear: both; +} \ No newline at end of file diff --git a/public/css/style.less b/public/css/style.less index 5903c56a7d..7a0e1b1fd6 100644 --- a/public/css/style.less +++ b/public/css/style.less @@ -1,22 +1,4 @@ -.no-select { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.pointer { - cursor: pointer; - *cursor: hand; -} - -.inline-block { - display: inline-block; - *display: inline; - zoom: 1; -} +@import "mixins"; body { /*background: #fdfdfd;*/ // port to default theme when it is implemented. diff --git a/public/src/forum/admin/themes.js b/public/src/forum/admin/themes.js new file mode 100644 index 0000000000..770d6e8452 --- /dev/null +++ b/public/src/forum/admin/themes.js @@ -0,0 +1,64 @@ +nodebb_admin.themes = { + render: function(bootswatch) { + var themeFrag = document.createDocumentFragment(), + themeEl = document.createElement('li'), + themeContainer = document.querySelector('#content .themes'), + numThemes = bootswatch.themes.length; + + for(var x=0;x' + + '
' + + '
' + + ' ' + + '' + + '
' + + '

' + theme.name + '

' + + '

' + theme.description + '

' + + '
' + + '
'; + themeFrag.appendChild(themeEl.cloneNode(true)); + } + themeContainer.innerHTML = ''; + themeContainer.appendChild(themeFrag); + } +}; + +(function() { + var scriptEl = document.createElement('script'); + scriptEl.src = 'http://api.bootswatch.com?callback=nodebb_admin.themes.render'; + document.body.appendChild(scriptEl); + + var themeContainer = document.querySelector('#content .themes'); + themeContainer.addEventListener('click', 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; + } + } + }, false); + + var revertEl = document.getElementById('revert_theme'); + revertEl.addEventListener('click', function() { + nodebb_admin.remove('theme:id'); + nodebb_admin.remove('theme:src'); + }, false); +})(); \ No newline at end of file diff --git a/public/templates/admin/footer.tpl b/public/templates/admin/footer.tpl index 6add320169..f780eb6fe2 100644 --- a/public/templates/admin/footer.tpl +++ b/public/templates/admin/footer.tpl @@ -7,71 +7,77 @@ + + diff --git a/public/templates/admin/themes.tpl b/public/templates/admin/themes.tpl index 6bb6cedb3c..76994f6453 100644 --- a/public/templates/admin/themes.tpl +++ b/public/templates/admin/themes.tpl @@ -1,71 +1,18 @@

Themes


+

Bootswatch Themes

- NodeBB Themes are powered by Bootswatch, a repository containing hundreds of themes built + NodeBB Themes are powered by Bootswatch, a repository containing themes built with Bootstrap as a base theme.

- \ No newline at end of file + \ No newline at end of file diff --git a/public/templates/noscript/topic.tpl b/public/templates/noscript/topic.tpl new file mode 100644 index 0000000000..a0b4445589 --- /dev/null +++ b/public/templates/noscript/topic.tpl @@ -0,0 +1,15 @@ +
+

+ Your browser does not seem to support javascript. As a result, your viewing experience will be diminished. +

+

+ Please download a browser that supports javascript, or enable it, if it disabled (i.e. NoScript). +

+
+ \ No newline at end of file diff --git a/src/meta.js b/src/meta.js index 294f3d1fdd..70b7d11ee9 100644 --- a/src/meta.js +++ b/src/meta.js @@ -37,6 +37,9 @@ var utils = require('./../public/src/utils.js'), RDB.hset('config', field, value, function(err, res) { callback(err); }); + }, + remove: function(field) { + RDB.hdel('config', field); } } }(exports)); \ No newline at end of file diff --git a/src/topics.js b/src/topics.js index 3ec79478be..a90e41f4ae 100644 --- a/src/topics.js +++ b/src/topics.js @@ -184,6 +184,16 @@ marked.setOptions({ }); } + Topics.get_posts_noscript = function(tid, current_user, callback) { + // Topics.get_topic(tid, current_user, function() { + callback([ + { + foo: 'bar' + } + ]); + // }); + } + Topics.get_cid_by_tid = function(tid, callback) { RDB.get(schema.topics(tid).cid, function(err, cid) { if (cid && parseInt(cid) > 0) { diff --git a/src/webserver.js b/src/webserver.js index 1c23af81bb..e97779c534 100644 --- a/src/webserver.js +++ b/src/webserver.js @@ -114,10 +114,11 @@ var express = require('express'), var topic_url = tid + (req.params.slug ? '/' + req.params.slug : ''); - topics.get_cid_by_tid(tid, function(cid) { + topics.get_posts_noscript(tid, ((req.user) ? req.user.uid : 0), function(posts) { res.send( build_header() + - '' + + '\n\t' + + '\n\t' + templates['footer'] ); }); diff --git a/src/websockets.js b/src/websockets.js index 78283703f9..916ab20255 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -307,6 +307,10 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), }); }); + socket.on('api:config.remove', function(key) { + meta.config.remove(key); + }); + socket.on('api:composer.push', function(data) { if (uid > 0) { if (parseInt(data.tid) > 0) {