diff --git a/migrations/20140914_upgrade_admin_contrib_tiers.js b/migrations/20140914_upgrade_admin_contrib_tiers.js new file mode 100644 index 0000000000..1665bba1bc --- /dev/null +++ b/migrations/20140914_upgrade_admin_contrib_tiers.js @@ -0,0 +1,73 @@ +var migrationName = '20140914_upgrade_admin_contrib_tiers'; +var authorName = 'Alys'; // in case script author needs to know when their ... +var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done + +/** + * https://github.com/HabitRPG/habitrpg/issues/3801 + * Convert Tier 8 contributors to Tier 9 (staff) (all current Tier 8s are admins). + * Convert Tier 7 contributors with admin flag to Tier 8 (moderators). + */ + +var mongo = require('mongoskin'); +var _ = require('lodash'); + +var dbUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users'); + +var query = + { 'contributor.level':{$gte:7}, 'contributor.admin':true, 'migration': {$ne: migrationName} }; + +var fields = {'migration':1, + 'contributor.admin':1, + 'contributor.level':1, + 'auth.local.username':1, + 'profile.name':1, + }; + +var userResults = {}; // each key is a UUID, each value is a username; + // contains only the users changed + +console.warn('Updating users...'); +var progressCount = 1000; +var count = 0; +dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) { + if (err) { return exiting(1, 'ERROR! ' + err); } + if (!user) { + console.warn('All appropriate users found and modified.'); + return displayData(); + } + count++; + + var set = {'migration': migrationName}; + var inc = {'contributor.level':1, _v:1}; + + userResults[user._id] = user.profile.name; + + dbUsers.update({_id:user._id}, {$set:set, $inc:inc}); + + if (count%progressCount == 0) console.warn(count + ' ' + user._id); + if (user._id == authorUuid) console.warn(authorName + ' processed'); + if (user._id == '9' ) console.warn('lefnire' + ' processed'); +}); + + +function displayData() { + console.log('users modified:'); + _.each(userResults, function(name, uuid) { + console.log(name); + }); + console.warn('\n' + count + + ' users processed (should be 11 according to the Hall)\n'); + return exiting(0); +} + + +function exiting(code, msg) { + code = code || 0; // 0 = success + if (code && !msg) { msg = 'ERROR!'; } + if (msg) { + if (code) { console.error(msg); } + else { console.log( msg); } + } + process.exit(code); +} + diff --git a/public/community-guidelines-images/backCorner.png b/public/community-guidelines-images/backCorner.png new file mode 100755 index 0000000000..bcbeca3a43 Binary files /dev/null and b/public/community-guidelines-images/backCorner.png differ diff --git a/public/community-guidelines-images/beingHabitican.png b/public/community-guidelines-images/beingHabitican.png new file mode 100755 index 0000000000..dc4d7c810c Binary files /dev/null and b/public/community-guidelines-images/beingHabitican.png differ diff --git a/public/community-guidelines-images/consequences.png b/public/community-guidelines-images/consequences.png new file mode 100755 index 0000000000..211607a511 Binary files /dev/null and b/public/community-guidelines-images/consequences.png differ diff --git a/public/community-guidelines-images/contributing.png b/public/community-guidelines-images/contributing.png new file mode 100755 index 0000000000..8e8a34c088 Binary files /dev/null and b/public/community-guidelines-images/contributing.png differ diff --git a/public/community-guidelines-images/github.gif b/public/community-guidelines-images/github.gif new file mode 100755 index 0000000000..4f4326217d Binary files /dev/null and b/public/community-guidelines-images/github.gif differ diff --git a/public/community-guidelines-images/infractions.png b/public/community-guidelines-images/infractions.png new file mode 100755 index 0000000000..2a839083af Binary files /dev/null and b/public/community-guidelines-images/infractions.png differ diff --git a/public/community-guidelines-images/intro.png b/public/community-guidelines-images/intro.png new file mode 100644 index 0000000000..9c364f41cd Binary files /dev/null and b/public/community-guidelines-images/intro.png differ diff --git a/public/community-guidelines-images/moderators.png b/public/community-guidelines-images/moderators.png new file mode 100644 index 0000000000..dcbcc1b82b Binary files /dev/null and b/public/community-guidelines-images/moderators.png differ diff --git a/public/community-guidelines-images/publicGuilds.png b/public/community-guidelines-images/publicGuilds.png new file mode 100755 index 0000000000..e783fb88de Binary files /dev/null and b/public/community-guidelines-images/publicGuilds.png differ diff --git a/public/community-guidelines-images/publicSpaces.png b/public/community-guidelines-images/publicSpaces.png new file mode 100755 index 0000000000..13662443ff Binary files /dev/null and b/public/community-guidelines-images/publicSpaces.png differ diff --git a/public/community-guidelines-images/restoration.png b/public/community-guidelines-images/restoration.png new file mode 100755 index 0000000000..0a2db14d8b Binary files /dev/null and b/public/community-guidelines-images/restoration.png differ diff --git a/public/community-guidelines-images/staff.png b/public/community-guidelines-images/staff.png new file mode 100755 index 0000000000..1ae892bce8 Binary files /dev/null and b/public/community-guidelines-images/staff.png differ diff --git a/public/community-guidelines-images/tavern.png b/public/community-guidelines-images/tavern.png new file mode 100755 index 0000000000..dc5b879483 Binary files /dev/null and b/public/community-guidelines-images/tavern.png differ diff --git a/public/community-guidelines-images/trello.png b/public/community-guidelines-images/trello.png new file mode 100755 index 0000000000..402f7f7edd Binary files /dev/null and b/public/community-guidelines-images/trello.png differ diff --git a/public/community-guidelines-images/wiki.png b/public/community-guidelines-images/wiki.png new file mode 100755 index 0000000000..0aaa3121f5 Binary files /dev/null and b/public/community-guidelines-images/wiki.png differ diff --git a/public/css/game-pane.styl b/public/css/game-pane.styl index 0c3f8ff9e6..66d2b3f8d1 100644 --- a/public/css/game-pane.styl +++ b/public/css/game-pane.styl @@ -13,6 +13,11 @@ margin-bottom: 0.618em line-height: 1.618em +.guidelines-not-accepted p + border: 1px solid #ccc + padding: 1em; + margin-bottom: 0.5em; + .chat-controls > div display: inline-block @@ -130,8 +135,7 @@ hrpg-contributor-label-mixin($hrpg-contributor-color) .label-contributor-7 hrpg-contributor-label-mixin($color-contributor-seven) .label-contributor-8 - hrpg-contributor-label-mixin($color-contributor-staff) - // FOR NEW MOD LEVEL: line above will change from -staff to -mod + hrpg-contributor-label-mixin($color-contributor-mod) .label-contributor-9 hrpg-contributor-label-mixin($color-contributor-staff) .label-npc diff --git a/public/fontello/LICENSE.txt b/public/fontello/LICENSE.txt new file mode 100644 index 0000000000..3346881047 --- /dev/null +++ b/public/fontello/LICENSE.txt @@ -0,0 +1,12 @@ +Font license info + + +## Fontelico + + Copyright (C) 2012 by Fontello project + + Author: Crowdsourced, for Fontello project + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://fontello.com + + diff --git a/public/fontello/README.txt b/public/fontello/README.txt new file mode 100644 index 0000000000..43e23f2833 --- /dev/null +++ b/public/fontello/README.txt @@ -0,0 +1,75 @@ +This webfont is generated by http://fontello.com open source project. + + +================================================================================ +Please, note, that you should obey original font licences, used to make this +webfont pack. Details available in LICENSE.txt file. + +- Usually, it's enough to publish content of LICENSE.txt file somewhere on your + site in "About" section. + +- If your project is open-source, usually, it will be ok to make LICENSE.txt + file publically available in your repository. + +- Fonts, used in Fontello, don't require to make clickable links on your site. + But any kind of additional authors crediting is welcome. +================================================================================ + + +Comments on archive content +--------------------------- + +- /font/* - fonts in different formats + +- /css/* - different kinds of css, for all situations. Should be ok with + twitter bootstrap. Also, you can skip style and assign icon classes + directly to text elements, if you don't mind about IE7. + +- demo.html - demo file, to show your webfont content + +- LICENSE.txt - license info about source fonts, used to build your one. + +- config.json - keeps your settings. You can import it back to fontello anytime, + to continue your work + + +Why so many CSS files ? +----------------------- + +Because we like to fit all your needs :) + +- basic file, .css - is usually enougth, in contains @font-face + and character codes definition + +- *-ie7.css - if you need IE7 support, but still don't wish to put char codes + directly into html + +- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face + rules, but still wish to benefit of css generation. That can be very + convenient for automated assets build systems. When you need to update font - + no needs to manually edit files, just override old version with archive + content. See fontello source codes for example. + +- *-embedded.css - basic css file, but with embedded WOFF font, to avoid + CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. + We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` + server headers. But if you ok with dirty hack - this file is for you. Note, + that data url moved to separate @font-face to avoid problems with + + + + + + + + +
+

+ fontelico + font demo +

+ +
+
+
+
icon-crown0xe800
+
icon-crown-plus0xe801
+
icon-crown-minus0xe802
+
icon-spin60xe804
+
+
+
icon-spin50xe805
+
icon-spin40xe806
+
icon-spin30xe807
+
icon-spin20xe808
+
+
+
icon-spin10xe809
+
icon-marquee0xe80a
+
+
+ + + \ No newline at end of file diff --git a/public/fontello/font/fontelico.eot b/public/fontello/font/fontelico.eot new file mode 100644 index 0000000000..8173787224 Binary files /dev/null and b/public/fontello/font/fontelico.eot differ diff --git a/public/fontello/font/fontelico.svg b/public/fontello/font/fontelico.svg new file mode 100644 index 0000000000..dc56a24db8 --- /dev/null +++ b/public/fontello/font/fontelico.svg @@ -0,0 +1,21 @@ + + + +Copyright (C) 2014 by original authors @ fontello.com + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/fontello/font/fontelico.ttf b/public/fontello/font/fontelico.ttf new file mode 100644 index 0000000000..5046777e22 Binary files /dev/null and b/public/fontello/font/fontelico.ttf differ diff --git a/public/fontello/font/fontelico.woff b/public/fontello/font/fontelico.woff new file mode 100644 index 0000000000..c603762754 Binary files /dev/null and b/public/fontello/font/fontelico.woff differ diff --git a/public/js/controllers/hallCtrl.js b/public/js/controllers/hallCtrl.js index 83ce8269e9..c135f5e8df 100644 --- a/public/js/controllers/hallCtrl.js +++ b/public/js/controllers/hallCtrl.js @@ -8,6 +8,7 @@ habitrpg.controller("HallHeroesCtrl", ['$scope', '$rootScope', 'User', 'Notifica $scope.hero = Hero.get({uid:uuid}); } $scope.saveHero = function(hero) { + $scope.hero.contributor.admin = ($scope.hero.contributor.level > 7) ? true : false; hero.$save(function(){ Notification.text("User updated"); $scope.hero = undefined; diff --git a/public/js/controllers/rootCtrl.js b/public/js/controllers/rootCtrl.js index 160f34af50..602fc19287 100644 --- a/public/js/controllers/rootCtrl.js +++ b/public/js/controllers/rootCtrl.js @@ -42,10 +42,32 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ // styling helpers $scope.userLevelStyle = function(user,style){ style = style || ''; - if(user && user.backer && user.backer.npc) - style += ' label-npc'; + var npc = (user && user.backer && user.backer.npc) ? user.backer.npc : ''; + var level = (user && user.contributor && user.contributor.level) ? user.contributor.level : ''; + style += $scope.userLevelStyleFromLevel(level,npc,style) + return style; + } + $scope.userAdminGlyphiconStyle = function(user,style){ + style = style || ''; if(user && user.contributor && user.contributor.level) - style += ' label-contributor-'+user.contributor.level; + style += $scope.userAdminGlyphiconStyleFromLevel(user.contributor.level,style) + return style; + } + $scope.userLevelStyleFromLevel = function(level,npc,style){ + style = style || ''; + if(npc) + style += ' label-npc'; + if(level) + style += ' label-contributor-'+level; + return style; + } + $scope.userAdminGlyphiconStyleFromLevel = function(level,style){ + style = style || ''; + if(level) + if(level==8) + style += ' glyphicon glyphicon-star'; // moderator + if(level==9) + style += ' glyphicon icon-crown'; // staff return style; } @@ -100,6 +122,10 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ $rootScope.set({'flags.newStuff':false}); } + $rootScope.acceptCommunityGuidelines = function() { + $rootScope.set({'flags.communityGuidelinesAccepted':true}); + } + $rootScope.notPorted = function(){ alert(window.env.t('notPorted')); } diff --git a/public/manifest.json b/public/manifest.json index 41f0e4dc13..e44d2b2d0a 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -69,7 +69,8 @@ "app.css", "bower_components/pnotify/jquery.pnotify.default.css", "bower_components/pnotify/jquery.pnotify.default.icons.css", - "bower_components/habitrpg-shared/dist/habitrpg-shared.css" + "bower_components/habitrpg-shared/dist/habitrpg-shared.css", + "fontello/css/fontelico.css" ] }, "static": { diff --git a/src/models/user.js b/src/models/user.js index 730d29635f..a0c5913045 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -71,7 +71,7 @@ var UserSchema = new Schema({ }, contributor: { - level: Number, // 1-7, see https://trello.com/c/wkFzONhE/277-contributor-gear + level: Number, // 1-9, see https://trello.com/c/wkFzONhE/277-contributor-gear https://github.com/HabitRPG/habitrpg/issues/3801 admin: Boolean, sudo: Boolean, text: String, // Artisan, Friend, Blacksmith, etc @@ -116,7 +116,8 @@ var UserSchema = new Schema({ rebirthEnabled: {type: Boolean, 'default': false}, freeRebirth: {type: Boolean, 'default': false}, levelDrops: {type:Schema.Types.Mixed, 'default':{}}, - chatRevoked: Boolean + chatRevoked: Boolean, + communityGuidelinesAccepted: {type: Boolean, 'default': false} }, history: { exp: Array, // [{date: Date, value: Number}], // big peformance issues if these are defined @@ -458,10 +459,6 @@ UserSchema.methods.unlink = function(options, cb) { module.exports.schema = UserSchema; module.exports.model = mongoose.model("User", UserSchema); -mongoose.model("User").find({'contributor.admin':true},function(err,mods){ - module.exports.mods = _.map(mods,function(m){ - var lvl = (m.backer && m.backer.npc) ? 'label-npc' : - 'label-contributor-' + m.contributor.level; - return ' '+ m.profile.name + '' - }); +mongoose.model("User").find({$query:{'contributor.admin':true}, $orderby:{'contributor.level':-1, 'backer.npc':-1, 'profile.name':1}},function(err,mods){ + module.exports.mods = mods }); diff --git a/src/routes/pages.js b/src/routes/pages.js index 10c3cb8e54..113375c16e 100644 --- a/src/routes/pages.js +++ b/src/routes/pages.js @@ -20,7 +20,7 @@ router.get('/', i18n.getUserLanguage, middleware.locals, function(req, res) { // -------- Marketing -------- -var pages = ['front', 'privacy', 'terms', 'api', 'features', 'videos', 'contact', 'plans', 'new-stuff']; +var pages = ['front', 'privacy', 'terms', 'api', 'features', 'videos', 'contact', 'plans', 'new-stuff', 'community-guidelines']; _.each(pages, function(name){ router.get('/static/' + name, i18n.getUserLanguage, middleware.locals, function(req, res) { @@ -34,4 +34,4 @@ router.get('/static/extensions', function(req, res) { res.redirect('http://habitrpg.wikia.com/wiki/App_and_Extension_Integrations'); }); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/views/options/social/chat-box.jade b/views/options/social/chat-box.jade index 50bcae08a3..7953e7b1b6 100644 --- a/views/options/social/chat-box.jade +++ b/views/options/social/chat-box.jade @@ -1,3 +1,17 @@ +//div.chat-form.guidelines-not-accepted(ng-if='!user.flags.communityGuidelinesAccepted') +// p If you would like to post messages in the Tavern or any party or guild chat, please first read our +// |  +// a(target='_blank', href='/static/community-guidelines')=env.t('communityGuidelines') +// | and then click the button below to indicate that you accept them. +// .chat-controls +// div +// button.btn.btn-warning(ng-click='acceptCommunityGuidelines()')=env.t('iAcceptCommunityGuidelines') +// .chat-buttons +// button(type="button", ng-click='sync(group)', tooltip=env.t('toolTipMsg')) +// span.glyphicon.glyphicon-refresh + +//form.chat-form(ng-if='user.flags.communityGuidelinesAccepted' ng-submit='postChat(group,message.content)') +//////////// When we want to block the ability to chat until the Community Guidelines have been accepted, delete the one line immediately below this comment and un-comment all lines above. form.chat-form(ng-submit='postChat(group,message.content)') div(ng-controller='AutocompleteCtrl') textarea.form-control(rows=4, ui-keypress='{13:"postChat(group,message.content)"}', ng-model='message.content', updateinterval='250', flag='@', at-user, auto-complete) @@ -11,4 +25,4 @@ form.chat-form(ng-submit='postChat(group,message.content)') .chat-buttons input(type='submit', value=env.t('sendChat'), ng-class='{disabled: _sending == true}') button(type="button", ng-click='sync(group)', tooltip=env.t('toolTipMsg')) - span.glyphicon.glyphicon-refresh \ No newline at end of file + span.glyphicon.glyphicon-refresh diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 742e34c616..d7507908a5 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,9 +1,10 @@ li.chat-message(ng-repeat='message in group.chat track by message.id', ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}') .scrollable-message - span(ng-if='::message.uuid!="system"') + span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label - span {{::message.user}} - |   + span {{::message.user}}  + span(ng-class='userAdminGlyphiconStyleFromLevel(message.contributor.level)') + // this invisible username label is here to push the message text far enough right that the visible label can be floated to this point without covering up any of the text markdown(ng-model='::message.text') | - span.muted.time(from-now='::message.timestamp') @@ -13,5 +14,6 @@ li.chat-message(ng-repeat='message in group.chat track by message.id', ng-class= |   a(ng-if=':: user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a.label.label-default.chat-message(ng-if=':: message.user', class='float-label', ng-class=':: {"label-npc": message.backer.npc, "label-contributor-{{message.contributor.level}}":message.contributor.level}', ng-click='clickMember(message.uuid, true)') + a.label.label-default.chat-message(ng-if=':: message.user', class='float-label', ng-class='userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') span(tooltip='{{::contribText(message.contributor, message.backer)}}') {{::message.user}}  + span(ng-class='userAdminGlyphiconStyleFromLevel(message.contributor.level)') diff --git a/views/options/social/hall.jade b/views/options/social/hall.jade index 59c6235ceb..880890e57d 100644 --- a/views/options/social/hall.jade +++ b/views/options/social/hall.jade @@ -28,15 +28,13 @@ script(type='text/ng-template', id='partials/options.social.hall.heroes.html') label=env.t('contribLevel') input.form-control(type='number', step="any", ng-model='hero.contributor.level') small=env.t('contribHallText') + |  a(target='_blank', href='https://trello.com/c/wkFzONhE/277-contributor-gear')=env.t('moreDetails') + |,  + a(target='_blank', href='https://github.com/HabitRPG/habitrpg/issues/3801')=env.t('moreDetails2') .form-group textarea.form-control(cols=5, placeholder=env.t('contributions'), ng-model='hero.contributor.contributions') include ../../shared/formatting-help - .form-group - .checkbox - label - input(type='checkbox', ng-model='hero.contributor.admin') - =env.t('admin') hr .form-group @@ -88,7 +86,7 @@ script(type='text/ng-template', id='partials/options.social.hall.heroes.html') span(ng-if='hero.contributor.admin',popover=env.t('gamemaster'),popover-trigger='mouseenter',popover-placement='right') a.label.label-default(ng-class='userLevelStyle(hero)', ng-click='clickMember(hero._id, true)') | {{hero.profile.name}}  - span.glyphicon.glyphicon-star + span(ng-class='userAdminGlyphiconStyle(hero)') span(ng-if='!hero.contributor.admin') a.label.label-default(ng-class='userLevelStyle(hero)', ng-click='clickMember(hero._id, true)') {{hero.profile.name}} td(ng-if='user.contributor.admin') {{hero._id}} diff --git a/views/options/social/tavern.jade b/views/options/social/tavern.jade index 5133c18389..7703af7b88 100644 --- a/views/options/social/tavern.jade +++ b/views/options/social/tavern.jade @@ -29,6 +29,9 @@ h3.panel-title=env.t('resources') .panel-body table.table.table-striped + tr + td + a(target='_blank', href='/static/community-guidelines')=env.t('communityGuidelines') tr td a(target='_blank', href='http://habitrpg.wikia.com/wiki/Board:The_Archery_-_LFG')=env.t('lfgPosts') @@ -123,11 +126,9 @@ !=env.t('legSeventh') tr td - a.label.label-contributor-7(ng-click='toggleUserTier($event)')=env.t('moderator') + ' (' + env.t('guardian') + ')' - // FOR NEW MOD LEVEL: line above will change from -7 to -8 + a.label.label-contributor-8(ng-click='toggleUserTier($event)')=env.t('moderator') + ' (' + env.t('guardian') + ')' div p=env.t('guardianText') - // FOR NEW MOD LEVEL: edit guardianText to remove this: "Not all Tier 7 contributors are moderators. All current moderators are listed below the Tavern chat box." tr td a.label.label-contributor-9(ng-click='toggleUserTier($event)')=env.t('staff') + ' (' + env.t('heroic') + ')' @@ -145,6 +146,19 @@ h3=env.t('tavernTalk') include ./chat-box .alert.alert-info.alert-sm - != ' ' + env.t('tavernAlert1') + ' ' + env.t('tavernAlert2') + '.
' + env.t('moderatorIntro1') + env.mods + env.t('moderatorIntro2') + != ' ' + env.t('tavernAlert1') + ' ' + env.t('tavernAlert2') + '.
' + env.t('moderatorIntro1') + span(ng-repeat='mod in env.mods') + |   + span(ng-if='mod.contributor.admin',popover=env.t('gamemaster'),popover-trigger='mouseenter',popover-placement='right') + a.label.label-default(ng-class='userLevelStyle(mod)', ng-click='clickMember(mod._id, true)') + {{mod.profile.name}}  + span(ng-class='userAdminGlyphiconStyle(mod)') + p + =env.t('communityGuidelinesRead1') + |   + a(target='_blank', href='/static/community-guidelines')=env.t('communityGuidelines') + |   + =env.t('communityGuidelinesRead2') + ul.list-unstyled.tavern-chat include ./chat-message diff --git a/views/shared/footer.jade b/views/shared/footer.jade index 56c32a694b..746d4d1958 100644 --- a/views/shared/footer.jade +++ b/views/shared/footer.jade @@ -38,6 +38,8 @@ footer.footer(ng-controller='FooterCtrl') .col-sm-3 h4=env.t('footerCommunity') ul.list-unstyled + li + a(target='_blank', href='/static/community-guidelines')=env.t('communityGuidelines') li a(target='_blank', href='https://github.com/HabitRPG/habitrpg/issues/2760')=env.t('communityBug') li diff --git a/views/shared/modals/index.jade b/views/shared/modals/index.jade index c16838f72e..8d5b74e8ab 100644 --- a/views/shared/modals/index.jade +++ b/views/shared/modals/index.jade @@ -9,4 +9,4 @@ include ./drops include ./classes include ./quests include ./rebirth -include ./limited \ No newline at end of file +include ./limited diff --git a/views/static/community-guidelines.jade b/views/static/community-guidelines.jade new file mode 100644 index 0000000000..3c60bc3ea5 --- /dev/null +++ b/views/static/community-guidelines.jade @@ -0,0 +1,509 @@ +extends ./layout + +block extraHead + style. + .pull-left { margin-right: 20px } + .peopleList { list-style-type: none } + .listColumns2 { + width: 50%; + columns: 2; + -moz-columns: 2; + -webkit-columns: 2; + // 2-column list: Allow a single ul/ol list to split into two columns. + // (Will not work in IE. Not important enough to make a workaround.) + } + +block vars + - var layoutEnv = env + +block title + title HabitRPG |  + =env.t('communityGuidelines') + +block content + .row + .col-md-12 + .page-header + h1=env.t('communityGuidelines') + p.pagemeta + |Last updated  + =env.t('September') + | 14, 2014 + h2=env.t('commGuideHeadingWelcome') + div(class='clearfix') + img(class='pull-left', src='/community-guidelines-images/intro.png', alt='') + p=env.t('commGuidePara001') + p=env.t('commGuidePara002') + p=env.t('commGuidePara003') + p=env.t('commGuidePara004') + h2=env.t('commGuideHeadingBeing') + p=env.t('commGuidePara005') + + div(class='clearfix') + img(class='pull-right', src='/community-guidelines-images/beingHabitican.png', alt='') + ul + li + strong=env.t('commGuideList01A') + |  + =env.t('commGuideList01Apart2') + li + strong=env.t('commGuideList01B') + |  + =env.t('commGuideList01Bpart2') + li + strong=env.t('commGuideList01C') + |  + =env.t('commGuideList01Cpart2') + li + strong=env.t('commGuideList01D') + |  + =env.t('commGuideList01Dpart2') + + h2=env.t('commGuideHeadingMeet') + p=env.t('commGuidePara006') + p + strong=env.t('commGuidePara007') + p + strong=env.t('commGuidePara008') + p + strong=env.t('commGuidePara009') + div(class='clearfix') + img(class='pull-left', src='/community-guidelines-images/staff.png', alt='') + ul(class='pull-left list-unstyled') + li + strong Lefnire (Tyler Renelle) + li + strong redphoenix (caffeinatedvee  + =env.t('commGuidePara009a') + |, veeeeeee  + =env.t('commGuidePara009b') + |) (Vicky Hsu) + li + strong Lemoness (Siena Leslie) + li + strong SabreCat (Sabe) + li + strong paglias (Matteo) + + p=env.t('commGuidePara010') + p + strong=env.t('commGuidePara011') + div(class='clearfix') + img(class='pull-left', src='/community-guidelines-images/moderators.png', alt='') + ul(class='pull-left list-unstyled') + li + strong Bailey (It's Bailey  + =env.t('commGuidePara011a') + |) + li + strong Ryan (deilann  + =env.t('commGuidePara011b') + |) + li + strong Alys (LadyAlys  + =env.t('commGuidePara011c') + |) + li + strong Breadstrings + li + strong Megan + li + strong Daniel the Bard + + p=env.t('commGuidePara012') + | ( + a(href='mailto:leslie@habitrpg.com') leslie@habitrpg.com + |). + + p=env.t('commGuidePara013') + p=env.t('commGuidePara014') + |  + em Slappybag, litenull, Shaner, Bobbyroberts99, wc8 + h2=env.t('commGuideHeadingPublicSpaces') + div(class='clearfix') + img(class='pull-right', src='/community-guidelines-images/publicSpaces.png', alt='') + p=env.t('commGuidePara015') + p=env.t('commGuidePara016') + p + strong=env.t('commGuidePara017') + |  + =env.t('commGuidePara017part2') + ul + li + strong=env.t('commGuideList02A') + li + strong=env.t('commGuideList02B') + |  + =env.t('commGuideList02Bpart2') + li + strong=env.t('commGuideList02C') + |  + =env.t('commGuideList02Cpart2') + li + strong=env.t('commGuideList02D') + |  + =env.t('commGuideList02Dpart2') + li + strong=env.t('commGuideList02E') + |  + =env.t('commGuideList02Epart2') + li + strong=env.t('commGuideList02F') + |  + =env.t('commGuideList02Fpart2') + li + strong=env.t('commGuideList02G') + |  + =env.t('commGuideList02Gpart2') + li + strong=env.t('commGuideList02H') + |  + =env.t('commGuideList02Hpart2') + |  + a(href='mailto:mods@habitrpg.com') mods@habitrpg.com + |  + =env.t('commGuideList02Hpart3') + p + strong=env.t('commGuidePara019') + |  + =env.t('commGuidePara019part2') + p=env.t('commGuidePara021') + + h3=env.t('commGuideHeadingTavern') + div(class='clearfix') + img(class='pull-left', src='/community-guidelines-images/tavern.png', alt='') + p=env.t('commGuidePara022') + p + strong=env.t('commGuidePara023') + p=env.t('commGuidePara024') + |  + strong=env.t('commGuidePara024part2') + |  + =env.t('commGuidePara024part3') + p + strong=env.t('commGuidePara027') + |  + =env.t('commGuidePara027part2') + + h3=env.t('commGuideHeadingPublicGuilds') + div(class='clearfix') + img(class='pull-right', src='/community-guidelines-images/publicGuilds.png', alt='') + p + strong=env.t('commGuidePara029') + |  + =env.t('commGuidePara029part2') + |  + strong=env.t('commGuidePara029part3') + p + strong=env.t('commGuidePara031') + |  + =env.t('commGuidePara031part2') + p + strong=env.t('commGuidePara033') + |  + =env.t('commGuidePara033part2') + |  + a(href='mailto:mods@habitrpg.com') mods@habitrpg.com + |  + =env.t('commGuidePara033part3') + p + strong=env.t('commGuidePara035') + |  + =env.t('commGuidePara035part2') + p + strong=env.t('commGuidePara037') + + h3=env.t('commGuideHeadingBackCorner') + div(class='clearfix') + img(class='pull-left', src='/community-guidelines-images/backCorner.png', alt='') + p + strong=env.t('commGuidePara038') + |  + =env.t('commGuidePara038part2') + p=env.t('commGuidePara039') + |  + strong=env.t('commGuidePara039part2') + |  + =env.t('commGuidePara039part3') + + h3=env.t('commGuideHeadingTrello') + div(class='clearfix') + img(class='pull-right', src='/community-guidelines-images/trello.png', alt='') + p + strong=env.t('commGuidePara040') + |  + =env.t('commGuidePara040part2') + |  + strong=env.t('commGuidePara040part3') + |  + =env.t('commGuidePara040part4') + p + strong=env.t('commGuidePara041') + ul + li=env.t('The') + |  + strong=env.t('commGuideList03A') + |  + =env.t('commGuideList03Apart2') + li=env.t('The') + |  + strong=env.t('commGuideList03B') + |  + =env.t('commGuideList03Bpart2') + li=env.t('The') + |  + strong=env.t('commGuideList03C') + |  + =env.t('commGuideList03Cpart2') + li=env.t('The') + |  + strong=env.t('commGuideList03D') + |  + =env.t('commGuideList03Dpart2') + li=env.t('The') + |  + strong=env.t('commGuideList03E') + |  + =env.t('commGuideList03Epart2') + p + strong=env.t('commGuidePara042') + |  + =env.t('commGuidePara042part2') + + h3=env.t('commGuideHeadingGitHub') + div(class='clearfix') + img(class='pull-left', src='/community-guidelines-images/github.gif', alt='') + p + strong=env.t('commGuidePara043') + |  + =env.t('commGuidePara043part2') + |  + strong=env.t('commGuidePara043part3') + |  + =env.t('commGuidePara043part4') + p + strong=env.t('commGuidePara044') + ul(class='listColumns2 peopleList') + li lefnire (Tyler) + li Alys + li benmanley (Pixel) + li colegleason (Cole) + li deilann (Ryan) + li djuretic + li Fandekasp + li Lemoness + li litenull + li paglias + li SabreCat + li Sinza- + li snicker + li thepeopleseason + li wc8 + li zakkain + + h3=env.t('commGuideHeadingWiki') + div(class='clearfix') + img(class='pull-right', src='/community-guidelines-images/wiki.png', alt='') + p + strong=env.t('commGuidePara045') + |  + =env.t('commGuidePara045part2') + p=env.t('commGuidePara046') + p + strong=env.t('commGuidePara047') + p=env.t('commGuidePara048') + ul + li=env.t('commGuideList04A') + li=env.t('commGuideList04B') + li=env.t('commGuideList04C') + li=env.t('commGuideList04D') + li=env.t('commGuideList04E') + li=env.t('commGuideList04F') + li=env.t('commGuideList04G') + li=env.t('commGuideList04H') + p + strong=env.t('commGuidePara049') + ul(class='peopleList') + li Breadstrings (bureaucrat) + li JiggerD + li LadyAlys + li LadyKatFrog + li Lefnire (bureaucrat) + p=env.t('commGuidePara018') + |:  + em Bobbyroberts99 (founder and bureaucrat), wc8 (bureaucrat) + + h2=env.t('commGuideHeadingInfractionsEtc') + h3=env.t('commGuideHeadingInfractions') + div(class='clearfix') + img(class='pull-left', src='/community-guidelines-images/infractions.png', alt='') + p=env.t('commGuidePara050') + p + strong=env.t('commGuidePara051') + |  + =env.t('commGuidePara051part2') + h4=env.t('commGuideHeadingSevereInfractions') + p=env.t('commGuidePara052') + p=env.t('commGuidePara053') + ul + li=env.t('commGuideList05A') + li=env.t('commGuideList05B') + li=env.t('commGuideList05C') + li=env.t('commGuideList05D') + li=env.t('commGuideList05E') + h4=env.t('commGuideHeadingModerateInfractions') + p=env.t('commGuidePara054') + p=env.t('commGuidePara055') + ul + li=env.t('commGuideList06A') + | ( + a(href='mailto:leslie@habitrpg.com') leslie@habitrpg.com + |). + li=env.t('commGuideList06B') + li=env.t('commGuideList06C') + li=env.t('commGuideList06D') + h4=env.t('commGuideHeadingMinorInfractions') + p=env.t('commGuidePara056') + p=env.t('commGuidePara057') + ul + li=env.t('commGuideList07A') + li=env.t('commGuideList07B') + + h3=env.t('commGuideHeadingConsequences') + div(class='clearfix') + img(class='pull-right', src='/community-guidelines-images/consequences.png', alt='') + p=env.t('commGuidePara058') + p + strong=env.t('commGuidePara059') + |  + =env.t('commGuidePara059part2') + p + strong=env.t('commGuidePara060') + ul + li=env.t('commGuideList08A') + li=env.t('commGuideList08B') + li=env.t('commGuideList08C') + h4=env.t('commGuideHeadingSevereConsequences') + ul + li=env.t('commGuideList09A') + li=env.t('commGuideList09B') + li=env.t('commGuideList09C') + h4=env.t('commGuideHeadingModerateConsequences') + ul + li=env.t('commGuideList10A') + li=env.t('commGuideList10B') + li=env.t('commGuideList10C') + li=env.t('commGuideList10D') + li=env.t('commGuideList10E') + li=env.t('commGuideList10F') + h4=env.t('commGuideHeadingMinorConsequences') + ul + li=env.t('commGuideList11A') + li=env.t('commGuideList11B') + li=env.t('commGuideList11C') + li=env.t('commGuideList11D') + li=env.t('commGuideList11E') + + h3=env.t('commGuideHeadingRestoration') + div(class='clearfix') + img(class='pull-left', src='/community-guidelines-images/restoration.png', alt='') + p=env.t('commGuidePara061') + |  + strong=env.t('commGuidePara061part2') + p=env.t('commGuidePara062') + |  + strong=env.t('commGuidePara062part2') + p + strong=env.t('commGuidePara063') + |  + =env.t('commGuidePara063part2') + + h2=env.t('commGuideHeadingContributing') + div(class='clearfix') + img(class='pull-right', src='/community-guidelines-images/contributing.png', alt='') + p=env.t('commGuidePara064') + ol + li=env.t('commGuideList12A') + li=env.t('commGuideList12B') + li=env.t('commGuideList12C') + li=env.t('commGuideList12D') + li=env.t('commGuideList12E') + li=env.t('commGuideList12F') + li=env.t('commGuideList12G') + p=env.t('commGuidePara065') + p=env.t('commGuidePara066') + ul + li + strong=env.t('commGuideList13A') + |  + =env.t('commGuideList13Apart2') + li + strong=env.t('commGuideList13B') + |  + =env.t('commGuideList13Bpart2') + li + strong=env.t('commGuideList13C') + |  + =env.t('commGuideList13Cpart2') + li + strong=env.t('commGuideList13D') + |  + =env.t('commGuideList13Dpart2') + + h2=env.t('commGuideHeadingFinal') + p=env.t('commGuidePara067') + | ( + a(href='mailto:leslie@habitrpg.com') leslie@habitrpg.com + |)  + =env.t('commGuidePara067part2') + p=env.t('commGuidePara068') + + h2=env.t('commGuideHeadingLinks') + ul + li + a(href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank')=env.t('commGuideLink01') + |:  + =env.t('commGuideLink01description') + li + a(href='https://habitrpg.com/#/options/groups/guilds/426c2c1a-eed0-4997-9b73-d30fc1397688' target='_blank')=env.t('commGuideLink02') + |:  + =env.t('commGuideLink02description') + li + a(href='http://habitrpg.wikia.com/wiki/HabitRPG_Wiki' target='_blank')=env.t('commGuideLink03') + |:  + =env.t('commGuideLink03description') + li + a(href='https://github.com/HabitRPG/habitrpg' target='_blank')=env.t('commGuideLink04') + |:  + =env.t('commGuideLink04description') + li + a(href='https://trello.com/b/EpoYEYod/habitrpg' target='_blank')=env.t('commGuideLink05') + |:  + =env.t('commGuideLink05description') + li + a(href='https://trello.com/b/mXK3Eavg/habitrpg-mobile' target='_blank')=env.t('commGuideLink06') + |:  + =env.t('commGuideLink06description') + li + a(href='https://trello.com/b/vwuE9fbO/habitrpg-pixel-art' target='_blank')=env.t('commGuideLink07') + |:  + =env.t('commGuideLink07description') + li + a(href='https://trello.com/b/nnv4QIRX/habitrpg-quests' target='_blank')=env.t('commGuideLink08') + |:  + =env.t('commGuideLink08description') + + p + strong=env.t('commGuidePara069') + ul(class='listColumns2 peopleList') + li Breadstrings + li Draayder + li Kiwibot + li Leephon + li Lemoness + li Luciferian + li Revcleo + li Shaner + li Starsystemic + li UncommonCriminal + diff --git a/views/static/layout.jade b/views/static/layout.jade index e03565a4ab..61bf49e7d5 100644 --- a/views/static/layout.jade +++ b/views/static/layout.jade @@ -4,6 +4,7 @@ doctype html html(ng-app='habitrpgStatic') head + block extraHead block title title=env.t('titleIndex')