Merge pull request #338 from codecombat/feature/level-runner-interface

Merge task queue stuff into level-runner-interface
This commit is contained in:
Michael Schmatz 2014-02-04 10:32:12 -08:00
commit 7f5b3e5f75
325 changed files with 14013 additions and 9863 deletions

View file

@ -1,6 +1,7 @@
nguage: node_js language: node_js
node_js: node_js:
- 0.10 - 0.10
before_script: before_script:
- "npm install" - "npm install"
- export DISPLAY=:99.0 - export DISPLAY=:99.0
@ -11,3 +12,4 @@ before_script:
script: script:
- "./node_modules/.bin/karma start --browsers Firefox --single-run" - "./node_modules/.bin/karma start --browsers Firefox --single-run"

View file

@ -4,7 +4,7 @@ CodeCombat
![](https://dl.dropboxusercontent.com/u/138899/GitHub%20Wikis/readme_00.png) ![](https://dl.dropboxusercontent.com/u/138899/GitHub%20Wikis/readme_00.png)
[![Build Status](https://travis-ci.org/codecombat/codecombat.png?branch=master)](https://travis-ci.org/codecombat/codecombat) [![Build Status](https://travis-ci.org/codecombat/codecombat.png?branch=master)](https://travis-ci.org/codecombat/codecombat)
CodeCombat is a multiplayer programming game for learning how to code. **See the [Archmage developer wiki](https://github.com/codecombat/codecombat/wiki) for a dev setup guide, extensive documentation, and much more.** CodeCombat is a multiplayer programming game for learning how to code. **See the [Archmage developer wiki](https://github.com/codecombat/codecombat/wiki/Archmage-Home) for a dev setup guide, extensive documentation, and much more.**
It's both a startup and a community project, completely open source under the [MIT and Creative Commons licenses](http://codecombat.com/legal). It's the largest open source [CoffeeScript](http://coffeescript.org/) project by lines of code, and since it's a game (with [really cool tech](https://github.com/codecombat/codecombat/wiki/Third-party-software-and-services)), it's really fun to hack on. Join us in teaching the world to code! Your contribution will go on to show millions of players how cool programming can be. It's both a startup and a community project, completely open source under the [MIT and Creative Commons licenses](http://codecombat.com/legal). It's the largest open source [CoffeeScript](http://coffeescript.org/) project by lines of code, and since it's a game (with [really cool tech](https://github.com/codecombat/codecombat/wiki/Third-party-software-and-services)), it's really fun to hack on. Join us in teaching the world to code! Your contribution will go on to show millions of players how cool programming can be.

View file

@ -0,0 +1,140 @@
throw "Attempt to load worker_world into main window instead of web worker." if not self.importScripts or not window?
self.window = self
self.workerID = "Worker"
self.logLimit = 200
self.logsLogged = 0
console =
log: ->
self.logsLogged += 1
if self.logsLogged is self.logLimit
self.postMessage
type: 'console-log'
args: ["Log limit " + self.logLimit + " reached; shutting up."]
id: self.workerID
else if self.logsLogged < self.logLimit
args = [].slice.call arguments
for arg in args
if arg and arg.constructor and (arg.constructor.className is "Thang" or arg.isComponent)
arg = arg.toString()
try
self.postMessage
type: 'console-log'
args: args
id: self.workerID
catch error
self.postMessage
type: 'console-log'
args: ["Could not post log: " + args, error.toString(), error.stack, error.stackTrace]
id: self.workerID
console.error = console.info = console.log
self.console = console
importScripts '/javascripts/world.js'
self.transferableSupported = transferableSupported = ->
try
ab = new ArrayBuffer 1
worker.postMessage ab, [ab]
return ab.byteLength is 0
catch error
return false
return false
World = self.require 'lib/world/world'
GoalManager = self.require 'lib/world/GoalManager'
self.runWorld = runWorld = (args) ->
self.postedErrors = {}
self.t0 = new Date()
self.firstWorld = args.firstWorld
self.postedErrors = false
self.logsLogged = 0
try
self.world = new World args.worldName, args.userCodeMap
if args.level
self.world.loadFromLevel args.level, true
self.goalManager = new GoalManager self.world
self.goalManager.setGoals args.goals
self.goalManager.setCode args.userCodeMap
self.goalManager.worldGenerationWillBegin()
self.world.setGoalManager self.goalManager
catch error
self.onWorldError error
return
Math.random = self.world.rand.randf
self.world.loadFrames self.onWorldLoaded, self.onWorldError, self.onWorldLoadProgress
self.onWorldLoaded = onWorldLoaded = () ->
self.goalManager.worldGenerationEnded()
t1 = new Date()
diff = t1 - self.t0
transferableSupported = self.transferableSupported()
try
serialized = self.world.serialize()
catch error
console.log "World serialization error:", error.toString() + "\n" + error.stack or error.stackTrace
t2 = new Date()
try
if transferableSupported
self.postMessage(
type: 'new-world'
serialized: serialized.serializedWorld
goalStates: self.goalManager.getGoalStates()
, serialized.transferableObjects)
else
self.postMessage
type: 'new-world'
serialized: serialized.serializedWorld
goalStates: self.goalManager.getGoalStates()
catch error
console.log "World delivery error:", error.toString + "\n" + error.stack or error.stackTrace
t3 = new Date()
console.log "And it was so: (" + (diff / self.world.totalFrames).toFixed(3) + "ms per frame,", self.world.totalFrames, "frames)\nSimulation :"
self.world = null
self.onWorldError = onWorldError = (error) ->
if error instanceof Aether.problems.UserCodeProblem
unless self.postedErrors[error.key]
problem = error.serialize()
self.postMessage
type: 'user-code-problem'
problem: problem
self.postedErrors[error.key] = problem
else
console.log "Non-UserCodeError:", error.toString() + "\n" + error.stack or error.stackTrace
return true
self.onWorldLoadProgress = onWorldLoadProgress = (progress) ->
self.postMessage
type: 'world-load-progress-changed'
progress: progress
self.abort = abort = ->
if self.world and self.world.name
console.log "About to abort:", self.world.name, typeof self.world.abort
self.world?.abort()
self.world = null
self.postMessage
type: 'abort'
self.reportIn = reportIn = ->
self.postMessage
type: 'reportIn'
self.addEventListener 'message', (event) ->
self[event.data.func](event.data.args)

View file

@ -43,6 +43,12 @@ importScripts('/javascripts/world.js');
//xhr.open("get", "script.js"); //xhr.open("get", "script.js");
//xhr.send(); //xhr.send();
// We could do way more from this: http://stackoverflow.com/questions/10653809/making-webworkers-a-safe-environment
Object.defineProperty(self, "XMLHttpRequest", {
get: function() { throw new Error("Access to XMLHttpRequest is forbidden."); },
configurable: false
});
self.transferableSupported = function transferableSupported() { self.transferableSupported = function transferableSupported() {
// Not in IE, even in IE 11 // Not in IE, even in IE 11
try { try {

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
CocoClass = require 'lib/CocoClass' CocoClass = require 'lib/CocoClass'
{me, CURRENT_USER_KEY} = require 'lib/auth' {me, CURRENT_USER_KEY} = require 'lib/auth'
{backboneFailure} = require 'lib/errors' {backboneFailure} = require 'lib/errors'
{saveObjectToStorage} = require 'lib/storage' storage = require 'lib/storage'
# facebook user object props to # facebook user object props to
userPropsToSave = userPropsToSave =
@ -59,7 +59,7 @@ module.exports = FacebookHandler = class FacebookHandler extends CocoClass
error: backboneFailure, error: backboneFailure,
url: "/db/user?facebookID=#{r.id}&facebookAccessToken=#{@authResponse.accessToken}" url: "/db/user?facebookID=#{r.id}&facebookAccessToken=#{@authResponse.accessToken}"
success: (model) -> success: (model) ->
saveObjectToStorage(CURRENT_USER_KEY, model.attributes) storage.save(CURRENT_USER_KEY, model.attributes)
window.location.reload() if model.get('email') isnt oldEmail window.location.reload() if model.get('email') isnt oldEmail
}) })

View file

@ -1,7 +1,7 @@
CocoClass = require 'lib/CocoClass' CocoClass = require 'lib/CocoClass'
{me, CURRENT_USER_KEY} = require 'lib/auth' {me, CURRENT_USER_KEY} = require 'lib/auth'
{backboneFailure} = require 'lib/errors' {backboneFailure} = require 'lib/errors'
{saveObjectToStorage} = require 'lib/storage' storage = require 'lib/storage'
# gplus user object props to # gplus user object props to
userPropsToSave = userPropsToSave =
@ -73,7 +73,7 @@ module.exports = GPlusHandler = class GPlusHandler extends CocoClass
error: backboneFailure, error: backboneFailure,
url: "/db/user?gplusID=#{gplusID}&gplusAccessToken=#{@accessToken}" url: "/db/user?gplusID=#{gplusID}&gplusAccessToken=#{@accessToken}"
success: (model) -> success: (model) ->
saveObjectToStorage(CURRENT_USER_KEY, model.attributes) storage.save(CURRENT_USER_KEY, model.attributes)
window.location.reload() window.location.reload()
}) })

View file

@ -20,6 +20,12 @@ module.exports = class CocoRouter extends Backbone.Router
'db/*path': 'routeToServer' 'db/*path': 'routeToServer'
'file/*path': 'routeToServer' 'file/*path': 'routeToServer'
#multiplayer routes
'scoring/queue': 'routeToServer'
'play/level/:levelID/leaderboard/:teamID/:startRank/:endRank': 'getPaginatedLevelRank'
'play/level/:levelID/player/:playerID': 'getPlayerLevelInfo'
# most go through here # most go through here
'*name': 'general' '*name': 'general'
@ -27,6 +33,13 @@ module.exports = class CocoRouter extends Backbone.Router
general: (name) -> general: (name) ->
@openRoute(name) @openRoute(name)
getPaginatedLevelRank: (levelID,teamID,startRank,endRank) ->
return
getPlayerLevelInfo: (levelID,playerID) ->
return
editorModelView: (modelName, slugOrId, subview) -> editorModelView: (modelName, slugOrId, subview) ->
modulePrefix = "views/editor/#{modelName}/" modulePrefix = "views/editor/#{modelName}/"
suffix = subview or (if slugOrId then 'edit' else 'home') suffix = subview or (if slugOrId then 'edit' else 'home')

View file

@ -1,6 +1,6 @@
{backboneFailure, genericFailure} = require 'lib/errors' {backboneFailure, genericFailure} = require 'lib/errors'
User = require 'models/User' User = require 'models/User'
{saveObjectToStorage, loadObjectFromStorage} = require 'lib/storage' storage = require 'lib/storage'
module.exports.CURRENT_USER_KEY = CURRENT_USER_KEY = 'whoami' module.exports.CURRENT_USER_KEY = CURRENT_USER_KEY = 'whoami'
BEEN_HERE_BEFORE_KEY = 'beenHereBefore' BEEN_HERE_BEFORE_KEY = 'beenHereBefore'
@ -10,7 +10,7 @@ module.exports.createUser = (userObject, failure=backboneFailure) ->
user.save({}, { user.save({}, {
error: failure, error: failure,
success: (model) -> success: (model) ->
saveObjectToStorage(CURRENT_USER_KEY, model) storage.save(CURRENT_USER_KEY, model)
window.location.reload() window.location.reload()
}) })
@ -21,7 +21,7 @@ module.exports.loginUser = (userObject, failure=genericFailure) ->
password:userObject.password password:userObject.password
}, },
(model) -> (model) ->
saveObjectToStorage(CURRENT_USER_KEY, model) storage.save(CURRENT_USER_KEY, model)
window.location.reload() window.location.reload()
) )
jqxhr.fail(failure) jqxhr.fail(failure)
@ -29,7 +29,7 @@ module.exports.loginUser = (userObject, failure=genericFailure) ->
module.exports.logoutUser = -> module.exports.logoutUser = ->
FB?.logout?() FB?.logout?()
res = $.post('/auth/logout', {}, -> res = $.post('/auth/logout', {}, ->
saveObjectToStorage(CURRENT_USER_KEY, null) storage.save(CURRENT_USER_KEY, null)
window.location.reload() window.location.reload()
) )
res.fail(genericFailure) res.fail(genericFailure)
@ -38,7 +38,7 @@ init = ->
# Load the user from local storage, and refresh it from the server. # Load the user from local storage, and refresh it from the server.
# Also refresh and cache the gravatar info. # Also refresh and cache the gravatar info.
storedUser = loadObjectFromStorage(CURRENT_USER_KEY) storedUser = storage.load(CURRENT_USER_KEY)
firstTime = not storedUser firstTime = not storedUser
module.exports.me = window.me = new User(storedUser) module.exports.me = window.me = new User(storedUser)
me.url = -> '/auth/whoami' me.url = -> '/auth/whoami'
@ -50,14 +50,14 @@ init = ->
# Assign testGroupNumber to returning visitors; new ones in server/handlers/user # Assign testGroupNumber to returning visitors; new ones in server/handlers/user
me.set 'testGroupNumber', Math.floor(Math.random() * 256) me.set 'testGroupNumber', Math.floor(Math.random() * 256)
me.save() me.save()
saveObjectToStorage(CURRENT_USER_KEY, me.attributes) storage.save(CURRENT_USER_KEY, me.attributes)
me.loadGravatarProfile() if me.get('email') me.loadGravatarProfile() if me.get('email')
me.on('sync', userSynced) me.on('sync', userSynced)
userSynced = (user) -> userSynced = (user) ->
Backbone.Mediator.publish('me:synced', {me:user}) Backbone.Mediator.publish('me:synced', {me:user})
saveObjectToStorage(CURRENT_USER_KEY, user) storage.save(CURRENT_USER_KEY, user)
init() init()
@ -71,7 +71,7 @@ Backbone.Mediator.subscribe('level-set-volume', onSetVolume, module.exports)
trackFirstArrival = -> trackFirstArrival = ->
# will have to filter out users who log in with existing accounts separately # will have to filter out users who log in with existing accounts separately
# but can at least not track logouts as first arrivals using local storage # but can at least not track logouts as first arrivals using local storage
beenHereBefore = loadObjectFromStorage(BEEN_HERE_BEFORE_KEY) beenHereBefore = storage.load(BEEN_HERE_BEFORE_KEY)
return if beenHereBefore return if beenHereBefore
window.tracker?.trackEvent 'First Arrived' window.tracker?.trackEvent 'First Arrived'
saveObjectToStorage(BEEN_HERE_BEFORE_KEY, true) storage.save(BEEN_HERE_BEFORE_KEY, true)

View file

@ -23,16 +23,15 @@ module.exports.applyErrorsToForm = (el, errors) ->
prop = error.property prop = error.property
input = $("[name='#{prop}']", el) input = $("[name='#{prop}']", el)
if not input[0] if not input.length
missingErrors.push(error) missingErrors.push(error)
continue continue
controls = input.closest('.controls') formGroup = input.closest('.form-group')
controls.append($("<span class='help-inline error-inline'>#{message}</span>")) formGroup.addClass 'has-error'
group = controls.closest('.control-group') formGroup.append($("<span class='help-block error-help-block'>#{message}</span>"))
group.addClass('error')
return missingErrors return missingErrors
module.exports.clearFormAlerts = (el) -> module.exports.clearFormAlerts = (el) ->
$('.error', el).removeClass('error') $('.has-error', el).removeClass('has-error')
$('.error-inline', el).remove()
$('.alert', el).remove() $('.alert', el).remove()
el.find('.help-block.error-help-block').remove()

View file

@ -13,7 +13,9 @@ module.exports = class SpriteBuilder
buildMovieClip: (animationName, movieClipArgs...) -> buildMovieClip: (animationName, movieClipArgs...) ->
animData = @animationStore[animationName] animData = @animationStore[animationName]
console.log "couldn't find animData from", @animationStore, "for", animationName unless animData unless animData
console.error "couldn't find animData from", @animationStore, "for", animationName
return null
locals = {} locals = {}
_.extend locals, @buildMovieClipShapes(animData.shapes) _.extend locals, @buildMovieClipShapes(animData.shapes)
_.extend locals, @buildMovieClipContainers(animData.containers) _.extend locals, @buildMovieClipContainers(animData.containers)

View file

@ -1,4 +1,4 @@
module.exports.loadObjectFromStorage = (key) -> module.exports.load = (key) ->
s = localStorage.getItem(key) s = localStorage.getItem(key)
return null unless s return null unless s
try try
@ -8,6 +8,8 @@ module.exports.loadObjectFromStorage = (key) ->
console.warning('error loading from storage', key) console.warning('error loading from storage', key)
return null return null
module.exports.saveObjectToStorage = (key, value) -> module.exports.save = (key, value) ->
s = JSON.stringify(value) s = JSON.stringify(value)
localStorage.setItem(key, s) localStorage.setItem(key, s)
module.exports.remove = (key) -> localStorage.removeItem key

View file

@ -186,6 +186,7 @@ module.exports = class Camera extends CocoClass
# Target is either just a {x, y} pos or a display object with {x, y} that might change; surface coordinates. # Target is either just a {x, y} pos or a display object with {x, y} that might change; surface coordinates.
time = 0 if @instant time = 0 if @instant
newTarget ?= {x:0, y:0} newTarget ?= {x:0, y:0}
newTarget = (@newTarget or @target) if @locked
newZoom = Math.min((Math.max @minZoom, newZoom), MAX_ZOOM) newZoom = Math.min((Math.max @minZoom, newZoom), MAX_ZOOM)
return if @zoom is newZoom and newTarget is newTarget.x and newTarget.y is newTarget.y return if @zoom is newZoom and newTarget is newTarget.x and newTarget.y is newTarget.y

View file

@ -61,7 +61,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass
@actionQueue = [] @actionQueue = []
@marks = {} @marks = {}
@labels = {} @labels = {}
@ticker = 0 @age = 0
@displayObject = new createjs.Container() @displayObject = new createjs.Container()
if @thangType.get('actions') if @thangType.get('actions')
@onThangTypeLoaded() @onThangTypeLoaded()
@ -95,7 +95,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass
sprite = new createjs.Shape() sprite = new createjs.Shape()
sprite.scaleX = sprite.scaleY = 1 / @options.resolutionFactor sprite.scaleX = sprite.scaleY = 1 / @options.resolutionFactor
# temp, until these are re-exported with perspective # temp, until these are re-exported with perspective
if @options.camera and @thangType.get('name') in ['Dungeon Floor', 'Grass', 'Goal Trigger', 'Obstacle'] if @options.camera and @thangType.get('name') in ['Dungeon Floor', 'Indoor Floor', 'Grass', 'Goal Trigger', 'Obstacle']
sprite.scaleY *= @options.camera.y2x sprite.scaleY *= @options.camera.y2x
@imageObject = sprite @imageObject = sprite
@displayObject.addChild(sprite) @displayObject.addChild(sprite)
@ -124,7 +124,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass
@playNextAction() @playNextAction()
onActionEnd: (e) => @playNextAction() onActionEnd: (e) => @playNextAction()
onSurfaceTicked: -> @ticker += 1 onSurfaceTicked: (e) -> @age += e.dt
playNextAction: -> playNextAction: ->
@playAction(@actionQueue.splice(0,1)[0]) if @actionQueue.length @playAction(@actionQueue.splice(0,1)[0]) if @actionQueue.length
@ -159,16 +159,21 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass
@displayObject.cache 0, 0, bounds.width, bounds.height @displayObject.cache 0, 0, bounds.width, bounds.height
#console.log "just cached", @thang.id, "which was at", @imageObject.x, @imageObject.y, bounds.width, bounds.height, "with scale", Math.max(@imageObject.scaleX, @imageObject.scaleY) #console.log "just cached", @thang.id, "which was at", @imageObject.x, @imageObject.y, bounds.width, bounds.height, "with scale", Math.max(@imageObject.scaleX, @imageObject.scaleY)
getBobOffset: ->
return 0 unless @thang.bobHeight
@thang.bobHeight * (1 + Math.sin(@age * Math.PI / @thang.bobTime))
updatePosition: -> updatePosition: ->
return unless @thang?.pos and @options.camera? return unless @thang?.pos and @options.camera?
if @thang.bobHeight
@thang.pos.z = @thang.pos.z + (Math.sin @ticker / @thang.bobTime) * 0.1 * @thang.bobHeight
[p0, p1] = [@lastPos, @thang.pos] [p0, p1] = [@lastPos, @thang.pos]
if bobOffset = @getBobOffset()
p1 = p1.copy?() or _.clone(p1)
p1.z += bobOffset
return if p0 and p0.x is p1.x and p0.y is p1.y and p0.z is p1.z and not @options.camera.tweeningZoomTo return if p0 and p0.x is p1.x and p0.y is p1.y and p0.z is p1.z and not @options.camera.tweeningZoomTo
wop = x: p1.x, y: p1.y, z: if @thang.isLand then 0 else p1.z - @thang.depth / 2 wop = x: p1.x, y: p1.y, z: if @thang.isLand then 0 else p1.z - @thang.depth / 2
sup = @options.camera.worldToSurface wop sup = @options.camera.worldToSurface wop
[@displayObject.x, @displayObject.y] = [sup.x, sup.y] [@displayObject.x, @displayObject.y] = [sup.x, sup.y]
@lastPos = _.clone(p1) @lastPos = p1.copy?() or _.clone(p1)
@hasMoved = true @hasMoved = true
updateScale: -> updateScale: ->
@ -207,19 +212,10 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass
rotation rotation
updateIsometricRotation: (rotation, imageObject) -> updateIsometricRotation: (rotation, imageObject) ->
action = @currentRootAction return unless @currentAction
return unless action return if _.string.endsWith(@currentAction.name, 'back')
# @flipOccasionally() if action.name is 'idle' return if _.string.endsWith(@currentAction.name, 'fore')
imageObject ?= @imageObject @imageObject.scaleX *= -1 if Math.abs(rotation) >= 90
imageObject.scaleX *= -1 if imageObject.scaleX < 0 # normalize to point right
imageObject.scaleX *= -1 if Math.abs(rotation) >= 135
# imageObject.scaleX *= -1 if @flipped and action.name is 'idle'
flipOccasionally: ->
@flippedCount += 1
return unless _.random(0,1000) <= 15 and @flippedCount > 30
@flipped = not @flipped
@flippedCount = 0
################################################## ##################################################
updateAction: -> updateAction: ->

View file

@ -21,7 +21,7 @@ module.exports = IndieSprite = class IndieSprite extends CocoSprite
thang.exists = true thang.exists = true
thang.width = thang.height = thang.depth = 4 thang.width = thang.height = thang.depth = 4
thang.pos = pos ? @defaultPos() thang.pos = pos ? @defaultPos()
thang.pos.z ?= @defaultPos().z thang.pos.z = thang.depth / 2
thang.rotation = 0 thang.rotation = 0
thang.action = 'idle' thang.action = 'idle'
thang.setAction = (action) -> thang.action = action thang.setAction = (action) -> thang.action = action

View file

@ -137,7 +137,7 @@ module.exports = class Mark extends CocoClass
if @name in ['shadow', 'debug'] if @name in ['shadow', 'debug']
pos = @camera.worldToSurface x: @sprite.thang.pos.x, y: @sprite.thang.pos.y pos = @camera.worldToSurface x: @sprite.thang.pos.x, y: @sprite.thang.pos.y
if @name is 'shadow' if @name is 'shadow'
worldZ = @sprite.thang.pos.z - @sprite.thang.depth / 2 worldZ = @sprite.thang.pos.z - @sprite.thang.depth / 2 + @sprite.getBobOffset()
@mark.alpha = 0.451 / Math.sqrt(worldZ / 2 + 1) @mark.alpha = 0.451 / Math.sqrt(worldZ / 2 + 1)
else else
pos ?= @sprite?.displayObject pos ?= @sprite?.displayObject
@ -166,7 +166,7 @@ module.exports = class Mark extends CocoClass
size += 60 if @name is 'selection' size += 60 if @name is 'selection'
size += 60 if @name is 'repair' size += 60 if @name is 'repair'
scale = size / {selection: 128, target: 128, repair: 320, highlight: 160}[@name] scale = size / {selection: 128, target: 128, repair: 320, highlight: 160}[@name]
if @sprite?.thang.spriteName.search(/dungeon.wall/i) isnt -1 if @sprite?.thang.spriteName.search(/(dungeon|indoor).wall/i) isnt -1
scale *= 2 scale *= 2
@mark.scaleX = @mark.scaleY = Math.min 1, scale @mark.scaleX = @mark.scaleY = Math.min 1, scale
if @name in ['selection', 'target', 'repair'] if @name in ['selection', 'target', 'repair']

View file

@ -76,7 +76,7 @@ module.exports = class SpriteBoss extends CocoClass
id ?= sprite.thang.id id ?= sprite.thang.id
console.error "Sprite collision! Already have:", id if @sprites[id] console.error "Sprite collision! Already have:", id if @sprites[id]
@sprites[id] = sprite @sprites[id] = sprite
layer ?= @spriteLayers["Obstacle"] if sprite.thang?.spriteName.search(/dungeon.wall/i) isnt -1 layer ?= @spriteLayers["Obstacle"] if sprite.thang?.spriteName.search(/(dungeon|indoor).wall/i) isnt -1
layer ?= @layerForChild sprite.displayObject, sprite layer ?= @layerForChild sprite.displayObject, sprite
layer.addChild sprite.displayObject layer.addChild sprite.displayObject
layer.updateLayerOrder() layer.updateLayerOrder()
@ -163,7 +163,8 @@ module.exports = class SpriteBoss extends CocoClass
if sprite = @sprites[thang.id] if sprite = @sprites[thang.id]
sprite.setThang thang # make sure Sprite has latest Thang sprite.setThang thang # make sure Sprite has latest Thang
else else
sprite = @addThangToSprites(thang) or updateOrder sprite = @addThangToSprites(thang)
Backbone.Mediator.publish 'surface:new-thang-added', thang:thang, sprite:sprite
updateCache = updateCache or sprite.displayObject.parent is @spriteLayers["Obstacle"] updateCache = updateCache or sprite.displayObject.parent is @spriteLayers["Obstacle"]
sprite.playSounds() sprite.playSounds()
for thangID, sprite of @sprites for thangID, sprite of @sprites
@ -176,7 +177,7 @@ module.exports = class SpriteBoss extends CocoClass
cache: (update=false) -> cache: (update=false) ->
return if @cached and not update return if @cached and not update
wallSprites = (sprite for thangID, sprite of @sprites when sprite.thangType?.get('name') is 'Dungeon Wall') wallSprites = (sprite for thangID, sprite of @sprites when sprite.thangType?.get('name').search(/(dungeon|indoor).wall/i) isnt -1)
walls = (sprite.thang for sprite in wallSprites) walls = (sprite.thang for sprite in wallSprites)
@world.calculateBounds() @world.calculateBounds()
wallGrid = new Grid walls, @world.size()... wallGrid = new Grid walls, @world.size()...

View file

@ -55,6 +55,7 @@ module.exports = Surface = class Surface extends CocoClass
'level-toggle-debug': 'onToggleDebug' 'level-toggle-debug': 'onToggleDebug'
'level-set-grid': 'onSetGrid' 'level-set-grid': 'onSetGrid'
'level-toggle-grid': 'onToggleGrid' 'level-toggle-grid': 'onToggleGrid'
'level-toggle-pathfinding': 'onTogglePathFinding'
'level-set-time': 'onSetTime' 'level-set-time': 'onSetTime'
'level-set-surface-camera': 'onSetCamera' 'level-set-surface-camera': 'onSetCamera'
'level:restarted': 'onLevelRestarted' 'level:restarted': 'onLevelRestarted'
@ -63,9 +64,9 @@ module.exports = Surface = class Surface extends CocoClass
'level-set-letterbox': 'onSetLetterbox' 'level-set-letterbox': 'onSetLetterbox'
shortcuts: shortcuts:
'\\': 'onToggleDebug' 'ctrl+\\, ⌘+\\': 'onToggleDebug'
'g': 'onToggleGrid' 'ctrl+g, ⌘+g': 'onToggleGrid'
'w': 'onTogglePathFinding' 'ctrl+o, ⌘+o': 'onTogglePathFinding'
# external functions # external functions
@ -102,7 +103,8 @@ module.exports = Surface = class Surface extends CocoClass
@onFrameChanged() @onFrameChanged()
Backbone.Mediator.publish 'surface:world-set-up' Backbone.Mediator.publish 'surface:world-set-up'
onTogglePathFinding: -> onTogglePathFinding: (e) ->
e?.preventDefault?()
@hidePathFinding() @hidePathFinding()
@showingPathFinding = not @showingPathFinding @showingPathFinding = not @showingPathFinding
if @showingPathFinding then @showPathFinding() else @hidePathFinding() if @showingPathFinding then @showPathFinding() else @hidePathFinding()
@ -397,14 +399,15 @@ module.exports = Surface = class Surface extends CocoClass
gridShowing: -> gridShowing: ->
@gridLayer?.parent? @gridLayer?.parent?
onToggleGrid: -> onToggleGrid: (e) ->
e?.preventDefault?()
if @gridShowing() then @hideGrid() else @showGrid() if @gridShowing() then @hideGrid() else @showGrid()
onSetGrid: (e) -> onSetGrid: (e) ->
if e.grid then @showGrid() else @hideGrid() if e.grid then @showGrid() else @hideGrid()
onToggleDebug: (e) -> onToggleDebug: (e) ->
e?.preventDefault() e?.preventDefault?()
Backbone.Mediator.publish 'level-set-debug', {debug: not @debug} Backbone.Mediator.publish 'level-set-debug', {debug: not @debug}
onSetDebug: (e) -> onSetDebug: (e) ->
@ -455,7 +458,7 @@ module.exports = Surface = class Surface extends CocoClass
@drawCurrentFrame() @drawCurrentFrame()
@onFrameChanged() @onFrameChanged()
@updatePaths() if (@totalFramesDrawn % 2) is 0 or createjs.Ticker.getMeasuredFPS() > createjs.Ticker.getFPS() - 5 @updatePaths() if (@totalFramesDrawn % 2) is 0 or createjs.Ticker.getMeasuredFPS() > createjs.Ticker.getFPS() - 5
Backbone.Mediator.publish('surface:ticked', {}) Backbone.Mediator.publish('surface:ticked', {dt: @world.dt})
mib = @stage.mouseInBounds mib = @stage.mouseInBounds
if @mouseInBounds isnt mib if @mouseInBounds isnt mib
Backbone.Mediator.publish('surface:mouse-' + (if mib then "over" else "out"), {}) Backbone.Mediator.publish('surface:mouse-' + (if mib then "over" else "out"), {})

View file

@ -3,8 +3,6 @@ Camera = require './Camera'
{me} = require 'lib/auth' {me} = require 'lib/auth'
module.exports = class WizardSprite extends IndieSprite module.exports = class WizardSprite extends IndieSprite
ticker: 0
# Wizard targets are constantly changing, so a simple tween doesn't work. # Wizard targets are constantly changing, so a simple tween doesn't work.
# Instead, the wizard stores its origin point and the (possibly) moving target. # Instead, the wizard stores its origin point and the (possibly) moving target.
# Then it figures out its current position based on tween percentage and # Then it figures out its current position based on tween percentage and
@ -16,7 +14,6 @@ module.exports = class WizardSprite extends IndieSprite
reachedTarget: true reachedTarget: true
spriteXOffset: 4 # meters from target sprite spriteXOffset: 4 # meters from target sprite
spriteYOffset: 0 # meters from target sprite spriteYOffset: 0 # meters from target sprite
spriteZOffset: 1 # meters from ground (in middle of float)
subscriptions: subscriptions:
'bus:player-states-changed': 'onPlayerStatesChanged' 'bus:player-states-changed': 'onPlayerStatesChanged'
@ -38,6 +35,9 @@ module.exports = class WizardSprite extends IndieSprite
makeIndieThang: (thangType, thangID, pos) -> makeIndieThang: (thangType, thangID, pos) ->
thang = super thangType, thangID, pos thang = super thangType, thangID, pos
thang.isSelectable = false thang.isSelectable = false
thang.bobHeight = 1.5
thang.bobTime = 2
thang.pos.z += thang.bobHeight
thang thang
onPlayerStatesChanged: (e) -> onPlayerStatesChanged: (e) ->
@ -73,18 +73,8 @@ module.exports = class WizardSprite extends IndieSprite
.to({scaleX: 0, scaleY: 0, alpha: 0}, 1000, createjs.Ease.getPowInOut(2.2)) .to({scaleX: 0, scaleY: 0, alpha: 0}, 1000, createjs.Ease.getPowInOut(2.2))
tween.call(callback) if callback tween.call(callback) if callback
# We need the generalizable tinting system included in spritesheet making
#updateColorFilters: ->
# return if @colorHue is undefined
# rgb = hslToRgb(@colorHue, 1.0, 0.75)
# rgb = (parseInt(val) / 256 for val in rgb)
# rgb = rgb.concat([1, 0, 0, 0, 0])
# filter = new createjs.ColorFilter(rgb...)
# dob = @imageObject
# dob.filters = [filter]
# dob.cache(0, 0, @data.width, @data.height, Math.abs(dob.scaleX*2))
setColorHue: (newColorHue) -> setColorHue: (newColorHue) ->
# TODO: is this needed any more?
return if @colorHue is newColorHue return if @colorHue is newColorHue
@colorHue = newColorHue @colorHue = newColorHue
#@updateColorFilters() #@updateColorFilters()
@ -102,8 +92,7 @@ module.exports = class WizardSprite extends IndieSprite
onEchoSelfWizardSprite: (e) -> e.payload = @ if @isSelf onEchoSelfWizardSprite: (e) -> e.payload = @ if @isSelf
onEchoAllWizardSprites: (e) -> e.payload.push @ onEchoAllWizardSprites: (e) -> e.payload.push @
defaultPos: -> x: 35, y: 24, z: @thang.depth / 2 + @spriteZOffset defaultPos: -> x: 35, y: 24, z: @thang.depth / 2 + @thang.bobHeight
getZOffset: -> @thang.depth / 2 + @spriteZOffset + Math.sin @ticker / 20 # Cloud bobbing.
move: (pos, duration) -> @setTarget(pos, duration) move: (pos, duration) -> @setTarget(pos, duration)
setTarget: (newTarget, duration) -> setTarget: (newTarget, duration) ->
@ -196,7 +185,7 @@ module.exports = class WizardSprite extends IndieSprite
""" """
@targetPos = @targetSprite.thang.pos if @targetSprite @targetPos = @targetSprite.thang.pos if @targetSprite
pos = _.clone(@targetPos) pos = _.clone(@targetPos)
pos.z = @getZOffset() pos.z = @defaultPos().z + @getBobOffset()
@adjustPositionToSideOfTarget(pos) if @targetSprite # be off to the side depending on placement in world @adjustPositionToSideOfTarget(pos) if @targetSprite # be off to the side depending on placement in world
return pos if @reachedTarget # stick like glue return pos if @reachedTarget # stick like glue
@ -227,10 +216,5 @@ module.exports = class WizardSprite extends IndieSprite
if @targetSprite if @targetSprite
@pointToward(@targetSprite.thang.pos) @pointToward(@targetSprite.thang.pos)
updateIsometricRotation: (rotation, imageObject) ->
super rotation, imageObject
imageObject ?= @imageObject
imageObject.scaleX *= -1 if Math.abs(rotation) <= 45 or Math.abs(rotation) >= 135 # reverse it
updateMarks: -> updateMarks: ->
super() if @displayObject.visible # not if we hid the wiz super() if @displayObject.visible # not if we hid the wiz

View file

@ -1,5 +1,5 @@
module.exports.thangNames = thangNames = module.exports.thangNames = thangNames =
"Soldier": [ "Soldier M": [
"William" "William"
"Lucas" "Lucas"
"Marcus" "Marcus"
@ -45,16 +45,18 @@ module.exports.thangNames = thangNames =
"Sterling" "Sterling"
"Alistair" "Alistair"
"Remy" "Remy"
"Lana"
"Stormy" "Stormy"
"Halle" "Halle"
"Sage"
]
"Soldier F": [
"Sarah" "Sarah"
"Alexandra" "Alexandra"
"Holly" "Holly"
"Trinity" "Trinity"
"Nikita" "Nikita"
"Alana" "Alana"
"Sage" "Lana"
] ]
"Peasant": [ "Peasant": [
"Yorik" "Yorik"
@ -77,7 +79,7 @@ module.exports.thangNames = thangNames =
"Bernadette" "Bernadette"
"Hershell" "Hershell"
] ]
"Archer": [ "Archer F": [
"Phoebe" "Phoebe"
"Mira" "Mira"
"Agapi" "Agapi"
@ -98,13 +100,15 @@ module.exports.thangNames = thangNames =
"Clare" "Clare"
"Rowan" "Rowan"
"Omar" "Omar"
"Brian"
"Cole"
"Alden" "Alden"
"Cairn" "Cairn"
"Jensen" "Jensen"
] ]
"Ogre Munchkin": [ "Archer M": [
"Brian"
"Cole"
]
"Ogre Munchkin M": [
"Brack" "Brack"
"Gort" "Gort"
"Weeb" "Weeb"
@ -120,15 +124,17 @@ module.exports.thangNames = thangNames =
"Skoggen" "Skoggen"
"Treg" "Treg"
"Goreball" "Goreball"
"Shmeal"
"Gert" "Gert"
"Thabt" "Thabt"
"Iyert"
"Palt"
"Snortt" "Snortt"
"Kog" "Kog"
] ]
"Ogre": [ "Ogre Munchkin F": [
"Iyert"
"Palt"
"Shmeal"
]
"Ogre M": [
"Krogg" "Krogg"
"Dronck" "Dronck"
"Trogdor" "Trogdor"
@ -137,6 +143,8 @@ module.exports.thangNames = thangNames =
"Mak Fod" "Mak Fod"
"Trung" "Trung"
"Axe Ox" "Axe Ox"
]
"Ogre F": [
"Nareng" "Nareng"
"Morthrug" "Morthrug"
"Glonc" "Glonc"

View file

@ -32,8 +32,4 @@ class Rand
rand2: (min, max) => rand2: (min, max) =>
min + @rand max - min min + @rand max - min
# return an array of numbers from 0 to n-1, shuffled
randArray: (n) =>
_.shuffle [0...n]
module.exports = Rand module.exports = Rand

View file

@ -8,6 +8,8 @@ class Rectangle
Rectangle[name] = (a, b) -> Rectangle[name] = (a, b) ->
a.copy()[name](b) a.copy()[name](b)
apiProperties: ['x', 'y', 'width', 'height', 'rotation', 'getPos', 'vertices', 'touchesRect', 'touchesPoint', 'distanceToPoint', 'containsPoint', 'copy']
constructor: (@x=0, @y=0, @width=0, @height=0, @rotation=0) -> constructor: (@x=0, @y=0, @width=0, @height=0, @rotation=0) ->
copy: -> copy: ->
@ -114,4 +116,7 @@ class Rectangle
@deserialize: (o, world, classMap) -> @deserialize: (o, world, classMap) ->
new Rectangle o.x, o.y, o.w, o.h, o.r new Rectangle o.x, o.y, o.w, o.h, o.r
serializeForAether: -> @serialize()
@deserializeFromAether: (o) -> @deserialize o
module.exports = Rectangle module.exports = Rectangle

View file

@ -10,7 +10,9 @@ module.exports.scriptMatchesEventPrereqs = scriptMatchesEventPrereqs = (script,
return false if ap.greaterThanOrEqualTo? and not (v >= ap.greaterThanOrEqualTo) return false if ap.greaterThanOrEqualTo? and not (v >= ap.greaterThanOrEqualTo)
return false if ap.lessThan? and not (v < ap.lessThan) return false if ap.lessThan? and not (v < ap.lessThan)
return false if ap.lessThanOrEqualTo? and not (v <= ap.lessThanOrEqualTo) return false if ap.lessThanOrEqualTo? and not (v <= ap.lessThanOrEqualTo)
return false if ap.containingString? and v?.search(ap.containingString) == -1 return false if ap.containingString? and (not v or v.search(ap.containingString) is -1)
return false if ap.notContainingString? and v?.search(ap.containingString) != -1 return false if ap.notContainingString? and v?.search(ap.notContainingString) isnt -1
return false if ap.containingRegexp? and (not v or v.search(new RegExp(ap.containingRegexp)) is -1)
return false if ap.notContainingRegexp? and v?.search(new RegExp(ap.notContainingRegexp)) isnt -1
return true return true

View file

@ -4,44 +4,31 @@ ThangState = require './thang_state'
Rand = require './rand' Rand = require './rand'
module.exports = class Thang module.exports = class Thang
@className: "Thang" @className: 'Thang'
@random = new Rand @remainingThangNames: {}
# Random ordering for each sprite name @nextID: (spriteName, world) ->
@ordering: (spriteName) ->
Thang.orders ?= {}
names = thangNames[spriteName]
if names
len = names.length
array = Thang.orders[spriteName]
unless array?
array = @random.randArray len
Thang.orders[spriteName] = array
else
array = []
array
@nextID: (spriteName) ->
Thang.lastIDNums ?= {} Thang.lastIDNums ?= {}
names = thangNames[spriteName] originals = thangNames[spriteName] or [spriteName]
order = @ordering spriteName remaining = Thang.remainingThangNames[spriteName]
if names remaining = Thang.remainingThangNames[spriteName] = originals.slice() unless remaining?.length
lastIDNum = Thang.lastIDNums[spriteName]
idNum = (if lastIDNum? then lastIDNum + 1 else 0)
Thang.lastIDNums[spriteName] = idNum
id = names[order[idNum % names.length]]
if idNum >= names.length
id += Math.floor(idNum / names.length) + 1
else
Thang.lastIDNums[spriteName] = if Thang.lastIDNums[spriteName]? then Thang.lastIDNums[spriteName] + 1 else 0
id = spriteName + (Thang.lastIDNums[spriteName] or '')
id
@resetThangIDs: -> Thang.lastIDNums = {} baseName = remaining.splice(world.rand.rand(remaining.length), 1)[0]
i = 0
while true
name = if i then "#{baseName} #{i}" else baseName
extantThang = world.thangMap[name]
break unless extantThang
i++
name
@resetThangIDs: -> Thang.remainingThangNames = {}
apiProperties: ['id', 'spriteName', 'health', 'pos', 'team']
constructor: (@world, @spriteName, @id) -> constructor: (@world, @spriteName, @id) ->
@spriteName ?= @constructor.className @spriteName ?= @constructor.className
@id ?= @constructor.nextID @spriteName @id ?= @constructor.nextID @spriteName, @world
@addTrackedProperties ['exists', 'boolean'] # TODO: move into Systems/Components, too? @addTrackedProperties ['exists', 'boolean'] # TODO: move into Systems/Components, too?
#console.log "Generated #{@toString()}." #console.log "Generated #{@toString()}."
@ -158,6 +145,9 @@ module.exports = class Thang
t[prop] = val t[prop] = val
t t
serializeForAether: ->
{CN: @constructor.className, id: @id}
getSpriteOptions: -> getSpriteOptions: ->
colorConfigs = @world?.getTeamColors() or {} colorConfigs = @world?.getTeamColors() or {}
options = {} options = {}

View file

@ -8,6 +8,7 @@ class Vector
a.copy()[name](b, useZ) a.copy()[name](b, useZ)
isVector: true isVector: true
apiProperties: ['x', 'y', 'magnitude', 'heading', 'distance', 'dot', 'equals', 'copy']
constructor: (@x=0, @y=0, @z=0) -> constructor: (@x=0, @y=0, @z=0) ->
@ -119,4 +120,7 @@ class Vector
@deserialize: (o, world, classMap) -> @deserialize: (o, world, classMap) ->
new Vector o.x, o.y, o.z new Vector o.x, o.y, o.z
serializeForAether: -> @serialize()
@deserializeFromAether: (o) -> @deserialize o
module.exports = Vector module.exports = Vector

View file

@ -14,6 +14,9 @@ DESERIALIZATION_INTERVAL = 20
module.exports = class World module.exports = class World
@className: "World" @className: "World"
age: 0
ended: false
apiProperties: ['age', 'dt']
constructor: (name, @userCodeMap, classMap) -> constructor: (name, @userCodeMap, classMap) ->
# classMap is needed for deserializing Worlds, Thangs, and other classes # classMap is needed for deserializing Worlds, Thangs, and other classes
@classMap = classMap ? {Vector: Vector, Rectangle: Rectangle, Thang: Thang} @classMap = classMap ? {Vector: Vector, Rectangle: Rectangle, Thang: Thang}
@ -28,8 +31,6 @@ module.exports = class World
@scriptNotes = [] @scriptNotes = []
@rand = new Rand 0 @rand = new Rand 0
@frames = [new WorldFrame(@, 0)] @frames = [new WorldFrame(@, 0)]
age: 0
ended: false
# --- This config needs to move into Systems config --- TODO # --- This config needs to move into Systems config --- TODO
playableTeams: ["humans"] playableTeams: ["humans"]
@ -221,7 +222,7 @@ module.exports = class World
channel = 'world:' + channel channel = 'world:' + channel
for script in @scripts for script in @scripts
continue if script.channel isnt channel continue if script.channel isnt channel
scriptNote = new WorldScriptNote script, event, world scriptNote = new WorldScriptNote script, event
continue if scriptNote.invalid continue if scriptNote.invalid
@scriptNotes.push scriptNote @scriptNotes.push scriptNote
return unless @goalManager return unless @goalManager

View file

@ -38,11 +38,11 @@ module.exports = class WorldFrame
map = ((' ' for x in [0 .. @world.width]) \ map = ((' ' for x in [0 .. @world.width]) \
for y in [0 .. @world.height]) for y in [0 .. @world.height])
symbols = ".ox@dfga[]/D" symbols = ".ox@dfga[]/D"
for thang, i in @thangs for thang, i in @world.thangs when thang.rectangle
rect = thang.rectangle().axisAlignedBoundingBox() rect = thang.rectangle().axisAlignedBoundingBox()
for y in [Math.floor(rect.y - rect.height / 2) ... Math.ceil(rect.y + rect.height / 2)] for y in [Math.floor(rect.y - rect.height / 2) ... Math.ceil(rect.y + rect.height / 2)]
for x in [Math.floor(rect.x - rect.width / 2) ... Math.ceil(rect.x + rect.width / 2)] for x in [Math.floor(rect.x - rect.width / 2) ... Math.ceil(rect.x + rect.width / 2)]
map[y][x] = symbols[i] map[y][x] = symbols[i % symbols.length] if 0 <= y < @world.height and 0 <= x < @world.width
@time + "\n" + (xs.join(' ') for xs in map).join('\n') + '\n' @time + "\n" + (xs.join(' ') for xs in map).join('\n') + '\n'
serialize: (frameIndex, trackedPropertiesThangIDs, trackedPropertiesPerThangIndices, trackedPropertiesPerThangTypes, trackedPropertiesPerThangValues, specialValuesToKeys, specialKeysToValues) -> serialize: (frameIndex, trackedPropertiesThangIDs, trackedPropertiesPerThangIndices, trackedPropertiesPerThangTypes, trackedPropertiesPerThangValues, specialValuesToKeys, specialKeysToValues) ->

View file

@ -1,441 +1,440 @@
module.exports = nativeDescription: "čeština", englishDescription: "Czech", translation: module.exports = nativeDescription: "čeština", englishDescription: "Czech", translation:
common: common:
loading: "Loading..." loading: "Načítání..."
# saving: "Saving..." saving: "Ukládání..."
# sending: "Sending..." sending: "Odesílání..."
# cancel: "Cancel" cancel: "Zrušit"
# save: "Save" save: "Uložit"
# delay_1_sec: "1 second" delay_1_sec: "1 vteřina"
# delay_3_sec: "3 seconds" delay_3_sec: "3 vteřiny"
# delay_5_sec: "5 seconds" delay_5_sec: "5 vteřin"
# manual: "Manual" manual: "Ručně"
# fork: "Fork" fork: "Klonovat"
# play: "Play" play: "Přehrát"
# modal: modal:
# close: "Close" close: "Zavřít"
# okay: "Okay" okay: "Budiž"
# not_found: not_found:
# page_not_found: "Page not found" page_not_found: "Stránka nenalezena"
# nav: nav:
# play: "Levels" play: "Úrovně"
# editor: "Editor" editor: "Editor"
# blog: "Blog" blog: "Blog"
# forum: "Forum" forum: "rum"
# admin: "Admin" admin: "Admin"
# home: "Home" home: "Domů"
# contribute: "Contribute" contribute: "Přispívat"
# legal: "Legal" legal: "Licence"
# about: "About" about: "O programu"
# contact: "Contact" contact: "Kontakt"
# twitter_follow: "Follow" twitter_follow: "Sledovat na twitteru"
# employers: "Employers" employers: "Pro zaměstnavatele"
# versions: versions:
# save_version_title: "Save New Version" save_version_title: "Uložit novou Verzi"
# new_major_version: "New Major Version" new_major_version: "Nová hlavní Verze"
# cla_prefix: "To save changes, first you must agree to our" cla_prefix: "Před uložením musíte souhlasit s"
# cla_url: "CLA" cla_url: "licencí"
# cla_suffix: "." cla_suffix: "."
# cla_agree: "I AGREE" cla_agree: "SOUHLASÍM"
# login: login:
# sign_up: "Create Account" sign_up: "Vytvořit účet"
# log_in: "Log In" log_in: "Přihlásit"
# log_out: "Log Out" log_out: "Odhlásit"
# recover: "recover account" recover: "obnovit účet"
# recover: recover:
# recover_account_title: "Recover Account" recover_account_title: "Obnovení účtu"
# send_password: "Send Recovery Password" send_password: "Zaslat nové heslo"
# signup: signup:
# create_account_title: "Create Account to Save Progress" create_account_title: "Vytvořit účet k uložení úrovně"
# description: "It's free. Just need a couple things and you'll be good to go:" description: "Registrace je zdarma. Vyplňte pouze několik údajů:"
# email_announcements: "Receive announcements by email" email_announcements: "Dostávat novinky emailem"
# coppa: "13+ or non-USA " coppa: "starší 13 let nebo nejste z USA "
# coppa_why: "(Why?)" coppa_why: "(Proč?)"
# creating: "Creating Account..." creating: "Vytvářím účet..."
# sign_up: "Sign Up" sign_up: "Přihlášení"
# log_in: "log in with password" log_in: "zadejte vaše heslo"
# home: home:
# slogan: "Learn to Code JavaScript by Playing a Game" slogan: "Naučte se programování JavaScriptu při hraní více-hráčové programovací hry."
# no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" no_ie: "Omlouváme se, ale CodeCombat boužel nefunguje v Internet Exploreru 9 nebo starším."
# no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" no_mobile: "CodeCombat není navržen pro mobilní zařízení a nemusí fungovat správně!"
# play: "Play" play: "Hrát"
# play: play:
# choose_your_level: "Choose Your Level" choose_your_level: "Zvolte si úroveň"
# adventurer_prefix: "You can jump to any level below, or discuss the levels on " adventurer_prefix: "Můžete přejít do dalších úrovní, nebo debatovat o úrovních na "
# adventurer_forum: "the Adventurer forum" adventurer_forum: "fóru Dobrodruhů"
# adventurer_suffix: "." adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign" campaign_beginner: "Začátečnická úroveň"
# campaign_beginner_description: "... in which you learn the wizardry of programming." campaign_beginner_description: "...ve které se naučíte kouzla programování."
# campaign_dev: "Random Harder Levels" campaign_dev: "Náhodné težší úrovně"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder." campaign_dev_description: "...ve kterých se dozvíte více o prostředí při plnění těžších úkolů."
# campaign_multiplayer: "Multiplayer Arenas" campaign_multiplayer: "Multiplayer Aréna"
# campaign_multiplayer_description: "... in which you code head-to-head against other players." campaign_multiplayer_description: "...ve které programujete proti jiným hráčům."
# campaign_player_created: "Player-Created" campaign_player_created: "Uživatelsky vytvořené úrovně"
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>." campaign_player_created_description: "...ve kterých bojujete proti kreativitě ostatních <a href=\"/contribute#artisan\">Zdatných Kouzelníků</a>."
# level_difficulty: "Difficulty: " level_difficulty: "Obtížnost: "
# contact: contact:
# contact_us: "Contact CodeCombat" contact_us: "Konktujte CodeCombat"
# welcome: "Good to hear from you! Use this form to send us email. " welcome: "Rádi od vás uslyšíme. Použijte tento formulář pro odeslání emailu. "
# contribute_prefix: "If you're interested in contributing, check out our " contribute_prefix: "Chcete-li nám přispět, prohlédněte si naši stránku "
# contribute_page: "contribute page" contribute_page: "přispivatelů"
# contribute_suffix: "!" contribute_suffix: "!"
# forum_prefix: "For anything public, please try " forum_prefix: "Pro ostatní veřejné věci, prosím zkuste "
# forum_page: "our forum" forum_page: "naše fórum"
# forum_suffix: " instead." forum_suffix: "."
# send: "Send Feedback" send: "Odeslat připomínku"
diplomat_suggestion: diplomat_suggestion:
# title: "Help translate CodeCombat!" title: "Pomozte přeložit CodeCombat!"
# sub_heading: "We need your language skills." sub_heading: "Potřebujeme vaše dovednosti."
pitch_body: "We develop CodeCombat in English, but we already have players all over the world. Many of them want to play in Czech but don't speak English, so if you can speak both, please consider signing up to be a Diplomat and help translate both the CodeCombat website and all the levels into Czech." pitch_body: "Přestože vyvíjíme CodeCombat v angličtině, máme spoustu hráčů z celého světa a mnozí z nich by si rádi zahráli česky, neboť anglicky neumí. Pokud anglicky umíte, přihlaste se prosím jako Diplomat a pomozte nám v překladu webu i jednotlivých úrovní."
missing_translations: "Until we can translate everything into Czech, you'll see English when Czech isn't available." missing_translations: "Dokud nebude vše přeloženo, bude se vám na zatím nepřeložených místech zobrazovat text anglicky."
# learn_more: "Learn more about being a Diplomat" learn_more: "Dozvědět se více o Diplomatech"
# subscribe_as_diplomat: "Subscribe as a Diplomat" subscribe_as_diplomat: "Přihlásit se jako Diplomat"
# wizard_settings: wizard_settings:
# title: "Wizard Settings" title: "Nastavení Kouzelníka"
# customize_avatar: "Customize Your Avatar" customize_avatar: "Upravte vás Avatar"
# account_settings: account_settings:
# title: "Account Settings" title: "Nastavení účtu"
# not_logged_in: "Log in or create an account to change your settings." not_logged_in: "Přihlaste se, nebo vytvořte si účet pro uložení nastavení."
# autosave: "Changes Save Automatically" autosave: "Automatické ukládání změn"
# me_tab: "Me" me_tab: "O mne"
# picture_tab: "Picture" picture_tab: "Obrázek"
# wizard_tab: "Wizard" wizard_tab: "Kouzelník"
# password_tab: "Password" password_tab: "Heslo"
# emails_tab: "Emails" emails_tab: "Emaily"
# gravatar_select: "Select which Gravatar photo to use" gravatar_select: "Zvolte kterou Gravatar fotografii použít"
# gravatar_add_photos: "Add thumbnails and photos to a Gravatar account for your email to choose an image." gravatar_add_photos: "Přidat náhledy a fotografie do Gravatar účtu pro zvolení obrázku"
# gravatar_add_more_photos: "Add more photos to your Gravatar account to access them here." gravatar_add_more_photos: "Přidat do vašeho Gravatar účtu další fotografie."
# wizard_color: "Wizard Clothes Color" wizard_color: "Barva Kouzelníkova oblečení"
# new_password: "New Password" new_password: "Nové heslo"
# new_password_verify: "Verify" new_password_verify: "Potvrdit"
# email_subscriptions: "Email Subscriptions" email_subscriptions: "Doručovat emailem"
# email_announcements: "Announcements" email_announcements: "Oznámení"
# email_notifications_description: "Get periodic notifications for your account." email_notifications_description: "Zasílat na váš účet opakovaná oznámení."
# email_announcements_description: "Get emails on the latest news and developments at CodeCombat." email_announcements_description: "Zasílat emaily o posledních novinkách a o postupu ve vývoji CodeCombat."
# contributor_emails: "Contributor Class Emails" contributor_emails: "Emaily pro přispívatele"
# contribute_prefix: "We're looking for people to join our party! Check out the " contribute_prefix: "Hledáme další přispívatele! Čtěte prosím "
# contribute_page: "contribute page" contribute_page: "stránku přispívatelům"
# contribute_suffix: " to find out more." contribute_suffix: " pro více informací."
# email_toggle: "Toggle All" email_toggle: "Zvolit vše"
# error_saving: "Error Saving" error_saving: "Chyba při ukládání"
# saved: "Changes Saved" saved: "Změny uloženy"
# password_mismatch: "Password does not match." password_mismatch: "Hesla nesouhlasí."
# account_profile: account_profile:
# edit_settings: "Edit Settings" edit_settings: "Editovat Nastavení"
# profile_for_prefix: "Profile for " profile_for_prefix: "Profil pro "
# profile_for_suffix: "" profile_for_suffix: ""
# profile: "Profile" profile: "Profil"
# user_not_found: "No user found. Check the URL?" user_not_found: "Uživatel nenalezen. Zkontrolujte adresu URL?"
# gravatar_not_found_mine: "We couldn't find your profile associated with:" gravatar_not_found_mine: "Nenalezli jsme profil asociovaný s:"
# gravatar_not_found_email_suffix: "." gravatar_not_found_email_suffix: "."
# gravatar_signup_prefix: "Sign up at " gravatar_signup_prefix: "Přihlásit se "
# gravatar_signup_suffix: " to get set up!" gravatar_signup_suffix: " k nastavení!"
# gravatar_not_found_other: "Alas, there's no profile associated with this person's email address." gravatar_not_found_other: "Bohužel, neexistuje profil asociovaný s touto emailovou adresou."
# gravatar_contact: "Contact" gravatar_contact: "Kontakt"
# gravatar_websites: "Websites" gravatar_websites: "Weby"
# gravatar_accounts: "As Seen On" gravatar_accounts: "Jak zobrazeno na"
# gravatar_profile_link: "Full Gravatar Profile" gravatar_profile_link: "Účet Gravatar"
# play_level: play_level:
# level_load_error: "Level could not be loaded." level_load_error: "Úroveň se nepodařilo otevřít."
# done: "Done" done: "Hotovo"
# grid: "Grid" grid: "Mřížka"
# customize_wizard: "Customize Wizard" customize_wizard: "Upravit Kouzelníka"
# home: "Home" home: "Domů"
# guide: "Guide" guide: "Průvodce"
# multiplayer: "Multiplayer" multiplayer: "Multiplayer"
# restart: "Restart" restart: "Restartovat"
# goals: "Goals" goals: "Cíl"
# action_timeline: "Action Timeline" action_timeline: "Časová osa"
# click_to_select: "Click on a unit to select it." click_to_select: "Vyberte kliknutím."
# reload_title: "Reload All Code?" reload_title: "Znovunačíst veškerý kód?"
# reload_really: "Are you sure you want to reload this level back to the beginning?" reload_really: "Opravdu chcete resetovat tuto úroveň do počátečního stavu?"
# reload_confirm: "Reload All" reload_confirm: "Znovu načíst vše"
# victory_title_prefix: "" victory_title_prefix: ""
# victory_title_suffix: " Complete" victory_title_suffix: " Hotovo"
# victory_sign_up: "Sign Up to Save Progress" victory_sign_up: "Přihlásit se pro uložení postupu"
# victory_sign_up_poke: "Want to save your code? Create a free account!" victory_sign_up_poke: "Chcete uložit váš kód? Vytvořte si účet zdarma!"
# victory_rate_the_level: "Rate the level: " victory_rate_the_level: "Ohodnoťte tuto úroveň: "
# victory_play_next_level: "Play Next Level" victory_play_next_level: "Hrát další úroveň"
# victory_go_home: "Go Home" victory_go_home: "Přejít domů"
# victory_review: "Tell us more!" victory_review: "Připomínky!"
# victory_hour_of_code_done: "Are You Done?" victory_hour_of_code_done: "Skončili jste?"
# victory_hour_of_code_done_yes: "Yes, I'm finished with my Hour of Code!" victory_hour_of_code_done_yes: "Ano, pro dnešek jsem skončil!"
# multiplayer_title: "Multiplayer Settings" multiplayer_title: "Nastavení Multiplayeru"
# multiplayer_link_description: "Give this link to anyone to have them join you." multiplayer_link_description: "Sdílejte tento odkaz s lidmi, kteří se k vám mohou přidat ve hře."
# multiplayer_hint_label: "Hint:" multiplayer_hint_label: "Tip:"
# multiplayer_hint: " Click the link to select all, then press ⌘-C or Ctrl-C to copy the link." multiplayer_hint: " Klikněte na odkaz pro jeho výběr, poté stiskněte ⌘-C nebo Ctrl-C pro kopírování odkazu."
# multiplayer_coming_soon: "More multiplayer features to come!" multiplayer_coming_soon: "Další vlastnosti multiplayeru jsou na cestě!"
# guide_title: "Guide" guide_title: "Průvodce"
# tome_minion_spells: "Your Minions' Spells" tome_minion_spells: "Vaše oblíbená kouzla"
# tome_read_only_spells: "Read-Only Spells" tome_read_only_spells: "Kouzla jen pro čtení"
# tome_other_units: "Other Units" tome_other_units: "Ostatní jednotky"
# tome_cast_button_castable: "Cast" tome_cast_button_castable: "Spustit"
# tome_cast_button_casting: "Casting" tome_cast_button_casting: "Spouštění"
# tome_cast_button_cast: "Spell Cast" tome_cast_button_cast: "Spustit Kouzlo"
# tome_autocast_delay: "Autocast Delay" tome_autocast_delay: "Prodleva Autospouštení"
# tome_select_spell: "Select a Spell" tome_select_spell: "Zvolte Kouzlo"
# tome_select_a_thang: "Select Someone for " tome_select_a_thang: "Zvolte někoho pro "
# tome_available_spells: "Available Spells" tome_available_spells: "Dostupná kouzla"
# hud_continue: "Continue (press shift-space)" hud_continue: "Pokračovat (stiskněte shift-mezera)"
# spell_saved: "Spell Saved" spell_saved: "Kouzlo uloženo"
# admin: admin:
# av_title: "Admin Views" av_title: "Administrátorský pohled"
# av_entities_sub_title: "Entities" av_entities_sub_title: "Entity"
# av_entities_users_url: "Users" av_entities_users_url: "Uživatelé"
# av_entities_active_instances_url: "Active Instances" av_entities_active_instances_url: "Aktivní instance"
# av_other_sub_title: "Other" av_other_sub_title: "Ostatní"
# av_other_debug_base_url: "Base (for debugging base.jade)" av_other_debug_base_url: "Base (pro debugování base.jade)"
# u_title: "User List" u_title: "Seznam uživatelů"
# lg_title: "Latest Games" lg_title: "Poslední hry"
# editor: editor:
# main_title: "CodeCombat Editors" main_title: "Editory CodeCombatu"
# main_description: "Build your own levels, campaigns, units and educational content. We provide all the tools you need!" main_description: "Vytvořte vlastní úrovně, kampaně, jednotky a vzdělávací obsah. My vám poskytujeme všechny potřebné nástroje!"
# article_title: "Article Editor" article_title: "Editor článků"
# article_description: "Write articles that give players overviews of programming concepts which can be used across a variety of levels and campaigns." article_description: "Napište články, které objasní hráčům koncepty programování využitelné v úrovních a kampaních."
# thang_title: "Thang Editor" thang_title: "Editor Thangů - objektů"
# thang_description: "Build units, defining their default logic, graphics and audio. Currently only supports importing Flash exported vector graphics." thang_description: "Vytvořte jednotky, definujte jejich logiku, vlastnosti, grafiku a zvuk. Momentálně jsou podporovány pouze importy vektorové grafiky exportované z Flashe."
# level_title: "Level Editor" level_title: "Editor úrovní"
# level_description: "Includes the tools for scripting, uploading audio, and constructing custom logic to create all sorts of levels. Everything we use ourselves!" level_description: "Zahrnuje pomůcky pro skriptování, nahrávání audia a tvorbu vlastní logiky pro vytvoření vlastních úrovní. Obsahuje vše, čeho využíváme k tvorbě úrovní my!"
# security_notice: "Many major features in these editors are not currently enabled by default. As we improve the security of these systems, they will be made generally available. If you'd like to use these features sooner, " security_notice: "Velké množství důležitých funkcí těchto editorů je standardně vypnuto. Jak postupem času vylepšujeme bezpečnost celého systému, jsou tyto funkce uvolňovány k veřejnému použití. Potřebujete-li některé funkce dříve, "
# contact_us: "contact us!" contact_us: "kontaktujte nás!"
# hipchat_prefix: "You can also find us in our" hipchat_prefix: "Můžete nás také najít v naší"
# hipchat_url: "HipChat room." hipchat_url: "HipChat diskusní místnosti."
# level_some_options: "Some Options?" level_some_options: "Volby?"
# level_tab_thangs: "Thangs" level_tab_thangs: "Thangy"
# level_tab_scripts: "Scripts" level_tab_scripts: "Skripty"
# level_tab_settings: "Settings" level_tab_settings: "Nastavení"
# level_tab_components: "Components" level_tab_components: "Komponenty"
# level_tab_systems: "Systems" level_tab_systems: "Systémy"
# level_tab_thangs_title: "Current Thangs" level_tab_thangs_title: "Současné Thangy"
# level_tab_thangs_conditions: "Starting Conditions" level_tab_thangs_conditions: "Výchozí prostředí"
# level_tab_thangs_add: "Add Thangs" level_tab_thangs_add: "Přidat Thangy"
# level_settings_title: "Settings" level_settings_title: "Nastavení"
# level_component_tab_title: "Current Components" level_component_tab_title: "Současné komponenty"
# level_component_btn_new: "Create New Component" level_component_btn_new: "Vytvořit novou komponentu"
# level_systems_tab_title: "Current Systems" level_systems_tab_title: "Současné systémy"
# level_systems_btn_new: "Create New System" level_systems_btn_new: "Vytvořit nový systém"
# level_systems_btn_add: "Add System" level_systems_btn_add: "Přidat systém"
# level_components_title: "Back to All Thangs" level_components_title: "Zpět na všechny Thangy"
# level_components_type: "Type" level_components_type: "Druh"
# level_component_edit_title: "Edit Component" level_component_edit_title: "Editovat komponentu"
# level_system_edit_title: "Edit System" level_system_edit_title: "Editovat systém"
# create_system_title: "Create New System" create_system_title: "Vytvořit nový systém"
# new_component_title: "Create New Component" new_component_title: "Vytvořit novou komponentu"
# new_component_field_system: "System" new_component_field_system: "Systém"
article:
edit_btn_preview: "Náhled"
edit_article_title: "Editovat článek"
# article: general:
# edit_btn_preview: "Preview" and: "a"
# edit_article_title: "Edit Article" name: "Jméno"
body: "Tělo"
version: "Verze"
commit_msg: "Popisek ukládání"
version_history_for: "Verze historie pro: "
results: "Výsledky"
description: "Popis"
or: "nebo"
email: "Email"
message: "Zpráva"
# general: about:
# and: "and" who_is_codecombat: "Kdo je CodeCombat?"
# name: "Name" why_codecombat: "Proč CodeCombat?"
# body: "Body" who_description_prefix: "společně přišli s projektem CodeCombat v roce 2013. V roce 2008 jsme vytvořili také "
# version: "Version" who_description_suffix: ", jedničku mezi webovými a IOS aplikacemi pro učení psaní japonských a čínských znaků."
# commit_msg: "Commit Message" who_description_ending: "Nyní nastal čas pomoci lidem s programováním."
# version_history_for: "Version History for: " why_paragraph_1: "Při vytváření Skritteru neznal George základy programování a byl neustále frustrován svou neschopností implementovat vlastní nápady. Zkoušel se naučit programovat, ale lekce programování byly na něj příliš pomalé. Jeho spolubydlící se rozhodl o rekvalifikaci a tak zkusil Codeacademy, ale brzy toho nechal s tím, že je to příliš velká nuda. Týden co týden se někdo z Georgových přátel pokoušel využít Codeacademyk učení programování, ale po chvíli odpadl. Uvědomili jsme si, že se jedná o stejný problém, který jsme již vyřešili při tvorbě Skitteru: lidé se pokouší učit na pomalých, intenzivních teoretických lekcích, ale místo toho potřebují rychlé, ale obsáhlé praktické cvičení. A na tento problém známe řešení."
# results: "Results" why_paragraph_2: "Potřebujete se naučit programovat? Pak nepotřebujete lekce, potřebuje příležitost psát spoustu kódu a při tom se u toho dobře bavit."
# description: "Description" why_paragraph_3_prefix: "To je to o čem musí programování být. Ne rádoby zábava typu"
# or: "or" why_paragraph_3_italic: "hmm, další odznáček"
# email: "Email" why_paragraph_3_center: "ale nadšení typu"
# message: "Message" why_paragraph_3_italic_caps: "POČKEJ MAMI, MUSÍM DOKONČIT ÚROVEŇ!"
why_paragraph_3_suffix: "Proto je CodeCombat opravdová multiplayer hra, ne lekce kurzu s herními odznáčky. Neskončí, dokud sami nepřestanete, což je tentokrát dobrá věc."
why_paragraph_4: "A jestli se máte stát závislými na nějaké hře, pak ať je to hra tato, a staňte se díky tomu kouzelníky a odborníky v této technické době."
why_ending: "A mimochodem - je to zdarma. "
why_ending_url: "Začněte kouzlit!"
george_description: "CEO, obchodník, návrhář webů i her a šampión všech začátečníků programování."
scott_description: "Výtečný programátor, softwarový architekt, kouzelník v kuchyni i pán financí. Scott je v týmu pan rozumný."
nick_description: "Programátorský kouzelník, excentrický motivační mág i experimentátor. Nick by mohl dělat de-facto cokoliv, ale zvolil si vytvořit CodeCombat."
jeremy_description: "Mistr zákaznické podpory, tester použitelnosti a organizátor komunity. Je velmi pravděpodobné, že jste si spolu již psali."
michael_description: "Programátor, systémový administrátor a král podsvětí technického zázemí. Michael udržuje naše servery online."
# about: legal:
# who_is_codecombat: "Who is CodeCombat?" page_title: "Licence"
# why_codecombat: "Why CodeCombat?" opensource_intro: "CodeCombat je zdarma a plně open source."
# who_description_prefix: "together started CodeCombat in 2013. We also created " opensource_description_prefix: "Podívejte se na "
# who_description_suffix: "in 2008, growing it to the #1 web and iOS application for learning to write Chinese and Japanese characters." github_url: "naši stránku na GitHubu"
# who_description_ending: "Now it's time to teach people to write code." opensource_description_center: "a pokud se vám chce, můžete i pomoct! CodeCombat je vystavěn na několika oblíbených svobodných projektech. Podívejte se na"
# why_paragraph_1: "When making Skritter, George didn't know how to program and was constantly frustrated by his inability to implement his ideas. Afterwards, he tried learning, but the lessons were too slow. His housemate, wanting to reskill and stop teaching, tried Codecademy, but \"got bored.\" Each week another friend started Codecademy, then dropped off. We realized it was the same problem we'd solved with Skritter: people learning a skill via slow, intensive lessons when what they need is fast, extensive practice. We know how to fix that." archmage_wiki_url: "naši wiki Arcikouzelníků "
# why_paragraph_2: "Need to learn to code? You don't need lessons. You need to write a lot of code and have a great time doing it." opensource_description_suffix: "pro seznam projektů, díky kterým může tato hra existovat."
# why_paragraph_3_prefix: "That's what programming is about. It's gotta be fun. Not fun like" practices_title: "Doporučené postupy"
# why_paragraph_3_italic: "yay a badge" practices_description: "Toto je příslib našeho přístupu v jednoduchém jazyce."
# why_paragraph_3_center: "but fun like" privacy_title: "Soukromí"
# why_paragraph_3_italic_caps: "NO MOM I HAVE TO FINISH THE LEVEL!" privacy_description: "Neprodáme vaše osobní informace. Náš plán na zhodnocení je založen na poskytování pracovních příležitostí, přesto si můžete být jisti, že vaše osobní informace nebudou distribuovány bez vašeho plného souhlasu."
# why_paragraph_3_suffix: "That's why CodeCombat is a multiplayer game, not a gamified lesson course. We won't stop until you can't stop--but this time, that's a good thing." security_title: "Zabezpečení"
# why_paragraph_4: "If you're going to get addicted to some game, get addicted to this one and become one of the wizards of the tech age." security_description: "Usilujeme o to, abychom udrželi vaše osobní informace v bezpečí. Jako otevřený projekt jsme přístupni komukoliv k provedení kontroly kódu pro zlepšení našich bezpečnostních systémů."
# why_ending: "And hey, it's free. " email_title: "Email"
# why_ending_url: "Start wizarding now!" email_description_prefix: "Nebudeme vás zaplavovat nevyžádanou korespondencí. Pomocí "
# george_description: "CEO, business guy, web designer, game designer, and champion of beginning programmers everywhere." email_settings_url: " nastavení emailu"
# scott_description: "Programmer extraordinaire, software architect, kitchen wizard, and master of finances. Scott is the reasonable one." email_description_suffix: "nebo skrze odkazy v odeslaných emailech si můžete nastavit nebo se kdykoliv odhlásit z naší korespondence."
# nick_description: "Programming wizard, eccentric motivation mage, and upside-down experimenter. Nick can do anything and chooses to build CodeCombat." cost_title: "Cena"
# jeremy_description: "Customer support mage, usability tester, and community organizer; you've probably already spoken with Jeremy." cost_description: "Momentálně je CodeCombat 100% zdarma! Naší snahou je udržet přístup zdarma, abychom dali možnost hrát co největšímu množství lidí. V případě nutnosti budeme muset přejít na placený vstup nebo platbu za přístup k určitému obsahu, ale raději bychom se tomu vyhnuli. S trochou štěstí doufáme v následující plán monetizace:"
# michael_description: "Programmer, sys-admin, and undergrad technical wunderkind, Michael is the person keeping our servers online." recruitment_title: "Nábor"
recruitment_description_prefix: "Zde na CodeCombatu se stanete mocným kouzelníkem a to nejen ve hře, ale i v reálném životě."
url_hire_programmers: "O dobré programátory je stále velký zájem "
recruitment_description_suffix: "takže až se vypracujete a pokud budete souhlasit, budeme demonstrovat vaše nejlepší programátorské úspěchy tisícovkám zaměstnavatelů, kteří by vás rádi zaměstnali. Ti nám zaplatí něco málo, ale vám pak zaplatí "
recruitment_description_italic: "daleko více,"
recruitment_description_ending: "tato hra zůstane zdarma a všichni budou spokojeni. Takový je plán."
copyrights_title: "Copyrights a Licence"
contributor_title: "Licenční ujednání přispívatelů (CLA)"
contributor_description_prefix: "Všichni přispívatelé jak na webu tak do projektu na GitHubu spadají pod naše "
cla_url: "CLA"
contributor_description_suffix: "se kterým je nutno souhlasit před tím, nežli přispějete."
code_title: "Kód - MIT"
code_description_prefix: "Veškerý kód vlastněný CodeCombatem nebo hostovaným na codecombat.com, kód v repozitáři na GitHub repository nebo v databázi codecombat.com, je licencován pod "
mit_license_url: "MIT licencí"
code_description_suffix: "Zahrnut je veškerý kód v systémech a komponentech, které jsou zpřístupněné CodeCombatem pro vytváření úrovní."
art_title: "Art/Hudba - Creative Commons "
art_description_prefix: "Veškerý obecný obsah je dostupný pod "
cc_license_url: "Mezinárodní Licencí Creative Commons Attribution 4.0"
art_description_suffix: "Obecným obsahem se rozumí vše dostupné na CodeCombatu, určené k vytváření úrovní. To zahrnuje:"
art_music: "Hudbu"
art_sound: "Zvuky"
art_artwork: "Umělecká díla"
art_sprites: "Doplňkový kód"
art_other: "A veškeré další kreativní práce použité při vytváření úrovní."
art_access: "Momentálně neexistuje jednoduchý systém pro stažení těchto součástí, částí úrovní a podobně. Lze je stáhnout z URL adres na tomto webu, můžete nás kontaktovat se žádostí o informace nebo nám i pomoci ve sdílení a vytváření systému pro jednoduché sdílení těchto doplňkových součástí."
art_paragraph_1: "Při uvádění zdroje, uvádějte prosím jméno a odkaz na codecombat.com v místech, která jsou vhodná a kde je to možné. Například:"
use_list_1: "Při použití ve filmu uveďte codecombat.com v titulcích."
use_list_2: "Při použití na webu, zahrňte odkaz například pod obrázkem/odkazem, nebo na stránce uvádějící zdroj, kde také zmíníte další Creative Commons díla a další použité open source projekty. Ostatní, na CodeCombat odkazující se práce (například článek na blogu zmiňující CodeCombat) není nutno separátně označovat a uvádět zdroj."
art_paragraph_2: "Využíváte-li obsah vytvořený některým uživatelem na codecombat.com, uvádějte odkaz na zdroj přímo na tohoto autora a následujte doporučení uvádění zdroje daného obsahu, je-li uvedeno."
rights_title: "Práva vyhrazena"
rights_desc: "Všechna práva jsou vyhrazena jednotlivým samostatným úrovním. To zahrnuje"
rights_scripts: "Skripty"
rights_unit: "Unit konfigurace"
rights_description: "Popisy"
rights_writings: "Zápisy"
rights_media: "Média (zvuky, hudba) a další tvořivý obsah vytvořený specificky pro tuto úroveň, který nebyl zpřístupněn při vytváření úrovně."
rights_clarification: "Pro ujasnění - vše, co je dostupné v editoru úrovní při vytváření úrovně spadá pod CC, ale obsah vytvořený v editoru úrovní nebo nahraný při vytváření spadá pod úroveň."
nutshell_title: "Ve zkratce"
nutshell_description: "Vše co je poskytnuto v editoru úrovní je zdarma a mžete toho využít při vytváření úrovní. Ale vyhrazujeme si právo omezit distribuci úrovní samotných (těch, které byly vytvořeny na codecombat.com), takže v budoucnu bude možno tyto zpoplatnit, bude-li to v nejhorším případě nutné"
canonical: "Anglická verze tohoto dokumentu je původní, rozhodující verzí. Nastane-li rozdíl v překladu, Anglická verze bude mít vždy přednost."
# legal: contribute:
# page_title: "Legal" page_title: "Přispívání"
# opensource_intro: "CodeCombat is free to play and completely open source." character_classes_title: "Obsazení rolí"
# opensource_description_prefix: "Check out " introduction_desc_intro: "Vkládáme do CodeCombatu velké naděje."
# github_url: "our GitHub" introduction_desc_pref: "Chceme být to místo, ve kterém se všichni programátoři sejdou pro společnou hru a učení, uvedou další do úžasného světa programování a kde se předvede elita. Víme, že toto sami nezvládneme, jsou to lidé, kteří dělají projekty typu GitHub, Stack Overflow a Linux úspěšnými. Za tímto účelem, "
# opensource_description_center: "and help out if you like! CodeCombat is built on dozens of open source projects, and we love them. See " introduction_desc_github_url: "CodeCombat je kompletně open source"
# archmage_wiki_url: "our Archmage wiki" introduction_desc_suf: "a snažíme se jak jen to jde, abychom vám umožnili se do tohoto projektu zapojit."
# opensource_description_suffix: "for a list of the software that makes this game possible." introduction_desc_ending: "Doufáme, že se k nám přidáte!"
# practices_title: "Respectful Best Practices" introduction_desc_signature: "- Nick, George, Scott, Michael a Jeremy"
# practices_description: "These are our promises to you, the player, in slightly less legalese." alert_account_message_intro: "Vítejte!"
# privacy_title: "Privacy" alert_account_message_pref: "K přihlášení odebírání emailů si nejprve musíte "
# privacy_description: "We will not sell any of your personal information. We intend to make money through recruitment eventually, but rest assured we will not distribute your personal information to interested companies without your explicit consent." alert_account_message_suf: "vytvořit účet"
# security_title: "Security" alert_account_message_create_url: "."
# security_description: "We strive to keep your personal information safe. As an open source project, our site is freely open to anyone to review and improve our security systems." archmage_introduction: "Jedna z nejlepších věcí na vytváření her je to, že se jedná o spojení různých procesů. Grafika, zvuk, síťování v reálném čase, mezilidské vztahy a samozřejmě také spousta běžných aspektů programování, od nízkoúrovňového managementu databáze přes administraci serverů až po tvorbu uživatelská rozhraní. Je zde spousta práce a pokud jste zkušený programátor a všeuměl připravený k ponoření se do hloubek CodeCombatu, tato skupina je pro vás. Budeme moc rádi za vaši pomoc při tvorbě té nejlepší programovací hry."
# email_title: "Email" class_attributes: "Vlastnosti"
# email_description_prefix: "We will not inundate you with spam. Through" archmage_attribute_1_pref: "Znáte "
# email_settings_url: "your email settings" archmage_attribute_1_suf: "nebo se jej chcete naučit. Je v něm většina našeho kódu. Je-li vaším oblíbeným jazykem Ruby nebo Python, budete se cítit jako doma. Je to JavaScript, ale s lepší syntaxí."
# email_description_suffix: "or through links in the emails we send, you can change your preferences and easily unsubscribe at any time." archmage_attribute_2: "Zkušenosti s programováním a osobní iniciativa. Pomůžeme vám se zorientovat, ale nemůžeme vás učit."
# cost_title: "Cost" how_to_join: "Jak se přidat"
# cost_description: "Currently, CodeCombat is 100% free! One of our main goals is to keep it that way, so that as many people can play as possible, regardless of place in life. If the sky darkens, we might have to charge subscriptions or for some content, but we'd rather not. With any luck, we'll be able to sustain the company with:" join_desc_1: "Pomoct může kdokoliv! Pro začátek se podívejte na naši stránku na "
# recruitment_title: "Recruitment" join_desc_2: " , zaškrtněte políčko níže - označíte se tím jako statečný Arcimág a začnete dostávat informace o novinkách emailem. Chcete popovídat o tom jak začít? "
# recruitment_description_prefix: "Here on CodeCombat, you're going to become a powerful wizardnot just in the game, but also in real life." join_desc_3: ", nebo se s námi spojte v naší "
# url_hire_programmers: "No one can hire programmers fast enough" join_desc_4: "!"
# recruitment_description_suffix: "so once you've sharpened your skills and if you agree, we will demo your best coding accomplishments to the thousands of employers who are drooling for the chance to hire you. They pay us a little, they pay you" join_url_email: "Pošlete nám email"
# recruitment_description_italic: "a lot" join_url_hipchat: "veřejné HipChat chatovací místnosti"
# recruitment_description_ending: "the site remains free and everybody's happy. That's the plan." more_about_archmage: "Dozvědět se více o tom, jak se stát mocným Arcimágem"
# copyrights_title: "Copyrights and Licenses" archmage_subscribe_desc: "Dostávat emailem oznámení a informacemi nových programovacích příležitostech"
# contributor_title: "Contributor License Agreement" artisan_introduction_pref: "Musíme vytvářet další úrovně! Lidé nás prosí o další obsah, ale sami zvládáme vytvořit jen málo. Naším prvním pracovním zastavením je první úroveň. Editor úrovní je tak-tak použitelný i pro jeho vlastní tvůrce. Máte-li vizi pro vytvoření vnořených úrovní alá "
# contributor_description_prefix: "All contributions, both on the site and on our GitHub repository, are subject to our" artisan_introduction_suf: "pak neváhejte, toto je vaše destinace."
# cla_url: "CLA" artisan_attribute_1: "Předchozí zkušenosti s vytvářením podobného obsahu by byly vítány, například z editorů úrovní Blizzardu, ale nejsou vyžadovány!"
# contributor_description_suffix: "to which you should agree before contributing." artisan_attribute_2: "Připraveni ke spoustě testování a pokusů. K vytvoření dobré úrovně je potřeba je představit ostatním, nechat je hrát a pak je z velké části měnit a opravovat."
# code_title: "Code - MIT" artisan_attribute_3: "Pro teď, stejné jako Dobrodruh - tester úrovní. Náš editor úrovní je ve velmi raném stádiu a frustrující při používání. Varovali jsme vás!"
# code_description_prefix: "All code owned by CodeCombat or hosted on codecombat.com, both in the GitHub repository or in the codecombat.com database, is licensed under the" artisan_join_desc: "Použijte editor úrovní v těchto postupných krocích:"
# mit_license_url: "MIT license" artisan_join_step1: "Přečtěte si dokumentaci."
# code_description_suffix: "This includes all code in Systems and Components that are made available by CodeCombat for the purpose of creating levels." artisan_join_step2: "Vytvořte novou úroveň a prozkoumejte existující úrovně."
# art_title: "Art/Music - Creative Commons " artisan_join_step3: "Požádejte nás o pomoc ve veřejné HipChat místnosti."
# art_description_prefix: "All common content is available under the" artisan_join_step4: "Zveřejněte vaši úroveň na fóru pro připomínkování."
# cc_license_url: "Creative Commons Attribution 4.0 International License" more_about_artisan: "Dozvědět se více o tom, jak se stát kreativním Řemeslníkem"
# art_description_suffix: "Common content is anything made generally available by CodeCombat for the purpose of creating Levels. This includes:" artisan_subscribe_desc: "Dostávat emailem oznámení a informace o aktualizacích editoru úrovní."
# art_music: "Music" adventurer_introduction: "Ujasněme si dopředu jednu věc o vaší roli: budete jako tank. Projdete ohněm. Potřebujeme někoho, kdo odzkouší zbrusu nové úrovně a pomůže identifikovat kde je možno je zlepšit. Ten boj bude ohromný - tvorba her je dlouhý proces, který nikdo nezvládne na první pokus. Máte-li na to a vydržíte-li to, pak toto je vaše skupina."
# art_sound: "Sound" adventurer_attribute_1: "Touha po učení se. Vy se chcete naučit programovat a my vás to chceme naučit. Jenom, v tomto případě to budete vy, kdo bude vyučovat."
# art_artwork: "Artwork" adventurer_attribute_2: "Charismatický. Buďte mírný a pečlivě artikulujte co a jak je potřeba zlepšit."
# art_sprites: "Sprites" adventurer_join_pref: "Buďto se spojte (nebo si najděte!) Dobrodruha a pracujte s ním, nebo zaškrtněte políčko níže a dostávejte emaily o dostupnosti nových úrovní k testování. Budeme také posílat informace o nových úrovních k recenzím na sociálních webech, "
# art_other: "Any and all other non-code creative works that are made available when creating Levels." adventurer_forum_url: " našem fóru"
# art_access: "Currently there is no universal, easy system for fetching these assets. In general, fetch them from the URLs as used by the site, contact us for assistance, or help us in extending the site to make these assets more easily accessible." adventurer_join_suf: "takže pokud chcete být v obraze, připojte se k nám!"
# art_paragraph_1: "For attribution, please name and link to codecombat.com near where the source is used or where appropriate for the medium. For example:" more_about_adventurer: "Dozvědět se více o tom, jak se stát statečným Dobrodruhem"
# use_list_1: "If used in a movie or another game, include codecombat.com in the credits." adventurer_subscribe_desc: "Dostávat emailem oznámení a informace nových úrovních k testování."
# use_list_2: "If used on a website, include a link near the usage, for example underneath an image, or in a general attributions page where you might also mention other Creative Commons works and open source software being used on the site. Something that's already clearly referencing CodeCombat, such as a blog post mentioning CodeCombat, does not need some separate attribution." scribe_introduction_pref: "CodeCombat nebude pouze kupa úrovní. Bude také zahrnovat informační zdroje a wiki programovacích konceptů na které se úrovně mohou navázat. Takto, namísto toho aby každý Řemeslník musel sám do detailu popsatco který operátor dělá, mohou jednoduše nalinkovat svoji úroveň na článek existující k edukaci hráčů. Něco ve stylu "
# art_paragraph_2: "If the content being used is created not by CodeCombat but instead by a user of codecombat.com, attribute them instead, and follow attribution directions provided in that resource's description if there are any." scribe_introduction_url_mozilla: "Mozilla Developer Network"
# rights_title: "Rights Reserved" scribe_introduction_suf: ". Jestliže vás baví popisovat a předávat koncept programování v Markdown editoru, pak tato role může být právě pro vás."
# rights_desc: "All rights are reserved for Levels themselves. This includes" scribe_attribute_1: "Zkušenost s psaním je jediné co budete potřebovat. Nejen gramatika, ale také schopnost popsat složité koncepty a myšlenky ostatním."
# rights_scripts: "Scripts" contact_us_url: "Spojte se s námi"
# rights_unit: "Unit configuration" scribe_join_description: "dejte nám o vás vědět, o vašich zkušenostech s programováním a o čm byste rádi psali. Od toho začneme!"
# rights_description: "Description" more_about_scribe: "Dozvědět se více o tom, jak se stát pilným Pisálkem"
# rights_writings: "Writings" scribe_subscribe_desc: "Dostávat emailem oznámení a informace o článcích."
# rights_media: "Media (sounds, music) and any other creative content made specifically for that Level and not made generally available when creating Levels." diplomat_introduction_pref: "Jedna z věcí, kterou jsme zjistili během "
# rights_clarification: "To clarify, anything that is made available in the Level Editor for the purpose of making levels is under CC, whereas the content created with the Level Editor or uploaded in the course of creation of Levels is not." diplomat_launch_url: "zahájení v Říjnu"
# nutshell_title: "In a Nutshell" diplomat_introduction_suf: "bylo, že o CodeCombat je velký zájem i v jiných zemích, obzvláště v Brazílii! Chystáme regiment překladatelů ke zpřístupnění CodeCombatu světu. Pokud chcete nakouknout pod pokličku, dozvědět se o připravovaných novinkách a zpřístupnit úrovně vašim národním kolegům, toto je role pro vás."
# nutshell_description: "Any resources we provide in the Level Editor are free to use as you like for creating Levels. But we reserve the right to restrict distribution of the Levels themselves (that are created on codecombat.com) so that they may be charged for in the future, if that's what ends up happening." diplomat_attribute_1: "Plynulost v angličtině a v jazyce do kterého budete překládat. Při předávání komplexních myšlenek je důležité si být jistí v kramflecích v obou jazycích!"
# canonical: "The English version of this document is the definitive, canonical version. If there are any discrepencies between translations, the English document takes precedence." diplomat_join_pref: "Úvodní překladatelský počin začal v tomto "
diplomat_doc_url: "příspěvku na fóru"
diplomat_join_suf: ", tak si jej přečtěte a případně doplňte informace o vašem překladu. Přihlaste se také k odběru informací o vývoji v internacionalizaci!"
more_about_diplomat: "Dozvědět se více o tom, jak se stát Diplomatem"
diplomat_subscribe_desc: "Dostávat emailem oznámení a informace o internacionalizaci a o úrovních k překladu."
ambassador_introduction: "Zde se tvoří komunita a vy jste její spojení. Využíváme chat, emaily a sociální sítě se spoustou lidí k informování a diskuzím a seznámení s naší hrou. Chcete-li pomoci lidem se přidat a pobavit se a získat dobrý náhled na CodeCombat a kam směřujeme, pak toto je vaše role."
ambassador_attribute_1: "Komunikační schopnosti. Schopnost identifikovat problémy hráčů a pomoci jim je řešit. Naslouchat co hráči říkají, co mají rádi a co rádi nemají a komunikovat to zpět ostatním!"
ambassador_join_desc: "dejte nám o sobě vědět, o tom co děláte a co byste rádi dělali. Od toho začneme!"
ambassador_join_note_strong: "Poznámka"
ambassador_join_note_desc: "Jedna z našich priorit je vytvoření vícehráčové hry, kde hráč, který má problém s řešením úrovní může oslovit a požádat o pomoc zkušenější kouzelníky. To je přesně ten případ a místo pro pomoc Velvyslance . Dáme vám vědět více!"
more_about_ambassador: "Dozvědět se více o tom, jak se stát nápomocným Velvyslancem"
ambassador_subscribe_desc: "Dostávat emailem oznámení a informace o vývoji v podpoře a vícehráčové hře."
counselor_introduction_1: "Máte životní zkušenosti? Máte odlišný náhled na věci a jste schopni nám tímto pomoci v dalším vývoji CodeCombatu? Jedna z důležitých rolí i když asi nejméně časově náročná, nicméně každá individualita je schopná udělat velký rozdíl. Hledáme zkušené odborníky, zvláště pak v oblastech vzdělávání, vývoji her managementu open source, source project management, náboru lidských zdrojů, podnikání nebo designu."
counselor_introduction_2: "Nebo cokoliv, co je relevantní ve vývoji CodeCombatu. Máte-li znalosti a jste-li ochotni se o ně podělit pro další růst tohoto projektu , pak toto je role pro vás."
counselor_attribute_1: "Zkušenosti ve výše zmíněných oblastech, nebo něco, čím byste mohli být nápomocni."
counselor_attribute_2: "Troška volného času!"
counselor_join_desc: "dejte nám o sobě vědět, o tom co děláte a co byste rádi dělali. Přidáme si vás do seznamu a budeme vás kontaktovat v případě, že to bude potřeba (ne moc často)."
more_about_counselor: "Dozvědět se více o tom, jak se stát Poradcem"
changes_auto_save: "Změny jsou automaticky uloženy při kliknutí na zaškrtávací políčka."
diligent_scribes: "Naši pilní Písaři:"
powerful_archmages: "Naši mocní Arcimágové:"
creative_artisans: "Naši kreativní Řemeslníci:"
brave_adventurers: "Naši stateční Dobrodruzi:"
translating_diplomats: "Naši překladatelští Diplomati:"
helpful_ambassadors: "Naši nápomocní Velvyslanci:"
# contribute: classes:
# page_title: "Contributing" archmage_title: "Arcikouzelník"
# character_classes_title: "Character Classes" archmage_title_description: "(Programátor)"
# introduction_desc_intro: "We have high hopes for CodeCombat." artisan_title: "Řemeslník"
# introduction_desc_pref: "We want to be where programmers of all stripes come to learn and play together, introduce others to the wonderful world of coding, and reflect the best parts of the community. We can't and don't want to do that alone; what makes projects like GitHub, Stack Overflow and Linux great are the people who use them and build on them. To that end, " artisan_title_description: "(Tvůrce úrovní)"
# introduction_desc_github_url: "CodeCombat is totally open source" adventurer_title: "Dobrodruh"
# introduction_desc_suf: ", and we aim to provide as many ways as possible for you to take part and make this project as much yours as ours." adventurer_title_description: "(Tester úrovní)"
# introduction_desc_ending: "We hope you'll join our party!" scribe_title: "Pisálek"
# introduction_desc_signature: "- Nick, George, Scott, Michael, and Jeremy" scribe_title_description: "(Editor článků)"
# alert_account_message_intro: "Hey there!" diplomat_title: "Diplomat"
# alert_account_message_pref: "To subscribe for class emails, you'll need to " diplomat_title_description: "(Překladatel)"
# alert_account_message_suf: "first." ambassador_title: "Velvyslanec"
# alert_account_message_create_url: "create an account" ambassador_title_description: "(Podpora)"
# archmage_introduction: "One of the best parts about building games is they synthesize so many different things. Graphics, sound, real-time networking, social networking, and of course many of the more common aspects of programming, from low-level database management, and server administration to user facing design and interface building. There's a lot to do, and if you're an experienced programmer with a hankering to really dive into the nitty-gritty of CodeCombat, this class might be for you. We would love to have your help building the best programming game ever." counselor_title: "Poradce"
# class_attributes: "Class Attributes" counselor_title_description: "(Odborník)"
# archmage_attribute_1_pref: "Knowledge in "
# archmage_attribute_1_suf: ", or a desire to learn. Most of our code is in this language. If you're a fan of Ruby or Python, you'll feel right at home. It's JavaScript, but with a nicer syntax."
# archmage_attribute_2: "Some experience in programming and personal initiative. We'll help you get oriented, but we can't spend much time training you."
# how_to_join: "How To Join"
# join_desc_1: "Anyone can help out! Just check out our "
# join_desc_2: "to get started, and check the box below to mark yourself as a brave Archmage and get the latest news by email. Want to chat about what to do or how to get more deeply involved? "
# join_desc_3: ", or find us in our "
# join_desc_4: "and we'll go from there!"
# join_url_email: "Email us"
# join_url_hipchat: "public HipChat room"
# more_about_archmage: "Learn More About Becoming A Powerful Archmage"
# archmage_subscribe_desc: "Get emails on new coding opportunities and announcements."
# artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to"
# artisan_introduction_suf: "to then this class might be for you."
# artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!"
# artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix."
# artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!"
# artisan_join_desc: "Use the Level Editor in these steps, give or take:"
# artisan_join_step1: "Read the documentation."
# artisan_join_step2: "Create a new level and explore existing levels."
# artisan_join_step3: "Find us in our public HipChat room for help."
# artisan_join_step4: "Post your levels on the forum for feedback."
# more_about_artisan: "Learn More About Becoming A Creative Artisan"
# artisan_subscribe_desc: "Get emails on level editor updates and announcements."
# adventurer_introduction: "Let's be clear about your role: you are the tank. You're going to take heavy damage. We need people to try out brand-new levels and help identify how to make things better. The pain will be enormous; making good games is a long process and no one gets it right the first time. If you can endure and have a high constitution score, then this class might be for you."
# adventurer_attribute_1: "A thirst for learning. You want to learn how to code and we want to teach you how to code. You'll probably be doing most of the teaching in this case, though."
# adventurer_attribute_2: "Charismatic. Be gentle but articulate about what needs improving, and offer suggestions on how to improve."
# adventurer_join_pref: "Either get together with (or recruit!) an Artisan and work with them, or check the box below to receive emails when there are new levels to test. We'll also be posting about levels to review on our networks like"
# adventurer_forum_url: "our forum"
# adventurer_join_suf: "so if you prefer to be notified those ways, sign up there!"
# more_about_adventurer: "Learn More About Becoming A Brave Adventurer"
# adventurer_subscribe_desc: "Get emails when there are new levels to test."
# scribe_introduction_pref: "CodeCombat isn't just going to be a bunch of levels. It will also include a resource for knowledge, a wiki of programming concepts that levels can hook into. That way rather than each Artisan having to describe in detail what a comparison operator is, they can simply link their level to the Article describing them that is already written for the player's edification. Something along the lines of what the "
# scribe_introduction_url_mozilla: "Mozilla Developer Network"
# scribe_introduction_suf: " has built. If your idea of fun is articulating the concepts of programming in Markdown form, then this class might be for you."
# scribe_attribute_1: "Skill in words is pretty much all you need. Not only grammar and spelling, but able to convey complicated ideas to others."
# contact_us_url: "Contact us"
# scribe_join_description: "tell us a little about yourself, your experience with programming and what sort of things you'd like to write about. We'll go from there!"
# more_about_scribe: "Learn More About Becoming A Diligent Scribe"
# scribe_subscribe_desc: "Get emails about article writing announcements."
# diplomat_introduction_pref: "So, if there's one thing we learned from the "
# diplomat_launch_url: "launch in October"
# diplomat_introduction_suf: "it's that there is sizeable interest in CodeCombat in other countries, particularly Brazil! We're building a corps of translators eager to turn one set of words into another set of words to get CodeCombat as accessible across the world as possible. If you like getting sneak peeks at upcoming content and getting these levels to your fellow nationals ASAP, then this class might be for you."
# diplomat_attribute_1: "Fluency in English and the language you would like to translate to. When conveying complicated ideas, it's important to have a strong grasp in both!"
# diplomat_join_pref: "We've started a lot of initial translations at "
# diplomat_doc_url: "this forum post"
# diplomat_join_suf: "so check it out and add things for your language. Also, check this box below to keep up-to-date on new internationalization developments!"
# more_about_diplomat: "Learn More About Becoming A Great Diplomat"
# diplomat_subscribe_desc: "Get emails about i18n developments and levels to translate."
# ambassador_introduction: "This is a community we're building, and you are the connections. We've got Olark chats, emails, and social networks with lots of people to talk with and help get acquainted with the game and learn from. If you want to help people get involved and have fun, and get a good feel of the pulse of CodeCombat and where we're going, then this class might be for you."
# ambassador_attribute_1: "Communication skills. Be able to identify the problems players are having and help them solve them. Also, keep the rest of us informed about what players are saying, what they like and don't like and want more of!"
# ambassador_join_desc: "tell us a little about yourself, what you've done and what you'd be interested in doing. We'll go from there!"
# ambassador_join_note_strong: "Note"
# ambassador_join_note_desc: "One of our top priorities is to build multiplayer where players having difficulty solving levels can summon higher level wizards to help them. This will be a great way for ambassadors to do their thing. We'll keep you posted!"
# more_about_ambassador: "Learn More About Becoming A Helpful Ambassador"
# ambassador_subscribe_desc: "Get emails on support updates and multiplayer developments."
# counselor_introduction_1: "Do you have life experience? A different perspective on things that can help us decide how to shape CodeCombat? Of all these roles, this will probably take the least time, but individually you may make the most difference. We're on the lookout for wisened sages, particularly in areas like: teaching, game development, open source project management, technical recruiting, entrepreneurship, or design."
# counselor_introduction_2: "Or really anything that is relevant to the development of CodeCombat. If you have knowledge and want to share it to help grow this project, then this class might be for you."
# counselor_attribute_1: "Experience, in any of the areas above or something you think might be helpful."
# counselor_attribute_2: "A little bit of free time!"
# counselor_join_desc: "tell us a little about yourself, what you've done and what you'd be interested in doing. We'll put you in our contact list and be in touch when we could use advice (not too often)."
# more_about_counselor: "Learn More About Becoming A Valuable Counselor"
# changes_auto_save: "Changes are saved automatically when you toggle checkboxes."
# diligent_scribes: "Our Diligent Scribes:"
# powerful_archmages: "Our Powerful Archmages:"
# creative_artisans: "Our Creative Artisans:"
# brave_adventurers: "Our Brave Adventurers:"
# translating_diplomats: "Our Translating Diplomats:"
# helpful_ambassadors: "Our Helpful Ambassadors:"
# classes:
# archmage_title: "Archmage"
# archmage_title_description: "(Coder)"
# artisan_title: "Artisan"
# artisan_title_description: "(Level Builder)"
# adventurer_title: "Adventurer"
# adventurer_title_description: "(Level Playtester)"
# scribe_title: "Scribe"
# scribe_title_description: "(Article Editor)"
# diplomat_title: "Diplomat"
# diplomat_title_description: "(Translator)"
# ambassador_title: "Ambassador"
# ambassador_title_description: "(Support)"
# counselor_title: "Counselor"
# counselor_title_description: "(Expert/Teacher)"

View file

@ -4,13 +4,13 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
saving: "Gemmer..." saving: "Gemmer..."
sending: "Sender..." sending: "Sender..."
cancel: "Annuller" cancel: "Annuller"
# save: "Save" save: "Gem"
# delay_1_sec: "1 second" delay_1_sec: "1 sekund"
# delay_3_sec: "3 seconds" delay_3_sec: "3 sekunder"
# delay_5_sec: "5 seconds" delay_5_sec: "5 sekunder"
# manual: "Manual" manual: "Manual"
# fork: "Fork" fork: "Forgren"
# play: "Spil" play: "Spil"
modal: modal:
close: "Luk" close: "Luk"
@ -31,28 +31,28 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
about: "Om" about: "Om"
contact: "Kontakt" contact: "Kontakt"
twitter_follow: "Følg" twitter_follow: "Følg"
# employers: "Employers" employers: "Arbejdsgivere"
# versions: versions:
# save_version_title: "Save New Version" save_version_title: "Gem ny version"
# new_major_version: "New Major Version" new_major_version: "Ny hoved Version"
# cla_prefix: "To save changes, first you must agree to our" cla_prefix: "For at gemme dine ændringer, må du acceptere brugerbetingelserne"
# cla_url: "CLA" cla_url: "CLA"
# cla_suffix: "." cla_suffix: "."
# cla_agree: "I AGREE" cla_agree: "Jeg er enig"
login: login:
sign_up: "opret ny konto" sign_up: "opret ny konto"
log_in: "Log Ind" log_in: "Log Ind"
# log_out: "Log Out" log_out: "Log Ud"
recover: "genskab konto" recover: "genskab konto"
recover: recover:
recover_account_title: "genskab konto" recover_account_title: "genskab konto"
# send_password: "Send Recovery Password" send_password: "Send kodeord"
signup: signup:
# create_account_title: "Create Account to Save Progress" create_account_title: "Opret en konto for at gemme dit fremskridt"
description: "Det er gratis. Du skal bare indtaste et par ting, så er du klar til at komme igang:" description: "Det er gratis. Du skal bare indtaste et par ting, så er du klar til at komme igang:"
email_announcements: "Modtag nyheder på email" email_announcements: "Modtag nyheder på email"
coppa: "13+ eller ikke-USA" coppa: "13+ eller ikke-USA"
@ -91,7 +91,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
forum_prefix: "For noget offentligt, prøv venligst " forum_prefix: "For noget offentligt, prøv venligst "
forum_page: "vores forum" forum_page: "vores forum"
forum_suffix: " istedet." forum_suffix: " istedet."
# send: "Send Feedback" send: "Send Feedback"
diplomat_suggestion: diplomat_suggestion:
title: "Hjælp med at oversætte CodeCombat!" title: "Hjælp med at oversætte CodeCombat!"
@ -101,9 +101,9 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
learn_more: "Lær mere om at være Diplomat" learn_more: "Lær mere om at være Diplomat"
subscribe_as_diplomat: "Meld dig som Diplomat" subscribe_as_diplomat: "Meld dig som Diplomat"
# wizard_settings: wizard_settings:
# title: "Wizard Settings" title: "Troldmandsinstillinger"
# customize_avatar: "Customize Your Avatar" customize_avatar: "Tilpas din avatar"
account_settings: account_settings:
title: "Kontoindstillinger" title: "Kontoindstillinger"
@ -122,7 +122,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
new_password_verify: "Bekræft" new_password_verify: "Bekræft"
email_subscriptions: "Emailtilmeldinger" email_subscriptions: "Emailtilmeldinger"
email_announcements: "Nyheder" email_announcements: "Nyheder"
# email_notifications_description: "Get periodic notifications for your account." email_notifications_description: "Få periodevise meldinger om din konto."
email_announcements_description: "Få emails om de seneste nyheder og udvikling på CodeCombat." email_announcements_description: "Få emails om de seneste nyheder og udvikling på CodeCombat."
contributor_emails: "Bidragsklasse-emails" contributor_emails: "Bidragsklasse-emails"
contribute_prefix: "Vi leder efter folk til at joine vores gruppe! Tjek " contribute_prefix: "Vi leder efter folk til at joine vores gruppe! Tjek "
@ -135,75 +135,75 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
account_profile: account_profile:
edit_settings: "Redigér Indstillinger" edit_settings: "Redigér Indstillinger"
# profile_for_prefix: "Profile for " profile_for_prefix: "Profil for "
# profile_for_suffix: "" profile_for_suffix: ""
profile: "Profil" profile: "Profil"
user_not_found: "Ingen bruger fundet. Tjek URL'en?" user_not_found: "Ingen bruger fundet. Tjek URL'en?"
# gravatar_not_found_mine: "We couldn't find your profile associated with:" gravatar_not_found_mine: "Vi kunne ikke finde din profil associeret med:"
# gravatar_not_found_email_suffix: "." gravatar_not_found_email_suffix: "."
# gravatar_signup_prefix: "Sign up at " gravatar_signup_prefix: "Opret dig hos "
# gravatar_signup_suffix: " to get set up!" gravatar_signup_suffix: " for at påbegynde"
# gravatar_not_found_other: "Alas, there's no profile associated with this person's email address." gravatar_not_found_other: "Hov, der er ingen profil associeret med denne persons e-mail konto"
gravatar_contact: "Kontakt" gravatar_contact: "Kontakt"
# gravatar_websites: "Websites" gravatar_websites: "Gravatar hjemmesider"
# gravatar_accounts: "As Seen On" gravatar_accounts: "Som set på"
# gravatar_profile_link: "Full Gravatar Profile" gravatar_profile_link: "Fuld Gravatar Profil"
# play_level: play_level:
level_load_error: "Niveauer kunne ikke indlæses." level_load_error: "Banen kunne ikke indlæses."
done: "Færdig" done: "Færdig"
# grid: "Grid" grid: "Gitter"
# customize_wizard: "Customize Wizard" customize_wizard: "Tilpas troldmand"
# home: "Home" home: "Hjem"
# guide: "Guide" guide: "Guide"
# multiplayer: "Multiplayer" multiplayer: "Flere spillere"
# restart: "Restart" restart: "Start forfra"
# goals: "Goals" goals: "Mål"
# action_timeline: "Action Timeline" action_timeline: "Handlingstidslinje"
# click_to_select: "Click on a unit to select it." click_to_select: "Klik på en enhed for at vælge"
# reload_title: "Reload All Code?" reload_title: "Genindlæs alt kode?"
# reload_really: "Are you sure you want to reload this level back to the beginning?" reload_really: "Er du sikker på at du ønsker at genindlæse denne bane helt fra begyndelsen?"
# reload_confirm: "Reload All" reload_confirm: "Genindlæs alt"
# victory_title_prefix: "" # victory_title_prefix: ""
# victory_title_suffix: " Complete" victory_title_suffix: " Færdig"
# victory_sign_up: "Sign Up to Save Progress" victory_sign_up: "Opret dig for at gemme dit fremskridt"
# victory_sign_up_poke: "Want to save your code? Create a free account!" victory_sign_up_poke: "Ønsker du at gemme din kode? Opret en gratis konto!"
# victory_rate_the_level: "Rate the level: " victory_rate_the_level: "Bedøm denne bane: "
# victory_play_next_level: "Play Next Level" victory_play_next_level: "Spil næste bane"
# victory_go_home: "Go Home" victory_go_home: "Gå hjem"
# victory_review: "Tell us more!" victory_review: "Fortæl os mere!"
# victory_hour_of_code_done: "Are You Done?" victory_hour_of_code_done: "Er du færdig?"
# victory_hour_of_code_done_yes: "Yes, I'm finished with my Hour of Code!" victory_hour_of_code_done_yes: "Ja, jeg er færdig med min Kodetime!"
# multiplayer_title: "Multiplayer Settings" multiplayer_title: "Flerspillerinstillinger"
# multiplayer_link_description: "Give this link to anyone to have them join you." multiplayer_link_description: "Del dette link med andre deltagere."
# multiplayer_hint_label: "Hint:" multiplayer_hint_label: "Tip:"
# multiplayer_hint: " Click the link to select all, then press ⌘-C or Ctrl-C to copy the link." multiplayer_hint: " Klik på linket for markere alt; tryk derefter ⌘-C eller Ctrl-C tfr at kopiere linket."
# multiplayer_coming_soon: "More multiplayer features to come!" multiplayer_coming_soon: "Yderligere flerspillermuligheder er på vej!"
# guide_title: "Guide" guide_title: "Instruktioner"
# tome_minion_spells: "Your Minions' Spells" # tome_minion_spells: "Your Minions' Spells"
# tome_read_only_spells: "Read-Only Spells" # tome_read_only_spells: "Read-Only Spells"
# tome_other_units: "Other Units" tome_other_units: "Andre enheder"
# tome_cast_button_castable: "Cast" # tome_cast_button_castable: "Cast"
# tome_cast_button_casting: "Casting" # tome_cast_button_casting: "Casting"
# tome_cast_button_cast: "Spell Cast" # tome_cast_button_cast: "Spell Cast"
# tome_autocast_delay: "Autocast Delay" # tome_autocast_delay: "Autocast Delay"
# tome_select_spell: "Select a Spell" tome_select_spell: "Vælg en trylleformular"
# tome_select_a_thang: "Select Someone for " tome_select_a_thang: "Vælg nogen til at "
# tome_available_spells: "Available Spells" tome_available_spells: "Tilgængelige trylleformularer"
# hud_continue: "Continue (press shift-space)" hud_continue: "Fortsæt (tryk skift-mellemrum)"
# spell_saved: "Spell Saved" spell_saved: "Trylleformularen er gemt"
# admin: admin:
# av_title: "Admin Views" # av_title: "Admin Views"
# av_entities_sub_title: "Entities" # av_entities_sub_title: "Entities"
# av_entities_users_url: "Users" av_entities_users_url: "Brugere"
# av_entities_active_instances_url: "Active Instances" # av_entities_active_instances_url: "Active Instances"
# av_other_sub_title: "Other" av_other_sub_title: "Andre"
# av_other_debug_base_url: "Base (for debugging base.jade)" # av_other_debug_base_url: "Base (for debugging base.jade)"
# u_title: "User List" u_title: "Brugerliste"
# lg_title: "Latest Games" lg_title: "Seneste spil"
# editor: editor:
# main_title: "CodeCombat Editors" # main_title: "CodeCombat Editors"
# main_description: "Build your own levels, campaigns, units and educational content. We provide all the tools you need!" # main_description: "Build your own levels, campaigns, units and educational content. We provide all the tools you need!"
# article_title: "Article Editor" # article_title: "Article Editor"
@ -213,52 +213,52 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# level_title: "Level Editor" # level_title: "Level Editor"
# level_description: "Includes the tools for scripting, uploading audio, and constructing custom logic to create all sorts of levels. Everything we use ourselves!" # level_description: "Includes the tools for scripting, uploading audio, and constructing custom logic to create all sorts of levels. Everything we use ourselves!"
# security_notice: "Many major features in these editors are not currently enabled by default. As we improve the security of these systems, they will be made generally available. If you'd like to use these features sooner, " # security_notice: "Many major features in these editors are not currently enabled by default. As we improve the security of these systems, they will be made generally available. If you'd like to use these features sooner, "
# contact_us: "contact us!" contact_us: "kontact os!"
# hipchat_prefix: "You can also find us in our" hipchat_prefix: "Du kan også finde os på vores"
# hipchat_url: "HipChat room." hipchat_url: "HipChat kanal."
# level_some_options: "Some Options?" # level_some_options: "Some Options?"
# level_tab_thangs: "Thangs" # level_tab_thangs: "Thangs"
# level_tab_scripts: "Scripts" # level_tab_scripts: "Scripts"
# level_tab_settings: "Settings" level_tab_settings: "Instillinger"
# level_tab_components: "Components" level_tab_components: "Komponenter"
# level_tab_systems: "Systems" level_tab_systems: "Systemer"
# level_tab_thangs_title: "Current Thangs" # level_tab_thangs_title: "Current Thangs"
# level_tab_thangs_conditions: "Starting Conditions" # level_tab_thangs_conditions: "Starting Conditions"
# level_tab_thangs_add: "Add Thangs" # level_tab_thangs_add: "Add Thangs"
# level_settings_title: "Settings" level_settings_title: "Instillinger"
# level_component_tab_title: "Current Components" level_component_tab_title: "Nuværende komponenter"
# level_component_btn_new: "Create New Component" level_component_btn_new: "Opret ny komponent"
# level_systems_tab_title: "Current Systems" level_systems_tab_title: "Nuværende systemer"
# level_systems_btn_new: "Create New System" level_systems_btn_new: "Opret nyt system"
# level_systems_btn_add: "Add System" level_systems_btn_add: "Tilføj system"
# level_components_title: "Back to All Thangs" # level_components_title: "Back to All Thangs"
# level_components_type: "Type" # level_components_type: "Type"
# level_component_edit_title: "Edit Component" level_component_edit_title: "Redigér komponent"
# level_system_edit_title: "Edit System" level_system_edit_title: "Redigér system"
# create_system_title: "Create New System" create_system_title: "Opret nyt system"
# new_component_title: "Create New Component" new_component_title: "Opret ny komponent"
# new_component_field_system: "System" new_component_field_system: "System"
# article: article:
# edit_btn_preview: "Preview" edit_btn_preview: "Forhåndsvisning"
# edit_article_title: "Edit Article" edit_article_title: "Ændr artikkel"
# general: general:
# and: "and" and: "og"
# name: "Name" name: "navn"
# body: "Body" body: "krop"
# version: "Version" version: "version"
# commit_msg: "Commit Message" commit_msg: "ændringsnotat"
# version_history_for: "Version History for: " version_history_for: "versionhistorie for: "
# results: "Results" results: "resultater"
# description: "Description" description: "beskrivelse"
email: "Email" email: "e-mail"
message: "Besked" message: "Besked"
or: "eller" or: "eller"
# about: about:
# who_is_codecombat: "Who is CodeCombat?" who_is_codecombat: "Hvem er CodeCombat?"
# why_codecombat: "Why CodeCombat?" why_codecombat: "Hvorfor CodeCombat?"
# who_description_prefix: "together started CodeCombat in 2013. We also created " # who_description_prefix: "together started CodeCombat in 2013. We also created "
# who_description_suffix: "in 2008, growing it to the #1 web and iOS application for learning to write Chinese and Japanese characters." # who_description_suffix: "in 2008, growing it to the #1 web and iOS application for learning to write Chinese and Japanese characters."
# who_description_ending: "Now it's time to teach people to write code." # who_description_ending: "Now it's time to teach people to write code."
@ -270,7 +270,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# why_paragraph_3_italic_caps: "NO MOM I HAVE TO FINISH THE LEVEL!" # why_paragraph_3_italic_caps: "NO MOM I HAVE TO FINISH THE LEVEL!"
# why_paragraph_3_suffix: "That's why CodeCombat is a multiplayer game, not a gamified lesson course. We won't stop until you can't stop--but this time, that's a good thing." # why_paragraph_3_suffix: "That's why CodeCombat is a multiplayer game, not a gamified lesson course. We won't stop until you can't stop--but this time, that's a good thing."
# why_paragraph_4: "If you're going to get addicted to some game, get addicted to this one and become one of the wizards of the tech age." # why_paragraph_4: "If you're going to get addicted to some game, get addicted to this one and become one of the wizards of the tech age."
# why_ending: "And hey, it's free. " why_ending: "Og det er ovenikøbet gratis."
# why_ending_url: "Start wizarding now!" # why_ending_url: "Start wizarding now!"
# george_description: "CEO, business guy, web designer, game designer, and champion of beginning programmers everywhere." # george_description: "CEO, business guy, web designer, game designer, and champion of beginning programmers everywhere."
# scott_description: "Programmer extraordinaire, software architect, kitchen wizard, and master of finances. Scott is the reasonable one." # scott_description: "Programmer extraordinaire, software architect, kitchen wizard, and master of finances. Scott is the reasonable one."
@ -282,7 +282,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# page_title: "Legal" # page_title: "Legal"
# opensource_intro: "CodeCombat is free to play and completely open source." # opensource_intro: "CodeCombat is free to play and completely open source."
# opensource_description_prefix: "Check out " # opensource_description_prefix: "Check out "
# github_url: "our GitHub" github_url: "vores GitHub"
# opensource_description_center: "and help out if you like! CodeCombat is built on dozens of open source projects, and we love them. See " # opensource_description_center: "and help out if you like! CodeCombat is built on dozens of open source projects, and we love them. See "
# archmage_wiki_url: "our Archmage wiki" # archmage_wiki_url: "our Archmage wiki"
# opensource_description_suffix: "for a list of the software that makes this game possible." # opensource_description_suffix: "for a list of the software that makes this game possible."
@ -290,11 +290,11 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# practices_description: "These are our promises to you, the player, in slightly less legalese." # practices_description: "These are our promises to you, the player, in slightly less legalese."
# privacy_title: "Privacy" # privacy_title: "Privacy"
# privacy_description: "We will not sell any of your personal information. We intend to make money through recruitment eventually, but rest assured we will not distribute your personal information to interested companies without your explicit consent." # privacy_description: "We will not sell any of your personal information. We intend to make money through recruitment eventually, but rest assured we will not distribute your personal information to interested companies without your explicit consent."
# security_title: "Security" security_title: "Sikkerhed"
# security_description: "We strive to keep your personal information safe. As an open source project, our site is freely open to anyone to review and improve our security systems." # security_description: "We strive to keep your personal information safe. As an open source project, our site is freely open to anyone to review and improve our security systems."
# email_title: "Email" email_title: "E-mail"
# email_description_prefix: "We will not inundate you with spam. Through" # email_description_prefix: "We will not inundate you with spam. Through"
# email_settings_url: "your email settings" email_settings_url: "dine e-mail instillinger"
# email_description_suffix: "or through links in the emails we send, you can change your preferences and easily unsubscribe at any time." # email_description_suffix: "or through links in the emails we send, you can change your preferences and easily unsubscribe at any time."
# cost_title: "Cost" # cost_title: "Cost"
# cost_description: "Currently, CodeCombat is 100% free! One of our main goals is to keep it that way, so that as many people can play as possible, regardless of place in life. If the sky darkens, we might have to charge subscriptions or for some content, but we'd rather not. With any luck, we'll be able to sustain the company with:" # cost_description: "Currently, CodeCombat is 100% free! One of our main goals is to keep it that way, so that as many people can play as possible, regardless of place in life. If the sky darkens, we might have to charge subscriptions or for some content, but we'd rather not. With any luck, we'll be able to sustain the company with:"
@ -317,8 +317,8 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# art_description_prefix: "All common content is available under the" # art_description_prefix: "All common content is available under the"
# cc_license_url: "Creative Commons Attribution 4.0 International License" # cc_license_url: "Creative Commons Attribution 4.0 International License"
# art_description_suffix: "Common content is anything made generally available by CodeCombat for the purpose of creating Levels. This includes:" # art_description_suffix: "Common content is anything made generally available by CodeCombat for the purpose of creating Levels. This includes:"
# art_music: "Music" art_music: "Musik"
# art_sound: "Sound" art_sound: "Lyd"
# art_artwork: "Artwork" # art_artwork: "Artwork"
# art_sprites: "Sprites" # art_sprites: "Sprites"
# art_other: "Any and all other non-code creative works that are made available when creating Levels." # art_other: "Any and all other non-code creative works that are made available when creating Levels."
@ -335,20 +335,20 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# rights_writings: "Writings" # rights_writings: "Writings"
# rights_media: "Media (sounds, music) and any other creative content made specifically for that Level and not made generally available when creating Levels." # rights_media: "Media (sounds, music) and any other creative content made specifically for that Level and not made generally available when creating Levels."
# rights_clarification: "To clarify, anything that is made available in the Level Editor for the purpose of making levels is under CC, whereas the content created with the Level Editor or uploaded in the course of creation of Levels is not." # rights_clarification: "To clarify, anything that is made available in the Level Editor for the purpose of making levels is under CC, whereas the content created with the Level Editor or uploaded in the course of creation of Levels is not."
# nutshell_title: "In a Nutshell" nutshell_title: "I en nødeskal"
# nutshell_description: "Any resources we provide in the Level Editor are free to use as you like for creating Levels. But we reserve the right to restrict distribution of the Levels themselves (that are created on codecombat.com) so that they may be charged for in the future, if that's what ends up happening." # nutshell_description: "Any resources we provide in the Level Editor are free to use as you like for creating Levels. But we reserve the right to restrict distribution of the Levels themselves (that are created on codecombat.com) so that they may be charged for in the future, if that's what ends up happening."
# canonical: "The English version of this document is the definitive, canonical version. If there are any discrepencies between translations, the English document takes precedence." # canonical: "The English version of this document is the definitive, canonical version. If there are any discrepencies between translations, the English document takes precedence."
# contribute: contribute:
# page_title: "Contributing" # page_title: "Contributing"
# character_classes_title: "Character Classes" # character_classes_title: "Character Classes"
# introduction_desc_intro: "We have high hopes for CodeCombat." # introduction_desc_intro: "We have high hopes for CodeCombat."
# introduction_desc_pref: "We want to be where programmers of all stripes come to learn and play together, introduce others to the wonderful world of coding, and reflect the best parts of the community. We can't and don't want to do that alone; what makes projects like GitHub, Stack Overflow and Linux great are the people who use them and build on them. To that end, " # introduction_desc_pref: "We want to be where programmers of all stripes come to learn and play together, introduce others to the wonderful world of coding, and reflect the best parts of the community. We can't and don't want to do that alone; what makes projects like GitHub, Stack Overflow and Linux great are the people who use them and build on them. To that end, "
# introduction_desc_github_url: "CodeCombat is totally open source" # introduction_desc_github_url: "CodeCombat is totally open source"
# introduction_desc_suf: ", and we aim to provide as many ways as possible for you to take part and make this project as much yours as ours." # introduction_desc_suf: ", and we aim to provide as many ways as possible for you to take part and make this project as much yours as ours."
# introduction_desc_ending: "We hope you'll join our party!" introduction_desc_ending: "Vi håber du vil deltage i vores fest!"
# introduction_desc_signature: "- Nick, George, Scott, Michael, and Jeremy" introduction_desc_signature: "- Nick, George, Scott, Michael, ogJeremy"
# alert_account_message_intro: "Hey there!" alert_account_message_intro: "Hej med dig!"
# alert_account_message_pref: "To subscribe for class emails, you'll need to " # alert_account_message_pref: "To subscribe for class emails, you'll need to "
# alert_account_message_suf: "first." # alert_account_message_suf: "first."
# alert_account_message_create_url: "create an account" # alert_account_message_create_url: "create an account"
@ -362,7 +362,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# join_desc_2: "to get started, and check the box below to mark yourself as a brave Archmage and get the latest news by email. Want to chat about what to do or how to get more deeply involved? " # join_desc_2: "to get started, and check the box below to mark yourself as a brave Archmage and get the latest news by email. Want to chat about what to do or how to get more deeply involved? "
# join_desc_3: ", or find us in our " # join_desc_3: ", or find us in our "
# join_desc_4: "and we'll go from there!" # join_desc_4: "and we'll go from there!"
# join_url_email: "Email us" join_url_email: "Skriv til os"
# join_url_hipchat: "public HipChat room" # join_url_hipchat: "public HipChat room"
# more_about_archmage: "Learn More About Becoming A Powerful Archmage" # more_about_archmage: "Learn More About Becoming A Powerful Archmage"
# archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements."
@ -372,8 +372,8 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix."
# artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!"
# artisan_join_desc: "Use the Level Editor in these steps, give or take:" # artisan_join_desc: "Use the Level Editor in these steps, give or take:"
# artisan_join_step1: "Read the documentation." artisan_join_step1: "Læs dokumentationen."
# artisan_join_step2: "Create a new level and explore existing levels." artisan_join_step2: "Lav en ny bane og udforsk eksisterende baner."
# artisan_join_step3: "Find us in our public HipChat room for help." # artisan_join_step3: "Find us in our public HipChat room for help."
# artisan_join_step4: "Post your levels on the forum for feedback." # artisan_join_step4: "Post your levels on the forum for feedback."
# more_about_artisan: "Learn More About Becoming A Creative Artisan" # more_about_artisan: "Learn More About Becoming A Creative Artisan"
@ -424,18 +424,18 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# translating_diplomats: "Our Translating Diplomats:" # translating_diplomats: "Our Translating Diplomats:"
# helpful_ambassadors: "Our Helpful Ambassadors:" # helpful_ambassadors: "Our Helpful Ambassadors:"
# classes: classes:
# archmage_title: "Archmage" archmage_title: "Ærkemager"
# archmage_title_description: "(Coder)" archmage_title_description: "(Programmør)"
# artisan_title: "Artisan" artisan_title: "Artisan"
# artisan_title_description: "(Level Builder)" artisan_title_description: "(Banedesigner)"
# adventurer_title: "Adventurer" adventurer_title: "Eventyrer"
# adventurer_title_description: "(Level Playtester)" adventurer_title_description: "(Banetester)"
# scribe_title: "Scribe" scribe_title: "Skriver"
# scribe_title_description: "(Article Editor)" scribe_title_description: "(Artikkel redaktør)"
# diplomat_title: "Diplomat" diplomat_title: "Diplomat"
# diplomat_title_description: "(Translator)" diplomat_title_description: "(Oversætter)"
# ambassador_title: "Ambassador" ambassador_title: "Ambassadør"
# ambassador_title_description: "(Support)" ambassador_title_description: "(Brugerstøtte)"
# counselor_title: "Counselor" counselor_title: "Rådgiver"
# counselor_title_description: "(Expert/Teacher)" counselor_title_description: "(Ekspert/Lærer)"

View file

@ -36,10 +36,10 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
versions: versions:
save_version_title: "Neue Version speichern" save_version_title: "Neue Version speichern"
new_major_version: "Neue Hauptversion" new_major_version: "Neue Hauptversion"
# cla_prefix: "Damit Änderungen gespeichert werden können, musst du unsere ... akzeptieren " # To save changes, first you must agree to our" ... cla_prefix: "Damit Änderungen gespeichert werden können, musst du unsere Lizenzbedingungen (" # To save changes, first you must agree to our ...
# cla_url: "CLA" ? What is this? cla_url: "CLA" # ? CLA: What is this? -> CodeCombat Individual Contributor License Agreement
cla_suffix: "." cla_suffix: ") akzeptieren."
cla_agree: "Ich akzeptiere" # die Bestimmungen / I agree the rules cla_agree: "Ich stimme zu" # die Bestimmungen / I agree the rules
login: login:
sign_up: "Registrieren" sign_up: "Registrieren"
@ -71,7 +71,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
choose_your_level: "Wähle dein Level" choose_your_level: "Wähle dein Level"
adventurer_prefix: "Du kannst zu jedem Level springen oder diskutiere die Level " adventurer_prefix: "Du kannst zu jedem Level springen oder diskutiere die Level "
adventurer_forum: "im Abenteurerforum" adventurer_forum: "im Abenteurerforum"
# adventurer_suffix: "." adventurer_suffix: "."
campaign_beginner: "Anfängerkampagne" campaign_beginner: "Anfängerkampagne"
campaign_beginner_description: "... in der Du die Zauberei der Programmierung lernst." campaign_beginner_description: "... in der Du die Zauberei der Programmierung lernst."
campaign_dev: "Beliebiges schwierigeres Level" campaign_dev: "Beliebiges schwierigeres Level"
@ -88,9 +88,9 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
contribute_prefix: "Wenn Du Interesse hast, uns zu unterstützen dann sieh dir die " contribute_prefix: "Wenn Du Interesse hast, uns zu unterstützen dann sieh dir die "
contribute_page: "Unterstützer Seite" contribute_page: "Unterstützer Seite"
contribute_suffix: " an!" contribute_suffix: " an!"
forum_prefix: "Für alle öffentlichen Themen, benutze " forum_prefix: "Für alle öffentlichen Themen, benutze stattdessen "
forum_page: "unser Forum" forum_page: "unser Forum"
forum_suffix: " stattdessen." forum_suffix: "."
send: "Sende Feedback" send: "Sende Feedback"
diplomat_suggestion: diplomat_suggestion:
@ -103,7 +103,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
wizard_settings: wizard_settings:
title: "Zauberer Einstellungen" title: "Zauberer Einstellungen"
customize_avatar: "Individualisiere dein Avatar" customize_avatar: "Individualisiere deinen Avatar"
account_settings: account_settings:
title: "Accounteinstellungen" title: "Accounteinstellungen"
@ -115,16 +115,15 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
password_tab: "Passwort" password_tab: "Passwort"
emails_tab: "Emails" emails_tab: "Emails"
gravatar_select: "Wähle ein Gravatar Bild aus" gravatar_select: "Wähle ein Gravatar Bild aus"
gravatar_add_photos: "Füge Vorschaubilder und Fotos zu Deinem Gravatar Account (für Deine Email) hinzu um ein Bild auswählen zu können" gravatar_add_photos: "Füge Vorschaubilder und Fotos zu Deinem Gravatar Account (für Deine Email) hinzu, um ein Bild auswählen zu können"
gravatar_add_more_photos: "Füge mehr Fotos bei deinem Gravatar Account hinzu, um hier mehr Bilder wählen zu können" gravatar_add_more_photos: "Füge mehr Fotos bei deinem Gravatar Account hinzu, um hier mehr Bilder wählen zu können"
wizard_color: "Die Farbe der Kleidung des Zauberers" wizard_color: "Die Farbe der Kleidung des Zauberers"
new_password: "Neues Passwort" new_password: "Neues Passwort"
new_password_verify: "Passwort verifizieren" new_password_verify: "Passwort verifizieren"
email_subscriptions: "Email Abonnements" email_subscriptions: "Email Abonnements"
email_announcements: "Ankündigungen" email_announcements: "Ankündigungen"
# email_notifications_description: "Get periodic notifications for your account." email_announcements_description: "Erhalte regelmäßig Mitteilungen für deinen Account."
email_announcements_description: "Bekomme die aktuellesten Nachrichten und Entwicklungen bei CodeCombat." contributor_emails: "Unterstützer Email"
contributor_emails: "Untersützer Emails"
contribute_prefix: "Wir suchen nach Leuten, die mitmachen! Schau dir die" contribute_prefix: "Wir suchen nach Leuten, die mitmachen! Schau dir die"
contribute_page: "Unterstützer Seite" contribute_page: "Unterstützer Seite"
contribute_suffix: " an um mehr zu erfahren." contribute_suffix: " an um mehr zu erfahren."
@ -191,7 +190,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
tome_select_a_thang: "Wähle jemanden aus, um " tome_select_a_thang: "Wähle jemanden aus, um "
tome_available_spells: "Verfügbare Zauber" tome_available_spells: "Verfügbare Zauber"
hud_continue: "Weiter (drücke Shift + Leertaste)" hud_continue: "Weiter (drücke Shift + Leertaste)"
# spell_saved: "Spell Saved" spell_saved: "Zauber gespeichert"
admin: admin:
av_title: "Administrator Übersicht" av_title: "Administrator Übersicht"
@ -217,21 +216,22 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
hipchat_prefix: "Besuche uns auch in unserem" hipchat_prefix: "Besuche uns auch in unserem"
hipchat_url: "HipChat room." hipchat_url: "HipChat room."
level_some_options: "Einige Einstellungsmöglichkeiten?" level_some_options: "Einige Einstellungsmöglichkeiten?"
# level_tab_thangs: "Thangs" # Things? # level_tab_thangs: "Thangs" # Things? # <= no Thangs are the components of the level. Check the editor if you're not sure what it is.
# rather dont't translate it
level_tab_scripts: "Skripte" level_tab_scripts: "Skripte"
level_tab_settings: "Einstellungen" level_tab_settings: "Einstellungen"
level_tab_components: "Komponenten" level_tab_components: "Komponenten"
level_tab_systems: "Systeme" level_tab_systems: "Systeme"
# level_tab_thangs_title: "Current Thangs" level_tab_thangs_title: "Aktuelle Thangs"
level_tab_thangs_conditions: "Startbedingungen" level_tab_thangs_conditions: "Startbedingungen"
# level_tab_thangs_add: "Add Thangs" level_tab_thangs_add: "Thangs hinzufügen"
level_settings_title: "Einstellungen" level_settings_title: "Einstellungen"
level_component_tab_title: "Aktuelle Komponenten" level_component_tab_title: "Aktuelle Komponenten"
level_component_btn_new: "neue Komponente erstellen" level_component_btn_new: "neue Komponente erstellen"
level_systems_tab_title: "Aktuelle Systeme" level_systems_tab_title: "Aktuelle Systeme"
level_systems_btn_new: "neues System erstellen" level_systems_btn_new: "neues System erstellen"
level_systems_btn_add: "System hinzufügen" level_systems_btn_add: "System hinzufügen"
# level_components_title: "Back to All Thangs" level_components_title: "Zurück zu allen Thangs"
level_components_type: "Typ" level_components_type: "Typ"
level_component_edit_title: "Komponente bearbeiten" level_component_edit_title: "Komponente bearbeiten"
level_system_edit_title: "System bearbeiten" level_system_edit_title: "System bearbeiten"
@ -249,7 +249,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
body: "Inhalt" body: "Inhalt"
version: "Version" version: "Version"
commit_msg: "Commit Nachricht" commit_msg: "Commit Nachricht"
# version_history_for: "Version History for: " version_history_for: "Versionsgeschichte für: "
results: "Ergebnisse" results: "Ergebnisse"
description: "Beschreibung" description: "Beschreibung"
email: "Email" email: "Email"
@ -260,50 +260,50 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
who_is_codecombat: "Wer ist CodeCombat?" # Wer steckt hinter CodeCombat # behind who_is_codecombat: "Wer ist CodeCombat?" # Wer steckt hinter CodeCombat # behind
why_codecombat: "Warum CodeCombat?" why_codecombat: "Warum CodeCombat?"
who_description_prefix: "gründeten CodeCombat im Jahre 2013 zusammen. Wir entwickelten außerdem " who_description_prefix: "gründeten CodeCombat im Jahre 2013 zusammen. Wir entwickelten außerdem "
who_description_suffix: ", die meist benutzte (Position #1) Web and iOS Applikation 2008 zum Schreiben lernen der Chinesischen und Japanischen Schriftzeichen." # need improvements who_description_suffix: ", die meist benutzte (#1) Web and iOS Applikation 2008 zum Lernen des Schreibens von chinesischen und japanischen Schriftzeichen." # need improvements
who_description_ending: "Nun ist es an der Zeit, den Leuten das Programmieren beizubringen." who_description_ending: "Nun ist es an der Zeit, den Leuten das Programmieren beizubringen."
# why_paragraph_1: "When making Skritter, George didn't know how to program and was constantly frustrated by his inability to implement his ideas. Afterwards, he tried learning, but the lessons were too slow. His housemate, wanting to reskill and stop teaching, tried Codecademy, but \"got bored.\" Each week another friend started Codecademy, then dropped off. We realized it was the same problem we'd solved with Skritter: people learning a skill via slow, intensive lessons when what they need is fast, extensive practice. We know how to fix that." why_paragraph_1: "Als er Skritter machte, wusste George nicht wie man programmiert und war permanent darüber frustriert, dass er seine Ideen nicht umsetzen konnte. Danach versuchte er es zu lernen, aber das ging ihm zu langsam. Sein Mitbewohner versuchte Codecademy, als er sich umorientierte und aufhörte zu lehren, aber \"langweilte sich\". Jede Woche begann ein neuer Freund mit Codecademy und ließ es dann wieder bleiben. Wir erkannten, dass es das gleiche Problem war, welches wir mit Skritter gelöst hatten: Leute lernen eine Fähigkeit mittels langsamer, intersiver Lerneinheiten, wobei sie schnelle, umfassende Übung bräuchten. Wir kennen Abhilfe."
# why_paragraph_2: "Need to learn to code? You don't need lessons. You need to write a lot of code and have a great time doing it." why_paragraph_2: "Programmieren lernen? Du brauchst keine Stunden. Du musst einen Haufen Code schreiben und dabei Spaß haben."
# why_paragraph_3_prefix: "That's what programming is about. It's gotta be fun. Not fun like" why_paragraph_3_prefix: "Darum geht's beim Programmieren. Es soll Spaß machen. Nicht so einen Spaß wie"
# why_paragraph_3_italic: "yay a badge" why_paragraph_3_italic: "jau, 'ne Plakette"
# why_paragraph_3_center: "but fun like" why_paragraph_3_center: "sondern Spaß wie"
# why_paragraph_3_italic_caps: "NO MOM I HAVE TO FINISH THE LEVEL!" why_paragraph_3_italic_caps: "NEIN MUTTI ICH MUSS NOCH DEN LEVEL BEENDEN !"
# why_paragraph_3_suffix: "That's why CodeCombat is a multiplayer game, not a gamified lesson course. We won't stop until you can't stop--but this time, that's a good thing." why_paragraph_3_suffix: "Deshalb ist CodeCombat ein Multiplayerspiel und kein spielähnlicher Kurs. Wir werden nicht aufhören bis du nicht mehr aufhören kannst -- nur diesmal ist das eine gute Sache."
# why_paragraph_4: "If you're going to get addicted to some game, get addicted to this one and become one of the wizards of the tech age." why_paragraph_4: "Wenn dich Spiele süchtig machen, dass lass dich von diesem süchtig machen und werde ein Zauberer des Technologiezeitalters."
# why_ending: "And hey, it's free. " why_ending: "Und hey, es kostet nichts. "
# why_ending_url: "Start wizarding now!" why_ending_url: "Beginne jetzt zu zaubern!"
# george_description: "CEO, business guy, web designer, game designer, and champion of beginning programmers everywhere." george_description: "CEO, Businesstyp, Web Designer, Game Designer und Champion der Programmieranfänger überall."
# scott_description: "Programmer extraordinaire, software architect, kitchen wizard, and master of finances. Scott is the reasonable one." scott_description: "Außergewöhnlicher Programmierer, Softwarearchitekt, Küchenzauberer und Finanzmeister. Scott ist der Vernünftige."
# nick_description: "Programming wizard, eccentric motivation mage, and upside-down experimenter. Nick can do anything and chooses to build CodeCombat." nick_description: "Programmierzauberer, exzentrischer Motivationskünstler und Auf-den-Kopf-stell-Experimentierer. Nick könnte alles mögliche tun und entschied CodeCombat zu bauen."
# jeremy_description: "Customer support mage, usability tester, and community organizer; you've probably already spoken with Jeremy." jeremy_description: "Kundendienstmagier, Usability Tester und Community-Organisator. Wahrscheinlich hast du schon mit Jeremy gesprochen."
# michael_description: "Programmer, sys-admin, and undergrad technical wunderkind, Michael is the person keeping our servers online." michael_description: "Programmierer, Systemadministrator und studentisch technisches Wunderkind, Michael hält unsere Server am Laufen."
# legal: legal:
# page_title: "Legal" page_title: "Rechtliches"
# opensource_intro: "CodeCombat is free to play and completely open source." opensource_intro: "CodeCombat ist Free-to-Play und vollständig Open Source."
# opensource_description_prefix: "Check out " opensource_description_prefix: "Schau dir "
# github_url: "our GitHub" github_url: "unsere GitHub-Seite"
# opensource_description_center: "and help out if you like! CodeCombat is built on dozens of open source projects, and we love them. See " opensource_description_center: " an und mach mit wenn Du möchtest! CodeCombat baut auf duzenden Open Source Projekten auf, und wir lieben sie. Schau dir die Liste in "
# archmage_wiki_url: "our Archmage wiki" archmage_wiki_url: "unserem Erzmagier-Wiki"
# opensource_description_suffix: "for a list of the software that makes this game possible." opensource_description_suffix: " an, welche Software dieses Spiel möglich macht."
# practices_title: "Respectful Best Practices" practices_title: "Best Practices"
# practices_description: "These are our promises to you, the player, in slightly less legalese." practices_description: "Dies sind unsere Versprechen an dich, den Spieler, in weniger Fachchinesisch."
# privacy_title: "Privacy" privacy_title: "Datenschutz"
# privacy_description: "We will not sell any of your personal information. We intend to make money through recruitment eventually, but rest assured we will not distribute your personal information to interested companies without your explicit consent." privacy_description: "Wir werden deine persönlichen Daten nicht verkaufen. Letztenendes beabsichtigen wir, durch Vermittlung von Jobs zu verdienen, aber sei versichert, dass wir nicht deine persönlichen Daten ohne deine ausdrückliche Einwilligung interessierten Firmen zur Verfügung stellen werden."
# security_title: "Security" security_title: "Datensicherheit"
# security_description: "We strive to keep your personal information safe. As an open source project, our site is freely open to anyone to review and improve our security systems." security_description: "Wir streben an, deine persönlichen Daten sicher zu verwahren. Als Open Source Projekt ist unsere Site frei zugänglich für jedermann, auch um unsere Sicherheitsmaßnahmen in Augenschein zu nehmen und zu verbessern."
# email_title: "Email" email_title: "Email"
# email_description_prefix: "We will not inundate you with spam. Through" email_description_prefix: "Wir werden dich nicht mit Spam überschwemmen. Mittels"
# email_settings_url: "your email settings" email_settings_url: "deiner Emaileinstellungen"
# email_description_suffix: "or through links in the emails we send, you can change your preferences and easily unsubscribe at any time." email_description_suffix: "oder durch von uns gesendete Links kannst du jederzeit deine Einstellungen ändern und Abonnements kündigen."
# cost_title: "Cost" cost_title: "Kosten"
# cost_description: "Currently, CodeCombat is 100% free! One of our main goals is to keep it that way, so that as many people can play as possible, regardless of place in life. If the sky darkens, we might have to charge subscriptions or for some content, but we'd rather not. With any luck, we'll be able to sustain the company with:" cost_description: "CodeCombat ist zur Zeit 100% kostenlos! Eines unserer Hauptziele ist, es dabei zu belassen, so dass es so viele Leute wie möglich spielen können, unabhängig davon in welcher Lebenssituation sie sich befinden. Falls dunkle Wolken aufziehen, könnten wir manche Inhalte im Rahmen eines Abonnements anbieten, aber lieber nicht. Mit etwas Glück können wir die Firma erhalten durch:"
# recruitment_title: "Recruitment" recruitment_title: "Recruiting"
# recruitment_description_prefix: "Here on CodeCombat, you're going to become a powerful wizardnot just in the game, but also in real life." recruitment_description_prefix: "Hier bei CodeCombat kannst du ein mächtiger Zauberer werden, nicht nur im Spiel, sondern auch in der Realität."
# url_hire_programmers: "No one can hire programmers fast enough" url_hire_programmers: "Niemand kann schnell genug Programmierer einstellen."
# recruitment_description_suffix: "so once you've sharpened your skills and if you agree, we will demo your best coding accomplishments to the thousands of employers who are drooling for the chance to hire you. They pay us a little, they pay you" recruitment_description_suffix: "So wenn du deine Fähigkeiten entwickelt hast und zustimmst, werden wir deine besten Leistungen den tausenden Arbeitgebern demonstrieren, welche nur auf die Gelegentheit warten, dich einzustellen. Sie bezahlen uns ein bisschen, und sie bezahlen dir "
# recruitment_description_italic: "a lot" recruitment_description_italic: "jede Menge"
# recruitment_description_ending: "the site remains free and everybody's happy. That's the plan." recruitment_description_ending: ", die Seite bleibt kostenlos und jeder ist glücklich. So der Plan."
# copyrights_title: "Copyrights and Licenses" # copyrights_title: "Copyrights and Licenses"
# contributor_title: "Contributor License Agreement" # contributor_title: "Contributor License Agreement"
# contributor_description_prefix: "All contributions, both on the site and on our GitHub repository, are subject to our" # contributor_description_prefix: "All contributions, both on the site and on our GitHub repository, are subject to our"

View file

@ -4,12 +4,12 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
saving: "Guardando..." saving: "Guardando..."
sending: "Enviando..." sending: "Enviando..."
cancel: "Cancelar" cancel: "Cancelar"
# save: "Save" save: "Guardar"
delay_1_sec: "1 segundo" delay_1_sec: "1 segundo"
delay_3_sec: "3 segundos" delay_3_sec: "3 segundos"
delay_5_sec: "5 segundos" delay_5_sec: "5 segundos"
manual: "Manual" manual: "Manual"
# fork: "Fork" fork: "Bifurcar"
play: "Jugar" play: "Jugar"
modal: modal:
@ -31,15 +31,15 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
about: "Sobre nosotros" about: "Sobre nosotros"
contact: "Contacta" contact: "Contacta"
twitter_follow: "Síguenos" twitter_follow: "Síguenos"
# employers: "Employers" employers: "Empresas"
# versions: versions:
# save_version_title: "Save New Version" save_version_title: "Guardar nueva versión"
# new_major_version: "New Major Version" new_major_version: "Nueva versión principal"
# cla_prefix: "To save changes, first you must agree to our" cla_prefix: "Para guardar los cambios, primero debes aceptar nuestro"
# cla_url: "CLA" cla_url: "CLA"
# cla_suffix: "." cla_suffix: "."
# cla_agree: "I AGREE" cla_agree: "De acuerdo"
login: login:
sign_up: "Crear una cuenta" sign_up: "Crear una cuenta"
@ -49,10 +49,10 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
recover: recover:
recover_account_title: "recuperar cuenta" recover_account_title: "recuperar cuenta"
# send_password: "Send Recovery Password" send_password: "Enviar recuperación de contraseña"
signup: signup:
# create_account_title: "Create Account to Save Progress" create_account_title: "Crea una cuenta para guardar tu progreso"
description: "Es gratis. Solo necesitamos un par de cosas y listo para comenzar!" description: "Es gratis. Solo necesitamos un par de cosas y listo para comenzar!"
email_announcements: "Recibir noticias por correo electrónico" email_announcements: "Recibir noticias por correo electrónico"
coppa: "Soy mayor de 13 o de fuera de los Estados Unidos" coppa: "Soy mayor de 13 o de fuera de los Estados Unidos"
@ -75,11 +75,11 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
campaign_beginner: "Campaña de Principiante" campaign_beginner: "Campaña de Principiante"
campaign_beginner_description: "... en la que aprenderás la magia de la programación." campaign_beginner_description: "... en la que aprenderás la magia de la programación."
campaign_dev: "Niveles aleatorios más dificiles" campaign_dev: "Niveles aleatorios más dificiles"
campaign_dev_description: "... en la que aprenderás sobre la interfaz mientras haces algo más difícil." campaign_dev_description: "... en los que aprenderás sobre la interfaz mientras haces algo más difícil."
campaign_multiplayer: "Arenas Multijugador" campaign_multiplayer: "Arenas Multijugador"
campaign_multiplayer_description: "... en las que tu código se enfrentará al de otros jugadores." campaign_multiplayer_description: "... en las que tu código se enfrentará al de otros jugadores."
campaign_player_created: "Creaciones de los Jugadores" campaign_player_created: "Creaciones de los Jugadores"
campaign_player_created_description: "... en la que luchas contra la creatividad de tus compañeros <a href=\"/contribute#artisa\">Magos Artesanos</a>." campaign_player_created_description: "... en las que luchas contra la creatividad de tus compañeros <a href=\"/contribute#artisa\">Magos Artesanos</a>."
level_difficulty: "Dificultad: " level_difficulty: "Dificultad: "
contact: contact:
@ -88,7 +88,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
contribute_prefix: "Si estás interesado en colaborar, ¡échale un vistazo a nuestra " contribute_prefix: "Si estás interesado en colaborar, ¡échale un vistazo a nuestra "
contribute_page: "página de contribuciones" contribute_page: "página de contribuciones"
contribute_suffix: "!" contribute_suffix: "!"
forum_prefix: "Para cosas públicos, por favor usa " forum_prefix: "Para asuntos públicos, por favor usa "
forum_page: "nuestro foro" forum_page: "nuestro foro"
forum_suffix: " en su lugar." forum_suffix: " en su lugar."
send: "Envía tu comentario" send: "Envía tu comentario"
@ -96,14 +96,14 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
diplomat_suggestion: diplomat_suggestion:
title: "¡Ayuda a traducir CodeCombat!" title: "¡Ayuda a traducir CodeCombat!"
sub_heading: "Necesitamos tus habilidades lingüisticas." sub_heading: "Necesitamos tus habilidades lingüisticas."
pitch_body: "Nosotros desarrollamos CodeCombat en inglés, pero ya tenemos jugadores de todo el mundo. Muchos de ellos quieren jugar en Español porque no hablan inglés, así quesi hablas ambos idiomas, inscríbete como Diplomático y ayuda a traducir la web y todos los niveles de CodeCombat al Español." pitch_body: "Nosotros desarrollamos CodeCombat en inglés, pero ya tenemos jugadores de todo el mundo. Muchos de ellos quieren jugar en español porque no hablan inglés, así que si hablas ambos idiomas, inscríbete como Diplomático y ayuda a traducir la web y todos los niveles de CodeCombat al español."
missing_translations: "Mientras terminamos la traducción al Español, verás en inglés las partes que no estén todavía disponibles." missing_translations: "Mientras terminamos la traducción al español, verás en inglés las partes que no estén todavía disponibles."
learn_more: "Aprende más sobre ser un Diplomático" learn_more: "Aprende más sobre ser un Diplomático"
subscribe_as_diplomat: "Suscríbete como Diplomático" subscribe_as_diplomat: "Suscríbete como Diplomático"
# wizard_settings: wizard_settings:
# title: "Wizard Settings" title: "Ajustes del mago"
# customize_avatar: "Customize Your Avatar" customize_avatar: "Personaliza tu Avatar"
account_settings: account_settings:
title: "Ajustes de la cuenta" title: "Ajustes de la cuenta"
@ -118,11 +118,11 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
gravatar_add_photos: "Añade fotos a la cuenta de Gravatar asociada a tu correo electrónico para elegir la imagen." gravatar_add_photos: "Añade fotos a la cuenta de Gravatar asociada a tu correo electrónico para elegir la imagen."
gravatar_add_more_photos: "Añade más fotos a tu cuenta de Gravatar para tener acceso a ellas aquí." gravatar_add_more_photos: "Añade más fotos a tu cuenta de Gravatar para tener acceso a ellas aquí."
wizard_color: "Color de la ropa del Mago" wizard_color: "Color de la ropa del Mago"
new_password: "Nuevo contraseña" new_password: "Nueva contraseña"
new_password_verify: "Verificar" new_password_verify: "Verificar"
email_subscriptions: "Suscripciones de correo electrónico" email_subscriptions: "Suscripciones de correo electrónico"
email_announcements: "Noticias" email_announcements: "Noticias"
# email_notifications_description: "Get periodic notifications for your account." email_notifications_description: "Recibe notificaciones periódicas en tu cuenta."
email_announcements_description: "Recibe correos electrónicos con las últimas noticias y desarrollos de CodeCombat." email_announcements_description: "Recibe correos electrónicos con las últimas noticias y desarrollos de CodeCombat."
contributor_emails: "Correos para colaboradores" contributor_emails: "Correos para colaboradores"
contribute_prefix: "¡Buscamos gente que se una a nuestro comunidad! Comprueba la " contribute_prefix: "¡Buscamos gente que se una a nuestro comunidad! Comprueba la "
@ -139,15 +139,15 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# profile_for_suffix: "" # profile_for_suffix: ""
profile: "Perfil" profile: "Perfil"
user_not_found: "No se encontró al usuario. ¿Comprueba la URL?" user_not_found: "No se encontró al usuario. ¿Comprueba la URL?"
gravatar_not_found_mine: "No podemos encontrar el prefil asociado con:" gravatar_not_found_mine: "No podemos encontrar el perfil asociado con:"
# gravatar_not_found_email_suffix: "." # gravatar_not_found_email_suffix: "."
gravatar_signup_prefix: "Suscribete " gravatar_signup_prefix: "¡Suscribete a "
gravatar_signup_suffix: " para ponerte en marcha!" gravatar_signup_suffix: " para ponerte en marcha!"
gravatar_not_found_other: "Vaya, no hay un perfil asociado a la dirección de correo electrónico de esta persona." gravatar_not_found_other: "Vaya, no hay un perfil asociado a la dirección de correo electrónico de esta persona."
gravatar_contact: "Contacto" gravatar_contact: "Contacto"
gravatar_websites: "Paginas web" gravatar_websites: "Paginas web"
gravatar_accounts: "Como se vé en" gravatar_accounts: "Como se ve en"
gravatar_profile_link: "Prefil de Gravatar completo" gravatar_profile_link: "Perfil de Gravatar completo"
play_level: play_level:
level_load_error: "No se pudo cargar el nivel." level_load_error: "No se pudo cargar el nivel."
@ -191,251 +191,251 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
tome_select_a_thang: "Selecciona a alguien para " tome_select_a_thang: "Selecciona a alguien para "
tome_available_spells: "Hechizos disponibles" tome_available_spells: "Hechizos disponibles"
hud_continue: "Continuar (pulsa Shift+Space)" hud_continue: "Continuar (pulsa Shift+Space)"
# spell_saved: "Spell Saved" spell_saved: "Hechizo guardado"
# admin: # admin:
# av_title: "Admin Views" av_title: "Vista de Administrador"
# av_entities_sub_title: "Entities" av_entities_sub_title: "Entidades"
# av_entities_users_url: "Users" av_entities_users_url: "Usuarios"
# av_entities_active_instances_url: "Active Instances" av_entities_active_instances_url: "Instancias Activas"
# av_other_sub_title: "Other" av_other_sub_title: "Otras"
# av_other_debug_base_url: "Base (for debugging base.jade)" av_other_debug_base_url: "Base (para depurar base.jade)"
# u_title: "User List" u_title: "Lista de Usuario"
# lg_title: "Latest Games" lg_title: "Últimos juegos"
# editor: editor:
# main_title: "CodeCombat Editors" main_title: "Editores de CodeCombat"
# main_description: "Build your own levels, campaigns, units and educational content. We provide all the tools you need!" main_description: "Construye tus propios niveles, campañas, unidades y contenido educativo. ¡Nosotros te ofrecemos todas las herramientas que necesitas!"
# article_title: "Article Editor" article_title: "Editor de artículos"
# article_description: "Write articles that give players overviews of programming concepts which can be used across a variety of levels and campaigns." article_description: "Escribe artículos que den a los jugadores una visión general de los conceptos de programación que se pueden utilizar a lo largo de una gran variedad de niveles y campañas."
# thang_title: "Thang Editor" thang_title: "Editor de Objetos"
# thang_description: "Build units, defining their default logic, graphics and audio. Currently only supports importing Flash exported vector graphics." thang_description: "Construye unidades, su lógica predeterminada, gráficos y audio. Actualmente sólo se permite importar gráficos vectoriales exportados de Flash."
# level_title: "Level Editor" level_title: "Editor de Niveles"
# level_description: "Includes the tools for scripting, uploading audio, and constructing custom logic to create all sorts of levels. Everything we use ourselves!" level_description: "Incluye las herramientas para escribir scripts, subir audio, y construir una lógica personalidad con la que crear todo tipo de niveles. ¡Todo lo que usamos nosotros!"
# security_notice: "Many major features in these editors are not currently enabled by default. As we improve the security of these systems, they will be made generally available. If you'd like to use these features sooner, " security_notice: "Muchas de las funciones principales de estos editores no están habilitadas todavía por defecto. A medida que mejoremos la seguridad de los sistemas, se irán poniendo a disposición de todos. Si quieres utilizar estas funciones antes, "
# contact_us: "contact us!" contact_us: "¡Contacta con nosotros!"
# hipchat_prefix: "You can also find us in our" hipchat_prefix: "También puedes encontrarnos en nuestra"
# hipchat_url: "HipChat room." hipchat_url: "sala de HipChat."
# level_some_options: "Some Options?" level_some_options: "¿Algunas opciones?"
# level_tab_thangs: "Thangs" level_tab_thangs: "Objetos"
# level_tab_scripts: "Scripts" level_tab_scripts: "Scripts"
# level_tab_settings: "Settings" level_tab_settings: "Ajustes"
# level_tab_components: "Components" level_tab_components: "Componentes"
# level_tab_systems: "Systems" level_tab_systems: "Sistemas"
# level_tab_thangs_title: "Current Thangs" level_tab_thangs_title: "Objetos actuales"
# level_tab_thangs_conditions: "Starting Conditions" level_tab_thangs_conditions: "Condiciones de inicio"
# level_tab_thangs_add: "Add Thangs" level_tab_thangs_add: "Añadir Objetos"
# level_settings_title: "Settings" level_settings_title: "Ajustes"
# level_component_tab_title: "Current Components" level_component_tab_title: "Componentes Actuales"
# level_component_btn_new: "Create New Component" level_component_btn_new: "Crear Nuevo Componente"
# level_systems_tab_title: "Current Systems" level_systems_tab_title: "Sistemas Actuales"
# level_systems_btn_new: "Create New System" level_systems_btn_new: "Crear Nuevo Sistema"
# level_systems_btn_add: "Add System" level_systems_btn_add: "Añadir Sistema"
# level_components_title: "Back to All Thangs" level_components_title: "Volver a Todos los Objetos"
# level_components_type: "Type" level_components_type: "Tipo"
# level_component_edit_title: "Edit Component" level_component_edit_title: "Editar Componente"
# level_system_edit_title: "Edit System" level_system_edit_title: "Editar Sistema"
# create_system_title: "Create New System" create_system_title: "Crear Nuevo Sistema"
# new_component_title: "Create New Component" new_component_title: "Crear Nuevo Componente"
# new_component_field_system: "System" new_component_field_system: "Sistema"
# article: article:
# edit_btn_preview: "Preview" edit_btn_preview: "Vista preliminar"
# edit_article_title: "Edit Article" edit_article_title: "Editar artículo"
# general: general:
# and: "and" and: "y"
or: "o" or: "o"
# name: "Name" name: "Nombre"
# body: "Body" body: "Cuerpo"
# version: "Version" version: "Versión"
# commit_msg: "Commit Message" commit_msg: "Mensaje de Asignación o Commit"
# version_history_for: "Version History for: " version_history_for: "Historial de las versiones de: "
# results: "Results" results: "Resultados"
# description: "Description" description: "Descripción"
email: "Correo electrónico" email: "Correo electrónico"
message: "Mensaje" message: "Mensaje"
# about: about:
# who_is_codecombat: "Who is CodeCombat?" who_is_codecombat: "¿Qué es CodeCombat?"
# why_codecombat: "Why CodeCombat?" why_codecombat: "¿Por qué CodeCombat?"
# who_description_prefix: "together started CodeCombat in 2013. We also created " who_description_prefix: "juntos comenzamos CodeCombat en 2013. También creamos "
# who_description_suffix: "in 2008, growing it to the #1 web and iOS application for learning to write Chinese and Japanese characters." who_description_suffix: "en 2008, llegando a alcanzar el primer puesto en aplicaciones web, una app para iOS para el aprendizaje de la escritura de caracteres chinos y japoneses."
# who_description_ending: "Now it's time to teach people to write code." who_description_ending: "Es hora de empezar a enseñar a la gente a escribir código."
# why_paragraph_1: "When making Skritter, George didn't know how to program and was constantly frustrated by his inability to implement his ideas. Afterwards, he tried learning, but the lessons were too slow. His housemate, wanting to reskill and stop teaching, tried Codecademy, but \"got bored.\" Each week another friend started Codecademy, then dropped off. We realized it was the same problem we'd solved with Skritter: people learning a skill via slow, intensive lessons when what they need is fast, extensive practice. We know how to fix that." why_paragraph_1: "Mientras desarrollaba Skritter, George no sabía cómo programar y estaba constantemente frustrado por su incapacidad para implementar sus ideas. Posteriormente, intentó aprender, pero las lecciones eran demasiado lentas. Su compañero de piso, queriendo dejar de enseñar y reorientar su carrera, probó Codecademy, pero \"se aburrió. \" Cada semana otro amigo comenzaba en Codecademy, para terminar dejándolo posteriormente. Nos dimos cuenta de que era el mismo problema que habíamos resuelto con Skritter: gente aprendiendo una habilidad lentamente con lecciones intensivas cuando lo que necesitaban era una práctica rápida y extensa. Sabemos cómo solucionar eso."
# why_paragraph_2: "Need to learn to code? You don't need lessons. You need to write a lot of code and have a great time doing it." why_paragraph_2: "¿Necesitas aprender a programar? No necesitas lecciones. Necesitas escribir muchísimo código y pasarlo bien haciéndolo."
# why_paragraph_3_prefix: "That's what programming is about. It's gotta be fun. Not fun like" why_paragraph_3_prefix: "De eso va la programación. Tiene que ser divertido. No divertido como:"
# why_paragraph_3_italic: "yay a badge" why_paragraph_3_italic: "¡bien una insignia!,"
# why_paragraph_3_center: "but fun like" why_paragraph_3_center: "sino más bien como:"
# why_paragraph_3_italic_caps: "NO MOM I HAVE TO FINISH THE LEVEL!" why_paragraph_3_italic_caps: "¡NO MAMA, TENGO QUE TERMINAR EL NIVEL!"
# why_paragraph_3_suffix: "That's why CodeCombat is a multiplayer game, not a gamified lesson course. We won't stop until you can't stop--but this time, that's a good thing." why_paragraph_3_suffix: "Por eso Codecombat es multijugador, no un curso con lecciones \"gamificadas\" . No pararemos hasta que tú no puedas parar... pero esta vez, eso será buena señal."
# why_paragraph_4: "If you're going to get addicted to some game, get addicted to this one and become one of the wizards of the tech age." why_paragraph_4: "Si vas a engancharte a algún juego, engánchate a este y conviértete en uno de los magos de la era tecnológica."
# why_ending: "And hey, it's free. " why_ending: "Y, oye, es gratis. "
# why_ending_url: "Start wizarding now!" why_ending_url: "Comienza a hacer magia ¡ya!"
# george_description: "CEO, business guy, web designer, game designer, and champion of beginning programmers everywhere." george_description: "CEO, el tipo de los negocios, diseñador web, diseñador de juegos y campeón de los programadores principiantes de todo el mundo."
# scott_description: "Programmer extraordinaire, software architect, kitchen wizard, and master of finances. Scott is the reasonable one." scott_description: "Programador extraordinario, arquitecto de software, mago de la cocina y maestro de las finanzas. Scott es el razonable."
# nick_description: "Programming wizard, eccentric motivation mage, and upside-down experimenter. Nick can do anything and chooses to build CodeCombat." nick_description: "Mago de la programación, hechicero excéntrico de la motivación y experimentador del revés. Nick pudo haber hecho cualquier cosa y eligió desarrollar CodeCombat."
# jeremy_description: "Customer support mage, usability tester, and community organizer; you've probably already spoken with Jeremy." jeremy_description: "Mago de la atención al cliente, tester de usabilidad y organizador de la comunidad; es probable que ya hayas hablado con Jeremy."
# michael_description: "Programmer, sys-admin, and undergrad technical wunderkind, Michael is the person keeping our servers online." michael_description: "Programador, administrador de sistemas y prodigio técnico, Michael es el encargado de mantener nuestros servidores en línea."
# legal: legal:
# page_title: "Legal" page_title: "Legal"
# opensource_intro: "CodeCombat is free to play and completely open source." opensource_intro: "CodeCombat es gratis y totalmente open source."
# opensource_description_prefix: "Check out " opensource_description_prefix: "Echa un vistazo a "
# github_url: "our GitHub" github_url: "nuestro GitHub"
# opensource_description_center: "and help out if you like! CodeCombat is built on dozens of open source projects, and we love them. See " opensource_description_center: "y ayúdanos si quieres. CodeCombat está desarrollado sobre docenas de proyectos open source, y nos encantana. Mira "
# archmage_wiki_url: "our Archmage wiki" archmage_wiki_url: "nuestra wiki del Archimago"
# opensource_description_suffix: "for a list of the software that makes this game possible." opensource_description_suffix: "para encontrar una lista del software que hace este juego posible."
# practices_title: "Respectful Best Practices" practices_title: "Prácticas respetuosas"
# practices_description: "These are our promises to you, the player, in slightly less legalese." practices_description: "Esto es lo que te prometemos a ti, el jugador, sin usar mucha jerga legal."
# privacy_title: "Privacy" privacy_title: "Privacidad"
# privacy_description: "We will not sell any of your personal information. We intend to make money through recruitment eventually, but rest assured we will not distribute your personal information to interested companies without your explicit consent." privacy_description: "No venderemos tu información personal. Tenemos la intención de hacer dinero a través de la contratación con el tiempo, pero puedes estar seguro que no vamos a distribuir tu información personal a las empresas interesadas sin tu consentimiento expreso."
# security_title: "Security" security_title: "Seguridad"
# security_description: "We strive to keep your personal information safe. As an open source project, our site is freely open to anyone to review and improve our security systems." security_description: "Nos esforzamos por mantener segura tu información personal. Como proyecto de código abierto, nuestro sitio está abierto a cualquiera que quiera revisarlo y mejorar nuestros sistemas de seguridad."
# email_title: "Email" email_title: "Correo electrónico"
# email_description_prefix: "We will not inundate you with spam. Through" email_description_prefix: "No te inundaremos con spam. Mediante"
# email_settings_url: "your email settings" email_settings_url: "tus ajustes de correo electrónico"
# email_description_suffix: "or through links in the emails we send, you can change your preferences and easily unsubscribe at any time." email_description_suffix: "o a través de los enlaces en los correos que te enviemos, puedes cambiar tus preferencias y darte de baja fácilmente en cualquier momento."
# cost_title: "Cost" cost_title: "Precio"
# cost_description: "Currently, CodeCombat is 100% free! One of our main goals is to keep it that way, so that as many people can play as possible, regardless of place in life. If the sky darkens, we might have to charge subscriptions or for some content, but we'd rather not. With any luck, we'll be able to sustain the company with:" cost_description: "Actualmente, ¡CodeCombat es 100% gratis! Uno de nuestros principales objetivos es mantenerlo así, de forma que el mayor número posible de gente pueda jugar, independientemente de sus posibilidades económicas. Si las cosas se tuercen, quizás tengamos que cobrar suscripciones o por algún contenido, pero preferimos no hacerlo. Con un poco de suerte, podremos mantener la empresa con: "
# recruitment_title: "Recruitment" recruitment_title: "Contratación"
# recruitment_description_prefix: "Here on CodeCombat, you're going to become a powerful wizardnot just in the game, but also in real life." recruitment_description_prefix: "En CodeCombat, te vas a convertir en un poderoso mago no solo en el juego, también en el mundo real."
# url_hire_programmers: "No one can hire programmers fast enough" url_hire_programmers: "Nadie puede contratar programadores con la suficiente rapidez"
# recruitment_description_suffix: "so once you've sharpened your skills and if you agree, we will demo your best coding accomplishments to the thousands of employers who are drooling for the chance to hire you. They pay us a little, they pay you" recruitment_description_suffix: "así que una vez que hayas afilado tus habilidades y si estás de acuerdo, mostraremos tus mejores logros en programación a los miles de empresas que están deseando tener la oportunidad de contratarte. Ellos nos pagan un poco y ellos te pagan a ti"
# recruitment_description_italic: "a lot" recruitment_description_italic: "un montón."
# recruitment_description_ending: "the site remains free and everybody's happy. That's the plan." recruitment_description_ending: "La web permanece gratuita y todo el mundo es feliz. Ese es el plan."
# copyrights_title: "Copyrights and Licenses" copyrights_title: "Copyrights y Licencias"
# contributor_title: "Contributor License Agreement" contributor_title: "Acuerdo de Licencia del Colaborador"
# contributor_description_prefix: "All contributions, both on the site and on our GitHub repository, are subject to our" contributor_description_prefix: "Todas las colaboraciones, tanto en la web como en nuestro repositorio de GitHub, están sujetas a nuestro"
# cla_url: "CLA" cla_url: "CLA"
# contributor_description_suffix: "to which you should agree before contributing." contributor_description_suffix: "con el que deberás estar de acuerdo antes de colaborar."
# code_title: "Code - MIT" code_title: "Código - MIT"
# code_description_prefix: "All code owned by CodeCombat or hosted on codecombat.com, both in the GitHub repository or in the codecombat.com database, is licensed under the" code_description_prefix: "Todo el código propiedad de CodeCombat o alojado en codecombat.com, ambos en el repositorio GitHub repository o en la base de datos de codecombat.com, está licenciado bajo la "
# mit_license_url: "MIT license" mit_license_url: "Licencia MIT"
# code_description_suffix: "This includes all code in Systems and Components that are made available by CodeCombat for the purpose of creating levels." code_description_suffix: "Esto incluye todo el código en Sistemas y Componentes puesto a disposición por CodeCombat para la creación de niveles."
# art_title: "Art/Music - Creative Commons " art_title: "Arte/Música - Creative Commons "
# art_description_prefix: "All common content is available under the" art_description_prefix: "Todo el contenido común está disponible bajo la"
# cc_license_url: "Creative Commons Attribution 4.0 International License" cc_license_url: "Creative Commons Attribution 4.0 International License"
# art_description_suffix: "Common content is anything made generally available by CodeCombat for the purpose of creating Levels. This includes:" art_description_suffix: "Contenido común es cualquier cosa puesta a disposición por CodeCombat con el propósito de la creación de niveles. Esto incluye:"
# art_music: "Music" art_music: "Música"
# art_sound: "Sound" art_sound: "Sonido"
# art_artwork: "Artwork" art_artwork: "Arte"
# art_sprites: "Sprites" art_sprites: "Sprites"
# art_other: "Any and all other non-code creative works that are made available when creating Levels." art_other: "Otros trabajos creativos no relacionados con código puestos a disposición para la creación de Niveles."
# art_access: "Currently there is no universal, easy system for fetching these assets. In general, fetch them from the URLs as used by the site, contact us for assistance, or help us in extending the site to make these assets more easily accessible." art_access: "Actualmente no hay un sistema universal y fácil para ir en busca de esos recursos. En general, recógelos de las URLs como las usadas en el sitio, contáctanos para recibir asistencia, o ayúdanos a extender el sitio para hacer más facilmente accesibles estos recursos."
# art_paragraph_1: "For attribution, please name and link to codecombat.com near where the source is used or where appropriate for the medium. For example:" art_paragraph_1: "Para la atribución, por favor pon tu nombre y enlaza a codecombat.com cerca del lugar donde se utiliza la fuente o en su caso para el medio. Por ejemplo:"
# use_list_1: "If used in a movie or another game, include codecombat.com in the credits." use_list_1: "Si se usa en una película u otro juego, incluye codecombat.com en los créditos."
# use_list_2: "If used on a website, include a link near the usage, for example underneath an image, or in a general attributions page where you might also mention other Creative Commons works and open source software being used on the site. Something that's already clearly referencing CodeCombat, such as a blog post mentioning CodeCombat, does not need some separate attribution." use_list_2: "Si se usa en una página web, incluye un enlace cerca de donde se use, por ejemplo bajo una imagen, o en una página general de atribuciones donde también menciones otros trabajos Creative Commons y software de código abierto que uses en tu web. Si ya se hace clara referencia a CodeCombat, como en el post de un blog mencionando a CodeCombat, no es necesaria una atribución del contenido por separado."
# art_paragraph_2: "If the content being used is created not by CodeCombat but instead by a user of codecombat.com, attribute them instead, and follow attribution directions provided in that resource's description if there are any." art_paragraph_2: "Si el contenido usado ha sido creado no por CodeCombat sino por un usuario de codecombat.com, deberá serle atribuido a dicho usuario y seguir las directrices de atribución proporcionadas en la descripción del recurso, si la hay."
# rights_title: "Rights Reserved" rights_title: "Derechos Reservados"
# rights_desc: "All rights are reserved for Levels themselves. This includes" rights_desc: "Todos los derechos reservados para los Niveles. Esto incluye"
# rights_scripts: "Scripts" rights_scripts: "Scripts"
# rights_unit: "Unit configuration" rights_unit: "Configuración de la Unidad"
# rights_description: "Description" rights_description: "Descripción"
# rights_writings: "Writings" rights_writings: "Escritos"
# rights_media: "Media (sounds, music) and any other creative content made specifically for that Level and not made generally available when creating Levels." rights_media: "Media (sonidos, música) y cualquier otro contenido creativo creado específicamente para ese Nivel y que no estuviera disponible para todos al crear el/los niveles."
# rights_clarification: "To clarify, anything that is made available in the Level Editor for the purpose of making levels is under CC, whereas the content created with the Level Editor or uploaded in the course of creation of Levels is not." rights_clarification: "Para aclarar, cualquier cosa que se pone a disposición en el editor de niveles con el fin de crear Niveles se encuentra bajo licencia CC, mientras que el contenido creado con el editor de niveles o subido en el curso de la creación de niveles no lo es."
# nutshell_title: "In a Nutshell" nutshell_title: "En una palabra"
# nutshell_description: "Any resources we provide in the Level Editor are free to use as you like for creating Levels. But we reserve the right to restrict distribution of the Levels themselves (that are created on codecombat.com) so that they may be charged for in the future, if that's what ends up happening." nutshell_description: "Todos los recursos que ofrecemos en el editor de niveles son libres de ser utilizados para crear niveles. Pero nos reservamos el derecho de restringir la distribución de los propios niveles (que se crean en codecombat.com) de modo que se pueda cobrar por ellos en el futuro, si eso es lo que termina sucediendo."
# canonical: "The English version of this document is the definitive, canonical version. If there are any discrepencies between translations, the English document takes precedence." canonical: "La versión inglesa de este documento es la canónica, la definitiva. Si hay alguna diferencia con lo que pueda aparecer en las traducciones, la versión inglesa es la que prevalece sobre las demás."
# contribute: contribute:
# page_title: "Contributing" page_title: "Colaborar"
# character_classes_title: "Character Classes" character_classes_title: "Clases de Personajes"
# introduction_desc_intro: "We have high hopes for CodeCombat." introduction_desc_intro: "Tenemos muchas esperanzas en CodeCombat."
# introduction_desc_pref: "We want to be where programmers of all stripes come to learn and play together, introduce others to the wonderful world of coding, and reflect the best parts of the community. We can't and don't want to do that alone; what makes projects like GitHub, Stack Overflow and Linux great are the people who use them and build on them. To that end, " introduction_desc_pref: "Queremos estar donde programadores de todo tipo vengan a aprender y jugar juntos, introducir a otros en el maravilloso mundo de la programación y reflejar la mejor parte de la comunidad. No podemos, ni queremos, hacerlo solos; lo que hace grandes a proyectos como GitHub, Stack Overflow y Linux es la gente que los usa y crea con ellos. A tal fin, "
# introduction_desc_github_url: "CodeCombat is totally open source" introduction_desc_github_url: "CodeCombat es totalmente de código abierto"
# introduction_desc_suf: ", and we aim to provide as many ways as possible for you to take part and make this project as much yours as ours." introduction_desc_suf: ", y nuestro objetivo es ofrecer tantas maneras como sea posible para que tomes parte y hagas de este proyecto algo tan tuyo como nuestro."
# introduction_desc_ending: "We hope you'll join our party!" introduction_desc_ending: "¡Esperamos que te unas a nuestro equipo!"
# introduction_desc_signature: "- Nick, George, Scott, Michael, and Jeremy" introduction_desc_signature: "- Nick, George, Scott, Michael y Jeremy"
# alert_account_message_intro: "Hey there!" alert_account_message_intro: "¡Hola!"
# alert_account_message_pref: "To subscribe for class emails, you'll need to " alert_account_message_pref: "Para suscribirte a los correos electrónicos de las distintas Clases, necesitarás "
# alert_account_message_suf: "first." alert_account_message_suf: "primero."
# alert_account_message_create_url: "create an account" alert_account_message_create_url: "crear una cuenta"
# archmage_introduction: "One of the best parts about building games is they synthesize so many different things. Graphics, sound, real-time networking, social networking, and of course many of the more common aspects of programming, from low-level database management, and server administration to user facing design and interface building. There's a lot to do, and if you're an experienced programmer with a hankering to really dive into the nitty-gritty of CodeCombat, this class might be for you. We would love to have your help building the best programming game ever." archmage_introduction: "Una de las mejores partes de desarrollar juegos es que combinan cosas muy diferentes. Gráficos, sonido, uso de redes en tiempo real, redes sociales y por supuesto mucho de los aspectos comunes de la programación, desde gestión de bases de datos a bajo nivel y administración de servidores hasta diseño de experiencia del usuario y creación de interfaces. Hay un montón de cosas por hacer y si eres un programador experimentado con interés en conocer lo que se cuece en la trastienda de CodeCombat, esta Clase puede ser la ideal para ti. Nos encantaría recibir tu ayuda para crear el mejor juego de programación de la historia."
# class_attributes: "Class Attributes" class_attributes: "Atributos de las Clases"
# archmage_attribute_1_pref: "Knowledge in " archmage_attribute_1_pref: "Conocimiento en "
# archmage_attribute_1_suf: ", or a desire to learn. Most of our code is in this language. If you're a fan of Ruby or Python, you'll feel right at home. It's JavaScript, but with a nicer syntax." archmage_attribute_1_suf: ", o deseo por aprender. La mayor parte de nuestro código está escrito en este lenguaje. Si eres un fan de Ruby o Python te sentirás como en casa. Es JavaScript pero con una sintaxis más agradable."
# archmage_attribute_2: "Some experience in programming and personal initiative. We'll help you get oriented, but we can't spend much time training you." archmage_attribute_2: "Alguna experiencia en programación e iniciativa personal. Te orientaremos, pero no podemos pasar mucho tiempo enseñándote."
# how_to_join: "How To Join" how_to_join: "Cómo unirse"
# join_desc_1: "Anyone can help out! Just check out our " join_desc_1: "¡Cualquiera puede ayudar! Solo echa un vistazo a nuestro "
# join_desc_2: "to get started, and check the box below to mark yourself as a brave Archmage and get the latest news by email. Want to chat about what to do or how to get more deeply involved? " join_desc_2: "para comenzar y marca la casilla de abajo para etiquetarte como un bravo Archimago y obtener las últimas noticias por correo electrónico. ¿Quieres charlar sobre qué hacer o como involucrarte más? "
# join_desc_3: ", or find us in our " join_desc_3: ", o encuéntranos en nuestro "
# join_desc_4: "and we'll go from there!" join_desc_4: "¡y partiremos desde ese punto!"
# join_url_email: "Email us" join_url_email: "Escríbenos un correo electrónico"
# join_url_hipchat: "public HipChat room" join_url_hipchat: "sala pública en HipChat"
# more_about_archmage: "Learn More About Becoming A Powerful Archmage" more_about_archmage: "Aprende más sobre convertirte en un poderoso Archimago"
# archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." archmage_subscribe_desc: "Recibe correos sobre nuevos anuncios y oportunidades de codificar."
# artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" artisan_introduction_pref: "¡Debemos construir niveles adicionales! La gente clama por más contenido y solo podemos crear unos cuantos. Ahora mismo tu estación de trabajo es el nivel uno; nuestro editor de niveles es apenas usable por sus creadores, así que ten cuidado. Si tienes visiones de campañas que alcanzan el infinito"
# artisan_introduction_suf: "to then this class might be for you." artisan_introduction_suf: "entonces esta Clase es ideal para ti."
# artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" artisan_attribute_1: "Cualquier experiencia creando contenido similar estaría bien, como por ejemplo el editor de niveles de Blizzard. ¡Aunque no es necesaria!"
# artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." artisan_attribute_2: "Un anhelo de hacer un montón de testeo e iteraciones. Para hacer buenos niveles necesitas mostrárselos a otros y mirar como juegan, además de estar preparado para encontrar los fallos a reparar."
# artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" artisan_attribute_3: "Por el momento, la resistencia va a la par con el Aventurero. Nuestro editor de niveles está a un nivel de desarrollo temprano y puede ser muy frustrante usarlo. ¡Estás advertido!"
# artisan_join_desc: "Use the Level Editor in these steps, give or take:" artisan_join_desc: "Sigue las siguientes indicaciones para usar el editor de niveles. Tómalo o déjalo:"
# artisan_join_step1: "Read the documentation." artisan_join_step1: "Lee la documentación."
# artisan_join_step2: "Create a new level and explore existing levels." artisan_join_step2: "Crea un nuevo nivel y explora los niveles existentes."
# artisan_join_step3: "Find us in our public HipChat room for help." artisan_join_step3: "Busca nuestra sala pública de HipChat en busca de ayuda."
# artisan_join_step4: "Post your levels on the forum for feedback." artisan_join_step4: "Publica tus niveles en el foro para recibir comentarios críticos."
# more_about_artisan: "Learn More About Becoming A Creative Artisan" more_about_artisan: "Aprende más sobre convertirte en un Artesano creativo"
# artisan_subscribe_desc: "Get emails on level editor updates and announcements." artisan_subscribe_desc: "Recibe correos sobre actualizaciones del editor de niveles y anuncios."
# adventurer_introduction: "Let's be clear about your role: you are the tank. You're going to take heavy damage. We need people to try out brand-new levels and help identify how to make things better. The pain will be enormous; making good games is a long process and no one gets it right the first time. If you can endure and have a high constitution score, then this class might be for you." adventurer_introduction: "Hablemos claro sobre tu papel: eres el tanque. Vas a recibir fuertes daños. Necesitamos gente para probar nuestros flamantes niveles y ayudar a mejorarlos. El dolor será enorme; hacer buenos juegos es un proceso largo y nadie lo consigue a la primera. Si puedes resistir y tener una puntuación alta en Resistencia, entonces esta Clase es para ti."
# adventurer_attribute_1: "A thirst for learning. You want to learn how to code and we want to teach you how to code. You'll probably be doing most of the teaching in this case, though." adventurer_attribute_1: "Estar sediento de conocimientos. Quieres aprender a programar y nosotros queremos enseñarte cómo hacerlo. Aunque en este caso es más probable que seas tú el que esté haciendo la mayor parte de la enseñanza."
# adventurer_attribute_2: "Charismatic. Be gentle but articulate about what needs improving, and offer suggestions on how to improve." adventurer_attribute_2: "Carismático. Se amable pero claro a la hora de desglosar qué necesita ser mejorado y sugiere de qué formas podría hacerse."
# adventurer_join_pref: "Either get together with (or recruit!) an Artisan and work with them, or check the box below to receive emails when there are new levels to test. We'll also be posting about levels to review on our networks like" adventurer_join_pref: "Reúnete con (¡o recluta!) un Artesano y trabaja con ellos, o marca la casilla de abajo para recibir un correo cuando haya nuevos niveles para testar. También publicaremos en nuestras redes nuevos niveles para revisar"
# adventurer_forum_url: "our forum" adventurer_forum_url: "nuestro foro"
# adventurer_join_suf: "so if you prefer to be notified those ways, sign up there!" adventurer_join_suf: "así que si prefieres estar informado en esa forma, ¡crea una cuenta allí!"
# more_about_adventurer: "Learn More About Becoming A Brave Adventurer" more_about_adventurer: "Aprende más sobre cómo convertirte en un bravo Aventurero"
# adventurer_subscribe_desc: "Get emails when there are new levels to test." adventurer_subscribe_desc: "Recibe correos cuando haya nuevos niveles para testar."
# scribe_introduction_pref: "CodeCombat isn't just going to be a bunch of levels. It will also include a resource for knowledge, a wiki of programming concepts that levels can hook into. That way rather than each Artisan having to describe in detail what a comparison operator is, they can simply link their level to the Article describing them that is already written for the player's edification. Something along the lines of what the " scribe_introduction_pref: "CodeCombat no será solo un montón de niveles. También será una fuente de conocimientos, una wiki de conceptos de programación a la que los niveles se engancharan. De esa forma, en lugar de que cada Artesano tenga que describir en detalle qué es un operador de comparación, podrá simplemente enlazar el nivel al Artículo que los describe y que ya ha sido escrito para edificación del jugador. Algo en la línea de lo que la "
# scribe_introduction_url_mozilla: "Mozilla Developer Network" scribe_introduction_url_mozilla: "Mozilla Developer Network"
# scribe_introduction_suf: " has built. If your idea of fun is articulating the concepts of programming in Markdown form, then this class might be for you." scribe_introduction_suf: " ha construido. Si tu idea de diversión es articular los conceptos de la programación de una forma sencilla, entonces esta clase es para ti."
# scribe_attribute_1: "Skill in words is pretty much all you need. Not only grammar and spelling, but able to convey complicated ideas to others." scribe_attribute_1: "Habilidad a la hora de escribir es casi todo lo que necesitas. No solo dominar la gramática y la ortografía sino también expresar ideas complicadas a los demás de forma sencilla."
# contact_us_url: "Contact us" contact_us_url: "Escribenos un correo electrónico"
# scribe_join_description: "tell us a little about yourself, your experience with programming and what sort of things you'd like to write about. We'll go from there!" scribe_join_description: "cuéntanos más sobre ti, tu experiencia en el mundo de la programación y sobre qué cosas te gustaría escribir. ¡Y continuaremos a partir de ahí!"
# more_about_scribe: "Learn More About Becoming A Diligent Scribe" more_about_scribe: "Aprende más sobre convertirte en un Escriba diligente"
# scribe_subscribe_desc: "Get emails about article writing announcements." scribe_subscribe_desc: "Recibe correos sobre anuncios de redacción de Artículos."
# diplomat_introduction_pref: "So, if there's one thing we learned from the " diplomat_introduction_pref: "Así, si hemos aprendido algo desde el "
# diplomat_launch_url: "launch in October" diplomat_launch_url: "lanzamiento en octubre"
# diplomat_introduction_suf: "it's that there is sizeable interest in CodeCombat in other countries, particularly Brazil! We're building a corps of translators eager to turn one set of words into another set of words to get CodeCombat as accessible across the world as possible. If you like getting sneak peeks at upcoming content and getting these levels to your fellow nationals ASAP, then this class might be for you." diplomat_introduction_suf: "hay un interés considerable en CodeCombat en otros paises, ¡especialmente Brasil! Estamos formando un cuerpo de traductores con ganas de traducir un grupo de palabras tras otro para hacer CodeCombat tan accesible para todo el mundo como sea posible. Si quieres recibir avances de próximos contenidos y quieres poner esos niveles a disposición de los que comparten tu idioma tan pronto como sea posible, entonces esta Clase es para ti."
# diplomat_attribute_1: "Fluency in English and the language you would like to translate to. When conveying complicated ideas, it's important to have a strong grasp in both!" diplomat_attribute_1: "Fluidez con el ingles y el lenguaje al que quieras traducir. Cuando de transmitir ideas complejas se trata, ¡es importante tener grandes conocimientos de ambas!"
# diplomat_join_pref: "We've started a lot of initial translations at " diplomat_join_pref: "Hemos comenzado un montón de traducciones en "
# diplomat_doc_url: "this forum post" diplomat_doc_url: "este post del foro"
# diplomat_join_suf: "so check it out and add things for your language. Also, check this box below to keep up-to-date on new internationalization developments!" diplomat_join_suf: "así que échale un vistazo y añade cosas para tu idioma. También, marca la casilla de abajo para mantenerte al día en nuevos desarrollos de internacionalización!"
# more_about_diplomat: "Learn More About Becoming A Great Diplomat" more_about_diplomat: "Aprende más sobre cómo convertirte en un gran Diplomático"
# diplomat_subscribe_desc: "Get emails about i18n developments and levels to translate." diplomat_subscribe_desc: "Recibe correos sobre nuevos niveles y desarrollos para traducir."
# ambassador_introduction: "This is a community we're building, and you are the connections. We've got Olark chats, emails, and social networks with lots of people to talk with and help get acquainted with the game and learn from. If you want to help people get involved and have fun, and get a good feel of the pulse of CodeCombat and where we're going, then this class might be for you." ambassador_introduction: "Esta es una comunidad en construcción y tú eres parte de las conexiones. Tenemos chat Olark, correos electrónicos y las redes sociales con una gran cantidad de personas con quienes hablar, ayudar a familiarizarse con el juego y aprender. Si quieres ayudar a la gente a que se involucre, se divierta, y tenga buenas sensaciones sobre CodeCombat y hacia dónde vamos, entonces esta clase es para ti."
# ambassador_attribute_1: "Communication skills. Be able to identify the problems players are having and help them solve them. Also, keep the rest of us informed about what players are saying, what they like and don't like and want more of!" ambassador_attribute_1: "Habilidades de comunicación. Ser capaz de identificar los problemas que los jugadores están teniendo y ayudarles a resolverlos. Además, mantener al resto de nosotros informados sobre lo que los jugadores están diciendo, lo que les gusta, lo que no ¡y de lo que quieren más!"
# ambassador_join_desc: "tell us a little about yourself, what you've done and what you'd be interested in doing. We'll go from there!" ambassador_join_desc: "cuéntanos más sobre ti, que has hecho y qué estarías interesado en hacer. ¡Y continuaremos a partir de ahí!"
# ambassador_join_note_strong: "Note" ambassador_join_note_strong: "Nota"
# ambassador_join_note_desc: "One of our top priorities is to build multiplayer where players having difficulty solving levels can summon higher level wizards to help them. This will be a great way for ambassadors to do their thing. We'll keep you posted!" ambassador_join_note_desc: "Una de nuestras principales prioridades es construir un modo multijugador donde los jugadores con mayores dificultades a la hora de resolver un nivel, puedan invocar a los magos más avanzados para que les ayuden. Será una buena manera de que los Embajadores puedan hacer su trabajo. ¡Te mantendremos informado!"
# more_about_ambassador: "Learn More About Becoming A Helpful Ambassador" more_about_ambassador: "Aprende más sobre cómo convertirte en un amable Embajador"
# ambassador_subscribe_desc: "Get emails on support updates and multiplayer developments." ambassador_subscribe_desc: "Recibe correos sobre actualizaciones de soporte y desarrollo del multijugador."
# counselor_introduction_1: "Do you have life experience? A different perspective on things that can help us decide how to shape CodeCombat? Of all these roles, this will probably take the least time, but individually you may make the most difference. We're on the lookout for wisened sages, particularly in areas like: teaching, game development, open source project management, technical recruiting, entrepreneurship, or design." counselor_introduction_1: "¿Tienes mucha experiencia vital? ¿Una perspectiva diferente de las cosas que nos puede ayudar a decidir cómo moldear CodeCombat? De todos estos papeles, este es el que te llevará menos tiempo pero en el que marcarás más la diferencia. Estamos buscando eruditos particularmente en áreas como: enseñanza, desarrollo de juegos, gestión de proyectos de código abierto, contratación de técnicos, iniciativa empresarial o diseño."
# counselor_introduction_2: "Or really anything that is relevant to the development of CodeCombat. If you have knowledge and want to share it to help grow this project, then this class might be for you." counselor_introduction_2: "O realmente cualquier cosa que sea relevante para el desarrollo de CodeCombat. Si tienes el conocimiento y quieres compartirlo para ayudar a que este proyecto crezca, entonces esta Clase es ideal para ti."
# counselor_attribute_1: "Experience, in any of the areas above or something you think might be helpful." counselor_attribute_1: "Experiencia en cualquiera de las áreas mencionadas, o en lo que creas que puede ser de utilidad."
# counselor_attribute_2: "A little bit of free time!" counselor_attribute_2: "¡Un poco de tiempo libre!"
# counselor_join_desc: "tell us a little about yourself, what you've done and what you'd be interested in doing. We'll put you in our contact list and be in touch when we could use advice (not too often)." counselor_join_desc: "cuéntanos un poco sobre ti, qué has hecho y qué estarías interesado en hacer. Te pondremos en nuestra lista de contactos y te daremos un toque cuando necesitemos consejo (no muy a menudo)."
# more_about_counselor: "Learn More About Becoming A Valuable Counselor" more_about_counselor: "Aprende más sobre cómo convertirte en un valioso Consejero"
# changes_auto_save: "Changes are saved automatically when you toggle checkboxes." changes_auto_save: "Los cambios son guardados automáticamente cuando marcas las casillas de verificación."
# diligent_scribes: "Our Diligent Scribes:" diligent_scribes: "Nuestros diligentes Escribas:"
# powerful_archmages: "Our Powerful Archmages:" powerful_archmages: "Nuestros poderosos Archimagos:"
# creative_artisans: "Our Creative Artisans:" creative_artisans: "Nuestros creativos Artesanos:"
# brave_adventurers: "Our Brave Adventurers:" brave_adventurers: "Nuestros bravos Aventureros:"
# translating_diplomats: "Our Translating Diplomats:" translating_diplomats: "Nuestros políglotas Diplomáticos:"
# helpful_ambassadors: "Our Helpful Ambassadors:" helpful_ambassadors: "Nuestros amables Embajadores:"
# classes: classes:
# archmage_title: "Archmage" archmage_title: "Archimago"
# archmage_title_description: "(Coder)" archmage_title_description: "(Programador)"
# artisan_title: "Artisan" artisan_title: "Artesano"
# artisan_title_description: "(Level Builder)" artisan_title_description: "(Diseñador de Niveles)"
# adventurer_title: "Adventurer" adventurer_title: "Aventurero"
# adventurer_title_description: "(Level Playtester)" adventurer_title_description: "(Tester de Niveles)"
# scribe_title: "Scribe" scribe_title: "Escriba"
# scribe_title_description: "(Article Editor)" scribe_title_description: "(Editor de Artículos)"
# diplomat_title: "Diplomat" diplomat_title: "Diplomático"
# diplomat_title_description: "(Translator)" diplomat_title_description: "(Traductor)"
# ambassador_title: "Ambassador" ambassador_title: "Embajador"
# ambassador_title_description: "(Support)" ambassador_title_description: "(Soporte)"
# counselor_title: "Counselor" counselor_title: "Consejero"
# counselor_title_description: "(Expert/Teacher)" counselor_title_description: "(Experto/Profesor)"

View file

@ -205,46 +205,46 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
editor: editor:
main_title: "CodeCombat szerkesztők" main_title: "CodeCombat szerkesztők"
main_description: "KLészíts saját pályákat, hadjáratokat, egységeket és oktatési célú tartalmakat. Mi megadunk hozzá minden eszközt amire csak szükséged lehet!" main_description: "Készíts saját pályákat, hadjáratokat, egységeket és oktatési célú tartalmakat. Mi megadunk hozzá minden eszközt amire csak szükséged lehet!"
# article_title: "Article Editor" article_title: "Cikk szerkesztő"
# article_description: "Write articles that give players overviews of programming concepts which can be used across a variety of levels and campaigns." article_description: "Írhatsz cikkeket, hogy átfogó képet adhass olyan programozási szemléletekről, melyeket a különböző pályákon és küldetések során felhasználhatnak."
# thang_title: "Thang Editor" thang_title: "Eszköz szerkesztő"
# thang_description: "Build units, defining their default logic, graphics and audio. Currently only supports importing Flash exported vector graphics." thang_description: "Építs egységeket, határozd meg az működésüket, kinézetüket és hangjukat. Jelenleg csak a Flash-ből exportált vektorgrafika támogatott."
# level_title: "Level Editor" level_title: "Pálya szerkesztő"
# level_description: "Includes the tools for scripting, uploading audio, and constructing custom logic to create all sorts of levels. Everything we use ourselves!" level_description: "Mindent magába foglal, ami kódolás, hangok feltöltése, és a pályák teljesen egyedi felépítése. Minden, amit mi használunk!"
# security_notice: "Many major features in these editors are not currently enabled by default. As we improve the security of these systems, they will be made generally available. If you'd like to use these features sooner, " security_notice: "Számos főbb funkció ezekben a szerkesztőkben még nincs engedélyezve alapesetben. Amint a rendszer biztonságát növelni tudjuk, elérhetővé teszzük ezeket. Ha a későbbiekben használni szeretnéf ezeket a funkciókat, "
# contact_us: "contact us!" contact_us: "lépj kapcsolatba velünk!"
# hipchat_prefix: "You can also find us in our" hipchat_prefix: "Megtalálhatsz bennünket a "
# hipchat_url: "HipChat room." hipchat_url: "HipChat szobában."
# level_some_options: "Some Options?" level_some_options: "Néhány beállítás?"
# level_tab_thangs: "Thangs" level_tab_thangs: "Eszközök"
# level_tab_scripts: "Scripts" level_tab_scripts: "Kódok"
# level_tab_settings: "Settings" level_tab_settings: "Beállítások"
# level_tab_components: "Components" level_tab_components: "Komponensek"
# level_tab_systems: "Systems" level_tab_systems: "Rendszerek"
# level_tab_thangs_title: "Current Thangs" level_tab_thangs_title: "Jelenlegi eszközök"
# level_tab_thangs_conditions: "Starting Conditions" level_tab_thangs_conditions: "Kezdő feltételek"
# level_tab_thangs_add: "Add Thangs" level_tab_thangs_add: "Eszköz hozzáadása"
# level_settings_title: "Settings" level_settings_title: "Beállítások"
# level_component_tab_title: "Current Components" level_component_tab_title: "Jelenlegi komponensek"
# level_component_btn_new: "Create New Component" level_component_btn_new: "Új komponens készítése"
# level_systems_tab_title: "Current Systems" level_systems_tab_title: "Jelenlegi rendszerek"
# level_systems_btn_new: "Create New System" level_systems_btn_new: "Új rendszer készítése"
# level_systems_btn_add: "Add System" level_systems_btn_add: "Rendszer hozzáadása"
# level_components_title: "Back to All Thangs" level_components_title: "Vissza az összes eszközhöz"
# level_components_type: "Type" level_components_type: "Típus"
# level_component_edit_title: "Edit Component" level_component_edit_title: "Komponens szerkesztése"
# level_system_edit_title: "Edit System" level_system_edit_title: "Rendszer szerkesztése"
# create_system_title: "Create New System" create_system_title: "Új rendszer készítése"
# new_component_title: "Create New Component" new_component_title: "Új komponens készítése"
# new_component_field_system: "System" new_component_field_system: "Rendszer"
# article: article:
# edit_btn_preview: "Preview" edit_btn_preview: "Előnézet"
# edit_article_title: "Edit Article" edit_article_title: "Cikk szerkesztése"
general: general:
# and: "and" and: "és"
or: "vagy " or: "vagy "
name: "Név" name: "Név"
# body: "Body" # body: "Body"

View file

@ -3,3 +3,4 @@ CocoModel = require('./CocoModel')
module.exports = class Article extends CocoModel module.exports = class Article extends CocoModel
@className: "Article" @className: "Article"
urlRoot: "/db/article" urlRoot: "/db/article"
saveBackups: true

View file

@ -1,3 +1,5 @@
storage = require 'lib/storage'
class CocoSchema extends Backbone.Model class CocoSchema extends Backbone.Model
constructor: (path, args...) -> constructor: (path, args...) ->
super(args...) super(args...)
@ -9,6 +11,7 @@ class CocoModel extends Backbone.Model
idAttribute: "_id" idAttribute: "_id"
loaded: false loaded: false
loading: false loading: false
saveBackups: false
@schema: null @schema: null
initialize: -> initialize: ->
@ -20,15 +23,32 @@ class CocoModel extends Backbone.Model
@addSchemaDefaults() @addSchemaDefaults()
else else
@loadSchema() @loadSchema()
@once 'sync', @onLoaded @once 'sync', @onLoaded, @
@saveBackup = _.debounce(@saveBackup, 500)
type: -> type: ->
@constructor.className @constructor.className
onLoaded: => onLoaded: ->
@loaded = true @loaded = true
@loading = false @loading = false
@markToRevert() @markToRevert()
if @saveBackups
existing = storage.load @id
if existing
@set(existing, {silent:true})
CocoModel.backedUp[@id] = @
set: ->
res = super(arguments...)
@saveBackup() if @saveBackups and @loaded
res
saveBackup: ->
storage.save(@id, @attributes)
CocoModel.backedUp[@id] = @
@backedUp = {}
loadSchema: -> loadSchema: ->
unless @constructor.schema unless @constructor.schema
@ -38,7 +58,6 @@ class CocoModel extends Backbone.Model
@constructor.schema.on 'sync', => @constructor.schema.on 'sync', =>
@constructor.schema.loaded = true @constructor.schema.loaded = true
@addSchemaDefaults() @addSchemaDefaults()
@markToRevert()
@trigger 'schema-loaded' @trigger 'schema-loaded'
@hasSchema: -> return @schema?.loaded @hasSchema: -> return @schema?.loaded
@ -57,6 +76,7 @@ class CocoModel extends Backbone.Model
@trigger "save:success", @ @trigger "save:success", @
success(@, resp) if success success(@, resp) if success
@markToRevert() @markToRevert()
@clearBackup()
@trigger "save", @ @trigger "save", @
return super attrs, options return super attrs, options
@ -69,6 +89,10 @@ class CocoModel extends Backbone.Model
revert: -> revert: ->
@set(@_revertAttributes, {silent: true}) if @_revertAttributes @set(@_revertAttributes, {silent: true}) if @_revertAttributes
@clearBackup()
clearBackup: ->
storage.remove @id
hasLocalChanges: -> hasLocalChanges: ->
not _.isEqual @attributes, @_revertAttributes not _.isEqual @attributes, @_revertAttributes

View file

@ -6,6 +6,7 @@ class SuperModel
populateModel: (model) -> populateModel: (model) ->
@mustPopulate = model @mustPopulate = model
model.saveBackups = @shouldSaveBackups(model)
model.fetch() unless model.loaded or model.loading model.fetch() unless model.loaded or model.loading
model.on('sync', @modelLoaded) unless model.loaded model.on('sync', @modelLoaded) unless model.loaded
model.once('error', @modelErrored) unless model.loaded model.once('error', @modelErrored) unless model.loaded
@ -13,7 +14,9 @@ class SuperModel
@models[url] = model unless @models[url]? @models[url] = model unless @models[url]?
@modelLoaded(model) if model.loaded @modelLoaded(model) if model.loaded
shouldPopulate: (url) -> return true # replace or overwrite # replace or overwrite
shouldPopulate: (url) -> return true
shouldSaveBackups: (model) -> return false
modelErrored: (model) => modelErrored: (model) =>
@trigger 'error' @trigger 'error'
@ -25,6 +28,7 @@ class SuperModel
refs = [] unless @mustPopulate is model or @shouldPopulate(model) refs = [] unless @mustPopulate is model or @shouldPopulate(model)
# console.log 'Loaded', model.get('name') # console.log 'Loaded', model.get('name')
for ref, i in refs for ref, i in refs
ref.saveBackups = @shouldSaveBackups(ref)
refURL = ref.url() refURL = ref.url()
continue if @models[refURL] continue if @models[refURL]
@models[refURL] = ref @models[refURL] = ref

View file

@ -91,6 +91,7 @@ module.exports = class ThangType extends CocoModel
for animation in @requiredRawAnimations() for animation in @requiredRawAnimations()
name = animation.animation name = animation.animation
mc = @vectorParser.buildMovieClip name mc = @vectorParser.buildMovieClip name
continue unless mc
@builder.addMovieClip mc, null, animation.scale * @options.resolutionFactor @builder.addMovieClip mc, null, animation.scale * @options.resolutionFactor
framesMap[animation.scale + "_" + name] = @builder._animations[name].frames framesMap[animation.scale + "_" + name] = @builder._animations[name].frames
@ -98,6 +99,7 @@ module.exports = class ThangType extends CocoModel
continue if name is 'portrait' continue if name is 'portrait'
scale = action.scale ? @get('scale') ? 1 scale = action.scale ? @get('scale') ? 1
frames = framesMap[scale + "_" + action.animation] frames = framesMap[scale + "_" + action.animation]
continue unless frames
frames = @mapFrames(action.frames, frames[0]) if action.frames? frames = @mapFrames(action.frames, frames[0]) if action.frames?
next = true next = true
next = action.goesTo if action.goesTo next = action.goesTo if action.goesTo
@ -108,6 +110,7 @@ module.exports = class ThangType extends CocoModel
continue if name is 'portrait' continue if name is 'portrait'
scale = @options.resolutionFactor * (action.scale or @get('scale') or 1) scale = @options.resolutionFactor * (action.scale or @get('scale') or 1)
s = @vectorParser.buildContainerFromStore(action.container) s = @vectorParser.buildContainerFromStore(action.container)
continue unless s
frame = @builder.addFrame(s, s.bounds, scale) frame = @builder.addFrame(s, s.bounds, scale)
@builder.addAnimation name, [frame], false @builder.addAnimation name, [frame], false

View file

@ -3,9 +3,19 @@
@import "bootstrap/variables" @import "bootstrap/variables"
.team-column .team-column
margin-left: 50px padding-left: 0
ul.thumbnails
margin-left: 40px
padding: 0
li
list-style-type: none
padding-bottom: 20px
img img
float: left float: left
width: 150px width: 150px
height: 150px height: 150px

View file

@ -4,7 +4,7 @@
i i
margin-right: 5px margin-right: 5px
img.img-polaroid img.img-thumbnail
margin: 20px 0 margin: 20px 0
li li
@ -12,3 +12,4 @@
ul ul
margin: 0 margin: 0
padding: 0

View file

@ -1,20 +1,22 @@
#account-settings-view #account-settings-view
.nav-tabs .nav
margin-bottom: 0 margin-bottom: 10px
.tab-content .tab-content
border: 1px solid #aaa border: 1px solid #aaa
border-top-width: 0
padding: 20px padding: 20px
background: #eee background: #eee
border-radius: 5px
#save-button #save-button
float: right float: right
.thumbnails .thumbnails
text-align: center text-align: center
div .thumbnail
margin-bottom: 30px margin-bottom: 30px
margin-right: 20px
float: left
input.range input.range
position: relative position: relative
@ -34,6 +36,9 @@
left: 10px left: 10px
font-size: 12px font-size: 12px
.form
max-width: 600px
#wizard-settings-tab-view #wizard-settings-tab-view
#color-settings #color-settings
float: left float: left

View file

@ -4,5 +4,5 @@
p p
margin: 20px 0 margin: 20px 0
.bar .progress-bar
width: 100% width: 100%

View file

@ -4,12 +4,6 @@
h1 h2 h3 h4 h1 h2 h3 h4
letter-spacing: 2px letter-spacing: 2px
#widget-bounds
display: none
.navbar a.brand
padding: 4px 20px 0px 20px
.main-content-area .main-content-area
position: relative position: relative
width: 1024px width: 1024px
@ -18,63 +12,12 @@ h1 h2 h3 h4
padding: 14px 12px 5px 12px padding: 14px 12px 5px 12px
@include box-sizing(border-box) @include box-sizing(border-box)
.navbuttontext, .fancy-select .trigger
font-family: 'Bangers', cursive
font-size: 20px
font-weight: normal
letter-spacing: 1px
.navbuttontext-user-name
max-width: 125px
overflow: hidden
text-overflow: ellipsis
white-space: nowrap
display: inline-block
padding: 0
margin: 0
height: 18px
.navbar .nav.navbar-link-text, .navbar .nav.navbar-link-text > li > a
font-family: 'Bangers', cursive
font-weight: normal
font-size: 25px
letter-spacing: 2px
.navbar .btn, .navbar .btn-group, .navbar .fancy-select
margin-top: 13px
.nav-tabs > .active > a, .nav-tabs > .active > a:hover, .nav-tabs > .active > a:focus
background-color: #eee
.nav-tabs > li
cursor: pointer
#outer-content-wrapper #outer-content-wrapper
background: #8cc63f url(/images/pages/base/repeat-tile.png) top center background: #8cc63f url(/images/pages/base/repeat-tile.png) top center
#inner-content-wrapper #inner-content-wrapper
background: url(/images/pages/base/background_texture.png) top center no-repeat background: url(/images/pages/base/background_texture.png) top center no-repeat
.navbar-inner
font-size: 25px
a:not(.btn)
line-height: 25px
.btn, .fancy-select
float: right
margin-left: 10px
select
opacity: 0
.fancy-select
.trigger
padding: 5px 25px 3px 10px
width: auto
&:after
top: 13px
max-width: 140px
#front-summary-points-left #front-summary-points-left
width: 250px width: 250px
margin: 0px 20px 10px 15px margin: 0px 20px 10px 15px
@ -110,6 +53,8 @@ h1 h2 h3 h4
color: #ffffff color: #ffffff
cursor: pointer cursor: pointer
margin: 0px 10px margin: 0px 10px
&:hover
color: $white
a[data-toggle="modal"] a[data-toggle="modal"]
cursor: pointer cursor: pointer
@ -117,13 +62,13 @@ a[data-toggle="modal"]
.share-buttons, .partner-badges .share-buttons, .partner-badges
margin-top: 10px margin-top: 10px
text-align: center text-align: center
@include opacity(75) @include opacity(0.75)
&.fade-in &.fade-in
@include opacity(0) @include opacity(0)
&:hover, &:active &:hover, &:active
@include opacity(100) @include opacity(1)
@include transition(opacity .10s linear) @include transition(opacity .10s linear)
.github-star-button .github-star-button
@ -135,13 +80,16 @@ a[data-toggle="modal"]
.selectable .selectable
cursor: pointer cursor: pointer
.modal .modal-dialog
padding: 5px padding: 5px
background: transparent url(/images/pages/base/modal_background.png) background: transparent url(/images/pages/base/modal_background.png)
background-size: 100% 100% background-size: 100% 100%
border: 0 border: 0
@include box-shadow(0 0 0 #000) @include box-shadow(0 0 0 #000)
.modal-content
@include box-shadow(none)
.modal-header .modal-header
margin: 0 14px margin: 0 14px
padding: 8px 0 padding: 8px 0
@ -149,9 +97,9 @@ a[data-toggle="modal"]
.close .close
font-size: 28px font-size: 28px
@include opacity(60) @include opacity(0.60)
&:hover &:hover
@include opacity(100) @include opacity(1)
.modal-footer .modal-footer
background-color: transparent background-color: transparent
@ -197,7 +145,7 @@ a[data-toggle="modal"]
.progress .progress
width: 50% width: 50%
margin: 0 25% margin: 0 25%
.bar .progress-bar
width: 100% width: 100%
.modal .modal
@ -207,43 +155,14 @@ a[data-toggle="modal"]
.progress .progress
width: 50% width: 50%
margin: 10px auto margin: 10px auto
.bar .progress-bar
width: 100% width: 100%
table.table table.table
background-color: white background-color: white
.ui-autocomplete //.ui-autocomplete
z-index: $zindexAutocomplete // z-index: $zindexAutocomplete
div.fancy-select
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25)
div.trigger
background-color: #9d8f5a
background-image: linear-gradient(to bottom, #a4955e, #948754)
background-repeat: repeat-x
border: 1px solid #cccccc
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25)
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05)
color: white
&:after
border-top-color: white
&.open
background-color: #8B7F51
color: #ebebeb
&:after
border-top-color: #ebebeb
ul.options
max-height: 415px
background-color: #9d8f5a
right: 0
left: auto
overflow-x: hidden
&.open
top: 36px
li
color: #ebebeb
padding: 8px 20px
.ui-slider .ui-slider
border: 1px solid black border: 1px solid black

View file

@ -1,48 +0,0 @@
/*!
* Bootstrap Responsive v2.3.1
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/
// Responsive
// For phone and tablet devices
// -------------------------------------------------------------
// REPEAT VARIABLES & MIXINS
// -------------------------
// Required since we compile the responsive stuff separately
@import "bootstrap/variables"; // Modify this for custom colors, font-sizes, etc
@import "bootstrap/mixins";
// RESPONSIVE CLASSES
// ------------------
@import "bootstrap/responsive-utilities";
// MEDIA QUERIES
// ------------------
// Large desktops
@import "bootstrap/responsive-1200px-min";
// Tablets to regular desktops
@import "bootstrap/responsive-768px-979px";
// Phones to portrait tablets and narrow desktops
@import "bootstrap/responsive-767px-max";
// RESPONSIVE NAVBAR
// ------------------
// From 979px and below, show a button to toggle navbar contents
@import "bootstrap/responsive-navbar";

View file

@ -1,66 +1 @@
/*! @import "bootstrap/bootstrap";
* Bootstrap v2.3.1
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/
// Core variables and mixins
@import "bootstrap/variables"; // Modify this for custom colors, font-sizes, etc
@import "bootstrap/mixins";
// CSS Reset
@import "bootstrap/reset";
// Grid system and page structure
@import "bootstrap/scaffolding";
@import "bootstrap/grid";
@import "bootstrap/layouts";
// Base CSS
@import "bootstrap/type";
@import "bootstrap/code";
@import "bootstrap/forms";
@import "bootstrap/tables";
// Components: common
@import "bootstrap/sprites";
@import "bootstrap/dropdowns";
@import "bootstrap/wells";
@import "bootstrap/component-animations";
@import "bootstrap/close";
// Components: Buttons & Alerts
@import "bootstrap/buttons";
@import "bootstrap/button-groups";
@import "bootstrap/alerts"; // Note: alerts share common CSS with buttons and thus have styles in _buttons.scss
// Components: Nav
@import "bootstrap/navs";
@import "bootstrap/navbar";
@import "bootstrap/breadcrumbs";
@import "bootstrap/pagination";
@import "bootstrap/pager";
// Components: Popovers
@import "bootstrap/modals";
@import "bootstrap/tooltip";
@import "bootstrap/popovers";
// Components: Misc
@import "bootstrap/thumbnails";
@import "bootstrap/media";
@import "bootstrap/labels-badges";
@import "bootstrap/progress-bars";
@import "bootstrap/accordion";
@import "bootstrap/carousel";
@import "bootstrap/hero-unit";
// Addition: Bootswatch structural changes
@import "bootstrap/bootswatch";
// Utility classes
@import "bootstrap/utilities"; // Has to be last to override when necessary

View file

@ -7,73 +7,61 @@
// ------------------------- // -------------------------
.alert { .alert {
padding: 8px 35px 8px 14px; padding: $alert-padding;
margin-bottom: $baseLineHeight; margin-bottom: $line-height-computed;
text-shadow: 0 1px 0 rgba(255,255,255,.5); border: 1px solid transparent;
background-color: $warningBackground; border-radius: $alert-border-radius;
border: 1px solid $warningBorder;
@include border-radius($baseBorderRadius); // Headings for larger alerts
h4 {
margin-top: 0;
// Specified for the h4 to prevent conflicts of changing $headings-color
color: inherit;
} }
.alert, // Provide class for links that match alerts
.alert h4 { .alert-link {
// Specified for the h4 to prevent conflicts of changing $headingsColor font-weight: $alert-link-font-weight;
color: $warningText;
}
.alert h4 {
margin: 0;
} }
// Improve alignment and spacing of inner content
> p,
> ul {
margin-bottom: 0;
}
> p + p {
margin-top: 5px;
}
}
// Dismissable alerts
//
// Expand the right padding and account for the close button's positioning.
.alert-dismissable {
padding-right: ($alert-padding + 20);
// Adjust close link position // Adjust close link position
.alert .close { .close {
position: relative; position: relative;
top: -2px; top: -2px;
right: -21px; right: -21px;
line-height: $baseLineHeight; color: inherit;
}
} }
// Alternate styles // Alternate styles
// ------------------------- //
// Generate contextual modifier classes for colorizing the alert.
.alert-success { .alert-success {
background-color: $successBackground; @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);
border-color: $successBorder;
color: $successText;
}
.alert-success h4 {
color: $successText;
}
.alert-danger,
.alert-error {
background-color: $errorBackground;
border-color: $errorBorder;
color: $errorText;
}
.alert-danger h4,
.alert-error h4 {
color: $errorText;
} }
.alert-info { .alert-info {
background-color: $infoBackground; @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);
border-color: $infoBorder;
color: $infoText;
} }
.alert-info h4 { .alert-warning {
color: $infoText; @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);
} }
.alert-danger {
@include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);
// Block alerts
// -------------------------
.alert-block {
padding-top: 14px;
padding-bottom: 14px;
}
.alert-block > p,
.alert-block > ul {
margin-bottom: 0;
}
.alert-block p + p {
margin-top: 5px;
} }

View file

@ -0,0 +1,51 @@
//
// Badges
// --------------------------------------------------
// Base classes
.badge {
display: inline-block;
min-width: 10px;
padding: 3px 7px;
font-size: $font-size-small;
font-weight: $badge-font-weight;
color: $badge-color;
line-height: $badge-line-height;
vertical-align: baseline;
white-space: nowrap;
text-align: center;
background-color: $badge-bg;
border-radius: $badge-border-radius;
// Empty badges collapse automatically (not available in IE8)
&:empty {
display: none;
}
// Quick fix for badges in buttons
.btn & {
position: relative;
top: -1px;
}
}
// Hover state, but only for links
a.badge {
&:hover,
&:focus {
color: $badge-link-hover-color;
text-decoration: none;
cursor: pointer;
}
}
// Account for counters in navs
a.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
color: $badge-active-color;
background-color: $badge-active-bg;
}
.nav-pills > li > a > .badge {
margin-left: 3px;
}

View file

@ -18,7 +18,7 @@
.brand { .brand {
padding: 14px 20px 16px; padding: 14px 20px 16px;
font-family: $headingsFontFamily; font-family: $headings-font-family;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
} }
@ -28,12 +28,12 @@
.nav > li > a { .nav > li > a {
padding: 16px 10px 14px; padding: 16px 10px 14px;
font-family: $headingsFontFamily; font-family: $headings-font-family;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
} }
.search-query { .search-query {
border: 1px solid darken($linkColor, 10%); border: 1px solid darken($link-color, 10%);
line-height: normal; line-height: normal;
} }
@ -49,23 +49,22 @@
.navbar-inverse { .navbar-inverse {
.navbar-search .search-query { .navbar-search .search-query {
color: $textColor; color: $text-color;
} }
} }
@media (max-width: $navbarCollapseWidth) { @media (max-width: $grid-float-breakpoint) {
.navbar .nav-collapse { .navbar .nav-collapse {
.nav li > a { .navbar-nav li > a {
font-family: $headingsFontFamily; font-family: $headings-font-family;
font-weight: normal; font-weight: normal;
color: $white; color: $white;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
&:hover { &:hover {
background-color: #2B7CAC;
} }
} }
@ -93,7 +92,7 @@
.navbar-inverse .nav-collapse { .navbar-inverse .nav-collapse {
.nav li > a { .nav li > a {
color: $navbarInverseLinkColor; color: $navbar-inverse-color;
&:hover { &:hover {
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.1);
@ -110,13 +109,13 @@
div.subnav { div.subnav {
font-family: $headingsFontFamily; font-family: $headings-font-family;
text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.2); text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.2);
} }
div.subnav-fixed { div.subnav-fixed {
top: $navbarHeight + 1; top: $navbar-height + 1;
} }
@ -136,28 +135,30 @@ div.subnav-fixed {
} }
} }
//The following were oring buttonBackground
.btn-primary { .btn-primary {
@include buttonBackground(lighten($btnPrimaryBackground, 5%), $btnPrimaryBackground); @include button-background(lighten($btn-primary-bg, 5%), $btn-primary-bg);
} }
.btn-info { .btn-info {
@include buttonBackground(lighten($btnInfoBackground, 5%), $btnInfoBackground); @include button-background(lighten($btn-info-bg, 5%), $btn-info-bg);
} }
.btn-success { .btn-success {
@include buttonBackground(lighten($btnSuccessBackground, 5%), $btnSuccessBackground); @include button-background(lighten($btn-success-bg, 5%), $btn-success-bg);
} }
.btn-warning { .btn-warning {
@include buttonBackground(lighten($btnWarningBackground, 5%), $btnWarningBackground); @include button-background(lighten($btn-warning-bg, 5%), $btn-warning-bg);
} }
.btn-danger { .btn-danger {
@include buttonBackground(lighten($btnDangerBackground, 5%), $btnDangerBackground); @include button-background(lighten($btn-danger-bg, 5%), $btn-danger-bg);
} }
.btn-inverse { .btn-inverse {
@include buttonBackground(lighten($btnInverseBackground, 5%), $btnInverseBackground); @include button-background(lighten($btn-default-color, 5%), $btn-default-color);//this should be btn-inverse but I can't find it at the moment
} }
// TABLES // TABLES

View file

@ -5,20 +5,19 @@
.breadcrumb { .breadcrumb {
padding: 8px 15px; padding: 8px 15px;
margin: 0 0 $baseLineHeight; margin-bottom: $line-height-computed;
list-style: none; list-style: none;
background-color: #f5f5f5; background-color: $breadcrumb-bg;
@include border-radius($baseBorderRadius); border-radius: $border-radius-base;
> li { > li {
display: inline-block; display: inline-block;
@include ie7-inline-block(); + li:before {
text-shadow: 0 1px 0 $white; content: "#{$breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
> .divider {
padding: 0 5px; padding: 0 5px;
color: #ccc; color: $breadcrumb-color;
} }
} }
.active { > .active {
color: $grayLight; color: $breadcrumb-active-color;
} }
} }

View file

@ -2,90 +2,88 @@
// Button groups // Button groups
// -------------------------------------------------- // --------------------------------------------------
// Make the div behave like a button // Make the div behave like a button
.btn-group { .btn-group,
.btn-group-vertical {
position: relative; position: relative;
display: inline-block; display: inline-block;
@include ie7-inline-block();
font-size: 0; // remove as part 1 of font-size inline-block hack
vertical-align: middle; // match .btn alignment given font-size hack above vertical-align: middle; // match .btn alignment given font-size hack above
white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page) > .btn {
@include ie7-restore-left-whitespace(); position: relative;
float: left;
// Bring the "active" button to the front
&:hover,
&:focus,
&:active,
&.active {
z-index: 2;
}
&:focus {
// Remove focus outline when dropdown JS adds it after closing the menu
outline: none;
}
}
} }
// Space out series of button groups // Prevent double borders when buttons are next to each other
.btn-group {
.btn + .btn,
.btn + .btn-group,
.btn-group + .btn,
.btn-group + .btn-group { .btn-group + .btn-group {
margin-left: 5px; margin-left: -1px;
}
} }
// Optional: Group multiple button groups together for a toolbar // Optional: Group multiple button groups together for a toolbar
.btn-toolbar { .btn-toolbar {
font-size: 0; // Hack to remove whitespace that results from using inline-block @include clearfix();
margin-top: $baseLineHeight / 2;
margin-bottom: $baseLineHeight / 2; .btn-group {
> .btn + .btn, float: left;
> .btn-group + .btn, }
> .btn + .btn-group { // Space out series of button groups
> .btn,
> .btn-group {
+ .btn,
+ .btn-group {
margin-left: 5px; margin-left: 5px;
} }
} }
// Float them, remove border radius, then re-add to first and last elements
.btn-group > .btn {
position: relative;
@include border-radius(0);
}
.btn-group > .btn + .btn {
margin-left: -1px;
}
.btn-group > .btn,
.btn-group > .dropdown-menu,
.btn-group > .popover {
font-size: $baseFontSize; // redeclare as part 2 of font-size inline-block hack
} }
// Reset fonts for other sizes .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
.btn-group > .btn-mini { border-radius: 0;
font-size: $fontSizeMini;
}
.btn-group > .btn-small {
font-size: $fontSizeSmall;
}
.btn-group > .btn-large {
font-size: $fontSizeLarge;
} }
// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match // Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
.btn-group > .btn:first-child { .btn-group > .btn:first-child {
margin-left: 0; margin-left: 0;
@include border-top-left-radius($baseBorderRadius); &:not(:last-child):not(.dropdown-toggle) {
@include border-bottom-left-radius($baseBorderRadius); @include border-right-radius(0);
}
} }
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it // Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
.btn-group > .btn:last-child, .btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle { .btn-group > .dropdown-toggle:not(:first-child) {
@include border-top-right-radius($baseBorderRadius); @include border-left-radius(0);
@include border-bottom-right-radius($baseBorderRadius);
}
// Reset corners for large buttons
.btn-group > .btn.large:first-child {
margin-left: 0;
@include border-top-left-radius($borderRadiusLarge);
@include border-bottom-left-radius($borderRadiusLarge);
}
.btn-group > .btn.large:last-child,
.btn-group > .large.dropdown-toggle {
@include border-top-right-radius($borderRadiusLarge);
@include border-bottom-right-radius($borderRadiusLarge);
} }
// On hover/focus/active, bring the proper btn to front // Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
.btn-group > .btn:hover, .btn-group > .btn-group {
.btn-group > .btn:focus, float: left;
.btn-group > .btn:active, }
.btn-group > .btn.active { .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
z-index: 2; border-radius: 0;
}
.btn-group > .btn-group:first-child {
> .btn:last-child,
> .dropdown-toggle {
@include border-right-radius(0);
}
}
.btn-group > .btn-group:last-child > .btn:first-child {
@include border-left-radius(0);
} }
// On active and open, don't show outline // On active and open, don't show outline
@ -95,6 +93,14 @@
} }
// Sizing
//
// Remix the default button sizing classes into new ones for easier manipulation.
.btn-group-xs > .btn { @extend .btn-xs; }
.btn-group-sm > .btn { @extend .btn-sm; }
.btn-group-lg > .btn { @extend .btn-lg; }
// Split button dropdowns // Split button dropdowns
// ---------------------- // ----------------------
@ -103,127 +109,119 @@
.btn-group > .btn + .dropdown-toggle { .btn-group > .btn + .dropdown-toggle {
padding-left: 8px; padding-left: 8px;
padding-right: 8px; padding-right: 8px;
@include box-shadow(inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05));
*padding-top: 5px;
*padding-bottom: 5px;
} }
.btn-group > .btn-mini + .dropdown-toggle { .btn-group > .btn-lg + .dropdown-toggle {
padding-left: 5px;
padding-right: 5px;
*padding-top: 2px;
*padding-bottom: 2px;
}
.btn-group > .btn-small + .dropdown-toggle {
*padding-top: 5px;
*padding-bottom: 4px;
}
.btn-group > .btn-large + .dropdown-toggle {
padding-left: 12px; padding-left: 12px;
padding-right: 12px; padding-right: 12px;
*padding-top: 7px;
*padding-bottom: 7px;
} }
.btn-group.open {
// The clickable button for toggling the menu // The clickable button for toggling the menu
// Remove the gradient and set the same inset shadow as the :active state // Remove the gradient and set the same inset shadow as the :active state
.dropdown-toggle { .btn-group.open .dropdown-toggle {
background-image: none; @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
@include box-shadow(inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05));
}
// Keep the hover's background when dropdown is open // Show no shadow for `.btn-link` since it has no other button styles.
.btn.dropdown-toggle { &.btn-link {
background-color: $btnBackgroundHighlight; @include box-shadow(none);
}
.btn-primary.dropdown-toggle {
background-color: $btnPrimaryBackgroundHighlight;
}
.btn-warning.dropdown-toggle {
background-color: $btnWarningBackgroundHighlight;
}
.btn-danger.dropdown-toggle {
background-color: $btnDangerBackgroundHighlight;
}
.btn-success.dropdown-toggle {
background-color: $btnSuccessBackgroundHighlight;
}
.btn-info.dropdown-toggle {
background-color: $btnInfoBackgroundHighlight;
}
.btn-inverse.dropdown-toggle {
background-color: $btnInverseBackgroundHighlight;
} }
} }
// Reposition the caret // Reposition the caret
.btn .caret { .btn .caret {
margin-top: 8px;
margin-left: 0; margin-left: 0;
} }
// Carets in other button sizes // Carets in other button sizes
.btn-large .caret { .btn-lg .caret {
margin-top: 6px; border-width: $caret-width-large $caret-width-large 0;
} border-bottom-width: 0;
.btn-large .caret {
border-left-width: 5px;
border-right-width: 5px;
border-top-width: 5px;
}
.btn-mini .caret,
.btn-small .caret {
margin-top: 8px;
} }
// Upside down carets for .dropup // Upside down carets for .dropup
.dropup .btn-large .caret { .dropup .btn-lg .caret {
border-bottom-width: 5px; border-width: 0 $caret-width-large $caret-width-large;
} }
// Account for other colors
.btn-primary,
.btn-warning,
.btn-danger,
.btn-info,
.btn-success,
.btn-inverse {
.caret {
border-top-color: $white;
border-bottom-color: $white;
}
}
// Vertical button groups // Vertical button groups
// ---------------------- // ----------------------
.btn-group-vertical { .btn-group-vertical {
display: inline-block; // makes buttons only take up the width they need > .btn,
@include ie7-inline-block(); > .btn-group,
} > .btn-group > .btn {
.btn-group-vertical > .btn {
display: block; display: block;
float: none; float: none;
width: 100%;
max-width: 100%; max-width: 100%;
@include border-radius(0);
} }
.btn-group-vertical > .btn + .btn {
margin-left: 0; // Clear floats so dropdown menus can be properly placed
> .btn-group {
@include clearfix();
> .btn {
float: none;
}
}
> .btn + .btn,
> .btn + .btn-group,
> .btn-group + .btn,
> .btn-group + .btn-group {
margin-top: -1px; margin-top: -1px;
margin-left: 0;
} }
.btn-group-vertical > .btn:first-child {
@include border-radius($baseBorderRadius $baseBorderRadius 0 0);
} }
.btn-group-vertical > .btn:last-child {
@include border-radius(0 0 $baseBorderRadius $baseBorderRadius); .btn-group-vertical > .btn {
&:not(:first-child):not(:last-child) {
border-radius: 0;
} }
.btn-group-vertical > .btn-large:first-child { &:first-child:not(:last-child) {
@include border-radius($borderRadiusLarge $borderRadiusLarge 0 0); border-top-right-radius: $border-radius-base;
@include border-bottom-radius(0);
} }
.btn-group-vertical > .btn-large:last-child { &:last-child:not(:first-child) {
@include border-radius(0 0 $borderRadiusLarge $borderRadiusLarge); border-bottom-left-radius: $border-radius-base;
@include border-top-radius(0);
}
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child {
> .btn:last-child,
> .dropdown-toggle {
@include border-bottom-radius(0);
}
}
.btn-group-vertical > .btn-group:last-child > .btn:first-child {
@include border-top-radius(0);
}
// Justified button groups
// ----------------------
.btn-group-justified {
display: table;
width: 100%;
table-layout: fixed;
border-collapse: separate;
> .btn,
> .btn-group {
float: none;
display: table-cell;
width: 1%;
}
> .btn-group .btn {
width: 100%;
}
}
// Checkbox and radio options
[data-toggle="buttons"] > .btn > input[type="radio"],
[data-toggle="buttons"] > .btn > input[type="checkbox"] {
display: none;
} }

View file

@ -6,109 +6,138 @@
// Base styles // Base styles
// -------------------------------------------------- // --------------------------------------------------
// Core
.btn { .btn {
display: inline-block; display: inline-block;
@include ie7-inline-block();
padding: 4px 12px;
margin-bottom: 0; // For input.btn margin-bottom: 0; // For input.btn
font-size: $baseFontSize; font-weight: $btn-font-weight;
line-height: $baseLineHeight;
text-align: center; text-align: center;
vertical-align: middle; vertical-align: middle;
cursor: pointer; cursor: pointer;
@include buttonBackground($btnBackground, $btnBackgroundHighlight, $grayDark, 0 1px 1px rgba(255,255,255,.75)); background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid $btnBorder; border: 1px solid transparent;
*border: 0; // Remove the border to prevent IE7's black border on input:focus white-space: nowrap;
border-bottom-color: darken($btnBorder, 10%); @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $border-radius-base);
@include border-radius($baseBorderRadius); @include user-select(none);
@include ie7-restore-left-whitespace(); // Give IE7 some love
@include box-shadow(inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05));
// Hover/focus state
&:hover,
&:focus {
color: $grayDark;
text-decoration: none;
background-position: 0 -15px;
// transition is only when going to hover/focus, otherwise the background
// behind the gradient (there for IE<=9 fallback) gets mismatched
@include transition(background-position .1s linear);
}
// Focus state for keyboard and accessibility
&:focus { &:focus {
@include tab-focus(); @include tab-focus();
} }
// Active state &:hover,
&.active, &:focus {
&:active { color: $btn-default-color;
background-image: none; text-decoration: none;
outline: 0;
@include box-shadow(inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05));
} }
// Disabled state &:active,
&.disabled, &.active {
&[disabled] { outline: 0;
cursor: default;
background-image: none; background-image: none;
@include opacity(65); @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
}
&.disabled,
&[disabled],
fieldset[disabled] & {
cursor: not-allowed;
pointer-events: none; // Future-proof disabling of clicks
@include opacity(.65);
@include box-shadow(none); @include box-shadow(none);
} }
} }
// Alternate buttons
// --------------------------------------------------
.btn-default {
@include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
}
.btn-primary {
@include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
}
// Warning appears as orange
.btn-warning {
@include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);
}
// Danger and error appear as red
.btn-danger {
@include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);
}
// Success appears as green
.btn-success {
@include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
}
// Info appears as blue-green
.btn-info {
@include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);
}
// Link buttons
// -------------------------
// Make a button look and behave like a link
.btn-link {
color: $link-color;
font-weight: normal;
cursor: pointer;
border-radius: 0;
&,
&:active,
&[disabled],
fieldset[disabled] & {
background-color: transparent;
@include box-shadow(none);
}
&,
&:hover,
&:focus,
&:active {
border-color: transparent;
}
&:hover,
&:focus {
color: $link-hover-color;
text-decoration: underline;
background-color: transparent;
}
&[disabled],
fieldset[disabled] & {
&:hover,
&:focus {
color: $btn-link-disabled-color;
text-decoration: none;
}
}
}
// Button Sizes // Button Sizes
// -------------------------------------------------- // --------------------------------------------------
// Large .btn-lg {
.btn-large { // line-height: ensure even-numbered height of button next to large input
padding: $paddingLarge; @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);
font-size: $fontSizeLarge;
@include border-radius($borderRadiusLarge);
} }
.btn-large [class^="icon-"], .btn-sm {
.btn-large [class*=" icon-"] { // line-height: ensure proper height of button next to small input
margin-top: 4px; @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);
} }
.btn-xs {
// Small @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $border-radius-small);
.btn-small {
padding: $paddingSmall;
font-size: $fontSizeSmall;
@include border-radius($borderRadiusSmall);
}
.btn-small [class^="icon-"],
.btn-small [class*=" icon-"] {
margin-top: 0;
}
.btn-mini [class^="icon-"],
.btn-mini [class*=" icon-"] {
margin-top: -1px;
}
// Mini
.btn-mini {
padding: $paddingMini;
font-size: $fontSizeMini;
@include border-radius($borderRadiusSmall);
} }
// Block button // Block button
// ------------------------- // --------------------------------------------------
.btn-block { .btn-block {
display: block; display: block;
width: 100%; width: 100%;
padding-left: 0; padding-left: 0;
padding-right: 0; padding-right: 0;
@include box-sizing(border-box);
} }
// Vertically space out multiple block buttons // Vertically space out multiple block buttons
@ -124,105 +153,3 @@ input[type="button"] {
width: 100%; width: 100%;
} }
} }
// Alternate buttons
// --------------------------------------------------
// Provide *some* extra contrast for those who can get it
.btn-primary.active,
.btn-warning.active,
.btn-danger.active,
.btn-success.active,
.btn-info.active,
.btn-inverse.active {
color: rgba(255,255,255,.75);
}
// Set the backgrounds
// -------------------------
.btn-primary {
@include buttonBackground($btnPrimaryBackground, $btnPrimaryBackgroundHighlight);
}
// Warning appears are orange
.btn-warning {
@include buttonBackground($btnWarningBackground, $btnWarningBackgroundHighlight);
}
// Danger and error appear as red
.btn-danger {
@include buttonBackground($btnDangerBackground, $btnDangerBackgroundHighlight);
}
// Success appears as green
.btn-success {
@include buttonBackground($btnSuccessBackground, $btnSuccessBackgroundHighlight);
}
// Info appears as a neutral blue
.btn-info {
@include buttonBackground($btnInfoBackground, $btnInfoBackgroundHighlight);
}
// Inverse appears as dark gray
.btn-inverse {
@include buttonBackground($btnInverseBackground, $btnInverseBackgroundHighlight);
}
// Cross-browser Jank
// --------------------------------------------------
button.btn,
input[type="submit"].btn {
// Firefox 3.6 only I believe
&::-moz-focus-inner {
padding: 0;
border: 0;
}
// IE7 has some default padding on button controls
*padding-top: 3px;
*padding-bottom: 3px;
&.btn-large {
*padding-top: 7px;
*padding-bottom: 7px;
}
&.btn-small {
*padding-top: 3px;
*padding-bottom: 3px;
}
&.btn-mini {
*padding-top: 1px;
*padding-bottom: 1px;
}
}
// Link buttons
// --------------------------------------------------
// Make a button look and behave like a link
.btn-link,
.btn-link:active,
.btn-link[disabled] {
background-color: transparent;
background-image: none;
@include box-shadow(none);
}
.btn-link {
border-color: transparent;
cursor: pointer;
color: $linkColor;
@include border-radius(0);
}
.btn-link:hover,
.btn-link:focus {
color: $linkColorHover;
text-decoration: underline;
background-color: transparent;
}
.btn-link[disabled]:hover,
.btn-link[disabled]:focus {
color: $grayDark;
text-decoration: none;
}

View file

@ -3,19 +3,15 @@
// -------------------------------------------------- // --------------------------------------------------
// Wrapper for the slide container and indicators
.carousel { .carousel {
position: relative; position: relative;
margin-bottom: $baseLineHeight;
line-height: 1;
} }
.carousel-inner { .carousel-inner {
position: relative;
overflow: hidden; overflow: hidden;
width: 100%; width: 100%;
position: relative;
}
.carousel-inner {
> .item { > .item {
display: none; display: none;
@ -25,7 +21,7 @@
// Account for jankitude on images // Account for jankitude on images
> img, > img,
> a > img { > a > img {
display: block; @include img-responsive();
line-height: 1; line-height: 1;
} }
} }
@ -70,89 +66,167 @@
.carousel-control { .carousel-control {
position: absolute; position: absolute;
top: 40%; top: 0;
left: 15px; left: 0;
width: 40px; bottom: 0;
height: 40px; width: $carousel-control-width;
margin-top: -20px; @include opacity($carousel-control-opacity);
font-size: 60px; font-size: $carousel-control-font-size;
font-weight: 100; color: $carousel-control-color;
line-height: 30px;
color: $white;
text-align: center; text-align: center;
background: $grayDarker; text-shadow: $carousel-text-shadow;
border: 3px solid $white; // We can't have this transition here because WebKit cancels the carousel
@include border-radius(23px); // animation if you trip this while in the middle of another animation.
@include opacity(50);
// we can't have this transition here // Set gradients for backgrounds
// because webkit cancels the carousel &.left {
// animation if you trip this while @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));
// in the middle of another animation }
// ;_;
// .transition(opacity .2s linear);
// Reposition the right one
&.right { &.right {
left: auto; left: auto;
right: 15px; right: 0;
@include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));
} }
// Hover/focus state // Hover/focus state
&:hover, &:hover,
&:focus { &:focus {
color: $white; outline: none;
color: $carousel-control-color;
text-decoration: none; text-decoration: none;
@include opacity(90); @include opacity(.9);
}
// Toggles
.icon-prev,
.icon-next,
.glyphicon-chevron-left,
.glyphicon-chevron-right {
position: absolute;
top: 50%;
z-index: 5;
display: inline-block;
}
.icon-prev,
.glyphicon-chevron-left {
left: 50%;
}
.icon-next,
.glyphicon-chevron-right {
right: 50%;
}
.icon-prev,
.icon-next {
width: 20px;
height: 20px;
margin-top: -10px;
margin-left: -10px;
font-family: serif;
}
.icon-prev {
&:before {
content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
}
}
.icon-next {
&:before {
content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
}
} }
} }
// Carousel indicator pips // Optional indicator pips
// ----------------------------- //
// Add an unordered list with the following class and add a list item for each
// slide your carousel holds.
.carousel-indicators { .carousel-indicators {
position: absolute; position: absolute;
top: 15px; bottom: 10px;
right: 15px; left: 50%;
z-index: 5; z-index: 15;
margin: 0; width: 60%;
margin-left: -30%;
padding-left: 0;
list-style: none; list-style: none;
text-align: center;
li { li {
display: block; display: inline-block;
float: left;
width: 10px; width: 10px;
height: 10px; height: 10px;
margin-left: 5px; margin: 1px;
text-indent: -999px; text-indent: -999px;
background-color: #ccc; border: 1px solid $carousel-indicator-border-color;
background-color: rgba(255,255,255,.25); border-radius: 10px;
border-radius: 5px; cursor: pointer;
// IE8-9 hack for event handling
//
// Internet Explorer 8-9 does not support clicks on elements without a set
// `background-color`. We cannot use `filter` since that's not viewed as a
// background color by the browser. Thus, a hack is needed.
//
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
// set alpha transparency for the best results possible.
background-color: #000 \9; // IE8
background-color: rgba(0,0,0,0); // IE9
} }
.active { .active {
background-color: #fff; margin: 0;
width: 12px;
height: 12px;
background-color: $carousel-indicator-active-bg;
} }
} }
// Caption for text below images // Optional captions
// ----------------------------- // -----------------------------
// Hidden by default for smaller viewports
.carousel-caption { .carousel-caption {
position: absolute; position: absolute;
left: 0; left: 15%;
right: 0; right: 15%;
bottom: 0; bottom: 20px;
padding: 15px; z-index: 10;
background: $grayDark; padding-top: 20px;
background: rgba(0,0,0,.75); padding-bottom: 20px;
color: $carousel-caption-color;
text-align: center;
text-shadow: $carousel-text-shadow;
& .btn {
text-shadow: none; // No shadow for button elements in carousel-caption
} }
.carousel-caption h4,
.carousel-caption p {
color: $white;
line-height: $baseLineHeight;
} }
.carousel-caption h4 {
margin: 0 0 5px;
// Scale up controls for tablets and up
@media screen and (min-width: $screen-sm-min) {
// Scale up the controls a smidge
.carousel-control {
.glyphicons-chevron-left,
.glyphicons-chevron-right,
.icon-prev,
.icon-next {
width: 30px;
height: 30px;
margin-top: -15px;
margin-left: -15px;
font-size: 30px;
}
}
// Show and left align the captions
.carousel-caption {
left: 20%;
right: 20%;
padding-bottom: 30px;
}
// Move up the indicators
.carousel-indicators {
bottom: 20px;
} }
.carousel-caption p {
margin-bottom: 0;
} }

View file

@ -5,19 +5,22 @@
.close { .close {
float: right; float: right;
font-size: 20px; font-size: ($font-size-base * 1.5);
font-weight: bold; font-weight: $close-font-weight;
line-height: $baseLineHeight; line-height: 1;
color: $black; color: $close-color;
text-shadow: 0 1px 0 rgba(255,255,255,1); text-shadow: $close-text-shadow;
@include opacity(20); @include opacity(.2);
&:hover, &:hover,
&:focus { &:focus {
color: $black; color: $close-color;
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
@include opacity(40); @include opacity(.5);
} }
// [converter] extracted button& to button.close
} }
// Additional properties for button version // Additional properties for button version

View file

@ -1,61 +1,53 @@
// //
// Code (inline and blocK) // Code (inline and block)
// -------------------------------------------------- // --------------------------------------------------
// Inline and block code styles // Inline and block code styles
code, code,
pre { kbd,
padding: 0 3px 2px; pre,
@include font-family-monospace; samp {
font-size: $baseFontSize - 2; font-family: $font-family-monospace;
color: $grayDark;
@include border-radius(3px);
} }
// Inline code // Inline code
code { code {
padding: 2px 4px; padding: 2px 4px;
color: #d14; font-size: 90%;
background-color: #f7f7f9; color: $code-color;
border: 1px solid #e1e1e8; background-color: $code-bg;
white-space: nowrap; white-space: nowrap;
border-radius: $border-radius-base;
} }
// Blocks of code // Blocks of code
pre { pre {
display: block; display: block;
padding: ($baseLineHeight - 1) / 2; padding: (($line-height-computed - 1) / 2);
margin: 0 0 $baseLineHeight / 2; margin: 0 0 ($line-height-computed / 2);
font-size: $baseFontSize - 1; // 14px to 13px font-size: ($font-size-base - 1); // 14px to 13px
line-height: $baseLineHeight; line-height: $line-height-base;
word-break: break-all; word-break: break-all;
word-wrap: break-word; word-wrap: break-word;
white-space: pre; color: $pre-color;
white-space: pre-wrap; background-color: $pre-bg;
background-color: #f5f5f5; border: 1px solid $pre-border-color;
border: 1px solid #ccc; // fallback for IE7-8 border-radius: $border-radius-base;
border: 1px solid rgba(0,0,0,.15);
@include border-radius($baseBorderRadius);
// Make prettyprint styles more spaced out for readability
&.prettyprint {
margin-bottom: $baseLineHeight;
}
// Account for some code outputs that place code tags in pre tags // Account for some code outputs that place code tags in pre tags
code { code {
padding: 0; padding: 0;
font-size: inherit;
color: inherit; color: inherit;
white-space: pre;
white-space: pre-wrap; white-space: pre-wrap;
background-color: transparent; background-color: transparent;
border: 0; border-radius: 0;
} }
} }
// Enable scrollable blocks of code // Enable scrollable blocks of code
.pre-scrollable { .pre-scrollable {
max-height: 340px; max-height: $pre-scrollable-max-height;
overflow-y: scroll; overflow-y: scroll;
} }

View file

@ -2,6 +2,10 @@
// Component animations // Component animations
// -------------------------------------------------- // --------------------------------------------------
// Heads up!
//
// We don't use the `.opacity()` mixin here since it causes a bug with text
// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.
.fade { .fade {
opacity: 0; opacity: 0;
@ -12,11 +16,14 @@
} }
.collapse { .collapse {
display: none;
&.in {
display: block;
}
}
.collapsing {
position: relative; position: relative;
height: 0; height: 0;
overflow: hidden; overflow: hidden;
@include transition(height .35s ease); @include transition(height .35s ease);
&.in {
height: auto;
}
} }

View file

@ -3,61 +3,46 @@
// -------------------------------------------------- // --------------------------------------------------
// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns
.dropup,
.dropdown {
position: relative;
}
.dropdown-toggle {
// The caret makes the toggle a bit too tall in IE7
*margin-bottom: -3px;
}
.dropdown-toggle:active,
.open .dropdown-toggle {
outline: 0;
}
// Dropdown arrow/caret // Dropdown arrow/caret
// --------------------
.caret { .caret {
display: inline-block; display: inline-block;
width: 0; width: 0;
height: 0; height: 0;
vertical-align: top; margin-left: 2px;
border-top: 4px solid $black; vertical-align: middle;
border-right: 4px solid transparent; border-top: $caret-width-base solid;
border-left: 4px solid transparent; border-right: $caret-width-base solid transparent;
content: ""; border-left: $caret-width-base solid transparent;
} }
// Place the caret // The dropdown wrapper (div)
.dropdown .caret { .dropdown {
margin-top: 8px; position: relative;
margin-left: 2px; }
// Prevent the focus on the dropdown toggle when closing dropdowns
.dropdown-toggle:focus {
outline: 0;
} }
// The dropdown menu (ul) // The dropdown menu (ul)
// ----------------------
.dropdown-menu { .dropdown-menu {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0; left: 0;
z-index: $zindexDropdown; z-index: $zindex-dropdown;
display: none; // none by default, but block on "open" of the menu display: none; // none by default, but block on "open" of the menu
float: left; float: left;
min-width: 160px; min-width: 160px;
padding: 5px 0; padding: 5px 0;
margin: 2px 0 0; // override default ul margin: 2px 0 0; // override default ul
list-style: none; list-style: none;
background-color: $dropdownBackground; font-size: $font-size-base;
border: 1px solid #ccc; // Fallback for IE7-8 background-color: $dropdown-bg;
border: 1px solid $dropdownBorder; border: 1px solid $dropdown-fallback-border; // IE8 fallback
*border-right-width: 2px; border: 1px solid $dropdown-border;
*border-bottom-width: 2px; border-radius: $border-radius-base;
@include border-radius(6px); @include box-shadow(0 6px 12px rgba(0,0,0,.175));
@include box-shadow(0 5px 10px rgba(0,0,0,.2));
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box; background-clip: padding-box;
// Aligns the dropdown menu to right // Aligns the dropdown menu to right
@ -68,7 +53,7 @@
// Dividers (basically an hr) within the dropdown // Dividers (basically an hr) within the dropdown
.divider { .divider {
@include nav-divider($dropdownDividerTop, $dropdownDividerBottom); @include nav-divider($dropdown-divider-bg);
} }
// Links within the dropdown menu // Links within the dropdown menu
@ -77,81 +62,106 @@
padding: 3px 20px; padding: 3px 20px;
clear: both; clear: both;
font-weight: normal; font-weight: normal;
line-height: $baseLineHeight; line-height: $line-height-base;
color: $dropdownLinkColor; color: $dropdown-link-color;
white-space: nowrap; white-space: nowrap; // prevent links from randomly breaking onto new lines
} }
} }
// Hover/Focus state // Hover/Focus state
// ----------- .dropdown-menu > li > a {
.dropdown-menu > li > a:hover, &:hover,
.dropdown-menu > li > a:focus, &:focus {
.dropdown-submenu:hover > a,
.dropdown-submenu:focus > a {
text-decoration: none; text-decoration: none;
color: $dropdownLinkColorHover; color: $dropdown-link-hover-color;
@include gradient-vertical($dropdownLinkBackgroundHover, darken($dropdownLinkBackgroundHover, 5%)); background-color: $dropdown-link-hover-bg;
}
} }
// Active state // Active state
// ------------ .dropdown-menu > .active > a {
.dropdown-menu > .active > a, &,
.dropdown-menu > .active > a:hover, &:hover,
.dropdown-menu > .active > a:focus { &:focus {
color: $dropdownLinkColorActive; color: $dropdown-link-active-color;
text-decoration: none; text-decoration: none;
outline: 0; outline: 0;
@include gradient-vertical($dropdownLinkBackgroundActive, darken($dropdownLinkBackgroundActive, 5%)); background-color: $dropdown-link-active-bg;
}
} }
// Disabled state // Disabled state
// -------------- //
// Gray out text and ensure the hover/focus state remains gray // Gray out text and ensure the hover/focus state remains gray
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a {
.dropdown-menu > .disabled > a:focus { &,
color: $grayLight; &:hover,
&:focus {
color: $dropdown-link-disabled-color;
}
} }
// Nuke hover/focus effects // Nuke hover/focus effects
.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a {
.dropdown-menu > .disabled > a:focus { &:hover,
&:focus {
text-decoration: none; text-decoration: none;
background-color: transparent; background-color: transparent;
background-image: none; // Remove CSS gradient background-image: none; // Remove CSS gradient
@include reset-filter(); @include reset-filter();
cursor: default; cursor: not-allowed;
}
} }
// Open state for the dropdown // Open state for the dropdown
// ---------------------------
.open { .open {
// IE7's z-index only goes to the nearest positioned ancestor, which would // Show the menu
// make the menu appear below buttons that appeared later on the page > .dropdown-menu {
*z-index: $zindexDropdown;
& > .dropdown-menu {
display: block; display: block;
} }
// Remove the outline when :focus is triggered
> a {
outline: 0;
}
}
// Dropdown section headers
.dropdown-header {
display: block;
padding: 3px 20px;
font-size: $font-size-small;
line-height: $line-height-base;
color: $dropdown-header-color;
}
// Backdrop to catch body clicks on mobile, etc.
.dropdown-backdrop {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: $zindex-dropdown - 10;
} }
// Right aligned dropdowns // Right aligned dropdowns
// ---------------------------
.pull-right > .dropdown-menu { .pull-right > .dropdown-menu {
right: 0; right: 0;
left: auto; left: auto;
} }
// Allow for dropdowns to go bottom up (aka, dropup-menu) // Allow for dropdowns to go bottom up (aka, dropup-menu)
// ------------------------------------------------------ //
// Just add .dropup after the standard .dropdown class and you're set, bro. // Just add .dropup after the standard .dropdown class and you're set, bro.
// TODO: abstract this so that the navbar fixed styles are not placed here? // TODO: abstract this so that the navbar fixed styles are not placed here?
.dropup, .dropup,
.navbar-fixed-bottom .dropdown { .navbar-fixed-bottom .dropdown {
// Reverse the caret // Reverse the caret
.caret { .caret {
border-top: 0; border-top: 0;
border-bottom: 4px solid $black; border-bottom: $caret-width-base solid;
content: ""; content: "";
} }
// Different positioning for bottom up menu // Different positioning for bottom up menu
@ -162,76 +172,17 @@
} }
} }
// Sub menus
// ---------------------------
.dropdown-submenu {
position: relative;
}
// Default dropdowns
.dropdown-submenu > .dropdown-menu {
top: 0;
left: 100%;
margin-top: -6px;
margin-left: -1px;
@include border-radius(0 6px 6px 6px);
}
.dropdown-submenu:hover > .dropdown-menu {
display: block;
}
// Dropups // Component alignment
.dropup .dropdown-submenu > .dropdown-menu { //
top: auto; // Reiterate per navbar.less and the modified component alignment there.
bottom: 0;
margin-top: 0;
margin-bottom: -2px;
@include border-radius(5px 5px 5px 0);
}
// Caret to indicate there is a submenu @media (min-width: $grid-float-breakpoint) {
.dropdown-submenu > a:after { .navbar-right {
display: block; .dropdown-menu {
content: " "; right: 0;
float: right; left: auto;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
border-width: 5px 0 5px 5px;
border-left-color: darken($dropdownBackground, 20%);
margin-top: 5px;
margin-right: -10px;
} }
.dropdown-submenu:hover > a:after {
border-left-color: $dropdownLinkColorHover;
}
// Left aligned submenus
.dropdown-submenu.pull-left {
// Undo the float
// Yes, this is awkward since .pull-left adds a float, but it sticks to our conventions elsewhere.
float: none;
// Positioning the submenu
> .dropdown-menu {
left: -100%;
margin-left: 10px;
@include border-radius(6px 0 6px 6px);
} }
} }
// Tweak nav headers
// -----------------
// Increase padding from 15px to 20px on sides
.dropdown .dropdown-menu .nav-header {
padding-left: 20px;
padding-right: 20px;
}
// Typeahead
// ---------
.typeahead {
z-index: 1051;
margin-top: 2px; // give it some space to breathe
@include border-radius($baseBorderRadius);
}

View file

@ -3,13 +3,9 @@
// -------------------------------------------------- // --------------------------------------------------
// GENERAL STYLES // Normalize non-controls
// -------------- //
// Restyle and baseline non-control form elements.
// Make all forms have space below them
form {
margin: 0 0 $baseLineHeight;
}
fieldset { fieldset {
padding: 0; padding: 0;
@ -17,153 +13,43 @@ fieldset {
border: 0; border: 0;
} }
// Groups of fields with labels on top (legends)
legend { legend {
display: block; display: block;
width: 100%; width: 100%;
padding: 0; padding: 0;
margin-bottom: $baseLineHeight; margin-bottom: $line-height-computed;
font-size: $baseFontSize * 1.5; font-size: ($font-size-base * 1.5);
line-height: $baseLineHeight * 2; line-height: inherit;
color: $grayDark; color: $legend-color;
border: 0; border: 0;
border-bottom: 1px solid #e5e5e5; border-bottom: 1px solid $legend-border-color;
// Small
small {
font-size: $baseLineHeight * .75;
color: $grayLight;
}
} }
// Set font for forms
label,
input,
button,
select,
textarea {
@include font-shorthand($baseFontSize, normal, $baseLineHeight); // Set size, weight, line-height here
}
input,
button,
select,
textarea {
font-family: $baseFontFamily; // And only set font-family here for those that need it (note the missing label element)
}
// Identify controls by their labels
label { label {
display: block;
margin-bottom: 5px;
}
// Form controls
// -------------------------
// Shared size and type resets
select,
textarea,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
input[type="color"],
.uneditable-input {
display: inline-block; display: inline-block;
height: $baseLineHeight; margin-bottom: 5px;
padding: 4px 6px; font-weight: bold;
margin-bottom: $baseLineHeight / 2;;
font-size: $baseFontSize;
line-height: $baseLineHeight;
color: $gray;
@include border-radius($inputBorderRadius);
vertical-align: middle;
} }
// Reset appearance properties for textual inputs and textarea
// Declare width for legacy (can't be on input[type=*] selectors or it's too specific)
input,
textarea,
.uneditable-input {
width: 206px; // plus 12px padding and 2px border
}
// Reset height since textareas have rows
textarea {
height: auto;
}
// Everything else
textarea,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
input[type="color"],
.uneditable-input {
background-color: $inputBackground;
border: 1px solid $inputBorder;
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
@include transition(border linear .2s, box-shadow linear .2s);
// Focus state // Normalize form controls
&:focus {
border-color: rgba(82,168,236,.8); // Override content-box in Normalize (* isn't specific enough)
outline: 0; input[type="search"] {
outline: thin dotted \9; /* IE6-9 */ @include box-sizing(border-box);
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6));
}
} }
// Position radios and checkboxes better // Position radios and checkboxes better
input[type="radio"], input[type="radio"],
input[type="checkbox"] { input[type="checkbox"] {
margin: 4px 0 0; margin: 4px 0 0;
*margin-top: 0; /* IE7 */
margin-top: 1px \9; /* IE8-9 */ margin-top: 1px \9; /* IE8-9 */
line-height: normal; line-height: normal;
} }
// Reset width of input images, buttons, radios, checkboxes
input[type="file"],
input[type="image"],
input[type="submit"],
input[type="reset"],
input[type="button"],
input[type="radio"],
input[type="checkbox"] {
width: auto; // Override of generic input selector
}
// Set the height of select and file controls to match text inputs // Set the height of select and file controls to match text inputs
select,
input[type="file"] { input[type="file"] {
height: $inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */ display: block;
*margin-top: 4px; /* For IE7, add top margin to align select with labels */
line-height: $inputHeight;
}
// Make select elements obey height by applying a border
select {
width: 220px; // default input width + 10px of padding that doesn't get applied
border: 1px solid $inputBorder;
background-color: $inputBackground; // Chrome on Linux and Mobile Safari need background-color
} }
// Make multiple select elements height not fixed // Make multiple select elements height not fixed
@ -172,518 +58,317 @@ select[size] {
height: auto; height: auto;
} }
// Fix optgroup Firefox bug per https://github.com/twbs/bootstrap/issues/7611
select optgroup {
font-size: inherit;
font-style: inherit;
font-family: inherit;
}
// Focus for select, file, radio, and checkbox // Focus for select, file, radio, and checkbox
select:focus,
input[type="file"]:focus, input[type="file"]:focus,
input[type="radio"]:focus, input[type="radio"]:focus,
input[type="checkbox"]:focus { input[type="checkbox"]:focus {
@include tab-focus(); @include tab-focus();
} }
// Fix for Chrome number input
// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.
// See https://github.com/twbs/bootstrap/issues/8350 for more.
input[type="number"] {
&::-webkit-outer-spin-button,
&::-webkit-inner-spin-button {
height: auto;
}
}
// Uneditable inputs // Adjust output element
// ------------------------- output {
display: block;
padding-top: ($padding-base-vertical + 1);
font-size: $font-size-base;
line-height: $line-height-base;
color: $input-color;
vertical-align: middle;
}
// Make uneditable inputs look inactive
.uneditable-input, // Common form controls
.uneditable-textarea { //
color: $grayLight; // Shared size and type resets for form controls. Apply `.form-control` to any
background-color: darken($inputBackground, 1%); // of the following form controls:
border-color: $inputBorder; //
@include box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); // select
// textarea
// input[type="text"]
// input[type="password"]
// input[type="datetime"]
// input[type="datetime-local"]
// input[type="date"]
// input[type="month"]
// input[type="time"]
// input[type="week"]
// input[type="number"]
// input[type="email"]
// input[type="url"]
// input[type="search"]
// input[type="tel"]
// input[type="color"]
.form-control {
display: block;
width: 100%;
height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
padding: $padding-base-vertical $padding-base-horizontal;
font-size: $font-size-base;
line-height: $line-height-base;
color: $input-color;
vertical-align: middle;
background-color: $input-bg;
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid $input-border;
border-radius: $input-border-radius;
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
@include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);
// Customize the `:focus` state to imitate native WebKit styles.
@include form-control-focus();
// Placeholder
//
// Placeholder text gets special styles because when browsers invalidate entire
// lines if it doesn't understand a selector/
@include placeholder();
// Disabled and read-only inputs
// Note: HTML5 says that controls under a fieldset > legend:first-child won't
// be disabled if the fieldset is disabled. Due to implementation difficulty,
// we don't honor that edge case; we style them as disabled anyway.
&[disabled],
&[readonly],
fieldset[disabled] & {
cursor: not-allowed; cursor: not-allowed;
background-color: $input-bg-disabled;
} }
// For text that needs to appear as an input but should not be an input // [converter] extracted textarea& to textarea.form-control
.uneditable-input {
overflow: hidden; // prevent text from wrapping, but still cut it off like an input does
white-space: nowrap;
} }
// Make uneditable textareas behave like a textarea // Reset height for `textarea`s
.uneditable-textarea { textarea.form-control {
width: auto;
height: auto; height: auto;
} }
// Placeholder // Form groups
// ------------------------- //
// Designed to help with the organization and spacing of vertical forms. For
// horizontal forms, use the predefined grid classes.
// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector .form-group {
input, margin-bottom: 15px;
textarea {
@include placeholder();
} }
// CHECKBOXES & RADIOS // Checkboxes and radios
// ------------------- //
// Indent the labels to position radios/checkboxes as hanging controls.
// Indent the labels to position radios/checkboxes as hanging
.radio, .radio,
.checkbox { .checkbox {
min-height: $baseLineHeight; // clear the floating input if there is no label text display: block;
min-height: $line-height-computed; // clear the floating input if there is no label text
margin-top: 10px;
margin-bottom: 10px;
padding-left: 20px; padding-left: 20px;
vertical-align: middle;
label {
display: inline;
margin-bottom: 0;
font-weight: normal;
cursor: pointer;
}
} }
.radio input[type="radio"], .radio input[type="radio"],
.checkbox input[type="checkbox"] { .radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
float: left; float: left;
margin-left: -20px; margin-left: -20px;
} }
.radio + .radio,
// Move the options list down to align with labels .checkbox + .checkbox {
.controls > .radio:first-child, margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
.controls > .checkbox:first-child {
padding-top: 5px; // has to be padding because margin collaspes
} }
// Radios and checkboxes on same line // Radios and checkboxes on same line
// TODO v3: Convert .inline to .control-inline .radio-inline,
.radio.inline, .checkbox-inline {
.checkbox.inline {
display: inline-block; display: inline-block;
padding-top: 5px; padding-left: 20px;
margin-bottom: 0; margin-bottom: 0;
vertical-align: middle; vertical-align: middle;
font-weight: normal;
cursor: pointer;
} }
.radio.inline + .radio.inline, .radio-inline + .radio-inline,
.checkbox.inline + .checkbox.inline { .checkbox-inline + .checkbox-inline {
margin-top: 0;
margin-left: 10px; // space out consecutive inline controls margin-left: 10px; // space out consecutive inline controls
} }
// Apply same disabled cursor tweak as for inputs
//
// INPUT SIZES // Note: Neither radios nor checkboxes can be readonly.
// ----------- input[type="radio"],
input[type="checkbox"],
// General classes for quick sizes .radio,
.input-mini { width: 60px; } .radio-inline,
.input-small { width: 90px; } .checkbox,
.input-medium { width: 150px; } .checkbox-inline {
.input-large { width: 210px; } &[disabled],
.input-xlarge { width: 270px; } fieldset[disabled] & {
.input-xxlarge { width: 530px; }
// Grid style input sizes
input[class*="span"],
select[class*="span"],
textarea[class*="span"],
.uneditable-input[class*="span"],
// Redeclare since the fluid row class is more specific
.row-fluid input[class*="span"],
.row-fluid select[class*="span"],
.row-fluid textarea[class*="span"],
.row-fluid .uneditable-input[class*="span"] {
float: none;
margin-left: 0;
}
// Ensure input-prepend/append never wraps
.input-append input[class*="span"],
.input-append .uneditable-input[class*="span"],
.input-prepend input[class*="span"],
.input-prepend .uneditable-input[class*="span"],
.row-fluid input[class*="span"],
.row-fluid select[class*="span"],
.row-fluid textarea[class*="span"],
.row-fluid .uneditable-input[class*="span"],
.row-fluid .input-prepend [class*="span"],
.row-fluid .input-append [class*="span"] {
display: inline-block;
}
// GRID SIZING FOR INPUTS
// ----------------------
// Grid sizes
@include grid-input($gridColumnWidth, $gridGutterWidth);
// Control row for multiple inputs per line
.controls-row {
@include clearfix(); // Clear the float from controls
}
// Float to collapse white-space for proper grid alignment
.controls-row [class*="span"],
// Redeclare the fluid grid collapse since we undo the float for inputs
.row-fluid .controls-row [class*="span"] {
float: left;
}
// Explicity set top padding on all checkboxes/radios, not just first-child
.controls-row .checkbox[class*="span"],
.controls-row .radio[class*="span"] {
padding-top: 5px;
}
// DISABLED STATE
// --------------
// Disabled and read-only inputs
input[disabled],
select[disabled],
textarea[disabled],
input[readonly],
select[readonly],
textarea[readonly] {
cursor: not-allowed; cursor: not-allowed;
background-color: $inputDisabledBackground;
} }
// Explicitly reset the colors here
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"][readonly],
input[type="checkbox"][readonly] {
background-color: transparent;
} }
// Form control sizing
@include input-size('.input-sm', $input-height-small, $padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);
@include input-size('.input-lg', $input-height-large, $padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);
// Form control feedback states
// FORM FIELD FEEDBACK STATES //
// -------------------------- // Apply contextual and semantic states to individual form controls.
// Warning // Warning
.control-group.warning { .has-warning {
@include formFieldState($warningText, $warningText, $warningBackground); @include form-control-validation($state-warning-text, $state-warning-text, $state-warning-bg);
} }
// Error // Error
.control-group.error { .has-error {
@include formFieldState($errorText, $errorText, $errorBackground); @include form-control-validation($state-danger-text, $state-danger-text, $state-danger-bg);
} }
// Success // Success
.control-group.success { .has-success {
@include formFieldState($successText, $successText, $successBackground); @include form-control-validation($state-success-text, $state-success-text, $state-success-bg);
}
// Info
.control-group.info {
@include formFieldState($infoText, $infoText, $infoBackground);
}
// HTML5 invalid states
// Shares styles with the .control-group.error above
input:focus:invalid,
textarea:focus:invalid,
select:focus:invalid {
color: #b94a48;
border-color: #ee5f5b;
&:focus {
border-color: darken(#ee5f5b, 10%);
@include box-shadow(0 0 6px lighten(#ee5f5b, 20%));
}
} }
// Static form control text
//
// Apply class to a `p` element to make any string of text align with labels in
// a horizontal form layout.
// FORM ACTIONS .form-control-static {
// ------------ margin-bottom: 0; // Remove default margin from `p`
.form-actions {
padding: ($baseLineHeight - 1) 20px $baseLineHeight;
margin-top: $baseLineHeight;
margin-bottom: $baseLineHeight;
background-color: $formActionsBackground;
border-top: 1px solid #e5e5e5;
@include clearfix(); // Adding clearfix to allow for .pull-right button containers
} }
// Help text
// HELP TEXT //
// --------- // Apply to any element you wish to create light text for placement immediately
// below a form control. Use for general help, formatting, or instructional text.
.help-block,
.help-inline {
color: lighten($textColor, 15%); // lighten the text some for contrast
}
.help-block { .help-block {
display: block; // account for any element using help-block display: block; // account for any element using help-block
margin-bottom: $baseLineHeight / 2; margin-top: 5px;
margin-bottom: 10px;
color: lighten($text-color, 25%); // lighten the text some for contrast
} }
.help-inline {
// Inline forms
//
// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
// forms begin stacked on extra small (mobile) devices and then go inline when
// viewports reach <768px.
//
// Requires wrapping inputs and labels with `.form-group` for proper display of
// default HTML form controls and our custom form controls (e.g., input groups).
//
// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
.form-inline {
// Kick in the inline
@media (min-width: $screen-sm) {
// Inline-block all the things for "inline"
.form-group {
display: inline-block; display: inline-block;
@include ie7-inline-block(); margin-bottom: 0;
vertical-align: middle; vertical-align: middle;
padding-left: 5px;
} }
// In navbar-form, allow folks to *not* use `.form-group`
.form-control {
// INPUT GROUPS
// ------------
// Allow us to put symbols and text within the input field for a cleaner look
.input-append,
.input-prepend {
display: inline-block; display: inline-block;
margin-bottom: $baseLineHeight / 2;
vertical-align: middle;
font-size: 0; // white space collapse hack
white-space: nowrap; // Prevent span and input from separating
// Reset the white space collapse hack
input,
select,
.uneditable-input,
.dropdown-menu,
.popover {
font-size: $baseFontSize;
} }
input, // Override `width: 100%;` when not within a `.form-group`
select, select.form-control {
.uneditable-input {
position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness
margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms
*margin-left: 0;
vertical-align: top;
@include border-radius(0 $inputBorderRadius $inputBorderRadius 0);
// Make input on top when focused so blue border and shadow always show
&:focus {
z-index: 2;
}
}
.add-on {
display: inline-block;
width: auto; width: auto;
height: $baseLineHeight;
min-width: 16px;
padding: 4px 5px;
font-size: $baseFontSize;
font-weight: normal;
line-height: $baseLineHeight;
text-align: center;
text-shadow: 0 1px 0 $white;
background-color: $grayLighter;
border: 1px solid #ccc;
}
.add-on,
.btn,
.btn-group > .dropdown-toggle {
vertical-align: top;
@include border-radius(0);
}
.active {
background-color: lighten($green, 30);
border-color: $green;
}
} }
.input-prepend { // Remove default margin on radios/checkboxes that were used for stacking, and
.add-on, // then undo the floating of radios and checkboxes to match (which also avoids
.btn { // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
margin-right: -1px; .radio,
} .checkbox {
.add-on:first-child,
.btn:first-child {
// FYI, `.btn:first-child` accounts for a button group that's prepended
@include border-radius($inputBorderRadius 0 0 $inputBorderRadius);
}
}
.input-append {
input,
select,
.uneditable-input {
@include border-radius($inputBorderRadius 0 0 $inputBorderRadius);
+ .btn-group .btn:last-child {
@include border-radius(0 $inputBorderRadius $inputBorderRadius 0);
}
}
.add-on,
.btn,
.btn-group {
margin-left: -1px;
}
.add-on:last-child,
.btn:last-child,
.btn-group:last-child > .dropdown-toggle {
@include border-radius(0 $inputBorderRadius $inputBorderRadius 0);
}
}
// Remove all border-radius for inputs with both prepend and append
.input-prepend.input-append {
input,
select,
.uneditable-input {
@include border-radius(0);
+ .btn-group .btn {
@include border-radius(0 $inputBorderRadius $inputBorderRadius 0);
}
}
.add-on:first-child,
.btn:first-child {
margin-right: -1px;
@include border-radius($inputBorderRadius 0 0 $inputBorderRadius);
}
.add-on:last-child,
.btn:last-child {
margin-left: -1px;
@include border-radius(0 $inputBorderRadius $inputBorderRadius 0);
}
.btn-group:first-child {
margin-left: 0;
}
}
// SEARCH FORM
// -----------
input.search-query {
padding-right: 14px;
padding-right: 4px \9;
padding-left: 14px;
padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */
margin-bottom: 0; // Remove the default margin on all inputs
@include border-radius(15px);
}
/* Allow for input prepend/append in search forms */
.form-search .input-append .search-query,
.form-search .input-prepend .search-query {
@include border-radius(0); // Override due to specificity
}
.form-search .input-append .search-query {
@include border-radius(14px 0 0 14px);
}
.form-search .input-append .btn {
@include border-radius(0 14px 14px 0);
}
.form-search .input-prepend .search-query {
@include border-radius(0 14px 14px 0);
}
.form-search .input-prepend .btn {
@include border-radius(14px 0 0 14px);
}
// HORIZONTAL & VERTICAL FORMS
// ---------------------------
// Common properties
// -----------------
.form-search,
.form-inline,
.form-horizontal {
input,
textarea,
select,
.help-inline,
.uneditable-input,
.input-prepend,
.input-append {
display: inline-block; display: inline-block;
@include ie7-inline-block(); margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
vertical-align: middle;
}
// Re-hide hidden elements due to specifity
.hide {
display: none;
}
}
.form-search label,
.form-inline label,
.form-search .btn-group,
.form-inline .btn-group {
display: inline-block;
}
// Remove margin for input-prepend/-append
.form-search .input-append,
.form-inline .input-append,
.form-search .input-prepend,
.form-inline .input-prepend {
margin-bottom: 0;
}
// Inline checkbox/radio labels (remove padding on left)
.form-search .radio,
.form-search .checkbox,
.form-inline .radio,
.form-inline .checkbox {
padding-left: 0; padding-left: 0;
margin-bottom: 0;
vertical-align: middle;
} }
// Remove float and margin, set to inline-block .radio input[type="radio"],
.form-search .radio input[type="radio"], .checkbox input[type="checkbox"] {
.form-search .checkbox input[type="checkbox"], float: none;
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
float: left;
margin-right: 3px;
margin-left: 0; margin-left: 0;
} }
}
// Margin to space out fieldsets
.control-group {
margin-bottom: $baseLineHeight / 2;
} }
// Legend collapses margin, so next element is responsible for spacing
legend + .control-group {
margin-top: $baseLineHeight;
-webkit-margin-top-collapse: separate;
}
// Horizontal-specific styles // Horizontal forms
// -------------------------- //
// Horizontal forms are built on grid classes and allow you to create forms with
// labels on the left and inputs on the right.
.form-horizontal { .form-horizontal {
// Increase spacing between groups
.control-group { // Consistent vertical alignment of labels, radios, and checkboxes
margin-bottom: $baseLineHeight; .control-label,
@include clearfix(); .radio,
.checkbox,
.radio-inline,
.checkbox-inline {
margin-top: 0;
margin-bottom: 0;
padding-top: ($padding-base-vertical + 1); // Default padding plus a border
} }
// Float the labels left // Account for padding we're adding to ensure the alignment and of help text
// and other content below items
.radio,
.checkbox {
min-height: $line-height-computed + ($padding-base-vertical + 1);
}
// Make form groups behave like rows
.form-group {
@include make-row();
}
.form-control-static {
padding-top: ($padding-base-vertical + 1);
}
// Only right align form labels here when the columns stop stacking
@media (min-width: $screen-sm-min) {
.control-label { .control-label {
float: left;
width: $horizontalComponentOffset - 20;
padding-top: 5px;
text-align: right; text-align: right;
} }
// Move over all input controls and content
.controls {
// Super jank IE7 fix to ensure the inputs in .input-append and input-prepend
// don't inherit the margin of the parent, in this case .controls
*display: inline-block;
*padding-left: 20px;
margin-left: $horizontalComponentOffset;
*margin-left: 0;
&:first-child {
*padding-left: $horizontalComponentOffset;
}
}
// Remove bottom margin on block level help text since that's accounted for on .control-group
.help-block {
margin-bottom: 0;
}
// And apply it only to .help-block instances that follow a form control
input,
select,
textarea,
.uneditable-input,
.input-prepend,
.input-append {
+ .help-block {
margin-top: $baseLineHeight / 2;
}
}
// Move over buttons in .form-actions to align with .controls
.form-actions {
padding-left: $horizontalComponentOffset;
} }
} }

View file

@ -0,0 +1,237 @@
//
// Glyphicons for Bootstrap
//
// Since icons are fonts, they can be placed anywhere text is placed and are
// thus automatically sized to match the surrounding child. To use, create an
// inline element with the appropriate classes, like so:
//
// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
// Import the fonts
@font-face {
font-family: 'Glyphicons Halflings';
src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'), '#{$icon-font-path}#{$icon-font-name}.eot'));
src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot?#iefix'), '#{$icon-font-path}#{$icon-font-name}.eot?#iefix')) format('embedded-opentype'),
url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff'), '#{$icon-font-path}#{$icon-font-name}.woff')) format('woff'),
url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.ttf'), '#{$icon-font-path}#{$icon-font-name}.ttf')) format('truetype'),
url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.svg#glyphicons-halflingsregular'), '#{$icon-font-path}#{$icon-font-name}.svg#glyphicons-halflingsregular')) format('svg');
}
// Catchall baseclass
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
&:empty {
width: 1em;
}
}
// Individual icons
.glyphicon-asterisk { &:before { content: "\2a"; } }
.glyphicon-plus { &:before { content: "\2b"; } }
.glyphicon-euro { &:before { content: "\20ac"; } }
.glyphicon-minus { &:before { content: "\2212"; } }
.glyphicon-cloud { &:before { content: "\2601"; } }
.glyphicon-envelope { &:before { content: "\2709"; } }
.glyphicon-pencil { &:before { content: "\270f"; } }
.glyphicon-glass { &:before { content: "\e001"; } }
.glyphicon-music { &:before { content: "\e002"; } }
.glyphicon-search { &:before { content: "\e003"; } }
.glyphicon-heart { &:before { content: "\e005"; } }
.glyphicon-star { &:before { content: "\e006"; } }
.glyphicon-star-empty { &:before { content: "\e007"; } }
.glyphicon-user { &:before { content: "\e008"; } }
.glyphicon-film { &:before { content: "\e009"; } }
.glyphicon-th-large { &:before { content: "\e010"; } }
.glyphicon-th { &:before { content: "\e011"; } }
.glyphicon-th-list { &:before { content: "\e012"; } }
.glyphicon-ok { &:before { content: "\e013"; } }
.glyphicon-remove { &:before { content: "\e014"; } }
.glyphicon-zoom-in { &:before { content: "\e015"; } }
.glyphicon-zoom-out { &:before { content: "\e016"; } }
.glyphicon-off { &:before { content: "\e017"; } }
.glyphicon-signal { &:before { content: "\e018"; } }
.glyphicon-cog { &:before { content: "\e019"; } }
.glyphicon-trash { &:before { content: "\e020"; } }
.glyphicon-home { &:before { content: "\e021"; } }
.glyphicon-file { &:before { content: "\e022"; } }
.glyphicon-time { &:before { content: "\e023"; } }
.glyphicon-road { &:before { content: "\e024"; } }
.glyphicon-download-alt { &:before { content: "\e025"; } }
.glyphicon-download { &:before { content: "\e026"; } }
.glyphicon-upload { &:before { content: "\e027"; } }
.glyphicon-inbox { &:before { content: "\e028"; } }
.glyphicon-play-circle { &:before { content: "\e029"; } }
.glyphicon-repeat { &:before { content: "\e030"; } }
.glyphicon-refresh { &:before { content: "\e031"; } }
.glyphicon-list-alt { &:before { content: "\e032"; } }
.glyphicon-lock { &:before { content: "\e033"; } }
.glyphicon-flag { &:before { content: "\e034"; } }
.glyphicon-headphones { &:before { content: "\e035"; } }
.glyphicon-volume-off { &:before { content: "\e036"; } }
.glyphicon-volume-down { &:before { content: "\e037"; } }
.glyphicon-volume-up { &:before { content: "\e038"; } }
.glyphicon-qrcode { &:before { content: "\e039"; } }
.glyphicon-barcode { &:before { content: "\e040"; } }
.glyphicon-tag { &:before { content: "\e041"; } }
.glyphicon-tags { &:before { content: "\e042"; } }
.glyphicon-book { &:before { content: "\e043"; } }
.glyphicon-bookmark { &:before { content: "\e044"; } }
.glyphicon-print { &:before { content: "\e045"; } }
.glyphicon-camera { &:before { content: "\e046"; } }
.glyphicon-font { &:before { content: "\e047"; } }
.glyphicon-bold { &:before { content: "\e048"; } }
.glyphicon-italic { &:before { content: "\e049"; } }
.glyphicon-text-height { &:before { content: "\e050"; } }
.glyphicon-text-width { &:before { content: "\e051"; } }
.glyphicon-align-left { &:before { content: "\e052"; } }
.glyphicon-align-center { &:before { content: "\e053"; } }
.glyphicon-align-right { &:before { content: "\e054"; } }
.glyphicon-align-justify { &:before { content: "\e055"; } }
.glyphicon-list { &:before { content: "\e056"; } }
.glyphicon-indent-left { &:before { content: "\e057"; } }
.glyphicon-indent-right { &:before { content: "\e058"; } }
.glyphicon-facetime-video { &:before { content: "\e059"; } }
.glyphicon-picture { &:before { content: "\e060"; } }
.glyphicon-map-marker { &:before { content: "\e062"; } }
.glyphicon-adjust { &:before { content: "\e063"; } }
.glyphicon-tint { &:before { content: "\e064"; } }
.glyphicon-edit { &:before { content: "\e065"; } }
.glyphicon-share { &:before { content: "\e066"; } }
.glyphicon-check { &:before { content: "\e067"; } }
.glyphicon-move { &:before { content: "\e068"; } }
.glyphicon-step-backward { &:before { content: "\e069"; } }
.glyphicon-fast-backward { &:before { content: "\e070"; } }
.glyphicon-backward { &:before { content: "\e071"; } }
.glyphicon-play { &:before { content: "\e072"; } }
.glyphicon-pause { &:before { content: "\e073"; } }
.glyphicon-stop { &:before { content: "\e074"; } }
.glyphicon-forward { &:before { content: "\e075"; } }
.glyphicon-fast-forward { &:before { content: "\e076"; } }
.glyphicon-step-forward { &:before { content: "\e077"; } }
.glyphicon-eject { &:before { content: "\e078"; } }
.glyphicon-chevron-left { &:before { content: "\e079"; } }
.glyphicon-chevron-right { &:before { content: "\e080"; } }
.glyphicon-plus-sign { &:before { content: "\e081"; } }
.glyphicon-minus-sign { &:before { content: "\e082"; } }
.glyphicon-remove-sign { &:before { content: "\e083"; } }
.glyphicon-ok-sign { &:before { content: "\e084"; } }
.glyphicon-question-sign { &:before { content: "\e085"; } }
.glyphicon-info-sign { &:before { content: "\e086"; } }
.glyphicon-screenshot { &:before { content: "\e087"; } }
.glyphicon-remove-circle { &:before { content: "\e088"; } }
.glyphicon-ok-circle { &:before { content: "\e089"; } }
.glyphicon-ban-circle { &:before { content: "\e090"; } }
.glyphicon-arrow-left { &:before { content: "\e091"; } }
.glyphicon-arrow-right { &:before { content: "\e092"; } }
.glyphicon-arrow-up { &:before { content: "\e093"; } }
.glyphicon-arrow-down { &:before { content: "\e094"; } }
.glyphicon-share-alt { &:before { content: "\e095"; } }
.glyphicon-resize-full { &:before { content: "\e096"; } }
.glyphicon-resize-small { &:before { content: "\e097"; } }
.glyphicon-exclamation-sign { &:before { content: "\e101"; } }
.glyphicon-gift { &:before { content: "\e102"; } }
.glyphicon-leaf { &:before { content: "\e103"; } }
.glyphicon-fire { &:before { content: "\e104"; } }
.glyphicon-eye-open { &:before { content: "\e105"; } }
.glyphicon-eye-close { &:before { content: "\e106"; } }
.glyphicon-warning-sign { &:before { content: "\e107"; } }
.glyphicon-plane { &:before { content: "\e108"; } }
.glyphicon-calendar { &:before { content: "\e109"; } }
.glyphicon-random { &:before { content: "\e110"; } }
.glyphicon-comment { &:before { content: "\e111"; } }
.glyphicon-magnet { &:before { content: "\e112"; } }
.glyphicon-chevron-up { &:before { content: "\e113"; } }
.glyphicon-chevron-down { &:before { content: "\e114"; } }
.glyphicon-retweet { &:before { content: "\e115"; } }
.glyphicon-shopping-cart { &:before { content: "\e116"; } }
.glyphicon-folder-close { &:before { content: "\e117"; } }
.glyphicon-folder-open { &:before { content: "\e118"; } }
.glyphicon-resize-vertical { &:before { content: "\e119"; } }
.glyphicon-resize-horizontal { &:before { content: "\e120"; } }
.glyphicon-hdd { &:before { content: "\e121"; } }
.glyphicon-bullhorn { &:before { content: "\e122"; } }
.glyphicon-bell { &:before { content: "\e123"; } }
.glyphicon-certificate { &:before { content: "\e124"; } }
.glyphicon-thumbs-up { &:before { content: "\e125"; } }
.glyphicon-thumbs-down { &:before { content: "\e126"; } }
.glyphicon-hand-right { &:before { content: "\e127"; } }
.glyphicon-hand-left { &:before { content: "\e128"; } }
.glyphicon-hand-up { &:before { content: "\e129"; } }
.glyphicon-hand-down { &:before { content: "\e130"; } }
.glyphicon-circle-arrow-right { &:before { content: "\e131"; } }
.glyphicon-circle-arrow-left { &:before { content: "\e132"; } }
.glyphicon-circle-arrow-up { &:before { content: "\e133"; } }
.glyphicon-circle-arrow-down { &:before { content: "\e134"; } }
.glyphicon-globe { &:before { content: "\e135"; } }
.glyphicon-wrench { &:before { content: "\e136"; } }
.glyphicon-tasks { &:before { content: "\e137"; } }
.glyphicon-filter { &:before { content: "\e138"; } }
.glyphicon-briefcase { &:before { content: "\e139"; } }
.glyphicon-fullscreen { &:before { content: "\e140"; } }
.glyphicon-dashboard { &:before { content: "\e141"; } }
.glyphicon-paperclip { &:before { content: "\e142"; } }
.glyphicon-heart-empty { &:before { content: "\e143"; } }
.glyphicon-link { &:before { content: "\e144"; } }
.glyphicon-phone { &:before { content: "\e145"; } }
.glyphicon-pushpin { &:before { content: "\e146"; } }
.glyphicon-usd { &:before { content: "\e148"; } }
.glyphicon-gbp { &:before { content: "\e149"; } }
.glyphicon-sort { &:before { content: "\e150"; } }
.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } }
.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } }
.glyphicon-sort-by-order { &:before { content: "\e153"; } }
.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } }
.glyphicon-sort-by-attributes { &:before { content: "\e155"; } }
.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } }
.glyphicon-unchecked { &:before { content: "\e157"; } }
.glyphicon-expand { &:before { content: "\e158"; } }
.glyphicon-collapse-down { &:before { content: "\e159"; } }
.glyphicon-collapse-up { &:before { content: "\e160"; } }
.glyphicon-log-in { &:before { content: "\e161"; } }
.glyphicon-flash { &:before { content: "\e162"; } }
.glyphicon-log-out { &:before { content: "\e163"; } }
.glyphicon-new-window { &:before { content: "\e164"; } }
.glyphicon-record { &:before { content: "\e165"; } }
.glyphicon-save { &:before { content: "\e166"; } }
.glyphicon-open { &:before { content: "\e167"; } }
.glyphicon-saved { &:before { content: "\e168"; } }
.glyphicon-import { &:before { content: "\e169"; } }
.glyphicon-export { &:before { content: "\e170"; } }
.glyphicon-send { &:before { content: "\e171"; } }
.glyphicon-floppy-disk { &:before { content: "\e172"; } }
.glyphicon-floppy-saved { &:before { content: "\e173"; } }
.glyphicon-floppy-remove { &:before { content: "\e174"; } }
.glyphicon-floppy-save { &:before { content: "\e175"; } }
.glyphicon-floppy-open { &:before { content: "\e176"; } }
.glyphicon-credit-card { &:before { content: "\e177"; } }
.glyphicon-transfer { &:before { content: "\e178"; } }
.glyphicon-cutlery { &:before { content: "\e179"; } }
.glyphicon-header { &:before { content: "\e180"; } }
.glyphicon-compressed { &:before { content: "\e181"; } }
.glyphicon-earphone { &:before { content: "\e182"; } }
.glyphicon-phone-alt { &:before { content: "\e183"; } }
.glyphicon-tower { &:before { content: "\e184"; } }
.glyphicon-stats { &:before { content: "\e185"; } }
.glyphicon-sd-video { &:before { content: "\e186"; } }
.glyphicon-hd-video { &:before { content: "\e187"; } }
.glyphicon-subtitles { &:before { content: "\e188"; } }
.glyphicon-sound-stereo { &:before { content: "\e189"; } }
.glyphicon-sound-dolby { &:before { content: "\e190"; } }
.glyphicon-sound-5-1 { &:before { content: "\e191"; } }
.glyphicon-sound-6-1 { &:before { content: "\e192"; } }
.glyphicon-sound-7-1 { &:before { content: "\e193"; } }
.glyphicon-copyright-mark { &:before { content: "\e194"; } }
.glyphicon-registration-mark { &:before { content: "\e195"; } }
.glyphicon-cloud-download { &:before { content: "\e197"; } }
.glyphicon-cloud-upload { &:before { content: "\e198"; } }
.glyphicon-tree-conifer { &:before { content: "\e199"; } }
.glyphicon-tree-deciduous { &:before { content: "\e200"; } }

View file

@ -2,20 +2,78 @@
// Grid system // Grid system
// -------------------------------------------------- // --------------------------------------------------
// Set the container width, and override it for fixed navbars in media queries
.container {
@include container-fixed();
// Fixed (940px) @media (min-width: $screen-sm) {
@include grid-core($gridColumnWidth, $gridGutterWidth); width: $container-sm;
}
// Fluid (940px) @media (min-width: $screen-md) {
@include grid-fluid($fluidGridColumnWidth, $fluidGridGutterWidth); width: $container-md;
}
// Reset utility classes due to specificity @media (min-width: $screen-lg-min) {
[class*="span"].hide, width: $container-lg;
.row-fluid [class*="span"].hide { }
display: none;
} }
[class*="span"].pull-right, // mobile first defaults
.row-fluid [class*="span"].pull-right { .row {
float: right; @include make-row();
} }
// Common styles for small and large grid columns
@include make-grid-columns();
// Extra small grid
//
// Columns, offsets, pushes, and pulls for extra small devices like
// smartphones.
@include make-grid-columns-float(xs);
@include make-grid($grid-columns, xs, width);
@include make-grid($grid-columns, xs, pull);
@include make-grid($grid-columns, xs, push);
@include make-grid($grid-columns, xs, offset);
// Small grid
//
// Columns, offsets, pushes, and pulls for the small device range, from phones
// to tablets.
@media (min-width: $screen-sm-min) {
@include make-grid-columns-float(sm);
@include make-grid($grid-columns, sm, width);
@include make-grid($grid-columns, sm, pull);
@include make-grid($grid-columns, sm, push);
@include make-grid($grid-columns, sm, offset);
}
// Medium grid
//
// Columns, offsets, pushes, and pulls for the desktop device range.
@media (min-width: $screen-md-min) {
@include make-grid-columns-float(md);
@include make-grid($grid-columns, md, width);
@include make-grid($grid-columns, md, pull);
@include make-grid($grid-columns, md, push);
@include make-grid($grid-columns, md, offset);
}
// Large grid
//
// Columns, offsets, pushes, and pulls for the large desktop device range.
@media (min-width: $screen-lg-min) {
@include make-grid-columns-float(lg);
@include make-grid($grid-columns, lg, width);
@include make-grid($grid-columns, lg, pull);
@include make-grid($grid-columns, lg, push);
@include make-grid($grid-columns, lg, offset);
}

View file

@ -0,0 +1,136 @@
//
// Input groups
// --------------------------------------------------
// Base styles
// -------------------------
.input-group {
position: relative; // For dropdowns
display: table;
border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
// Undo padding and float of grid classes
&[class*="col-"] {
float: none;
padding-left: 0;
padding-right: 0;
}
.form-control {
width: 100%;
margin-bottom: 0;
}
}
// Sizing options
//
// Remix the default form control sizing classes into new ones for easier
// manipulation.
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn { @extend .input-lg; }
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn { @extend .input-sm; }
// Display as table-cell
// -------------------------
.input-group-addon,
.input-group-btn,
.input-group .form-control {
display: table-cell;
&:not(:first-child):not(:last-child) {
border-radius: 0;
}
}
// Addon and addon wrapper for buttons
.input-group-addon,
.input-group-btn {
width: 1%;
white-space: nowrap;
vertical-align: middle; // Match the inputs
}
// Text input groups
// -------------------------
.input-group-addon {
padding: $padding-base-vertical $padding-base-horizontal;
font-size: $font-size-base;
font-weight: normal;
line-height: 1;
color: $input-color;
text-align: center;
background-color: $input-group-addon-bg;
border: 1px solid $input-group-addon-border-color;
border-radius: $border-radius-base;
// Sizing
&.input-sm {
padding: $padding-small-vertical $padding-small-horizontal;
font-size: $font-size-small;
border-radius: $border-radius-small;
}
&.input-lg {
padding: $padding-large-vertical $padding-large-horizontal;
font-size: $font-size-large;
border-radius: $border-radius-large;
}
// Nuke default margins from checkboxes and radios to vertically center within.
input[type="radio"],
input[type="checkbox"] {
margin-top: 0;
}
}
// Reset rounded corners
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
@include border-right-radius(0);
}
.input-group-addon:first-child {
border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child) {
@include border-left-radius(0);
}
.input-group-addon:last-child {
border-left: 0;
}
// Button input groups
// -------------------------
.input-group-btn {
position: relative;
white-space: nowrap;
// Negative margin to only have a 1px border between the two
&:first-child > .btn {
margin-right: -1px;
}
&:last-child > .btn {
margin-left: -1px;
}
}
.input-group-btn > .btn {
position: relative;
// Jankily prevent input button groups from wrapping
+ .btn {
margin-left: -4px;
}
// Bring the "active" button to the front
&:hover,
&:active {
z-index: 2;
}
}

View file

@ -0,0 +1,46 @@
//
// Jumbotron
// --------------------------------------------------
.jumbotron {
padding: $jumbotron-padding;
margin-bottom: $jumbotron-padding;
font-size: $jumbotron-font-size;
font-weight: 200;
line-height: ($line-height-base * 1.5);
color: $jumbotron-color;
background-color: $jumbotron-bg;
h1,
.h1 {
line-height: 1;
color: $jumbotron-heading-color;
}
p {
line-height: 1.4;
}
.container & {
border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container
}
.container {
max-width: 100%;
}
@media screen and (min-width: $screen-sm-min) {
padding-top: ($jumbotron-padding * 1.6);
padding-bottom: ($jumbotron-padding * 1.6);
.container & {
padding-left: ($jumbotron-padding * 2);
padding-right: ($jumbotron-padding * 2);
}
h1,
.h1 {
font-size: ($font-size-base * 4.5);
}
}
}

View file

@ -0,0 +1,64 @@
//
// Labels
// --------------------------------------------------
.label {
display: inline;
padding: .2em .6em .3em;
font-size: 75%;
font-weight: bold;
line-height: 1;
color: $label-color;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25em;
// Add hover effects, but only for links
&[href] {
&:hover,
&:focus {
color: $label-link-hover-color;
text-decoration: none;
cursor: pointer;
}
}
// Empty labels collapse automatically (not available in IE8)
&:empty {
display: none;
}
// Quick fix for labels in buttons
.btn & {
position: relative;
top: -1px;
}
}
// Colors
// Contextual variations (linked labels get darker on :hover)
.label-default {
@include label-variant($label-default-bg);
}
.label-primary {
@include label-variant($label-primary-bg);
}
.label-success {
@include label-variant($label-success-bg);
}
.label-info {
@include label-variant($label-info-bg);
}
.label-warning {
@include label-variant($label-warning-bg);
}
.label-danger {
@include label-variant($label-danger-bg);
}

View file

@ -0,0 +1,88 @@
//
// List groups
// --------------------------------------------------
// Base class
//
// Easily usable on <ul>, <ol>, or <div>.
.list-group {
// No need to set list-style: none; since .list-group-item is block level
margin-bottom: 20px;
padding-left: 0; // reset padding because ul and ol
}
// Individual list items
// -------------------------
.list-group-item {
position: relative;
display: block;
padding: 10px 15px;
// Place the border on the list items and negative margin up for better styling
margin-bottom: -1px;
background-color: $list-group-bg;
border: 1px solid $list-group-border;
// Round the first and last items
&:first-child {
@include border-top-radius($list-group-border-radius);
}
&:last-child {
margin-bottom: 0;
@include border-bottom-radius($list-group-border-radius);
}
// Align badges within list items
> .badge {
float: right;
}
> .badge + .badge {
margin-right: 5px;
}
}
// Linked list items
a.list-group-item {
color: $list-group-link-color;
.list-group-item-heading {
color: $list-group-link-heading-color;
}
// Hover state
&:hover,
&:focus {
text-decoration: none;
background-color: $list-group-hover-bg;
}
// Active class on item itself, not parent
&.active,
&.active:hover,
&.active:focus {
z-index: 2; // Place active items above their siblings for proper border styling
color: $list-group-active-color;
background-color: $list-group-active-bg;
border-color: $list-group-active-border;
// Force color to inherit for custom content
.list-group-item-heading {
color: inherit;
}
.list-group-item-text {
color: lighten($list-group-active-bg, 40%);
}
}
}
// Custom content options
// -------------------------
.list-group-item-heading {
margin-top: 0;
margin-bottom: 5px;
}
.list-group-item-text {
margin-bottom: 0;
line-height: 1.3;
}

View file

@ -10,7 +10,6 @@
.media, .media,
.media-body { .media-body {
overflow: hidden; overflow: hidden;
*overflow: visible;
zoom: 1; zoom: 1;
} }
@ -37,12 +36,14 @@
// Media image alignment // Media image alignment
// ------------------------- // -------------------------
.media > .pull-left { .media {
> .pull-left {
margin-right: 10px; margin-right: 10px;
} }
.media > .pull-right { > .pull-right {
margin-left: 10px; margin-left: 10px;
} }
}
// Media list variation // Media list variation
@ -50,6 +51,6 @@
// Undo default ul/ol styles // Undo default ul/ol styles
.media-list { .media-list {
margin-left: 0; padding-left: 0;
list-style: none; list-style: none;
} }

File diff suppressed because it is too large Load diff

View file

@ -2,81 +2,102 @@
// Modals // Modals
// -------------------------------------------------- // --------------------------------------------------
// Background // .modal-open - body class for killing the scroll
// .modal - container to scroll within
// .modal-dialog - positioning shell for the actual modal
// .modal-content - actual modal w/ bg and corners and shit
// Kill the scroll on the body
.modal-open {
overflow: hidden;
}
// Container that the modal scrolls within
.modal {
display: none;
overflow: auto;
overflow-y: scroll;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: $zindex-modal-background;
// When fading in the modal, animate it to slide down
&.fade .modal-dialog {
@include translate(0, -25%);
@include transition-transform(0.3s ease-out);
}
&.in .modal-dialog { @include translate(0, 0)}
}
// Shell div to position the modal with bottom padding
.modal-dialog {
position: relative;
width: auto;
margin: 10px;
z-index: ($zindex-modal-background + 10);
}
// Actual modal
.modal-content {
position: relative;
background-color: $modal-content-bg;
border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
border: 1px solid $modal-content-border-color;
border-radius: $border-radius-large;
@include box-shadow(0 3px 9px rgba(0,0,0,.5));
background-clip: padding-box;
// Remove focus outline from opened modal
outline: none;
}
// Modal background
.modal-backdrop { .modal-backdrop {
position: fixed; position: fixed;
top: 0; top: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
z-index: $zindexModalBackdrop; z-index: ($zindex-modal-background - 10);
background-color: $black; background-color: $modal-backdrop-bg;
// Fade for backdrop // Fade for backdrop
&.fade { opacity: 0; } &.fade { @include opacity(0); }
&.in { @include opacity(.5); }
} }
.modal-backdrop, // Modal header
.modal-backdrop.fade.in { // Top section of the modal w/ title and dismiss
@include opacity(80);
}
// Base modal
.modal {
position: fixed;
top: 10%;
left: 50%;
z-index: $zindexModal;
width: 560px;
margin-left: -280px;
background-color: $white;
border: 1px solid #999;
border: 1px solid rgba(0,0,0,.3);
*border: 1px solid #999; /* IE6-7 */
@include border-radius(6px);
@include box-shadow(0 3px 7px rgba(0,0,0,0.3));
@include background-clip(padding-box);
// Remove focus outline from opened modal
outline: none;
&.fade {
@include transition(opacity .3s linear, top .3s ease-out);
top: -25%;
}
&.fade.in { top: 10%; }
}
.modal-header { .modal-header {
padding: 9px 15px; padding: $modal-title-padding;
border-bottom: 1px solid #eee; border-bottom: 1px solid $modal-header-border-color;
// Close icon min-height: ($modal-title-padding + $modal-title-line-height);
.close { margin-top: 2px; }
// Heading
h3 {
margin: 0;
line-height: 30px;
} }
// Close icon
.modal-header .close {
margin-top: -2px;
} }
// Body (where all modal content resides) // Title text within header
.modal-title {
margin: 0;
line-height: $modal-title-line-height;
}
// Modal body
// Where all modal content resides (sibling of .modal-header and .modal-footer)
.modal-body { .modal-body {
position: relative; position: relative;
overflow-y: auto; padding: $modal-inner-padding;
max-height: 400px;
padding: 15px;
}
// Remove bottom margin if need be
.modal-form {
margin-bottom: 0;
} }
// Footer (for actions) // Footer (for actions)
.modal-footer { .modal-footer {
padding: 14px 15px 15px; margin-top: 15px;
margin-bottom: 0; padding: ($modal-inner-padding - 1) $modal-inner-padding $modal-inner-padding;
text-align: right; // right align buttons text-align: right; // right align buttons
background-color: #f5f5f5; border-top: 1px solid $modal-footer-border-color;
border-top: 1px solid #ddd;
@include border-radius(0 0 6px 6px);
@include box-shadow(inset 0 1px 0 $white);
@include clearfix(); // clear it in case folks use .pull-* classes on buttons @include clearfix(); // clear it in case folks use .pull-* classes on buttons
// Properly space out buttons // Properly space out buttons
@ -93,3 +114,16 @@
margin-left: 0; margin-left: 0;
} }
} }
// Scale up the modal
@media screen and (min-width: $screen-sm-min) {
.modal-dialog {
width: 600px;
margin: 30px auto;
}
.modal-content {
@include box-shadow(0 5px 15px rgba(0,0,0,.5));
}
}

File diff suppressed because it is too large Load diff

View file

@ -3,407 +3,253 @@
// -------------------------------------------------- // --------------------------------------------------
// BASE CLASS // Base class
// ---------- // --------------------------------------------------
.nav { .nav {
margin-left: 0;
margin-bottom: $baseLineHeight;
list-style: none;
}
// Make links block level
.nav > li > a {
display: block;
}
.nav > li > a:hover,
.nav > li > a:focus {
text-decoration: none;
background-color: $grayLighter;
}
// Prevent IE8 from misplacing imgs
// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
.nav > li > a > img {
max-width: none;
}
// Redeclare pull classes because of specifity
.nav > .pull-right {
float: right;
}
// Nav headers (for dropdowns and lists)
.nav-header {
display: block;
padding: 3px 15px;
font-size: 11px;
font-weight: bold;
line-height: $baseLineHeight;
color: $grayLight;
text-shadow: 0 1px 0 rgba(255,255,255,.5);
text-transform: uppercase;
}
// Space them out when they follow another list item (link)
.nav li + .nav-header {
margin-top: 9px;
}
// NAV LIST
// --------
.nav-list {
padding-left: 15px;
padding-right: 15px;
margin-bottom: 0; margin-bottom: 0;
} padding-left: 0; // Override default ul/ol
.nav-list > li > a, list-style: none;
.nav-list .nav-header {
margin-left: -15px;
margin-right: -15px;
text-shadow: 0 1px 0 rgba(255,255,255,.5);
}
.nav-list > li > a {
padding: 3px 15px;
}
.nav-list > .active > a,
.nav-list > .active > a:hover,
.nav-list > .active > a:focus {
color: $white;
text-shadow: 0 -1px 0 rgba(0,0,0,.2);
background-color: $linkColor;
}
.nav-list [class^="icon-"],
.nav-list [class*=" icon-"] {
margin-right: 2px;
}
// Dividers (basically an hr) within the dropdown
.nav-list .divider {
@include nav-divider();
}
// TABS AND PILLS
// -------------
// Common styles
.nav-tabs,
.nav-pills {
@include clearfix(); @include clearfix();
}
.nav-tabs > li,
.nav-pills > li {
float: left;
}
.nav-tabs > li > a,
.nav-pills > li > a {
padding-right: 12px;
padding-left: 12px;
margin-right: 2px;
line-height: 14px; // keeps the overall height an even number
}
// TABS > li {
// ---- position: relative;
display: block;
// Give the tabs something to sit on > a {
.nav-tabs { position: relative;
border-bottom: 1px solid #ddd; display: block;
} padding: $nav-link-padding;
// Make the list-items overlay the bottom border
.nav-tabs > li {
margin-bottom: -1px;
}
// Actual tabs (as links)
.nav-tabs > li > a {
padding-top: 8px;
padding-bottom: 8px;
line-height: $baseLineHeight;
border: 1px solid transparent;
@include border-radius(4px 4px 0 0);
&:hover, &:hover,
&:focus { &:focus {
border-color: $grayLighter $grayLighter #ddd; text-decoration: none;
background-color: $nav-link-hover-bg;
} }
} }
// Active state, and it's :hover/:focus to override normal :hover/:focus
.nav-tabs > .active > a,
.nav-tabs > .active > a:hover,
.nav-tabs > .active > a:focus {
color: $gray;
background-color: $bodyBackground;
border: 1px solid #ddd;
border-bottom-color: transparent;
cursor: default;
}
// Disabled state sets text to gray and nukes hover/tab effects
&.disabled > a {
color: $nav-disabled-link-color;
// PILLS &:hover,
// ----- &:focus {
color: $nav-disabled-link-hover-color;
// Links rendered as pills text-decoration: none;
.nav-pills > li > a { background-color: transparent;
padding-top: 8px; cursor: not-allowed;
padding-bottom: 8px;
margin-top: 2px;
margin-bottom: 2px;
@include border-radius(5px);
} }
// Active state
.nav-pills > .active > a,
.nav-pills > .active > a:hover,
.nav-pills > .active > a:focus {
color: $white;
background-color: $linkColor;
} }
// STACKED NAV
// -----------
// Stacked tabs and pills
.nav-stacked > li {
float: none;
}
.nav-stacked > li > a {
margin-right: 0; // no need for the gap between nav items
}
// Tabs
.nav-tabs.nav-stacked {
border-bottom: 0;
}
.nav-tabs.nav-stacked > li > a {
border: 1px solid #ddd;
@include border-radius(0);
}
.nav-tabs.nav-stacked > li:first-child > a {
@include border-top-radius(4px);
}
.nav-tabs.nav-stacked > li:last-child > a {
@include border-bottom-radius(4px);
}
.nav-tabs.nav-stacked > li > a:hover,
.nav-tabs.nav-stacked > li > a:focus {
border-color: #ddd;
z-index: 2;
}
// Pills
.nav-pills.nav-stacked > li > a {
margin-bottom: 3px;
}
.nav-pills.nav-stacked > li:last-child > a {
margin-bottom: 1px; // decrease margin to match sizing of stacked tabs
}
// DROPDOWNS
// ---------
.nav-tabs .dropdown-menu {
@include border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu
}
.nav-pills .dropdown-menu {
@include border-radius(6px); // make rounded corners match the pills
}
// Default dropdown links
// -------------------------
// Make carets use linkColor to start
.nav .dropdown-toggle .caret {
border-top-color: $linkColor;
border-bottom-color: $linkColor;
margin-top: 6px;
}
.nav .dropdown-toggle:hover .caret,
.nav .dropdown-toggle:focus .caret {
border-top-color: $linkColorHover;
border-bottom-color: $linkColorHover;
}
/* move down carets for tabs */
.nav-tabs .dropdown-toggle .caret {
margin-top: 8px;
}
// Active dropdown links
// -------------------------
.nav .active .dropdown-toggle .caret {
border-top-color: #fff;
border-bottom-color: #fff;
}
.nav-tabs .active .dropdown-toggle .caret {
border-top-color: $gray;
border-bottom-color: $gray;
}
// Active:hover/:focus dropdown links
// -------------------------
.nav > .dropdown.active > a:hover,
.nav > .dropdown.active > a:focus {
cursor: pointer;
} }
// Open dropdowns // Open dropdowns
// ------------------------- .open > a {
.nav-tabs .open .dropdown-toggle, &,
.nav-pills .open .dropdown-toggle,
.nav > li.dropdown.open.active > a:hover,
.nav > li.dropdown.open.active > a:focus {
color: $white;
background-color: $grayLight;
border-color: $grayLight;
}
.nav li.dropdown.open .caret,
.nav li.dropdown.open.active .caret,
.nav li.dropdown.open a:hover .caret,
.nav li.dropdown.open a:focus .caret {
border-top-color: $white;
border-bottom-color: $white;
@include opacity(100);
}
// Dropdowns in stacked tabs
.tabs-stacked .open > a:hover,
.tabs-stacked .open > a:focus {
border-color: $grayLight;
}
// TABBABLE
// --------
// COMMON STYLES
// -------------
// Clear any floats
.tabbable {
@include clearfix();
}
.tab-content {
overflow: auto; // prevent content from running below tabs
}
// Remove border on bottom, left, right
.tabs-below > .nav-tabs,
.tabs-right > .nav-tabs,
.tabs-left > .nav-tabs {
border-bottom: 0;
}
// Show/hide tabbable areas
.tab-content > .tab-pane,
.pill-content > .pill-pane {
display: none;
}
.tab-content > .active,
.pill-content > .active {
display: block;
}
// BOTTOM
// ------
.tabs-below > .nav-tabs {
border-top: 1px solid #ddd;
}
.tabs-below > .nav-tabs > li {
margin-top: -1px;
margin-bottom: 0;
}
.tabs-below > .nav-tabs > li > a {
@include border-radius(0 0 4px 4px);
&:hover, &:hover,
&:focus { &:focus {
border-bottom-color: transparent; background-color: $nav-link-hover-bg;
border-top-color: #ddd; border-color: $link-color;
} }
} }
.tabs-below > .nav-tabs > .active > a,
.tabs-below > .nav-tabs > .active > a:hover,
.tabs-below > .nav-tabs > .active > a:focus {
border-color: transparent #ddd #ddd #ddd;
}
// LEFT & RIGHT // Nav dividers (deprecated with v3.0.1)
// ------------ //
// This should have been removed in v3 with the dropping of `.nav-list`, but
// Common styles // we missed it. We don't currently support this anywhere, but in the interest
.tabs-left > .nav-tabs > li, // of maintaining backward compatibility in case you use it, it's deprecated.
.tabs-right > .nav-tabs > li { .nav-divider {
float: none; @include nav-divider();
}
.tabs-left > .nav-tabs > li > a,
.tabs-right > .nav-tabs > li > a {
min-width: 74px;
margin-right: 0;
margin-bottom: 3px;
} }
// Tabs on the left // Prevent IE8 from misplacing imgs
.tabs-left > .nav-tabs { //
// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
> li > a > img {
max-width: none;
}
}
// Tabs
// -------------------------
// Give the tabs something to sit on
.nav-tabs {
border-bottom: 1px solid $nav-tabs-border-color;
> li {
float: left; float: left;
margin-right: 19px; // Make the list-items overlay the bottom border
border-right: 1px solid #ddd; margin-bottom: -1px;
// Actual tabs (as links)
> a {
margin-right: 2px;
line-height: $line-height-base;
border: 1px solid transparent;
border-radius: $border-radius-base $border-radius-base 0 0;
&:hover {
border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;
} }
.tabs-left > .nav-tabs > li > a {
margin-right: -1px;
@include border-radius(4px 0 0 4px);
}
.tabs-left > .nav-tabs > li > a:hover,
.tabs-left > .nav-tabs > li > a:focus {
border-color: $grayLighter #ddd $grayLighter $grayLighter;
}
.tabs-left > .nav-tabs .active > a,
.tabs-left > .nav-tabs .active > a:hover,
.tabs-left > .nav-tabs .active > a:focus {
border-color: #ddd transparent #ddd #ddd;
*border-right-color: $white;
} }
// Tabs on the right // Active state, and it's :hover to override normal :hover
.tabs-right > .nav-tabs { &.active > a {
float: right; &,
margin-left: 19px; &:hover,
border-left: 1px solid #ddd; &:focus {
} color: $nav-tabs-active-link-hover-color;
.tabs-right > .nav-tabs > li > a { background-color: $nav-tabs-active-link-hover-bg;
margin-left: -1px; border: 1px solid $nav-tabs-active-link-hover-border-color;
@include border-radius(0 4px 4px 0); border-bottom-color: transparent;
}
.tabs-right > .nav-tabs > li > a:hover,
.tabs-right > .nav-tabs > li > a:focus {
border-color: $grayLighter $grayLighter $grayLighter #ddd;
}
.tabs-right > .nav-tabs .active > a,
.tabs-right > .nav-tabs .active > a:hover,
.tabs-right > .nav-tabs .active > a:focus {
border-color: #ddd #ddd #ddd transparent;
*border-left-color: $white;
}
// DISABLED STATES
// ---------------
// Gray out text
.nav > .disabled > a {
color: $grayLight;
}
// Nuke hover/focus effects
.nav > .disabled > a:hover,
.nav > .disabled > a:focus {
text-decoration: none;
background-color: transparent;
cursor: default; cursor: default;
} }
}
}
// pulling this in mainly for less shorthand
&.nav-justified {
@extend .nav-justified;
@extend .nav-tabs-justified;
}
}
// Pills
// -------------------------
.nav-pills {
> li {
float: left;
// Links rendered as pills
> a {
border-radius: $nav-pills-border-radius;
}
+ li {
margin-left: 2px;
}
// Active state
&.active > a {
&,
&:hover,
&:focus {
color: $nav-pills-active-link-hover-color;
background-color: $nav-pills-active-link-hover-bg;
}
}
}
}
// Stacked pills
.nav-stacked {
> li {
float: none;
+ li {
margin-top: 2px;
margin-left: 0; // no need for this gap between nav items
}
}
}
// Nav variations
// --------------------------------------------------
#contribute-nav {
padding-left: 35;
>li {
>a {
padding: 5px 0;
&:hover {
background: none;
}
}
}
}
// Justified nav links
// -------------------------
.nav-justified {
width: 100%;
> li {
float: none;
> a {
text-align: center;
margin-bottom: 5px;
}
}
> .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media (min-width: $screen-sm-min) {
> li {
display: table-cell;
width: 1%;
> a {
margin-bottom: 0;
}
}
}
}
// Move borders to anchors instead of bottom of list
//
// Mixin for adding on top the shared `.nav-justified` styles for our tabs
.nav-tabs-justified {
border-bottom: 0;
> li > a {
// Override margin from .nav-tabs
margin-right: 0;
border-radius: $border-radius-base;
}
> .active > a,
> .active > a:hover,
> .active > a:focus {
border: 1px solid $nav-tabs-justified-link-border-color;
}
@media (min-width: $screen-sm-min) {
> li > a {
border-bottom: 1px solid $nav-tabs-justified-link-border-color;
border-radius: $border-radius-base $border-radius-base 0 0;
}
> .active > a,
> .active > a:hover,
> .active > a:focus {
border-bottom-color: $nav-tabs-justified-active-link-border-color;
}
}
}
// Tabbable tabs
// -------------------------
// Hide tabbable panes to start, show them when `.active`
.tab-content {
> .tab-pane {
display: none;
}
> .active {
display: block;
}
}
// Dropdowns
// -------------------------
// Specific dropdowns
.nav-tabs .dropdown-menu {
// make dropdown border overlap tab border
margin-top: -1px;
// Remove the top rounded corners here since there is a hard edge above the menu
@include border-top-radius(0);
}

View file

@ -0,0 +1,406 @@
/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
// ==========================================================================
// HTML5 display definitions
// ==========================================================================
//
// Correct `block` display not defined in IE 8/9.
//
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
//
// Correct `inline-block` display not defined in IE 8/9.
//
audio,
canvas,
video {
display: inline-block;
}
//
// Prevent modern browsers from displaying `audio` without controls.
// Remove excess height in iOS 5 devices.
//
audio:not([controls]) {
display: none;
height: 0;
}
//
// Address `[hidden]` styling not present in IE 8/9.
// Hide the `template` element in IE, Safari, and Firefox < 22.
//
[hidden],
template {
display: none;
}
// ==========================================================================
// Base
// ==========================================================================
//
// 1. Set default font family to sans-serif.
// 2. Prevent iOS text size adjust after orientation change, without disabling
// user zoom.
//
html {
font-family: sans-serif; // 1
-ms-text-size-adjust: 100%; // 2
-webkit-text-size-adjust: 100%; // 2
}
//
// Remove default margin.
//
body {
margin: 0;
}
// ==========================================================================
// Links
// ==========================================================================
//
// Remove the gray background color from active links in IE 10.
//
a {
background: transparent;
}
//
// Address `outline` inconsistency between Chrome and other browsers.
//
a:focus {
outline: thin dotted;
}
//
// Improve readability when focused and also mouse hovered in all browsers.
//
a:active,
a:hover {
outline: 0;
}
// ==========================================================================
// Typography
// ==========================================================================
//
// Address variable `h1` font-size and margin within `section` and `article`
// contexts in Firefox 4+, Safari 5, and Chrome.
//
h1 {
font-size: 2em;
margin: 0.67em 0;
}
//
// Address styling not present in IE 8/9, Safari 5, and Chrome.
//
abbr[title] {
border-bottom: 1px dotted;
}
//
// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
//
b,
strong {
font-weight: bold;
}
//
// Address styling not present in Safari 5 and Chrome.
//
dfn {
font-style: italic;
}
//
// Address differences between Firefox and other browsers.
//
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
//
// Address styling not present in IE 8/9.
//
mark {
background: #ff0;
color: #000;
}
//
// Correct font family set oddly in Safari 5 and Chrome.
//
code,
kbd,
pre,
samp {
font-family: monospace, serif;
font-size: 1em;
}
//
// Improve readability of pre-formatted text in all browsers.
//
pre {
white-space: pre-wrap;
}
//
// Set consistent quote types.
//
q {
quotes: "\201C" "\201D" "\2018" "\2019";
}
//
// Address inconsistent and variable font size in all browsers.
//
small {
font-size: 80%;
}
//
// Prevent `sub` and `sup` affecting `line-height` in all browsers.
//
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
// ==========================================================================
// Embedded content
// ==========================================================================
//
// Remove border when inside `a` element in IE 8/9.
//
img {
border: 0;
}
//
// Correct overflow displayed oddly in IE 9.
//
svg:not(:root) {
overflow: hidden;
}
// ==========================================================================
// Figures
// ==========================================================================
//
// Address margin not present in IE 8/9 and Safari 5.
//
figure {
margin: 0;
}
// ==========================================================================
// Forms
// ==========================================================================
//
// Define consistent border, margin, and padding.
//
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
//
// 1. Correct `color` not being inherited in IE 8/9.
// 2. Remove padding so people aren't caught out if they zero out fieldsets.
//
legend {
border: 0; // 1
padding: 0; // 2
}
//
// 1. Correct font family not being inherited in all browsers.
// 2. Correct font size not being inherited in all browsers.
// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
//
button,
input,
select,
textarea {
font-family: inherit; // 1
font-size: 100%; // 2
margin: 0; // 3
}
//
// Address Firefox 4+ setting `line-height` on `input` using `!important` in
// the UA stylesheet.
//
button,
input {
line-height: normal;
}
//
// Address inconsistent `text-transform` inheritance for `button` and `select`.
// All other form control elements do not inherit `text-transform` values.
// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
// Correct `select` style inheritance in Firefox 4+ and Opera.
//
button,
select {
text-transform: none;
}
//
// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
// and `video` controls.
// 2. Correct inability to style clickable `input` types in iOS.
// 3. Improve usability and consistency of cursor style between image-type
// `input` and others.
//
button,
html input[type="button"], // 1
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; // 2
cursor: pointer; // 3
}
//
// Re-set default cursor for disabled elements.
//
button[disabled],
html input[disabled] {
cursor: default;
}
//
// 1. Address box sizing set to `content-box` in IE 8/9/10.
// 2. Remove excess padding in IE 8/9/10.
//
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; // 1
padding: 0; // 2
}
//
// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
// (include `-moz` to future-proof).
//
input[type="search"] {
-webkit-appearance: textfield; // 1
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; // 2
box-sizing: content-box;
}
//
// Remove inner padding and search cancel button in Safari 5 and Chrome
// on OS X.
//
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
//
// Remove inner padding and border in Firefox 4+.
//
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
//
// 1. Remove default vertical scrollbar in IE 8/9.
// 2. Improve readability and alignment in all browsers.
//
textarea {
overflow: auto; // 1
vertical-align: top; // 2
}
// ==========================================================================
// Tables
// ==========================================================================
//
// Remove most spacing between table cells.
//
table {
border-collapse: collapse;
border-spacing: 0;
}

View file

@ -4,40 +4,52 @@
.pager { .pager {
margin: $baseLineHeight 0; padding-left: 0;
margin: $line-height-computed 0;
list-style: none; list-style: none;
text-align: center; text-align: center;
@include clearfix(); @include clearfix();
} li {
.pager li {
display: inline; display: inline;
} > a,
.pager li > a, > span {
.pager li > span {
display: inline-block; display: inline-block;
padding: 5px 14px; padding: 5px 14px;
background-color: #fff; background-color: $pagination-bg;
border: 1px solid #ddd; border: 1px solid $pagination-border;
@include border-radius(15px); border-radius: $pager-border-radius;
} }
.pager li > a:hover,
.pager li > a:focus { > a:hover,
> a:focus {
text-decoration: none; text-decoration: none;
background-color: #f5f5f5; background-color: $pagination-hover-bg;
} }
.pager .next > a, }
.pager .next > span {
.next {
> a,
> span {
float: right; float: right;
} }
.pager .previous > a, }
.pager .previous > span {
.previous {
> a,
> span {
float: left; float: left;
} }
.pager .disabled > a, }
.pager .disabled > a:hover,
.pager .disabled > a:focus, .disabled {
.pager .disabled > span { > a,
color: $grayLight; > a:hover,
background-color: #fff; > a:focus,
cursor: default; > span {
color: $pager-disabled-color;
background-color: $pagination-bg;
cursor: not-allowed;
}
}
} }

View file

@ -1,123 +1,85 @@
// //
// Pagination (multiple pages) // Pagination (multiple pages)
// -------------------------------------------------- // --------------------------------------------------
// Space out pagination from surrounding content
.pagination { .pagination {
margin: $baseLineHeight 0;
}
.pagination ul {
// Allow for text-based alignment
display: inline-block; display: inline-block;
@include ie7-inline-block(); padding-left: 0;
// Reset default ul styles margin: $line-height-computed 0;
margin-left: 0; border-radius: $border-radius-base;
margin-bottom: 0;
// Visuals > li {
@include border-radius($baseBorderRadius);
@include box-shadow(0 1px 2px rgba(0,0,0,.05));
}
.pagination ul > li {
display: inline; // Remove list-style and block-level defaults display: inline; // Remove list-style and block-level defaults
} > a,
.pagination ul > li > a, > span {
.pagination ul > li > span { position: relative;
float: left; // Collapse white-space float: left; // Collapse white-space
padding: 4px 12px; padding: $padding-base-vertical $padding-base-horizontal;
line-height: $baseLineHeight; line-height: $line-height-base;
text-decoration: none; text-decoration: none;
background-color: $paginationBackground; background-color: $pagination-bg;
border: 1px solid $paginationBorder; border: 1px solid $pagination-border;
border-left-width: 0; margin-left: -1px;
} }
.pagination ul > li > a:hover, &:first-child {
.pagination ul > li > a:focus, > a,
.pagination ul > .active > a, > span {
.pagination ul > .active > span { margin-left: 0;
background-color: $paginationActiveBackground; @include border-left-radius($border-radius-base);
} }
.pagination ul > .active > a, }
.pagination ul > .active > span { &:last-child {
color: $grayLight; > a,
> span {
@include border-right-radius($border-radius-base);
}
}
}
> li > a,
> li > span {
&:hover,
&:focus {
background-color: $pagination-hover-bg;
}
}
> .active > a,
> .active > span {
&,
&:hover,
&:focus {
z-index: 2;
color: $pagination-active-color;
background-color: $pagination-active-bg;
border-color: $pagination-active-bg;
cursor: default; cursor: default;
} }
.pagination ul > .disabled > span,
.pagination ul > .disabled > a,
.pagination ul > .disabled > a:hover,
.pagination ul > .disabled > a:focus {
color: $grayLight;
background-color: transparent;
cursor: default;
}
.pagination ul > li:first-child > a,
.pagination ul > li:first-child > span {
border-left-width: 1px;
@include border-left-radius($baseBorderRadius);
}
.pagination ul > li:last-child > a,
.pagination ul > li:last-child > span {
@include border-right-radius($baseBorderRadius);
} }
> .disabled {
// Alignment > span,
// -------------------------------------------------- > span:hover,
> span:focus,
.pagination-centered { > a,
text-align: center; > a:hover,
> a:focus {
color: $pagination-disabled-color;
background-color: $pagination-bg;
border-color: $pagination-border;
cursor: not-allowed;
}
} }
.pagination-right {
text-align: right;
} }
// Sizing // Sizing
// -------------------------------------------------- // --------------------------------------------------
// Large // Large
.pagination-large { .pagination-lg {
ul > li > a, @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large);
ul > li > span {
padding: $paddingLarge;
font-size: $fontSizeLarge;
}
ul > li:first-child > a,
ul > li:first-child > span {
@include border-left-radius($borderRadiusLarge);
}
ul > li:last-child > a,
ul > li:last-child > span {
@include border-right-radius($borderRadiusLarge);
}
}
// Small and mini
.pagination-mini,
.pagination-small {
ul > li:first-child > a,
ul > li:first-child > span {
@include border-left-radius($borderRadiusSmall);
}
ul > li:last-child > a,
ul > li:last-child > span {
@include border-right-radius($borderRadiusSmall);
}
} }
// Small // Small
.pagination-small { .pagination-sm {
ul > li > a, @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small);
ul > li > span {
padding: $paddingSmall;
font-size: $fontSizeSmall;
}
}
// Mini
.pagination-mini {
ul > li > a,
ul > li > span {
padding: $paddingMini;
font-size: $fontSizeMini;
}
} }

View file

@ -0,0 +1,182 @@
//
// Panels
// --------------------------------------------------
// Base class
.panel {
margin-bottom: $line-height-computed;
background-color: $panel-bg;
border: 1px solid transparent;
border-radius: $panel-border-radius;
@include box-shadow(0 1px 1px rgba(0,0,0,.05));
}
// Panel contents
.panel-body {
padding: 15px;
@include clearfix();
}
// List groups in panels
//
// By default, space out list group content from panel headings to account for
// any kind of custom content between the two.
.panel {
> .list-group {
margin-bottom: 0;
.list-group-item {
border-width: 1px 0;
// Remove border radius for top one
&:first-child {
@include border-top-radius(0);
}
// But keep it for the last one
&:last-child {
border-bottom: 0;
}
}
}
}
// Collapse space between when there's no additional content.
.panel-heading + .list-group {
.list-group-item:first-child {
border-top-width: 0;
}
}
// Tables in panels
//
// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
// watch it go full width.
.panel {
> .table,
> .table-responsive > .table {
margin-bottom: 0;
}
> .panel-body + .table,
> .panel-body + .table-responsive {
border-top: 1px solid $table-border-color;
}
> .table > tbody:first-child th,
> .table > tbody:first-child td {
border-top: 0;
}
> .table-bordered,
> .table-responsive > .table-bordered {
border: 0;
> thead,
> tbody,
> tfoot {
> tr {
> th:first-child,
> td:first-child {
border-left: 0;
}
> th:last-child,
> td:last-child {
border-right: 0;
}
&:last-child > th,
&:last-child > td {
border-bottom: 0;
}
}
}
}
> .table-responsive {
border: 0;
margin-bottom: 0;
}
}
// Optional heading
.panel-heading {
padding: 10px 15px;
border-bottom: 1px solid transparent;
@include border-top-radius($panel-border-radius - 1);
> .dropdown .dropdown-toggle {
color: inherit;
}
}
// Within heading, strip any `h*` tag of it's default margins for spacing.
.panel-title {
margin-top: 0;
margin-bottom: 0;
font-size: ceil(($font-size-base * 1.125));
color: inherit;
> a {
color: inherit;
}
}
// Optional footer (stays gray in every modifier class)
.panel-footer {
padding: 10px 15px;
background-color: $panel-footer-bg;
border-top: 1px solid $panel-inner-border;
@include border-bottom-radius($panel-border-radius - 1);
}
// Collapsable panels (aka, accordion)
//
// Wrap a series of panels in `.panel-group` to turn them into an accordion with
// the help of our collapse JavaScript plugin.
.panel-group {
// Tighten up margin so it's only between panels
.panel {
margin-bottom: 0;
border-radius: $panel-border-radius;
overflow: hidden; // crop contents when collapsed
+ .panel {
margin-top: 5px;
}
}
.panel-heading {
border-bottom: 0;
+ .panel-collapse .panel-body {
border-top: 1px solid $panel-inner-border;
}
}
.panel-footer {
border-top: 0;
+ .panel-collapse .panel-body {
border-bottom: 1px solid $panel-inner-border;
}
}
}
// Contextual variations
.panel-default {
@include panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border);
}
.panel-primary {
@include panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border);
}
.panel-success {
@include panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border);
}
.panel-warning {
@include panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border);
}
.panel-danger {
@include panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border);
}
.panel-info {
@include panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border);
}

View file

@ -7,18 +7,16 @@
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
z-index: $zindexPopover; z-index: $zindex-popover;
display: none; display: none;
max-width: 276px; max-width: $popover-max-width;
padding: 1px; padding: 1px;
text-align: left; // Reset given new insertion method text-align: left; // Reset given new insertion method
background-color: $popoverBackground; background-color: $popover-bg;
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box; background-clip: padding-box;
border: 1px solid #ccc; border: 1px solid $popover-fallback-border-color;
border: 1px solid rgba(0,0,0,.2); border: 1px solid $popover-border-color;
@include border-radius(6px); border-radius: $border-radius-large;
@include box-shadow(0 5px 10px rgba(0,0,0,.2)); @include box-shadow(0 5px 10px rgba(0,0,0,.2));
// Overrides for proper insertion // Overrides for proper insertion
@ -34,16 +32,12 @@
.popover-title { .popover-title {
margin: 0; // reset heading margin margin: 0; // reset heading margin
padding: 8px 14px; padding: 8px 14px;
font-size: 14px; font-size: $font-size-base;
font-weight: normal; font-weight: normal;
line-height: 18px; line-height: 18px;
background-color: $popoverTitleBackground; background-color: $popover-title-bg;
border-bottom: 1px solid darken($popoverTitleBackground, 5%); border-bottom: 1px solid darken($popover-title-bg, 5%);
@include border-radius(5px 5px 0 0); border-radius: 5px 5px 0 0;
&:empty {
display: none;
}
} }
.popover-content { .popover-content {
@ -54,8 +48,9 @@
// //
// .arrow is outer, .arrow:after is inner // .arrow is outer, .arrow:after is inner
.popover .arrow, .popover .arrow {
.popover .arrow:after { &,
&:after {
position: absolute; position: absolute;
display: block; display: block;
width: 0; width: 0;
@ -63,70 +58,75 @@
border-color: transparent; border-color: transparent;
border-style: solid; border-style: solid;
} }
}
.popover .arrow { .popover .arrow {
border-width: $popoverArrowOuterWidth; border-width: $popover-arrow-outer-width;
} }
.popover .arrow:after { .popover .arrow:after {
border-width: $popoverArrowWidth; border-width: $popover-arrow-width;
content: ""; content: "";
} }
.popover { .popover {
&.top .arrow { &.top .arrow {
left: 50%; left: 50%;
margin-left: -$popoverArrowOuterWidth; margin-left: -$popover-arrow-outer-width;
border-bottom-width: 0; border-bottom-width: 0;
border-top-color: #999; // IE8 fallback border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback
border-top-color: $popoverArrowOuterColor; border-top-color: $popover-arrow-outer-color;
bottom: -$popoverArrowOuterWidth; bottom: -$popover-arrow-outer-width;
&:after { &:after {
content: " ";
bottom: 1px; bottom: 1px;
margin-left: -$popoverArrowWidth; margin-left: -$popover-arrow-width;
border-bottom-width: 0; border-bottom-width: 0;
border-top-color: $popoverArrowColor; border-top-color: $popover-arrow-color;
} }
} }
&.right .arrow { &.right .arrow {
top: 50%; top: 50%;
left: -$popoverArrowOuterWidth; left: -$popover-arrow-outer-width;
margin-top: -$popoverArrowOuterWidth; margin-top: -$popover-arrow-outer-width;
border-left-width: 0; border-left-width: 0;
border-right-color: #999; // IE8 fallback border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback
border-right-color: $popoverArrowOuterColor; border-right-color: $popover-arrow-outer-color;
&:after { &:after {
content: " ";
left: 1px; left: 1px;
bottom: -$popoverArrowWidth; bottom: -$popover-arrow-width;
border-left-width: 0; border-left-width: 0;
border-right-color: $popoverArrowColor; border-right-color: $popover-arrow-color;
} }
} }
&.bottom .arrow { &.bottom .arrow {
left: 50%; left: 50%;
margin-left: -$popoverArrowOuterWidth; margin-left: -$popover-arrow-outer-width;
border-top-width: 0; border-top-width: 0;
border-bottom-color: #999; // IE8 fallback border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback
border-bottom-color: $popoverArrowOuterColor; border-bottom-color: $popover-arrow-outer-color;
top: -$popoverArrowOuterWidth; top: -$popover-arrow-outer-width;
&:after { &:after {
content: " ";
top: 1px; top: 1px;
margin-left: -$popoverArrowWidth; margin-left: -$popover-arrow-width;
border-top-width: 0; border-top-width: 0;
border-bottom-color: $popoverArrowColor; border-bottom-color: $popover-arrow-color;
} }
} }
&.left .arrow { &.left .arrow {
top: 50%; top: 50%;
right: -$popoverArrowOuterWidth; right: -$popover-arrow-outer-width;
margin-top: -$popoverArrowOuterWidth; margin-top: -$popover-arrow-outer-width;
border-right-width: 0; border-right-width: 0;
border-left-color: #999; // IE8 fallback border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback
border-left-color: $popoverArrowOuterColor; border-left-color: $popover-arrow-outer-color;
&:after { &:after {
content: " ";
right: 1px; right: 1px;
border-right-width: 0; border-right-width: 0;
border-left-color: $popoverArrowColor; border-left-color: $popover-arrow-color;
bottom: -$popoverArrowWidth; bottom: -$popover-arrow-width;
} }
} }

View file

@ -0,0 +1,105 @@
//
// Basic print styles
// --------------------------------------------------
// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
@media print {
* {
text-shadow: none !important;
color: #000 !important; // Black prints faster: h5bp.com/s
background: transparent !important;
box-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
// Don't show links for images, or javascript/internal links
a[href^="javascript:"]:after,
a[href^="#"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group; // h5bp.com/t
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
@page {
margin: 2cm .5cm;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
// Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
// Once fixed, we can just straight up remove this.
select {
background: #fff !important;
}
// Bootstrap components
.navbar {
display: none;
}
.table {
td,
th {
background-color: #fff !important;
}
}
.btn,
.dropup > .btn {
> .caret {
border-top-color: #000 !important;
}
}
.label {
border: 1px solid #000;
}
.table {
border-collapse: collapse !important;
}
.table-bordered {
th,
td {
border: 1px solid #ddd !important;
}
}
}

View file

@ -3,34 +3,16 @@
// -------------------------------------------------- // --------------------------------------------------
// ANIMATIONS // Bar animations
// ---------- // -------------------------
// Webkit // WebKit
@-webkit-keyframes progress-bar-stripes { @-webkit-keyframes progress-bar-stripes {
from { background-position: 40px 0; } from { background-position: 40px 0; }
to { background-position: 0 0; } to { background-position: 0 0; }
} }
// Firefox // Spec and IE10+
@-moz-keyframes progress-bar-stripes {
from { background-position: 40px 0; }
to { background-position: 0 0; }
}
// IE9
@-ms-keyframes progress-bar-stripes {
from { background-position: 40px 0; }
to { background-position: 0 0; }
}
// Opera
@-o-keyframes progress-bar-stripes {
from { background-position: 0 0; }
to { background-position: 40px 0; }
}
// Spec
@keyframes progress-bar-stripes { @keyframes progress-bar-stripes {
from { background-position: 40px 0; } from { background-position: 40px 0; }
to { background-position: 0 0; } to { background-position: 0 0; }
@ -38,85 +20,61 @@
// THE BARS // Bar itself
// -------- // -------------------------
// Outer container // Outer container
.progress { .progress {
overflow: hidden; overflow: hidden;
height: $baseLineHeight; height: $line-height-computed;
margin-bottom: $baseLineHeight; margin-bottom: $line-height-computed;
@include gradient-vertical(#f5f5f5, #f9f9f9); background-color: $progress-bg;
border-radius: $border-radius-base;
@include box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
@include border-radius($baseBorderRadius);
} }
// Bar of progress // Bar of progress
.progress .bar { .progress-bar {
float: left;
width: 0%; width: 0%;
height: 100%; height: 100%;
color: $white; font-size: $font-size-small;
float: left; line-height: $line-height-computed;
font-size: 12px; color: $progress-bar-color;
text-align: center; text-align: center;
text-shadow: 0 -1px 0 rgba(0,0,0,.25); background-color: $progress-bar-bg;
@include gradient-vertical(#149bdf, #0480be);
@include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
@include box-sizing(border-box);
@include transition(width .6s ease); @include transition(width .6s ease);
} }
.progress .bar + .bar {
@include box-shadow(inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15));
}
// Striped bars // Striped bars
.progress-striped .bar { .progress-striped .progress-bar {
@include gradient-striped(#149bdf); @include gradient-striped();
@include background-size(40px 40px); background-size: 40px 40px;
} }
// Call animation for the active one // Call animation for the active one
.progress.active .bar { .progress.active .progress-bar {
-webkit-animation: progress-bar-stripes 2s linear infinite; @include animation(progress-bar-stripes 2s linear infinite);
-moz-animation: progress-bar-stripes 2s linear infinite;
-ms-animation: progress-bar-stripes 2s linear infinite;
-o-animation: progress-bar-stripes 2s linear infinite;
animation: progress-bar-stripes 2s linear infinite;
} }
// COLORS // Variations
// ------ // -------------------------
// Danger (red) .progress-bar-success {
.progress-danger .bar, .progress .bar-danger { @include progress-bar-variant($progress-bar-success-bg);
@include gradient-vertical(#ee5f5b, #c43c35);
}
.progress-danger.progress-striped .bar, .progress-striped .bar-danger {
@include gradient-striped(#ee5f5b);
} }
// Success (green) .progress-bar-info {
.progress-success .bar, .progress .bar-success { @include progress-bar-variant($progress-bar-info-bg);
@include gradient-vertical(#62c462, #57a957);
}
.progress-success.progress-striped .bar, .progress-striped .bar-success {
@include gradient-striped(#62c462);
} }
// Info (teal) .progress-bar-warning {
.progress-info .bar, .progress .bar-info { @include progress-bar-variant($progress-bar-warning-bg);
@include gradient-vertical(#5bc0de, #339bb9);
}
.progress-info.progress-striped .bar, .progress-striped .bar-info {
@include gradient-striped(#5bc0de);
} }
// Warning (orange) .progress-bar-danger {
.progress-warning .bar, .progress .bar-warning { @include progress-bar-variant($progress-bar-danger-bg);
@include gradient-vertical(lighten($orange, 15%), $orange);
}
.progress-warning.progress-striped .bar, .progress-striped .bar-warning {
@include gradient-striped(lighten($orange, 15%));
} }

View file

@ -1,216 +0,0 @@
//
// Reset CSS
// Adapted from http://github.com/necolas/normalize.css
// --------------------------------------------------
// Display in IE6-9 and FF3
// -------------------------
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
nav,
section {
display: block;
}
// Display block in IE6-9 and FF3
// -------------------------
audio,
canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
// Prevents modern browsers from displaying 'audio' without controls
// -------------------------
audio:not([controls]) {
display: none;
}
// Base settings
// -------------------------
html {
font-size: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
// Focus states
a:focus {
@include tab-focus();
}
// Hover & Active
a:hover,
a:active {
outline: 0;
}
// Prevents sub and sup affecting line-height in all browsers
// -------------------------
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
// Img border in a's and image quality
// -------------------------
img {
/* Responsive images (ensure images don't scale beyond their parents) */
max-width: 100%; /* Part 1: Set a maxium relative to the parent */
width: auto\9; /* IE7-8 need help adjusting responsive images */
height: auto; /* Part 2: Scale the height according to the width, otherwise you get stretching */
vertical-align: middle;
border: 0;
-ms-interpolation-mode: bicubic;
}
// Prevent max-width from affecting Google Maps
#map_canvas img,
.google-maps img {
max-width: none;
}
// Forms
// -------------------------
// Font size in all browsers, margin changes, misc consistency
button,
input,
select,
textarea {
margin: 0;
font-size: 100%;
vertical-align: middle;
}
button,
input {
*overflow: visible; // Inner spacing ie IE6/7
line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
}
button::-moz-focus-inner,
input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
padding: 0;
border: 0;
}
button,
html input[type="button"], // Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls.
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; // Corrects inability to style clickable `input` types in iOS.
cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others.
}
label,
select,
button,
input[type="button"],
input[type="reset"],
input[type="submit"],
input[type="radio"],
input[type="checkbox"] {
cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others.
}
input[type="search"] { // Appearance in Safari/Chrome
@include box-sizing(content-box);
-webkit-appearance: textfield;
}
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
}
textarea {
overflow: auto; // Remove vertical scrollbar in IE6-9
vertical-align: top; // Readability and alignment cross-browser
}
// Printing
// -------------------------
// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
@media print {
* {
text-shadow: none !important;
color: #000 !important; // Black prints faster: h5bp.com/s
background: transparent !important;
box-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
// Don't show links for images, or javascript/internal links
.ir a:after,
a[href^="javascript:"]:after,
a[href^="#"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group; // h5bp.com/t
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
@page {
margin: 0.5cm;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
}

View file

@ -3,72 +3,196 @@
// -------------------------------------------------- // --------------------------------------------------
// IE10 Metro responsive // IE10 in Windows (Phone) 8
// Required for Windows 8 Metro split-screen snapping with IE10 //
// Support for responsive views via media queries is kind of borked in IE10, for
// Surface/desktop in split view and for Windows Phone 8. This particular fix
// must be accompanied by a snippet of JavaScript to sniff the user agent and
// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
// our Getting Started page for more information on this bug.
//
// For more information, see the following:
//
// Issue: https://github.com/twbs/bootstrap/issues/10497
// Docs: http://getbootstrap.com/getting-started/#browsers
// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
@-ms-viewport { @-ms-viewport {
width: device-width; width: device-width;
} }
// Hide from screenreaders and browsers
// Credit: HTML5 Boilerplate
.hidden {
display: none;
visibility: hidden;
}
// Visibility utilities // Visibility utilities
// For desktops @include responsive-invisibility('.visible-xs');
.visible-phone { display: none !important; } @media (max-width: $screen-xs-max) {
.visible-tablet { display: none !important; } @include responsive-visibility('.visible-xs');
.hidden-phone { }
.hidden-tablet { }
.hidden-desktop { display: none !important; }
.visible-desktop { display: inherit !important; }
// Tablets & small desktops only
@media (min-width: 768px) and (max-width: 979px) {
// Hide everything else
.hidden-desktop { display: inherit !important; }
.visible-desktop { display: none !important ; }
// Show
.visible-tablet { display: inherit !important; }
// Hide
.hidden-tablet { display: none !important; }
} }
// Phones only @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
@media (max-width: 767px) { @include responsive-visibility('.visible-xs.visible-sm');
// Hide everything else }
.hidden-desktop { display: inherit !important; }
.visible-desktop { display: none !important; }
// Show @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
.visible-phone { display: inherit !important; } // Use inherit to restore previous behavior @include responsive-visibility('.visible-xs.visible-md');
// Hide }
.hidden-phone { display: none !important; }
@media (min-width: $screen-lg-min) {
@include responsive-visibility('.visible-xs.visible-lg');
}
@include responsive-invisibility('.visible-sm');
@media (max-width: $screen-xs-max) {
@include responsive-visibility('.visible-sm.visible-xs');
}
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
@include responsive-visibility('.visible-sm');
}
@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
@include responsive-visibility('.visible-sm.visible-md');
}
@media (min-width: $screen-lg-min) {
@include responsive-visibility('.visible-sm.visible-lg');
}
@include responsive-invisibility('.visible-md');
@media (max-width: $screen-xs-max) {
@include responsive-visibility('.visible-md.visible-xs');
}
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
@include responsive-visibility('.visible-md.visible-sm');
}
@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
@include responsive-visibility('.visible-md');
}
@media (min-width: $screen-lg-min) {
@include responsive-visibility('.visible-md.visible-lg');
}
@include responsive-invisibility('.visible-lg');
@media (max-width: $screen-xs-max) {
@include responsive-visibility('.visible-lg.visible-xs');
}
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
@include responsive-visibility('.visible-lg.visible-sm');
}
@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
@include responsive-visibility('.visible-lg.visible-md');
}
@media (min-width: $screen-lg-min) {
@include responsive-visibility('.visible-lg');
}
@include responsive-visibility('.hidden-xs');
@media (max-width: $screen-xs-max) {
@include responsive-invisibility('.hidden-xs');
}
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
@include responsive-invisibility('.hidden-xs.hidden-sm');
}
@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
@include responsive-invisibility('.hidden-xs.hidden-md');
}
@media (min-width: $screen-lg-min) {
@include responsive-invisibility('.hidden-xs.hidden-lg');
}
@include responsive-visibility('.hidden-sm');
@media (max-width: $screen-xs-max) {
@include responsive-invisibility('.hidden-sm.hidden-xs');
}
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
@include responsive-invisibility('.hidden-sm');
}
@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
@include responsive-invisibility('.hidden-sm.hidden-md');
}
@media (min-width: $screen-lg-min) {
@include responsive-invisibility('.hidden-sm.hidden-lg');
}
@include responsive-visibility('.hidden-md');
@media (max-width: $screen-xs-max) {
@include responsive-invisibility('.hidden-md.hidden-xs');
}
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
@include responsive-invisibility('.hidden-md.hidden-sm');
}
@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
@include responsive-invisibility('.hidden-md');
}
@media (min-width: $screen-lg-min) {
@include responsive-invisibility('.hidden-md.hidden-lg');
}
@include responsive-visibility('.hidden-lg');
@media (max-width: $screen-xs-max) {
@include responsive-invisibility('.hidden-lg.hidden-xs');
}
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
@include responsive-invisibility('.hidden-lg.hidden-sm');
}
@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
@include responsive-invisibility('.hidden-lg.hidden-md');
}
@media (min-width: $screen-lg-min) {
@include responsive-invisibility('.hidden-lg');
} }
// Print utilities // Print utilities
.visible-print { display: none !important; }
.hidden-print { } @include responsive-invisibility('.visible-print');
@media print { @media print {
.visible-print { display: inherit !important; }
.hidden-print { display: none !important; }
}
// Clearing floats @include responsive-visibility('.visible-print');
.clearfix {
@include clearfix();
}
// Accessible yet invisible text
.hide-text {
@include hide-text();
}
// Uses box-sizing mixin, so must be defined here @include responsive-invisibility('.hidden-print');
.input-block-level {
@include input-block-level();
} }

View file

@ -3,51 +3,117 @@
// -------------------------------------------------- // --------------------------------------------------
// Reset the box-sizing
*,
*:before,
*:after {
@include box-sizing(border-box);
}
// Body reset // Body reset
// -------------------------
html {
font-size: 62.5%;
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
body { body {
margin: 0; font-family: $font-family-base;
font-family: $baseFontFamily; font-size: $font-size-base;
font-size: $baseFontSize; line-height: $line-height-base;
line-height: $baseLineHeight; color: $text-color;
color: $textColor; background-color: $body-bg;
background-color: $bodyBackground; }
// Reset fonts for relevant elements
input,
button,
select,
textarea {
font-family: inherit;
font-size: inherit;
line-height: inherit;
} }
// Links // Links
// -------------------------
a { a {
color: $linkColor; color: $link-color;
text-decoration: none; text-decoration: none;
}
a:hover, &:hover,
a:focus { &:focus {
color: $linkColorHover; color: $link-hover-color;
text-decoration: underline; text-decoration: underline;
} }
&:focus {
@include tab-focus();
}
}
// Images // Images
// -------------------------
img {
vertical-align: middle;
}
// Responsive images (ensure images don't scale beyond their parents)
.img-responsive {
@include img-responsive();
}
// Rounded corners // Rounded corners
.img-rounded { .img-rounded {
@include border-radius(6px); border-radius: $border-radius-large;
} }
// Add polaroid-esque trim // Image thumbnails
.img-polaroid { //
padding: 4px; // Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.
background-color: #fff; .img-thumbnail {
border: 1px solid #ccc; padding: $thumbnail-padding;
border: 1px solid rgba(0,0,0,.2); line-height: $line-height-base;
@include box-shadow(0 1px 3px rgba(0,0,0,.1)); background-color: $thumbnail-bg;
border: 1px solid $thumbnail-border;
border-radius: $thumbnail-border-radius;
@include transition(all .2s ease-in-out);
// Keep them at most 100% wide
@include img-responsive(inline-block);
} }
// Perfect circle // Perfect circle
.img-circle { .img-circle {
@include border-radius(500px); // crank the border-radius so it works with most reasonably sized images border-radius: 50%; // set radius in percents
}
// Horizontal rules
hr {
margin-top: $line-height-computed;
margin-bottom: $line-height-computed;
border: 0;
border-top: 1px solid $hr-border;
}
// Only display content to screen readers
//
// See: http://a11yproject.com/posts/how-to-hide-content/
.sr-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0,0,0,0);
border: 0;
} }

View file

@ -19,10 +19,10 @@
display: inline-block; display: inline-block;
width: 14px; width: 14px;
height: 14px; height: 14px;
@include ie7-restore-right-whitespace(); //@include ie7-restore-right-whitespace();
line-height: 14px; line-height: 14px;
vertical-align: text-top; vertical-align: text-top;
background-image: url($iconSpritePath); background-image: url($icon-sprite-path);
background-position: 14px 14px; background-position: 14px 14px;
background-repeat: no-repeat; background-repeat: no-repeat;
margin-top: 1px; margin-top: 1px;
@ -46,7 +46,7 @@
.dropdown-submenu:focus > a > [class^="icon-"], .dropdown-submenu:focus > a > [class^="icon-"],
.dropdown-submenu:hover > a > [class*=" icon-"], .dropdown-submenu:hover > a > [class*=" icon-"],
.dropdown-submenu:focus > a > [class*=" icon-"] { .dropdown-submenu:focus > a > [class*=" icon-"] {
background-image: url($iconWhiteSpritePath); background-image: url($icon-white-sprite-path);
} }
.icon-glass { background-position: 0 0; } .icon-glass { background-position: 0 0; }

View file

@ -3,233 +3,229 @@
// -------------------------------------------------- // --------------------------------------------------
// BASE TABLES
// -----------------
table { table {
max-width: 100%; max-width: 100%;
background-color: $tableBackground; background-color: $table-bg;
border-collapse: collapse; }
border-spacing: 0; th {
text-align: left;
} }
// BASELINE STYLES
// --------------- // Baseline styles
.table { .table {
width: 100%; width: 100%;
margin-bottom: $baseLineHeight; margin-bottom: $line-height-computed;
// Cells // Cells
th, > thead,
td { > tbody,
padding: 8px; > tfoot {
line-height: $baseLineHeight; > tr {
text-align: left; > th,
> td {
padding: $table-cell-padding;
line-height: $line-height-base;
vertical-align: top; vertical-align: top;
border-top: 1px solid $tableBorder; border-top: 1px solid $table-border-color;
}
} }
th {
font-weight: bold;
} }
// Bottom align for column headings // Bottom align for column headings
thead th { > thead > tr > th {
vertical-align: bottom; vertical-align: bottom;
border-bottom: 2px solid $table-border-color;
} }
// Remove top border from thead by default // Remove top border from thead by default
caption + thead tr:first-child th, > caption + thead,
caption + thead tr:first-child td, > colgroup + thead,
colgroup + thead tr:first-child th, > thead:first-child {
colgroup + thead tr:first-child td, > tr:first-child {
thead:first-child tr:first-child th, > th,
thead:first-child tr:first-child td { > td {
border-top: 0; border-top: 0;
} }
}
}
// Account for multiple tbody instances // Account for multiple tbody instances
tbody + tbody { > tbody + tbody {
border-top: 2px solid $tableBorder; border-top: 2px solid $table-border-color;
} }
// Nesting // Nesting
.table { .table {
background-color: $bodyBackground; background-color: $body-bg;
} }
} }
// Condensed table w/ half padding
// CONDENSED TABLE W/ HALF PADDING
// -------------------------------
.table-condensed { .table-condensed {
th, > thead,
td { > tbody,
padding: 4px 5px; > tfoot {
> tr {
> th,
> td {
padding: $table-condensed-cell-padding;
}
}
} }
} }
// BORDERED VERSION // Bordered version
// ---------------- //
// Add borders all around the table and between all the columns.
.table-bordered { .table-bordered {
border: 1px solid $tableBorder; border: 1px solid $table-border-color;
border-collapse: separate; // Done so we can round those corners! > thead,
*border-collapse: collapse; // IE7 can't round corners anyway > tbody,
border-left: 0; > tfoot {
@include border-radius($baseBorderRadius); > tr {
th, > th,
td { > td {
border-left: 1px solid $tableBorder; border: 1px solid $table-border-color;
} }
// Prevent a double border
caption + thead tr:first-child th,
caption + tbody tr:first-child th,
caption + tbody tr:first-child td,
colgroup + thead tr:first-child th,
colgroup + tbody tr:first-child th,
colgroup + tbody tr:first-child td,
thead:first-child tr:first-child th,
tbody:first-child tr:first-child th,
tbody:first-child tr:first-child td {
border-top: 0;
} }
// For first th/td in the first row in the first thead or tbody
thead:first-child tr:first-child > th:first-child,
tbody:first-child tr:first-child > td:first-child,
tbody:first-child tr:first-child > th:first-child {
@include border-top-left-radius($baseBorderRadius);
} }
// For last th/td in the first row in the first thead or tbody > thead > tr {
thead:first-child tr:first-child > th:last-child, > th,
tbody:first-child tr:first-child > td:last-child, > td {
tbody:first-child tr:first-child > th:last-child { border-bottom-width: 2px;
@include border-top-right-radius($baseBorderRadius);
} }
// For first th/td (can be either) in the last row in the last thead, tbody, and tfoot
thead:last-child tr:last-child > th:first-child,
tbody:last-child tr:last-child > td:first-child,
tbody:last-child tr:last-child > th:first-child,
tfoot:last-child tr:last-child > td:first-child,
tfoot:last-child tr:last-child > th:first-child {
@include border-bottom-left-radius($baseBorderRadius);
} }
// For last th/td (can be either) in the last row in the last thead, tbody, and tfoot
thead:last-child tr:last-child > th:last-child,
tbody:last-child tr:last-child > td:last-child,
tbody:last-child tr:last-child > th:last-child,
tfoot:last-child tr:last-child > td:last-child,
tfoot:last-child tr:last-child > th:last-child {
@include border-bottom-right-radius($baseBorderRadius);
}
// Clear border-radius for first and last td in the last row in the last tbody for table with tfoot
tfoot + tbody:last-child tr:last-child td:first-child {
@include border-bottom-left-radius(0);
}
tfoot + tbody:last-child tr:last-child td:last-child {
@include border-bottom-right-radius(0);
}
// Special fixes to round the left border on the first td/th
caption + thead tr:first-child th:first-child,
caption + tbody tr:first-child td:first-child,
colgroup + thead tr:first-child th:first-child,
colgroup + tbody tr:first-child td:first-child {
@include border-top-left-radius($baseBorderRadius);
}
caption + thead tr:first-child th:last-child,
caption + tbody tr:first-child td:last-child,
colgroup + thead tr:first-child th:last-child,
colgroup + tbody tr:first-child td:last-child {
@include border-top-right-radius($baseBorderRadius);
}
} }
// Zebra-striping
//
// ZEBRA-STRIPING
// --------------
// Default zebra-stripe styles (alternating gray and transparent backgrounds) // Default zebra-stripe styles (alternating gray and transparent backgrounds)
.table-striped { .table-striped {
tbody { > tbody > tr:nth-child(odd) {
> tr:nth-child(odd) > td, > td,
> tr:nth-child(odd) > th { > th {
background-color: $tableBackgroundAccent; background-color: $table-bg-accent;
} }
} }
} }
// HOVER EFFECT // Hover effect
// ------------ //
// Placed here since it has to come after the potential zebra striping // Placed here since it has to come after the potential zebra striping
.table-hover { .table-hover {
tbody { > tbody > tr:hover {
tr:hover > td, > td,
tr:hover > th { > th {
background-color: $tableBackgroundHover; background-color: $table-bg-hover;
} }
} }
} }
// TABLE CELL SIZING // Table cell sizing
// ----------------- //
// Reset default table behavior
// Reset default grid behavior table col[class*="col-"] {
table td[class*="span"], position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
table th[class*="span"], float: none;
.row-fluid table td[class*="span"], display: table-column;
.row-fluid table th[class*="span"] { }
table {
td,
th {
&[class*="col-"] {
float: none;
display: table-cell; display: table-cell;
float: none; // undo default grid column styles
margin-left: 0; // undo default grid column styles
} }
// Change the column widths to account for td/th padding
.table td,
.table th {
@for $i from 1 through 12 {
&.span#{$i} { @include tableColumns($i); }
} }
} }
// Table backgrounds
//
// Exact selectors below required to override `.table-striped` and prevent
// inheritance to nested tables.
// TABLE BACKGROUNDS // Generate the contextual variants
// ----------------- @include table-row-variant('active', $table-bg-active);
// Exact selectors below required to override .table-striped @include table-row-variant('success', $state-success-bg);
@include table-row-variant('danger', $state-danger-bg);
@include table-row-variant('warning', $state-warning-bg);
.table tbody tr {
&.success > td { // Responsive tables
background-color: $successBackground; //
// Wrap your tables in `.table-responsive` and we'll make them mobile friendly
// by enabling horizontal scrolling. Only applies <768px. Everything above that
// will display normally.
@media (max-width: $screen-xs-max) {
.table-responsive {
width: 100%;
margin-bottom: ($line-height-computed * 0.75);
overflow-y: hidden;
overflow-x: scroll;
-ms-overflow-style: -ms-autohiding-scrollbar;
border: 1px solid $table-border-color;
-webkit-overflow-scrolling: touch;
// Tighten up spacing
> .table {
margin-bottom: 0;
// Ensure the content doesn't wrap
> thead,
> tbody,
> tfoot {
> tr {
> th,
> td {
white-space: nowrap;
} }
&.error > td {
background-color: $errorBackground;
} }
&.warning > td {
background-color: $warningBackground;
}
&.info > td {
background-color: $infoBackground;
} }
} }
// Hover states for .table-hover // Special overrides for the bordered tables
.table-hover tbody tr { > .table-bordered {
&.success:hover > td { border: 0;
background-color: darken($successBackground, 5%);
// Nuke the appropriate borders so that the parent can handle them
> thead,
> tbody,
> tfoot {
> tr {
> th:first-child,
> td:first-child {
border-left: 0;
}
> th:last-child,
> td:last-child {
border-right: 0;
}
}
}
// Only nuke the last row's bottom-border in `tbody` and `tfoot` since
// chances are there will be only one `tr` in a `thead` and that would
// remove the border altogether.
> tbody,
> tfoot {
> tr:last-child {
> th,
> td {
border-bottom: 0;
}
}
}
} }
&.error:hover > td {
background-color: darken($errorBackground, 5%);
}
&.warning:hover > td {
background-color: darken($warningBackground, 5%);
}
&.info:hover > td {
background-color: darken($infoBackground, 5%);
} }
} }

View file

@ -0,0 +1,247 @@
//
// Load core variables and mixins
// --------------------------------------------------
@import "bootstrap/variables";
@import "bootstrap/mixins";
//
// Buttons
// --------------------------------------------------
// Common styles
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0,0,0,.2);
$shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);
@include box-shadow($shadow);
// Reset the shadow
&:active,
&.active {
@include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
}
}
// Mixin for generating new styles
@mixin btn-styles($btn-color: #555) {
@include gradient-vertical($start-color: $btn-color, $end-color: darken($btn-color, 12%));
@include reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners
background-repeat: repeat-x;
border-color: darken($btn-color, 14%);
&:hover,
&:focus {
background-color: darken($btn-color, 12%);
background-position: 0 -15px;
}
&:active,
&.active {
background-color: darken($btn-color, 12%);
border-color: darken($btn-color, 14%);
}
}
// Common styles
.btn {
// Remove the gradient for the pressed/active state
&:active,
&.active {
background-image: none;
}
}
// Apply the mixin to the buttons
.btn-default { @include btn-styles($btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }
.btn-primary { @include btn-styles($btn-primary-bg); }
.btn-success { @include btn-styles($btn-success-bg); }
.btn-warning { @include btn-styles($btn-warning-bg); }
.btn-danger { @include btn-styles($btn-danger-bg); }
.btn-info { @include btn-styles($btn-info-bg); }
//
// Images
// --------------------------------------------------
.thumbnail,
.img-thumbnail {
@include box-shadow(0 1px 2px rgba(0,0,0,.075));
}
//
// Dropdowns
// --------------------------------------------------
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
@include gradient-vertical($start-color: $dropdown-link-hover-bg, $end-color: darken($dropdown-link-hover-bg, 5%));
background-color: darken($dropdown-link-hover-bg, 5%);
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
@include gradient-vertical($start-color: $dropdown-link-active-bg, $end-color: darken($dropdown-link-active-bg, 5%));
background-color: darken($dropdown-link-active-bg, 5%);
}
//
// Navbar
// --------------------------------------------------
// Default navbar
.navbar-default {
@include gradient-vertical($start-color: lighten($navbar-default-bg, 10%), $end-color: $navbar-default-bg);
@include reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
border-radius: $navbar-border-radius;
$shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);
@include box-shadow($shadow);
.navbar-nav > .active > a {
@include gradient-vertical($start-color: darken($navbar-default-bg, 5%), $end-color: darken($navbar-default-bg, 2%));
@include box-shadow(inset 0 3px 9px rgba(0,0,0,.075));
}
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255,255,255,.25);
}
// Inverted navbar
.navbar-inverse {
@include gradient-vertical($start-color: lighten($navbar-inverse-bg, 10%), $end-color: $navbar-inverse-bg);
@include reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
.navbar-nav > .active > a {
@include gradient-vertical($start-color: $navbar-inverse-bg, $end-color: lighten($navbar-inverse-bg, 2.5%));
@include box-shadow(inset 0 3px 9px rgba(0,0,0,.25));
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
}
}
// Undo rounded corners in static and fixed navbars
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
//
// Alerts
// --------------------------------------------------
// Common styles
.alert {
text-shadow: 0 1px 0 rgba(255,255,255,.2);
$shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);
@include box-shadow($shadow);
}
// Mixin for generating new styles
@mixin alert-styles($color) {
@include gradient-vertical($start-color: $color, $end-color: darken($color, 7.5%));
border-color: darken($color, 15%);
}
// Apply the mixin to the alerts
.alert-success { @include alert-styles($alert-success-bg); }
.alert-info { @include alert-styles($alert-info-bg); }
.alert-warning { @include alert-styles($alert-warning-bg); }
.alert-danger { @include alert-styles($alert-danger-bg); }
//
// Progress bars
// --------------------------------------------------
// Give the progress background some depth
.progress {
@include gradient-vertical($start-color: darken($progress-bg, 4%), $end-color: $progress-bg)
}
// Mixin for generating new styles
@mixin progress-bar-styles($color) {
@include gradient-vertical($start-color: $color, $end-color: darken($color, 10%));
}
// Apply the mixin to the progress bars
.progress-bar { @include progress-bar-styles($progress-bar-bg); }
.progress-bar-success { @include progress-bar-styles($progress-bar-success-bg); }
.progress-bar-info { @include progress-bar-styles($progress-bar-info-bg); }
.progress-bar-warning { @include progress-bar-styles($progress-bar-warning-bg); }
.progress-bar-danger { @include progress-bar-styles($progress-bar-danger-bg); }
//
// List groups
// --------------------------------------------------
.list-group {
border-radius: $border-radius-base;
@include box-shadow(0 1px 2px rgba(0,0,0,.075));
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 darken($list-group-active-bg, 10%);
@include gradient-vertical($start-color: $list-group-active-bg, $end-color: darken($list-group-active-bg, 7.5%));
border-color: darken($list-group-active-border, 7.5%);
}
//
// Panels
// --------------------------------------------------
// Common styles
.panel {
@include box-shadow(0 1px 2px rgba(0,0,0,.05));
}
// Mixin for generating new styles
@mixin panel-heading-styles($color) {
@include gradient-vertical($start-color: $color, $end-color: darken($color, 5%));
}
// Apply the mixin to the panel headings only
.panel-default > .panel-heading { @include panel-heading-styles($panel-default-heading-bg); }
.panel-primary > .panel-heading { @include panel-heading-styles($panel-primary-heading-bg); }
.panel-success > .panel-heading { @include panel-heading-styles($panel-success-heading-bg); }
.panel-info > .panel-heading { @include panel-heading-styles($panel-info-heading-bg); }
.panel-warning > .panel-heading { @include panel-heading-styles($panel-warning-heading-bg); }
.panel-danger > .panel-heading { @include panel-heading-styles($panel-danger-heading-bg); }
//
// Wells
// --------------------------------------------------
.well {
@include gradient-vertical($start-color: darken($well-bg, 5%), $end-color: $well-bg);
border-color: darken($well-bg, 10%);
$shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);
@include box-shadow($shadow);
}

View file

@ -3,51 +3,36 @@
// -------------------------------------------------- // --------------------------------------------------
// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files // Mixin and adjust the regular image class
// Make wrapper ul behave like the grid
.thumbnails {
margin-left: -$gridGutterWidth;
list-style: none;
@include clearfix();
}
// Fluid rows have no left margin
.row-fluid .thumbnails {
margin-left: 0;
}
// Float li to make thumbnails appear in a row
.thumbnails > li {
float: left; // Explicity set the float since we don't require .span* classes
margin-bottom: $baseLineHeight;
margin-left: $gridGutterWidth;
}
// The actual thumbnail (can be `a` or `div`)
.thumbnail { .thumbnail {
display: block; display: block;
padding: 4px; padding: $thumbnail-padding;
line-height: $baseLineHeight; margin-bottom: $line-height-computed;
border: 1px solid #ddd; line-height: $line-height-base;
@include border-radius($baseBorderRadius); background-color: $thumbnail-bg;
@include box-shadow(0 1px 3px rgba(0,0,0,.055)); border: 1px solid $thumbnail-border;
border-radius: $thumbnail-border-radius;
@include transition(all .2s ease-in-out); @include transition(all .2s ease-in-out);
}
// Add a hover/focus state for linked versions only
a.thumbnail:hover,
a.thumbnail:focus {
border-color: $linkColor;
@include box-shadow(0 1px 4px rgba(0,105,214,.25));
}
// Images and captions > img,
.thumbnail > img { a > img {
display: block; @include img-responsive();
max-width: 100%;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
.thumbnail .caption {
padding: 9px; // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active
color: $gray;
// Image captions
.caption {
padding: $thumbnail-caption-padding;
color: $thumbnail-caption-color;
}
}
// Add a hover state for linked versions only
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
border-color: $link-color;
} }

View file

@ -6,28 +6,29 @@
// Base class // Base class
.tooltip { .tooltip {
position: absolute; position: absolute;
z-index: $zindexTooltip; z-index: $zindex-tooltip;
display: block; display: block;
visibility: visible; visibility: visible;
font-size: 11px; font-size: $font-size-small;
line-height: 1.4; line-height: 1.4;
@include opacity(0); @include opacity(0);
&.in { @include opacity(80); }
&.top { margin-top: -3px; padding: 5px 0; } &.in { @include opacity(.9); }
&.right { margin-left: 3px; padding: 0 5px; } &.top { margin-top: -3px; padding: $tooltip-arrow-width 0; }
&.bottom { margin-top: 3px; padding: 5px 0; } &.right { margin-left: 3px; padding: 0 $tooltip-arrow-width; }
&.left { margin-left: -3px; padding: 0 5px; } &.bottom { margin-top: 3px; padding: $tooltip-arrow-width 0; }
&.left { margin-left: -3px; padding: 0 $tooltip-arrow-width; }
} }
// Wrapper for the tooltip content // Wrapper for the tooltip content
.tooltip-inner { .tooltip-inner {
max-width: 200px; max-width: $tooltip-max-width;
padding: 8px; padding: 3px 8px;
color: $tooltipColor; color: $tooltip-color;
text-align: center; text-align: center;
text-decoration: none; text-decoration: none;
background-color: $tooltipBackground; background-color: $tooltip-bg;
@include border-radius($baseBorderRadius); border-radius: $border-radius-base;
} }
// Arrows // Arrows
@ -42,29 +43,53 @@
&.top .tooltip-arrow { &.top .tooltip-arrow {
bottom: 0; bottom: 0;
left: 50%; left: 50%;
margin-left: -$tooltipArrowWidth; margin-left: -$tooltip-arrow-width;
border-width: $tooltipArrowWidth $tooltipArrowWidth 0; border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
border-top-color: $tooltipArrowColor; border-top-color: $tooltip-arrow-color;
}
&.top-left .tooltip-arrow {
bottom: 0;
left: $tooltip-arrow-width;
border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
border-top-color: $tooltip-arrow-color;
}
&.top-right .tooltip-arrow {
bottom: 0;
right: $tooltip-arrow-width;
border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
border-top-color: $tooltip-arrow-color;
} }
&.right .tooltip-arrow { &.right .tooltip-arrow {
top: 50%; top: 50%;
left: 0; left: 0;
margin-top: -$tooltipArrowWidth; margin-top: -$tooltip-arrow-width;
border-width: $tooltipArrowWidth $tooltipArrowWidth $tooltipArrowWidth 0; border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;
border-right-color: $tooltipArrowColor; border-right-color: $tooltip-arrow-color;
} }
&.left .tooltip-arrow { &.left .tooltip-arrow {
top: 50%; top: 50%;
right: 0; right: 0;
margin-top: -$tooltipArrowWidth; margin-top: -$tooltip-arrow-width;
border-width: $tooltipArrowWidth 0 $tooltipArrowWidth $tooltipArrowWidth; border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;
border-left-color: $tooltipArrowColor; border-left-color: $tooltip-arrow-color;
} }
&.bottom .tooltip-arrow { &.bottom .tooltip-arrow {
top: 0; top: 0;
left: 50%; left: 50%;
margin-left: -$tooltipArrowWidth; margin-left: -$tooltip-arrow-width;
border-width: 0 $tooltipArrowWidth $tooltipArrowWidth; border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
border-bottom-color: $tooltipArrowColor; border-bottom-color: $tooltip-arrow-color;
}
&.bottom-left .tooltip-arrow {
top: 0;
left: $tooltip-arrow-width;
border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
border-bottom-color: $tooltip-arrow-color;
}
&.bottom-right .tooltip-arrow {
top: 0;
right: $tooltip-arrow-width;
border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
border-bottom-color: $tooltip-arrow-color;
} }
} }

View file

@ -3,17 +3,71 @@
// -------------------------------------------------- // --------------------------------------------------
// Headings
// -------------------------
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
font-family: $headings-font-family;
font-weight: $headings-font-weight;
line-height: $headings-line-height;
color: $headings-color;
small,
.small {
font-weight: normal;
line-height: 1;
color: $headings-small-color;
}
}
h1,
h2,
h3 {
margin-top: $line-height-computed;
margin-bottom: ($line-height-computed / 2);
small,
.small {
font-size: 65%;
}
}
h4,
h5,
h6 {
margin-top: ($line-height-computed / 2);
margin-bottom: ($line-height-computed / 2);
small,
.small {
font-size: 75%;
}
}
h1, .h1 { font-size: $font-size-h1; }
h2, .h2 { font-size: $font-size-h2; }
h3, .h3 { font-size: $font-size-h3; }
h4, .h4 { font-size: $font-size-h4; }
h5, .h5 { font-size: $font-size-h5; }
h6, .h6 { font-size: $font-size-h6; }
// Body text // Body text
// ------------------------- // -------------------------
p { p {
margin: 0 0 $baseLineHeight / 2; margin: 0 0 ($line-height-computed / 2);
} }
.lead { .lead {
margin-bottom: $baseLineHeight; margin-bottom: $line-height-computed;
font-size: $baseFontSize * 1.5; font-size: floor($font-size-base * 1.15);
font-weight: 200; font-weight: 200;
line-height: $baseLineHeight * 1.5; line-height: 1.4;
@media (min-width: $screen-sm-min) {
font-size: ($font-size-base * 1.5);
}
} }
@ -21,218 +75,199 @@ p {
// ------------------------- // -------------------------
// Ex: 14px base font * 85% = about 12px // Ex: 14px base font * 85% = about 12px
small { font-size: 85%; } small,
.small { font-size: 85%; }
strong { font-weight: bold; } // Undo browser default styling
em { font-style: italic; }
cite { font-style: normal; } cite { font-style: normal; }
// Utility classes // Contextual emphasis
.muted { color: $grayLight; } .text-muted {
a.muted:hover, color: $text-muted;
a.muted:focus { color: darken($grayLight, 10%); } }
.text-primary {
.text-warning { color: $warningText; } color: $brand-primary;
a.text-warning:hover, &:hover {
a.text-warning:focus { color: darken($warningText, 10%); } color: darken($brand-primary, 10%);
}
.text-error { color: $errorText; } }
a.text-error:hover, .text-warning {
a.text-error:focus { color: darken($errorText, 10%); } color: $state-warning-text;
&:hover {
.text-info { color: $infoText; } color: darken($state-warning-text, 10%);
a.text-info:hover, }
a.text-info:focus { color: darken($infoText, 10%); } }
.text-danger {
.text-success { color: $successText; } color: $state-danger-text;
a.text-success:hover, &:hover {
a.text-success:focus { color: darken($successText, 10%); } color: darken($state-danger-text, 10%);
}
}
.text-success {
color: $state-success-text;
&:hover {
color: darken($state-success-text, 10%);
}
}
.text-info {
color: $state-info-text;
&:hover {
color: darken($state-info-text, 10%);
}
}
// Alignment
.text-left { text-align: left; } .text-left { text-align: left; }
.text-right { text-align: right; } .text-right { text-align: right; }
.text-center { text-align: center; } .text-center { text-align: center; }
// Headings
// -------------------------
h1, h2, h3, h4, h5, h6 {
margin: ($baseLineHeight / 2) 0;
font-family: $headingsFontFamily;
font-weight: $headingsFontWeight;
line-height: $baseLineHeight;
color: $headingsColor;
text-rendering: optimizelegibility; // Fix the character spacing for headings
small {
font-weight: normal;
line-height: 1;
color: $grayLight;
}
}
h1,
h2,
h3 { line-height: $baseLineHeight * 2; }
h1 { font-size: $baseFontSize * 2.75; } // ~38px
h2 { font-size: $baseFontSize * 2.25; } // ~32px
h3 { font-size: $baseFontSize * 1.75; } // ~24px
h4 { font-size: $baseFontSize * 1.25; } // ~18px
h5 { font-size: $baseFontSize; }
h6 { font-size: $baseFontSize * 0.85; } // ~12px
h1 small { font-size: $baseFontSize * 1.75; } // ~24px
h2 small { font-size: $baseFontSize * 1.25; } // ~18px
h3 small { font-size: $baseFontSize; }
h4 small { font-size: $baseFontSize; }
// Page header // Page header
// ------------------------- // -------------------------
.page-header { .page-header {
padding-bottom: ($baseLineHeight / 2) - 1; padding-bottom: (($line-height-computed / 2) - 1);
margin: $baseLineHeight 0 ($baseLineHeight * 1.5); margin: ($line-height-computed * 2) 0 $line-height-computed;
border-bottom: 1px solid $grayLighter; border-bottom: 1px solid $page-header-border-color;
} }
// Lists // Lists
// -------------------------------------------------- // --------------------------------------------------
// Unordered and Ordered lists // Unordered and Ordered lists
ul, ol { ul,
padding: 0; ol {
margin: 0 0 $baseLineHeight / 2 25px; margin-top: 0;
} margin-bottom: ($line-height-computed / 2);
ul ul, ul,
ul ol, ol {
ol ol,
ol ul {
margin-bottom: 0; margin-bottom: 0;
} }
li {
line-height: $baseLineHeight;
} }
// Remove default list styles // List options
ul.unstyled,
ol.unstyled { // Unstyled keeps list items block level, just removes default browser padding and list-style
margin-left: 0; .list-unstyled {
padding-left: 0;
list-style: none; list-style: none;
} }
// Single-line list items // Inline turns list items into inline-block
ul.inline, .list-inline {
ol.inline { @extend .list-unstyled;
margin-left: 0;
list-style: none;
> li { > li {
display: inline-block; display: inline-block;
@include ie7-inline-block();
padding-left: 5px; padding-left: 5px;
padding-right: 5px; padding-right: 5px;
&:first-child {
padding-left: 0;
}
} }
} }
// Description Lists // Description Lists
dl { dl {
margin-bottom: $baseLineHeight; margin-top: 0; // Remove browser default
margin-bottom: $line-height-computed;
} }
dt, dt,
dd { dd {
line-height: $baseLineHeight; line-height: $line-height-base;
} }
dt { dt {
font-weight: bold; font-weight: bold;
} }
dd { dd {
margin-left: $baseLineHeight / 2; margin-left: 0; // Undo browser default
} }
// Horizontal layout (like forms)
// Horizontal description lists
//
// Defaults to being stacked without any of the below styles applied, until the
// grid breakpoint is reached (default of ~768px).
@media (min-width: $grid-float-breakpoint) {
.dl-horizontal { .dl-horizontal {
@include clearfix(); // Ensure dl clears floats if empty dd elements present
dt { dt {
float: left; float: left;
width: $horizontalComponentOffset - 20; width: ($component-offset-horizontal - 20);
clear: left; clear: left;
text-align: right; text-align: right;
@include text-overflow(); @include text-overflow();
} }
dd { dd {
margin-left: $horizontalComponentOffset; margin-left: $component-offset-horizontal;
@include clearfix(); // Clear the floated `dt` if an empty `dd` is present
}
} }
} }
// MISC // MISC
// ---- // ----
// Horizontal rules
hr {
margin: $baseLineHeight 0;
border: 0;
border-top: 1px solid $hrBorder;
border-bottom: 1px solid $white;
}
// Abbreviations and acronyms // Abbreviations and acronyms
abbr[title], abbr[title],
// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257 // Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
abbr[data-original-title] { abbr[data-original-title] {
cursor: help; cursor: help;
border-bottom: 1px dotted $grayLight; border-bottom: 1px dotted $abbr-border-color;
} }
abbr.initialism { .initialism {
font-size: 90%; font-size: 90%;
text-transform: uppercase; text-transform: uppercase;
} }
// Blockquotes // Blockquotes
blockquote { blockquote {
padding: 0 0 0 15px; padding: ($line-height-computed / 2) $line-height-computed;
margin: 0 0 $baseLineHeight; margin: 0 0 $line-height-computed;
border-left: 5px solid $grayLighter; border-left: 5px solid $blockquote-border-color;
p { p {
margin-bottom: 0; font-size: ($font-size-base * 1.25);
font-size: $baseFontSize * 1.25;
font-weight: 300; font-weight: 300;
line-height: 1.25; line-height: 1.25;
} }
small { p:last-child {
margin-bottom: 0;
}
small,
.small {
display: block; display: block;
line-height: $baseLineHeight; line-height: $line-height-base;
color: $grayLight; color: $blockquote-small-color;
&:before { &:before {
content: '\2014 \00A0'; content: '\2014 \00A0'; // EM DASH, NBSP
} }
} }
// Float right with text-align: right // Float right with text-align: right
&.pull-right { &.pull-right {
float: right;
padding-right: 15px; padding-right: 15px;
padding-left: 0; padding-left: 0;
border-right: 5px solid $grayLighter; border-right: 5px solid $blockquote-border-color;
border-left: 0; border-left: 0;
p, p,
small { small,
.small {
text-align: right; text-align: right;
} }
small { small,
.small {
&:before { &:before {
content: ''; content: '';
} }
&:after { &:after {
content: '\00A0 \2014'; content: '\00A0 \2014'; // NBSP, EM DASH
} }
} }
} }
} }
// Quotes // Quotes
q:before,
q:after,
blockquote:before, blockquote:before,
blockquote:after { blockquote:after {
content: ""; content: "";
@ -240,8 +275,7 @@ blockquote:after {
// Addresses // Addresses
address { address {
display: block; margin-bottom: $line-height-computed;
margin-bottom: $baseLineHeight;
font-style: normal; font-style: normal;
line-height: $baseLineHeight; line-height: $line-height-base;
} }

View file

@ -3,43 +3,54 @@
// -------------------------------------------------- // --------------------------------------------------
// Quick floats // Floats
.pull-right { // -------------------------
float: right;
}
.pull-left {
float: left;
}
// Toggling content
.hide {
display: none;
}
.show {
display: block;
}
// Visibility
.invisible {
visibility: hidden;
}
// For Affix plugin
.affix {
position: fixed;
}
// Clearing floats
.clearfix { .clearfix {
@include clearfix(); @include clearfix();
} }
.center-block {
// Accessible yet invisible text @include center-block();
.hide-text { }
@include hide-text(); .pull-right {
float: right !important;
}
.pull-left {
float: left !important;
} }
// Uses box-sizing mixin, so must be defined here
.input-block-level { // Toggling content
@include input-block-level(); // -------------------------
// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
.hide {
display: none !important;
}
.show {
display: block !important;
}
.invisible {
visibility: hidden;
}
.text-hide {
@include text-hide();
}
// Hide from screenreaders and browsers
//
// Credit: HTML5 Boilerplate
.hidden {
display: none !important;
visibility: hidden !important;
}
// For Affix plugin
// -------------------------
.affix {
position: fixed;
} }

View file

@ -1,22 +1,25 @@
// Cerulean 2.3.0 // a flag to toggle asset pipeline / compass integration
// defaults to true if twbs-font-path function is present (no function => twbs-font-path('') parsed as string == right side)
// in Sass 3.3 this can be improved with: function-exists(twbs-font-path)
$bootstrap-sass-asset-helper: (twbs-font-path('') != unquote("twbs-font-path('')")) !default;
//
// Variables // Variables
// -------------------------------------------------- // --------------------------------------------------
// GLOBAL VALUES // Global values
// -------------------------------------------------- // --------------------------------------------------
// Grays // Grays
// ------------------------- // -------------------------
$black: #000;
$grayDarker: #222;
$grayDark: #333;
$gray: #555;
$grayLight: #999;
$grayLighter: #F5F5F5;
$white: #fff;
$black: #000;
$gray-darker: #222;
$gray-dark: #333;
$gray: #555;
$gray-light: #999;
$gray-lighter: #F5F5F5;
$white: #fff;
// Accent colors // Accent colors
// ------------------------- // -------------------------
@ -29,109 +32,183 @@ $orange: #DD5600;
$pink: #F49AC1; $pink: #F49AC1;
$purple: #9760B3; $purple: #9760B3;
// Brand colors
// -------------------------
$brand-primary: #948754 !default;
$brand-success: $green !default;
$brand-warning: $orange !default;
$brand-danger: $red !default;
$brand-info: #f9e811 !default;
// Scaffolding // Scaffolding
// ------------------------- // -------------------------
$bodyBackground: #2f261d;
$textColor: $gray;
$body-bg: #2f261d;
$text-color: $gray !default;
// Links // Links
// ------------------------- // -------------------------
$linkColor: $blue;
$linkColorHover: darken($linkColor, 15%);
$link-color: $blue;
$link-hover-color: darken($link-color, 15%) !default;
// Typography // Typography
// ------------------------- // -------------------------
$sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
$serifFontFamily: Georgia, "Times New Roman", Times, serif;
$monoFontFamily: Menlo, Monaco, Consolas, "Courier New", monospace;
$baseFontSize: 14px; $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
$baseFontFamily: $sansFontFamily; $font-family-serif: Georgia, "Times New Roman", Times, serif;
$baseLineHeight: 20px; $font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
$altFontFamily: $monoFontFamily; $font-family-base: $font-family-sans-serif !default;
$headingsFontFamily: 'Bangers', cursive; // empty to use BS default, $baseFontFamily $font-size-base: 14px !default;
$headingsFontWeight: normal; // Bangers shouldn't be bolded, it's practically unreadable in FF $font-size-large: ceil($font-size-base * 1.25) !default; // ~18px
$headingsColor: #317EAC; // empty to use BS default, $textColor $font-size-small: ceil($font-size-base * 0.85) !default; // ~12px
$headingsLetterSpacing: 1px; //making Bangers more legible
$font-size-h1: 38.5px;
$font-size-h2: 31.5px;
$font-size-h3: 24.5px;
$font-size-h4: 17.5px;
$font-size-h5: $font-size-base !default;
$font-size-h6: ceil($font-size-base * 0.85) !default; // ~12px
$line-height-base: 1.428571429 !default; // 20/14
$line-height-computed: floor($font-size-base * $line-height-base) !default; // ~20px
$headings-font-family: 'Bangers', cursive; // empty to use BS default, $baseFontFamily;
$headings-font-weight: 500 !default;
$headings-line-height: 1.1 !default;
$headings-color: #317EAC;
// Component sizing // Iconography
// ------------------------- // -------------------------
// Based on 14px font-size and 20px line-height
$fontSizeLarge: $baseFontSize * 1.25; // ~18px $icon-font-path: "bootstrap/" !default;
$fontSizeSmall: $baseFontSize * 0.85; // ~12px $icon-font-name: "glyphicons-halflings-regular" !default;
$fontSizeMini: $baseFontSize * 0.75; // ~11px
$paddingLarge: 11px 19px; // 44px // Sprite icons path
$paddingSmall: 2px 10px; // 26px // -------------------------
$paddingMini: 0px 6px; // 22px $icon-sprite-path: "/images/pages/base/glyphicons-halflings.png";
$icon-white-sprite-path: "/images/pages/base/glyphicons-halflings-white.png";
$baseBorderRadius: 4px; // Components
$borderRadiusLarge: 6px; // -------------------------
$borderRadiusSmall: 3px; // Based on 14px font-size and 1.428 line-height (~20px to start)
$padding-base-vertical: 6px !default;
$padding-base-horizontal: 12px !default;
$padding-large-vertical: 11px !default;
$padding-large-horizontal: 19px !default;
$padding-small-vertical: 2px !default;
$padding-small-horizontal: 10px !default;
$padding-xs-vertical: 0px !default;
$padding-xs-horizontal: 6px !default;
$line-height-large: 1.33 !default;
$line-height-small: 1.5 !default;
$border-radius-base: 4px !default;
$border-radius-large: 6px !default;
$border-radius-small: 3px !default;
$component-active-color: #fff !default;
$component-active-bg: $brand-primary !default;
$caret-width-base: 4px !default;
$caret-width-large: 5px !default;
// Tables // Tables
// ------------------------- // -------------------------
$tableBackground: transparent; // overall background-color
$tableBackgroundAccent: #f9f9f9; // for striping $table-cell-padding: 8px !default;
$tableBackgroundHover: #f5f5f5; // for hover $table-condensed-cell-padding: 5px !default;
$tableBorder: #ddd; // table and cell border
$table-bg: transparent !default; // overall background-color
$table-bg-accent: #f9f9f9 !default; // for striping
$table-bg-hover: #f5f5f5 !default;
$table-bg-active: $table-bg-hover !default;
$table-border-color: #ddd !default; // table and cell border
// Buttons // Buttons
// ------------------------- // -------------------------
$btnBackground: $white;
$btnBackgroundHighlight: darken($white, 10%);
$btnBorder: darken($white, 20%);
$btnPrimaryBackground: #948754; $btn-font-weight: normal !default;
$btnPrimaryBackgroundHighlight: adjust-hue(#948754, 15%);
$btnInfoBackground: #f9e811; $btn-default-color: #333 !default;
$btnInfoBackgroundHighlight: #ae671b; $btn-default-bg: #fff !default;
$btn-default-border: #ccc !default;
$btnSuccessBackground: $green; $btn-primary-color: #fff !default;
$btnSuccessBackgroundHighlight: #51a351; $btn-primary-bg: $brand-primary !default;
$btn-primary-border: darken($btn-primary-bg, 5%) !default;
$btnWarningBackground: $orange; $btn-success-color: #fff !default;
$btnWarningBackgroundHighlight: $orange; $btn-success-bg: $brand-success !default;
$btn-success-border: darken($btn-success-bg, 5%) !default;
$btnDangerBackground: $red; $btn-warning-color: #fff !default;
$btnDangerBackgroundHighlight: #bd362f; $btn-warning-bg: $brand-warning !default;
$btn-warning-border: darken($btn-warning-bg, 5%) !default;
$btnInverseBackground: $blueDark; $btn-danger-color: #fff !default;
$btnInverseBackgroundHighlight: $grayDarker; $btn-danger-bg: $brand-danger !default;
$btn-danger-border: darken($btn-danger-bg, 5%) !default;
$btn-info-color: #fff !default;
$btn-info-bg: $brand-info !default;
$btn-info-border: darken($btn-info-bg, 5%) !default;
$btn-link-disabled-color: $gray-light !default;
// Forms // Forms
// ------------------------- // -------------------------
$inputBackground: $white;
$inputBorder: #ccc; $input-bg: #fff !default;
$inputBorderRadius: $baseBorderRadius; $input-bg-disabled: $gray-lighter !default;
$inputDisabledBackground: $grayLighter;
$formActionsBackground: #f5f5f5; $input-color: $gray !default;
$inputHeight: $baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border $input-border: #ccc !default;
$input-border-radius: $border-radius-base !default;
$input-border-focus: #66afe9 !default;
$input-color-placeholder: $gray-light !default;
$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
$legend-color: $gray-dark !default;
$legend-border-color: #e5e5e5 !default;
$input-group-addon-bg: $gray-lighter !default;
$input-group-addon-border-color: $input-border !default;
// Dropdowns // Dropdowns
// ------------------------- // -------------------------
$dropdownBackground: $white;
$dropdownBorder: rgba(0,0,0,.2);
$dropdownDividerTop: #e5e5e5;
$dropdownDividerBottom: $white;
$dropdownLinkColor: $grayDark; $dropdown-bg: #fff !default;
$dropdownLinkColorHover: $white; $dropdown-border: rgba(0,0,0,.15) !default;
$dropdownLinkColorActive: $white; $dropdown-fallback-border: #ccc !default;
$dropdown-divider-bg: #e5e5e5 !default;
$dropdownLinkBackgroundActive: $linkColor; $dropdown-link-color: $gray-dark !default;
$dropdownLinkBackgroundHover: $dropdownLinkBackgroundActive; $dropdown-link-hover-color: darken($gray-dark, 5%) !default;
$dropdown-link-hover-bg: #f5f5f5 !default;
$dropdown-link-active-color: $component-active-color !default;
$dropdown-link-active-bg: $component-active-bg !default;
$dropdown-link-disabled-color: $gray-light !default;
$dropdown-header-color: $gray-light !default;
// COMPONENT VARIABLES // COMPONENT VARIABLES
@ -142,162 +219,447 @@ $dropdownLinkBackgroundHover: $dropdownLinkBackgroundActive;
// ------------------------- // -------------------------
// Used for a bird's eye view of components dependent on the z-axis // Used for a bird's eye view of components dependent on the z-axis
// Try to avoid customizing these :) // Try to avoid customizing these :)
$zindexDropdown: 1000;
$zindexPopover: 1010; $zindex-navbar: 1000 !default;
$zindexTooltip: 1020; $zindex-dropdown: 1000 !default;
$zindexFixedNavbar: 1030; $zindex-popover: 1010 !default;
$zindexModalBackdrop: 1040; $zindex-tooltip: 1030 !default;
$zindexModal: 1050; $zindex-navbar-fixed: 1030 !default;
$zindexAutocomplete: 1060; $zindex-modal-background: 1040 !default;
$zindex-modal: 1050 !default;
// Media queries breakpoints
// --------------------------------------------------
// Extra small screen / phone
// Note: Deprecated $screen-xs and $screen-phone as of v3.0.1
$screen-xs: 480px !default;
$screen-xs-min: $screen-xs !default;
$screen-phone: $screen-xs-min !default;
// Small screen / tablet
// Note: Deprecated $screen-sm and $screen-tablet as of v3.0.1
$screen-sm: 768px !default;
$screen-sm-min: $screen-sm !default;
$screen-tablet: $screen-sm-min !default;
// Medium screen / desktop
// Note: Deprecated $screen-md and $screen-desktop as of v3.0.1
$screen-md: 992px !default;
$screen-md-min: $screen-md !default;
$screen-desktop: $screen-md-min !default;
// Large screen / wide desktop
// Note: Deprecated $screen-lg and $screen-lg-desktop as of v3.0.1
$screen-lg: 1200px !default;
$screen-lg-min: $screen-lg !default;
$screen-lg-desktop: $screen-lg-min !default;
// So media queries don't overlap when required, provide a maximum
$screen-xs-max: ($screen-sm-min - 1) !default;
$screen-sm-max: ($screen-md-min - 1) !default;
$screen-md-max: ($screen-lg-min - 1) !default;
// Sprite icons path // Grid system
// ------------------------- // --------------------------------------------------
$iconSpritePath: "/images/pages/base/glyphicons-halflings.png";
$iconWhiteSpritePath: "/images/pages/base/glyphicons-halflings-white.png";
// Number of columns in the grid system
$grid-columns: 12 !default;
// Padding, to be divided by two and applied to the left and right of all columns
$grid-gutter-width: 30px !default;
// Input placeholder text color // Navbar collapse
// -------------------------
$placeholderText: $grayLight;
// Point at which the navbar becomes uncollapsed
// Hr border color $grid-float-breakpoint: $screen-sm-min !default;
// ------------------------- // Point at which the navbar begins collapsing
$hrBorder: $grayLighter; $grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
// Horizontal forms & lists
// -------------------------
$horizontalComponentOffset: 180px;
// Wells
// -------------------------
$wellBackground: #f5f5f5;
// Navbar // Navbar
// ------------------------- // -------------------------
$navbarCollapseWidth: 979px;
$navbarCollapseDesktopWidth: $navbarCollapseWidth + 1;
$navbarHeight: 50px; // Basics of a navbar
$navbarBackground: #2f261d; $navbar-height: 50px !default;
$navbarBackgroundHighlight: lighten($navbarBackground, 8%); $navbar-margin-bottom: $line-height-computed !default;
$navbarBorder: darken($navbarBackground, 8%); $navbar-border-radius: $border-radius-base !default;
$navbar-padding-horizontal: floor($grid-gutter-width / 2) !default;
$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default;
$navbarText: $grayLighter; $navbar-default-color: #777 !default;
$navbarLinkColor: $white; $navbar-default-bg: #2f261d;
$navbarLinkColorHover: #f8e413; $navbar-highlight-bg: lighten($navbar-default-bg, 8%);
$navbarLinkColorActive: $navbarLinkColorHover; $navbar-default-border: darken($navbar-default-bg, 8%) !default;
$navbarLinkBackgroundHover: $navbarBackground;
$navbarLinkBackgroundActive: $navbarBackground; // Navbar links
$navbar-default-link-color: $white;
$navbar-default-link-hover-color: #f8e413;
$navbar-default-link-hover-bg: transparent !default;
$navbar-default-link-active-color: #555 !default;
$navbar-default-link-active-bg: transparent;
$navbar-default-link-disabled-color: #ccc !default;
$navbar-default-link-disabled-bg: transparent !default;
// Navbar brand label
$navbar-default-brand-color: $navbar-default-link-color !default;
$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default;
$navbar-default-brand-hover-bg: transparent !default;
// Navbar toggle
$navbar-default-toggle-hover-bg: #ddd !default;
$navbar-default-toggle-icon-bar-bg: #ccc !default;
$navbar-default-toggle-border-color: #ddd !default;
$navbarBrandColor: $navbarLinkColor;
// Inverted navbar // Inverted navbar
$navbarInverseBackground: $blueDark; //
$navbarInverseBackgroundHighlight: lighten($navbarInverseBackground, 5%); // Reset inverted navbar basics
$navbarInverseBorder: darken($navbarInverseBackground, 3%); $navbar-inverse-color: $gray-light !default;
$navbar-inverse-bg: $blueDark;
$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default;
$navbarInverseText: $white; // Inverted navbar links
$navbarInverseLinkColor: $white; $navbar-inverse-link-color: $white;
$navbarInverseLinkColorHover: $white; $navbar-inverse-link-hover-color: $white;
$navbarInverseLinkColorActive: $white; $navbar-inverse-link-hover-bg: transparent;
$navbarInverseLinkBackgroundHover: darken($navbarInverseBackground, 6%); $navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default;
$navbarInverseLinkBackgroundActive: darken($navbarInverseBackground, 6%); $navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default;
$navbar-inverse-link-disabled-color: #444 !default;
$navbar-inverse-link-disabled-bg: transparent !default;
$navbarInverseSearchBackground: $white; // Inverted navbar brand label
$navbarInverseSearchBackgroundFocus: $white; $navbar-inverse-brand-color: $navbar-inverse-link-color !default;
$navbarInverseSearchBorder: $navbarInverseBackground; $navbar-inverse-brand-hover-color: #fff !default;
$navbarInverseSearchPlaceholderColor: $grayLight; $navbar-inverse-brand-hover-bg: transparent !default;
$navbarInverseBrandColor: $navbarInverseLinkColor; // Inverted navbar toggle
$navbar-inverse-toggle-hover-bg: #333 !default;
$navbar-inverse-toggle-icon-bar-bg: #fff !default;
$navbar-inverse-toggle-border-color: #333 !default;
// Navs
// -------------------------
$nav-link-padding: 10px 15px !default;
$nav-link-hover-bg: lighten($brand-primary, 8%);
$nav-link-hover-color: #f8e413;
$nav-disabled-link-color: $gray-light !default;
$nav-disabled-link-hover-color: $gray-light !default;
$nav-open-link-hover-color: #fff !default;
// Tabs
$nav-tabs-border-color: #ddd !default;
$nav-tabs-link-hover-border-color: $gray-lighter !default;
$nav-tabs-active-link-hover-bg: $brand-primary !default;
$nav-tabs-active-link-hover-color: $gray-darker !default;
$nav-tabs-active-link-hover-border-color: #ddd !default;
$nav-tabs-justified-link-border-color: #ddd !default;
$nav-tabs-justified-active-link-border-color: $brand-primary !default;
// Pills
$nav-pills-border-radius: $border-radius-base !default;
$nav-pills-active-link-hover-bg: $component-active-bg !default;
$nav-pills-active-link-hover-color: $component-active-color !default;
// Pagination // Pagination
// ------------------------- // -------------------------
$paginationBackground: #fff;
$paginationBorder: #ddd; $pagination-bg: #fff !default;
$paginationActiveBackground: #f5f5f5; $pagination-border: #ddd !default;
$pagination-hover-bg: $gray-lighter !default;
$pagination-active-bg: $brand-primary !default;
$pagination-active-color: #fff !default;
$pagination-disabled-color: $gray-light !default;
// Hero unit // Pager
// ------------------------- // -------------------------
$heroUnitBackground: $grayLighter;
$heroUnitHeadingColor: inherit; $pager-border-radius: 15px !default;
$heroUnitLeadColor: inherit; $pager-disabled-color: $gray-light !default;
// Jumbotron
// -------------------------
$jumbotron-padding: 30px !default;
$jumbotron-color: inherit !default;
$jumbotron-bg: $gray-lighter !default;
$jumbotron-heading-color: inherit !default;
$jumbotron-font-size: ceil($font-size-base * 1.5) !default;
// Form states and alerts // Form states and alerts
// ------------------------- // -------------------------
$warningText: $orange;
$warningBackground: #F1CEAB;
$warningBorder: darken(adjust-hue($warningBackground, -10), 3%);
$errorText: darken(#C45559, 5%); $state-success-text: #3c763d !default;
$errorBackground: #F2BDB1; $state-success-bg: #dff0d8 !default;
$errorBorder: darken(adjust-hue($errorBackground, -10), 3%); $state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default;
$successText: darken($green, 5%); $state-info-text: #31708f !default;
$successBackground: #D5ECBF; $state-info-bg: #d9edf7 !default;
$successBorder: darken(adjust-hue($successBackground, -10), 5%); $state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default;
$infoText: darken($blue, 10%); $state-warning-text: #8a6d3b !default;
$infoBackground: #A7DFF1; $state-warning-bg: #fcf8e3 !default;
$infoBorder: darken(adjust-hue($infoBackground, -10), 7%); $state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default;
$state-danger-text: #a94442 !default;
$state-danger-bg: #f2dede !default;
$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default;
// Tooltips and popovers // Tooltips
// ------------------------- // -------------------------
$tooltipColor: #fff; $tooltip-max-width: 200px !default;
$tooltipBackground: #000; $tooltip-color: #fff !default;
$tooltipArrowWidth: 5px; $tooltip-bg: #000 !default;
$tooltipArrowColor: $tooltipBackground;
$popoverBackground: #fff; $tooltip-arrow-width: 5px !default;
$popoverArrowWidth: 10px; $tooltip-arrow-color: $tooltip-bg !default;
$popoverArrowColor: #fff;
$popoverTitleBackground: darken($popoverBackground, 3%);
// Special enhancement for popovers
$popoverArrowOuterWidth: $popoverArrowWidth + 1;
$popoverArrowOuterColor: rgba(0,0,0,.25);
// Popovers
// -------------------------
$popover-bg: #fff !default;
$popover-max-width: 276px !default;
$popover-border-color: rgba(0,0,0,.2) !default;
$popover-fallback-border-color: #ccc !default;
// GRID $popover-title-bg: darken($popover-bg, 3%) !default;
$popover-arrow-width: 10px !default;
$popover-arrow-color: #fff !default;
$popover-arrow-outer-width: ($popover-arrow-width + 1) !default;
$popover-arrow-outer-color: rgba(0,0,0,.25) !default;
$popover-arrow-outer-fallback-color: #999 !default;
// Labels
// -------------------------
$label-default-bg: $gray-light !default;
$label-primary-bg: $brand-primary !default;
$label-success-bg: $brand-success !default;
$label-info-bg: $brand-info !default;
$label-warning-bg: $brand-warning !default;
$label-danger-bg: $brand-danger !default;
$label-color: #fff !default;
$label-link-hover-color: #fff !default;
// Modals
// -------------------------
$modal-inner-padding: 20px !default;
$modal-title-padding: 15px !default;
$modal-title-line-height: $line-height-base !default;
$modal-content-bg: none !default;
$modal-content-border-color: transparent !default;
$modal-content-fallback-border-color: transparent !default;
$modal-backdrop-bg: transparent !default;
$modal-header-border-color: transparent !default;
$modal-footer-border-color: $modal-header-border-color !default;
// Alerts
// -------------------------
$alert-padding: 15px !default;
$alert-border-radius: $border-radius-base !default;
$alert-link-font-weight: bold !default;
$alert-success-bg: $state-success-bg !default;
$alert-success-text: $state-success-text !default;
$alert-success-border: $state-success-border !default;
$alert-info-bg: $state-info-bg !default;
$alert-info-text: $state-info-text !default;
$alert-info-border: $state-info-border !default;
$alert-warning-bg: $state-warning-bg !default;
$alert-warning-text: $state-warning-text !default;
$alert-warning-border: $state-warning-border !default;
$alert-danger-bg: $state-danger-bg !default;
$alert-danger-text: $state-danger-text !default;
$alert-danger-border: $state-danger-border !default;
// Progress bars
// -------------------------
$progress-bg: #f5f5f5 !default;
$progress-bar-color: #fff !default;
$progress-bar-bg: $brand-primary !default;
$progress-bar-success-bg: $brand-success !default;
$progress-bar-warning-bg: $brand-warning !default;
$progress-bar-danger-bg: $brand-danger !default;
$progress-bar-info-bg: $brand-info !default;
// List group
// -------------------------
$list-group-bg: #fff !default;
$list-group-border: #ddd !default;
$list-group-border-radius: $border-radius-base !default;
$list-group-hover-bg: #f5f5f5 !default;
$list-group-active-color: $component-active-color !default;
$list-group-active-bg: $component-active-bg !default;
$list-group-active-border: $list-group-active-bg !default;
$list-group-link-color: #555 !default;
$list-group-link-heading-color: #333 !default;
// Panels
// -------------------------
$panel-bg: #fff !default;
$panel-inner-border: #ddd !default;
$panel-border-radius: $border-radius-base !default;
$panel-footer-bg: #f5f5f5 !default;
$panel-default-text: $gray-dark !default;
$panel-default-border: #ddd !default;
$panel-default-heading-bg: #f5f5f5 !default;
$panel-primary-text: #fff !default;
$panel-primary-border: $brand-primary !default;
$panel-primary-heading-bg: $brand-primary !default;
$panel-success-text: $state-success-text !default;
$panel-success-border: $state-success-border !default;
$panel-success-heading-bg: $state-success-bg !default;
$panel-warning-text: $state-warning-text !default;
$panel-warning-border: $state-warning-border !default;
$panel-warning-heading-bg: $state-warning-bg !default;
$panel-danger-text: $state-danger-text !default;
$panel-danger-border: $state-danger-border !default;
$panel-danger-heading-bg: $state-danger-bg !default;
$panel-info-text: $state-info-text !default;
$panel-info-border: $state-info-border !default;
$panel-info-heading-bg: $state-info-bg !default;
// Thumbnails
// -------------------------
$thumbnail-padding: 4px !default;
$thumbnail-bg: #bbb !default;
$thumbnail-border: #999 !default;
$thumbnail-border-radius: $border-radius-base !default;
$thumbnail-caption-color: $text-color !default;
$thumbnail-caption-padding: 9px !default;
// Wells
// -------------------------
$well-bg: #f5f5f5 !default;
// Badges
// -------------------------
$badge-color: #fff !default;
$badge-link-hover-color: #fff !default;
$badge-bg: $gray-light !default;
$badge-active-color: $link-color !default;
$badge-active-bg: #fff !default;
$badge-font-weight: bold !default;
$badge-line-height: 1 !default;
$badge-border-radius: 10px !default;
// Breadcrumbs
// -------------------------
$breadcrumb-bg: #f5f5f5 !default;
$breadcrumb-color: #ccc !default;
$breadcrumb-active-color: $gray-light !default;
$breadcrumb-separator: "/" !default;
// Carousel
// ------------------------
$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default;
$carousel-control-color: #fff !default;
$carousel-control-width: 15% !default;
$carousel-control-opacity: .5 !default;
$carousel-control-font-size: 20px !default;
$carousel-indicator-active-bg: #fff !default;
$carousel-indicator-border-color: #fff !default;
$carousel-caption-color: #fff !default;
// Close
// ------------------------
$close-font-weight: bold !default;
$close-color: #000 !default;
$close-text-shadow: 0 1px 0 #fff !default;
// Code
// ------------------------
$code-color: #c7254e !default;
$code-bg: #f9f2f4 !default;
$pre-bg: #f5f5f5 !default;
$pre-color: $gray-dark !default;
$pre-border-color: #ccc !default;
$pre-scrollable-max-height: 340px !default;
// Type
// ------------------------
$text-muted: $gray-light !default;
$abbr-border-color: $gray-light !default;
$headings-small-color: $gray-light !default;
$blockquote-small-color: $gray-light !default;
$blockquote-border-color: $gray-lighter !default;
$page-header-border-color: $gray-lighter !default;
// Miscellaneous
// -------------------------
// Hr border color
$hr-border: $gray-lighter !default;
// Horizontal forms & lists
$component-offset-horizontal: 180px !default;
// Container sizes
// -------------------------------------------------- // --------------------------------------------------
// Small screen / tablet
$container-tablet: ((720px + $grid-gutter-width)) !default;
$container-sm: $container-tablet !default;
// Default 940px grid // Medium screen / desktop
// ------------------------- $container-desktop: ((940px + $grid-gutter-width)) !default;
$gridColumns: 12; $container-md: $container-desktop !default;
$gridColumnWidth: 60px;
$gridGutterWidth: 20px;
$gridRowWidth: ($gridColumns * $gridColumnWidth) + ($gridGutterWidth * ($gridColumns - 1));
// 1200px min // Large screen / wide desktop
$gridColumnWidth1200: 70px; $container-large-desktop: ((1140px + $grid-gutter-width)) !default;
$gridGutterWidth1200: 30px; $container-lg: $container-large-desktop !default;
$gridRowWidth1200: ($gridColumns * $gridColumnWidth1200) + ($gridGutterWidth1200 * ($gridColumns - 1));
// 768px-979px
$gridColumnWidth768: 42px;
$gridGutterWidth768: 20px;
$gridRowWidth768: ($gridColumns * $gridColumnWidth768) + ($gridGutterWidth768 * ($gridColumns - 1));
// Fluid grid
// -------------------------
$fluidGridColumnWidth: percentage($gridColumnWidth/$gridRowWidth);
$fluidGridGutterWidth: percentage($gridGutterWidth/$gridRowWidth);
// 1200px min
$fluidGridColumnWidth1200: percentage($gridColumnWidth1200/$gridRowWidth1200);
$fluidGridGutterWidth1200: percentage($gridGutterWidth1200/$gridRowWidth1200);
// 768px-979px
$fluidGridColumnWidth768: percentage($gridColumnWidth768/$gridRowWidth768);
$fluidGridGutterWidth768: percentage($gridGutterWidth768/$gridRowWidth768);

View file

@ -8,9 +8,9 @@
min-height: 20px; min-height: 20px;
padding: 19px; padding: 19px;
margin-bottom: 20px; margin-bottom: 20px;
background-color: $wellBackground; background-color: $well-bg;
border: 1px solid darken($wellBackground, 7%); border: 1px solid darken($well-bg, 7%);
@include border-radius($baseBorderRadius); border-radius: $border-radius-base;
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
blockquote { blockquote {
border-color: #ddd; border-color: #ddd;
@ -19,11 +19,11 @@
} }
// Sizes // Sizes
.well-large { .well-lg {
padding: 24px; padding: 24px;
@include border-radius($borderRadiusLarge); border-radius: $border-radius-large;
} }
.well-small { .well-sm {
padding: 9px; padding: 9px;
@include border-radius($borderRadiusSmall); border-radius: $border-radius-small;
} }

55
app/styles/bootstrap/bootstrap.scss vendored Normal file
View file

@ -0,0 +1,55 @@
// Core variables and mixins
@import "variables";
@import "mixins";
// Reset
@import "normalize";
@import "print";
// Core CSS
@import "scaffolding";
@import "type";
@import "code";
@import "grid";
@import "tables";
@import "forms";
@import "buttons";
// Components
@import "component-animations";
@import "glyphicons";
@import "dropdowns";
@import "button-groups";
@import "input-groups";
@import "navs";
@import "navbar";
@import "breadcrumbs";
@import "pagination";
@import "pager";
@import "labels";
@import "badges";
@import "jumbotron";
@import "thumbnails";
@import "alerts";
@import "progress-bars";
@import "media";
@import "list-group";
@import "panels";
@import "wells";
@import "close";
// Components w/ JavaScript
@import "modals";
@import "tooltip";
@import "popovers";
@import "carousel";
//Addition: sprite, this was part of TB2, but removed in TB3
@import "sprites";
//Addition: Bootswatch structural changes
@import "bootswatch";
// Utility classes
@import "utilities";
@import "responsive-utilities";

View file

@ -0,0 +1,99 @@
@import "../bootstrap/variables"
#top-nav
a.navbar-brand
padding: 4px 20px 0px 20px
margin-left: -20px
.navbuttontext, .fancy-select .trigger
font-family: 'Bangers', cursive
font-size: 20px
font-weight: 400
letter-spacing: 1px
.navbuttontext-user-name
max-width: 125px
overflow: hidden
text-overflow: ellipsis
white-space: nowrap
display: inline-block
padding: 0 5px 0 0
margin: 0
height: 18px
.nav.navbar-link-text, .nav.navbar-link-text > li > a
font-family: 'Bangers', cursive
font-weight: normal
font-size: 25px
letter-spacing: 2px
color: $white
&:hover
color: #f8e413
.navbar-link-text a:hover
background: darken($body-bg, 3%)
.btn, .btn-group, .fancy-select
margin-top: 13px
.nav-tabs > .active > a, .nav-tabs > .active > a:hover, .nav-tabs > .active > a:focus
background-color: #eee
.nav-tabs > li
cursor: pointer
font-size: 25px
a:not(.btn)
line-height: 25px
.btn
font-size: 20px
padding: 4px 12px
.btn, .fancy-select
float: right
margin-left: 10px
line-height: 20px
select
opacity: 0
.fancy-select
.trigger
padding: 5px 25px 3px 10px
width: auto
&:after
top: 13px
max-width: 140px
.nav
margin-bottom: 0
div.fancy-select
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25)
div.trigger
background-color: #9d8f5a
background-image: linear-gradient(to bottom, #a4955e, #948754)
background-repeat: repeat-x
border: 1px solid #cccccc
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25)
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05)
color: white
&:after
border-top-color: white
&.open
background-color: #8B7F51
color: #ebebeb
&:after
border-top-color: #ebebeb
ul.options
max-height: 415px
background-color: #9d8f5a
right: 0
left: auto
overflow-x: hidden
&.open
top: 36px
li
color: #ebebeb
padding: 8px 20px

View file

@ -1,5 +1,5 @@
@import "bootstrap/variables" @import "bootstrap/variables"
#editor-level-view #editor-nav-view
.editor-column .editor-column
width: 33% width: 33%
box-sizing: border-box box-sizing: border-box

View file

@ -20,7 +20,7 @@
.treema .treema
position: absolute position: absolute
top: 50px top: 70px
left: 0 left: 0
right: 10px right: 10px
bottom: 0 bottom: 0
@ -32,7 +32,7 @@
.treema .treema
position: absolute position: absolute
top: 50px top: 70px
left: 10px left: 10px
right: 0px right: 0px
bottom: 0 bottom: 0

View file

@ -1 +1,15 @@
//#editor-level-component-edit-view #editor-level-component-edit-view
.navbar-text
float: left
#component-code-editor
position: absolute
left: 0
right: 0
bottom: 0
top: 50px
border: 2px solid black
border-top: none
.active > a, .active > a:hover, .active > a:focus
background-color: white !important

View file

@ -7,5 +7,5 @@
margin: 0 20% margin: 0 20%
width: 60% width: 60%
.bar .progress-bar
width: 100% width: 100%

View file

@ -1,55 +1,54 @@
#editor-level-view #editor-level-view
margin: 0 auto a
min-width: 1024px font-family: helvetica, arial, sans serif
position: relative
#top-nav
display: none
position: absolute
top: 0px
left: 0px
right: 0px
bottom: 0px
$BG: rgba(228, 207, 140, 1.0) $BG: rgba(228, 207, 140, 1.0)
.outer-content li.navbar-btn
margin: 56px 20px 20px 20px margin-right: 5px
padding: 10px 20px
background-color: $BG
.top-controls-area
position: fixed
background-color: $BG
z-index: 100
left: 40px
right: 40px
margin-top: -10px
padding-top: 10px
.level-title-header
float: left
width: 500px
text-overflow: ellipsis
white-space: nowrap
.level-control-buttons
float: right
& > *
margin: 10px 10px
#level-editor-top-nav
.nav-tabs .nav-tabs
margin-bottom: 10px border-bottom: 0 !important
.active > a, .active > a:hover, .active > a:focus
background-color: $BG !important
border-color: darken($BG, 50%)
border-bottom: 0
// keeps the editor tabs a certain height .outer-content
background-color: $BG
.tab-content
margin-top: 108px
// keeps the tab content at a specific ratio
width: 100%
padding-bottom: 45%
position: relative
.tab-pane
// makes sure the pane itself fills the whole ratio'd space
position: absolute position: absolute
top: 0 top: 0
bottom: 0 bottom: 0
left: 0 left: 0
right: 0 right: 0
overflow: hidden
.top-controls-area
position: fixed
background-color: $BG
z-index: 100
left: 20px
right: 20px
margin-top: -10px
padding-top: 10px
// keeps the editor tabs a certain height
#level-editor-tabs
position: absolute
left: 20px
right: 20px
top: 66px
bottom: 20px
.treema-root .treema-root
background-color: white background-color: white

View file

@ -1 +1,15 @@
//#editor-level-system-edit-view #editor-level-system-edit-view
.navbar-text
float: left
#system-code-editor
position: absolute
left: 0
right: 0
bottom: 0
top: 50px
border: 2px solid black
border-top: none
.active > a, .active > a:hover, .active > a:focus
background-color: white !important

View file

@ -7,5 +7,5 @@
margin: 0 20% margin: 0 20%
width: 60% width: 60%
.bar .progress-bar
width: 100% width: 100%

View file

@ -3,8 +3,6 @@
.well .well
text-align: center text-align: center
input
height: 14px
padding: 10px padding: 10px
#thang-props #thang-props
@ -15,51 +13,3 @@
#all-thangs-link #all-thangs-link
float: left float: left
cursor: pointer cursor: pointer
//#editor-level-thang-edit-modal
// h3
// display: inline-block
//
// .modal-body
// height: 400px
//
// #choose-component-sidebar
// width: 40%
// box-sizing: border-box
// padding: 10px
// position: absolute
// right: 0
// height: 100%
// top: 0
//
// h4
// margin-top: 0
//
// ul.available-components-list
// position: absolute
// top: 40px
// bottom: 0
// right: 0
// overflow: scroll
// width: 100%
//
// margin: 0
// list-style-type: none
//
// li
// cursor: pointer
//
// #edit-thang-treema
// box-sizing: border-box
// float: left
// width: 55%
// position: absolute
// top: 0
// bottom: 0
// overflow: scroll
//
// .treema-ace.treema-edit
// max-width: 100%
// & > div
// width: inherit
//

View file

@ -1,8 +1,6 @@
@import "../../bootstrap/mixins" @import "../../bootstrap/mixins"
#editor-level-thangs-tab-view #editor-level-thangs-tab-view
position: relative
$addPaletteIconColumns: 3 $addPaletteIconColumns: 3
$extantThangsWidth: 300px $extantThangsWidth: 300px
$addPaletteIconWidth: 40px $addPaletteIconWidth: 40px

View file

@ -1,5 +1,5 @@
#editor-thang-type-edit-view #editor-thang-type-edit-view
#save-button #save-button, #revert-button
float: right float: right
margin-right: 20px margin-right: 20px
@ -58,9 +58,9 @@
#thang-components-edit-view #thang-components-edit-view
position: relative position: absolute
height: 500px top: 45px
top: -20px bottom: 0
.treema-root .treema-root
background-color: white background-color: white

View file

@ -19,12 +19,12 @@
letter-spacing: 1px letter-spacing: 1px
position: relative position: relative
a button
padding-top: 25px
height: 30px
font-size: 40px font-size: 40px
width: 300px width: 300px
@include transition(color .10s linear) height: 80px
//@include transition(color .10s linear) // buggy in chrome, coloring doesn't get the right edge of the word
&:hover a, &:active a &:hover a, &:active a
color: #8090AA color: #8090AA

View file

@ -18,5 +18,5 @@
margin: 0 20% margin: 0 20%
width: 60% width: 60%
.bar .progress-bar
width: 100% width: 100%

40
app/styles/mixins.sass Normal file
View file

@ -0,0 +1,40 @@
@import "app/styles/bootstrap/mixins"
@mixin gradient-radial-custom-stops($innerColor: #555, $innerStop: 20%, $outerColor: #333, $outerStop: 70%)
background-color: $outerColor
@include gradient-vertical($innerColor, $outerColor) // IE6-9 fallback on vertical gradient
background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($innerColor $innerStop), to($outerColor $outerStop))
background-image: -webkit-radial-gradient(circle, $innerColor $innerStop, $outerColor $outerStop)
background-image: -moz-radial-gradient(circle, $innerColor $innerStop, $outerColor $outerStop)
background-image: -o-radial-gradient(circle, $innerColor $innerStop, $outerColor $outerStop)
background-image: radial-gradient(circle, $innerColor $innerStop, $outerColor $outerStop)
background-repeat: no-repeat
@mixin gradient-banner-button($topBottomColor: #2C446A, $middleColor: #3A537F)
background-color: mix($topBottomColor, $middleColor, 80%)
background-image: -webkit-gradient(linear, 0 0, 0 100%, from($topBottomColor), color-stop(16%, $topBottomColor), color-stop(17%, $middleColor), color-stop(83%, $middleColor), color-stop(84%, $topBottomColor), to($topBottomColor))
background-image: -webkit-linear-gradient($topBottomColor, $topBottomColor 16%, $middleColor 16%, $middleColor 83%, $topBottomColor 84%, $topBottomColor)
background-image: -moz-linear-gradient(top, $topBottomColor, $topBottomColor 16%, $middleColor 16%, $middleColor 83%, $topBottomColor 84%, $topBottomColor)
background-image: -o-linear-gradient($topBottomColor, $topBottomColor 16%, $middleColor 16%, $middleColor 83%, $topBottomColor 84%, $topBottomColor)
background-image: linear-gradient($topBottomColor, $topBottomColor 16%, $middleColor 16%, $middleColor 83%, $topBottomColor 84%, $topBottomColor)
background-repeat: no-repeat
@mixin banner-button($backgroundColor: #3A537F, $textColor: #FFF)
$topBottomColor: darken($backgroundColor, 9%)
@include gradient-banner-button($topBottomColor, $backgroundColor)
color: $textColor
&:hover:not(.disabled):not([disabled]), &:focus:not(.disabled):not([disabled])
@include gradient-banner-button(lighten($topBottomColor, 6%), lighten($backgroundColor, 6%))
&.active, &:active
background-image: none
outline: 0
@include box-shadow(inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05))
// Disabled state
&.disabled, &[disabled]
cursor: default
background-image: none
@include opacity(0.65)
@include box-shadow(none)

Some files were not shown because too many files have changed in this diff Show more