site progressif
This commit is contained in:
parent
f9d8fc74d7
commit
a741e2512b
Binary file not shown.
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 28 KiB |
411
app/assets/javascripts/admin.coffee
Normal file
411
app/assets/javascripts/admin.coffee
Normal file
@ -0,0 +1,411 @@
|
|||||||
|
|
||||||
|
#= require jquery
|
||||||
|
#= require jquery_ujs
|
||||||
|
# require turbolinks
|
||||||
|
|
||||||
|
#= require event_form
|
||||||
|
#= require bootstrap
|
||||||
|
|
||||||
|
#= require vendor/jquery-sortable
|
||||||
|
#= require vendor/jquery.event.drag.js
|
||||||
|
#= require vendor/bootstrap-slider
|
||||||
|
#= require vendor/jquery.ui.widget
|
||||||
|
#= require vendor/tmpl.min
|
||||||
|
#= require vendor/jquery.iframe-transport
|
||||||
|
#= require vendor/jquery.fileupload
|
||||||
|
#= require vendor/jquery.fileupload-ui
|
||||||
|
#= require vendor/jquery.fileupload-process
|
||||||
|
#= require vendor/select2.min
|
||||||
|
|
||||||
|
|
||||||
|
#= require manager
|
||||||
|
#= require image_files
|
||||||
|
#= require pane_hover
|
||||||
|
|
||||||
|
|
||||||
|
#= require redactor
|
||||||
|
#= require redactor_plugins/fontsize
|
||||||
|
#= require redactor_plugins/fontfamily
|
||||||
|
#= require redactor_plugins/fontcolor
|
||||||
|
|
||||||
|
#= require nested_fields
|
||||||
|
#= require_tree ./admin
|
||||||
|
|
||||||
|
#require ./shared/jquery.strings.js
|
||||||
|
#require ./shared/jquery.utils.js
|
||||||
|
#require ./shared/ui.timepickr.js
|
||||||
|
#require ./shared/modernizr.js
|
||||||
|
|
||||||
|
|
||||||
|
#= require ./shared/raphael
|
||||||
|
#= require ./shared/morris
|
||||||
|
#= require_tree ./note_files
|
||||||
|
|
||||||
|
portlet_to_move = false
|
||||||
|
content_type_to_move =false
|
||||||
|
@open_collapse3 = ->
|
||||||
|
$("#collapse3 .panel").show()
|
||||||
|
$("#collapse3").show()
|
||||||
|
|
||||||
|
@reset_edit_pane = ->
|
||||||
|
$("#element_form").html()
|
||||||
|
$("#collapse3").hide()
|
||||||
|
|
||||||
|
@unselect_portlet = ->
|
||||||
|
$(".portlet.active").removeClass("active")
|
||||||
|
reset_edit_pane()
|
||||||
|
|
||||||
|
@cancel_move_portlet = ->
|
||||||
|
$(".move_message").show()
|
||||||
|
$(".cancel_message").hide()
|
||||||
|
|
||||||
|
$(".move").removeClass("move")
|
||||||
|
$(".portlet_placeholder").remove()
|
||||||
|
portlet_to_move = false
|
||||||
|
|
||||||
|
$(document).ready ->
|
||||||
|
|
||||||
|
$(document).on 'click', 'input.datepicker', ->
|
||||||
|
$(this).datetimepicker(
|
||||||
|
language: 'fr'
|
||||||
|
pickTime: false
|
||||||
|
).focus();
|
||||||
|
|
||||||
|
$(document).on 'click', 'input.datetimepicker', ->
|
||||||
|
$(this).datetimepicker(
|
||||||
|
use24hours: true
|
||||||
|
format: 'DD/MM/YYYY hh:mm'
|
||||||
|
minuteStepping:15
|
||||||
|
language: 'fr'
|
||||||
|
).focus();
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on 'click', 'input.timepicker', ->
|
||||||
|
$(this).datetimepicker(
|
||||||
|
use24hours: true
|
||||||
|
format: 'DD/MM/YYYY hh:mm'
|
||||||
|
minuteStepping:15
|
||||||
|
pickDate: false
|
||||||
|
language: 'fr'
|
||||||
|
).focus();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on "click", ".portlet", (event) ->
|
||||||
|
if !$(this).hasClass("active") and portlet_to_move == false
|
||||||
|
|
||||||
|
$(".portlet.active").removeClass("active")
|
||||||
|
$(this).addClass("active")
|
||||||
|
|
||||||
|
|
||||||
|
$.ajax({url : $(this).data("edit-link"), type: "GET"});
|
||||||
|
$("#collapse3 .trash").attr("href", $(this).data("show-link"));
|
||||||
|
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
|
$(document).on "click", ".block_portlets", (event) ->
|
||||||
|
portlet_to_move = false
|
||||||
|
content_type_to_move = false
|
||||||
|
$("#element_form").html("")
|
||||||
|
|
||||||
|
$(".portlet.active").removeClass("active")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on "click", "#content_types .content_type", ->
|
||||||
|
cancel_move_portlet()
|
||||||
|
unselect_portlet()
|
||||||
|
reset_edit_pane()
|
||||||
|
|
||||||
|
|
||||||
|
type = $(this).data("type")
|
||||||
|
content_type_to_move = type
|
||||||
|
init_portlets_place_holder()
|
||||||
|
$(this).addClass("move")
|
||||||
|
false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on "click", ".portlet_handle", ->
|
||||||
|
if portlet_to_move == false
|
||||||
|
|
||||||
|
$(".move_message").hide()
|
||||||
|
$(".cancel_message").show()
|
||||||
|
|
||||||
|
|
||||||
|
id = $(this).data("portlet-id")
|
||||||
|
portlet_to_move = $("#portlet_"+id)
|
||||||
|
init_portlets_place_holder()
|
||||||
|
portlet_to_move.addClass("move")
|
||||||
|
false
|
||||||
|
else
|
||||||
|
cancel_move_portlet()
|
||||||
|
|
||||||
|
false
|
||||||
|
|
||||||
|
$(document).on "click", ".portlet_placeholder", ->
|
||||||
|
if portlet_to_move != false
|
||||||
|
$(this).after portlet_to_move
|
||||||
|
$(".move").removeClass("move")
|
||||||
|
$(".portlet_placeholder").remove()
|
||||||
|
update_block_portlet_order(portlet_to_move.closest(".block_portlets").data("block_id"))
|
||||||
|
cancel_move_portlet()
|
||||||
|
else
|
||||||
|
|
||||||
|
block_id = $(this).closest(".block_portlets").data("block_id")
|
||||||
|
|
||||||
|
|
||||||
|
$(this).replaceWith('<div id="new_portlet_form_inline" class="portlet"><div id="new_portlet_content_form"></div></div>');
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url:"/portlet/portlets/new.js",
|
||||||
|
type: "GET",
|
||||||
|
data: {
|
||||||
|
block_id : block_id,
|
||||||
|
position : $(this).attr("data_position"),
|
||||||
|
content_type : content_type_to_move
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
content_type_to_move = false
|
||||||
|
$(".portlet_placeholder").remove()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@init_portlets_place_holder = ->
|
||||||
|
placeholder = '<div class="portlet_placeholder"><i class="fa fa-angle-right place"></i></div>'
|
||||||
|
$(".block_portlets").each ->
|
||||||
|
$(this).find(".portlet_placeholder").remove()
|
||||||
|
$(this).prepend(placeholder)
|
||||||
|
$(this).find(".portlet").each ->
|
||||||
|
$(this).after(placeholder)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@flash_delay = ->
|
||||||
|
$("#flashs").find(".alert").each ->
|
||||||
|
|
||||||
|
if !$(this).hasClass("delay")
|
||||||
|
$(this).addClass("delay")
|
||||||
|
$(this).delay(3000).fadeOut();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@init_menu_items_list = ->
|
||||||
|
|
||||||
|
if $(".prevv_folder").length > 0
|
||||||
|
|
||||||
|
$(".prevv_folder").sortable({
|
||||||
|
group:"menu_items",
|
||||||
|
containerSelector :".receptable",
|
||||||
|
itemSelector:".menu_item_row",
|
||||||
|
handle: ".handle",
|
||||||
|
nested:false,
|
||||||
|
placeholder:"<div class='placeholder'></div>",
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
oldContainer = ""
|
||||||
|
$("#sortable_menu_item").sortable({
|
||||||
|
group:"menu_items",
|
||||||
|
containerSelector :".receptable",
|
||||||
|
itemSelector:".menu_item_row",
|
||||||
|
handle: ".handle",
|
||||||
|
nested:true,
|
||||||
|
placeholder:"<div class='placeholder'></div>",
|
||||||
|
afterMove: (placeholder, container) ->
|
||||||
|
if oldContainer != container and container.el.hasClass("prevv_folder")
|
||||||
|
if oldContainer
|
||||||
|
oldContainer.el.removeClass("active")
|
||||||
|
container.el.addClass("active")
|
||||||
|
oldContainer = container
|
||||||
|
onDrop: (item, Container, _super) ->
|
||||||
|
|
||||||
|
|
||||||
|
if Container
|
||||||
|
|
||||||
|
parent_id = Container.el.data("parent-id")
|
||||||
|
menu_id = Container.el.data("menu-id")
|
||||||
|
id = item.data("menu-item-id")
|
||||||
|
$.ajax({
|
||||||
|
url:"/admin/menu_items/"+id+".js",
|
||||||
|
type: "PUT",
|
||||||
|
data: {
|
||||||
|
reorder : true,
|
||||||
|
menu_item : {
|
||||||
|
parent_id : parent_id,
|
||||||
|
menu_id : menu_id
|
||||||
|
}
|
||||||
|
},
|
||||||
|
success : ->
|
||||||
|
|
||||||
|
|
||||||
|
_super(item)
|
||||||
|
item.remove()
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_super(item)
|
||||||
|
|
||||||
|
sortable_data = {parent_id :$("#sortable_menu_item").data("parent-id"), menu_id :$("#sortable_menu_item").data("menu-id") , menu_items_ids : []}
|
||||||
|
|
||||||
|
$("#sortable_menu_item").find(".menu_item_row").each ->
|
||||||
|
sortable_data.menu_items_ids.push $(this).data("menu-item-id")
|
||||||
|
|
||||||
|
|
||||||
|
$.ajax({url : "/admin/menu_items/reorder", data : sortable_data, type: "POST"});
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@update_block_portlet_order = (block_portlet_id) ->
|
||||||
|
return_order = []
|
||||||
|
|
||||||
|
block_portlet = $("#block_portlet_"+block_portlet_id)
|
||||||
|
|
||||||
|
block_data = {block_id : block_portlet.data('block_id'), block_portlet_ids : []}
|
||||||
|
|
||||||
|
block_portlet.children('.portlet').each ->
|
||||||
|
if $(this).data('portlet_id')
|
||||||
|
block_data.block_portlet_ids.push($(this).data('portlet_id'))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return_order.push(block_data);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$.ajax({url : "/portlet/portlets/reorder", data : {blocks:return_order}, type: "POST"})
|
||||||
|
|
||||||
|
|
||||||
|
jQuery ->
|
||||||
|
|
||||||
|
$(".inline-contenteditable").keypress (e) ->
|
||||||
|
if e.which == 13
|
||||||
|
false
|
||||||
|
else
|
||||||
|
$(this).html($(this).text())
|
||||||
|
return true
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on 'click', ".portlet_title_content .inline-contenteditable", () ->
|
||||||
|
|
||||||
|
$.ajax
|
||||||
|
url : "/portlet/title_contents/"+$(this).data("title-id")+"/edit.js",
|
||||||
|
type: "GET",
|
||||||
|
|
||||||
|
$(document).on 'blur keyup paste', ".portlet_title_content .inline-contenteditable", () ->
|
||||||
|
$(this).html($(this).text())
|
||||||
|
$.ajax
|
||||||
|
url : "/portlet/title_contents/"+$(this).data("title-id"),
|
||||||
|
type: "PUT",
|
||||||
|
data :
|
||||||
|
title_content :
|
||||||
|
content : $(this).html()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(".sortable").sortable({
|
||||||
|
|
||||||
|
containerSelector :".block",
|
||||||
|
itemSelector:".portlet",
|
||||||
|
handle: ".handle",
|
||||||
|
nested:true,
|
||||||
|
placeholder:"<div class='placeholder'></div>"
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
flash_delay();
|
||||||
|
|
||||||
|
|
||||||
|
item_catched = ""
|
||||||
|
|
||||||
|
|
||||||
|
adjustment = ""
|
||||||
|
|
||||||
|
$("#menu_item_inspector_container").sortable({
|
||||||
|
|
||||||
|
|
||||||
|
itemSelector:"#menu_item_informations",
|
||||||
|
pullPlaceholder :false,
|
||||||
|
placeholder : "",
|
||||||
|
handle: ".inspector_handle",
|
||||||
|
onDragStart: ($item, container, _super) ->
|
||||||
|
$item.css({
|
||||||
|
height: $item.height(),
|
||||||
|
width: $item.width()
|
||||||
|
})
|
||||||
|
|
||||||
|
$("body").addClass("dragging")
|
||||||
|
|
||||||
|
offset = $item.offset()
|
||||||
|
pointer = container.rootGroup.pointer
|
||||||
|
adjustment = {
|
||||||
|
left: pointer.left - offset.left,
|
||||||
|
top: pointer.top - offset.top
|
||||||
|
}
|
||||||
|
|
||||||
|
onCancel : ($item, container, _super) ->
|
||||||
|
$item.css(position)
|
||||||
|
$item.removeClass("dragged")
|
||||||
|
$("body").removeClass("dragging")
|
||||||
|
|
||||||
|
onDrag: ($item, position, _super) ->
|
||||||
|
|
||||||
|
$item.css({
|
||||||
|
left: position.left - adjustment.left,
|
||||||
|
top: position.top - adjustment.top - $(window).scrollTop()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on "scroll", () ->
|
||||||
|
|
||||||
|
if( $(this).scrollTop() <= 52 )
|
||||||
|
top = 52 - $(this).scrollTop()
|
||||||
|
else
|
||||||
|
top = 0
|
||||||
|
|
||||||
|
$("#toolbar-text, #menu_item_informations").css
|
||||||
|
top : top
|
||||||
|
|
||||||
|
$(document).on "click", "#menu_item_informations .save", ->
|
||||||
|
$(this).closest(".panel").find("form").submit()
|
||||||
|
return false
|
||||||
|
|
||||||
|
$(document).on "click", "#menu_item_informations h4", ->
|
||||||
|
$(this).next(".panel").toggle()
|
||||||
|
return false
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
=require jquery
|
|
||||||
= require twitter/bootstrap
|
|
||||||
|
|
||||||
|
|
||||||
require ./shared/jquery.strings.js
|
|
||||||
require ./shared/jquery.utils.js
|
|
||||||
require ./shared/ui.timepickr.js
|
|
||||||
require ./shared/modernizr.js
|
|
||||||
|
|
||||||
*= require jquery_ujs
|
|
||||||
|
|
||||||
|
|
||||||
*= require_tree ./admin
|
|
||||||
|
|
||||||
|
|
||||||
*= require ./shared/raphael
|
|
||||||
*= require ./shared/morris
|
|
||||||
|
|
||||||
*= require_tree ./note_files
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
$(document).ready(function(){
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
File diff suppressed because it is too large
Load Diff
13
app/assets/javascripts/bootstrap.js
vendored
Normal file
13
app/assets/javascripts/bootstrap.js
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
//= require bootstrap/affix
|
||||||
|
//= require bootstrap/alert
|
||||||
|
//= require bootstrap/button
|
||||||
|
//= require bootstrap/carousel
|
||||||
|
|
||||||
|
//= require bootstrap/dropdown
|
||||||
|
//= require bootstrap/tab
|
||||||
|
//= require bootstrap/transition
|
||||||
|
//= require bootstrap/scrollspy
|
||||||
|
//= require bootstrap/modal
|
||||||
|
//= require bootstrap/tooltip
|
||||||
|
//= require bootstrap/popover
|
||||||
|
//= require bootstrap/datetimepicker
|
137
app/assets/javascripts/bootstrap/affix.js
Normal file
137
app/assets/javascripts/bootstrap/affix.js
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: affix.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#affix
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// AFFIX CLASS DEFINITION
|
||||||
|
// ======================
|
||||||
|
|
||||||
|
var Affix = function (element, options) {
|
||||||
|
this.options = $.extend({}, Affix.DEFAULTS, options)
|
||||||
|
this.$window = $(window)
|
||||||
|
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
|
||||||
|
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
|
||||||
|
|
||||||
|
this.$element = $(element)
|
||||||
|
this.affixed =
|
||||||
|
this.unpin =
|
||||||
|
this.pinnedOffset = null
|
||||||
|
|
||||||
|
this.checkPosition()
|
||||||
|
}
|
||||||
|
|
||||||
|
Affix.RESET = 'affix affix-top affix-bottom'
|
||||||
|
|
||||||
|
Affix.DEFAULTS = {
|
||||||
|
offset: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Affix.prototype.getPinnedOffset = function () {
|
||||||
|
if (this.pinnedOffset) return this.pinnedOffset
|
||||||
|
this.$element.removeClass(Affix.RESET).addClass('affix')
|
||||||
|
var scrollTop = this.$window.scrollTop()
|
||||||
|
var position = this.$element.offset()
|
||||||
|
return (this.pinnedOffset = position.top - scrollTop)
|
||||||
|
}
|
||||||
|
|
||||||
|
Affix.prototype.checkPositionWithEventLoop = function () {
|
||||||
|
setTimeout($.proxy(this.checkPosition, this), 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
Affix.prototype.checkPosition = function () {
|
||||||
|
if (!this.$element.is(':visible')) return
|
||||||
|
|
||||||
|
var scrollHeight = $(document).height()
|
||||||
|
var scrollTop = this.$window.scrollTop()
|
||||||
|
var position = this.$element.offset()
|
||||||
|
var offset = this.options.offset
|
||||||
|
var offsetTop = offset.top
|
||||||
|
var offsetBottom = offset.bottom
|
||||||
|
|
||||||
|
if (this.affixed == 'top') position.top += scrollTop
|
||||||
|
|
||||||
|
if (typeof offset != 'object') offsetBottom = offsetTop = offset
|
||||||
|
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
|
||||||
|
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
|
||||||
|
|
||||||
|
var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
|
||||||
|
offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
|
||||||
|
offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
|
||||||
|
|
||||||
|
if (this.affixed === affix) return
|
||||||
|
if (this.unpin) this.$element.css('top', '')
|
||||||
|
|
||||||
|
var affixType = 'affix' + (affix ? '-' + affix : '')
|
||||||
|
var e = $.Event(affixType + '.bs.affix')
|
||||||
|
|
||||||
|
this.$element.trigger(e)
|
||||||
|
|
||||||
|
if (e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
this.affixed = affix
|
||||||
|
this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
.removeClass(Affix.RESET)
|
||||||
|
.addClass(affixType)
|
||||||
|
.trigger($.Event(affixType.replace('affix', 'affixed')))
|
||||||
|
|
||||||
|
if (affix == 'bottom') {
|
||||||
|
this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// AFFIX PLUGIN DEFINITION
|
||||||
|
// =======================
|
||||||
|
|
||||||
|
var old = $.fn.affix
|
||||||
|
|
||||||
|
$.fn.affix = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.affix')
|
||||||
|
var options = typeof option == 'object' && option
|
||||||
|
|
||||||
|
if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.affix.Constructor = Affix
|
||||||
|
|
||||||
|
|
||||||
|
// AFFIX NO CONFLICT
|
||||||
|
// =================
|
||||||
|
|
||||||
|
$.fn.affix.noConflict = function () {
|
||||||
|
$.fn.affix = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// AFFIX DATA-API
|
||||||
|
// ==============
|
||||||
|
|
||||||
|
$(window).on('load', function () {
|
||||||
|
$('[data-spy="affix"]').each(function () {
|
||||||
|
var $spy = $(this)
|
||||||
|
var data = $spy.data()
|
||||||
|
|
||||||
|
data.offset = data.offset || {}
|
||||||
|
|
||||||
|
if (data.offsetBottom) data.offset.bottom = data.offsetBottom
|
||||||
|
if (data.offsetTop) data.offset.top = data.offsetTop
|
||||||
|
|
||||||
|
$spy.affix(data)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}(jQuery);
|
88
app/assets/javascripts/bootstrap/alert.js
Normal file
88
app/assets/javascripts/bootstrap/alert.js
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: alert.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#alerts
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// ALERT CLASS DEFINITION
|
||||||
|
// ======================
|
||||||
|
|
||||||
|
var dismiss = '[data-dismiss="alert"]'
|
||||||
|
var Alert = function (el) {
|
||||||
|
$(el).on('click', dismiss, this.close)
|
||||||
|
}
|
||||||
|
|
||||||
|
Alert.prototype.close = function (e) {
|
||||||
|
var $this = $(this)
|
||||||
|
var selector = $this.attr('data-target')
|
||||||
|
|
||||||
|
if (!selector) {
|
||||||
|
selector = $this.attr('href')
|
||||||
|
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
||||||
|
}
|
||||||
|
|
||||||
|
var $parent = $(selector)
|
||||||
|
|
||||||
|
if (e) e.preventDefault()
|
||||||
|
|
||||||
|
if (!$parent.length) {
|
||||||
|
$parent = $this.hasClass('alert') ? $this : $this.parent()
|
||||||
|
}
|
||||||
|
|
||||||
|
$parent.trigger(e = $.Event('close.bs.alert'))
|
||||||
|
|
||||||
|
if (e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
$parent.removeClass('in')
|
||||||
|
|
||||||
|
function removeElement() {
|
||||||
|
$parent.trigger('closed.bs.alert').remove()
|
||||||
|
}
|
||||||
|
|
||||||
|
$.support.transition && $parent.hasClass('fade') ?
|
||||||
|
$parent
|
||||||
|
.one($.support.transition.end, removeElement)
|
||||||
|
.emulateTransitionEnd(150) :
|
||||||
|
removeElement()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ALERT PLUGIN DEFINITION
|
||||||
|
// =======================
|
||||||
|
|
||||||
|
var old = $.fn.alert
|
||||||
|
|
||||||
|
$.fn.alert = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.alert')
|
||||||
|
|
||||||
|
if (!data) $this.data('bs.alert', (data = new Alert(this)))
|
||||||
|
if (typeof option == 'string') data[option].call($this)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.alert.Constructor = Alert
|
||||||
|
|
||||||
|
|
||||||
|
// ALERT NO CONFLICT
|
||||||
|
// =================
|
||||||
|
|
||||||
|
$.fn.alert.noConflict = function () {
|
||||||
|
$.fn.alert = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ALERT DATA-API
|
||||||
|
// ==============
|
||||||
|
|
||||||
|
$(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
|
||||||
|
|
||||||
|
}(jQuery);
|
107
app/assets/javascripts/bootstrap/button.js
Normal file
107
app/assets/javascripts/bootstrap/button.js
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: button.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#buttons
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// BUTTON PUBLIC CLASS DEFINITION
|
||||||
|
// ==============================
|
||||||
|
|
||||||
|
var Button = function (element, options) {
|
||||||
|
this.$element = $(element)
|
||||||
|
this.options = $.extend({}, Button.DEFAULTS, options)
|
||||||
|
this.isLoading = false
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.DEFAULTS = {
|
||||||
|
loadingText: 'loading...'
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.prototype.setState = function (state) {
|
||||||
|
var d = 'disabled'
|
||||||
|
var $el = this.$element
|
||||||
|
var val = $el.is('input') ? 'val' : 'html'
|
||||||
|
var data = $el.data()
|
||||||
|
|
||||||
|
state = state + 'Text'
|
||||||
|
|
||||||
|
if (!data.resetText) $el.data('resetText', $el[val]())
|
||||||
|
|
||||||
|
$el[val](data[state] || this.options[state])
|
||||||
|
|
||||||
|
// push to event loop to allow forms to submit
|
||||||
|
setTimeout($.proxy(function () {
|
||||||
|
if (state == 'loadingText') {
|
||||||
|
this.isLoading = true
|
||||||
|
$el.addClass(d).attr(d, d)
|
||||||
|
} else if (this.isLoading) {
|
||||||
|
this.isLoading = false
|
||||||
|
$el.removeClass(d).removeAttr(d)
|
||||||
|
}
|
||||||
|
}, this), 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.prototype.toggle = function () {
|
||||||
|
var changed = true
|
||||||
|
var $parent = this.$element.closest('[data-toggle="buttons"]')
|
||||||
|
|
||||||
|
if ($parent.length) {
|
||||||
|
var $input = this.$element.find('input')
|
||||||
|
if ($input.prop('type') == 'radio') {
|
||||||
|
if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
|
||||||
|
else $parent.find('.active').removeClass('active')
|
||||||
|
}
|
||||||
|
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed) this.$element.toggleClass('active')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// BUTTON PLUGIN DEFINITION
|
||||||
|
// ========================
|
||||||
|
|
||||||
|
var old = $.fn.button
|
||||||
|
|
||||||
|
$.fn.button = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.button')
|
||||||
|
var options = typeof option == 'object' && option
|
||||||
|
|
||||||
|
if (!data) $this.data('bs.button', (data = new Button(this, options)))
|
||||||
|
|
||||||
|
if (option == 'toggle') data.toggle()
|
||||||
|
else if (option) data.setState(option)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.button.Constructor = Button
|
||||||
|
|
||||||
|
|
||||||
|
// BUTTON NO CONFLICT
|
||||||
|
// ==================
|
||||||
|
|
||||||
|
$.fn.button.noConflict = function () {
|
||||||
|
$.fn.button = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// BUTTON DATA-API
|
||||||
|
// ===============
|
||||||
|
|
||||||
|
$(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
|
||||||
|
var $btn = $(e.target)
|
||||||
|
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
||||||
|
$btn.button('toggle')
|
||||||
|
e.preventDefault()
|
||||||
|
})
|
||||||
|
|
||||||
|
}(jQuery);
|
205
app/assets/javascripts/bootstrap/carousel.js
Normal file
205
app/assets/javascripts/bootstrap/carousel.js
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: carousel.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#carousel
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// CAROUSEL CLASS DEFINITION
|
||||||
|
// =========================
|
||||||
|
|
||||||
|
var Carousel = function (element, options) {
|
||||||
|
this.$element = $(element)
|
||||||
|
this.$indicators = this.$element.find('.carousel-indicators')
|
||||||
|
this.options = options
|
||||||
|
this.paused =
|
||||||
|
this.sliding =
|
||||||
|
this.interval =
|
||||||
|
this.$active =
|
||||||
|
this.$items = null
|
||||||
|
|
||||||
|
this.options.pause == 'hover' && this.$element
|
||||||
|
.on('mouseenter', $.proxy(this.pause, this))
|
||||||
|
.on('mouseleave', $.proxy(this.cycle, this))
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.DEFAULTS = {
|
||||||
|
interval: 5000,
|
||||||
|
pause: 'hover',
|
||||||
|
wrap: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.prototype.cycle = function (e) {
|
||||||
|
e || (this.paused = false)
|
||||||
|
|
||||||
|
this.interval && clearInterval(this.interval)
|
||||||
|
|
||||||
|
this.options.interval
|
||||||
|
&& !this.paused
|
||||||
|
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.prototype.getActiveIndex = function () {
|
||||||
|
this.$active = this.$element.find('.item.active')
|
||||||
|
this.$items = this.$active.parent().children()
|
||||||
|
|
||||||
|
return this.$items.index(this.$active)
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.prototype.to = function (pos) {
|
||||||
|
var that = this
|
||||||
|
var activeIndex = this.getActiveIndex()
|
||||||
|
|
||||||
|
if (pos > (this.$items.length - 1) || pos < 0) return
|
||||||
|
|
||||||
|
if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
|
||||||
|
if (activeIndex == pos) return this.pause().cycle()
|
||||||
|
|
||||||
|
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.prototype.pause = function (e) {
|
||||||
|
e || (this.paused = true)
|
||||||
|
|
||||||
|
if (this.$element.find('.next, .prev').length && $.support.transition) {
|
||||||
|
this.$element.trigger($.support.transition.end)
|
||||||
|
this.cycle(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.interval = clearInterval(this.interval)
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.prototype.next = function () {
|
||||||
|
if (this.sliding) return
|
||||||
|
return this.slide('next')
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.prototype.prev = function () {
|
||||||
|
if (this.sliding) return
|
||||||
|
return this.slide('prev')
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.prototype.slide = function (type, next) {
|
||||||
|
var $active = this.$element.find('.item.active')
|
||||||
|
var $next = next || $active[type]()
|
||||||
|
var isCycling = this.interval
|
||||||
|
var direction = type == 'next' ? 'left' : 'right'
|
||||||
|
var fallback = type == 'next' ? 'first' : 'last'
|
||||||
|
var that = this
|
||||||
|
|
||||||
|
if (!$next.length) {
|
||||||
|
if (!this.options.wrap) return
|
||||||
|
$next = this.$element.find('.item')[fallback]()
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($next.hasClass('active')) return this.sliding = false
|
||||||
|
|
||||||
|
var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
|
||||||
|
this.$element.trigger(e)
|
||||||
|
if (e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
this.sliding = true
|
||||||
|
|
||||||
|
isCycling && this.pause()
|
||||||
|
|
||||||
|
if (this.$indicators.length) {
|
||||||
|
this.$indicators.find('.active').removeClass('active')
|
||||||
|
this.$element.one('slid.bs.carousel', function () {
|
||||||
|
var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
|
||||||
|
$nextIndicator && $nextIndicator.addClass('active')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($.support.transition && this.$element.hasClass('slide')) {
|
||||||
|
$next.addClass(type)
|
||||||
|
$next[0].offsetWidth // force reflow
|
||||||
|
$active.addClass(direction)
|
||||||
|
$next.addClass(direction)
|
||||||
|
$active
|
||||||
|
.one($.support.transition.end, function () {
|
||||||
|
$next.removeClass([type, direction].join(' ')).addClass('active')
|
||||||
|
$active.removeClass(['active', direction].join(' '))
|
||||||
|
that.sliding = false
|
||||||
|
setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
|
||||||
|
})
|
||||||
|
.emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
|
||||||
|
} else {
|
||||||
|
$active.removeClass('active')
|
||||||
|
$next.addClass('active')
|
||||||
|
this.sliding = false
|
||||||
|
this.$element.trigger('slid.bs.carousel')
|
||||||
|
}
|
||||||
|
|
||||||
|
isCycling && this.cycle()
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// CAROUSEL PLUGIN DEFINITION
|
||||||
|
// ==========================
|
||||||
|
|
||||||
|
var old = $.fn.carousel
|
||||||
|
|
||||||
|
$.fn.carousel = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.carousel')
|
||||||
|
var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
||||||
|
var action = typeof option == 'string' ? option : options.slide
|
||||||
|
|
||||||
|
if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
|
||||||
|
if (typeof option == 'number') data.to(option)
|
||||||
|
else if (action) data[action]()
|
||||||
|
else if (options.interval) data.pause().cycle()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.carousel.Constructor = Carousel
|
||||||
|
|
||||||
|
|
||||||
|
// CAROUSEL NO CONFLICT
|
||||||
|
// ====================
|
||||||
|
|
||||||
|
$.fn.carousel.noConflict = function () {
|
||||||
|
$.fn.carousel = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// CAROUSEL DATA-API
|
||||||
|
// =================
|
||||||
|
|
||||||
|
$(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
|
||||||
|
var $this = $(this), href
|
||||||
|
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||||
|
var options = $.extend({}, $target.data(), $this.data())
|
||||||
|
var slideIndex = $this.attr('data-slide-to')
|
||||||
|
if (slideIndex) options.interval = false
|
||||||
|
|
||||||
|
$target.carousel(options)
|
||||||
|
|
||||||
|
if (slideIndex = $this.attr('data-slide-to')) {
|
||||||
|
$target.data('bs.carousel').to(slideIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
})
|
||||||
|
|
||||||
|
$(window).on('load', function () {
|
||||||
|
$('[data-ride="carousel"]').each(function () {
|
||||||
|
var $carousel = $(this)
|
||||||
|
$carousel.carousel($carousel.data())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}(jQuery);
|
170
app/assets/javascripts/bootstrap/collapse.js
Normal file
170
app/assets/javascripts/bootstrap/collapse.js
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: collapse.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#collapse
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// COLLAPSE PUBLIC CLASS DEFINITION
|
||||||
|
// ================================
|
||||||
|
|
||||||
|
var Collapse = function (element, options) {
|
||||||
|
this.$element = $(element)
|
||||||
|
this.options = $.extend({}, Collapse.DEFAULTS, options)
|
||||||
|
this.transitioning = null
|
||||||
|
|
||||||
|
if (this.options.parent) this.$parent = $(this.options.parent)
|
||||||
|
if (this.options.toggle) this.toggle()
|
||||||
|
}
|
||||||
|
|
||||||
|
Collapse.DEFAULTS = {
|
||||||
|
toggle: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Collapse.prototype.dimension = function () {
|
||||||
|
var hasWidth = this.$element.hasClass('width')
|
||||||
|
return hasWidth ? 'width' : 'height'
|
||||||
|
}
|
||||||
|
|
||||||
|
Collapse.prototype.show = function () {
|
||||||
|
if (this.transitioning || this.$element.hasClass('in')) return
|
||||||
|
|
||||||
|
var startEvent = $.Event('show.bs.collapse')
|
||||||
|
this.$element.trigger(startEvent)
|
||||||
|
if (startEvent.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
var actives = this.$parent && this.$parent.find('> .panel > .in')
|
||||||
|
|
||||||
|
if (actives && actives.length) {
|
||||||
|
var hasData = actives.data('bs.collapse')
|
||||||
|
if (hasData && hasData.transitioning) return
|
||||||
|
actives.collapse('hide')
|
||||||
|
hasData || actives.data('bs.collapse', null)
|
||||||
|
}
|
||||||
|
|
||||||
|
var dimension = this.dimension()
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
.removeClass('collapse')
|
||||||
|
.addClass('collapsing')
|
||||||
|
[dimension](0)
|
||||||
|
|
||||||
|
this.transitioning = 1
|
||||||
|
|
||||||
|
var complete = function () {
|
||||||
|
this.$element
|
||||||
|
.removeClass('collapsing')
|
||||||
|
.addClass('collapse in')
|
||||||
|
[dimension]('auto')
|
||||||
|
this.transitioning = 0
|
||||||
|
this.$element.trigger('shown.bs.collapse')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$.support.transition) return complete.call(this)
|
||||||
|
|
||||||
|
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
.one($.support.transition.end, $.proxy(complete, this))
|
||||||
|
.emulateTransitionEnd(350)
|
||||||
|
[dimension](this.$element[0][scrollSize])
|
||||||
|
}
|
||||||
|
|
||||||
|
Collapse.prototype.hide = function () {
|
||||||
|
if (this.transitioning || !this.$element.hasClass('in')) return
|
||||||
|
|
||||||
|
var startEvent = $.Event('hide.bs.collapse')
|
||||||
|
this.$element.trigger(startEvent)
|
||||||
|
if (startEvent.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
var dimension = this.dimension()
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
[dimension](this.$element[dimension]())
|
||||||
|
[0].offsetHeight
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
.addClass('collapsing')
|
||||||
|
.removeClass('collapse')
|
||||||
|
.removeClass('in')
|
||||||
|
|
||||||
|
this.transitioning = 1
|
||||||
|
|
||||||
|
var complete = function () {
|
||||||
|
this.transitioning = 0
|
||||||
|
this.$element
|
||||||
|
.trigger('hidden.bs.collapse')
|
||||||
|
.removeClass('collapsing')
|
||||||
|
.addClass('collapse')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$.support.transition) return complete.call(this)
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
[dimension](0)
|
||||||
|
.one($.support.transition.end, $.proxy(complete, this))
|
||||||
|
.emulateTransitionEnd(350)
|
||||||
|
}
|
||||||
|
|
||||||
|
Collapse.prototype.toggle = function () {
|
||||||
|
this[this.$element.hasClass('in') ? 'hide' : 'show']()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// COLLAPSE PLUGIN DEFINITION
|
||||||
|
// ==========================
|
||||||
|
|
||||||
|
var old = $.fn.collapse
|
||||||
|
|
||||||
|
$.fn.collapse = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.collapse')
|
||||||
|
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
||||||
|
|
||||||
|
if (!data && options.toggle && option == 'show') option = !option
|
||||||
|
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.collapse.Constructor = Collapse
|
||||||
|
|
||||||
|
|
||||||
|
// COLLAPSE NO CONFLICT
|
||||||
|
// ====================
|
||||||
|
|
||||||
|
$.fn.collapse.noConflict = function () {
|
||||||
|
$.fn.collapse = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// COLLAPSE DATA-API
|
||||||
|
// =================
|
||||||
|
|
||||||
|
$(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
|
||||||
|
var $this = $(this), href
|
||||||
|
var target = $this.attr('data-target')
|
||||||
|
|| e.preventDefault()
|
||||||
|
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
||||||
|
var $target = $(target)
|
||||||
|
var data = $target.data('bs.collapse')
|
||||||
|
var option = data ? 'toggle' : $this.data()
|
||||||
|
var parent = $this.attr('data-parent')
|
||||||
|
var $parent = parent && $(parent)
|
||||||
|
|
||||||
|
if (!data || !data.transitioning) {
|
||||||
|
if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
|
||||||
|
$this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
|
||||||
|
}
|
||||||
|
|
||||||
|
$target.collapse(option)
|
||||||
|
})
|
||||||
|
|
||||||
|
}(jQuery);
|
3652
app/assets/javascripts/bootstrap/datetimepicker.js
Executable file
3652
app/assets/javascripts/bootstrap/datetimepicker.js
Executable file
File diff suppressed because it is too large
Load Diff
147
app/assets/javascripts/bootstrap/dropdown.js
Normal file
147
app/assets/javascripts/bootstrap/dropdown.js
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: dropdown.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#dropdowns
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// DROPDOWN CLASS DEFINITION
|
||||||
|
// =========================
|
||||||
|
|
||||||
|
var backdrop = '.dropdown-backdrop'
|
||||||
|
var toggle = '[data-toggle=dropdown]'
|
||||||
|
var Dropdown = function (element) {
|
||||||
|
$(element).on('click.bs.dropdown', this.toggle)
|
||||||
|
}
|
||||||
|
|
||||||
|
Dropdown.prototype.toggle = function (e) {
|
||||||
|
var $this = $(this)
|
||||||
|
|
||||||
|
if ($this.is('.disabled, :disabled')) return
|
||||||
|
|
||||||
|
var $parent = getParent($this)
|
||||||
|
var isActive = $parent.hasClass('open')
|
||||||
|
|
||||||
|
clearMenus()
|
||||||
|
|
||||||
|
if (!isActive) {
|
||||||
|
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
|
||||||
|
// if mobile we use a backdrop because click events don't delegate
|
||||||
|
$('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
|
||||||
|
}
|
||||||
|
|
||||||
|
var relatedTarget = { relatedTarget: this }
|
||||||
|
$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
|
||||||
|
|
||||||
|
if (e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
$parent
|
||||||
|
.toggleClass('open')
|
||||||
|
.trigger('shown.bs.dropdown', relatedTarget)
|
||||||
|
|
||||||
|
$this.focus()
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
Dropdown.prototype.keydown = function (e) {
|
||||||
|
if (!/(38|40|27)/.test(e.keyCode)) return
|
||||||
|
|
||||||
|
var $this = $(this)
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
|
||||||
|
if ($this.is('.disabled, :disabled')) return
|
||||||
|
|
||||||
|
var $parent = getParent($this)
|
||||||
|
var isActive = $parent.hasClass('open')
|
||||||
|
|
||||||
|
if (!isActive || (isActive && e.keyCode == 27)) {
|
||||||
|
if (e.which == 27) $parent.find(toggle).focus()
|
||||||
|
return $this.click()
|
||||||
|
}
|
||||||
|
|
||||||
|
var desc = ' li:not(.divider):visible a'
|
||||||
|
var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
|
||||||
|
|
||||||
|
if (!$items.length) return
|
||||||
|
|
||||||
|
var index = $items.index($items.filter(':focus'))
|
||||||
|
|
||||||
|
if (e.keyCode == 38 && index > 0) index-- // up
|
||||||
|
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
|
||||||
|
if (!~index) index = 0
|
||||||
|
|
||||||
|
$items.eq(index).focus()
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearMenus(e) {
|
||||||
|
$(backdrop).remove()
|
||||||
|
$(toggle).each(function () {
|
||||||
|
var $parent = getParent($(this))
|
||||||
|
var relatedTarget = { relatedTarget: this }
|
||||||
|
if (!$parent.hasClass('open')) return
|
||||||
|
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
|
||||||
|
if (e.isDefaultPrevented()) return
|
||||||
|
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getParent($this) {
|
||||||
|
var selector = $this.attr('data-target')
|
||||||
|
|
||||||
|
if (!selector) {
|
||||||
|
selector = $this.attr('href')
|
||||||
|
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||||
|
}
|
||||||
|
|
||||||
|
var $parent = selector && $(selector)
|
||||||
|
|
||||||
|
return $parent && $parent.length ? $parent : $this.parent()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// DROPDOWN PLUGIN DEFINITION
|
||||||
|
// ==========================
|
||||||
|
|
||||||
|
var old = $.fn.dropdown
|
||||||
|
|
||||||
|
$.fn.dropdown = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.dropdown')
|
||||||
|
|
||||||
|
if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
|
||||||
|
if (typeof option == 'string') data[option].call($this)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.dropdown.Constructor = Dropdown
|
||||||
|
|
||||||
|
|
||||||
|
// DROPDOWN NO CONFLICT
|
||||||
|
// ====================
|
||||||
|
|
||||||
|
$.fn.dropdown.noConflict = function () {
|
||||||
|
$.fn.dropdown = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// APPLY TO STANDARD DROPDOWN ELEMENTS
|
||||||
|
// ===================================
|
||||||
|
|
||||||
|
$(document)
|
||||||
|
.on('click.bs.dropdown.data-api', clearMenus)
|
||||||
|
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
||||||
|
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
||||||
|
.on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
|
||||||
|
|
||||||
|
}(jQuery);
|
243
app/assets/javascripts/bootstrap/modal.js
Normal file
243
app/assets/javascripts/bootstrap/modal.js
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: modal.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#modals
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// MODAL CLASS DEFINITION
|
||||||
|
// ======================
|
||||||
|
|
||||||
|
var Modal = function (element, options) {
|
||||||
|
this.options = options
|
||||||
|
this.$element = $(element)
|
||||||
|
this.$backdrop =
|
||||||
|
this.isShown = null
|
||||||
|
|
||||||
|
if (this.options.remote) {
|
||||||
|
this.$element
|
||||||
|
.find('.modal-content')
|
||||||
|
.load(this.options.remote, $.proxy(function () {
|
||||||
|
this.$element.trigger('loaded.bs.modal')
|
||||||
|
}, this))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.DEFAULTS = {
|
||||||
|
backdrop: true,
|
||||||
|
keyboard: true,
|
||||||
|
show: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.toggle = function (_relatedTarget) {
|
||||||
|
return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.show = function (_relatedTarget) {
|
||||||
|
var that = this
|
||||||
|
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
|
||||||
|
|
||||||
|
this.$element.trigger(e)
|
||||||
|
|
||||||
|
if (this.isShown || e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
this.isShown = true
|
||||||
|
|
||||||
|
this.escape()
|
||||||
|
|
||||||
|
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
|
||||||
|
|
||||||
|
this.backdrop(function () {
|
||||||
|
var transition = $.support.transition && that.$element.hasClass('fade')
|
||||||
|
|
||||||
|
if (!that.$element.parent().length) {
|
||||||
|
that.$element.appendTo(document.body) // don't move modals dom position
|
||||||
|
}
|
||||||
|
|
||||||
|
that.$element
|
||||||
|
.show()
|
||||||
|
.scrollTop(0)
|
||||||
|
|
||||||
|
if (transition) {
|
||||||
|
that.$element[0].offsetWidth // force reflow
|
||||||
|
}
|
||||||
|
|
||||||
|
that.$element
|
||||||
|
.addClass('in')
|
||||||
|
.attr('aria-hidden', false)
|
||||||
|
|
||||||
|
that.enforceFocus()
|
||||||
|
|
||||||
|
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
|
||||||
|
|
||||||
|
transition ?
|
||||||
|
that.$element.find('.modal-dialog') // wait for modal to slide in
|
||||||
|
.one($.support.transition.end, function () {
|
||||||
|
that.$element.focus().trigger(e)
|
||||||
|
})
|
||||||
|
.emulateTransitionEnd(300) :
|
||||||
|
that.$element.focus().trigger(e)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.hide = function (e) {
|
||||||
|
if (e) e.preventDefault()
|
||||||
|
|
||||||
|
e = $.Event('hide.bs.modal')
|
||||||
|
|
||||||
|
this.$element.trigger(e)
|
||||||
|
|
||||||
|
if (!this.isShown || e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
this.isShown = false
|
||||||
|
|
||||||
|
this.escape()
|
||||||
|
|
||||||
|
$(document).off('focusin.bs.modal')
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
.removeClass('in')
|
||||||
|
.attr('aria-hidden', true)
|
||||||
|
.off('click.dismiss.bs.modal')
|
||||||
|
|
||||||
|
$.support.transition && this.$element.hasClass('fade') ?
|
||||||
|
this.$element
|
||||||
|
.one($.support.transition.end, $.proxy(this.hideModal, this))
|
||||||
|
.emulateTransitionEnd(300) :
|
||||||
|
this.hideModal()
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.enforceFocus = function () {
|
||||||
|
$(document)
|
||||||
|
.off('focusin.bs.modal') // guard against infinite focus loop
|
||||||
|
.on('focusin.bs.modal', $.proxy(function (e) {
|
||||||
|
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
||||||
|
this.$element.focus()
|
||||||
|
}
|
||||||
|
}, this))
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.escape = function () {
|
||||||
|
if (this.isShown && this.options.keyboard) {
|
||||||
|
this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
|
||||||
|
e.which == 27 && this.hide()
|
||||||
|
}, this))
|
||||||
|
} else if (!this.isShown) {
|
||||||
|
this.$element.off('keyup.dismiss.bs.modal')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.hideModal = function () {
|
||||||
|
var that = this
|
||||||
|
this.$element.hide()
|
||||||
|
this.backdrop(function () {
|
||||||
|
that.removeBackdrop()
|
||||||
|
that.$element.trigger('hidden.bs.modal')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.removeBackdrop = function () {
|
||||||
|
this.$backdrop && this.$backdrop.remove()
|
||||||
|
this.$backdrop = null
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.backdrop = function (callback) {
|
||||||
|
var animate = this.$element.hasClass('fade') ? 'fade' : ''
|
||||||
|
|
||||||
|
if (this.isShown && this.options.backdrop) {
|
||||||
|
var doAnimate = $.support.transition && animate
|
||||||
|
|
||||||
|
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
|
||||||
|
.appendTo(document.body)
|
||||||
|
|
||||||
|
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
|
||||||
|
if (e.target !== e.currentTarget) return
|
||||||
|
this.options.backdrop == 'static'
|
||||||
|
? this.$element[0].focus.call(this.$element[0])
|
||||||
|
: this.hide.call(this)
|
||||||
|
}, this))
|
||||||
|
|
||||||
|
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
||||||
|
|
||||||
|
this.$backdrop.addClass('in')
|
||||||
|
|
||||||
|
if (!callback) return
|
||||||
|
|
||||||
|
doAnimate ?
|
||||||
|
this.$backdrop
|
||||||
|
.one($.support.transition.end, callback)
|
||||||
|
.emulateTransitionEnd(150) :
|
||||||
|
callback()
|
||||||
|
|
||||||
|
} else if (!this.isShown && this.$backdrop) {
|
||||||
|
this.$backdrop.removeClass('in')
|
||||||
|
|
||||||
|
$.support.transition && this.$element.hasClass('fade') ?
|
||||||
|
this.$backdrop
|
||||||
|
.one($.support.transition.end, callback)
|
||||||
|
.emulateTransitionEnd(150) :
|
||||||
|
callback()
|
||||||
|
|
||||||
|
} else if (callback) {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MODAL PLUGIN DEFINITION
|
||||||
|
// =======================
|
||||||
|
|
||||||
|
var old = $.fn.modal
|
||||||
|
|
||||||
|
$.fn.modal = function (option, _relatedTarget) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.modal')
|
||||||
|
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
||||||
|
|
||||||
|
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
|
||||||
|
if (typeof option == 'string') data[option](_relatedTarget)
|
||||||
|
else if (options.show) data.show(_relatedTarget)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.modal.Constructor = Modal
|
||||||
|
|
||||||
|
|
||||||
|
// MODAL NO CONFLICT
|
||||||
|
// =================
|
||||||
|
|
||||||
|
$.fn.modal.noConflict = function () {
|
||||||
|
$.fn.modal = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MODAL DATA-API
|
||||||
|
// ==============
|
||||||
|
|
||||||
|
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
|
||||||
|
var $this = $(this)
|
||||||
|
var href = $this.attr('href')
|
||||||
|
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
|
||||||
|
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
|
||||||
|
|
||||||
|
if ($this.is('a')) e.preventDefault()
|
||||||
|
|
||||||
|
$target
|
||||||
|
.modal(option, this)
|
||||||
|
.one('hide', function () {
|
||||||
|
$this.is(':visible') && $this.focus()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document)
|
||||||
|
.on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
|
||||||
|
.on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
|
||||||
|
|
||||||
|
}(jQuery);
|
110
app/assets/javascripts/bootstrap/popover.js
Normal file
110
app/assets/javascripts/bootstrap/popover.js
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: popover.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#popovers
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// POPOVER PUBLIC CLASS DEFINITION
|
||||||
|
// ===============================
|
||||||
|
|
||||||
|
var Popover = function (element, options) {
|
||||||
|
this.init('popover', element, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
||||||
|
|
||||||
|
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
||||||
|
placement: 'right',
|
||||||
|
trigger: 'click',
|
||||||
|
content: '',
|
||||||
|
template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// NOTE: POPOVER EXTENDS tooltip.js
|
||||||
|
// ================================
|
||||||
|
|
||||||
|
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
|
||||||
|
|
||||||
|
Popover.prototype.constructor = Popover
|
||||||
|
|
||||||
|
Popover.prototype.getDefaults = function () {
|
||||||
|
return Popover.DEFAULTS
|
||||||
|
}
|
||||||
|
|
||||||
|
Popover.prototype.setContent = function () {
|
||||||
|
var $tip = this.tip()
|
||||||
|
var title = this.getTitle()
|
||||||
|
var content = this.getContent()
|
||||||
|
|
||||||
|
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
|
||||||
|
$tip.find('.popover-content')[ // we use append for html objects to maintain js events
|
||||||
|
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
|
||||||
|
](content)
|
||||||
|
|
||||||
|
$tip.removeClass('fade top bottom left right in')
|
||||||
|
|
||||||
|
// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
|
||||||
|
// this manually by checking the contents.
|
||||||
|
if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
|
||||||
|
}
|
||||||
|
|
||||||
|
Popover.prototype.hasContent = function () {
|
||||||
|
return this.getTitle() || this.getContent()
|
||||||
|
}
|
||||||
|
|
||||||
|
Popover.prototype.getContent = function () {
|
||||||
|
var $e = this.$element
|
||||||
|
var o = this.options
|
||||||
|
|
||||||
|
return $e.attr('data-content')
|
||||||
|
|| (typeof o.content == 'function' ?
|
||||||
|
o.content.call($e[0]) :
|
||||||
|
o.content)
|
||||||
|
}
|
||||||
|
|
||||||
|
Popover.prototype.arrow = function () {
|
||||||
|
return this.$arrow = this.$arrow || this.tip().find('.arrow')
|
||||||
|
}
|
||||||
|
|
||||||
|
Popover.prototype.tip = function () {
|
||||||
|
if (!this.$tip) this.$tip = $(this.options.template)
|
||||||
|
return this.$tip
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// POPOVER PLUGIN DEFINITION
|
||||||
|
// =========================
|
||||||
|
|
||||||
|
var old = $.fn.popover
|
||||||
|
|
||||||
|
$.fn.popover = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.popover')
|
||||||
|
var options = typeof option == 'object' && option
|
||||||
|
|
||||||
|
if (!data && option == 'destroy') return
|
||||||
|
if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.popover.Constructor = Popover
|
||||||
|
|
||||||
|
|
||||||
|
// POPOVER NO CONFLICT
|
||||||
|
// ===================
|
||||||
|
|
||||||
|
$.fn.popover.noConflict = function () {
|
||||||
|
$.fn.popover = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
}(jQuery);
|
153
app/assets/javascripts/bootstrap/scrollspy.js
Normal file
153
app/assets/javascripts/bootstrap/scrollspy.js
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: scrollspy.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#scrollspy
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// SCROLLSPY CLASS DEFINITION
|
||||||
|
// ==========================
|
||||||
|
|
||||||
|
function ScrollSpy(element, options) {
|
||||||
|
var href
|
||||||
|
var process = $.proxy(this.process, this)
|
||||||
|
|
||||||
|
this.$element = $(element).is('body') ? $(window) : $(element)
|
||||||
|
this.$body = $('body')
|
||||||
|
this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
|
||||||
|
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
||||||
|
this.selector = (this.options.target
|
||||||
|
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||||
|
|| '') + ' .nav li > a'
|
||||||
|
this.offsets = $([])
|
||||||
|
this.targets = $([])
|
||||||
|
this.activeTarget = null
|
||||||
|
|
||||||
|
this.refresh()
|
||||||
|
this.process()
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollSpy.DEFAULTS = {
|
||||||
|
offset: 10
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollSpy.prototype.refresh = function () {
|
||||||
|
var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
|
||||||
|
|
||||||
|
this.offsets = $([])
|
||||||
|
this.targets = $([])
|
||||||
|
|
||||||
|
var self = this
|
||||||
|
var $targets = this.$body
|
||||||
|
.find(this.selector)
|
||||||
|
.map(function () {
|
||||||
|
var $el = $(this)
|
||||||
|
var href = $el.data('target') || $el.attr('href')
|
||||||
|
var $href = /^#./.test(href) && $(href)
|
||||||
|
|
||||||
|
return ($href
|
||||||
|
&& $href.length
|
||||||
|
&& $href.is(':visible')
|
||||||
|
&& [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
|
||||||
|
})
|
||||||
|
.sort(function (a, b) { return a[0] - b[0] })
|
||||||
|
.each(function () {
|
||||||
|
self.offsets.push(this[0])
|
||||||
|
self.targets.push(this[1])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollSpy.prototype.process = function () {
|
||||||
|
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
||||||
|
var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
|
||||||
|
var maxScroll = scrollHeight - this.$scrollElement.height()
|
||||||
|
var offsets = this.offsets
|
||||||
|
var targets = this.targets
|
||||||
|
var activeTarget = this.activeTarget
|
||||||
|
var i
|
||||||
|
|
||||||
|
if (scrollTop >= maxScroll) {
|
||||||
|
return activeTarget != (i = targets.last()[0]) && this.activate(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (activeTarget && scrollTop <= offsets[0]) {
|
||||||
|
return activeTarget != (i = targets[0]) && this.activate(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = offsets.length; i--;) {
|
||||||
|
activeTarget != targets[i]
|
||||||
|
&& scrollTop >= offsets[i]
|
||||||
|
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
||||||
|
&& this.activate( targets[i] )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollSpy.prototype.activate = function (target) {
|
||||||
|
this.activeTarget = target
|
||||||
|
|
||||||
|
$(this.selector)
|
||||||
|
.parentsUntil(this.options.target, '.active')
|
||||||
|
.removeClass('active')
|
||||||
|
|
||||||
|
var selector = this.selector +
|
||||||
|
'[data-target="' + target + '"],' +
|
||||||
|
this.selector + '[href="' + target + '"]'
|
||||||
|
|
||||||
|
var active = $(selector)
|
||||||
|
.parents('li')
|
||||||
|
.addClass('active')
|
||||||
|
|
||||||
|
if (active.parent('.dropdown-menu').length) {
|
||||||
|
active = active
|
||||||
|
.closest('li.dropdown')
|
||||||
|
.addClass('active')
|
||||||
|
}
|
||||||
|
|
||||||
|
active.trigger('activate.bs.scrollspy')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// SCROLLSPY PLUGIN DEFINITION
|
||||||
|
// ===========================
|
||||||
|
|
||||||
|
var old = $.fn.scrollspy
|
||||||
|
|
||||||
|
$.fn.scrollspy = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.scrollspy')
|
||||||
|
var options = typeof option == 'object' && option
|
||||||
|
|
||||||
|
if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.scrollspy.Constructor = ScrollSpy
|
||||||
|
|
||||||
|
|
||||||
|
// SCROLLSPY NO CONFLICT
|
||||||
|
// =====================
|
||||||
|
|
||||||
|
$.fn.scrollspy.noConflict = function () {
|
||||||
|
$.fn.scrollspy = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// SCROLLSPY DATA-API
|
||||||
|
// ==================
|
||||||
|
|
||||||
|
$(window).on('load', function () {
|
||||||
|
$('[data-spy="scroll"]').each(function () {
|
||||||
|
var $spy = $(this)
|
||||||
|
$spy.scrollspy($spy.data())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}(jQuery);
|
125
app/assets/javascripts/bootstrap/tab.js
Normal file
125
app/assets/javascripts/bootstrap/tab.js
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: tab.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#tabs
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// TAB CLASS DEFINITION
|
||||||
|
// ====================
|
||||||
|
|
||||||
|
var Tab = function (element) {
|
||||||
|
this.element = $(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
Tab.prototype.show = function () {
|
||||||
|
var $this = this.element
|
||||||
|
var $ul = $this.closest('ul:not(.dropdown-menu)')
|
||||||
|
var selector = $this.data('target')
|
||||||
|
|
||||||
|
if (!selector) {
|
||||||
|
selector = $this.attr('href')
|
||||||
|
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this.parent('li').hasClass('active')) return
|
||||||
|
|
||||||
|
var previous = $ul.find('.active:last a')[0]
|
||||||
|
var e = $.Event('show.bs.tab', {
|
||||||
|
relatedTarget: previous
|
||||||
|
})
|
||||||
|
|
||||||
|
$this.trigger(e)
|
||||||
|
|
||||||
|
if (e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
var $target = $(selector)
|
||||||
|
|
||||||
|
this.activate($this.parent('li'), $ul)
|
||||||
|
this.activate($target, $target.parent(), function () {
|
||||||
|
$this.trigger({
|
||||||
|
type: 'shown.bs.tab',
|
||||||
|
relatedTarget: previous
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Tab.prototype.activate = function (element, container, callback) {
|
||||||
|
var $active = container.find('> .active')
|
||||||
|
var transition = callback
|
||||||
|
&& $.support.transition
|
||||||
|
&& $active.hasClass('fade')
|
||||||
|
|
||||||
|
function next() {
|
||||||
|
$active
|
||||||
|
.removeClass('active')
|
||||||
|
.find('> .dropdown-menu > .active')
|
||||||
|
.removeClass('active')
|
||||||
|
|
||||||
|
element.addClass('active')
|
||||||
|
|
||||||
|
if (transition) {
|
||||||
|
element[0].offsetWidth // reflow for transition
|
||||||
|
element.addClass('in')
|
||||||
|
} else {
|
||||||
|
element.removeClass('fade')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element.parent('.dropdown-menu')) {
|
||||||
|
element.closest('li.dropdown').addClass('active')
|
||||||
|
}
|
||||||
|
|
||||||
|
callback && callback()
|
||||||
|
}
|
||||||
|
|
||||||
|
transition ?
|
||||||
|
$active
|
||||||
|
.one($.support.transition.end, next)
|
||||||
|
.emulateTransitionEnd(150) :
|
||||||
|
next()
|
||||||
|
|
||||||
|
$active.removeClass('in')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TAB PLUGIN DEFINITION
|
||||||
|
// =====================
|
||||||
|
|
||||||
|
var old = $.fn.tab
|
||||||
|
|
||||||
|
$.fn.tab = function ( option ) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.tab')
|
||||||
|
|
||||||
|
if (!data) $this.data('bs.tab', (data = new Tab(this)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.tab.Constructor = Tab
|
||||||
|
|
||||||
|
|
||||||
|
// TAB NO CONFLICT
|
||||||
|
// ===============
|
||||||
|
|
||||||
|
$.fn.tab.noConflict = function () {
|
||||||
|
$.fn.tab = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TAB DATA-API
|
||||||
|
// ============
|
||||||
|
|
||||||
|
$(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
|
||||||
|
e.preventDefault()
|
||||||
|
$(this).tab('show')
|
||||||
|
})
|
||||||
|
|
||||||
|
}(jQuery);
|
399
app/assets/javascripts/bootstrap/tooltip.js
Normal file
399
app/assets/javascripts/bootstrap/tooltip.js
Normal file
@ -0,0 +1,399 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: tooltip.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#tooltip
|
||||||
|
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// TOOLTIP PUBLIC CLASS DEFINITION
|
||||||
|
// ===============================
|
||||||
|
|
||||||
|
var Tooltip = function (element, options) {
|
||||||
|
this.type =
|
||||||
|
this.options =
|
||||||
|
this.enabled =
|
||||||
|
this.timeout =
|
||||||
|
this.hoverState =
|
||||||
|
this.$element = null
|
||||||
|
|
||||||
|
this.init('tooltip', element, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.DEFAULTS = {
|
||||||
|
animation: true,
|
||||||
|
placement: 'top',
|
||||||
|
selector: false,
|
||||||
|
template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
||||||
|
trigger: 'hover focus',
|
||||||
|
title: '',
|
||||||
|
delay: 0,
|
||||||
|
html: false,
|
||||||
|
container: false
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.init = function (type, element, options) {
|
||||||
|
this.enabled = true
|
||||||
|
this.type = type
|
||||||
|
this.$element = $(element)
|
||||||
|
this.options = this.getOptions(options)
|
||||||
|
|
||||||
|
var triggers = this.options.trigger.split(' ')
|
||||||
|
|
||||||
|
for (var i = triggers.length; i--;) {
|
||||||
|
var trigger = triggers[i]
|
||||||
|
|
||||||
|
if (trigger == 'click') {
|
||||||
|
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
|
||||||
|
} else if (trigger != 'manual') {
|
||||||
|
var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
|
||||||
|
var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
|
||||||
|
|
||||||
|
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
|
||||||
|
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.options.selector ?
|
||||||
|
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
||||||
|
this.fixTitle()
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getDefaults = function () {
|
||||||
|
return Tooltip.DEFAULTS
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getOptions = function (options) {
|
||||||
|
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
|
||||||
|
|
||||||
|
if (options.delay && typeof options.delay == 'number') {
|
||||||
|
options.delay = {
|
||||||
|
show: options.delay,
|
||||||
|
hide: options.delay
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return options
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getDelegateOptions = function () {
|
||||||
|
var options = {}
|
||||||
|
var defaults = this.getDefaults()
|
||||||
|
|
||||||
|
this._options && $.each(this._options, function (key, value) {
|
||||||
|
if (defaults[key] != value) options[key] = value
|
||||||
|
})
|
||||||
|
|
||||||
|
return options
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.enter = function (obj) {
|
||||||
|
var self = obj instanceof this.constructor ?
|
||||||
|
obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
|
||||||
|
|
||||||
|
clearTimeout(self.timeout)
|
||||||
|
|
||||||
|
self.hoverState = 'in'
|
||||||
|
|
||||||
|
if (!self.options.delay || !self.options.delay.show) return self.show()
|
||||||
|
|
||||||
|
self.timeout = setTimeout(function () {
|
||||||
|
if (self.hoverState == 'in') self.show()
|
||||||
|
}, self.options.delay.show)
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.leave = function (obj) {
|
||||||
|
var self = obj instanceof this.constructor ?
|
||||||
|
obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
|
||||||
|
|
||||||
|
clearTimeout(self.timeout)
|
||||||
|
|
||||||
|
self.hoverState = 'out'
|
||||||
|
|
||||||
|
if (!self.options.delay || !self.options.delay.hide) return self.hide()
|
||||||
|
|
||||||
|
self.timeout = setTimeout(function () {
|
||||||
|
if (self.hoverState == 'out') self.hide()
|
||||||
|
}, self.options.delay.hide)
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.show = function () {
|
||||||
|
var e = $.Event('show.bs.' + this.type)
|
||||||
|
|
||||||
|
if (this.hasContent() && this.enabled) {
|
||||||
|
this.$element.trigger(e)
|
||||||
|
|
||||||
|
if (e.isDefaultPrevented()) return
|
||||||
|
var that = this;
|
||||||
|
|
||||||
|
var $tip = this.tip()
|
||||||
|
|
||||||
|
this.setContent()
|
||||||
|
|
||||||
|
if (this.options.animation) $tip.addClass('fade')
|
||||||
|
|
||||||
|
var placement = typeof this.options.placement == 'function' ?
|
||||||
|
this.options.placement.call(this, $tip[0], this.$element[0]) :
|
||||||
|
this.options.placement
|
||||||
|
|
||||||
|
var autoToken = /\s?auto?\s?/i
|
||||||
|
var autoPlace = autoToken.test(placement)
|
||||||
|
if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
|
||||||
|
|
||||||
|
$tip
|
||||||
|
.detach()
|
||||||
|
.css({ top: 0, left: 0, display: 'block' })
|
||||||
|
.addClass(placement)
|
||||||
|
|
||||||
|
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
||||||
|
|
||||||
|
var pos = this.getPosition()
|
||||||
|
var actualWidth = $tip[0].offsetWidth
|
||||||
|
var actualHeight = $tip[0].offsetHeight
|
||||||
|
|
||||||
|
if (autoPlace) {
|
||||||
|
var $parent = this.$element.parent()
|
||||||
|
|
||||||
|
var orgPlacement = placement
|
||||||
|
var docScroll = document.documentElement.scrollTop || document.body.scrollTop
|
||||||
|
var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
|
||||||
|
var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
|
||||||
|
var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
|
||||||
|
|
||||||
|
placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
|
||||||
|
placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
|
||||||
|
placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
|
||||||
|
placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
|
||||||
|
placement
|
||||||
|
|
||||||
|
$tip
|
||||||
|
.removeClass(orgPlacement)
|
||||||
|
.addClass(placement)
|
||||||
|
}
|
||||||
|
|
||||||
|
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
|
||||||
|
|
||||||
|
this.applyPlacement(calculatedOffset, placement)
|
||||||
|
this.hoverState = null
|
||||||
|
|
||||||
|
var complete = function() {
|
||||||
|
that.$element.trigger('shown.bs.' + that.type)
|
||||||
|
}
|
||||||
|
|
||||||
|
$.support.transition && this.$tip.hasClass('fade') ?
|
||||||
|
$tip
|
||||||
|
.one($.support.transition.end, complete)
|
||||||
|
.emulateTransitionEnd(150) :
|
||||||
|
complete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.applyPlacement = function (offset, placement) {
|
||||||
|
var replace
|
||||||
|
var $tip = this.tip()
|
||||||
|
var width = $tip[0].offsetWidth
|
||||||
|
var height = $tip[0].offsetHeight
|
||||||
|
|
||||||
|
// manually read margins because getBoundingClientRect includes difference
|
||||||
|
var marginTop = parseInt($tip.css('margin-top'), 10)
|
||||||
|
var marginLeft = parseInt($tip.css('margin-left'), 10)
|
||||||
|
|
||||||
|
// we must check for NaN for ie 8/9
|
||||||
|
if (isNaN(marginTop)) marginTop = 0
|
||||||
|
if (isNaN(marginLeft)) marginLeft = 0
|
||||||
|
|
||||||
|
offset.top = offset.top + marginTop
|
||||||
|
offset.left = offset.left + marginLeft
|
||||||
|
|
||||||
|
// $.fn.offset doesn't round pixel values
|
||||||
|
// so we use setOffset directly with our own function B-0
|
||||||
|
$.offset.setOffset($tip[0], $.extend({
|
||||||
|
using: function (props) {
|
||||||
|
$tip.css({
|
||||||
|
top: Math.round(props.top),
|
||||||
|
left: Math.round(props.left)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, offset), 0)
|
||||||
|
|
||||||
|
$tip.addClass('in')
|
||||||
|
|
||||||
|
// check to see if placing tip in new offset caused the tip to resize itself
|
||||||
|
var actualWidth = $tip[0].offsetWidth
|
||||||
|
var actualHeight = $tip[0].offsetHeight
|
||||||
|
|
||||||
|
if (placement == 'top' && actualHeight != height) {
|
||||||
|
replace = true
|
||||||
|
offset.top = offset.top + height - actualHeight
|
||||||
|
}
|
||||||
|
|
||||||
|
if (/bottom|top/.test(placement)) {
|
||||||
|
var delta = 0
|
||||||
|
|
||||||
|
if (offset.left < 0) {
|
||||||
|
delta = offset.left * -2
|
||||||
|
offset.left = 0
|
||||||
|
|
||||||
|
$tip.offset(offset)
|
||||||
|
|
||||||
|
actualWidth = $tip[0].offsetWidth
|
||||||
|
actualHeight = $tip[0].offsetHeight
|
||||||
|
}
|
||||||
|
|
||||||
|
this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
|
||||||
|
} else {
|
||||||
|
this.replaceArrow(actualHeight - height, actualHeight, 'top')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (replace) $tip.offset(offset)
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
|
||||||
|
this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.setContent = function () {
|
||||||
|
var $tip = this.tip()
|
||||||
|
var title = this.getTitle()
|
||||||
|
|
||||||
|
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
|
||||||
|
$tip.removeClass('fade in top bottom left right')
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.hide = function () {
|
||||||
|
var that = this
|
||||||
|
var $tip = this.tip()
|
||||||
|
var e = $.Event('hide.bs.' + this.type)
|
||||||
|
|
||||||
|
function complete() {
|
||||||
|
if (that.hoverState != 'in') $tip.detach()
|
||||||
|
that.$element.trigger('hidden.bs.' + that.type)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$element.trigger(e)
|
||||||
|
|
||||||
|
if (e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
$tip.removeClass('in')
|
||||||
|
|
||||||
|
$.support.transition && this.$tip.hasClass('fade') ?
|
||||||
|
$tip
|
||||||
|
.one($.support.transition.end, complete)
|
||||||
|
.emulateTransitionEnd(150) :
|
||||||
|
complete()
|
||||||
|
|
||||||
|
this.hoverState = null
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.fixTitle = function () {
|
||||||
|
var $e = this.$element
|
||||||
|
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
|
||||||
|
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.hasContent = function () {
|
||||||
|
return this.getTitle()
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getPosition = function () {
|
||||||
|
var el = this.$element[0]
|
||||||
|
return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
|
||||||
|
width: el.offsetWidth,
|
||||||
|
height: el.offsetHeight
|
||||||
|
}, this.$element.offset())
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
||||||
|
return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
||||||
|
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
||||||
|
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
|
||||||
|
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getTitle = function () {
|
||||||
|
var title
|
||||||
|
var $e = this.$element
|
||||||
|
var o = this.options
|
||||||
|
|
||||||
|
title = $e.attr('data-original-title')
|
||||||
|
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
||||||
|
|
||||||
|
return title
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.tip = function () {
|
||||||
|
return this.$tip = this.$tip || $(this.options.template)
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.arrow = function () {
|
||||||
|
return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.validate = function () {
|
||||||
|
if (!this.$element[0].parentNode) {
|
||||||
|
this.hide()
|
||||||
|
this.$element = null
|
||||||
|
this.options = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.enable = function () {
|
||||||
|
this.enabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.disable = function () {
|
||||||
|
this.enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.toggleEnabled = function () {
|
||||||
|
this.enabled = !this.enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.toggle = function (e) {
|
||||||
|
var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
|
||||||
|
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.destroy = function () {
|
||||||
|
clearTimeout(this.timeout)
|
||||||
|
this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TOOLTIP PLUGIN DEFINITION
|
||||||
|
// =========================
|
||||||
|
|
||||||
|
var old = $.fn.tooltip
|
||||||
|
|
||||||
|
$.fn.tooltip = function (option) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
var data = $this.data('bs.tooltip')
|
||||||
|
var options = typeof option == 'object' && option
|
||||||
|
|
||||||
|
if (!data && option == 'destroy') return
|
||||||
|
if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.tooltip.Constructor = Tooltip
|
||||||
|
|
||||||
|
|
||||||
|
// TOOLTIP NO CONFLICT
|
||||||
|
// ===================
|
||||||
|
|
||||||
|
$.fn.tooltip.noConflict = function () {
|
||||||
|
$.fn.tooltip = old
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
}(jQuery);
|
48
app/assets/javascripts/bootstrap/transition.js
Normal file
48
app/assets/javascripts/bootstrap/transition.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* Bootstrap: transition.js v3.1.1
|
||||||
|
* http://getbootstrap.com/javascript/#transitions
|
||||||
|
* ========================================================================
|
||||||
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
+function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
function transitionEnd() {
|
||||||
|
var el = document.createElement('bootstrap')
|
||||||
|
|
||||||
|
var transEndEventNames = {
|
||||||
|
'WebkitTransition' : 'webkitTransitionEnd',
|
||||||
|
'MozTransition' : 'transitionend',
|
||||||
|
'OTransition' : 'oTransitionEnd otransitionend',
|
||||||
|
'transition' : 'transitionend'
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var name in transEndEventNames) {
|
||||||
|
if (el.style[name] !== undefined) {
|
||||||
|
return { end: transEndEventNames[name] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false // explicit for ie8 ( ._.)
|
||||||
|
}
|
||||||
|
|
||||||
|
// http://blog.alexmaccaw.com/css-transitions
|
||||||
|
$.fn.emulateTransitionEnd = function (duration) {
|
||||||
|
var called = false, $el = this
|
||||||
|
$(this).one($.support.transition.end, function () { called = true })
|
||||||
|
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
||||||
|
setTimeout(callback, duration)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
$.support.transition = transitionEnd()
|
||||||
|
})
|
||||||
|
|
||||||
|
}(jQuery);
|
@ -1,5 +1,18 @@
|
|||||||
#= require jquery
|
#= require jquery
|
||||||
#= require twitter/bootstrap
|
#= require shared/jquery-ui
|
||||||
|
#= require bootstrap
|
||||||
|
|
||||||
#= require ./shared/jquery.backstretch.js
|
#= require ./shared/jquery.backstretch.js
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
resize = () ->
|
||||||
|
|
||||||
|
$(".content").css("margin-top", ($(window).height() - $(".content").outerHeight(false))/ 2)
|
||||||
|
|
||||||
|
|
||||||
|
$ ->
|
||||||
|
resize()
|
||||||
|
$(window).bind "resize", ->
|
||||||
|
resize()
|
||||||
|
|
17
app/assets/javascripts/event_form.coffee
Normal file
17
app/assets/javascripts/event_form.coffee
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
|
||||||
|
@update_event_form = ->
|
||||||
|
if $("#event_stop_date").is(":checked")
|
||||||
|
$(".stop_at").show()
|
||||||
|
else
|
||||||
|
$(".stop_at").hide()
|
||||||
|
if $("#event_entire_day").is(":checked")
|
||||||
|
$(".event_time").hide()
|
||||||
|
$(".event_time_input").attr "value", ""
|
||||||
|
else
|
||||||
|
$(".event_time").show()
|
||||||
|
|
||||||
|
$ ->
|
||||||
|
|
||||||
|
$(document).on 'change', ".event_date_form input:checkbox", ->
|
||||||
|
update_event_form()
|
191
app/assets/javascripts/image_files.js
Normal file
191
app/assets/javascripts/image_files.js
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
var slider_value = 160;
|
||||||
|
|
||||||
|
function image_files_load()
|
||||||
|
{
|
||||||
|
|
||||||
|
update_multiple_selection_text();
|
||||||
|
|
||||||
|
set_image_files_img_size();
|
||||||
|
|
||||||
|
initialize_slider();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_image_files_img_size(){
|
||||||
|
$('.image_file .img').css('width',slider_value+"px");
|
||||||
|
$('.image_file .img').css('height',slider_value+"px");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_multiple_selection_text()
|
||||||
|
{
|
||||||
|
|
||||||
|
var multiple_ids = multiple_selection_ids()
|
||||||
|
var text = ""
|
||||||
|
if (multiple_ids.length == 0)
|
||||||
|
{
|
||||||
|
text = "Aucune image séléctionnée";
|
||||||
|
}
|
||||||
|
else if(multiple_ids.length == 1)
|
||||||
|
{
|
||||||
|
text= "Une image séléctionnée";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text= multiple_ids.length+" images séléctionnées";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$('#multiple_selection_text').html(text);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function multiple_selection_ids()
|
||||||
|
{
|
||||||
|
var multiple_selection_ids = []
|
||||||
|
|
||||||
|
$('#image_files .active').each(function ()
|
||||||
|
{
|
||||||
|
multiple_selection_ids.push($(this).attr("data_id"))
|
||||||
|
});
|
||||||
|
|
||||||
|
return multiple_selection_ids
|
||||||
|
}
|
||||||
|
|
||||||
|
function close_image_file_container(image_file_id)
|
||||||
|
{
|
||||||
|
$('#image_file_container').removeClass("image_file_container_active");
|
||||||
|
$('#image_files_container').css("overflow", "");
|
||||||
|
$('#right_bar').show();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function delete_multiple_images(){
|
||||||
|
if(confirm("Voulez-vous vraiment supprimer ces images ?"))
|
||||||
|
{
|
||||||
|
|
||||||
|
var multiple_ids = multiple_selection_ids();
|
||||||
|
$.each(multiple_ids, function(index, value)
|
||||||
|
{
|
||||||
|
$.ajax({
|
||||||
|
url:"/admin/image_files/"+value+".js",
|
||||||
|
type : "DELETE",
|
||||||
|
success : function (){
|
||||||
|
update_multiple_selection_text();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function select_all_image(){
|
||||||
|
$('#image_files .image_file').each(function (){
|
||||||
|
|
||||||
|
|
||||||
|
$(this).addClass("active");
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
update_multiple_selection_text();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function unselect_all_image(){
|
||||||
|
|
||||||
|
$('#image_files .image_file').each(function (){
|
||||||
|
|
||||||
|
|
||||||
|
$(this).removeClass("active");
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
update_multiple_selection_text();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function initialize_slider(){
|
||||||
|
|
||||||
|
$("#grid_slider").slider({
|
||||||
|
value: slider_value,
|
||||||
|
max: 250,
|
||||||
|
min: 80,
|
||||||
|
tooltip:"hide"
|
||||||
|
}).on("slide", function(ev)
|
||||||
|
{
|
||||||
|
slider_value = ev.value
|
||||||
|
set_image_files_img_size();
|
||||||
|
});
|
||||||
|
set_image_files_img_size();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).on("dblclick",".image_file", function (event){
|
||||||
|
|
||||||
|
|
||||||
|
$.ajax({url : $(this).attr('data_show_url'), success: function (){
|
||||||
|
$('#image_file_container').addClass("image_file_container_active");
|
||||||
|
$('#right_bar').hide();
|
||||||
|
|
||||||
|
}});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on("click","#image_files_container", function (e){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ($(e.target).parents(".image_file").length == 0){
|
||||||
|
unselect_all_image();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on("dblclick","#image_file_container .img", function (){
|
||||||
|
close_image_file_container();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on("click",".image_file", function (){
|
||||||
|
|
||||||
|
if ($(this).hasClass('active')){
|
||||||
|
$(this).removeClass('active');
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$(this).addClass('active');
|
||||||
|
}
|
||||||
|
update_multiple_selection_text();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function ($) {
|
||||||
|
|
||||||
|
$("#left_buttons").on("click", function() {
|
||||||
|
multiple_selection_ids();
|
||||||
|
})
|
||||||
|
|
||||||
|
$('#image_files_big_container #main_workspace_view #image_file_container .form input').on('keydown', function(){
|
||||||
|
$('#image_files_big_container #main_workspace_view #image_file_container .form .submit_tr').show();
|
||||||
|
})
|
||||||
|
$('#image_files_big_container #main_workspace_view #image_file_container .form textarea').on('keydown', function(){
|
||||||
|
$('#image_files_big_container #main_workspace_view #image_file_container .form .submit_tr').show();
|
||||||
|
})
|
||||||
|
|
||||||
|
initialize_slider();
|
||||||
|
|
||||||
|
image_files_load();
|
||||||
|
|
||||||
|
|
||||||
|
});
|
1343
app/assets/javascripts/jquery.bxslider.js
Normal file
1343
app/assets/javascripts/jquery.bxslider.js
Normal file
File diff suppressed because it is too large
Load Diff
205
app/assets/javascripts/jquery.easing.1.3.js
Executable file
205
app/assets/javascripts/jquery.easing.1.3.js
Executable file
@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
|
||||||
|
*
|
||||||
|
* Uses the built in easing capabilities added In jQuery 1.1
|
||||||
|
* to offer multiple easing options
|
||||||
|
*
|
||||||
|
* TERMS OF USE - jQuery Easing
|
||||||
|
*
|
||||||
|
* Open source under the BSD License.
|
||||||
|
*
|
||||||
|
* Copyright © 2008 George McGinley Smith
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// t: current time, b: begInnIng value, c: change In value, d: duration
|
||||||
|
jQuery.easing['jswing'] = jQuery.easing['swing'];
|
||||||
|
|
||||||
|
jQuery.extend( jQuery.easing,
|
||||||
|
{
|
||||||
|
def: 'easeOutQuad',
|
||||||
|
swing: function (x, t, b, c, d) {
|
||||||
|
//alert(jQuery.easing.default);
|
||||||
|
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
|
||||||
|
},
|
||||||
|
easeInQuad: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuad: function (x, t, b, c, d) {
|
||||||
|
return -c *(t/=d)*(t-2) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuad: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t + b;
|
||||||
|
return -c/2 * ((--t)*(t-2) - 1) + b;
|
||||||
|
},
|
||||||
|
easeInCubic: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutCubic: function (x, t, b, c, d) {
|
||||||
|
return c*((t=t/d-1)*t*t + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutCubic: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t + b;
|
||||||
|
return c/2*((t-=2)*t*t + 2) + b;
|
||||||
|
},
|
||||||
|
easeInQuart: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuart: function (x, t, b, c, d) {
|
||||||
|
return -c * ((t=t/d-1)*t*t*t - 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuart: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
|
||||||
|
return -c/2 * ((t-=2)*t*t*t - 2) + b;
|
||||||
|
},
|
||||||
|
easeInQuint: function (x, t, b, c, d) {
|
||||||
|
return c*(t/=d)*t*t*t*t + b;
|
||||||
|
},
|
||||||
|
easeOutQuint: function (x, t, b, c, d) {
|
||||||
|
return c*((t=t/d-1)*t*t*t*t + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutQuint: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
|
||||||
|
return c/2*((t-=2)*t*t*t*t + 2) + b;
|
||||||
|
},
|
||||||
|
easeInSine: function (x, t, b, c, d) {
|
||||||
|
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
|
||||||
|
},
|
||||||
|
easeOutSine: function (x, t, b, c, d) {
|
||||||
|
return c * Math.sin(t/d * (Math.PI/2)) + b;
|
||||||
|
},
|
||||||
|
easeInOutSine: function (x, t, b, c, d) {
|
||||||
|
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
|
||||||
|
},
|
||||||
|
easeInExpo: function (x, t, b, c, d) {
|
||||||
|
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
|
||||||
|
},
|
||||||
|
easeOutExpo: function (x, t, b, c, d) {
|
||||||
|
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutExpo: function (x, t, b, c, d) {
|
||||||
|
if (t==0) return b;
|
||||||
|
if (t==d) return b+c;
|
||||||
|
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
|
||||||
|
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
|
||||||
|
},
|
||||||
|
easeInCirc: function (x, t, b, c, d) {
|
||||||
|
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
|
||||||
|
},
|
||||||
|
easeOutCirc: function (x, t, b, c, d) {
|
||||||
|
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
|
||||||
|
},
|
||||||
|
easeInOutCirc: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
|
||||||
|
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||||
|
},
|
||||||
|
easeOutElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
|
||||||
|
},
|
||||||
|
easeInOutElastic: function (x, t, b, c, d) {
|
||||||
|
var s=1.70158;var p=0;var a=c;
|
||||||
|
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
|
||||||
|
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||||
|
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||||
|
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||||
|
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
|
||||||
|
},
|
||||||
|
easeInBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
return c*(t/=d)*t*((s+1)*t - s) + b;
|
||||||
|
},
|
||||||
|
easeOutBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
|
||||||
|
},
|
||||||
|
easeInOutBack: function (x, t, b, c, d, s) {
|
||||||
|
if (s == undefined) s = 1.70158;
|
||||||
|
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
|
||||||
|
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
|
||||||
|
},
|
||||||
|
easeInBounce: function (x, t, b, c, d) {
|
||||||
|
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
|
||||||
|
},
|
||||||
|
easeOutBounce: function (x, t, b, c, d) {
|
||||||
|
if ((t/=d) < (1/2.75)) {
|
||||||
|
return c*(7.5625*t*t) + b;
|
||||||
|
} else if (t < (2/2.75)) {
|
||||||
|
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
|
||||||
|
} else if (t < (2.5/2.75)) {
|
||||||
|
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
|
||||||
|
} else {
|
||||||
|
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
easeInOutBounce: function (x, t, b, c, d) {
|
||||||
|
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
|
||||||
|
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* TERMS OF USE - EASING EQUATIONS
|
||||||
|
*
|
||||||
|
* Open source under the BSD License.
|
||||||
|
*
|
||||||
|
* Copyright © 2001 Robert Penner
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
174
app/assets/javascripts/manager.js
Normal file
174
app/assets/javascripts/manager.js
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
var manager_response = "";
|
||||||
|
var manager_callback_function = null;
|
||||||
|
|
||||||
|
function manager_load() {
|
||||||
|
|
||||||
|
|
||||||
|
$(document).bind("keydown",function(e) {
|
||||||
|
if (e.keyCode == 27) {
|
||||||
|
manager_hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function manager_show(url){
|
||||||
|
|
||||||
|
initialize_manager();
|
||||||
|
|
||||||
|
manager_response = null;
|
||||||
|
$('#manager_box').html("");
|
||||||
|
|
||||||
|
$("#manager_box_place").show("fast", function (){
|
||||||
|
$("#manager_box_place").addClass("manager_box_place_active");
|
||||||
|
$('#manager_box').load(url, function (){
|
||||||
|
image_files_load();
|
||||||
|
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function manager_hide(){
|
||||||
|
$("#manager_box_place").removeClass("manager_box_place_active");
|
||||||
|
|
||||||
|
$("body").css("overflow", "auto");
|
||||||
|
slider_enabled = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
$(document).ready(function ($) {
|
||||||
|
manager_load();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function manager_prompt(url, callback) {
|
||||||
|
manager_callback_function = callback;
|
||||||
|
manager_show(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
function manager_send_response(send_value){
|
||||||
|
|
||||||
|
manager_hide();
|
||||||
|
manager_callback_function(send_value);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function select_image_from_manager(input_id){
|
||||||
|
|
||||||
|
manager_prompt("/admin/image_files/?manager=true",function(m_return){
|
||||||
|
|
||||||
|
$('#input_'+input_id).val(m_return.image_file_id);
|
||||||
|
$('#img_'+input_id).attr("src",m_return.thumb);
|
||||||
|
$('#name_'+input_id).val(m_return.name);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function select_gallery_images_from_manager(gallery_content_id){
|
||||||
|
|
||||||
|
manager_prompt("/admin/image_files/?manager=true&multiple=true",function(m_return){
|
||||||
|
|
||||||
|
$.ajax({url:"/portlet/gallery_images/", type: "POST", data : { image_file_ids : m_return, gallery_content_id : gallery_content_id }});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function select_file_from_manager(input_id){
|
||||||
|
manager_prompt("/admin/data_files/?manager=true",function(m_return){
|
||||||
|
|
||||||
|
$('#input_'+input_id).val(m_return.data_file_id);
|
||||||
|
|
||||||
|
$('#name_'+input_id).html(m_return.name);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function manager_send_multiple_image_files(){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
manager_send_response(multiple_selection_ids());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function manager_send_image_file(image_file_id){
|
||||||
|
|
||||||
|
|
||||||
|
var image_file_div = $('#image_file_'+image_file_id);
|
||||||
|
|
||||||
|
manager_send_response({thumb : image_file_div.attr("data_thumb"), image_file_id : image_file_div.attr("data_id"), name : image_file_div.attr("data_name")});
|
||||||
|
}
|
||||||
|
|
||||||
|
function manager_send_cible(cible_id, cible_type, cible_name){
|
||||||
|
|
||||||
|
manager_send_response({cible_id : cible_id, cible_type : cible_type, cible_name : cible_name});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function manager_send_data_file(data_file_id){
|
||||||
|
|
||||||
|
|
||||||
|
var data_file_div = $('#data_file_'+data_file_id);
|
||||||
|
|
||||||
|
manager_send_response({data_file_id : data_file_div.data("id"), name : data_file_div.data("name")});
|
||||||
|
}
|
||||||
|
|
||||||
|
function select_cible_from_manager(input_id){
|
||||||
|
|
||||||
|
|
||||||
|
manager_prompt("/admin/cibles/?manager=true",function(m_return){
|
||||||
|
|
||||||
|
$('#input_id_'+input_id).val(m_return.cible_id);
|
||||||
|
$('#input_type_'+input_id).val(m_return.cible_type);
|
||||||
|
$('#name_'+input_id).val(m_return.cible_name);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function initialize_manager(){
|
||||||
|
|
||||||
|
if($('#manager_box_place').length == 0){
|
||||||
|
|
||||||
|
$('body').prepend('<div id="manager_box_place"><div id="manager_box"></div></div>');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
11
app/assets/javascripts/nested_fields.coffee
Normal file
11
app/assets/javascripts/nested_fields.coffee
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
@remove_fields = (link) ->
|
||||||
|
$(link).prev("input[type=hidden]").val "1"
|
||||||
|
$(link).closest(".field").hide()
|
||||||
|
false
|
||||||
|
@add_fields = (link, association, content) ->
|
||||||
|
new_id = new Date().getTime()
|
||||||
|
regexp = new RegExp("new_" + association, "g")
|
||||||
|
$(link).closest("p").next("." + association + "_form").prepend content.replace(regexp, new_id).replace(association + "_class", "new_field")
|
||||||
|
$(".new_field").removeClass "new_field"
|
||||||
|
false
|
55
app/assets/javascripts/pane_hover.js
Normal file
55
app/assets/javascripts/pane_hover.js
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
|
||||||
|
|
||||||
|
function show_pane_hover(content, width, height, zindex){
|
||||||
|
var width = width || 500;
|
||||||
|
var height = height || 500;
|
||||||
|
var zindex = zindex || 1000;
|
||||||
|
|
||||||
|
|
||||||
|
initialize_pane_hover();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$('#qi_pane_hover_content').html(content);
|
||||||
|
|
||||||
|
$('#qi_pane_hover_content').data("height",height);
|
||||||
|
$('#qi_pane_hover_content').css({"width" : width+"px","height" : height+"px","z-index" : zindex, "margin-top":"-"+height+"px"});
|
||||||
|
|
||||||
|
|
||||||
|
$('#qi_pane_hover_content .actions').prepend('<a href="#" class="btn btn-default" onclick="close_pane_hover();return false;">Annuler</a>');
|
||||||
|
$('#qi_pane_hover_content').css("display","block").delay(1).css({"-webkit-transition-duration":"0.5s","-moz-transition-duration":"0.5s", "margin-top":"0px"});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function close_pane_hover(){
|
||||||
|
|
||||||
|
$('#qi_pane_hover_content').css("display","block").delay(1).css({"-webkit-transition-duration":"0.5s","-moz-transition-duration":"0.5s", "margin-top":"-"+$('#qi_pane_hover_content').data("height")+"px"}).delay(500).queue(function() {
|
||||||
|
$('#qi_pane_hover').remove();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function initialize_pane_hover(){
|
||||||
|
if($('#qi_pane_hover').length == 0){
|
||||||
|
|
||||||
|
$('body').append('<div id="qi_pane_hover"><div id="qi_pane_hover_content"></div></div>');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,35 +1,316 @@
|
|||||||
|
|
||||||
#= require jquery
|
#= require jquery
|
||||||
|
|
||||||
#= require jquery_ujs
|
#= require jquery_ujs
|
||||||
|
#= require jquery.bxslider
|
||||||
#= require ./shared/jquery.easing.1.3
|
#= require jquery.easing.1.3
|
||||||
#= require ./shared/jquery.fancybox-1.3.4.pack
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$ ->
|
@scrollToAnchor = (aid) ->
|
||||||
|
aTag = $("#" + aid )
|
||||||
|
$("html,body").animate({scrollTop: aTag.offset().top}, 1000)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bottom = 0
|
||||||
|
prev_link = ""
|
||||||
|
|
||||||
|
|
||||||
|
$("document").ready ->
|
||||||
|
|
||||||
|
position_img_now = ->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# alert $("#large .large-img").outerHeight(false)
|
||||||
|
|
||||||
|
imgheight = $("#large .large-img").outerHeight(false) + $("#large h3").outerHeight(false)
|
||||||
|
|
||||||
|
|
||||||
|
margintop = (( $(window).height() - imgheight) / 2 )
|
||||||
|
|
||||||
|
$("#large .large-img").css
|
||||||
|
"margin-top" :(margintop+"px")
|
||||||
|
#"width" : "100px"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
position_img = ->
|
||||||
|
$("#large .large-img").one "load", ->
|
||||||
|
|
||||||
|
position_img_now()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$("#video").click ->
|
||||||
|
maxwidth = 1000
|
||||||
|
maxheight = 900
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
prev_link = $(this)
|
||||||
|
$("body").append "<div id='large'></div>"
|
||||||
|
title = false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$("#large").append "<div class='img_container first' style='width:90%;margin:auto;'></div>"
|
||||||
|
$("#large").append "<img src='/close.png' class='close_link' />"
|
||||||
|
$(".img_container.first").append '<iframe width="1000" height="563" src="//www.youtube.com/embed/ED4b38n4d-U?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>'
|
||||||
|
|
||||||
|
|
||||||
|
$(".img_container.first").append "<h3>Vidéo de présentation</h3>"
|
||||||
|
|
||||||
|
|
||||||
|
$("#large").fadeIn(500)
|
||||||
|
position_img();
|
||||||
|
if $(window).height() > (maxheight+100)
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-height" : maxheight
|
||||||
|
else
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-height" : "85%"
|
||||||
|
|
||||||
|
if $(window).width() > (maxwidth+100)
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-width" : maxwidth
|
||||||
|
else
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-width" : "85%"
|
||||||
|
resize();
|
||||||
|
|
||||||
|
$("#large .img_container.first").css
|
||||||
|
"padding-top": (($(window).height()- $("#large .img_container.first iframe").height()-50)/ 2)+"px"
|
||||||
|
#position_img();
|
||||||
|
|
||||||
|
|
||||||
|
false
|
||||||
|
|
||||||
|
|
||||||
|
$(".expandable_image").click ->
|
||||||
|
maxwidth = 1000
|
||||||
|
maxheight = 900
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
prev_link = $(this)
|
||||||
|
$("body").append "<div id='large'></div>"
|
||||||
|
title = false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$("#large").append "<div class='img_container first'></div>"
|
||||||
|
$("#large").append "<img src='/close.png' class='close_link' />"
|
||||||
|
$(".img_container.first").append "<img src="+$(this).attr("href")+" class='large-img' />"
|
||||||
|
|
||||||
|
if $(this).attr "title"
|
||||||
|
title = $(this).attr "title"
|
||||||
|
$(".img_container.first").append "<h3>"+title+"</h3>"
|
||||||
|
|
||||||
|
$("#large .large-img").one "load", ->
|
||||||
|
$("#large").fadeIn(500)
|
||||||
|
position_img();
|
||||||
|
if $(window).height() > (maxheight+100)
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-height" : maxheight
|
||||||
|
else
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-height" : "85%"
|
||||||
|
|
||||||
|
if $(window).width() > (maxwidth+100)
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-width" : maxwidth
|
||||||
|
else
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-width" : "85%"
|
||||||
|
|
||||||
|
position_img();
|
||||||
|
|
||||||
|
|
||||||
|
false
|
||||||
|
|
||||||
|
|
||||||
|
$(".rea-gal a").click ->
|
||||||
|
maxwidth = 1000
|
||||||
|
maxheight = 900
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
prev_link = $(this)
|
||||||
|
$("body").append "<div id='large'></div>"
|
||||||
|
title = false
|
||||||
|
|
||||||
|
|
||||||
|
$("#large").append "<img src='/arrow-next.png' class='next' />"
|
||||||
|
$("#large").append "<img src='/arrow-prev.png' class='prev' />"
|
||||||
|
$("#large").append "<img src='/close.png' class='close_link' />"
|
||||||
|
|
||||||
|
$("#large").append "<div class='img_container first'></div>"
|
||||||
|
$(".img_container.first").append "<img src="+$(this).attr("href")+" class='large-img' />"
|
||||||
|
|
||||||
|
if $(this).attr "title"
|
||||||
|
title = $(this).attr "title"
|
||||||
|
$(".img_container.first").append "<h3>"+title+"</h3>"
|
||||||
|
|
||||||
|
$("#large .large-img").one "load", ->
|
||||||
|
$("#large").fadeIn(500)
|
||||||
|
position_img();
|
||||||
|
if $(window).height() > (maxheight+100)
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-height" : maxheight
|
||||||
|
else
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-height" : "85%"
|
||||||
|
|
||||||
|
if $(window).width() > (maxwidth+100)
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-width" : maxwidth
|
||||||
|
else
|
||||||
|
$("#large .large-img").css
|
||||||
|
"max-width" : "85%"
|
||||||
|
|
||||||
|
position_img();
|
||||||
|
|
||||||
|
|
||||||
|
false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$("body").on "click", "#large", ->
|
||||||
|
$(this).fadeOut 300, ->
|
||||||
|
$(this).remove()
|
||||||
|
|
||||||
|
|
||||||
|
$("body").on "click" ,"#large .prev",->
|
||||||
|
|
||||||
|
if prev_link.prev("a").length > 0
|
||||||
|
link = prev_link.closest("a").prev("a")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
else
|
||||||
|
link = prev_link.closest("div").children("a:last")
|
||||||
|
|
||||||
|
|
||||||
|
#titre = photo.find("h3")
|
||||||
|
$(".img_container.first").fadeOut 300, ->
|
||||||
|
$("#large h3").remove()
|
||||||
|
if link.attr "title"
|
||||||
|
title = link.attr "title"
|
||||||
|
$(".img_container.first").append "<h3>"+title+"</h3>"
|
||||||
|
|
||||||
|
|
||||||
|
$('#large .large-img').attr("src", link.attr("href"))
|
||||||
|
$("#large .large-img").one "load", ->
|
||||||
|
$(".img_container.first").fadeIn()
|
||||||
|
position_img();
|
||||||
|
prev_link = link
|
||||||
|
|
||||||
|
false
|
||||||
|
|
||||||
|
|
||||||
|
$("body").on "click" ,"#large .next",->
|
||||||
|
|
||||||
|
if prev_link.next("a").length > 0
|
||||||
|
link = prev_link.closest("a").next("a")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
else
|
||||||
|
link = prev_link.closest("div").children("a:first")
|
||||||
|
|
||||||
|
|
||||||
|
#titre = photo.find("h3")
|
||||||
|
|
||||||
|
$(".img_container.first").fadeOut 300, ->
|
||||||
|
$("#large h3").remove()
|
||||||
|
if link.attr "title"
|
||||||
|
title = link.attr "title"
|
||||||
|
$(".img_container.first").append "<h3>"+title+"</h3>"
|
||||||
|
|
||||||
|
$('#large .large-img').attr("src", link.attr("href"))
|
||||||
|
$("#large .large-img").one "load", ->
|
||||||
|
$(".img_container.first").fadeIn()
|
||||||
|
position_img();
|
||||||
|
prev_link = link
|
||||||
|
|
||||||
|
false
|
||||||
|
|
||||||
|
|
||||||
|
$('.gal').bxSlider
|
||||||
|
adaptiveHeight: true,
|
||||||
|
auto: true,
|
||||||
|
speed:1000,
|
||||||
|
pause:5000,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
left =0
|
||||||
|
|
||||||
|
top = 0
|
||||||
|
offset= 0
|
||||||
|
|
||||||
|
resize = ->
|
||||||
|
|
||||||
|
$("iframe").each ->
|
||||||
|
$(this).css
|
||||||
|
"height" : Math.round($(this).width()/ 1.77)+"px"
|
||||||
|
|
||||||
|
if $(window).width() > 1250
|
||||||
|
$(".infos .main").css
|
||||||
|
"position" : "static"
|
||||||
|
$(".bottom_image").css
|
||||||
|
"left" : "0px"
|
||||||
|
|
||||||
|
else
|
||||||
|
$(".infos .main").css
|
||||||
|
"position" : "relative"
|
||||||
|
$(".bottom_image").css
|
||||||
|
"left" : "-120px"
|
||||||
|
|
||||||
|
$(".rea-gal").each ->
|
||||||
|
|
||||||
|
$(this).find("img").css "width", Math.floor(((100) )/ 5)+"%"
|
||||||
|
|
||||||
|
|
||||||
|
$("#large").css "min-height", ($(window).height()-30)+"px"
|
||||||
|
|
||||||
|
$(".bxslider").each ->
|
||||||
|
|
||||||
|
|
||||||
|
height = ($(window).height())
|
||||||
|
optimal_height = Math.round($(this).width()/ $(this).data("ratio"))
|
||||||
|
if optimal_height < height
|
||||||
|
height = optimal_height
|
||||||
|
|
||||||
|
$(this).find("li").css("max-height", height+"px")
|
||||||
|
|
||||||
|
|
||||||
|
position_img_now();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
resize()
|
||||||
|
$('.bxslider').bxSlider
|
||||||
|
mode: 'fade'
|
||||||
|
captions: true
|
||||||
|
auto: true
|
||||||
|
resize()
|
||||||
|
$(window).on "resize", ->
|
||||||
|
resize()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$("a[rel^='prettyPhoto']").fancybox()
|
|
||||||
|
|
||||||
$("#legals").click ->
|
|
||||||
|
|
||||||
$('#legals_large').toggle()
|
|
||||||
$('#legals_large .content').css("margin-top",( ($(window).height()-$("#legals_large .content").height())/2)+"px")
|
|
||||||
return false
|
|
||||||
|
|
||||||
$("#legals_large").click ->
|
|
||||||
|
|
||||||
$('#legals_large').toggle();
|
|
||||||
return false
|
|
||||||
|
|
||||||
|
|
||||||
$("#legals_large a").click ->
|
|
||||||
|
|
||||||
$('#legals_large').toggle();
|
|
||||||
return false
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
73
app/assets/javascripts/redactor_plugins/fontcolor.js
Executable file
73
app/assets/javascripts/redactor_plugins/fontcolor.js
Executable file
@ -0,0 +1,73 @@
|
|||||||
|
if (!RedactorPlugins) var RedactorPlugins = {};
|
||||||
|
|
||||||
|
RedactorPlugins.fontcolor = function()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
init: function()
|
||||||
|
{
|
||||||
|
var colors = [
|
||||||
|
'#ffffff', '#000000', '#eeece1', '#1f497d', '#4f81bd', '#c0504d', '#9bbb59', '#8064a2', '#4bacc6', '#f79646', '#ffff00',
|
||||||
|
'#f2f2f2', '#7f7f7f', '#ddd9c3', '#c6d9f0', '#dbe5f1', '#f2dcdb', '#ebf1dd', '#e5e0ec', '#dbeef3', '#fdeada', '#fff2ca',
|
||||||
|
'#d8d8d8', '#595959', '#c4bd97', '#8db3e2', '#b8cce4', '#e5b9b7', '#d7e3bc', '#ccc1d9', '#b7dde8', '#fbd5b5', '#ffe694',
|
||||||
|
'#bfbfbf', '#3f3f3f', '#938953', '#548dd4', '#95b3d7', '#d99694', '#c3d69b', '#b2a2c7', '#b7dde8', '#fac08f', '#f2c314',
|
||||||
|
'#a5a5a5', '#262626', '#494429', '#17365d', '#366092', '#953734', '#76923c', '#5f497a', '#92cddc', '#e36c09', '#c09100',
|
||||||
|
'#7f7f7f', '#0c0c0c', '#1d1b10', '#0f243e', '#244061', '#632423', '#4f6128', '#3f3151', '#31859b', '#974806', '#7f6000'
|
||||||
|
];
|
||||||
|
|
||||||
|
var buttons = ['fontcolor', 'backcolor'];
|
||||||
|
|
||||||
|
for (var i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
var name = buttons[i];
|
||||||
|
|
||||||
|
var button = this.button.add(name, this.lang.get(name));
|
||||||
|
var $dropdown = this.button.addDropdown(button);
|
||||||
|
|
||||||
|
$dropdown.width(242);
|
||||||
|
this.fontcolor.buildPicker($dropdown, name, colors);
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
buildPicker: function($dropdown, name, colors)
|
||||||
|
{
|
||||||
|
var rule = (name == 'backcolor') ? 'background-color' : 'color';
|
||||||
|
|
||||||
|
var len = colors.length;
|
||||||
|
var self = this;
|
||||||
|
var func = function(e)
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
self.fontcolor.set($(this).data('rule'), $(this).attr('rel'));
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var z = 0; z < len; z++)
|
||||||
|
{
|
||||||
|
var color = colors[z];
|
||||||
|
|
||||||
|
var $swatch = $('<a rel="' + color + '" data-rule="' + rule +'" href="#" style="float: left; font-size: 0; border: 2px solid #fff; padding: 0; margin: 0; width: 22px; height: 22px;"></a>');
|
||||||
|
$swatch.css('background-color', color);
|
||||||
|
$swatch.on('click', func);
|
||||||
|
|
||||||
|
$dropdown.append($swatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
var $elNone = $('<a href="#" style="display: block; clear: both; padding: 5px; font-size: 12px; line-height: 1;"></a>').html(this.lang.get('none'));
|
||||||
|
$elNone.on('click', $.proxy(function(e)
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
this.fontcolor.remove(rule);
|
||||||
|
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
$dropdown.append($elNone);
|
||||||
|
},
|
||||||
|
set: function(rule, type)
|
||||||
|
{
|
||||||
|
this.inline.format('span', 'style', rule + ': ' + type + ';');
|
||||||
|
},
|
||||||
|
remove: function(rule)
|
||||||
|
{
|
||||||
|
this.inline.removeStyleRule(rule);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
32
app/assets/javascripts/redactor_plugins/fontfamily.js
Executable file
32
app/assets/javascripts/redactor_plugins/fontfamily.js
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
if (!RedactorPlugins) var RedactorPlugins = {};
|
||||||
|
|
||||||
|
RedactorPlugins.fontfamily = function()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
init: function ()
|
||||||
|
{
|
||||||
|
var fonts = [ 'Lato', 'Stylograph','Arial', 'Helvetica', 'Georgia', 'Times New Roman', 'Monospace' ];
|
||||||
|
var that = this;
|
||||||
|
var dropdown = {};
|
||||||
|
|
||||||
|
$.each(fonts, function(i, s)
|
||||||
|
{
|
||||||
|
dropdown['s' + i] = { title: s, func: function() { that.fontfamily.set(s); }};
|
||||||
|
});
|
||||||
|
|
||||||
|
dropdown.remove = { title: 'Remove Font Family', func: that.fontfamily.reset };
|
||||||
|
|
||||||
|
var button = this.button.add('fontfamily', 'Change Font Family');
|
||||||
|
this.button.addDropdown(button, dropdown);
|
||||||
|
|
||||||
|
},
|
||||||
|
set: function (value)
|
||||||
|
{
|
||||||
|
this.inline.format('span', 'style', 'font-family:' + value + ';');
|
||||||
|
},
|
||||||
|
reset: function()
|
||||||
|
{
|
||||||
|
this.inline.removeStyleRule('font-family');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
75
app/assets/javascripts/redactor_plugins/fontsize.js
Executable file
75
app/assets/javascripts/redactor_plugins/fontsize.js
Executable file
@ -0,0 +1,75 @@
|
|||||||
|
if (!RedactorPlugins) var RedactorPlugins = {};
|
||||||
|
|
||||||
|
RedactorPlugins.fontsize = function()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
init: function()
|
||||||
|
{
|
||||||
|
var fonts = [10, 11, 12, 14, 16, 18, 20, 24, 28, 30];
|
||||||
|
var that = this;
|
||||||
|
var dropdown = {};
|
||||||
|
|
||||||
|
$.each(fonts, function(i, s)
|
||||||
|
{
|
||||||
|
dropdown['s' + i] = { title: s + 'px', func: function() { that.fontsize.set(s); } };
|
||||||
|
});
|
||||||
|
|
||||||
|
dropdown.remove = { title: 'Remove Font Size', func: that.fontsize.reset };
|
||||||
|
|
||||||
|
var button = this.button.add('fontsize', 'Change Font Size');
|
||||||
|
this.button.addDropdown(button, dropdown);
|
||||||
|
},
|
||||||
|
set: function(size)
|
||||||
|
{
|
||||||
|
this.inline.format('span', 'style', 'font-size: ' + size + 'px;');
|
||||||
|
},
|
||||||
|
reset: function()
|
||||||
|
{
|
||||||
|
this.inline.removeStyleRule('font-size');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!RedactorPlugins) var RedactorPlugins = {};
|
||||||
|
|
||||||
|
RedactorPlugins.scriptbuttons = function()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
init: function()
|
||||||
|
{
|
||||||
|
var sup = this.button.add('superscript', 'Superscript');
|
||||||
|
var sub = this.button.add('subscript', 'Subscript');
|
||||||
|
|
||||||
|
// make your added buttons as Font Awesome's icon
|
||||||
|
this.button.setAwesome('superscript', 'fa-superscript');
|
||||||
|
this.button.setAwesome('subscript', 'fa-subscript');
|
||||||
|
|
||||||
|
this.button.addCallback(sup, this.scriptbuttons.formatSup);
|
||||||
|
this.button.addCallback(sub, this.scriptbuttons.formatSub);
|
||||||
|
},
|
||||||
|
formatSup: function()
|
||||||
|
{
|
||||||
|
this.inline.format('sup');
|
||||||
|
},
|
||||||
|
formatSub: function()
|
||||||
|
{
|
||||||
|
this.inline.format('sub');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!RedactorPlugins) var RedactorPlugins = {};
|
||||||
|
|
||||||
|
RedactorPlugins.bufferbuttons = function()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
init: function()
|
||||||
|
{
|
||||||
|
var undo = this.button.addFirst('undo', 'Undo');
|
||||||
|
var redo = this.button.addAfter('undo', 'redo', 'Redo');
|
||||||
|
|
||||||
|
this.button.addCallback(undo, this.buffer.undo);
|
||||||
|
this.button.addCallback(redo, this.buffer.redo);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
388
app/assets/javascripts/vendor/bootstrap-slider.js
vendored
Executable file
388
app/assets/javascripts/vendor/bootstrap-slider.js
vendored
Executable file
@ -0,0 +1,388 @@
|
|||||||
|
/* =========================================================
|
||||||
|
* bootstrap-slider.js v2.0.0
|
||||||
|
* http://www.eyecon.ro/bootstrap-slider
|
||||||
|
* =========================================================
|
||||||
|
* Copyright 2012 Stefan Petre
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ========================================================= */
|
||||||
|
|
||||||
|
!function( $ ) {
|
||||||
|
|
||||||
|
var Slider = function(element, options) {
|
||||||
|
this.element = $(element);
|
||||||
|
this.picker = $('<div class="slider">'+
|
||||||
|
'<div class="slider-track">'+
|
||||||
|
'<div class="slider-selection"></div>'+
|
||||||
|
'<div class="slider-handle"></div>'+
|
||||||
|
'<div class="slider-handle"></div>'+
|
||||||
|
'</div>'+
|
||||||
|
'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'+
|
||||||
|
'</div>')
|
||||||
|
.insertBefore(this.element)
|
||||||
|
.append(this.element);
|
||||||
|
this.id = this.element.data('slider-id')||options.id;
|
||||||
|
if (this.id) {
|
||||||
|
this.picker[0].id = this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof Modernizr !== 'undefined' && Modernizr.touch) {
|
||||||
|
this.touchCapable = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tooltip = this.element.data('slider-tooltip')||options.tooltip;
|
||||||
|
|
||||||
|
this.tooltip = this.picker.find('.tooltip');
|
||||||
|
this.tooltipInner = this.tooltip.find('div.tooltip-inner');
|
||||||
|
|
||||||
|
this.orientation = this.element.data('slider-orientation')||options.orientation;
|
||||||
|
switch(this.orientation) {
|
||||||
|
case 'vertical':
|
||||||
|
this.picker.addClass('slider-vertical');
|
||||||
|
this.stylePos = 'top';
|
||||||
|
this.mousePos = 'pageY';
|
||||||
|
this.sizePos = 'offsetHeight';
|
||||||
|
this.tooltip.addClass('right')[0].style.left = '100%';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
this.picker
|
||||||
|
.addClass('slider-horizontal')
|
||||||
|
.css('width', this.element.outerWidth());
|
||||||
|
this.orientation = 'horizontal';
|
||||||
|
this.stylePos = 'left';
|
||||||
|
this.mousePos = 'pageX';
|
||||||
|
this.sizePos = 'offsetWidth';
|
||||||
|
this.tooltip.addClass('top')[0].style.top = -this.tooltip.outerHeight() - 14 + 'px';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.min = this.element.data('slider-min')||options.min;
|
||||||
|
this.max = this.element.data('slider-max')||options.max;
|
||||||
|
this.step = this.element.data('slider-step')||options.step;
|
||||||
|
this.value = this.element.data('slider-value')||options.value;
|
||||||
|
if (this.value[1]) {
|
||||||
|
this.range = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.selection = this.element.data('slider-selection')||options.selection;
|
||||||
|
this.selectionEl = this.picker.find('.slider-selection');
|
||||||
|
if (this.selection === 'none') {
|
||||||
|
this.selectionEl.addClass('hide');
|
||||||
|
}
|
||||||
|
this.selectionElStyle = this.selectionEl[0].style;
|
||||||
|
|
||||||
|
|
||||||
|
this.handle1 = this.picker.find('.slider-handle:first');
|
||||||
|
this.handle1Stype = this.handle1[0].style;
|
||||||
|
this.handle2 = this.picker.find('.slider-handle:last');
|
||||||
|
this.handle2Stype = this.handle2[0].style;
|
||||||
|
|
||||||
|
var handle = this.element.data('slider-handle')||options.handle;
|
||||||
|
switch(handle) {
|
||||||
|
case 'round':
|
||||||
|
this.handle1.addClass('round');
|
||||||
|
this.handle2.addClass('round');
|
||||||
|
break
|
||||||
|
case 'triangle':
|
||||||
|
this.handle1.addClass('triangle');
|
||||||
|
this.handle2.addClass('triangle');
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.range) {
|
||||||
|
this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0]));
|
||||||
|
this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1]));
|
||||||
|
} else {
|
||||||
|
this.value = [ Math.max(this.min, Math.min(this.max, this.value))];
|
||||||
|
this.handle2.addClass('hide');
|
||||||
|
if (this.selection == 'after') {
|
||||||
|
this.value[1] = this.max;
|
||||||
|
} else {
|
||||||
|
this.value[1] = this.min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.diff = this.max - this.min;
|
||||||
|
this.percentage = [
|
||||||
|
(this.value[0]-this.min)*100/this.diff,
|
||||||
|
(this.value[1]-this.min)*100/this.diff,
|
||||||
|
this.step*100/this.diff
|
||||||
|
];
|
||||||
|
|
||||||
|
this.offset = this.picker.offset();
|
||||||
|
this.size = this.picker[0][this.sizePos];
|
||||||
|
|
||||||
|
this.formater = options.formater;
|
||||||
|
|
||||||
|
this.layout();
|
||||||
|
|
||||||
|
if (this.touchCapable) {
|
||||||
|
// Touch: Bind touch events:
|
||||||
|
this.picker.on({
|
||||||
|
touchstart: $.proxy(this.mousedown, this)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.picker.on({
|
||||||
|
mousedown: $.proxy(this.mousedown, this)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tooltip === 'show') {
|
||||||
|
this.picker.on({
|
||||||
|
mouseenter: $.proxy(this.showTooltip, this),
|
||||||
|
mouseleave: $.proxy(this.hideTooltip, this)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.tooltip.addClass('hide');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Slider.prototype = {
|
||||||
|
constructor: Slider,
|
||||||
|
|
||||||
|
over: false,
|
||||||
|
inDrag: false,
|
||||||
|
|
||||||
|
showTooltip: function(){
|
||||||
|
this.tooltip.addClass('in');
|
||||||
|
//var left = Math.round(this.percent*this.width);
|
||||||
|
//this.tooltip.css('left', left - this.tooltip.outerWidth()/2);
|
||||||
|
this.over = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
hideTooltip: function(){
|
||||||
|
if (this.inDrag === false) {
|
||||||
|
this.tooltip.removeClass('in');
|
||||||
|
}
|
||||||
|
this.over = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
layout: function(){
|
||||||
|
this.handle1Stype[this.stylePos] = this.percentage[0]+'%';
|
||||||
|
this.handle2Stype[this.stylePos] = this.percentage[1]+'%';
|
||||||
|
if (this.orientation == 'vertical') {
|
||||||
|
this.selectionElStyle.top = Math.min(this.percentage[0], this.percentage[1]) +'%';
|
||||||
|
this.selectionElStyle.height = Math.abs(this.percentage[0] - this.percentage[1]) +'%';
|
||||||
|
} else {
|
||||||
|
this.selectionElStyle.left = Math.min(this.percentage[0], this.percentage[1]) +'%';
|
||||||
|
this.selectionElStyle.width = Math.abs(this.percentage[0] - this.percentage[1]) +'%';
|
||||||
|
}
|
||||||
|
if (this.range) {
|
||||||
|
this.tooltipInner.text(
|
||||||
|
this.formater(this.value[0]) +
|
||||||
|
' : ' +
|
||||||
|
this.formater(this.value[1])
|
||||||
|
);
|
||||||
|
this.tooltip[0].style[this.stylePos] = this.size * (this.percentage[0] + (this.percentage[1] - this.percentage[0])/2)/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px';
|
||||||
|
} else {
|
||||||
|
this.tooltipInner.text(
|
||||||
|
this.formater(this.value[0])
|
||||||
|
);
|
||||||
|
this.tooltip[0].style[this.stylePos] = this.size * this.percentage[0]/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mousedown: function(ev) {
|
||||||
|
|
||||||
|
// Touch: Get the original event:
|
||||||
|
if (this.touchCapable && ev.type === 'touchstart') {
|
||||||
|
ev = ev.originalEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.offset = this.picker.offset();
|
||||||
|
this.size = this.picker[0][this.sizePos];
|
||||||
|
|
||||||
|
var percentage = this.getPercentage(ev);
|
||||||
|
|
||||||
|
if (this.range) {
|
||||||
|
var diff1 = Math.abs(this.percentage[0] - percentage);
|
||||||
|
var diff2 = Math.abs(this.percentage[1] - percentage);
|
||||||
|
this.dragged = (diff1 < diff2) ? 0 : 1;
|
||||||
|
} else {
|
||||||
|
this.dragged = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.percentage[this.dragged] = percentage;
|
||||||
|
this.layout();
|
||||||
|
|
||||||
|
if (this.touchCapable) {
|
||||||
|
// Touch: Bind touch events:
|
||||||
|
$(document).on({
|
||||||
|
touchmove: $.proxy(this.mousemove, this),
|
||||||
|
touchend: $.proxy(this.mouseup, this)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$(document).on({
|
||||||
|
mousemove: $.proxy(this.mousemove, this),
|
||||||
|
mouseup: $.proxy(this.mouseup, this)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.inDrag = true;
|
||||||
|
var val = this.calculateValue();
|
||||||
|
this.element.trigger({
|
||||||
|
type: 'slideStart',
|
||||||
|
value: val
|
||||||
|
}).trigger({
|
||||||
|
type: 'slide',
|
||||||
|
value: val
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
mousemove: function(ev) {
|
||||||
|
|
||||||
|
// Touch: Get the original event:
|
||||||
|
if (this.touchCapable && ev.type === 'touchmove') {
|
||||||
|
ev = ev.originalEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
var percentage = this.getPercentage(ev);
|
||||||
|
if (this.range) {
|
||||||
|
if (this.dragged === 0 && this.percentage[1] < percentage) {
|
||||||
|
this.percentage[0] = this.percentage[1];
|
||||||
|
this.dragged = 1;
|
||||||
|
} else if (this.dragged === 1 && this.percentage[0] > percentage) {
|
||||||
|
this.percentage[1] = this.percentage[0];
|
||||||
|
this.dragged = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.percentage[this.dragged] = percentage;
|
||||||
|
this.layout();
|
||||||
|
var val = this.calculateValue();
|
||||||
|
this.element
|
||||||
|
.trigger({
|
||||||
|
type: 'slide',
|
||||||
|
value: val
|
||||||
|
})
|
||||||
|
.data('value', val)
|
||||||
|
.prop('value', val);
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
mouseup: function(ev) {
|
||||||
|
if (this.touchCapable) {
|
||||||
|
// Touch: Bind touch events:
|
||||||
|
$(document).off({
|
||||||
|
touchmove: this.mousemove,
|
||||||
|
touchend: this.mouseup
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$(document).off({
|
||||||
|
mousemove: this.mousemove,
|
||||||
|
mouseup: this.mouseup
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.inDrag = false;
|
||||||
|
if (this.over == false) {
|
||||||
|
this.hideTooltip();
|
||||||
|
}
|
||||||
|
this.element;
|
||||||
|
var val = this.calculateValue();
|
||||||
|
this.element
|
||||||
|
.trigger({
|
||||||
|
type: 'slideStop',
|
||||||
|
value: val
|
||||||
|
})
|
||||||
|
.data('value', val)
|
||||||
|
.prop('value', val);
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
calculateValue: function() {
|
||||||
|
var val;
|
||||||
|
if (this.range) {
|
||||||
|
val = [
|
||||||
|
(this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step),
|
||||||
|
(this.min + Math.round((this.diff * this.percentage[1]/100)/this.step)*this.step)
|
||||||
|
];
|
||||||
|
this.value = val;
|
||||||
|
} else {
|
||||||
|
val = (this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step);
|
||||||
|
this.value = [val, this.value[1]];
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
},
|
||||||
|
|
||||||
|
getPercentage: function(ev) {
|
||||||
|
if (this.touchCapable) {
|
||||||
|
ev = ev.touches[0];
|
||||||
|
}
|
||||||
|
var percentage = (ev[this.mousePos] - this.offset[this.stylePos])*100/this.size;
|
||||||
|
percentage = Math.round(percentage/this.percentage[2])*this.percentage[2];
|
||||||
|
return Math.max(0, Math.min(100, percentage));
|
||||||
|
},
|
||||||
|
|
||||||
|
getValue: function() {
|
||||||
|
if (this.range) {
|
||||||
|
return this.value;
|
||||||
|
}
|
||||||
|
return this.value[0];
|
||||||
|
},
|
||||||
|
|
||||||
|
setValue: function(val) {
|
||||||
|
this.value = val;
|
||||||
|
|
||||||
|
if (this.range) {
|
||||||
|
this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0]));
|
||||||
|
this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1]));
|
||||||
|
} else {
|
||||||
|
this.value = [ Math.max(this.min, Math.min(this.max, this.value))];
|
||||||
|
this.handle2.addClass('hide');
|
||||||
|
if (this.selection == 'after') {
|
||||||
|
this.value[1] = this.max;
|
||||||
|
} else {
|
||||||
|
this.value[1] = this.min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.diff = this.max - this.min;
|
||||||
|
this.percentage = [
|
||||||
|
(this.value[0]-this.min)*100/this.diff,
|
||||||
|
(this.value[1]-this.min)*100/this.diff,
|
||||||
|
this.step*100/this.diff
|
||||||
|
];
|
||||||
|
this.layout();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.slider = function ( option, val ) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this),
|
||||||
|
data = $this.data('slider'),
|
||||||
|
options = typeof option === 'object' && option;
|
||||||
|
if (!data) {
|
||||||
|
$this.data('slider', (data = new Slider(this, $.extend({}, $.fn.slider.defaults,options))));
|
||||||
|
}
|
||||||
|
if (typeof option == 'string') {
|
||||||
|
data[option](val);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.slider.defaults = {
|
||||||
|
min: 0,
|
||||||
|
max: 10,
|
||||||
|
step: 1,
|
||||||
|
orientation: 'horizontal',
|
||||||
|
value: 5,
|
||||||
|
selection: 'before',
|
||||||
|
tooltip: 'hide',
|
||||||
|
handle: 'round',
|
||||||
|
formater: function(value) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.slider.Constructor = Slider;
|
||||||
|
|
||||||
|
}( window.jQuery );
|
598
app/assets/javascripts/vendor/jquery-sortable.js
vendored
Normal file
598
app/assets/javascripts/vendor/jquery-sortable.js
vendored
Normal file
@ -0,0 +1,598 @@
|
|||||||
|
/* ===================================================
|
||||||
|
* jquery-sortable.js v0.9.9
|
||||||
|
* http://johnny.github.com/jquery-sortable/
|
||||||
|
* ===================================================
|
||||||
|
* Copyright (c) 2012 Jonas von Andrian
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * The name of the author may not be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ========================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
!function ( $, window, undefined){
|
||||||
|
var eventNames,
|
||||||
|
pluginName = 'sortable',
|
||||||
|
containerDefaults = {
|
||||||
|
// If true, items can be dragged from this container
|
||||||
|
drag: true,
|
||||||
|
// If true, items can be droped onto this container
|
||||||
|
drop: true,
|
||||||
|
// Exclude items from being draggable, if the
|
||||||
|
// selector matches the item
|
||||||
|
exclude: "",
|
||||||
|
// If true, search for nested containers within an item
|
||||||
|
nested: true,
|
||||||
|
// If true, the items are assumed to be arranged vertically
|
||||||
|
vertical: true
|
||||||
|
}, // end container defaults
|
||||||
|
groupDefaults = {
|
||||||
|
// This is executed after the placeholder has been moved.
|
||||||
|
afterMove: function ($placeholder, container) {
|
||||||
|
},
|
||||||
|
// The css selector of the containers
|
||||||
|
containerSelector: "ol, ul",
|
||||||
|
// Distance the mouse has to travel to start dragging
|
||||||
|
distance: 0,
|
||||||
|
// The css selector of the drag handle
|
||||||
|
handle: "",
|
||||||
|
// The css selector of the items
|
||||||
|
itemSelector: "li",
|
||||||
|
// Check if the dragged item may be inside the container.
|
||||||
|
// Use with care, since the search for a valid container entails a depth first search
|
||||||
|
// and may be quite expensive.
|
||||||
|
isValidTarget: function ($item, container) {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
// Executed before onDrop if placeholder is detached.
|
||||||
|
// This happens if pullPlaceholder is set to false and the drop occurs outside a container.
|
||||||
|
onCancel: function ($item, container, _super) {
|
||||||
|
},
|
||||||
|
// Executed at the beginning of a mouse move event.
|
||||||
|
// The Placeholder has not been moved yet
|
||||||
|
onDrag: function ($item, position, _super) {
|
||||||
|
$item.css(position)
|
||||||
|
},
|
||||||
|
// Called after the drag has been started,
|
||||||
|
// that is the mouse button is beeing held down and
|
||||||
|
// the mouse is moving.
|
||||||
|
// The container is the closest initialized container.
|
||||||
|
// Therefore it might not be the container, that actually contains the item.
|
||||||
|
onDragStart: function ($item, container, _super) {
|
||||||
|
$item.css({
|
||||||
|
height: $item.height(),
|
||||||
|
width: $item.width()
|
||||||
|
})
|
||||||
|
$item.addClass("dragged")
|
||||||
|
$("body").addClass("dragging")
|
||||||
|
},
|
||||||
|
// Called when the mouse button is beeing released
|
||||||
|
onDrop: function ($item, container, _super) {
|
||||||
|
$item.removeClass("dragged").removeAttr("style")
|
||||||
|
$("body").removeClass("dragging")
|
||||||
|
},
|
||||||
|
// Template for the placeholder. Can be any valid jQuery input
|
||||||
|
// e.g. a string, a DOM element
|
||||||
|
placeholder: '<li class="placeholder"/>',
|
||||||
|
// If true, the position of the placeholder is calculated on every mousemove.
|
||||||
|
// If false, it is only calculated when the mouse is above a container.
|
||||||
|
pullPlaceholder: true,
|
||||||
|
// Specifies serialization of the container group.
|
||||||
|
// The pair $parent/$children is either container/items or item/subcontainers
|
||||||
|
serialize: function ($parent, $children, parentIsContainer) {
|
||||||
|
var result = $.extend({}, $parent.data())
|
||||||
|
|
||||||
|
if($children[0])
|
||||||
|
result.children = $children
|
||||||
|
delete result.sortable
|
||||||
|
|
||||||
|
return result
|
||||||
|
},
|
||||||
|
// Set tolerance while dragging. Positive values will decrease sensitivity.
|
||||||
|
tolerance: 0
|
||||||
|
}, // end group defaults
|
||||||
|
containerGroups = {},
|
||||||
|
groupCounter = 0
|
||||||
|
|
||||||
|
if('ontouchstart' in window){
|
||||||
|
eventNames = {
|
||||||
|
start: "touchstart.sortable",
|
||||||
|
end: "touchend.sortable touchcancel.sortable",
|
||||||
|
move: "touchmove.sortable"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
eventNames = {
|
||||||
|
start: "mousedown.sortable",
|
||||||
|
end: "mouseup.sortable",
|
||||||
|
move: "mousemove.sortable"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* a is Array [left, right, top, bottom]
|
||||||
|
* b is array [left, top]
|
||||||
|
*/
|
||||||
|
function d(a,b) {
|
||||||
|
var x = Math.max(0, a[0] - b[0], b[0] - a[1]),
|
||||||
|
y = Math.max(0, a[2] - b[1], b[1] - a[3])
|
||||||
|
return x+y;
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove(array, from, to) {
|
||||||
|
var rest = array.slice((to || from) + 1 || array.length);
|
||||||
|
array.length = from < 0 ? array.length + from : from;
|
||||||
|
return array.push.apply(array, rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setDimensions(array, dimensions, useOffset) {
|
||||||
|
var i = array.length,
|
||||||
|
offsetMethod = useOffset ? "offset" : "position"
|
||||||
|
while(i--){
|
||||||
|
var el = array[i].el ? array[i].el : $(array[i]),
|
||||||
|
// use fitting method
|
||||||
|
pos = el[offsetMethod]()
|
||||||
|
dimensions[i] = [
|
||||||
|
pos.left,
|
||||||
|
pos.left + el.outerWidth(true),
|
||||||
|
pos.top,
|
||||||
|
pos.top + el.outerHeight(true)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRelativePosition(pointer, element) {
|
||||||
|
var offset = element.offset()
|
||||||
|
return {
|
||||||
|
left: pointer.left - offset.left,
|
||||||
|
top: pointer.top - offset.top
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortByDistanceDesc(dimensions, pointer, lastPointer) {
|
||||||
|
pointer = [pointer.left, pointer.top]
|
||||||
|
lastPointer = lastPointer && [lastPointer.left, lastPointer.top]
|
||||||
|
|
||||||
|
var dim,
|
||||||
|
i = dimensions.length,
|
||||||
|
distances = []
|
||||||
|
|
||||||
|
while(i--){
|
||||||
|
dim = dimensions[i]
|
||||||
|
distances[i] = [i,d(dim,pointer), lastPointer && d(dim, lastPointer)]
|
||||||
|
}
|
||||||
|
distances = distances.sort(function (a,b) {
|
||||||
|
return b[1] - a[1] || b[2] - a[2] || b[0] - a[0]
|
||||||
|
})
|
||||||
|
|
||||||
|
// last entry is the closest
|
||||||
|
return distances
|
||||||
|
}
|
||||||
|
|
||||||
|
function processChildContainers(item, containerSelector, method, ignoreChildren) {
|
||||||
|
var childContainers = item.find(containerSelector),
|
||||||
|
i = childContainers.length
|
||||||
|
|
||||||
|
while(i--){
|
||||||
|
var container = childContainers.eq(i).data(pluginName)
|
||||||
|
if(container)
|
||||||
|
container[method](ignoreChildren)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function ContainerGroup(options) {
|
||||||
|
this.options = $.extend({}, groupDefaults, options)
|
||||||
|
this.containers = []
|
||||||
|
this.childGroups = []
|
||||||
|
this.scrolledProxy = $.proxy(this.scrolled, this)
|
||||||
|
this.dragProxy = $.proxy(this.drag, this)
|
||||||
|
this.dropProxy = $.proxy(this.drop, this)
|
||||||
|
|
||||||
|
if(this.options.parentGroup)
|
||||||
|
this.options.parentGroup.childGroups.push(this)
|
||||||
|
else {
|
||||||
|
this.placeholder = $(this.options.placeholder)
|
||||||
|
if(!options.isValidTarget)
|
||||||
|
this.options.isValidTarget = undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ContainerGroup.get = function (options) {
|
||||||
|
if( !containerGroups[options.group]) {
|
||||||
|
if(!options.group)
|
||||||
|
options.group = groupCounter ++
|
||||||
|
containerGroups[options.group] = new ContainerGroup(options)
|
||||||
|
}
|
||||||
|
return containerGroups[options.group]
|
||||||
|
}
|
||||||
|
|
||||||
|
ContainerGroup.prototype = {
|
||||||
|
dragInit: function (e, itemContainer) {
|
||||||
|
this.$document = $(itemContainer.el[0].ownerDocument)
|
||||||
|
|
||||||
|
this.toggleListeners('on')
|
||||||
|
|
||||||
|
// get item to drag
|
||||||
|
this.item = $(e.target).closest(this.options.itemSelector)
|
||||||
|
this.itemContainer = itemContainer
|
||||||
|
|
||||||
|
this.setPointer(e)
|
||||||
|
},
|
||||||
|
drag: function (e) {
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
if(!this.dragging){
|
||||||
|
if(!this.distanceMet(e))
|
||||||
|
return
|
||||||
|
|
||||||
|
processChildContainers(this.item, this.options.containerSelector, "disable", true)
|
||||||
|
|
||||||
|
this.options.onDragStart(this.item, this.itemContainer, groupDefaults.onDragStart)
|
||||||
|
this.item.before(this.placeholder)
|
||||||
|
this.dragging = true
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setPointer(e)
|
||||||
|
// place item under the cursor
|
||||||
|
this.options.onDrag(this.item,
|
||||||
|
getRelativePosition(this.pointer, this.item.offsetParent()),
|
||||||
|
groupDefaults.onDrag)
|
||||||
|
|
||||||
|
var x = e.pageX,
|
||||||
|
y = e.pageY,
|
||||||
|
box = this.sameResultBox,
|
||||||
|
t = this.options.tolerance
|
||||||
|
|
||||||
|
if(!box || box.top - t > y || box.bottom + t < y || box.left - t > x || box.right + t < x)
|
||||||
|
if(!this.searchValidTarget())
|
||||||
|
this.placeholder.detach()
|
||||||
|
},
|
||||||
|
drop: function (e) {
|
||||||
|
e.preventDefault()
|
||||||
|
this.toggleListeners('off')
|
||||||
|
|
||||||
|
if(!this.dragging)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// processing Drop, check if placeholder is detached
|
||||||
|
if(this.placeholder.closest("html")[0])
|
||||||
|
this.placeholder.before(this.item).detach()
|
||||||
|
else
|
||||||
|
this.options.onCancel(this.item, this.itemContainer, groupDefaults.onCancel)
|
||||||
|
|
||||||
|
this.options.onDrop(this.item, this.getContainer(this.item), groupDefaults.onDrop)
|
||||||
|
processChildContainers(this.item, this.options.containerSelector, "enable", true)
|
||||||
|
|
||||||
|
// cleanup
|
||||||
|
this.clearDimensions()
|
||||||
|
this.clearOffsetParent()
|
||||||
|
this.lastAppendedItem = this.sameResultBox = undefined
|
||||||
|
this.dragging = false
|
||||||
|
},
|
||||||
|
searchValidTarget: function (pointer, lastPointer) {
|
||||||
|
if(!pointer){
|
||||||
|
pointer = this.relativePointer || this.pointer
|
||||||
|
lastPointer = this.lastRelativePointer || this.lastPointer
|
||||||
|
}
|
||||||
|
|
||||||
|
var distances = sortByDistanceDesc(this.getContainerDimensions(),
|
||||||
|
pointer,
|
||||||
|
lastPointer),
|
||||||
|
i = distances.length
|
||||||
|
|
||||||
|
while(i--){
|
||||||
|
var index = distances[i][0],
|
||||||
|
distance = distances[i][1]
|
||||||
|
|
||||||
|
if(!distance || this.options.pullPlaceholder){
|
||||||
|
var container = this.containers[index]
|
||||||
|
if(!this.$getOffsetParent()){
|
||||||
|
var offsetParent = container.getItemOffsetParent()
|
||||||
|
pointer = getRelativePosition(pointer, offsetParent)
|
||||||
|
lastPointer = getRelativePosition(lastPointer, offsetParent)
|
||||||
|
}
|
||||||
|
if(container.searchValidTarget(pointer, lastPointer))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
movePlaceholder: function (container, item, method, sameResultBox) {
|
||||||
|
var lastAppendedItem = this.lastAppendedItem
|
||||||
|
if(!sameResultBox && lastAppendedItem && lastAppendedItem[0] === item[0])
|
||||||
|
return;
|
||||||
|
|
||||||
|
item[method](this.placeholder)
|
||||||
|
this.lastAppendedItem = item
|
||||||
|
this.sameResultBox = sameResultBox
|
||||||
|
this.options.afterMove(this.placeholder, container)
|
||||||
|
},
|
||||||
|
getContainerDimensions: function () {
|
||||||
|
if(!this.containerDimensions)
|
||||||
|
setDimensions(this.containers, this.containerDimensions = [], !this.$getOffsetParent())
|
||||||
|
return this.containerDimensions
|
||||||
|
},
|
||||||
|
getContainer: function (element) {
|
||||||
|
return element.closest(this.options.containerSelector).data(pluginName)
|
||||||
|
},
|
||||||
|
$getOffsetParent: function () {
|
||||||
|
if(this.offsetParent === undefined){
|
||||||
|
var i = this.containers.length - 1,
|
||||||
|
offsetParent = this.containers[i].getItemOffsetParent()
|
||||||
|
|
||||||
|
if(!this.options.parentGroup){
|
||||||
|
while(i--){
|
||||||
|
if(offsetParent[0] != this.containers[i].getItemOffsetParent()[0]){
|
||||||
|
// If every container has the same offset parent,
|
||||||
|
// use position() which is relative to this parent,
|
||||||
|
// otherwise use offset()
|
||||||
|
// compare #setDimensions
|
||||||
|
offsetParent = false
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.offsetParent = offsetParent
|
||||||
|
}
|
||||||
|
return this.offsetParent
|
||||||
|
},
|
||||||
|
clearOffsetParent: function () {
|
||||||
|
this.offsetParent = undefined
|
||||||
|
},
|
||||||
|
setPointer: function (e) {
|
||||||
|
var pointer = {
|
||||||
|
left: e.pageX,
|
||||||
|
top: e.pageY
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.$getOffsetParent()){
|
||||||
|
var relativePointer = getRelativePosition(pointer, this.$getOffsetParent())
|
||||||
|
this.lastRelativePointer = this.relativePointer
|
||||||
|
this.relativePointer = relativePointer
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lastPointer = this.pointer
|
||||||
|
this.pointer = pointer
|
||||||
|
},
|
||||||
|
distanceMet: function (e) {
|
||||||
|
return (Math.max(
|
||||||
|
Math.abs(this.pointer.left - e.pageX),
|
||||||
|
Math.abs(this.pointer.top - e.pageY)
|
||||||
|
) >= this.options.distance)
|
||||||
|
},
|
||||||
|
addContainer: function (container) {
|
||||||
|
this.containers.push(container);
|
||||||
|
},
|
||||||
|
removeContainer: function (container) {
|
||||||
|
var i = this.containers.indexOf(container)
|
||||||
|
remove(this.containers, i);
|
||||||
|
},
|
||||||
|
scrolled: function (e) {
|
||||||
|
this.clearDimensions()
|
||||||
|
this.clearOffsetParent()
|
||||||
|
},
|
||||||
|
toggleListeners: function (method) {
|
||||||
|
this.$document[method](eventNames.move, this.dragProxy)
|
||||||
|
[method](eventNames.end, this.dropProxy)
|
||||||
|
[method]("scroll.sortable", this.scrolledProxy)
|
||||||
|
},
|
||||||
|
// Recursively clear container and item dimensions
|
||||||
|
clearDimensions: function () {
|
||||||
|
this.containerDimensions = undefined
|
||||||
|
var i = this.containers.length
|
||||||
|
while(i--){
|
||||||
|
this.containers[i].itemDimensions = undefined
|
||||||
|
}
|
||||||
|
i = this.childGroups.length
|
||||||
|
while(i--){
|
||||||
|
this.childGroups[i].clearDimensions()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Container(element, options) {
|
||||||
|
this.el = element
|
||||||
|
this.childGroups = []
|
||||||
|
this.floatRight = false
|
||||||
|
this.dragInitProxy = $.proxy(this.dragInit, this)
|
||||||
|
this.options = $.extend( {}, containerDefaults, options)
|
||||||
|
|
||||||
|
this.group = ContainerGroup.get(this.options)
|
||||||
|
this.rootGroup = this.options.rootGroup = this.options.rootGroup || this.group
|
||||||
|
this.parentGroup = this.options.parentGroup = this.options.parentGroup || this.group
|
||||||
|
this.handle = this.rootGroup.options.handle || this.rootGroup.options.itemSelector
|
||||||
|
|
||||||
|
this.enable(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
Container.prototype = {
|
||||||
|
dragInit: function (e) {
|
||||||
|
if(e.which !== 1 ||
|
||||||
|
!this.options.drag ||
|
||||||
|
$(e.target).is(this.options.exclude))
|
||||||
|
return;
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
|
||||||
|
this.rootGroup.dragInit(e, this)
|
||||||
|
},
|
||||||
|
searchValidTarget: function (pointer, lastPointer) {
|
||||||
|
var distances = sortByDistanceDesc(this.getItemDimensions(),
|
||||||
|
pointer,
|
||||||
|
lastPointer),
|
||||||
|
i = distances.length,
|
||||||
|
rootGroup = this.rootGroup,
|
||||||
|
validTarget = !rootGroup.options.isValidTarget ||
|
||||||
|
rootGroup.options.isValidTarget(rootGroup.item, this)
|
||||||
|
|
||||||
|
if(!i && validTarget){
|
||||||
|
rootGroup.movePlaceholder(this, this.el, "append")
|
||||||
|
return true
|
||||||
|
} else
|
||||||
|
while(i--){
|
||||||
|
var index = distances[i][0],
|
||||||
|
distance = distances[i][1]
|
||||||
|
if(!distance && this.options.nested && this.getContainerGroup(index)){
|
||||||
|
var found = this.getContainerGroup(index).searchValidTarget(pointer, lastPointer)
|
||||||
|
if(found)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
else if(validTarget && $(".dragged").has($(this.items[index])).length == 0){
|
||||||
|
this.movePlaceholder(index, pointer)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
movePlaceholder: function (index, pointer) {
|
||||||
|
var item = $(this.items[index]),
|
||||||
|
dim = this.itemDimensions[index],
|
||||||
|
method = "after",
|
||||||
|
width = item.outerWidth(),
|
||||||
|
height = item.outerHeight(),
|
||||||
|
offset = item.offset(),
|
||||||
|
sameResultBox = {
|
||||||
|
left: offset.left,
|
||||||
|
right: offset.left + width,
|
||||||
|
top: offset.top,
|
||||||
|
bottom: offset.top + height
|
||||||
|
}
|
||||||
|
if(this.options.vertical){
|
||||||
|
var yCenter = (dim[2] + dim[3]) / 2,
|
||||||
|
inUpperHalf = pointer.top <= yCenter
|
||||||
|
if(inUpperHalf){
|
||||||
|
method = "before"
|
||||||
|
sameResultBox.bottom -= height / 2
|
||||||
|
} else
|
||||||
|
sameResultBox.top += height / 2
|
||||||
|
} else {
|
||||||
|
var xCenter = (dim[0] + dim[1]) / 2,
|
||||||
|
inLeftHalf = pointer.left <= xCenter
|
||||||
|
if(inLeftHalf != this.floatRight){
|
||||||
|
method = "before"
|
||||||
|
sameResultBox.right -= width / 2
|
||||||
|
} else
|
||||||
|
sameResultBox.left += width / 2
|
||||||
|
}
|
||||||
|
this.rootGroup.movePlaceholder(this, item, method, sameResultBox)
|
||||||
|
},
|
||||||
|
getItemDimensions: function () {
|
||||||
|
if(!this.itemDimensions){
|
||||||
|
this.items = this.$getChildren(this.el, "item").filter(":not(.dragged)").get()
|
||||||
|
setDimensions(this.items, this.itemDimensions = [])
|
||||||
|
}
|
||||||
|
return this.itemDimensions
|
||||||
|
},
|
||||||
|
getItemOffsetParent: function () {
|
||||||
|
var offsetParent,
|
||||||
|
el = this.el
|
||||||
|
// Since el might be empty we have to check el itself and
|
||||||
|
// can not do something like el.children().first().offsetParent()
|
||||||
|
if(el.css("position") === "relative" || el.css("position") === "absolute" || el.css("position") === "fixed")
|
||||||
|
offsetParent = el
|
||||||
|
else
|
||||||
|
offsetParent = el.offsetParent()
|
||||||
|
return offsetParent
|
||||||
|
},
|
||||||
|
getContainerGroup: function (index) {
|
||||||
|
var childGroup = $.data(this.items[index], "subContainer")
|
||||||
|
if( childGroup === undefined){
|
||||||
|
var childContainers = this.$getChildren(this.items[index], "container")
|
||||||
|
childGroup = false
|
||||||
|
|
||||||
|
if(childContainers[0]){
|
||||||
|
var options = $.extend({}, this.options, {
|
||||||
|
parentGroup: this.group,
|
||||||
|
group: groupCounter ++
|
||||||
|
})
|
||||||
|
childGroup = childContainers[pluginName](options).data(pluginName).group
|
||||||
|
}
|
||||||
|
$.data(this.items[index], "subContainer", childGroup)
|
||||||
|
}
|
||||||
|
return childGroup
|
||||||
|
},
|
||||||
|
$getChildren: function (parent, type) {
|
||||||
|
return $(parent).find(this.rootGroup.options[type + "Selector"])
|
||||||
|
},
|
||||||
|
_serialize: function (parent, isContainer) {
|
||||||
|
var that = this,
|
||||||
|
childType = isContainer ? "item" : "container",
|
||||||
|
|
||||||
|
children = this.$getChildren(parent, childType).not(this.options.exclude).map(function () {
|
||||||
|
return that._serialize($(this), !isContainer)
|
||||||
|
}).get()
|
||||||
|
|
||||||
|
return this.rootGroup.options.serialize(parent, children, isContainer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var API = {
|
||||||
|
enable: function (ignoreChildren) {
|
||||||
|
if(this.options.drop)
|
||||||
|
this.group.addContainer(this)
|
||||||
|
if(!ignoreChildren)
|
||||||
|
processChildContainers(this.el, this.options.containerSelector, "enable", true)
|
||||||
|
|
||||||
|
this.el.on(eventNames.start, this.handle, this.dragInitProxy)
|
||||||
|
},
|
||||||
|
disable: function (ignoreChildren) {
|
||||||
|
if(this.options.drop)
|
||||||
|
this.group.removeContainer(this)
|
||||||
|
if(!ignoreChildren)
|
||||||
|
processChildContainers(this.el, this.options.containerSelector, "disable", true)
|
||||||
|
|
||||||
|
this.el.off(eventNames.start, this.handle, this.dragInitProxy)
|
||||||
|
},
|
||||||
|
serialize: function () {
|
||||||
|
return this._serialize(this.el, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$.extend(Container.prototype, API)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
*
|
||||||
|
* Parameters are
|
||||||
|
* either options on init
|
||||||
|
* or a method name followed by arguments to pass to the method
|
||||||
|
*/
|
||||||
|
$.fn[pluginName] = function(methodOrOptions) {
|
||||||
|
var args = Array.prototype.slice.call(arguments, 1)
|
||||||
|
|
||||||
|
return this.map(function(){
|
||||||
|
var $t = $(this),
|
||||||
|
object = $t.data(pluginName)
|
||||||
|
|
||||||
|
if(object && API[methodOrOptions])
|
||||||
|
return API[methodOrOptions].apply(object, args) || this
|
||||||
|
else if(!object && (methodOrOptions === undefined ||
|
||||||
|
typeof methodOrOptions === "object"))
|
||||||
|
$t.data(pluginName, new Container($t, methodOrOptions))
|
||||||
|
|
||||||
|
return this
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
}(jQuery, window)
|
||||||
|
;
|
402
app/assets/javascripts/vendor/jquery.event.drag.js
vendored
Normal file
402
app/assets/javascripts/vendor/jquery.event.drag.js
vendored
Normal file
@ -0,0 +1,402 @@
|
|||||||
|
/*!
|
||||||
|
* jquery.event.drag - v 2.2
|
||||||
|
* Copyright (c) 2010 Three Dub Media - http://threedubmedia.com
|
||||||
|
* Open Source MIT License - http://threedubmedia.com/code/license
|
||||||
|
*/
|
||||||
|
// Created: 2008-06-04
|
||||||
|
// Updated: 2012-05-21
|
||||||
|
// REQUIRES: jquery 1.7.x
|
||||||
|
|
||||||
|
;(function( $ ){
|
||||||
|
|
||||||
|
// add the jquery instance method
|
||||||
|
$.fn.drag = function( str, arg, opts ){
|
||||||
|
// figure out the event type
|
||||||
|
var type = typeof str == "string" ? str : "",
|
||||||
|
// figure out the event handler...
|
||||||
|
fn = $.isFunction( str ) ? str : $.isFunction( arg ) ? arg : null;
|
||||||
|
// fix the event type
|
||||||
|
if ( type.indexOf("drag") !== 0 )
|
||||||
|
type = "drag"+ type;
|
||||||
|
// were options passed
|
||||||
|
opts = ( str == fn ? arg : opts ) || {};
|
||||||
|
// trigger or bind event handler
|
||||||
|
return fn ? this.bind( type, opts, fn ) : this.trigger( type );
|
||||||
|
};
|
||||||
|
|
||||||
|
// local refs (increase compression)
|
||||||
|
var $event = $.event,
|
||||||
|
$special = $event.special,
|
||||||
|
// configure the drag special event
|
||||||
|
drag = $special.drag = {
|
||||||
|
|
||||||
|
// these are the default settings
|
||||||
|
defaults: {
|
||||||
|
which: 1, // mouse button pressed to start drag sequence
|
||||||
|
distance: 0, // distance dragged before dragstart
|
||||||
|
not: ':input', // selector to suppress dragging on target elements
|
||||||
|
handle: null, // selector to match handle target elements
|
||||||
|
relative: false, // true to use "position", false to use "offset"
|
||||||
|
drop: true, // false to suppress drop events, true or selector to allow
|
||||||
|
click: false // false to suppress click events after dragend (no proxy)
|
||||||
|
},
|
||||||
|
|
||||||
|
// the key name for stored drag data
|
||||||
|
datakey: "dragdata",
|
||||||
|
|
||||||
|
// prevent bubbling for better performance
|
||||||
|
noBubble: true,
|
||||||
|
|
||||||
|
// count bound related events
|
||||||
|
add: function( obj ){
|
||||||
|
// read the interaction data
|
||||||
|
var data = $.data( this, drag.datakey ),
|
||||||
|
// read any passed options
|
||||||
|
opts = obj.data || {};
|
||||||
|
// count another realted event
|
||||||
|
data.related += 1;
|
||||||
|
// extend data options bound with this event
|
||||||
|
// don't iterate "opts" in case it is a node
|
||||||
|
$.each( drag.defaults, function( key, def ){
|
||||||
|
if ( opts[ key ] !== undefined )
|
||||||
|
data[ key ] = opts[ key ];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// forget unbound related events
|
||||||
|
remove: function(){
|
||||||
|
$.data( this, drag.datakey ).related -= 1;
|
||||||
|
},
|
||||||
|
|
||||||
|
// configure interaction, capture settings
|
||||||
|
setup: function(){
|
||||||
|
// check for related events
|
||||||
|
if ( $.data( this, drag.datakey ) )
|
||||||
|
return;
|
||||||
|
// initialize the drag data with copied defaults
|
||||||
|
var data = $.extend({ related:0 }, drag.defaults );
|
||||||
|
// store the interaction data
|
||||||
|
$.data( this, drag.datakey, data );
|
||||||
|
// bind the mousedown event, which starts drag interactions
|
||||||
|
$event.add( this, "touchstart mousedown", drag.init, data );
|
||||||
|
// prevent image dragging in IE...
|
||||||
|
if ( this.attachEvent )
|
||||||
|
this.attachEvent("ondragstart", drag.dontstart );
|
||||||
|
},
|
||||||
|
|
||||||
|
// destroy configured interaction
|
||||||
|
teardown: function(){
|
||||||
|
var data = $.data( this, drag.datakey ) || {};
|
||||||
|
// check for related events
|
||||||
|
if ( data.related )
|
||||||
|
return;
|
||||||
|
// remove the stored data
|
||||||
|
$.removeData( this, drag.datakey );
|
||||||
|
// remove the mousedown event
|
||||||
|
$event.remove( this, "touchstart mousedown", drag.init );
|
||||||
|
// enable text selection
|
||||||
|
drag.textselect( true );
|
||||||
|
// un-prevent image dragging in IE...
|
||||||
|
if ( this.detachEvent )
|
||||||
|
this.detachEvent("ondragstart", drag.dontstart );
|
||||||
|
},
|
||||||
|
|
||||||
|
// initialize the interaction
|
||||||
|
init: function( event ){
|
||||||
|
// sorry, only one touch at a time
|
||||||
|
if ( drag.touched )
|
||||||
|
return;
|
||||||
|
// the drag/drop interaction data
|
||||||
|
var dd = event.data, results;
|
||||||
|
// check the which directive
|
||||||
|
if ( event.which != 0 && dd.which > 0 && event.which != dd.which )
|
||||||
|
return;
|
||||||
|
// check for suppressed selector
|
||||||
|
if ( $( event.target ).is( dd.not ) )
|
||||||
|
return;
|
||||||
|
// check for handle selector
|
||||||
|
if ( dd.handle && !$( event.target ).closest( dd.handle, event.currentTarget ).length )
|
||||||
|
return;
|
||||||
|
|
||||||
|
drag.touched = event.type == 'touchstart' ? this : null;
|
||||||
|
dd.propagates = 1;
|
||||||
|
dd.mousedown = this;
|
||||||
|
dd.interactions = [ drag.interaction( this, dd ) ];
|
||||||
|
dd.target = event.target;
|
||||||
|
dd.pageX = event.pageX;
|
||||||
|
dd.pageY = event.pageY;
|
||||||
|
dd.dragging = null;
|
||||||
|
// handle draginit event...
|
||||||
|
results = drag.hijack( event, "draginit", dd );
|
||||||
|
// early cancel
|
||||||
|
if ( !dd.propagates )
|
||||||
|
return;
|
||||||
|
// flatten the result set
|
||||||
|
results = drag.flatten( results );
|
||||||
|
// insert new interaction elements
|
||||||
|
if ( results && results.length ){
|
||||||
|
dd.interactions = [];
|
||||||
|
$.each( results, function(){
|
||||||
|
dd.interactions.push( drag.interaction( this, dd ) );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// remember how many interactions are propagating
|
||||||
|
dd.propagates = dd.interactions.length;
|
||||||
|
// locate and init the drop targets
|
||||||
|
if ( dd.drop !== false && $special.drop )
|
||||||
|
$special.drop.handler( event, dd );
|
||||||
|
// disable text selection
|
||||||
|
drag.textselect( false );
|
||||||
|
// bind additional events...
|
||||||
|
if ( drag.touched )
|
||||||
|
$event.add( drag.touched, "touchmove touchend", drag.handler, dd );
|
||||||
|
else
|
||||||
|
$event.add( document, "mousemove mouseup", drag.handler, dd );
|
||||||
|
// helps prevent text selection or scrolling
|
||||||
|
if ( !drag.touched || dd.live )
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
// returns an interaction object
|
||||||
|
interaction: function( elem, dd ){
|
||||||
|
var offset = $( elem )[ dd.relative ? "position" : "offset" ]() || { top:0, left:0 };
|
||||||
|
return {
|
||||||
|
drag: elem,
|
||||||
|
callback: new drag.callback(),
|
||||||
|
droppable: [],
|
||||||
|
offset: offset
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
// handle drag-releatd DOM events
|
||||||
|
handler: function( event ){
|
||||||
|
// read the data before hijacking anything
|
||||||
|
var dd = event.data;
|
||||||
|
// handle various events
|
||||||
|
switch ( event.type ){
|
||||||
|
// mousemove, check distance, start dragging
|
||||||
|
case !dd.dragging && 'touchmove':
|
||||||
|
event.preventDefault();
|
||||||
|
case !dd.dragging && 'mousemove':
|
||||||
|
// drag tolerance, x² + y² = distance²
|
||||||
|
if ( Math.pow( event.pageX-dd.pageX, 2 ) + Math.pow( event.pageY-dd.pageY, 2 ) < Math.pow( dd.distance, 2 ) )
|
||||||
|
break; // distance tolerance not reached
|
||||||
|
event.target = dd.target; // force target from "mousedown" event (fix distance issue)
|
||||||
|
drag.hijack( event, "dragstart", dd ); // trigger "dragstart"
|
||||||
|
if ( dd.propagates ) // "dragstart" not rejected
|
||||||
|
dd.dragging = true; // activate interaction
|
||||||
|
// mousemove, dragging
|
||||||
|
case 'touchmove':
|
||||||
|
event.preventDefault();
|
||||||
|
case 'mousemove':
|
||||||
|
if ( dd.dragging ){
|
||||||
|
// trigger "drag"
|
||||||
|
drag.hijack( event, "drag", dd );
|
||||||
|
if ( dd.propagates ){
|
||||||
|
// manage drop events
|
||||||
|
if ( dd.drop !== false && $special.drop )
|
||||||
|
$special.drop.handler( event, dd ); // "dropstart", "dropend"
|
||||||
|
break; // "drag" not rejected, stop
|
||||||
|
}
|
||||||
|
event.type = "mouseup"; // helps "drop" handler behave
|
||||||
|
}
|
||||||
|
// mouseup, stop dragging
|
||||||
|
case 'touchend':
|
||||||
|
case 'mouseup':
|
||||||
|
default:
|
||||||
|
if ( drag.touched )
|
||||||
|
$event.remove( drag.touched, "touchmove touchend", drag.handler ); // remove touch events
|
||||||
|
else
|
||||||
|
$event.remove( document, "mousemove mouseup", drag.handler ); // remove page events
|
||||||
|
if ( dd.dragging ){
|
||||||
|
if ( dd.drop !== false && $special.drop )
|
||||||
|
$special.drop.handler( event, dd ); // "drop"
|
||||||
|
drag.hijack( event, "dragend", dd ); // trigger "dragend"
|
||||||
|
}
|
||||||
|
drag.textselect( true ); // enable text selection
|
||||||
|
// if suppressing click events...
|
||||||
|
if ( dd.click === false && dd.dragging )
|
||||||
|
$.data( dd.mousedown, "suppress.click", new Date().getTime() + 5 );
|
||||||
|
dd.dragging = drag.touched = false; // deactivate element
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// re-use event object for custom events
|
||||||
|
hijack: function( event, type, dd, x, elem ){
|
||||||
|
// not configured
|
||||||
|
if ( !dd )
|
||||||
|
return;
|
||||||
|
// remember the original event and type
|
||||||
|
var orig = { event:event.originalEvent, type:event.type },
|
||||||
|
// is the event drag related or drog related?
|
||||||
|
mode = type.indexOf("drop") ? "drag" : "drop",
|
||||||
|
// iteration vars
|
||||||
|
result, i = x || 0, ia, $elems, callback,
|
||||||
|
len = !isNaN( x ) ? x : dd.interactions.length;
|
||||||
|
// modify the event type
|
||||||
|
event.type = type;
|
||||||
|
// remove the original event
|
||||||
|
event.originalEvent = null;
|
||||||
|
// initialize the results
|
||||||
|
dd.results = [];
|
||||||
|
// handle each interacted element
|
||||||
|
do if ( ia = dd.interactions[ i ] ){
|
||||||
|
// validate the interaction
|
||||||
|
if ( type !== "dragend" && ia.cancelled )
|
||||||
|
continue;
|
||||||
|
// set the dragdrop properties on the event object
|
||||||
|
callback = drag.properties( event, dd, ia );
|
||||||
|
// prepare for more results
|
||||||
|
ia.results = [];
|
||||||
|
// handle each element
|
||||||
|
$( elem || ia[ mode ] || dd.droppable ).each(function( p, subject ){
|
||||||
|
// identify drag or drop targets individually
|
||||||
|
callback.target = subject;
|
||||||
|
// force propagtion of the custom event
|
||||||
|
event.isPropagationStopped = function(){ return false; };
|
||||||
|
// handle the event
|
||||||
|
result = subject ? $event.dispatch.call( subject, event, callback ) : null;
|
||||||
|
// stop the drag interaction for this element
|
||||||
|
if ( result === false ){
|
||||||
|
if ( mode == "drag" ){
|
||||||
|
ia.cancelled = true;
|
||||||
|
dd.propagates -= 1;
|
||||||
|
}
|
||||||
|
if ( type == "drop" ){
|
||||||
|
ia[ mode ][p] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// assign any dropinit elements
|
||||||
|
else if ( type == "dropinit" )
|
||||||
|
ia.droppable.push( drag.element( result ) || subject );
|
||||||
|
// accept a returned proxy element
|
||||||
|
if ( type == "dragstart" )
|
||||||
|
ia.proxy = $( drag.element( result ) || ia.drag )[0];
|
||||||
|
// remember this result
|
||||||
|
ia.results.push( result );
|
||||||
|
// forget the event result, for recycling
|
||||||
|
delete event.result;
|
||||||
|
// break on cancelled handler
|
||||||
|
if ( type !== "dropinit" )
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
// flatten the results
|
||||||
|
dd.results[ i ] = drag.flatten( ia.results );
|
||||||
|
// accept a set of valid drop targets
|
||||||
|
if ( type == "dropinit" )
|
||||||
|
ia.droppable = drag.flatten( ia.droppable );
|
||||||
|
// locate drop targets
|
||||||
|
if ( type == "dragstart" && !ia.cancelled )
|
||||||
|
callback.update();
|
||||||
|
}
|
||||||
|
while ( ++i < len )
|
||||||
|
// restore the original event & type
|
||||||
|
event.type = orig.type;
|
||||||
|
event.originalEvent = orig.event;
|
||||||
|
// return all handler results
|
||||||
|
return drag.flatten( dd.results );
|
||||||
|
},
|
||||||
|
|
||||||
|
// extend the callback object with drag/drop properties...
|
||||||
|
properties: function( event, dd, ia ){
|
||||||
|
var obj = ia.callback;
|
||||||
|
// elements
|
||||||
|
obj.drag = ia.drag;
|
||||||
|
obj.proxy = ia.proxy || ia.drag;
|
||||||
|
// starting mouse position
|
||||||
|
obj.startX = dd.pageX;
|
||||||
|
obj.startY = dd.pageY;
|
||||||
|
// current distance dragged
|
||||||
|
obj.deltaX = event.pageX - dd.pageX;
|
||||||
|
obj.deltaY = event.pageY - dd.pageY;
|
||||||
|
// original element position
|
||||||
|
obj.originalX = ia.offset.left;
|
||||||
|
obj.originalY = ia.offset.top;
|
||||||
|
// adjusted element position
|
||||||
|
obj.offsetX = obj.originalX + obj.deltaX;
|
||||||
|
obj.offsetY = obj.originalY + obj.deltaY;
|
||||||
|
// assign the drop targets information
|
||||||
|
obj.drop = drag.flatten( ( ia.drop || [] ).slice() );
|
||||||
|
obj.available = drag.flatten( ( ia.droppable || [] ).slice() );
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
// determine is the argument is an element or jquery instance
|
||||||
|
element: function( arg ){
|
||||||
|
if ( arg && ( arg.jquery || arg.nodeType == 1 ) )
|
||||||
|
return arg;
|
||||||
|
},
|
||||||
|
|
||||||
|
// flatten nested jquery objects and arrays into a single dimension array
|
||||||
|
flatten: function( arr ){
|
||||||
|
return $.map( arr, function( member ){
|
||||||
|
return member && member.jquery ? $.makeArray( member ) :
|
||||||
|
member && member.length ? drag.flatten( member ) : member;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// toggles text selection attributes ON (true) or OFF (false)
|
||||||
|
textselect: function( bool ){
|
||||||
|
$( document )[ bool ? "unbind" : "bind" ]("selectstart", drag.dontstart )
|
||||||
|
.css("MozUserSelect", bool ? "" : "none" );
|
||||||
|
// .attr("unselectable", bool ? "off" : "on" )
|
||||||
|
document.unselectable = bool ? "off" : "on";
|
||||||
|
},
|
||||||
|
|
||||||
|
// suppress "selectstart" and "ondragstart" events
|
||||||
|
dontstart: function(){
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
// a callback instance contructor
|
||||||
|
callback: function(){}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// callback methods
|
||||||
|
drag.callback.prototype = {
|
||||||
|
update: function(){
|
||||||
|
if ( $special.drop && this.available.length )
|
||||||
|
$.each( this.available, function( i ){
|
||||||
|
$special.drop.locate( this, i );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// patch $.event.$dispatch to allow suppressing clicks
|
||||||
|
var $dispatch = $event.dispatch;
|
||||||
|
$event.dispatch = function( event ){
|
||||||
|
if ( $.data( this, "suppress."+ event.type ) - new Date().getTime() > 0 ){
|
||||||
|
$.removeData( this, "suppress."+ event.type );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return $dispatch.apply( this, arguments );
|
||||||
|
};
|
||||||
|
|
||||||
|
// event fix hooks for touch events...
|
||||||
|
var touchHooks =
|
||||||
|
$event.fixHooks.touchstart =
|
||||||
|
$event.fixHooks.touchmove =
|
||||||
|
$event.fixHooks.touchend =
|
||||||
|
$event.fixHooks.touchcancel = {
|
||||||
|
props: "clientX clientY pageX pageY screenX screenY".split( " " ),
|
||||||
|
filter: function( event, orig ) {
|
||||||
|
if ( orig ){
|
||||||
|
var touched = ( orig.touches && orig.touches[0] )
|
||||||
|
|| ( orig.changedTouches && orig.changedTouches[0] )
|
||||||
|
|| null;
|
||||||
|
// iOS webkit: touchstart, touchmove, touchend
|
||||||
|
if ( touched )
|
||||||
|
$.each( touchHooks.props, function( i, prop ){
|
||||||
|
event[ prop ] = touched[ prop ];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// share the same special event configuration with related events...
|
||||||
|
$special.draginit = $special.dragstart = $special.dragend = drag;
|
||||||
|
|
||||||
|
})( jQuery );
|
164
app/assets/javascripts/vendor/jquery.fileupload-process.js
vendored
Executable file
164
app/assets/javascripts/vendor/jquery.fileupload-process.js
vendored
Executable file
@ -0,0 +1,164 @@
|
|||||||
|
/*
|
||||||
|
* jQuery File Upload Processing Plugin 1.2.2
|
||||||
|
* https://github.com/blueimp/jQuery-File-Upload
|
||||||
|
*
|
||||||
|
* Copyright 2012, Sebastian Tschan
|
||||||
|
* https://blueimp.net
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license:
|
||||||
|
* http://www.opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint nomen: true, unparam: true */
|
||||||
|
/*global define, window */
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
'use strict';
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// Register as an anonymous AMD module:
|
||||||
|
define([
|
||||||
|
'jquery',
|
||||||
|
'./jquery.fileupload'
|
||||||
|
], factory);
|
||||||
|
} else {
|
||||||
|
// Browser globals:
|
||||||
|
factory(
|
||||||
|
window.jQuery
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}(function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var originalAdd = $.blueimp.fileupload.prototype.options.add;
|
||||||
|
|
||||||
|
// The File Upload Processing plugin extends the fileupload widget
|
||||||
|
// with file processing functionality:
|
||||||
|
$.widget('blueimp.fileupload', $.blueimp.fileupload, {
|
||||||
|
|
||||||
|
options: {
|
||||||
|
// The list of processing actions:
|
||||||
|
processQueue: [
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
action: 'log',
|
||||||
|
type: 'debug'
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
],
|
||||||
|
add: function (e, data) {
|
||||||
|
var $this = $(this);
|
||||||
|
data.process(function () {
|
||||||
|
return $this.fileupload('process', data);
|
||||||
|
});
|
||||||
|
originalAdd.call(this, e, data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
processActions: {
|
||||||
|
/*
|
||||||
|
log: function (data, options) {
|
||||||
|
console[options.type](
|
||||||
|
'Processing "' + data.files[data.index].name + '"'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
},
|
||||||
|
|
||||||
|
_processFile: function (data) {
|
||||||
|
var that = this,
|
||||||
|
dfd = $.Deferred().resolveWith(that, [data]),
|
||||||
|
chain = dfd.promise();
|
||||||
|
this._trigger('process', null, data);
|
||||||
|
$.each(data.processQueue, function (i, settings) {
|
||||||
|
var func = function (data) {
|
||||||
|
return that.processActions[settings.action].call(
|
||||||
|
that,
|
||||||
|
data,
|
||||||
|
settings
|
||||||
|
);
|
||||||
|
};
|
||||||
|
chain = chain.pipe(func, settings.always && func);
|
||||||
|
});
|
||||||
|
chain
|
||||||
|
.done(function () {
|
||||||
|
that._trigger('processdone', null, data);
|
||||||
|
that._trigger('processalways', null, data);
|
||||||
|
})
|
||||||
|
.fail(function () {
|
||||||
|
that._trigger('processfail', null, data);
|
||||||
|
that._trigger('processalways', null, data);
|
||||||
|
});
|
||||||
|
return chain;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Replaces the settings of each processQueue item that
|
||||||
|
// are strings starting with an "@", using the remaining
|
||||||
|
// substring as key for the option map,
|
||||||
|
// e.g. "@autoUpload" is replaced with options.autoUpload:
|
||||||
|
_transformProcessQueue: function (options) {
|
||||||
|
var processQueue = [];
|
||||||
|
$.each(options.processQueue, function () {
|
||||||
|
var settings = {},
|
||||||
|
action = this.action,
|
||||||
|
prefix = this.prefix === true ? action : this.prefix;
|
||||||
|
$.each(this, function (key, value) {
|
||||||
|
if ($.type(value) === 'string' &&
|
||||||
|
value.charAt(0) === '@') {
|
||||||
|
settings[key] = options[
|
||||||
|
value.slice(1) || (prefix ? prefix +
|
||||||
|
key.charAt(0).toUpperCase() + key.slice(1) : key)
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
settings[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
processQueue.push(settings);
|
||||||
|
});
|
||||||
|
options.processQueue = processQueue;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Returns the number of files currently in the processsing queue:
|
||||||
|
processing: function () {
|
||||||
|
return this._processing;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Processes the files given as files property of the data parameter,
|
||||||
|
// returns a Promise object that allows to bind callbacks:
|
||||||
|
process: function (data) {
|
||||||
|
var that = this,
|
||||||
|
options = $.extend({}, this.options, data);
|
||||||
|
if (options.processQueue && options.processQueue.length) {
|
||||||
|
this._transformProcessQueue(options);
|
||||||
|
if (this._processing === 0) {
|
||||||
|
this._trigger('processstart');
|
||||||
|
}
|
||||||
|
$.each(data.files, function (index) {
|
||||||
|
var opts = index ? $.extend({}, options) : options,
|
||||||
|
func = function () {
|
||||||
|
return that._processFile(opts);
|
||||||
|
};
|
||||||
|
opts.index = index;
|
||||||
|
that._processing += 1;
|
||||||
|
that._processingQueue = that._processingQueue.pipe(func, func)
|
||||||
|
.always(function () {
|
||||||
|
that._processing -= 1;
|
||||||
|
if (that._processing === 0) {
|
||||||
|
that._trigger('processstop');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return this._processingQueue;
|
||||||
|
},
|
||||||
|
|
||||||
|
_create: function () {
|
||||||
|
this._super();
|
||||||
|
this._processing = 0;
|
||||||
|
this._processingQueue = $.Deferred().resolveWith(this)
|
||||||
|
.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}));
|
638
app/assets/javascripts/vendor/jquery.fileupload-ui.js
vendored
Executable file
638
app/assets/javascripts/vendor/jquery.fileupload-ui.js
vendored
Executable file
@ -0,0 +1,638 @@
|
|||||||
|
/*
|
||||||
|
* jQuery File Upload User Interface Plugin 8.3
|
||||||
|
* https://github.com/blueimp/jQuery-File-Upload
|
||||||
|
*
|
||||||
|
* Copyright 2010, Sebastian Tschan
|
||||||
|
* https://blueimp.net
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license:
|
||||||
|
* http://www.opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint nomen: true, unparam: true, regexp: true */
|
||||||
|
/*global define, window, URL, webkitURL, FileReader */
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
'use strict';
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// Register as an anonymous AMD module:
|
||||||
|
define([
|
||||||
|
'jquery',
|
||||||
|
'tmpl',
|
||||||
|
'./jquery.fileupload-image',
|
||||||
|
'./jquery.fileupload-audio',
|
||||||
|
'./jquery.fileupload-video',
|
||||||
|
'./jquery.fileupload-validate'
|
||||||
|
], factory);
|
||||||
|
} else {
|
||||||
|
// Browser globals:
|
||||||
|
factory(
|
||||||
|
window.jQuery,
|
||||||
|
window.tmpl
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}(function ($, tmpl, loadImage) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
$.blueimp.fileupload.prototype._specialOptions.push(
|
||||||
|
'filesContainer',
|
||||||
|
'uploadTemplateId',
|
||||||
|
'downloadTemplateId'
|
||||||
|
);
|
||||||
|
|
||||||
|
// The UI version extends the file upload widget
|
||||||
|
// and adds complete user interface interaction:
|
||||||
|
$.widget('blueimp.fileupload', $.blueimp.fileupload, {
|
||||||
|
|
||||||
|
options: {
|
||||||
|
// By default, files added to the widget are uploaded as soon
|
||||||
|
// as the user clicks on the start buttons. To enable automatic
|
||||||
|
// uploads, set the following option to true:
|
||||||
|
autoUpload: false,
|
||||||
|
// The ID of the upload template:
|
||||||
|
uploadTemplateId: 'template-upload',
|
||||||
|
// The ID of the download template:
|
||||||
|
downloadTemplateId: 'template-download',
|
||||||
|
// The container for the list of files. If undefined, it is set to
|
||||||
|
// an element with class "files" inside of the widget element:
|
||||||
|
filesContainer: undefined,
|
||||||
|
// By default, files are appended to the files container.
|
||||||
|
// Set the following option to true, to prepend files instead:
|
||||||
|
prependFiles: false,
|
||||||
|
// The expected data type of the upload response, sets the dataType
|
||||||
|
// option of the $.ajax upload requests:
|
||||||
|
dataType: 'json',
|
||||||
|
|
||||||
|
// Function returning the current number of files,
|
||||||
|
// used by the maxNumberOfFiles validation:
|
||||||
|
getNumberOfFiles: function () {
|
||||||
|
return this.filesContainer.children().length;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Callback to retrieve the list of files from the server response:
|
||||||
|
getFilesFromResponse: function (data) {
|
||||||
|
if (data.result && $.isArray(data.result.files)) {
|
||||||
|
return data.result.files;
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
},
|
||||||
|
|
||||||
|
// The add callback is invoked as soon as files are added to the fileupload
|
||||||
|
// widget (via file input selection, drag & drop or add API call).
|
||||||
|
// See the basic file upload widget for more information:
|
||||||
|
add: function (e, data) {
|
||||||
|
var $this = $(this),
|
||||||
|
that = $this.data('blueimp-fileupload') ||
|
||||||
|
$this.data('fileupload'),
|
||||||
|
options = that.options,
|
||||||
|
files = data.files;
|
||||||
|
data.process(function () {
|
||||||
|
return $this.fileupload('process', data);
|
||||||
|
}).always(function () {
|
||||||
|
data.context = that._renderUpload(files).data('data', data);
|
||||||
|
that._renderPreviews(data);
|
||||||
|
options.filesContainer[
|
||||||
|
options.prependFiles ? 'prepend' : 'append'
|
||||||
|
](data.context);
|
||||||
|
that._forceReflow(data.context);
|
||||||
|
that._transition(data.context).done(
|
||||||
|
function () {
|
||||||
|
if ((that._trigger('added', e, data) !== false) &&
|
||||||
|
(options.autoUpload || data.autoUpload) &&
|
||||||
|
data.autoUpload !== false && !data.files.error) {
|
||||||
|
data.submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// Callback for the start of each file upload request:
|
||||||
|
send: function (e, data) {
|
||||||
|
var that = $(this).data('blueimp-fileupload') ||
|
||||||
|
$(this).data('fileupload');
|
||||||
|
if (data.context && data.dataType &&
|
||||||
|
data.dataType.substr(0, 6) === 'iframe') {
|
||||||
|
// Iframe Transport does not support progress events.
|
||||||
|
// In lack of an indeterminate progress bar, we set
|
||||||
|
// the progress to 100%, showing the full animated bar:
|
||||||
|
data.context
|
||||||
|
.find('.progress').addClass(
|
||||||
|
!$.support.transition && 'progress-animated'
|
||||||
|
)
|
||||||
|
.attr('aria-valuenow', 100)
|
||||||
|
.find('.bar').css(
|
||||||
|
'width',
|
||||||
|
'100%'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return that._trigger('sent', e, data);
|
||||||
|
},
|
||||||
|
// Callback for successful uploads:
|
||||||
|
done: function (e, data) {
|
||||||
|
var that = $(this).data('blueimp-fileupload') ||
|
||||||
|
$(this).data('fileupload'),
|
||||||
|
getFilesFromResponse = data.getFilesFromResponse ||
|
||||||
|
that.options.getFilesFromResponse,
|
||||||
|
files = getFilesFromResponse(data),
|
||||||
|
template,
|
||||||
|
deferred;
|
||||||
|
if (data.context) {
|
||||||
|
data.context.each(function (index) {
|
||||||
|
var file = files[index] ||
|
||||||
|
{error: 'Empty file upload result'},
|
||||||
|
deferred = that._addFinishedDeferreds();
|
||||||
|
that._transition($(this)).done(
|
||||||
|
function () {
|
||||||
|
var node = $(this);
|
||||||
|
template = that._renderDownload([file])
|
||||||
|
.replaceAll(node);
|
||||||
|
that._forceReflow(template);
|
||||||
|
that._transition(template).done(
|
||||||
|
function () {
|
||||||
|
data.context = $(this);
|
||||||
|
that._trigger('completed', e, data);
|
||||||
|
that._trigger('finished', e, data);
|
||||||
|
deferred.resolve();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
template = that._renderDownload(files)
|
||||||
|
.appendTo(that.options.filesContainer);
|
||||||
|
that._forceReflow(template);
|
||||||
|
deferred = that._addFinishedDeferreds();
|
||||||
|
that._transition(template).done(
|
||||||
|
function () {
|
||||||
|
data.context = $(this);
|
||||||
|
that._trigger('completed', e, data);
|
||||||
|
that._trigger('finished', e, data);
|
||||||
|
deferred.resolve();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Callback for failed (abort or error) uploads:
|
||||||
|
fail: function (e, data) {
|
||||||
|
var that = $(this).data('blueimp-fileupload') ||
|
||||||
|
$(this).data('fileupload'),
|
||||||
|
template,
|
||||||
|
deferred;
|
||||||
|
if (data.context) {
|
||||||
|
data.context.each(function (index) {
|
||||||
|
if (data.errorThrown !== 'abort') {
|
||||||
|
var file = data.files[index];
|
||||||
|
file.error = file.error || data.errorThrown ||
|
||||||
|
true;
|
||||||
|
deferred = that._addFinishedDeferreds();
|
||||||
|
that._transition($(this)).done(
|
||||||
|
function () {
|
||||||
|
var node = $(this);
|
||||||
|
template = that._renderDownload([file])
|
||||||
|
.replaceAll(node);
|
||||||
|
that._forceReflow(template);
|
||||||
|
that._transition(template).done(
|
||||||
|
function () {
|
||||||
|
data.context = $(this);
|
||||||
|
that._trigger('failed', e, data);
|
||||||
|
that._trigger('finished', e, data);
|
||||||
|
deferred.resolve();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
deferred = that._addFinishedDeferreds();
|
||||||
|
that._transition($(this)).done(
|
||||||
|
function () {
|
||||||
|
$(this).remove();
|
||||||
|
that._trigger('failed', e, data);
|
||||||
|
that._trigger('finished', e, data);
|
||||||
|
deferred.resolve();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (data.errorThrown !== 'abort') {
|
||||||
|
data.context = that._renderUpload(data.files)
|
||||||
|
.appendTo(that.options.filesContainer)
|
||||||
|
.data('data', data);
|
||||||
|
that._forceReflow(data.context);
|
||||||
|
deferred = that._addFinishedDeferreds();
|
||||||
|
that._transition(data.context).done(
|
||||||
|
function () {
|
||||||
|
data.context = $(this);
|
||||||
|
that._trigger('failed', e, data);
|
||||||
|
that._trigger('finished', e, data);
|
||||||
|
deferred.resolve();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
that._trigger('failed', e, data);
|
||||||
|
that._trigger('finished', e, data);
|
||||||
|
that._addFinishedDeferreds().resolve();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Callback for upload progress events:
|
||||||
|
progress: function (e, data) {
|
||||||
|
if (data.context) {
|
||||||
|
var progress = Math.floor(data.loaded / data.total * 100);
|
||||||
|
data.context.find('.progress')
|
||||||
|
.attr('aria-valuenow', progress)
|
||||||
|
.find('.bar').css(
|
||||||
|
'width',
|
||||||
|
progress + '%'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Callback for global upload progress events:
|
||||||
|
progressall: function (e, data) {
|
||||||
|
var $this = $(this),
|
||||||
|
progress = Math.floor(data.loaded / data.total * 100),
|
||||||
|
globalProgressNode = $this.find('.fileupload-progress'),
|
||||||
|
extendedProgressNode = globalProgressNode
|
||||||
|
.find('.progress-extended');
|
||||||
|
if (extendedProgressNode.length) {
|
||||||
|
extendedProgressNode.html(
|
||||||
|
($this.data('blueimp-fileupload') || $this.data('fileupload'))
|
||||||
|
._renderExtendedProgress(data)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
globalProgressNode
|
||||||
|
.find('.progress')
|
||||||
|
.attr('aria-valuenow', progress)
|
||||||
|
.find('.bar').css(
|
||||||
|
'width',
|
||||||
|
progress + '%'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
// Callback for uploads start, equivalent to the global ajaxStart event:
|
||||||
|
start: function (e) {
|
||||||
|
var that = $(this).data('blueimp-fileupload') ||
|
||||||
|
$(this).data('fileupload');
|
||||||
|
that._resetFinishedDeferreds();
|
||||||
|
that._transition($(this).find('.fileupload-progress')).done(
|
||||||
|
function () {
|
||||||
|
that._trigger('started', e);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
// Callback for uploads stop, equivalent to the global ajaxStop event:
|
||||||
|
stop: function (e) {
|
||||||
|
var that = $(this).data('blueimp-fileupload') ||
|
||||||
|
$(this).data('fileupload'),
|
||||||
|
deferred = that._addFinishedDeferreds();
|
||||||
|
$.when.apply($, that._getFinishedDeferreds())
|
||||||
|
.done(function () {
|
||||||
|
that._trigger('stopped', e);
|
||||||
|
});
|
||||||
|
that._transition($(this).find('.fileupload-progress')).done(
|
||||||
|
function () {
|
||||||
|
$(this).find('.progress')
|
||||||
|
.attr('aria-valuenow', '0')
|
||||||
|
.find('.bar').css('width', '0%');
|
||||||
|
$(this).find('.progress-extended').html(' ');
|
||||||
|
deferred.resolve();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
processstart: function () {
|
||||||
|
$(this).addClass('fileupload-processing');
|
||||||
|
},
|
||||||
|
processstop: function () {
|
||||||
|
$(this).removeClass('fileupload-processing');
|
||||||
|
},
|
||||||
|
// Callback for file deletion:
|
||||||
|
destroy: function (e, data) {
|
||||||
|
var that = $(this).data('blueimp-fileupload') ||
|
||||||
|
$(this).data('fileupload'),
|
||||||
|
removeNode = function () {
|
||||||
|
that._transition(data.context).done(
|
||||||
|
function () {
|
||||||
|
$(this).remove();
|
||||||
|
that._trigger('destroyed', e, data);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
if (data.url) {
|
||||||
|
$.ajax(data).done(removeNode);
|
||||||
|
} else {
|
||||||
|
removeNode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_resetFinishedDeferreds: function () {
|
||||||
|
this._finishedUploads = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
_addFinishedDeferreds: function (deferred) {
|
||||||
|
if (!deferred) {
|
||||||
|
deferred = $.Deferred();
|
||||||
|
}
|
||||||
|
this._finishedUploads.push(deferred);
|
||||||
|
return deferred;
|
||||||
|
},
|
||||||
|
|
||||||
|
_getFinishedDeferreds: function () {
|
||||||
|
return this._finishedUploads;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Link handler, that allows to download files
|
||||||
|
// by drag & drop of the links to the desktop:
|
||||||
|
_enableDragToDesktop: function () {
|
||||||
|
var link = $(this),
|
||||||
|
url = link.prop('href'),
|
||||||
|
name = link.prop('download'),
|
||||||
|
type = 'application/octet-stream';
|
||||||
|
link.bind('dragstart', function (e) {
|
||||||
|
try {
|
||||||
|
e.originalEvent.dataTransfer.setData(
|
||||||
|
'DownloadURL',
|
||||||
|
[type, name, url].join(':')
|
||||||
|
);
|
||||||
|
} catch (ignore) {}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_formatFileSize: function (bytes) {
|
||||||
|
if (typeof bytes !== 'number') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
if (bytes >= 1000000000) {
|
||||||
|
return (bytes / 1000000000).toFixed(2) + ' GB';
|
||||||
|
}
|
||||||
|
if (bytes >= 1000000) {
|
||||||
|
return (bytes / 1000000).toFixed(2) + ' MB';
|
||||||
|
}
|
||||||
|
return (bytes / 1000).toFixed(2) + ' KB';
|
||||||
|
},
|
||||||
|
|
||||||
|
_formatBitrate: function (bits) {
|
||||||
|
if (typeof bits !== 'number') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
if (bits >= 1000000000) {
|
||||||
|
return (bits / 1000000000).toFixed(2) + ' Gbit/s';
|
||||||
|
}
|
||||||
|
if (bits >= 1000000) {
|
||||||
|
return (bits / 1000000).toFixed(2) + ' Mbit/s';
|
||||||
|
}
|
||||||
|
if (bits >= 1000) {
|
||||||
|
return (bits / 1000).toFixed(2) + ' kbit/s';
|
||||||
|
}
|
||||||
|
return bits.toFixed(2) + ' bit/s';
|
||||||
|
},
|
||||||
|
|
||||||
|
_formatTime: function (seconds) {
|
||||||
|
var date = new Date(seconds * 1000),
|
||||||
|
days = Math.floor(seconds / 86400);
|
||||||
|
days = days ? days + 'd ' : '';
|
||||||
|
return days +
|
||||||
|
('0' + date.getUTCHours()).slice(-2) + ':' +
|
||||||
|
('0' + date.getUTCMinutes()).slice(-2) + ':' +
|
||||||
|
('0' + date.getUTCSeconds()).slice(-2);
|
||||||
|
},
|
||||||
|
|
||||||
|
_formatPercentage: function (floatValue) {
|
||||||
|
return (floatValue * 100).toFixed(2) + ' %';
|
||||||
|
},
|
||||||
|
|
||||||
|
_renderExtendedProgress: function (data) {
|
||||||
|
return this._formatBitrate(data.bitrate) + ' | ' +
|
||||||
|
this._formatTime(
|
||||||
|
(data.total - data.loaded) * 8 / data.bitrate
|
||||||
|
) + ' | ' +
|
||||||
|
this._formatPercentage(
|
||||||
|
data.loaded / data.total
|
||||||
|
) + ' | ' +
|
||||||
|
this._formatFileSize(data.loaded) + ' / ' +
|
||||||
|
this._formatFileSize(data.total);
|
||||||
|
},
|
||||||
|
|
||||||
|
_renderTemplate: function (func, files) {
|
||||||
|
if (!func) {
|
||||||
|
return $();
|
||||||
|
}
|
||||||
|
var result = func({
|
||||||
|
files: files,
|
||||||
|
formatFileSize: this._formatFileSize,
|
||||||
|
options: this.options
|
||||||
|
});
|
||||||
|
if (result instanceof $) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return $(this.options.templatesContainer).html(result).children();
|
||||||
|
},
|
||||||
|
|
||||||
|
_renderPreviews: function (data) {
|
||||||
|
data.context.find('.preview').each(function (index, elm) {
|
||||||
|
$(elm).append(data.files[index].preview);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_renderUpload: function (files) {
|
||||||
|
return this._renderTemplate(
|
||||||
|
this.options.uploadTemplate,
|
||||||
|
files
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
_renderDownload: function (files) {
|
||||||
|
return this._renderTemplate(
|
||||||
|
this.options.downloadTemplate,
|
||||||
|
files
|
||||||
|
).find('a[download]').each(this._enableDragToDesktop).end();
|
||||||
|
},
|
||||||
|
|
||||||
|
_startHandler: function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var button = $(e.currentTarget),
|
||||||
|
template = button.closest('.template-upload'),
|
||||||
|
data = template.data('data');
|
||||||
|
if (data && data.submit && !data.jqXHR && data.submit()) {
|
||||||
|
button.prop('disabled', true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_cancelHandler: function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var template = $(e.currentTarget).closest('.template-upload'),
|
||||||
|
data = template.data('data') || {};
|
||||||
|
if (!data.jqXHR) {
|
||||||
|
data.errorThrown = 'abort';
|
||||||
|
this._trigger('fail', e, data);
|
||||||
|
} else {
|
||||||
|
data.jqXHR.abort();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_deleteHandler: function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var button = $(e.currentTarget);
|
||||||
|
this._trigger('destroy', e, $.extend({
|
||||||
|
context: button.closest('.template-download'),
|
||||||
|
type: 'DELETE'
|
||||||
|
}, button.data()));
|
||||||
|
},
|
||||||
|
|
||||||
|
_forceReflow: function (node) {
|
||||||
|
return $.support.transition && node.length &&
|
||||||
|
node[0].offsetWidth;
|
||||||
|
},
|
||||||
|
|
||||||
|
_transition: function (node) {
|
||||||
|
var dfd = $.Deferred();
|
||||||
|
if ($.support.transition && node.hasClass('fade') && node.is(':visible')) {
|
||||||
|
node.bind(
|
||||||
|
$.support.transition.end,
|
||||||
|
function (e) {
|
||||||
|
// Make sure we don't respond to other transitions events
|
||||||
|
// in the container element, e.g. from button elements:
|
||||||
|
if (e.target === node[0]) {
|
||||||
|
node.unbind($.support.transition.end);
|
||||||
|
dfd.resolveWith(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).toggleClass('in');
|
||||||
|
} else {
|
||||||
|
node.toggleClass('in');
|
||||||
|
dfd.resolveWith(node);
|
||||||
|
}
|
||||||
|
return dfd;
|
||||||
|
},
|
||||||
|
|
||||||
|
_initButtonBarEventHandlers: function () {
|
||||||
|
var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'),
|
||||||
|
filesList = this.options.filesContainer;
|
||||||
|
this._on(fileUploadButtonBar.find('.start'), {
|
||||||
|
click: function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
filesList.find('.start').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._on(fileUploadButtonBar.find('.cancel'), {
|
||||||
|
click: function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
filesList.find('.cancel').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._on(fileUploadButtonBar.find('.delete'), {
|
||||||
|
click: function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
filesList.find('.toggle:checked')
|
||||||
|
.closest('.template-download')
|
||||||
|
.find('.delete').click();
|
||||||
|
fileUploadButtonBar.find('.toggle')
|
||||||
|
.prop('checked', false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._on(fileUploadButtonBar.find('.toggle'), {
|
||||||
|
change: function (e) {
|
||||||
|
filesList.find('.toggle').prop(
|
||||||
|
'checked',
|
||||||
|
$(e.currentTarget).is(':checked')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_destroyButtonBarEventHandlers: function () {
|
||||||
|
this._off(
|
||||||
|
this.element.find('.fileupload-buttonbar')
|
||||||
|
.find('.start, .cancel, .delete'),
|
||||||
|
'click'
|
||||||
|
);
|
||||||
|
this._off(
|
||||||
|
this.element.find('.fileupload-buttonbar .toggle'),
|
||||||
|
'change.'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
_initEventHandlers: function () {
|
||||||
|
this._super();
|
||||||
|
this._on(this.options.filesContainer, {
|
||||||
|
'click .start': this._startHandler,
|
||||||
|
'click .cancel': this._cancelHandler,
|
||||||
|
'click .delete': this._deleteHandler
|
||||||
|
});
|
||||||
|
this._initButtonBarEventHandlers();
|
||||||
|
},
|
||||||
|
|
||||||
|
_destroyEventHandlers: function () {
|
||||||
|
this._destroyButtonBarEventHandlers();
|
||||||
|
this._off(this.options.filesContainer, 'click');
|
||||||
|
this._super();
|
||||||
|
},
|
||||||
|
|
||||||
|
_enableFileInputButton: function () {
|
||||||
|
this.element.find('.fileinput-button input')
|
||||||
|
.prop('disabled', false)
|
||||||
|
.parent().removeClass('disabled');
|
||||||
|
},
|
||||||
|
|
||||||
|
_disableFileInputButton: function () {
|
||||||
|
this.element.find('.fileinput-button input')
|
||||||
|
.prop('disabled', true)
|
||||||
|
.parent().addClass('disabled');
|
||||||
|
},
|
||||||
|
|
||||||
|
_initTemplates: function () {
|
||||||
|
var options = this.options;
|
||||||
|
options.templatesContainer = this.document[0].createElement(
|
||||||
|
options.filesContainer.prop('nodeName')
|
||||||
|
);
|
||||||
|
if (tmpl) {
|
||||||
|
if (options.uploadTemplateId) {
|
||||||
|
options.uploadTemplate = tmpl(options.uploadTemplateId);
|
||||||
|
}
|
||||||
|
if (options.downloadTemplateId) {
|
||||||
|
options.downloadTemplate = tmpl(options.downloadTemplateId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_initFilesContainer: function () {
|
||||||
|
var options = this.options;
|
||||||
|
if (options.filesContainer === undefined) {
|
||||||
|
options.filesContainer = this.element.find('.files');
|
||||||
|
} else if (!(options.filesContainer instanceof $)) {
|
||||||
|
options.filesContainer = $(options.filesContainer);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_initSpecialOptions: function () {
|
||||||
|
this._super();
|
||||||
|
this._initFilesContainer();
|
||||||
|
this._initTemplates();
|
||||||
|
},
|
||||||
|
|
||||||
|
_create: function () {
|
||||||
|
this._super();
|
||||||
|
this._resetFinishedDeferreds();
|
||||||
|
},
|
||||||
|
|
||||||
|
enable: function () {
|
||||||
|
var wasDisabled = false;
|
||||||
|
if (this.options.disabled) {
|
||||||
|
wasDisabled = true;
|
||||||
|
}
|
||||||
|
this._super();
|
||||||
|
if (wasDisabled) {
|
||||||
|
this.element.find('input, button').prop('disabled', false);
|
||||||
|
this._enableFileInputButton();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
disable: function () {
|
||||||
|
if (!this.options.disabled) {
|
||||||
|
this.element.find('input, button').prop('disabled', true);
|
||||||
|
this._disableFileInputButton();
|
||||||
|
}
|
||||||
|
this._super();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}));
|
1315
app/assets/javascripts/vendor/jquery.fileupload.js
vendored
Executable file
1315
app/assets/javascripts/vendor/jquery.fileupload.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
205
app/assets/javascripts/vendor/jquery.iframe-transport.js
vendored
Executable file
205
app/assets/javascripts/vendor/jquery.iframe-transport.js
vendored
Executable file
@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
* jQuery Iframe Transport Plugin 1.7
|
||||||
|
* https://github.com/blueimp/jQuery-File-Upload
|
||||||
|
*
|
||||||
|
* Copyright 2011, Sebastian Tschan
|
||||||
|
* https://blueimp.net
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license:
|
||||||
|
* http://www.opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint unparam: true, nomen: true */
|
||||||
|
/*global define, window, document */
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
'use strict';
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// Register as an anonymous AMD module:
|
||||||
|
define(['jquery'], factory);
|
||||||
|
} else {
|
||||||
|
// Browser globals:
|
||||||
|
factory(window.jQuery);
|
||||||
|
}
|
||||||
|
}(function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Helper variable to create unique names for the transport iframes:
|
||||||
|
var counter = 0;
|
||||||
|
|
||||||
|
// The iframe transport accepts three additional options:
|
||||||
|
// options.fileInput: a jQuery collection of file input fields
|
||||||
|
// options.paramName: the parameter name for the file form data,
|
||||||
|
// overrides the name property of the file input field(s),
|
||||||
|
// can be a string or an array of strings.
|
||||||
|
// options.formData: an array of objects with name and value properties,
|
||||||
|
// equivalent to the return data of .serializeArray(), e.g.:
|
||||||
|
// [{name: 'a', value: 1}, {name: 'b', value: 2}]
|
||||||
|
$.ajaxTransport('iframe', function (options) {
|
||||||
|
if (options.async) {
|
||||||
|
var form,
|
||||||
|
iframe,
|
||||||
|
addParamChar;
|
||||||
|
return {
|
||||||
|
send: function (_, completeCallback) {
|
||||||
|
form = $('<form style="display:none;"></form>');
|
||||||
|
form.attr('accept-charset', options.formAcceptCharset);
|
||||||
|
addParamChar = /\?/.test(options.url) ? '&' : '?';
|
||||||
|
// XDomainRequest only supports GET and POST:
|
||||||
|
if (options.type === 'DELETE') {
|
||||||
|
options.url = options.url + addParamChar + '_method=DELETE';
|
||||||
|
options.type = 'POST';
|
||||||
|
} else if (options.type === 'PUT') {
|
||||||
|
options.url = options.url + addParamChar + '_method=PUT';
|
||||||
|
options.type = 'POST';
|
||||||
|
} else if (options.type === 'PATCH') {
|
||||||
|
options.url = options.url + addParamChar + '_method=PATCH';
|
||||||
|
options.type = 'POST';
|
||||||
|
}
|
||||||
|
// javascript:false as initial iframe src
|
||||||
|
// prevents warning popups on HTTPS in IE6.
|
||||||
|
// IE versions below IE8 cannot set the name property of
|
||||||
|
// elements that have already been added to the DOM,
|
||||||
|
// so we set the name along with the iframe HTML markup:
|
||||||
|
counter += 1;
|
||||||
|
iframe = $(
|
||||||
|
'<iframe src="javascript:false;" name="iframe-transport-' +
|
||||||
|
counter + '"></iframe>'
|
||||||
|
).bind('load', function () {
|
||||||
|
var fileInputClones,
|
||||||
|
paramNames = $.isArray(options.paramName) ?
|
||||||
|
options.paramName : [options.paramName];
|
||||||
|
iframe
|
||||||
|
.unbind('load')
|
||||||
|
.bind('load', function () {
|
||||||
|
var response;
|
||||||
|
// Wrap in a try/catch block to catch exceptions thrown
|
||||||
|
// when trying to access cross-domain iframe contents:
|
||||||
|
try {
|
||||||
|
response = iframe.contents();
|
||||||
|
// Google Chrome and Firefox do not throw an
|
||||||
|
// exception when calling iframe.contents() on
|
||||||
|
// cross-domain requests, so we unify the response:
|
||||||
|
if (!response.length || !response[0].firstChild) {
|
||||||
|
throw new Error();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
response = undefined;
|
||||||
|
}
|
||||||
|
// The complete callback returns the
|
||||||
|
// iframe content document as response object:
|
||||||
|
completeCallback(
|
||||||
|
200,
|
||||||
|
'success',
|
||||||
|
{'iframe': response}
|
||||||
|
);
|
||||||
|
// Fix for IE endless progress bar activity bug
|
||||||
|
// (happens on form submits to iframe targets):
|
||||||
|
$('<iframe src="javascript:false;"></iframe>')
|
||||||
|
.appendTo(form);
|
||||||
|
window.setTimeout(function () {
|
||||||
|
// Removing the form in a setTimeout call
|
||||||
|
// allows Chrome's developer tools to display
|
||||||
|
// the response result
|
||||||
|
form.remove();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
form
|
||||||
|
.prop('target', iframe.prop('name'))
|
||||||
|
.prop('action', options.url)
|
||||||
|
.prop('method', options.type);
|
||||||
|
if (options.formData) {
|
||||||
|
$.each(options.formData, function (index, field) {
|
||||||
|
$('<input type="hidden"/>')
|
||||||
|
.prop('name', field.name)
|
||||||
|
.val(field.value)
|
||||||
|
.appendTo(form);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (options.fileInput && options.fileInput.length &&
|
||||||
|
options.type === 'POST') {
|
||||||
|
fileInputClones = options.fileInput.clone();
|
||||||
|
// Insert a clone for each file input field:
|
||||||
|
options.fileInput.after(function (index) {
|
||||||
|
return fileInputClones[index];
|
||||||
|
});
|
||||||
|
if (options.paramName) {
|
||||||
|
options.fileInput.each(function (index) {
|
||||||
|
$(this).prop(
|
||||||
|
'name',
|
||||||
|
paramNames[index] || options.paramName
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Appending the file input fields to the hidden form
|
||||||
|
// removes them from their original location:
|
||||||
|
form
|
||||||
|
.append(options.fileInput)
|
||||||
|
.prop('enctype', 'multipart/form-data')
|
||||||
|
// enctype must be set as encoding for IE:
|
||||||
|
.prop('encoding', 'multipart/form-data');
|
||||||
|
}
|
||||||
|
form.submit();
|
||||||
|
// Insert the file input fields at their original location
|
||||||
|
// by replacing the clones with the originals:
|
||||||
|
if (fileInputClones && fileInputClones.length) {
|
||||||
|
options.fileInput.each(function (index, input) {
|
||||||
|
var clone = $(fileInputClones[index]);
|
||||||
|
$(input).prop('name', clone.prop('name'));
|
||||||
|
clone.replaceWith(input);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
form.append(iframe).appendTo(document.body);
|
||||||
|
},
|
||||||
|
abort: function () {
|
||||||
|
if (iframe) {
|
||||||
|
// javascript:false as iframe src aborts the request
|
||||||
|
// and prevents warning popups on HTTPS in IE6.
|
||||||
|
// concat is used to avoid the "Script URL" JSLint error:
|
||||||
|
iframe
|
||||||
|
.unbind('load')
|
||||||
|
.prop('src', 'javascript'.concat(':false;'));
|
||||||
|
}
|
||||||
|
if (form) {
|
||||||
|
form.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// The iframe transport returns the iframe content document as response.
|
||||||
|
// The following adds converters from iframe to text, json, html, xml
|
||||||
|
// and script.
|
||||||
|
// Please note that the Content-Type for JSON responses has to be text/plain
|
||||||
|
// or text/html, if the browser doesn't include application/json in the
|
||||||
|
// Accept header, else IE will show a download dialog.
|
||||||
|
// The Content-Type for XML responses on the other hand has to be always
|
||||||
|
// application/xml or text/xml, so IE properly parses the XML response.
|
||||||
|
// See also
|
||||||
|
// https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation
|
||||||
|
$.ajaxSetup({
|
||||||
|
converters: {
|
||||||
|
'iframe text': function (iframe) {
|
||||||
|
return iframe && $(iframe[0].body).text();
|
||||||
|
},
|
||||||
|
'iframe json': function (iframe) {
|
||||||
|
return iframe && $.parseJSON($(iframe[0].body).text());
|
||||||
|
},
|
||||||
|
'iframe html': function (iframe) {
|
||||||
|
return iframe && $(iframe[0].body).html();
|
||||||
|
},
|
||||||
|
'iframe xml': function (iframe) {
|
||||||
|
var xmlDoc = iframe && iframe[0];
|
||||||
|
return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :
|
||||||
|
$.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||
|
||||||
|
$(xmlDoc.body).html());
|
||||||
|
},
|
||||||
|
'iframe script': function (iframe) {
|
||||||
|
return iframe && $.globalEval($(iframe[0].body).text());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}));
|
530
app/assets/javascripts/vendor/jquery.ui.widget.js
vendored
Executable file
530
app/assets/javascripts/vendor/jquery.ui.widget.js
vendored
Executable file
@ -0,0 +1,530 @@
|
|||||||
|
/*
|
||||||
|
* jQuery UI Widget 1.10.3+amd
|
||||||
|
* https://github.com/blueimp/jQuery-File-Upload
|
||||||
|
*
|
||||||
|
* Copyright 2013 jQuery Foundation and other contributors
|
||||||
|
* Released under the MIT license.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://api.jqueryui.com/jQuery.widget/
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
if (typeof define === "function" && define.amd) {
|
||||||
|
// Register as an anonymous AMD module:
|
||||||
|
define(["jquery"], factory);
|
||||||
|
} else {
|
||||||
|
// Browser globals:
|
||||||
|
factory(jQuery);
|
||||||
|
}
|
||||||
|
}(function( $, undefined ) {
|
||||||
|
|
||||||
|
var uuid = 0,
|
||||||
|
slice = Array.prototype.slice,
|
||||||
|
_cleanData = $.cleanData;
|
||||||
|
$.cleanData = function( elems ) {
|
||||||
|
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
||||||
|
try {
|
||||||
|
$( elem ).triggerHandler( "remove" );
|
||||||
|
// http://bugs.jquery.com/ticket/8235
|
||||||
|
} catch( e ) {}
|
||||||
|
}
|
||||||
|
_cleanData( elems );
|
||||||
|
};
|
||||||
|
|
||||||
|
$.widget = function( name, base, prototype ) {
|
||||||
|
var fullName, existingConstructor, constructor, basePrototype,
|
||||||
|
// proxiedPrototype allows the provided prototype to remain unmodified
|
||||||
|
// so that it can be used as a mixin for multiple widgets (#8876)
|
||||||
|
proxiedPrototype = {},
|
||||||
|
namespace = name.split( "." )[ 0 ];
|
||||||
|
|
||||||
|
name = name.split( "." )[ 1 ];
|
||||||
|
fullName = namespace + "-" + name;
|
||||||
|
|
||||||
|
if ( !prototype ) {
|
||||||
|
prototype = base;
|
||||||
|
base = $.Widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create selector for plugin
|
||||||
|
$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
|
||||||
|
return !!$.data( elem, fullName );
|
||||||
|
};
|
||||||
|
|
||||||
|
$[ namespace ] = $[ namespace ] || {};
|
||||||
|
existingConstructor = $[ namespace ][ name ];
|
||||||
|
constructor = $[ namespace ][ name ] = function( options, element ) {
|
||||||
|
// allow instantiation without "new" keyword
|
||||||
|
if ( !this._createWidget ) {
|
||||||
|
return new constructor( options, element );
|
||||||
|
}
|
||||||
|
|
||||||
|
// allow instantiation without initializing for simple inheritance
|
||||||
|
// must use "new" keyword (the code above always passes args)
|
||||||
|
if ( arguments.length ) {
|
||||||
|
this._createWidget( options, element );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// extend with the existing constructor to carry over any static properties
|
||||||
|
$.extend( constructor, existingConstructor, {
|
||||||
|
version: prototype.version,
|
||||||
|
// copy the object used to create the prototype in case we need to
|
||||||
|
// redefine the widget later
|
||||||
|
_proto: $.extend( {}, prototype ),
|
||||||
|
// track widgets that inherit from this widget in case this widget is
|
||||||
|
// redefined after a widget inherits from it
|
||||||
|
_childConstructors: []
|
||||||
|
});
|
||||||
|
|
||||||
|
basePrototype = new base();
|
||||||
|
// we need to make the options hash a property directly on the new instance
|
||||||
|
// otherwise we'll modify the options hash on the prototype that we're
|
||||||
|
// inheriting from
|
||||||
|
basePrototype.options = $.widget.extend( {}, basePrototype.options );
|
||||||
|
$.each( prototype, function( prop, value ) {
|
||||||
|
if ( !$.isFunction( value ) ) {
|
||||||
|
proxiedPrototype[ prop ] = value;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
proxiedPrototype[ prop ] = (function() {
|
||||||
|
var _super = function() {
|
||||||
|
return base.prototype[ prop ].apply( this, arguments );
|
||||||
|
},
|
||||||
|
_superApply = function( args ) {
|
||||||
|
return base.prototype[ prop ].apply( this, args );
|
||||||
|
};
|
||||||
|
return function() {
|
||||||
|
var __super = this._super,
|
||||||
|
__superApply = this._superApply,
|
||||||
|
returnValue;
|
||||||
|
|
||||||
|
this._super = _super;
|
||||||
|
this._superApply = _superApply;
|
||||||
|
|
||||||
|
returnValue = value.apply( this, arguments );
|
||||||
|
|
||||||
|
this._super = __super;
|
||||||
|
this._superApply = __superApply;
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
});
|
||||||
|
constructor.prototype = $.widget.extend( basePrototype, {
|
||||||
|
// TODO: remove support for widgetEventPrefix
|
||||||
|
// always use the name + a colon as the prefix, e.g., draggable:start
|
||||||
|
// don't prefix for widgets that aren't DOM-based
|
||||||
|
widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
|
||||||
|
}, proxiedPrototype, {
|
||||||
|
constructor: constructor,
|
||||||
|
namespace: namespace,
|
||||||
|
widgetName: name,
|
||||||
|
widgetFullName: fullName
|
||||||
|
});
|
||||||
|
|
||||||
|
// If this widget is being redefined then we need to find all widgets that
|
||||||
|
// are inheriting from it and redefine all of them so that they inherit from
|
||||||
|
// the new version of this widget. We're essentially trying to replace one
|
||||||
|
// level in the prototype chain.
|
||||||
|
if ( existingConstructor ) {
|
||||||
|
$.each( existingConstructor._childConstructors, function( i, child ) {
|
||||||
|
var childPrototype = child.prototype;
|
||||||
|
|
||||||
|
// redefine the child widget using the same prototype that was
|
||||||
|
// originally used, but inherit from the new version of the base
|
||||||
|
$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
|
||||||
|
});
|
||||||
|
// remove the list of existing child constructors from the old constructor
|
||||||
|
// so the old child constructors can be garbage collected
|
||||||
|
delete existingConstructor._childConstructors;
|
||||||
|
} else {
|
||||||
|
base._childConstructors.push( constructor );
|
||||||
|
}
|
||||||
|
|
||||||
|
$.widget.bridge( name, constructor );
|
||||||
|
};
|
||||||
|
|
||||||
|
$.widget.extend = function( target ) {
|
||||||
|
var input = slice.call( arguments, 1 ),
|
||||||
|
inputIndex = 0,
|
||||||
|
inputLength = input.length,
|
||||||
|
key,
|
||||||
|
value;
|
||||||
|
for ( ; inputIndex < inputLength; inputIndex++ ) {
|
||||||
|
for ( key in input[ inputIndex ] ) {
|
||||||
|
value = input[ inputIndex ][ key ];
|
||||||
|
if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
|
||||||
|
// Clone objects
|
||||||
|
if ( $.isPlainObject( value ) ) {
|
||||||
|
target[ key ] = $.isPlainObject( target[ key ] ) ?
|
||||||
|
$.widget.extend( {}, target[ key ], value ) :
|
||||||
|
// Don't extend strings, arrays, etc. with objects
|
||||||
|
$.widget.extend( {}, value );
|
||||||
|
// Copy everything else by reference
|
||||||
|
} else {
|
||||||
|
target[ key ] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
};
|
||||||
|
|
||||||
|
$.widget.bridge = function( name, object ) {
|
||||||
|
var fullName = object.prototype.widgetFullName || name;
|
||||||
|
$.fn[ name ] = function( options ) {
|
||||||
|
var isMethodCall = typeof options === "string",
|
||||||
|
args = slice.call( arguments, 1 ),
|
||||||
|
returnValue = this;
|
||||||
|
|
||||||
|
// allow multiple hashes to be passed on init
|
||||||
|
options = !isMethodCall && args.length ?
|
||||||
|
$.widget.extend.apply( null, [ options ].concat(args) ) :
|
||||||
|
options;
|
||||||
|
|
||||||
|
if ( isMethodCall ) {
|
||||||
|
this.each(function() {
|
||||||
|
var methodValue,
|
||||||
|
instance = $.data( this, fullName );
|
||||||
|
if ( !instance ) {
|
||||||
|
return $.error( "cannot call methods on " + name + " prior to initialization; " +
|
||||||
|
"attempted to call method '" + options + "'" );
|
||||||
|
}
|
||||||
|
if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
|
||||||
|
return $.error( "no such method '" + options + "' for " + name + " widget instance" );
|
||||||
|
}
|
||||||
|
methodValue = instance[ options ].apply( instance, args );
|
||||||
|
if ( methodValue !== instance && methodValue !== undefined ) {
|
||||||
|
returnValue = methodValue && methodValue.jquery ?
|
||||||
|
returnValue.pushStack( methodValue.get() ) :
|
||||||
|
methodValue;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.each(function() {
|
||||||
|
var instance = $.data( this, fullName );
|
||||||
|
if ( instance ) {
|
||||||
|
instance.option( options || {} )._init();
|
||||||
|
} else {
|
||||||
|
$.data( this, fullName, new object( options, this ) );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
$.Widget = function( /* options, element */ ) {};
|
||||||
|
$.Widget._childConstructors = [];
|
||||||
|
|
||||||
|
$.Widget.prototype = {
|
||||||
|
widgetName: "widget",
|
||||||
|
widgetEventPrefix: "",
|
||||||
|
defaultElement: "<div>",
|
||||||
|
options: {
|
||||||
|
disabled: false,
|
||||||
|
|
||||||
|
// callbacks
|
||||||
|
create: null
|
||||||
|
},
|
||||||
|
_createWidget: function( options, element ) {
|
||||||
|
element = $( element || this.defaultElement || this )[ 0 ];
|
||||||
|
this.element = $( element );
|
||||||
|
this.uuid = uuid++;
|
||||||
|
this.eventNamespace = "." + this.widgetName + this.uuid;
|
||||||
|
this.options = $.widget.extend( {},
|
||||||
|
this.options,
|
||||||
|
this._getCreateOptions(),
|
||||||
|
options );
|
||||||
|
|
||||||
|
this.bindings = $();
|
||||||
|
this.hoverable = $();
|
||||||
|
this.focusable = $();
|
||||||
|
|
||||||
|
if ( element !== this ) {
|
||||||
|
$.data( element, this.widgetFullName, this );
|
||||||
|
this._on( true, this.element, {
|
||||||
|
remove: function( event ) {
|
||||||
|
if ( event.target === element ) {
|
||||||
|
this.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.document = $( element.style ?
|
||||||
|
// element within the document
|
||||||
|
element.ownerDocument :
|
||||||
|
// element is window or document
|
||||||
|
element.document || element );
|
||||||
|
this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
|
||||||
|
}
|
||||||
|
|
||||||
|
this._create();
|
||||||
|
this._trigger( "create", null, this._getCreateEventData() );
|
||||||
|
this._init();
|
||||||
|
},
|
||||||
|
_getCreateOptions: $.noop,
|
||||||
|
_getCreateEventData: $.noop,
|
||||||
|
_create: $.noop,
|
||||||
|
_init: $.noop,
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
this._destroy();
|
||||||
|
// we can probably remove the unbind calls in 2.0
|
||||||
|
// all event bindings should go through this._on()
|
||||||
|
this.element
|
||||||
|
.unbind( this.eventNamespace )
|
||||||
|
// 1.9 BC for #7810
|
||||||
|
// TODO remove dual storage
|
||||||
|
.removeData( this.widgetName )
|
||||||
|
.removeData( this.widgetFullName )
|
||||||
|
// support: jquery <1.6.3
|
||||||
|
// http://bugs.jquery.com/ticket/9413
|
||||||
|
.removeData( $.camelCase( this.widgetFullName ) );
|
||||||
|
this.widget()
|
||||||
|
.unbind( this.eventNamespace )
|
||||||
|
.removeAttr( "aria-disabled" )
|
||||||
|
.removeClass(
|
||||||
|
this.widgetFullName + "-disabled " +
|
||||||
|
"ui-state-disabled" );
|
||||||
|
|
||||||
|
// clean up events and states
|
||||||
|
this.bindings.unbind( this.eventNamespace );
|
||||||
|
this.hoverable.removeClass( "ui-state-hover" );
|
||||||
|
this.focusable.removeClass( "ui-state-focus" );
|
||||||
|
},
|
||||||
|
_destroy: $.noop,
|
||||||
|
|
||||||
|
widget: function() {
|
||||||
|
return this.element;
|
||||||
|
},
|
||||||
|
|
||||||
|
option: function( key, value ) {
|
||||||
|
var options = key,
|
||||||
|
parts,
|
||||||
|
curOption,
|
||||||
|
i;
|
||||||
|
|
||||||
|
if ( arguments.length === 0 ) {
|
||||||
|
// don't return a reference to the internal hash
|
||||||
|
return $.widget.extend( {}, this.options );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( typeof key === "string" ) {
|
||||||
|
// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
|
||||||
|
options = {};
|
||||||
|
parts = key.split( "." );
|
||||||
|
key = parts.shift();
|
||||||
|
if ( parts.length ) {
|
||||||
|
curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
|
||||||
|
for ( i = 0; i < parts.length - 1; i++ ) {
|
||||||
|
curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
|
||||||
|
curOption = curOption[ parts[ i ] ];
|
||||||
|
}
|
||||||
|
key = parts.pop();
|
||||||
|
if ( value === undefined ) {
|
||||||
|
return curOption[ key ] === undefined ? null : curOption[ key ];
|
||||||
|
}
|
||||||
|
curOption[ key ] = value;
|
||||||
|
} else {
|
||||||
|
if ( value === undefined ) {
|
||||||
|
return this.options[ key ] === undefined ? null : this.options[ key ];
|
||||||
|
}
|
||||||
|
options[ key ] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this._setOptions( options );
|
||||||
|
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
_setOptions: function( options ) {
|
||||||
|
var key;
|
||||||
|
|
||||||
|
for ( key in options ) {
|
||||||
|
this._setOption( key, options[ key ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
_setOption: function( key, value ) {
|
||||||
|
this.options[ key ] = value;
|
||||||
|
|
||||||
|
if ( key === "disabled" ) {
|
||||||
|
this.widget()
|
||||||
|
.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
|
||||||
|
.attr( "aria-disabled", value );
|
||||||
|
this.hoverable.removeClass( "ui-state-hover" );
|
||||||
|
this.focusable.removeClass( "ui-state-focus" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
enable: function() {
|
||||||
|
return this._setOption( "disabled", false );
|
||||||
|
},
|
||||||
|
disable: function() {
|
||||||
|
return this._setOption( "disabled", true );
|
||||||
|
},
|
||||||
|
|
||||||
|
_on: function( suppressDisabledCheck, element, handlers ) {
|
||||||
|
var delegateElement,
|
||||||
|
instance = this;
|
||||||
|
|
||||||
|
// no suppressDisabledCheck flag, shuffle arguments
|
||||||
|
if ( typeof suppressDisabledCheck !== "boolean" ) {
|
||||||
|
handlers = element;
|
||||||
|
element = suppressDisabledCheck;
|
||||||
|
suppressDisabledCheck = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no element argument, shuffle and use this.element
|
||||||
|
if ( !handlers ) {
|
||||||
|
handlers = element;
|
||||||
|
element = this.element;
|
||||||
|
delegateElement = this.widget();
|
||||||
|
} else {
|
||||||
|
// accept selectors, DOM elements
|
||||||
|
element = delegateElement = $( element );
|
||||||
|
this.bindings = this.bindings.add( element );
|
||||||
|
}
|
||||||
|
|
||||||
|
$.each( handlers, function( event, handler ) {
|
||||||
|
function handlerProxy() {
|
||||||
|
// allow widgets to customize the disabled handling
|
||||||
|
// - disabled as an array instead of boolean
|
||||||
|
// - disabled class as method for disabling individual parts
|
||||||
|
if ( !suppressDisabledCheck &&
|
||||||
|
( instance.options.disabled === true ||
|
||||||
|
$( this ).hasClass( "ui-state-disabled" ) ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return ( typeof handler === "string" ? instance[ handler ] : handler )
|
||||||
|
.apply( instance, arguments );
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy the guid so direct unbinding works
|
||||||
|
if ( typeof handler !== "string" ) {
|
||||||
|
handlerProxy.guid = handler.guid =
|
||||||
|
handler.guid || handlerProxy.guid || $.guid++;
|
||||||
|
}
|
||||||
|
|
||||||
|
var match = event.match( /^(\w+)\s*(.*)$/ ),
|
||||||
|
eventName = match[1] + instance.eventNamespace,
|
||||||
|
selector = match[2];
|
||||||
|
if ( selector ) {
|
||||||
|
delegateElement.delegate( selector, eventName, handlerProxy );
|
||||||
|
} else {
|
||||||
|
element.bind( eventName, handlerProxy );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_off: function( element, eventName ) {
|
||||||
|
eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
|
||||||
|
element.unbind( eventName ).undelegate( eventName );
|
||||||
|
},
|
||||||
|
|
||||||
|
_delay: function( handler, delay ) {
|
||||||
|
function handlerProxy() {
|
||||||
|
return ( typeof handler === "string" ? instance[ handler ] : handler )
|
||||||
|
.apply( instance, arguments );
|
||||||
|
}
|
||||||
|
var instance = this;
|
||||||
|
return setTimeout( handlerProxy, delay || 0 );
|
||||||
|
},
|
||||||
|
|
||||||
|
_hoverable: function( element ) {
|
||||||
|
this.hoverable = this.hoverable.add( element );
|
||||||
|
this._on( element, {
|
||||||
|
mouseenter: function( event ) {
|
||||||
|
$( event.currentTarget ).addClass( "ui-state-hover" );
|
||||||
|
},
|
||||||
|
mouseleave: function( event ) {
|
||||||
|
$( event.currentTarget ).removeClass( "ui-state-hover" );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_focusable: function( element ) {
|
||||||
|
this.focusable = this.focusable.add( element );
|
||||||
|
this._on( element, {
|
||||||
|
focusin: function( event ) {
|
||||||
|
$( event.currentTarget ).addClass( "ui-state-focus" );
|
||||||
|
},
|
||||||
|
focusout: function( event ) {
|
||||||
|
$( event.currentTarget ).removeClass( "ui-state-focus" );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_trigger: function( type, event, data ) {
|
||||||
|
var prop, orig,
|
||||||
|
callback = this.options[ type ];
|
||||||
|
|
||||||
|
data = data || {};
|
||||||
|
event = $.Event( event );
|
||||||
|
event.type = ( type === this.widgetEventPrefix ?
|
||||||
|
type :
|
||||||
|
this.widgetEventPrefix + type ).toLowerCase();
|
||||||
|
// the original event may come from any element
|
||||||
|
// so we need to reset the target on the new event
|
||||||
|
event.target = this.element[ 0 ];
|
||||||
|
|
||||||
|
// copy original event properties over to the new event
|
||||||
|
orig = event.originalEvent;
|
||||||
|
if ( orig ) {
|
||||||
|
for ( prop in orig ) {
|
||||||
|
if ( !( prop in event ) ) {
|
||||||
|
event[ prop ] = orig[ prop ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.element.trigger( event, data );
|
||||||
|
return !( $.isFunction( callback ) &&
|
||||||
|
callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
|
||||||
|
event.isDefaultPrevented() );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
|
||||||
|
$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
|
||||||
|
if ( typeof options === "string" ) {
|
||||||
|
options = { effect: options };
|
||||||
|
}
|
||||||
|
var hasOptions,
|
||||||
|
effectName = !options ?
|
||||||
|
method :
|
||||||
|
options === true || typeof options === "number" ?
|
||||||
|
defaultEffect :
|
||||||
|
options.effect || defaultEffect;
|
||||||
|
options = options || {};
|
||||||
|
if ( typeof options === "number" ) {
|
||||||
|
options = { duration: options };
|
||||||
|
}
|
||||||
|
hasOptions = !$.isEmptyObject( options );
|
||||||
|
options.complete = callback;
|
||||||
|
if ( options.delay ) {
|
||||||
|
element.delay( options.delay );
|
||||||
|
}
|
||||||
|
if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
|
||||||
|
element[ method ]( options );
|
||||||
|
} else if ( effectName !== method && element[ effectName ] ) {
|
||||||
|
element[ effectName ]( options.duration, options.easing, callback );
|
||||||
|
} else {
|
||||||
|
element.queue(function( next ) {
|
||||||
|
$( this )[ method ]();
|
||||||
|
if ( callback ) {
|
||||||
|
callback.call( element[ 0 ] );
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
}));
|
3137
app/assets/javascripts/vendor/select2.min.js
vendored
Executable file
3137
app/assets/javascripts/vendor/select2.min.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1
app/assets/javascripts/vendor/tmpl.min.js
vendored
Normal file
1
app/assets/javascripts/vendor/tmpl.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
(function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?![^%]*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){if(b)return{"\n":"\\n","\r":"\\r","\t":"\\t"," ":" "}[a]||"\\"+a;if(c)return c==="="?"'+_e("+d+")+'":"'+("+d+"||'')+'";if(e)return"';";if(f)return"_s+='"},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"<",">":">","&":"&",'"':""","'":"'"},b.encode=function(a){return String(a||"").replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e&&(s||'')||_e(s);},include=function(s,d){_s+=tmpl(s,d);}",typeof define=="function"&&define.amd?define(function(){return b}):a.tmpl=b})(this);
|
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
@import "bootstrap";
|
@import "bootstrap";
|
||||||
|
|
||||||
@import "fontawesome/font-awesome";
|
@import "fontawesome/font-awesome";
|
||||||
@ -7,6 +5,7 @@
|
|||||||
@import "redactor";
|
@import "redactor";
|
||||||
@import "pane_hover";
|
@import "pane_hover";
|
||||||
@import "vendor/select2";
|
@import "vendor/select2";
|
||||||
|
|
||||||
@import "admin/sheets";
|
@import "admin/sheets";
|
||||||
@import "admin/topics";
|
@import "admin/topics";
|
||||||
@import "admin/uploads";
|
@import "admin/uploads";
|
||||||
@ -821,3 +820,15 @@ padding:0 10px;
|
|||||||
height:auto !important;
|
height:auto !important;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.select2-container.form-control{
|
||||||
|
|
||||||
|
padding: 0px;
|
||||||
|
border: 0px;
|
||||||
|
border-radius: 0;
|
||||||
|
height: auto;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
//
|
|
||||||
// Accordion
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Parent container
|
|
||||||
.accordion {
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Group == heading + body
|
|
||||||
.accordion-group {
|
|
||||||
margin-bottom: 2px;
|
|
||||||
border: 1px solid #e5e5e5;
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
.accordion-heading {
|
|
||||||
border-bottom: 0;
|
|
||||||
}
|
|
||||||
.accordion-heading .accordion-toggle {
|
|
||||||
display: block;
|
|
||||||
padding: 8px 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// General toggle styles
|
|
||||||
.accordion-toggle {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inner needs the styles because you can't animate properly with any styles on the element
|
|
||||||
.accordion-inner {
|
|
||||||
padding: 9px 15px;
|
|
||||||
border-top: 1px solid #e5e5e5;
|
|
||||||
}
|
|
@ -1,79 +0,0 @@
|
|||||||
//
|
|
||||||
// Alerts
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Base styles
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.alert {
|
|
||||||
padding: 8px 35px 8px 14px;
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
text-shadow: 0 1px 0 rgba(255,255,255,.5);
|
|
||||||
background-color: @warningBackground;
|
|
||||||
border: 1px solid @warningBorder;
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
.alert,
|
|
||||||
.alert h4 {
|
|
||||||
// Specified for the h4 to prevent conflicts of changing @headingsColor
|
|
||||||
color: @warningText;
|
|
||||||
}
|
|
||||||
.alert h4 {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adjust close link position
|
|
||||||
.alert .close {
|
|
||||||
position: relative;
|
|
||||||
top: -2px;
|
|
||||||
right: -21px;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Alternate styles
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.alert-success {
|
|
||||||
background-color: @successBackground;
|
|
||||||
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 {
|
|
||||||
background-color: @infoBackground;
|
|
||||||
border-color: @infoBorder;
|
|
||||||
color: @infoText;
|
|
||||||
}
|
|
||||||
.alert-info h4 {
|
|
||||||
color: @infoText;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Bootstrap v2.3.2
|
|
||||||
*
|
|
||||||
* 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 "variables.less"; // Modify this for custom colors, font-sizes, etc
|
|
||||||
@import "mixins.less";
|
|
||||||
|
|
||||||
// CSS Reset
|
|
||||||
@import "reset.less";
|
|
||||||
|
|
||||||
// Grid system and page structure
|
|
||||||
@import "scaffolding.less";
|
|
||||||
@import "grid.less";
|
|
||||||
@import "layouts.less";
|
|
||||||
|
|
||||||
// Base CSS
|
|
||||||
@import "type.less";
|
|
||||||
@import "code.less";
|
|
||||||
@import "formt.less";
|
|
||||||
@import "forms.less";
|
|
||||||
@import "tables.less";
|
|
||||||
|
|
||||||
// Components: common
|
|
||||||
@import "sprites.less";
|
|
||||||
@import "dropdowns.less";
|
|
||||||
@import "wells.less";
|
|
||||||
@import "component-animations.less";
|
|
||||||
@import "close.less";
|
|
||||||
|
|
||||||
// Components: Buttons & Alerts
|
|
||||||
@import "buttons.less";
|
|
||||||
@import "button-groups.less";
|
|
||||||
@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less
|
|
||||||
|
|
||||||
// Components: Nav
|
|
||||||
@import "navs.less";
|
|
||||||
@import "navbar.less";
|
|
||||||
@import "breadcrumbs.less";
|
|
||||||
@import "pagination.less";
|
|
||||||
@import "pager.less";
|
|
||||||
|
|
||||||
// Components: Popovers
|
|
||||||
@import "modals.less";
|
|
||||||
@import "tooltip.less";
|
|
||||||
@import "popovers.less";
|
|
||||||
|
|
||||||
// Components: Misc
|
|
||||||
@import "thumbnails.less";
|
|
||||||
@import "media.less";
|
|
||||||
@import "labels-badges.less";
|
|
||||||
@import "progress-bars.less";
|
|
||||||
@import "accordion.less";
|
|
||||||
@import "carousel.less";
|
|
||||||
@import "hero-unit.less";
|
|
||||||
|
|
||||||
// Utility classes
|
|
||||||
@import "utilities.less"; // Has to be last to override when necessary
|
|
||||||
|
|
||||||
|
|
||||||
@import "slider.less";
|
|
@ -1,24 +0,0 @@
|
|||||||
//
|
|
||||||
// Breadcrumbs
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.breadcrumb {
|
|
||||||
padding: 8px 15px;
|
|
||||||
margin: 0 0 @baseLineHeight;
|
|
||||||
list-style: none;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
> li {
|
|
||||||
display: inline-block;
|
|
||||||
.ie7-inline-block();
|
|
||||||
text-shadow: 0 1px 0 @white;
|
|
||||||
> .divider {
|
|
||||||
padding: 0 5px;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
> .active {
|
|
||||||
color: @grayLight;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,229 +0,0 @@
|
|||||||
//
|
|
||||||
// Button groups
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Make the div behave like a button
|
|
||||||
.btn-group {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
.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
|
|
||||||
white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page)
|
|
||||||
.ie7-restore-left-whitespace();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Space out series of button groups
|
|
||||||
.btn-group + .btn-group {
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Optional: Group multiple button groups together for a toolbar
|
|
||||||
.btn-toolbar {
|
|
||||||
font-size: 0; // Hack to remove whitespace that results from using inline-block
|
|
||||||
margin-top: @baseLineHeight / 2;
|
|
||||||
margin-bottom: @baseLineHeight / 2;
|
|
||||||
> .btn + .btn,
|
|
||||||
> .btn-group + .btn,
|
|
||||||
> .btn + .btn-group {
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float them, remove border radius, then re-add to first and last elements
|
|
||||||
.btn-group > .btn {
|
|
||||||
position: relative;
|
|
||||||
.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-mini {
|
|
||||||
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
|
|
||||||
.btn-group > .btn:first-child {
|
|
||||||
margin-left: 0;
|
|
||||||
.border-top-left-radius(@baseBorderRadius);
|
|
||||||
.border-bottom-left-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
|
|
||||||
.btn-group > .btn:last-child,
|
|
||||||
.btn-group > .dropdown-toggle {
|
|
||||||
.border-top-right-radius(@baseBorderRadius);
|
|
||||||
.border-bottom-right-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
// Reset corners for large buttons
|
|
||||||
.btn-group > .btn.large:first-child {
|
|
||||||
margin-left: 0;
|
|
||||||
.border-top-left-radius(@borderRadiusLarge);
|
|
||||||
.border-bottom-left-radius(@borderRadiusLarge);
|
|
||||||
}
|
|
||||||
.btn-group > .btn.large:last-child,
|
|
||||||
.btn-group > .large.dropdown-toggle {
|
|
||||||
.border-top-right-radius(@borderRadiusLarge);
|
|
||||||
.border-bottom-right-radius(@borderRadiusLarge);
|
|
||||||
}
|
|
||||||
|
|
||||||
// On hover/focus/active, bring the proper btn to front
|
|
||||||
.btn-group > .btn:hover,
|
|
||||||
.btn-group > .btn:focus,
|
|
||||||
.btn-group > .btn:active,
|
|
||||||
.btn-group > .btn.active {
|
|
||||||
z-index: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// On active and open, don't show outline
|
|
||||||
.btn-group .dropdown-toggle:active,
|
|
||||||
.btn-group.open .dropdown-toggle {
|
|
||||||
outline: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Split button dropdowns
|
|
||||||
// ----------------------
|
|
||||||
|
|
||||||
// Give the line between buttons some depth
|
|
||||||
.btn-group > .btn + .dropdown-toggle {
|
|
||||||
padding-left: 8px;
|
|
||||||
padding-right: 8px;
|
|
||||||
.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 {
|
|
||||||
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-right: 12px;
|
|
||||||
*padding-top: 7px;
|
|
||||||
*padding-bottom: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-group.open {
|
|
||||||
|
|
||||||
// The clickable button for toggling the menu
|
|
||||||
// Remove the gradient and set the same inset shadow as the :active state
|
|
||||||
.dropdown-toggle {
|
|
||||||
background-image: none;
|
|
||||||
.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
|
|
||||||
.btn.dropdown-toggle {
|
|
||||||
background-color: @btnBackgroundHighlight;
|
|
||||||
}
|
|
||||||
.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
|
|
||||||
.btn .caret {
|
|
||||||
margin-top: 8px;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
// Carets in other button sizes
|
|
||||||
.btn-large .caret {
|
|
||||||
margin-top: 6px;
|
|
||||||
}
|
|
||||||
.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
|
|
||||||
.dropup .btn-large .caret {
|
|
||||||
border-bottom-width: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 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
|
|
||||||
// ----------------------
|
|
||||||
|
|
||||||
.btn-group-vertical {
|
|
||||||
display: inline-block; // makes buttons only take up the width they need
|
|
||||||
.ie7-inline-block();
|
|
||||||
}
|
|
||||||
.btn-group-vertical > .btn {
|
|
||||||
display: block;
|
|
||||||
float: none;
|
|
||||||
max-width: 100%;
|
|
||||||
.border-radius(0);
|
|
||||||
}
|
|
||||||
.btn-group-vertical > .btn + .btn {
|
|
||||||
margin-left: 0;
|
|
||||||
margin-top: -1px;
|
|
||||||
}
|
|
||||||
.btn-group-vertical > .btn:first-child {
|
|
||||||
.border-radius(@baseBorderRadius @baseBorderRadius 0 0);
|
|
||||||
}
|
|
||||||
.btn-group-vertical > .btn:last-child {
|
|
||||||
.border-radius(0 0 @baseBorderRadius @baseBorderRadius);
|
|
||||||
}
|
|
||||||
.btn-group-vertical > .btn-large:first-child {
|
|
||||||
.border-radius(@borderRadiusLarge @borderRadiusLarge 0 0);
|
|
||||||
}
|
|
||||||
.btn-group-vertical > .btn-large:last-child {
|
|
||||||
.border-radius(0 0 @borderRadiusLarge @borderRadiusLarge);
|
|
||||||
}
|
|
@ -1,228 +0,0 @@
|
|||||||
//
|
|
||||||
// Buttons
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Base styles
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Core
|
|
||||||
.btn {
|
|
||||||
display: inline-block;
|
|
||||||
.ie7-inline-block();
|
|
||||||
padding: 4px 12px;
|
|
||||||
margin-bottom: 0; // For input.btn
|
|
||||||
font-size: @baseFontSize;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: middle;
|
|
||||||
cursor: pointer;
|
|
||||||
.buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75));
|
|
||||||
border: 1px solid @btnBorder;
|
|
||||||
*border: 0; // Remove the border to prevent IE7's black border on input:focus
|
|
||||||
border-bottom-color: darken(@btnBorder, 10%);
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
.ie7-restore-left-whitespace(); // Give IE7 some love
|
|
||||||
.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
|
|
||||||
.transition(background-position .1s linear);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Focus state for keyboard and accessibility
|
|
||||||
&:focus {
|
|
||||||
.tab-focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Active state
|
|
||||||
&.active,
|
|
||||||
&:active {
|
|
||||||
background-image: none;
|
|
||||||
outline: 0;
|
|
||||||
.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;
|
|
||||||
.opacity(65);
|
|
||||||
.box-shadow(none);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Button Sizes
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Large
|
|
||||||
.btn-large {
|
|
||||||
padding: @paddingLarge;
|
|
||||||
font-size: @fontSizeLarge;
|
|
||||||
.border-radius(@borderRadiusLarge);
|
|
||||||
}
|
|
||||||
.btn-large [class^="icon-"],
|
|
||||||
.btn-large [class*=" icon-"] {
|
|
||||||
margin-top: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Small
|
|
||||||
.btn-small {
|
|
||||||
padding: @paddingSmall;
|
|
||||||
font-size: @fontSizeSmall;
|
|
||||||
.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;
|
|
||||||
.border-radius(@borderRadiusSmall);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Block button
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.btn-block {
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
padding-left: 0;
|
|
||||||
padding-right: 0;
|
|
||||||
.box-sizing(border-box);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vertically space out multiple block buttons
|
|
||||||
.btn-block + .btn-block {
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Specificity overrides
|
|
||||||
input[type="submit"],
|
|
||||||
input[type="reset"],
|
|
||||||
input[type="button"] {
|
|
||||||
&.btn-block {
|
|
||||||
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 {
|
|
||||||
.buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight);
|
|
||||||
}
|
|
||||||
// Warning appears are orange
|
|
||||||
.btn-warning {
|
|
||||||
.buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight);
|
|
||||||
}
|
|
||||||
// Danger and error appear as red
|
|
||||||
.btn-danger {
|
|
||||||
.buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight);
|
|
||||||
}
|
|
||||||
// Success appears as green
|
|
||||||
.btn-success {
|
|
||||||
.buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight);
|
|
||||||
}
|
|
||||||
// Info appears as a neutral blue
|
|
||||||
.btn-info {
|
|
||||||
.buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight);
|
|
||||||
}
|
|
||||||
// Inverse appears as dark gray
|
|
||||||
.btn-inverse {
|
|
||||||
.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;
|
|
||||||
.box-shadow(none);
|
|
||||||
}
|
|
||||||
.btn-link {
|
|
||||||
border-color: transparent;
|
|
||||||
cursor: pointer;
|
|
||||||
color: @linkColor;
|
|
||||||
.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;
|
|
||||||
}
|
|
@ -1,158 +0,0 @@
|
|||||||
//
|
|
||||||
// Carousel
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.carousel {
|
|
||||||
position: relative;
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.carousel-inner {
|
|
||||||
overflow: hidden;
|
|
||||||
width: 100%;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.carousel-inner {
|
|
||||||
|
|
||||||
> .item {
|
|
||||||
display: none;
|
|
||||||
position: relative;
|
|
||||||
.transition(.6s ease-in-out left);
|
|
||||||
|
|
||||||
// Account for jankitude on images
|
|
||||||
> img,
|
|
||||||
> a > img {
|
|
||||||
display: block;
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> .active,
|
|
||||||
> .next,
|
|
||||||
> .prev { display: block; }
|
|
||||||
|
|
||||||
> .active {
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
> .next,
|
|
||||||
> .prev {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
> .next {
|
|
||||||
left: 100%;
|
|
||||||
}
|
|
||||||
> .prev {
|
|
||||||
left: -100%;
|
|
||||||
}
|
|
||||||
> .next.left,
|
|
||||||
> .prev.right {
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
> .active.left {
|
|
||||||
left: -100%;
|
|
||||||
}
|
|
||||||
> .active.right {
|
|
||||||
left: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Left/right controls for nav
|
|
||||||
// ---------------------------
|
|
||||||
|
|
||||||
.carousel-control {
|
|
||||||
position: absolute;
|
|
||||||
top: 40%;
|
|
||||||
left: 15px;
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
margin-top: -20px;
|
|
||||||
font-size: 60px;
|
|
||||||
font-weight: 100;
|
|
||||||
line-height: 30px;
|
|
||||||
color: @white;
|
|
||||||
text-align: center;
|
|
||||||
background: @grayDarker;
|
|
||||||
border: 3px solid @white;
|
|
||||||
.border-radius(23px);
|
|
||||||
.opacity(50);
|
|
||||||
|
|
||||||
// we can't have this transition here
|
|
||||||
// because webkit cancels the carousel
|
|
||||||
// animation if you trip this while
|
|
||||||
// in the middle of another animation
|
|
||||||
// ;_;
|
|
||||||
// .transition(opacity .2s linear);
|
|
||||||
|
|
||||||
// Reposition the right one
|
|
||||||
&.right {
|
|
||||||
left: auto;
|
|
||||||
right: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hover/focus state
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
color: @white;
|
|
||||||
text-decoration: none;
|
|
||||||
.opacity(90);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carousel indicator pips
|
|
||||||
// -----------------------------
|
|
||||||
.carousel-indicators {
|
|
||||||
position: absolute;
|
|
||||||
top: 15px;
|
|
||||||
right: 15px;
|
|
||||||
z-index: 5;
|
|
||||||
margin: 0;
|
|
||||||
list-style: none;
|
|
||||||
|
|
||||||
li {
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
width: 10px;
|
|
||||||
height: 10px;
|
|
||||||
margin-left: 5px;
|
|
||||||
text-indent: -999px;
|
|
||||||
background-color: #ccc;
|
|
||||||
background-color: rgba(255,255,255,.25);
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
.active {
|
|
||||||
background-color: #fff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Caption for text below images
|
|
||||||
// -----------------------------
|
|
||||||
|
|
||||||
.carousel-caption {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
padding: 15px;
|
|
||||||
background: @grayDark;
|
|
||||||
background: rgba(0,0,0,.75);
|
|
||||||
}
|
|
||||||
.carousel-caption h4,
|
|
||||||
.carousel-caption p {
|
|
||||||
color: @white;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
}
|
|
||||||
.carousel-caption h4 {
|
|
||||||
margin: 0 0 5px;
|
|
||||||
}
|
|
||||||
.carousel-caption p {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
//
|
|
||||||
// Close icons
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.close {
|
|
||||||
float: right;
|
|
||||||
font-size: 20px;
|
|
||||||
font-weight: bold;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
color: @black;
|
|
||||||
text-shadow: 0 1px 0 rgba(255,255,255,1);
|
|
||||||
.opacity(20);
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
color: @black;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
.opacity(40);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Additional properties for button version
|
|
||||||
// iOS requires the button element instead of an anchor tag.
|
|
||||||
// If you want the anchor version, it requires `href="#"`.
|
|
||||||
button.close {
|
|
||||||
padding: 0;
|
|
||||||
cursor: pointer;
|
|
||||||
background: transparent;
|
|
||||||
border: 0;
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
@ -1,61 +0,0 @@
|
|||||||
//
|
|
||||||
// Code (inline and blocK)
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Inline and block code styles
|
|
||||||
code,
|
|
||||||
pre {
|
|
||||||
padding: 0 3px 2px;
|
|
||||||
#font > #family > .monospace;
|
|
||||||
font-size: @baseFontSize - 2;
|
|
||||||
color: @grayDark;
|
|
||||||
.border-radius(3px);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inline code
|
|
||||||
code {
|
|
||||||
padding: 2px 4px;
|
|
||||||
color: #d14;
|
|
||||||
background-color: #f7f7f9;
|
|
||||||
border: 1px solid #e1e1e8;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Blocks of code
|
|
||||||
pre {
|
|
||||||
display: block;
|
|
||||||
padding: (@baseLineHeight - 1) / 2;
|
|
||||||
margin: 0 0 @baseLineHeight / 2;
|
|
||||||
font-size: @baseFontSize - 1; // 14px to 13px
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
word-break: break-all;
|
|
||||||
word-wrap: break-word;
|
|
||||||
white-space: pre;
|
|
||||||
white-space: pre-wrap;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
border: 1px solid #ccc; // fallback for IE7-8
|
|
||||||
border: 1px solid rgba(0,0,0,.15);
|
|
||||||
.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
|
|
||||||
code {
|
|
||||||
padding: 0;
|
|
||||||
color: inherit;
|
|
||||||
white-space: pre;
|
|
||||||
white-space: pre-wrap;
|
|
||||||
background-color: transparent;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable scrollable blocks of code
|
|
||||||
.pre-scrollable {
|
|
||||||
max-height: 340px;
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
//
|
|
||||||
// Component animations
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.fade {
|
|
||||||
opacity: 0;
|
|
||||||
.transition(opacity .15s linear);
|
|
||||||
&.in {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.collapse {
|
|
||||||
position: relative;
|
|
||||||
height: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
.transition(height .35s ease);
|
|
||||||
&.in {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,248 +0,0 @@
|
|||||||
//
|
|
||||||
// Dropdown menus
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// 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
|
|
||||||
// --------------------
|
|
||||||
.caret {
|
|
||||||
display: inline-block;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
vertical-align: top;
|
|
||||||
border-top: 4px solid @black;
|
|
||||||
border-right: 4px solid transparent;
|
|
||||||
border-left: 4px solid transparent;
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Place the caret
|
|
||||||
.dropdown .caret {
|
|
||||||
margin-top: 8px;
|
|
||||||
margin-left: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The dropdown menu (ul)
|
|
||||||
// ----------------------
|
|
||||||
.dropdown-menu {
|
|
||||||
position: absolute;
|
|
||||||
top: 100%;
|
|
||||||
left: 0;
|
|
||||||
z-index: @zindexDropdown;
|
|
||||||
display: none; // none by default, but block on "open" of the menu
|
|
||||||
float: left;
|
|
||||||
min-width: 160px;
|
|
||||||
padding: 5px 0;
|
|
||||||
margin: 2px 0 0; // override default ul
|
|
||||||
list-style: none;
|
|
||||||
background-color: @dropdownBackground;
|
|
||||||
border: 1px solid #ccc; // Fallback for IE7-8
|
|
||||||
border: 1px solid @dropdownBorder;
|
|
||||||
*border-right-width: 2px;
|
|
||||||
*border-bottom-width: 2px;
|
|
||||||
.border-radius(6px);
|
|
||||||
.box-shadow(0 5px 10px rgba(0,0,0,.2));
|
|
||||||
-webkit-background-clip: padding-box;
|
|
||||||
-moz-background-clip: padding;
|
|
||||||
background-clip: padding-box;
|
|
||||||
|
|
||||||
// Aligns the dropdown menu to right
|
|
||||||
&.pull-right {
|
|
||||||
right: 0;
|
|
||||||
left: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dividers (basically an hr) within the dropdown
|
|
||||||
.divider {
|
|
||||||
.nav-divider(@dropdownDividerTop, @dropdownDividerBottom);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Links within the dropdown menu
|
|
||||||
> li > a {
|
|
||||||
display: block;
|
|
||||||
padding: 3px 20px;
|
|
||||||
clear: both;
|
|
||||||
font-weight: normal;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
color: @dropdownLinkColor;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hover/Focus state
|
|
||||||
// -----------
|
|
||||||
.dropdown-menu > li > a:hover,
|
|
||||||
.dropdown-menu > li > a:focus,
|
|
||||||
.dropdown-submenu:hover > a,
|
|
||||||
.dropdown-submenu:focus > a {
|
|
||||||
text-decoration: none;
|
|
||||||
color: @dropdownLinkColorHover;
|
|
||||||
#gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Active state
|
|
||||||
// ------------
|
|
||||||
.dropdown-menu > .active > a,
|
|
||||||
.dropdown-menu > .active > a:hover,
|
|
||||||
.dropdown-menu > .active > a:focus {
|
|
||||||
color: @dropdownLinkColorActive;
|
|
||||||
text-decoration: none;
|
|
||||||
outline: 0;
|
|
||||||
#gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disabled state
|
|
||||||
// --------------
|
|
||||||
// Gray out text and ensure the hover/focus state remains gray
|
|
||||||
.dropdown-menu > .disabled > a,
|
|
||||||
.dropdown-menu > .disabled > a:hover,
|
|
||||||
.dropdown-menu > .disabled > a:focus {
|
|
||||||
color: @grayLight;
|
|
||||||
}
|
|
||||||
// Nuke hover/focus effects
|
|
||||||
.dropdown-menu > .disabled > a:hover,
|
|
||||||
.dropdown-menu > .disabled > a:focus {
|
|
||||||
text-decoration: none;
|
|
||||||
background-color: transparent;
|
|
||||||
background-image: none; // Remove CSS gradient
|
|
||||||
.reset-filter();
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open state for the dropdown
|
|
||||||
// ---------------------------
|
|
||||||
.open {
|
|
||||||
// IE7's z-index only goes to the nearest positioned ancestor, which would
|
|
||||||
// make the menu appear below buttons that appeared later on the page
|
|
||||||
*z-index: @zindexDropdown;
|
|
||||||
|
|
||||||
& > .dropdown-menu {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Backdrop to catch body clicks on mobile, etc.
|
|
||||||
// ---------------------------
|
|
||||||
.dropdown-backdrop {
|
|
||||||
position: fixed;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
top: 0;
|
|
||||||
z-index: @zindexDropdown - 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Right aligned dropdowns
|
|
||||||
// ---------------------------
|
|
||||||
.pull-right > .dropdown-menu {
|
|
||||||
right: 0;
|
|
||||||
left: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allow for dropdowns to go bottom up (aka, dropup-menu)
|
|
||||||
// ------------------------------------------------------
|
|
||||||
// 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?
|
|
||||||
.dropup,
|
|
||||||
.navbar-fixed-bottom .dropdown {
|
|
||||||
// Reverse the caret
|
|
||||||
.caret {
|
|
||||||
border-top: 0;
|
|
||||||
border-bottom: 4px solid @black;
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
// Different positioning for bottom up menu
|
|
||||||
.dropdown-menu {
|
|
||||||
top: auto;
|
|
||||||
bottom: 100%;
|
|
||||||
margin-bottom: 1px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sub menus
|
|
||||||
// ---------------------------
|
|
||||||
.dropdown-submenu {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
// Default dropdowns
|
|
||||||
.dropdown-submenu > .dropdown-menu {
|
|
||||||
top: 0;
|
|
||||||
left: 100%;
|
|
||||||
margin-top: -6px;
|
|
||||||
margin-left: -1px;
|
|
||||||
.border-radius(0 6px 6px 6px);
|
|
||||||
}
|
|
||||||
.dropdown-submenu:hover > .dropdown-menu {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dropups
|
|
||||||
.dropup .dropdown-submenu > .dropdown-menu {
|
|
||||||
top: auto;
|
|
||||||
bottom: 0;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: -2px;
|
|
||||||
.border-radius(5px 5px 5px 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Caret to indicate there is a submenu
|
|
||||||
.dropdown-submenu > a:after {
|
|
||||||
display: block;
|
|
||||||
content: " ";
|
|
||||||
float: right;
|
|
||||||
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;
|
|
||||||
.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
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
}
|
|
@ -1,695 +0,0 @@
|
|||||||
//
|
|
||||||
// Forms
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// GENERAL STYLES
|
|
||||||
// --------------
|
|
||||||
|
|
||||||
// Make all forms have space below them
|
|
||||||
form {
|
|
||||||
margin: 0 0 @baseLineHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Groups of fields with labels on top (legends)
|
|
||||||
legend {
|
|
||||||
display: block;
|
|
||||||
// width: 100%;
|
|
||||||
padding: 0;
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
font-size: @baseFontSize * 1.5;
|
|
||||||
line-height: @baseLineHeight * 2;
|
|
||||||
color: @grayDark;
|
|
||||||
border: 0;
|
|
||||||
border-bottom: 1px solid #e5e5e5;
|
|
||||||
|
|
||||||
// Small
|
|
||||||
small {
|
|
||||||
font-size: @baseLineHeight * .75;
|
|
||||||
color: @grayLight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set font for forms
|
|
||||||
label,
|
|
||||||
input,
|
|
||||||
button,
|
|
||||||
select,
|
|
||||||
textarea {
|
|
||||||
#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 {
|
|
||||||
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"],
|
|
||||||
.input-style,
|
|
||||||
.uneditable-input {
|
|
||||||
display: inline-block;
|
|
||||||
height: @baseLineHeight;
|
|
||||||
padding: 4px 6px;
|
|
||||||
margin-bottom: @baseLineHeight / 2;
|
|
||||||
font-size: @baseFontSize;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
color: @gray;
|
|
||||||
.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"],
|
|
||||||
.input-style,
|
|
||||||
.uneditable-input {
|
|
||||||
background-color: @inputBackground;
|
|
||||||
border: 1px solid @inputBorder;
|
|
||||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
|
|
||||||
.transition(~"border linear .2s, box-shadow linear .2s");
|
|
||||||
|
|
||||||
// Focus state
|
|
||||||
&:focus {
|
|
||||||
border-color: rgba(82,168,236,.8);
|
|
||||||
outline: 0;
|
|
||||||
outline: thin dotted \9; /* IE6-9 */
|
|
||||||
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Position radios and checkboxes better
|
|
||||||
input[type="radio"],
|
|
||||||
input[type="checkbox"] {
|
|
||||||
margin: 4px 0 0;
|
|
||||||
*margin-top: 0; /* IE7 */
|
|
||||||
margin-top: 1px \9; /* IE8-9 */
|
|
||||||
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
|
|
||||||
select,
|
|
||||||
input[type="file"] {
|
|
||||||
height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */
|
|
||||||
*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
|
|
||||||
select[multiple],
|
|
||||||
select[size] {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Focus for select, file, radio, and checkbox
|
|
||||||
select:focus,
|
|
||||||
input[type="file"]:focus,
|
|
||||||
input[type="radio"]:focus,
|
|
||||||
input[type="checkbox"]:focus {
|
|
||||||
.tab-focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Uneditable inputs
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
// Make uneditable inputs look inactive
|
|
||||||
.uneditable-input,
|
|
||||||
.uneditable-textarea {
|
|
||||||
color: @grayLight;
|
|
||||||
background-color: darken(@inputBackground, 1%);
|
|
||||||
border-color: @inputBorder;
|
|
||||||
.box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
|
|
||||||
// For text that needs to appear as an input but should not be an input
|
|
||||||
.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
|
|
||||||
.uneditable-textarea {
|
|
||||||
width: auto;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Placeholder
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector
|
|
||||||
input,
|
|
||||||
textarea {
|
|
||||||
.placeholder();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// CHECKBOXES & RADIOS
|
|
||||||
// -------------------
|
|
||||||
|
|
||||||
// Indent the labels to position radios/checkboxes as hanging
|
|
||||||
.radio,
|
|
||||||
.checkbox {
|
|
||||||
min-height: @baseLineHeight; // clear the floating input if there is no label text
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
.radio input[type="radio"],
|
|
||||||
.checkbox input[type="checkbox"] {
|
|
||||||
float: left;
|
|
||||||
margin-left: -20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move the options list down to align with labels
|
|
||||||
.controls > .radio:first-child,
|
|
||||||
.controls > .checkbox:first-child {
|
|
||||||
padding-top: 5px; // has to be padding because margin collaspes
|
|
||||||
}
|
|
||||||
|
|
||||||
// Radios and checkboxes on same line
|
|
||||||
// TODO v3: Convert .inline to .control-inline
|
|
||||||
.radio.inline,
|
|
||||||
.checkbox.inline {
|
|
||||||
display: inline-block;
|
|
||||||
padding-top: 5px;
|
|
||||||
margin-bottom: 0;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.radio.inline + .radio.inline,
|
|
||||||
.checkbox.inline + .checkbox.inline {
|
|
||||||
margin-left: 10px; // space out consecutive inline controls
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// INPUT SIZES
|
|
||||||
// -----------
|
|
||||||
|
|
||||||
// General classes for quick sizes
|
|
||||||
/*
|
|
||||||
.input-mini { width: 60px; }
|
|
||||||
.input-small { width: 90px; }
|
|
||||||
.input-medium { width: 150px; }
|
|
||||||
.input-large { width: 210px; }
|
|
||||||
.input-xlarge { width: 270px; }
|
|
||||||
.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
|
|
||||||
#grid > .input(@gridColumnWidth, @gridGutterWidth);
|
|
||||||
|
|
||||||
// Control row for multiple inputs per line
|
|
||||||
.controls-row {
|
|
||||||
.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;
|
|
||||||
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 FIELD FEEDBACK STATES
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
// Warning
|
|
||||||
.control-group.warning {
|
|
||||||
.formFieldState(@warningText, @warningText, @warningBackground);
|
|
||||||
}
|
|
||||||
// Error
|
|
||||||
.control-group.error {
|
|
||||||
.formFieldState(@errorText, @errorText, @errorBackground);
|
|
||||||
}
|
|
||||||
// Success
|
|
||||||
.control-group.success {
|
|
||||||
.formFieldState(@successText, @successText, @successBackground);
|
|
||||||
}
|
|
||||||
// Success
|
|
||||||
.control-group.info {
|
|
||||||
.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%);
|
|
||||||
@shadow: 0 0 6px lighten(#ee5f5b, 20%);
|
|
||||||
.box-shadow(@shadow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// FORM ACTIONS
|
|
||||||
// ------------
|
|
||||||
|
|
||||||
.form-actions {
|
|
||||||
padding: (@baseLineHeight - 1) 20px @baseLineHeight;
|
|
||||||
margin-top: @baseLineHeight;
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
background-color: @formActionsBackground;
|
|
||||||
border-top: 1px solid #e5e5e5;
|
|
||||||
.clearfix(); // Adding clearfix to allow for .pull-right button containers
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// HELP TEXT
|
|
||||||
// ---------
|
|
||||||
|
|
||||||
.help-block,
|
|
||||||
.help-inline {
|
|
||||||
color: lighten(@textColor, 15%); // lighten the text some for contrast
|
|
||||||
}
|
|
||||||
|
|
||||||
.help-block {
|
|
||||||
display: block; // account for any element using help-block
|
|
||||||
margin-bottom: @baseLineHeight / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.help-inline {
|
|
||||||
display: inline-block;
|
|
||||||
.ie7-inline-block();
|
|
||||||
vertical-align: middle;
|
|
||||||
padding-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// INPUT GROUPS
|
|
||||||
// ------------
|
|
||||||
|
|
||||||
// Allow us to put symbols and text within the input field for a cleaner look
|
|
||||||
.input-append,
|
|
||||||
.input-prepend {
|
|
||||||
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,
|
|
||||||
select,
|
|
||||||
.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;
|
|
||||||
.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;
|
|
||||||
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;
|
|
||||||
.border-radius(0);
|
|
||||||
}
|
|
||||||
.active {
|
|
||||||
background-color: lighten(@green, 30);
|
|
||||||
border-color: @green;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-prepend {
|
|
||||||
.add-on,
|
|
||||||
.btn {
|
|
||||||
margin-right: -1px;
|
|
||||||
}
|
|
||||||
.add-on:first-child,
|
|
||||||
.btn:first-child {
|
|
||||||
// FYI, `.btn:first-child` accounts for a button group that's prepended
|
|
||||||
.border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-append {
|
|
||||||
input,
|
|
||||||
select,
|
|
||||||
.uneditable-input {
|
|
||||||
.border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
|
|
||||||
+ .btn-group .btn:last-child {
|
|
||||||
.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 {
|
|
||||||
.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 {
|
|
||||||
.border-radius(0);
|
|
||||||
+ .btn-group .btn {
|
|
||||||
.border-radius(0 @inputBorderRadius @inputBorderRadius 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.add-on:first-child,
|
|
||||||
.btn:first-child {
|
|
||||||
margin-right: -1px;
|
|
||||||
.border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
|
|
||||||
}
|
|
||||||
.add-on:last-child,
|
|
||||||
.btn:last-child {
|
|
||||||
margin-left: -1px;
|
|
||||||
.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
|
|
||||||
.border-radius(15px);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allow for input prepend/append in search forms */
|
|
||||||
.form-search .input-append .search-query,
|
|
||||||
.form-search .input-prepend .search-query {
|
|
||||||
.border-radius(0); // Override due to specificity
|
|
||||||
}
|
|
||||||
.form-search .input-append .search-query {
|
|
||||||
.border-radius(14px 0 0 14px);
|
|
||||||
}
|
|
||||||
.form-search .input-append .btn {
|
|
||||||
.border-radius(0 14px 14px 0);
|
|
||||||
}
|
|
||||||
.form-search .input-prepend .search-query {
|
|
||||||
.border-radius(0 14px 14px 0);
|
|
||||||
}
|
|
||||||
.form-search .input-prepend .btn {
|
|
||||||
.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;
|
|
||||||
.ie7-inline-block();
|
|
||||||
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;
|
|
||||||
margin-bottom: 0;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
// Remove float and margin, set to inline-block
|
|
||||||
.form-search .radio input[type="radio"],
|
|
||||||
.form-search .checkbox input[type="checkbox"],
|
|
||||||
.form-inline .radio input[type="radio"],
|
|
||||||
.form-inline .checkbox input[type="checkbox"] {
|
|
||||||
float: left;
|
|
||||||
margin-right: 3px;
|
|
||||||
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
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.form-horizontal {
|
|
||||||
// Increase spacing between groups
|
|
||||||
.control-group {
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
.clearfix();
|
|
||||||
}
|
|
||||||
// Float the labels left
|
|
||||||
.control-label {
|
|
||||||
float: left;
|
|
||||||
width: @horizontalComponentOffset - 20;
|
|
||||||
padding-top: 5px;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,310 +0,0 @@
|
|||||||
.formtastic{
|
|
||||||
.label, .badge {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0px;
|
|
||||||
font-size: inherit;
|
|
||||||
font-weight: normal;
|
|
||||||
font-family:inherit;
|
|
||||||
line-height: 14px;
|
|
||||||
color:inherit;
|
|
||||||
vertical-align: baseline;
|
|
||||||
white-space: auto;
|
|
||||||
text-shadow: none;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
It's *strongly* suggested that you don't modify this file. Instead, load a new stylesheet after
|
|
||||||
this one in your layouts (eg formtastic_changes.css) and override the styles to suit your needs.
|
|
||||||
This will allow you to update formtastic.css with new releases without clobbering your own changes.
|
|
||||||
|
|
||||||
This stylesheet forms part of the Formtastic Rails Plugin
|
|
||||||
(c) 2008-2011 Justin French
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* NORMALIZE AND RESET - obviously inspired by Yahoo's reset.css, but scoped to just .formtastic
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic,
|
|
||||||
.formtastic ul,
|
|
||||||
.formtastic ol,
|
|
||||||
.formtastic li,
|
|
||||||
.formtastic fieldset,
|
|
||||||
.formtastic legend,
|
|
||||||
.formtastic button,
|
|
||||||
.formtastic textarea,
|
|
||||||
.formtastic select,
|
|
||||||
.formtastic p {
|
|
||||||
margin:0;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic fieldset {
|
|
||||||
border:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic em,
|
|
||||||
.formtastic strong {
|
|
||||||
font-style:normal;
|
|
||||||
font-weight:normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic ol,
|
|
||||||
.formtastic ul {
|
|
||||||
list-style:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic abbr,
|
|
||||||
.formtastic acronym {
|
|
||||||
border:0;
|
|
||||||
font-variant:normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic input,
|
|
||||||
.formtastic button,
|
|
||||||
.formtastic textarea {
|
|
||||||
font-family:sans-serif;
|
|
||||||
font-size:inherit;
|
|
||||||
font-weight:inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic input,
|
|
||||||
.formtastic textarea,
|
|
||||||
.formtastic select {
|
|
||||||
font-size:100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic legend {
|
|
||||||
white-space:normal;
|
|
||||||
color:#000;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* SEMANTIC ERRORS
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .errors {
|
|
||||||
color:#cc0000;
|
|
||||||
margin:0.5em 0 1.5em 25%;
|
|
||||||
list-style:square;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .errors li {
|
|
||||||
padding:0;
|
|
||||||
border:none;
|
|
||||||
display:list-item;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* BUTTONS & ACTIONS
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .buttons,
|
|
||||||
.formtastic .actions {
|
|
||||||
overflow:hidden; /* clear containing floats */
|
|
||||||
padding-left:25%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .button,
|
|
||||||
.formtastic .action {
|
|
||||||
float:left;
|
|
||||||
padding-right:0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .button_action button {
|
|
||||||
padding:3px 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .link_action a {
|
|
||||||
display:block;
|
|
||||||
padding:3px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* INPUTS
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .inputs {
|
|
||||||
overflow:hidden; /* clear containing floats */
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .input {
|
|
||||||
overflow:hidden; /* clear containing floats */
|
|
||||||
padding:0.5em 0; /* padding and negative margin juggling is for Firefox */
|
|
||||||
margin-top:-0.5em;
|
|
||||||
margin-bottom:1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* LEFT ALIGNED LABELS
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .input .label {
|
|
||||||
display:block;
|
|
||||||
width:25%;
|
|
||||||
float:left;
|
|
||||||
padding-top:.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .fragments .label,
|
|
||||||
.formtastic .choices .label {
|
|
||||||
position:absolute;
|
|
||||||
width:95%;
|
|
||||||
left:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .fragments .label label,
|
|
||||||
.formtastic .choices .label label {
|
|
||||||
position:absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* NESTED FIELDSETS AND LEGENDS (radio, check boxes and date/time inputs use nested fieldsets)
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .choices {
|
|
||||||
position:relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .choices-group {
|
|
||||||
float:left;
|
|
||||||
width:74%;
|
|
||||||
margin:0;
|
|
||||||
padding:0 0 0 25%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .choice {
|
|
||||||
padding:0;
|
|
||||||
border:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* INLINE HINTS
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .input .inline-hints {
|
|
||||||
color:#666;
|
|
||||||
margin:0.5em 0 0 25%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* INLINE ERRORS
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .inline-errors {
|
|
||||||
color:#cc0000;
|
|
||||||
margin:0.5em 0 0 25%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .errors {
|
|
||||||
color:#cc0000;
|
|
||||||
margin:0.5em 0 0 25%;
|
|
||||||
list-style:square;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .errors li {
|
|
||||||
padding:0;
|
|
||||||
border:none;
|
|
||||||
display:list-item;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* STRING, NUMERIC, PASSWORD, EMAIL, URL, PHONE, SEARCH (ETC) OVERRIDES
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .stringish input {
|
|
||||||
width:70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .stringish input[size],
|
|
||||||
.formtastic .stringish input[max] {
|
|
||||||
width:auto;
|
|
||||||
max-width:70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* TEXTAREA OVERRIDES
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .text textarea {
|
|
||||||
width:70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .text textarea[cols] {
|
|
||||||
width:auto;
|
|
||||||
max-width:70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* HIDDEN OVERRIDES
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .hidden {
|
|
||||||
display:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* BOOLEAN LABELS
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .boolean label {
|
|
||||||
padding-left:25%;
|
|
||||||
display:block;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* CHOICE GROUPS
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .choices-group {
|
|
||||||
margin-bottom:-0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .choice {
|
|
||||||
margin:0.1em 0 0.5em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .choice label {
|
|
||||||
float:none;
|
|
||||||
width:100%;
|
|
||||||
line-height:100%;
|
|
||||||
padding-top:0;
|
|
||||||
margin-bottom:0.6em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ADJUSTMENTS FOR INPUTS INSIDE LABELS (boolean input, radio input, check_boxes input)
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .choice label input,
|
|
||||||
.formtastic .boolean label input {
|
|
||||||
margin:0 0.3em 0 0.1em;
|
|
||||||
line-height:100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* FRAGMENTED INPUTS (DATE/TIME/DATETIME)
|
|
||||||
--------------------------------------------------------------------------------------------------*/
|
|
||||||
.formtastic .fragments {
|
|
||||||
position:relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .fragments-group {
|
|
||||||
float:left;
|
|
||||||
width:74%;
|
|
||||||
margin:0;
|
|
||||||
padding:0 0 0 25%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .fragment {
|
|
||||||
float:left;
|
|
||||||
width:auto;
|
|
||||||
margin:0 .3em 0 0;
|
|
||||||
padding:0;
|
|
||||||
border:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .fragment label {
|
|
||||||
display:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.formtastic .fragment label input {
|
|
||||||
display:inline;
|
|
||||||
margin:0;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.formtastic .button{
|
|
||||||
.btn;
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
//
|
|
||||||
// Grid system
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Fixed (940px)
|
|
||||||
#grid > .core(@gridColumnWidth, @gridGutterWidth);
|
|
||||||
|
|
||||||
// Fluid (940px)
|
|
||||||
#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth);
|
|
||||||
|
|
||||||
// Reset utility classes due to specificity
|
|
||||||
[class*="span"].hide,
|
|
||||||
.row-fluid [class*="span"].hide {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
[class*="span"].pull-right,
|
|
||||||
.row-fluid [class*="span"].pull-right {
|
|
||||||
float: right;
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
//
|
|
||||||
// Hero unit
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.hero-unit {
|
|
||||||
padding: 60px;
|
|
||||||
margin-bottom: 30px;
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: 200;
|
|
||||||
line-height: @baseLineHeight * 1.5;
|
|
||||||
color: @heroUnitLeadColor;
|
|
||||||
background-color: @heroUnitBackground;
|
|
||||||
.border-radius(6px);
|
|
||||||
h1 {
|
|
||||||
margin-bottom: 0;
|
|
||||||
font-size: 60px;
|
|
||||||
line-height: 1;
|
|
||||||
color: @heroUnitHeadingColor;
|
|
||||||
letter-spacing: -1px;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,84 +0,0 @@
|
|||||||
//
|
|
||||||
// Labels and badges
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Base classes
|
|
||||||
.label,.label2,
|
|
||||||
.badge {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 2px 4px;
|
|
||||||
font-size: @baseFontSize * .846;
|
|
||||||
font-weight: bold;
|
|
||||||
line-height: 14px; // ensure proper line-height if floated
|
|
||||||
color: @white;
|
|
||||||
vertical-align: baseline;
|
|
||||||
white-space: nowrap;
|
|
||||||
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
|
|
||||||
background-color: @grayLight;
|
|
||||||
}
|
|
||||||
// Set unique padding and border-radii
|
|
||||||
.label,.label2, {
|
|
||||||
.border-radius(3px);
|
|
||||||
}
|
|
||||||
.badge {
|
|
||||||
padding-left: 9px;
|
|
||||||
padding-right: 9px;
|
|
||||||
.border-radius(9px);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Empty labels/badges collapse
|
|
||||||
.label,.label2,
|
|
||||||
.badge {
|
|
||||||
&:empty {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hover/focus state, but only for links
|
|
||||||
a {
|
|
||||||
&.label:hover,
|
|
||||||
&.label:focus,
|
|
||||||
&.badge:hover,
|
|
||||||
&.badge:focus {
|
|
||||||
color: @white;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Colors
|
|
||||||
// Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute)
|
|
||||||
.label,.label2,
|
|
||||||
.badge {
|
|
||||||
// Important (red)
|
|
||||||
&-important { background-color: @errorText; }
|
|
||||||
&-important[href] { background-color: darken(@errorText, 10%); }
|
|
||||||
// Warnings (orange)
|
|
||||||
&-warning { background-color: @orange; }
|
|
||||||
&-warning[href] { background-color: darken(@orange, 10%); }
|
|
||||||
// Success (green)
|
|
||||||
&-success { background-color: @successText; }
|
|
||||||
&-success[href] { background-color: darken(@successText, 10%); }
|
|
||||||
// Info (turquoise)
|
|
||||||
&-info { background-color: @infoText; }
|
|
||||||
&-info[href] { background-color: darken(@infoText, 10%); }
|
|
||||||
// Inverse (black)
|
|
||||||
&-inverse { background-color: @grayDark; }
|
|
||||||
&-inverse[href] { background-color: darken(@grayDark, 10%); }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Quick fix for labels/badges in buttons
|
|
||||||
.btn {
|
|
||||||
.label.label2,,
|
|
||||||
.badge {
|
|
||||||
position: relative;
|
|
||||||
top: -1px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.btn-mini {
|
|
||||||
.label.label2,,
|
|
||||||
.badge {
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// Layouts
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Container (centered, fixed-width layouts)
|
|
||||||
.container {
|
|
||||||
.container-fixed();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fluid layouts (left aligned, with sidebar, min- & max-width content)
|
|
||||||
.container-fluid {
|
|
||||||
padding-right: @gridGutterWidth;
|
|
||||||
padding-left: @gridGutterWidth;
|
|
||||||
.clearfix();
|
|
||||||
}
|
|
@ -1,55 +0,0 @@
|
|||||||
// Media objects
|
|
||||||
// Source: http://stubbornella.org/content/?p=497
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Common styles
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
// Clear the floats
|
|
||||||
.media,
|
|
||||||
.media-body {
|
|
||||||
overflow: hidden;
|
|
||||||
*overflow: visible;
|
|
||||||
zoom: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Proper spacing between instances of .media
|
|
||||||
.media,
|
|
||||||
.media .media {
|
|
||||||
margin-top: 15px;
|
|
||||||
}
|
|
||||||
.media:first-child {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// For images and videos, set to block
|
|
||||||
.media-object {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset margins on headings for tighter default spacing
|
|
||||||
.media-heading {
|
|
||||||
margin: 0 0 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Media image alignment
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.media > .pull-left {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
.media > .pull-right {
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Media list variation
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
// Undo default ul/ol styles
|
|
||||||
.media-list {
|
|
||||||
margin-left: 0;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
@ -1,702 +0,0 @@
|
|||||||
//
|
|
||||||
// Mixins
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// UTILITY MIXINS
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Clearfix
|
|
||||||
// --------
|
|
||||||
// For clearing floats like a boss h5bp.com/q
|
|
||||||
.clearfix {
|
|
||||||
*zoom: 1;
|
|
||||||
&:before,
|
|
||||||
&:after {
|
|
||||||
display: table;
|
|
||||||
content: "";
|
|
||||||
// Fixes Opera/contenteditable bug:
|
|
||||||
// http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
|
|
||||||
line-height: 0;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Webkit-style focus
|
|
||||||
// ------------------
|
|
||||||
.tab-focus() {
|
|
||||||
// Default
|
|
||||||
outline: thin dotted #333;
|
|
||||||
// Webkit
|
|
||||||
outline: 5px auto -webkit-focus-ring-color;
|
|
||||||
outline-offset: -2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Center-align a block level element
|
|
||||||
// ----------------------------------
|
|
||||||
.center-block() {
|
|
||||||
display: block;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
// IE7 inline-block
|
|
||||||
// ----------------
|
|
||||||
.ie7-inline-block() {
|
|
||||||
*display: inline; /* IE7 inline-block hack */
|
|
||||||
*zoom: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// IE7 likes to collapse whitespace on either side of the inline-block elements.
|
|
||||||
// Ems because we're attempting to match the width of a space character. Left
|
|
||||||
// version is for form buttons, which typically come after other elements, and
|
|
||||||
// right version is for icons, which come before. Applying both is ok, but it will
|
|
||||||
// mean that space between those elements will be .6em (~2 space characters) in IE7,
|
|
||||||
// instead of the 1 space in other browsers.
|
|
||||||
.ie7-restore-left-whitespace() {
|
|
||||||
*margin-left: .3em;
|
|
||||||
|
|
||||||
&:first-child {
|
|
||||||
*margin-left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.ie7-restore-right-whitespace() {
|
|
||||||
*margin-right: .3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sizing shortcuts
|
|
||||||
// -------------------------
|
|
||||||
.size(@height, @width) {
|
|
||||||
width: @width;
|
|
||||||
height: @height;
|
|
||||||
}
|
|
||||||
.square(@size) {
|
|
||||||
.size(@size, @size);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placeholder text
|
|
||||||
// -------------------------
|
|
||||||
.placeholder(@color: @placeholderText) {
|
|
||||||
&:-moz-placeholder {
|
|
||||||
color: @color;
|
|
||||||
}
|
|
||||||
&:-ms-input-placeholder {
|
|
||||||
color: @color;
|
|
||||||
}
|
|
||||||
&::-webkit-input-placeholder {
|
|
||||||
color: @color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Text overflow
|
|
||||||
// -------------------------
|
|
||||||
// Requires inline-block or block for proper styling
|
|
||||||
.text-overflow() {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// CSS image replacement
|
|
||||||
// -------------------------
|
|
||||||
// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
|
|
||||||
.hide-text {
|
|
||||||
font: 0/0 a;
|
|
||||||
color: transparent;
|
|
||||||
text-shadow: none;
|
|
||||||
background-color: transparent;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// FONTS
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
#font {
|
|
||||||
#family {
|
|
||||||
.serif() {
|
|
||||||
font-family: @serifFontFamily;
|
|
||||||
}
|
|
||||||
.sans-serif() {
|
|
||||||
font-family: @sansFontFamily;
|
|
||||||
}
|
|
||||||
.monospace() {
|
|
||||||
font-family: @monoFontFamily;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
|
|
||||||
font-size: @size;
|
|
||||||
font-weight: @weight;
|
|
||||||
line-height: @lineHeight;
|
|
||||||
}
|
|
||||||
.serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
|
|
||||||
#font > #family > .serif;
|
|
||||||
#font > .shorthand(@size, @weight, @lineHeight);
|
|
||||||
}
|
|
||||||
.sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
|
|
||||||
#font > #family > .sans-serif;
|
|
||||||
#font > .shorthand(@size, @weight, @lineHeight);
|
|
||||||
}
|
|
||||||
.monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
|
|
||||||
#font > #family > .monospace;
|
|
||||||
#font > .shorthand(@size, @weight, @lineHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// FORMS
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Block level inputs
|
|
||||||
.input-block-level {
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
min-height: @inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
|
|
||||||
.box-sizing(border-box); // Makes inputs behave like true block-level elements
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Mixin for form field states
|
|
||||||
.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
|
|
||||||
// Set the text color
|
|
||||||
.control-label,
|
|
||||||
.help-block,
|
|
||||||
.help-inline {
|
|
||||||
color: @textColor;
|
|
||||||
}
|
|
||||||
// Style inputs accordingly
|
|
||||||
.checkbox,
|
|
||||||
.radio,
|
|
||||||
input,
|
|
||||||
select,
|
|
||||||
textarea {
|
|
||||||
color: @textColor;
|
|
||||||
}
|
|
||||||
input,
|
|
||||||
select,
|
|
||||||
textarea {
|
|
||||||
border-color: @borderColor;
|
|
||||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
|
|
||||||
&:focus {
|
|
||||||
border-color: darken(@borderColor, 10%);
|
|
||||||
@shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%);
|
|
||||||
.box-shadow(@shadow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Give a small background color for input-prepend/-append
|
|
||||||
.input-prepend .add-on,
|
|
||||||
.input-append .add-on {
|
|
||||||
color: @textColor;
|
|
||||||
background-color: @backgroundColor;
|
|
||||||
border-color: @textColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// CSS3 PROPERTIES
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Border Radius
|
|
||||||
.border-radius(@radius) {
|
|
||||||
-webkit-border-radius: @radius;
|
|
||||||
-moz-border-radius: @radius;
|
|
||||||
border-radius: @radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Single Corner Border Radius
|
|
||||||
.border-top-left-radius(@radius) {
|
|
||||||
-webkit-border-top-left-radius: @radius;
|
|
||||||
-moz-border-radius-topleft: @radius;
|
|
||||||
border-top-left-radius: @radius;
|
|
||||||
}
|
|
||||||
.border-top-right-radius(@radius) {
|
|
||||||
-webkit-border-top-right-radius: @radius;
|
|
||||||
-moz-border-radius-topright: @radius;
|
|
||||||
border-top-right-radius: @radius;
|
|
||||||
}
|
|
||||||
.border-bottom-right-radius(@radius) {
|
|
||||||
-webkit-border-bottom-right-radius: @radius;
|
|
||||||
-moz-border-radius-bottomright: @radius;
|
|
||||||
border-bottom-right-radius: @radius;
|
|
||||||
}
|
|
||||||
.border-bottom-left-radius(@radius) {
|
|
||||||
-webkit-border-bottom-left-radius: @radius;
|
|
||||||
-moz-border-radius-bottomleft: @radius;
|
|
||||||
border-bottom-left-radius: @radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Single Side Border Radius
|
|
||||||
.border-top-radius(@radius) {
|
|
||||||
.border-top-right-radius(@radius);
|
|
||||||
.border-top-left-radius(@radius);
|
|
||||||
}
|
|
||||||
.border-right-radius(@radius) {
|
|
||||||
.border-top-right-radius(@radius);
|
|
||||||
.border-bottom-right-radius(@radius);
|
|
||||||
}
|
|
||||||
.border-bottom-radius(@radius) {
|
|
||||||
.border-bottom-right-radius(@radius);
|
|
||||||
.border-bottom-left-radius(@radius);
|
|
||||||
}
|
|
||||||
.border-left-radius(@radius) {
|
|
||||||
.border-top-left-radius(@radius);
|
|
||||||
.border-bottom-left-radius(@radius);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Drop shadows
|
|
||||||
.box-shadow(@shadow) {
|
|
||||||
-webkit-box-shadow: @shadow;
|
|
||||||
-moz-box-shadow: @shadow;
|
|
||||||
box-shadow: @shadow;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transitions
|
|
||||||
.transition(@transition) {
|
|
||||||
-webkit-transition: @transition;
|
|
||||||
-moz-transition: @transition;
|
|
||||||
-o-transition: @transition;
|
|
||||||
transition: @transition;
|
|
||||||
}
|
|
||||||
.transition-delay(@transition-delay) {
|
|
||||||
-webkit-transition-delay: @transition-delay;
|
|
||||||
-moz-transition-delay: @transition-delay;
|
|
||||||
-o-transition-delay: @transition-delay;
|
|
||||||
transition-delay: @transition-delay;
|
|
||||||
}
|
|
||||||
.transition-duration(@transition-duration) {
|
|
||||||
-webkit-transition-duration: @transition-duration;
|
|
||||||
-moz-transition-duration: @transition-duration;
|
|
||||||
-o-transition-duration: @transition-duration;
|
|
||||||
transition-duration: @transition-duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transformations
|
|
||||||
.rotate(@degrees) {
|
|
||||||
-webkit-transform: rotate(@degrees);
|
|
||||||
-moz-transform: rotate(@degrees);
|
|
||||||
-ms-transform: rotate(@degrees);
|
|
||||||
-o-transform: rotate(@degrees);
|
|
||||||
transform: rotate(@degrees);
|
|
||||||
}
|
|
||||||
.scale(@ratio) {
|
|
||||||
-webkit-transform: scale(@ratio);
|
|
||||||
-moz-transform: scale(@ratio);
|
|
||||||
-ms-transform: scale(@ratio);
|
|
||||||
-o-transform: scale(@ratio);
|
|
||||||
transform: scale(@ratio);
|
|
||||||
}
|
|
||||||
.translate(@x, @y) {
|
|
||||||
-webkit-transform: translate(@x, @y);
|
|
||||||
-moz-transform: translate(@x, @y);
|
|
||||||
-ms-transform: translate(@x, @y);
|
|
||||||
-o-transform: translate(@x, @y);
|
|
||||||
transform: translate(@x, @y);
|
|
||||||
}
|
|
||||||
.skew(@x, @y) {
|
|
||||||
-webkit-transform: skew(@x, @y);
|
|
||||||
-moz-transform: skew(@x, @y);
|
|
||||||
-ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885
|
|
||||||
-o-transform: skew(@x, @y);
|
|
||||||
transform: skew(@x, @y);
|
|
||||||
-webkit-backface-visibility: hidden; // See https://github.com/twitter/bootstrap/issues/5319
|
|
||||||
}
|
|
||||||
.translate3d(@x, @y, @z) {
|
|
||||||
-webkit-transform: translate3d(@x, @y, @z);
|
|
||||||
-moz-transform: translate3d(@x, @y, @z);
|
|
||||||
-o-transform: translate3d(@x, @y, @z);
|
|
||||||
transform: translate3d(@x, @y, @z);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Backface visibility
|
|
||||||
// Prevent browsers from flickering when using CSS 3D transforms.
|
|
||||||
// Default value is `visible`, but can be changed to `hidden
|
|
||||||
// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples
|
|
||||||
.backface-visibility(@visibility){
|
|
||||||
-webkit-backface-visibility: @visibility;
|
|
||||||
-moz-backface-visibility: @visibility;
|
|
||||||
backface-visibility: @visibility;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Background clipping
|
|
||||||
// Heads up: FF 3.6 and under need "padding" instead of "padding-box"
|
|
||||||
.background-clip(@clip) {
|
|
||||||
-webkit-background-clip: @clip;
|
|
||||||
-moz-background-clip: @clip;
|
|
||||||
background-clip: @clip;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Background sizing
|
|
||||||
.background-size(@size) {
|
|
||||||
-webkit-background-size: @size;
|
|
||||||
-moz-background-size: @size;
|
|
||||||
-o-background-size: @size;
|
|
||||||
background-size: @size;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Box sizing
|
|
||||||
.box-sizing(@boxmodel) {
|
|
||||||
-webkit-box-sizing: @boxmodel;
|
|
||||||
-moz-box-sizing: @boxmodel;
|
|
||||||
box-sizing: @boxmodel;
|
|
||||||
}
|
|
||||||
|
|
||||||
// User select
|
|
||||||
// For selecting text on the page
|
|
||||||
.user-select(@select) {
|
|
||||||
-webkit-user-select: @select;
|
|
||||||
-moz-user-select: @select;
|
|
||||||
-ms-user-select: @select;
|
|
||||||
-o-user-select: @select;
|
|
||||||
user-select: @select;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resize anything
|
|
||||||
.resizable(@direction) {
|
|
||||||
resize: @direction; // Options: horizontal, vertical, both
|
|
||||||
overflow: auto; // Safari fix
|
|
||||||
}
|
|
||||||
|
|
||||||
// CSS3 Content Columns
|
|
||||||
.content-columns(@columnCount, @columnGap: @gridGutterWidth) {
|
|
||||||
-webkit-column-count: @columnCount;
|
|
||||||
-moz-column-count: @columnCount;
|
|
||||||
column-count: @columnCount;
|
|
||||||
-webkit-column-gap: @columnGap;
|
|
||||||
-moz-column-gap: @columnGap;
|
|
||||||
column-gap: @columnGap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Optional hyphenation
|
|
||||||
.hyphens(@mode: auto) {
|
|
||||||
word-wrap: break-word;
|
|
||||||
-webkit-hyphens: @mode;
|
|
||||||
-moz-hyphens: @mode;
|
|
||||||
-ms-hyphens: @mode;
|
|
||||||
-o-hyphens: @mode;
|
|
||||||
hyphens: @mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Opacity
|
|
||||||
.opacity(@opacity) {
|
|
||||||
opacity: @opacity / 100;
|
|
||||||
filter: ~"alpha(opacity=@{opacity})";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// BACKGROUNDS
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Add an alphatransparency value to any background or border color (via Elyse Holladay)
|
|
||||||
#translucent {
|
|
||||||
.background(@color: @white, @alpha: 1) {
|
|
||||||
background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
|
|
||||||
}
|
|
||||||
.border(@color: @white, @alpha: 1) {
|
|
||||||
border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
|
|
||||||
.background-clip(padding-box);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gradient Bar Colors for buttons and alerts
|
|
||||||
.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
|
|
||||||
color: @textColor;
|
|
||||||
text-shadow: @textShadow;
|
|
||||||
#gradient > .vertical(@primaryColor, @secondaryColor);
|
|
||||||
border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
|
|
||||||
border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gradients
|
|
||||||
#gradient {
|
|
||||||
.horizontal(@startColor: #555, @endColor: #333) {
|
|
||||||
background-color: @endColor;
|
|
||||||
background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
|
|
||||||
background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
|
|
||||||
background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
|
|
||||||
background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
|
|
||||||
background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down
|
|
||||||
}
|
|
||||||
.vertical(@startColor: #555, @endColor: #333) {
|
|
||||||
background-color: mix(@startColor, @endColor, 60%);
|
|
||||||
background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
|
|
||||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
|
|
||||||
background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
|
|
||||||
background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
|
|
||||||
background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down
|
|
||||||
}
|
|
||||||
.directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
|
|
||||||
background-color: @endColor;
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
|
|
||||||
background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
|
|
||||||
background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
|
|
||||||
background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10
|
|
||||||
}
|
|
||||||
.horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
|
|
||||||
background-color: mix(@midColor, @endColor, 80%);
|
|
||||||
background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
|
|
||||||
background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
|
|
||||||
background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
|
|
||||||
background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
|
|
||||||
background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
|
|
||||||
}
|
|
||||||
|
|
||||||
.vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
|
|
||||||
background-color: mix(@midColor, @endColor, 80%);
|
|
||||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
|
|
||||||
background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
|
|
||||||
background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
|
|
||||||
background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
|
|
||||||
background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
|
|
||||||
}
|
|
||||||
.radial(@innerColor: #555, @outerColor: #333) {
|
|
||||||
background-color: @outerColor;
|
|
||||||
background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor));
|
|
||||||
background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor);
|
|
||||||
background-image: -moz-radial-gradient(circle, @innerColor, @outerColor);
|
|
||||||
background-image: -o-radial-gradient(circle, @innerColor, @outerColor);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
.striped(@color: #555, @angle: 45deg) {
|
|
||||||
background-color: @color;
|
|
||||||
background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
|
|
||||||
background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
|
|
||||||
background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
|
|
||||||
background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
|
|
||||||
background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Reset filters for IE
|
|
||||||
.reset-filter() {
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// COMPONENT MIXINS
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Horizontal dividers
|
|
||||||
// -------------------------
|
|
||||||
// Dividers (basically an hr) within dropdowns and nav lists
|
|
||||||
.nav-divider(@top: #e5e5e5, @bottom: @white) {
|
|
||||||
// IE7 needs a set width since we gave a height. Restricting just
|
|
||||||
// to IE7 to keep the 1px left/right space in other browsers.
|
|
||||||
// It is unclear where IE is getting the extra space that we need
|
|
||||||
// to negative-margin away, but so it goes.
|
|
||||||
*width: 100%;
|
|
||||||
height: 1px;
|
|
||||||
margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px
|
|
||||||
*margin: -5px 0 5px;
|
|
||||||
overflow: hidden;
|
|
||||||
background-color: @top;
|
|
||||||
border-bottom: 1px solid @bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Button backgrounds
|
|
||||||
// ------------------
|
|
||||||
.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
|
|
||||||
// gradientBar will set the background to a pleasing blend of these, to support IE<=9
|
|
||||||
.gradientBar(@startColor, @endColor, @textColor, @textShadow);
|
|
||||||
*background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */
|
|
||||||
.reset-filter();
|
|
||||||
|
|
||||||
// in these cases the gradient won't cover the background, so we override
|
|
||||||
&:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
|
|
||||||
color: @textColor;
|
|
||||||
background-color: @endColor;
|
|
||||||
*background-color: darken(@endColor, 5%);
|
|
||||||
}
|
|
||||||
|
|
||||||
// IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
|
|
||||||
&:active,
|
|
||||||
&.active {
|
|
||||||
background-color: darken(@endColor, 10%) e("\9");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Navbar vertical align
|
|
||||||
// -------------------------
|
|
||||||
// Vertically center elements in the navbar.
|
|
||||||
// Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin.
|
|
||||||
.navbarVerticalAlign(@elementHeight) {
|
|
||||||
margin-top: (@navbarHeight - @elementHeight) / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Grid System
|
|
||||||
// -----------
|
|
||||||
|
|
||||||
// Centered container element
|
|
||||||
.container-fixed() {
|
|
||||||
margin-right: auto;
|
|
||||||
margin-left: auto;
|
|
||||||
.clearfix();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Table columns
|
|
||||||
.tableColumns(@columnSpan: 1) {
|
|
||||||
float: none; // undo default grid column styles
|
|
||||||
width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells
|
|
||||||
margin-left: 0; // undo default grid column styles
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make a Grid
|
|
||||||
// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
|
|
||||||
.makeRow() {
|
|
||||||
margin-left: @gridGutterWidth * -1;
|
|
||||||
.clearfix();
|
|
||||||
}
|
|
||||||
.makeColumn(@columns: 1, @offset: 0) {
|
|
||||||
float: left;
|
|
||||||
margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2);
|
|
||||||
width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
// The Grid
|
|
||||||
#grid {
|
|
||||||
|
|
||||||
.core (@gridColumnWidth, @gridGutterWidth) {
|
|
||||||
|
|
||||||
.spanX (@index) when (@index > 0) {
|
|
||||||
.span@{index} { .span(@index); }
|
|
||||||
.spanX(@index - 1);
|
|
||||||
}
|
|
||||||
.spanX (0) {}
|
|
||||||
|
|
||||||
.offsetX (@index) when (@index > 0) {
|
|
||||||
.offset@{index} { .offset(@index); }
|
|
||||||
.offsetX(@index - 1);
|
|
||||||
}
|
|
||||||
.offsetX (0) {}
|
|
||||||
|
|
||||||
.offset (@columns) {
|
|
||||||
margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
.span (@columns) {
|
|
||||||
width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
.row {
|
|
||||||
margin-left: @gridGutterWidth * -1;
|
|
||||||
.clearfix();
|
|
||||||
}
|
|
||||||
|
|
||||||
[class*="span"] {
|
|
||||||
float: left;
|
|
||||||
min-height: 1px; // prevent collapsing columns
|
|
||||||
margin-left: @gridGutterWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the container width, and override it for fixed navbars in media queries
|
|
||||||
.container,
|
|
||||||
.navbar-static-top .container,
|
|
||||||
.navbar-fixed-top .container,
|
|
||||||
.navbar-fixed-bottom .container { .span(@gridColumns); }
|
|
||||||
|
|
||||||
// generate .spanX and .offsetX
|
|
||||||
.spanX (@gridColumns);
|
|
||||||
.offsetX (@gridColumns);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {
|
|
||||||
|
|
||||||
.spanX (@index) when (@index > 0) {
|
|
||||||
.span@{index} { .span(@index); }
|
|
||||||
.spanX(@index - 1);
|
|
||||||
}
|
|
||||||
.spanX (0) {}
|
|
||||||
|
|
||||||
.offsetX (@index) when (@index > 0) {
|
|
||||||
.offset@{index} { .offset(@index); }
|
|
||||||
.offset@{index}:first-child { .offsetFirstChild(@index); }
|
|
||||||
.offsetX(@index - 1);
|
|
||||||
}
|
|
||||||
.offsetX (0) {}
|
|
||||||
|
|
||||||
.offset (@columns) {
|
|
||||||
margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2);
|
|
||||||
*margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.offsetFirstChild (@columns) {
|
|
||||||
margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth);
|
|
||||||
*margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.span (@columns) {
|
|
||||||
width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
|
|
||||||
*width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.row-fluid {
|
|
||||||
width: 100%;
|
|
||||||
.clearfix();
|
|
||||||
[class*="span"] {
|
|
||||||
.input-block-level();
|
|
||||||
float: left;
|
|
||||||
margin-left: @fluidGridGutterWidth;
|
|
||||||
*margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
|
|
||||||
}
|
|
||||||
[class*="span"]:first-child {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Space grid-sized controls properly if multiple per line
|
|
||||||
.controls-row [class*="span"] + [class*="span"] {
|
|
||||||
margin-left: @fluidGridGutterWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
// generate .spanX and .offsetX
|
|
||||||
.spanX (@gridColumns);
|
|
||||||
.offsetX (@gridColumns);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.input(@gridColumnWidth, @gridGutterWidth) {
|
|
||||||
|
|
||||||
.spanX (@index) when (@index > 0) {
|
|
||||||
input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); }
|
|
||||||
.spanX(@index - 1);
|
|
||||||
}
|
|
||||||
.spanX (0) {}
|
|
||||||
|
|
||||||
.span(@columns) {
|
|
||||||
width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,
|
|
||||||
textarea,
|
|
||||||
.uneditable-input {
|
|
||||||
margin-left: 0; // override margin-left from core grid system
|
|
||||||
}
|
|
||||||
|
|
||||||
// Space grid-sized controls properly if multiple per line
|
|
||||||
.controls-row [class*="span"] + [class*="span"] {
|
|
||||||
margin-left: @gridGutterWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
// generate .spanX
|
|
||||||
.spanX (@gridColumns);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,95 +0,0 @@
|
|||||||
//
|
|
||||||
// Modals
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Background
|
|
||||||
.modal-backdrop {
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: @zindexModalBackdrop;
|
|
||||||
background-color: @black;
|
|
||||||
// Fade for backdrop
|
|
||||||
&.fade { opacity: 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-backdrop,
|
|
||||||
.modal-backdrop.fade.in {
|
|
||||||
.opacity(0.6);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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 */
|
|
||||||
.border-radius(6px);
|
|
||||||
.box-shadow(0 3px 7px rgba(0,0,0,0.3));
|
|
||||||
.background-clip(padding-box);
|
|
||||||
// Remove focus outline from opened modal
|
|
||||||
outline: none;
|
|
||||||
|
|
||||||
&.fade {
|
|
||||||
.transition(e('opacity .3s linear, top .3s ease-out'));
|
|
||||||
top: -25%;
|
|
||||||
}
|
|
||||||
&.fade.in { top: 10%; }
|
|
||||||
}
|
|
||||||
.modal-header {
|
|
||||||
padding: 9px 15px;
|
|
||||||
border-bottom: 1px solid #eee;
|
|
||||||
// Close icon
|
|
||||||
.close { margin-top: 2px; }
|
|
||||||
// Heading
|
|
||||||
h3 {
|
|
||||||
margin: 0;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Body (where all modal content resides)
|
|
||||||
.modal-body {
|
|
||||||
position: relative;
|
|
||||||
overflow-y: auto;
|
|
||||||
max-height: 400px;
|
|
||||||
padding: 15px;
|
|
||||||
}
|
|
||||||
// Remove bottom margin if need be
|
|
||||||
.modal-form {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Footer (for actions)
|
|
||||||
.modal-footer {
|
|
||||||
padding: 14px 15px 15px;
|
|
||||||
margin-bottom: 0;
|
|
||||||
text-align: right; // right align buttons
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
border-top: 1px solid #ddd;
|
|
||||||
.border-radius(0 0 6px 6px);
|
|
||||||
.box-shadow(inset 0 1px 0 @white);
|
|
||||||
.clearfix(); // clear it in case folks use .pull-* classes on buttons
|
|
||||||
|
|
||||||
// Properly space out buttons
|
|
||||||
.btn + .btn {
|
|
||||||
margin-left: 5px;
|
|
||||||
margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
|
|
||||||
}
|
|
||||||
// but override that for button groups
|
|
||||||
.btn-group .btn + .btn {
|
|
||||||
margin-left: -1px;
|
|
||||||
}
|
|
||||||
// and override it for block buttons as well
|
|
||||||
.btn-block + .btn-block {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,497 +0,0 @@
|
|||||||
//
|
|
||||||
// Navbars (Redux)
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// COMMON STYLES
|
|
||||||
// -------------
|
|
||||||
|
|
||||||
// Base class and wrapper
|
|
||||||
.navbar {
|
|
||||||
overflow: visible;
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
|
|
||||||
// Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar
|
|
||||||
*position: relative;
|
|
||||||
*z-index: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inner for background effects
|
|
||||||
// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present
|
|
||||||
.navbar-inner {
|
|
||||||
min-height: @navbarHeight;
|
|
||||||
padding-left: 20px;
|
|
||||||
padding-right: 20px;
|
|
||||||
#gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground);
|
|
||||||
border: 1px solid @navbarBorder;
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
.box-shadow(0 1px 4px rgba(0,0,0,.065));
|
|
||||||
|
|
||||||
// Prevent floats from breaking the navbar
|
|
||||||
.clearfix();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set width to auto for default container
|
|
||||||
// We then reset it for fixed navbars in the #gridSystem mixin
|
|
||||||
.navbar .container {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override the default collapsed state
|
|
||||||
.nav-collapse.collapse {
|
|
||||||
height: auto;
|
|
||||||
overflow: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Brand: website or project name
|
|
||||||
// -------------------------
|
|
||||||
.navbar .brand {
|
|
||||||
float: left;
|
|
||||||
display: block;
|
|
||||||
// Vertically center the text given @navbarHeight
|
|
||||||
padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2);
|
|
||||||
margin-left: -20px; // negative indent to left-align the text down the page
|
|
||||||
font-size: 20px;
|
|
||||||
font-weight: 200;
|
|
||||||
color: @navbarBrandColor;
|
|
||||||
text-shadow: 0 1px 0 @navbarBackgroundHighlight;
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Plain text in topbar
|
|
||||||
// -------------------------
|
|
||||||
.navbar-text {
|
|
||||||
margin-bottom: 0;
|
|
||||||
line-height: @navbarHeight;
|
|
||||||
color: @navbarText;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Janky solution for now to account for links outside the .nav
|
|
||||||
// -------------------------
|
|
||||||
.navbar-link {
|
|
||||||
color: @navbarLinkColor;
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
color: @navbarLinkColorHover;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dividers in navbar
|
|
||||||
// -------------------------
|
|
||||||
.navbar .divider-vertical {
|
|
||||||
height: @navbarHeight;
|
|
||||||
margin: 0 9px;
|
|
||||||
border-left: 1px solid @navbarBackground;
|
|
||||||
border-right: 1px solid @navbarBackgroundHighlight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Buttons in navbar
|
|
||||||
// -------------------------
|
|
||||||
.navbar .btn,
|
|
||||||
.navbar .btn-group {
|
|
||||||
.navbarVerticalAlign(30px); // Vertically center in navbar
|
|
||||||
}
|
|
||||||
.navbar .btn-group .btn,
|
|
||||||
.navbar .input-prepend .btn,
|
|
||||||
.navbar .input-append .btn,
|
|
||||||
.navbar .input-prepend .btn-group,
|
|
||||||
.navbar .input-append .btn-group {
|
|
||||||
margin-top: 0; // then undo the margin here so we don't accidentally double it
|
|
||||||
}
|
|
||||||
|
|
||||||
// Navbar forms
|
|
||||||
// -------------------------
|
|
||||||
.navbar-form {
|
|
||||||
margin-bottom: 0; // remove default bottom margin
|
|
||||||
.clearfix();
|
|
||||||
input,
|
|
||||||
select,
|
|
||||||
.radio,
|
|
||||||
.checkbox {
|
|
||||||
.navbarVerticalAlign(30px); // Vertically center in navbar
|
|
||||||
}
|
|
||||||
input,
|
|
||||||
select,
|
|
||||||
.btn {
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
input[type="image"],
|
|
||||||
input[type="checkbox"],
|
|
||||||
input[type="radio"] {
|
|
||||||
margin-top: 3px;
|
|
||||||
}
|
|
||||||
.input-append,
|
|
||||||
.input-prepend {
|
|
||||||
margin-top: 5px;
|
|
||||||
white-space: nowrap; // preven two items from separating within a .navbar-form that has .pull-left
|
|
||||||
input {
|
|
||||||
margin-top: 0; // remove the margin on top since it's on the parent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Navbar search
|
|
||||||
// -------------------------
|
|
||||||
.navbar-search {
|
|
||||||
position: relative;
|
|
||||||
float: left;
|
|
||||||
.navbarVerticalAlign(30px); // Vertically center in navbar
|
|
||||||
margin-bottom: 0;
|
|
||||||
.search-query {
|
|
||||||
margin-bottom: 0;
|
|
||||||
padding: 4px 14px;
|
|
||||||
#font > .sans-serif(13px, normal, 1);
|
|
||||||
.border-radius(15px); // redeclare because of specificity of the type attribute
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Static navbar
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.navbar-static-top {
|
|
||||||
position: static;
|
|
||||||
margin-bottom: 0; // remove 18px margin for default navbar
|
|
||||||
.navbar-inner {
|
|
||||||
.border-radius(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Fixed navbar
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
// Shared (top/bottom) styles
|
|
||||||
.navbar-fixed-top,
|
|
||||||
.navbar-fixed-bottom {
|
|
||||||
position: fixed;
|
|
||||||
right: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: @zindexFixedNavbar;
|
|
||||||
margin-bottom: 0; // remove 18px margin for default navbar
|
|
||||||
}
|
|
||||||
.navbar-fixed-top .navbar-inner,
|
|
||||||
.navbar-static-top .navbar-inner {
|
|
||||||
border-width: 0 0 1px;
|
|
||||||
}
|
|
||||||
.navbar-fixed-bottom .navbar-inner {
|
|
||||||
border-width: 1px 0 0;
|
|
||||||
}
|
|
||||||
.navbar-fixed-top .navbar-inner,
|
|
||||||
.navbar-fixed-bottom .navbar-inner {
|
|
||||||
padding-left: 0;
|
|
||||||
padding-right: 0;
|
|
||||||
.border-radius(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset container width
|
|
||||||
// Required here as we reset the width earlier on and the grid mixins don't override early enough
|
|
||||||
.navbar-static-top .container,
|
|
||||||
.navbar-fixed-top .container,
|
|
||||||
.navbar-fixed-bottom .container {
|
|
||||||
#grid > .core > .span(@gridColumns);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fixed to top
|
|
||||||
.navbar-fixed-top {
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
.navbar-fixed-top,
|
|
||||||
.navbar-static-top {
|
|
||||||
.navbar-inner {
|
|
||||||
.box-shadow(~"0 1px 10px rgba(0,0,0,.1)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fixed to bottom
|
|
||||||
.navbar-fixed-bottom {
|
|
||||||
bottom: 0;
|
|
||||||
.navbar-inner {
|
|
||||||
.box-shadow(~"0 -1px 10px rgba(0,0,0,.1)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// NAVIGATION
|
|
||||||
// ----------
|
|
||||||
|
|
||||||
.navbar .nav {
|
|
||||||
position: relative;
|
|
||||||
left: 0;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
margin: 0 10px 0 0;
|
|
||||||
}
|
|
||||||
.navbar .nav.pull-right {
|
|
||||||
float: right; // redeclare due to specificity
|
|
||||||
margin-right: 0; // remove margin on float right nav
|
|
||||||
}
|
|
||||||
.navbar .nav > li {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Links
|
|
||||||
.navbar .nav > li > a {
|
|
||||||
float: none;
|
|
||||||
// Vertically center the text given @navbarHeight
|
|
||||||
padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2);
|
|
||||||
color: @navbarLinkColor;
|
|
||||||
text-decoration: none;
|
|
||||||
text-shadow: 0 1px 0 @navbarBackgroundHighlight;
|
|
||||||
}
|
|
||||||
.navbar .nav .dropdown-toggle .caret {
|
|
||||||
margin-top: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hover/focus
|
|
||||||
.navbar .nav > li > a:focus,
|
|
||||||
.navbar .nav > li > a:hover {
|
|
||||||
background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active
|
|
||||||
color: @navbarLinkColorHover;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Active nav items
|
|
||||||
.navbar .nav > .active > a,
|
|
||||||
.navbar .nav > .active > a:hover,
|
|
||||||
.navbar .nav > .active > a:focus {
|
|
||||||
color: @navbarLinkColorActive;
|
|
||||||
text-decoration: none;
|
|
||||||
background-color: @navbarLinkBackgroundActive;
|
|
||||||
.box-shadow(inset 0 3px 8px rgba(0,0,0,.125));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Navbar button for toggling navbar items in responsive layouts
|
|
||||||
// These definitions need to come after '.navbar .btn'
|
|
||||||
.navbar .btn-navbar {
|
|
||||||
display: none;
|
|
||||||
float: right;
|
|
||||||
padding: 7px 10px;
|
|
||||||
margin-left: 5px;
|
|
||||||
margin-right: 5px;
|
|
||||||
.buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%));
|
|
||||||
.box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)");
|
|
||||||
}
|
|
||||||
.navbar .btn-navbar .icon-bar {
|
|
||||||
display: block;
|
|
||||||
width: 18px;
|
|
||||||
height: 2px;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
.border-radius(1px);
|
|
||||||
.box-shadow(0 1px 0 rgba(0,0,0,.25));
|
|
||||||
}
|
|
||||||
.btn-navbar .icon-bar + .icon-bar {
|
|
||||||
margin-top: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Dropdown menus
|
|
||||||
// --------------
|
|
||||||
|
|
||||||
// Menu position and menu carets
|
|
||||||
.navbar .nav > li > .dropdown-menu {
|
|
||||||
&:before {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 7px solid transparent;
|
|
||||||
border-right: 7px solid transparent;
|
|
||||||
border-bottom: 7px solid #ccc;
|
|
||||||
border-bottom-color: @dropdownBorder;
|
|
||||||
position: absolute;
|
|
||||||
top: -7px;
|
|
||||||
left: 9px;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 6px solid transparent;
|
|
||||||
border-right: 6px solid transparent;
|
|
||||||
border-bottom: 6px solid @dropdownBackground;
|
|
||||||
position: absolute;
|
|
||||||
top: -6px;
|
|
||||||
left: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Menu position and menu caret support for dropups via extra dropup class
|
|
||||||
.navbar-fixed-bottom .nav > li > .dropdown-menu {
|
|
||||||
&:before {
|
|
||||||
border-top: 7px solid #ccc;
|
|
||||||
border-top-color: @dropdownBorder;
|
|
||||||
border-bottom: 0;
|
|
||||||
bottom: -7px;
|
|
||||||
top: auto;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
border-top: 6px solid @dropdownBackground;
|
|
||||||
border-bottom: 0;
|
|
||||||
bottom: -6px;
|
|
||||||
top: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Caret should match text color on hover/focus
|
|
||||||
.navbar .nav li.dropdown > a:hover .caret,
|
|
||||||
.navbar .nav li.dropdown > a:focus .caret {
|
|
||||||
border-top-color: @navbarLinkColorHover;
|
|
||||||
border-bottom-color: @navbarLinkColorHover;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove background color from open dropdown
|
|
||||||
.navbar .nav li.dropdown.open > .dropdown-toggle,
|
|
||||||
.navbar .nav li.dropdown.active > .dropdown-toggle,
|
|
||||||
.navbar .nav li.dropdown.open.active > .dropdown-toggle {
|
|
||||||
background-color: @navbarLinkBackgroundActive;
|
|
||||||
color: @navbarLinkColorActive;
|
|
||||||
}
|
|
||||||
.navbar .nav li.dropdown > .dropdown-toggle .caret {
|
|
||||||
border-top-color: @navbarLinkColor;
|
|
||||||
border-bottom-color: @navbarLinkColor;
|
|
||||||
}
|
|
||||||
.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
|
|
||||||
.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
|
|
||||||
.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
|
|
||||||
border-top-color: @navbarLinkColorActive;
|
|
||||||
border-bottom-color: @navbarLinkColorActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Right aligned menus need alt position
|
|
||||||
.navbar .pull-right > li > .dropdown-menu,
|
|
||||||
.navbar .nav > li > .dropdown-menu.pull-right {
|
|
||||||
left: auto;
|
|
||||||
right: 0;
|
|
||||||
&:before {
|
|
||||||
left: auto;
|
|
||||||
right: 12px;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
left: auto;
|
|
||||||
right: 13px;
|
|
||||||
}
|
|
||||||
.dropdown-menu {
|
|
||||||
left: auto;
|
|
||||||
right: 100%;
|
|
||||||
margin-left: 0;
|
|
||||||
margin-right: -1px;
|
|
||||||
.border-radius(6px 0 6px 6px);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Inverted navbar
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.navbar-inverse {
|
|
||||||
|
|
||||||
.navbar-inner {
|
|
||||||
#gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground);
|
|
||||||
border-color: @navbarInverseBorder;
|
|
||||||
}
|
|
||||||
|
|
||||||
.brand,
|
|
||||||
.nav > li > a {
|
|
||||||
color: @navbarInverseLinkColor;
|
|
||||||
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
color: @navbarInverseLinkColorHover;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.brand {
|
|
||||||
color: @navbarInverseBrandColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-text {
|
|
||||||
color: @navbarInverseText;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav > li > a:focus,
|
|
||||||
.nav > li > a:hover {
|
|
||||||
background-color: @navbarInverseLinkBackgroundHover;
|
|
||||||
color: @navbarInverseLinkColorHover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav .active > a,
|
|
||||||
.nav .active > a:hover,
|
|
||||||
.nav .active > a:focus {
|
|
||||||
color: @navbarInverseLinkColorActive;
|
|
||||||
background-color: @navbarInverseLinkBackgroundActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inline text links
|
|
||||||
.navbar-link {
|
|
||||||
color: @navbarInverseLinkColor;
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
color: @navbarInverseLinkColorHover;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dividers in navbar
|
|
||||||
.divider-vertical {
|
|
||||||
border-left-color: @navbarInverseBackground;
|
|
||||||
border-right-color: @navbarInverseBackgroundHighlight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dropdowns
|
|
||||||
.nav li.dropdown.open > .dropdown-toggle,
|
|
||||||
.nav li.dropdown.active > .dropdown-toggle,
|
|
||||||
.nav li.dropdown.open.active > .dropdown-toggle {
|
|
||||||
background-color: @navbarInverseLinkBackgroundActive;
|
|
||||||
color: @navbarInverseLinkColorActive;
|
|
||||||
}
|
|
||||||
.nav li.dropdown > a:hover .caret,
|
|
||||||
.nav li.dropdown > a:focus .caret {
|
|
||||||
border-top-color: @navbarInverseLinkColorActive;
|
|
||||||
border-bottom-color: @navbarInverseLinkColorActive;
|
|
||||||
}
|
|
||||||
.nav li.dropdown > .dropdown-toggle .caret {
|
|
||||||
border-top-color: @navbarInverseLinkColor;
|
|
||||||
border-bottom-color: @navbarInverseLinkColor;
|
|
||||||
}
|
|
||||||
.nav li.dropdown.open > .dropdown-toggle .caret,
|
|
||||||
.nav li.dropdown.active > .dropdown-toggle .caret,
|
|
||||||
.nav li.dropdown.open.active > .dropdown-toggle .caret {
|
|
||||||
border-top-color: @navbarInverseLinkColorActive;
|
|
||||||
border-bottom-color: @navbarInverseLinkColorActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Navbar search
|
|
||||||
.navbar-search {
|
|
||||||
.search-query {
|
|
||||||
color: @white;
|
|
||||||
background-color: @navbarInverseSearchBackground;
|
|
||||||
border-color: @navbarInverseSearchBorder;
|
|
||||||
.box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)");
|
|
||||||
.transition(none);
|
|
||||||
.placeholder(@navbarInverseSearchPlaceholderColor);
|
|
||||||
|
|
||||||
// Focus states (we use .focused since IE7-8 and down doesn't support :focus)
|
|
||||||
&:focus,
|
|
||||||
&.focused {
|
|
||||||
padding: 5px 15px;
|
|
||||||
color: @grayDark;
|
|
||||||
text-shadow: 0 1px 0 @white;
|
|
||||||
background-color: @navbarInverseSearchBackgroundFocus;
|
|
||||||
border: 0;
|
|
||||||
.box-shadow(0 0 3px rgba(0,0,0,.15));
|
|
||||||
outline: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Navbar collapse button
|
|
||||||
.btn-navbar {
|
|
||||||
.buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,409 +0,0 @@
|
|||||||
//
|
|
||||||
// Navs
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// BASE CLASS
|
|
||||||
// ----------
|
|
||||||
|
|
||||||
.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;
|
|
||||||
}
|
|
||||||
.nav-list > li > a,
|
|
||||||
.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 {
|
|
||||||
.nav-divider();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TABS AND PILLS
|
|
||||||
// -------------
|
|
||||||
|
|
||||||
// Common styles
|
|
||||||
.nav-tabs,
|
|
||||||
.nav-pills {
|
|
||||||
.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
|
|
||||||
// ----
|
|
||||||
|
|
||||||
// Give the tabs something to sit on
|
|
||||||
.nav-tabs {
|
|
||||||
border-bottom: 1px solid #ddd;
|
|
||||||
}
|
|
||||||
// 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;
|
|
||||||
.border-radius(4px 4px 0 0);
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
border-color: @grayLighter @grayLighter #ddd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// PILLS
|
|
||||||
// -----
|
|
||||||
|
|
||||||
// Links rendered as pills
|
|
||||||
.nav-pills > li > a {
|
|
||||||
padding-top: 8px;
|
|
||||||
padding-bottom: 8px;
|
|
||||||
margin-top: 2px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
.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;
|
|
||||||
.border-radius(0);
|
|
||||||
}
|
|
||||||
.nav-tabs.nav-stacked > li:first-child > a {
|
|
||||||
.border-top-radius(4px);
|
|
||||||
}
|
|
||||||
.nav-tabs.nav-stacked > li:last-child > a {
|
|
||||||
.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 {
|
|
||||||
.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 {
|
|
||||||
.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
|
|
||||||
// -------------------------
|
|
||||||
.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;
|
|
||||||
.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 {
|
|
||||||
.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 {
|
|
||||||
.border-radius(0 0 4px 4px);
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
border-bottom-color: transparent;
|
|
||||||
border-top-color: #ddd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.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
|
|
||||||
// ------------
|
|
||||||
|
|
||||||
// Common styles
|
|
||||||
.tabs-left > .nav-tabs > li,
|
|
||||||
.tabs-right > .nav-tabs > li {
|
|
||||||
float: none;
|
|
||||||
}
|
|
||||||
.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
|
|
||||||
.tabs-left > .nav-tabs {
|
|
||||||
float: left;
|
|
||||||
margin-right: 19px;
|
|
||||||
border-right: 1px solid #ddd;
|
|
||||||
}
|
|
||||||
.tabs-left > .nav-tabs > li > a {
|
|
||||||
margin-right: -1px;
|
|
||||||
.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
|
|
||||||
.tabs-right > .nav-tabs {
|
|
||||||
float: right;
|
|
||||||
margin-left: 19px;
|
|
||||||
border-left: 1px solid #ddd;
|
|
||||||
}
|
|
||||||
.tabs-right > .nav-tabs > li > a {
|
|
||||||
margin-left: -1px;
|
|
||||||
.border-radius(0 4px 4px 0);
|
|
||||||
}
|
|
||||||
.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;
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
//
|
|
||||||
// Pager pagination
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.pager {
|
|
||||||
margin: @baseLineHeight 0;
|
|
||||||
list-style: none;
|
|
||||||
text-align: center;
|
|
||||||
.clearfix();
|
|
||||||
}
|
|
||||||
.pager li {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
.pager li > a,
|
|
||||||
.pager li > span {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 5px 14px;
|
|
||||||
background-color: #fff;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
.border-radius(15px);
|
|
||||||
}
|
|
||||||
.pager li > a:hover,
|
|
||||||
.pager li > a:focus {
|
|
||||||
text-decoration: none;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
}
|
|
||||||
.pager .next > a,
|
|
||||||
.pager .next > span {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
.pager .previous > a,
|
|
||||||
.pager .previous > span {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.pager .disabled > a,
|
|
||||||
.pager .disabled > a:hover,
|
|
||||||
.pager .disabled > a:focus,
|
|
||||||
.pager .disabled > span {
|
|
||||||
color: @grayLight;
|
|
||||||
background-color: #fff;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
@ -1,123 +0,0 @@
|
|||||||
//
|
|
||||||
// Pagination (multiple pages)
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Space out pagination from surrounding content
|
|
||||||
.pagination {
|
|
||||||
margin: @baseLineHeight 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination ul {
|
|
||||||
// Allow for text-based alignment
|
|
||||||
display: inline-block;
|
|
||||||
.ie7-inline-block();
|
|
||||||
// Reset default ul styles
|
|
||||||
margin-left: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
// Visuals
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
.box-shadow(0 1px 2px rgba(0,0,0,.05));
|
|
||||||
}
|
|
||||||
.pagination ul > li {
|
|
||||||
display: inline; // Remove list-style and block-level defaults
|
|
||||||
}
|
|
||||||
.pagination ul > li > a,
|
|
||||||
.pagination ul > li > span {
|
|
||||||
float: left; // Collapse white-space
|
|
||||||
padding: 4px 12px;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
text-decoration: none;
|
|
||||||
background-color: @paginationBackground;
|
|
||||||
border: 1px solid @paginationBorder;
|
|
||||||
border-left-width: 0;
|
|
||||||
}
|
|
||||||
.pagination ul > li > a:hover,
|
|
||||||
.pagination ul > li > a:focus,
|
|
||||||
.pagination ul > .active > a,
|
|
||||||
.pagination ul > .active > span {
|
|
||||||
background-color: @paginationActiveBackground;
|
|
||||||
}
|
|
||||||
.pagination ul > .active > a,
|
|
||||||
.pagination ul > .active > span {
|
|
||||||
color: @grayLight;
|
|
||||||
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;
|
|
||||||
.border-left-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
.pagination ul > li:last-child > a,
|
|
||||||
.pagination ul > li:last-child > span {
|
|
||||||
.border-right-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Alignment
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
.pagination-centered {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.pagination-right {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Sizing
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Large
|
|
||||||
.pagination-large {
|
|
||||||
ul > li > a,
|
|
||||||
ul > li > span {
|
|
||||||
padding: @paddingLarge;
|
|
||||||
font-size: @fontSizeLarge;
|
|
||||||
}
|
|
||||||
ul > li:first-child > a,
|
|
||||||
ul > li:first-child > span {
|
|
||||||
.border-left-radius(@borderRadiusLarge);
|
|
||||||
}
|
|
||||||
ul > li:last-child > a,
|
|
||||||
ul > li:last-child > span {
|
|
||||||
.border-right-radius(@borderRadiusLarge);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Small and mini
|
|
||||||
.pagination-mini,
|
|
||||||
.pagination-small {
|
|
||||||
ul > li:first-child > a,
|
|
||||||
ul > li:first-child > span {
|
|
||||||
.border-left-radius(@borderRadiusSmall);
|
|
||||||
}
|
|
||||||
ul > li:last-child > a,
|
|
||||||
ul > li:last-child > span {
|
|
||||||
.border-right-radius(@borderRadiusSmall);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Small
|
|
||||||
.pagination-small {
|
|
||||||
ul > li > a,
|
|
||||||
ul > li > span {
|
|
||||||
padding: @paddingSmall;
|
|
||||||
font-size: @fontSizeSmall;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Mini
|
|
||||||
.pagination-mini {
|
|
||||||
ul > li > a,
|
|
||||||
ul > li > span {
|
|
||||||
padding: @paddingMini;
|
|
||||||
font-size: @fontSizeMini;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,133 +0,0 @@
|
|||||||
//
|
|
||||||
// Popovers
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.popover {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: @zindexPopover;
|
|
||||||
display: none;
|
|
||||||
max-width: 276px;
|
|
||||||
padding: 1px;
|
|
||||||
text-align: left; // Reset given new insertion method
|
|
||||||
background-color: @popoverBackground;
|
|
||||||
-webkit-background-clip: padding-box;
|
|
||||||
-moz-background-clip: padding;
|
|
||||||
background-clip: padding-box;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border: 1px solid rgba(0,0,0,.2);
|
|
||||||
.border-radius(6px);
|
|
||||||
.box-shadow(0 5px 10px rgba(0,0,0,.2));
|
|
||||||
|
|
||||||
// Overrides for proper insertion
|
|
||||||
white-space: normal;
|
|
||||||
|
|
||||||
// Offset the popover to account for the popover arrow
|
|
||||||
&.top { margin-top: -10px; }
|
|
||||||
&.right { margin-left: 10px; }
|
|
||||||
&.bottom { margin-top: 10px; }
|
|
||||||
&.left { margin-left: -10px; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.popover-title {
|
|
||||||
margin: 0; // reset heading margin
|
|
||||||
padding: 8px 14px;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: normal;
|
|
||||||
line-height: 18px;
|
|
||||||
background-color: @popoverTitleBackground;
|
|
||||||
border-bottom: 1px solid darken(@popoverTitleBackground, 5%);
|
|
||||||
.border-radius(5px 5px 0 0);
|
|
||||||
|
|
||||||
&:empty {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.popover-content {
|
|
||||||
padding: 9px 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Arrows
|
|
||||||
//
|
|
||||||
// .arrow is outer, .arrow:after is inner
|
|
||||||
|
|
||||||
.popover .arrow,
|
|
||||||
.popover .arrow:after {
|
|
||||||
position: absolute;
|
|
||||||
display: block;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border-color: transparent;
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
.popover .arrow {
|
|
||||||
border-width: @popoverArrowOuterWidth;
|
|
||||||
}
|
|
||||||
.popover .arrow:after {
|
|
||||||
border-width: @popoverArrowWidth;
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
.popover {
|
|
||||||
&.top .arrow {
|
|
||||||
left: 50%;
|
|
||||||
margin-left: -@popoverArrowOuterWidth;
|
|
||||||
border-bottom-width: 0;
|
|
||||||
border-top-color: #999; // IE8 fallback
|
|
||||||
border-top-color: @popoverArrowOuterColor;
|
|
||||||
bottom: -@popoverArrowOuterWidth;
|
|
||||||
&:after {
|
|
||||||
bottom: 1px;
|
|
||||||
margin-left: -@popoverArrowWidth;
|
|
||||||
border-bottom-width: 0;
|
|
||||||
border-top-color: @popoverArrowColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.right .arrow {
|
|
||||||
top: 50%;
|
|
||||||
left: -@popoverArrowOuterWidth;
|
|
||||||
margin-top: -@popoverArrowOuterWidth;
|
|
||||||
border-left-width: 0;
|
|
||||||
border-right-color: #999; // IE8 fallback
|
|
||||||
border-right-color: @popoverArrowOuterColor;
|
|
||||||
&:after {
|
|
||||||
left: 1px;
|
|
||||||
bottom: -@popoverArrowWidth;
|
|
||||||
border-left-width: 0;
|
|
||||||
border-right-color: @popoverArrowColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.bottom .arrow {
|
|
||||||
left: 50%;
|
|
||||||
margin-left: -@popoverArrowOuterWidth;
|
|
||||||
border-top-width: 0;
|
|
||||||
border-bottom-color: #999; // IE8 fallback
|
|
||||||
border-bottom-color: @popoverArrowOuterColor;
|
|
||||||
top: -@popoverArrowOuterWidth;
|
|
||||||
&:after {
|
|
||||||
top: 1px;
|
|
||||||
margin-left: -@popoverArrowWidth;
|
|
||||||
border-top-width: 0;
|
|
||||||
border-bottom-color: @popoverArrowColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.left .arrow {
|
|
||||||
top: 50%;
|
|
||||||
right: -@popoverArrowOuterWidth;
|
|
||||||
margin-top: -@popoverArrowOuterWidth;
|
|
||||||
border-right-width: 0;
|
|
||||||
border-left-color: #999; // IE8 fallback
|
|
||||||
border-left-color: @popoverArrowOuterColor;
|
|
||||||
&:after {
|
|
||||||
right: 1px;
|
|
||||||
border-right-width: 0;
|
|
||||||
border-left-color: @popoverArrowColor;
|
|
||||||
bottom: -@popoverArrowWidth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,122 +0,0 @@
|
|||||||
//
|
|
||||||
// Progress bars
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// ANIMATIONS
|
|
||||||
// ----------
|
|
||||||
|
|
||||||
// Webkit
|
|
||||||
@-webkit-keyframes progress-bar-stripes {
|
|
||||||
from { background-position: 40px 0; }
|
|
||||||
to { background-position: 0 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Firefox
|
|
||||||
@-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 {
|
|
||||||
from { background-position: 40px 0; }
|
|
||||||
to { background-position: 0 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// THE BARS
|
|
||||||
// --------
|
|
||||||
|
|
||||||
// Outer container
|
|
||||||
.progress {
|
|
||||||
overflow: hidden;
|
|
||||||
height: @baseLineHeight;
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
#gradient > .vertical(#f5f5f5, #f9f9f9);
|
|
||||||
.box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bar of progress
|
|
||||||
.progress .bar {
|
|
||||||
width: 0%;
|
|
||||||
height: 100%;
|
|
||||||
color: @white;
|
|
||||||
float: left;
|
|
||||||
font-size: 12px;
|
|
||||||
text-align: center;
|
|
||||||
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
|
|
||||||
#gradient > .vertical(#149bdf, #0480be);
|
|
||||||
.box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
|
|
||||||
.box-sizing(border-box);
|
|
||||||
.transition(width .6s ease);
|
|
||||||
}
|
|
||||||
.progress .bar + .bar {
|
|
||||||
.box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Striped bars
|
|
||||||
.progress-striped .bar {
|
|
||||||
#gradient > .striped(#149bdf);
|
|
||||||
.background-size(40px 40px);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call animation for the active one
|
|
||||||
.progress.active .bar {
|
|
||||||
-webkit-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
|
|
||||||
// ------
|
|
||||||
|
|
||||||
// Danger (red)
|
|
||||||
.progress-danger .bar, .progress .bar-danger {
|
|
||||||
#gradient > .vertical(#ee5f5b, #c43c35);
|
|
||||||
}
|
|
||||||
.progress-danger.progress-striped .bar, .progress-striped .bar-danger {
|
|
||||||
#gradient > .striped(#ee5f5b);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Success (green)
|
|
||||||
.progress-success .bar, .progress .bar-success {
|
|
||||||
#gradient > .vertical(#62c462, #57a957);
|
|
||||||
}
|
|
||||||
.progress-success.progress-striped .bar, .progress-striped .bar-success {
|
|
||||||
#gradient > .striped(#62c462);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Info (teal)
|
|
||||||
.progress-info .bar, .progress .bar-info {
|
|
||||||
#gradient > .vertical(#5bc0de, #339bb9);
|
|
||||||
}
|
|
||||||
.progress-info.progress-striped .bar, .progress-striped .bar-info {
|
|
||||||
#gradient > .striped(#5bc0de);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Warning (orange)
|
|
||||||
.progress-warning .bar, .progress .bar-warning {
|
|
||||||
#gradient > .vertical(lighten(@orange, 15%), @orange);
|
|
||||||
}
|
|
||||||
.progress-warning.progress-striped .bar, .progress-striped .bar-warning {
|
|
||||||
#gradient > .striped(lighten(@orange, 15%));
|
|
||||||
}
|
|
@ -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 {
|
|
||||||
.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
|
|
||||||
.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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
//
|
|
||||||
// Responsive: Large desktop and up
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
|
|
||||||
// Fixed grid
|
|
||||||
#grid > .core(@gridColumnWidth1200, @gridGutterWidth1200);
|
|
||||||
|
|
||||||
// Fluid grid
|
|
||||||
#grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200);
|
|
||||||
|
|
||||||
// Input grid
|
|
||||||
#grid > .input(@gridColumnWidth1200, @gridGutterWidth1200);
|
|
||||||
|
|
||||||
// Thumbnails
|
|
||||||
.thumbnails {
|
|
||||||
margin-left: -@gridGutterWidth1200;
|
|
||||||
}
|
|
||||||
.thumbnails > li {
|
|
||||||
margin-left: @gridGutterWidth1200;
|
|
||||||
}
|
|
||||||
.row-fluid .thumbnails {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,193 +0,0 @@
|
|||||||
//
|
|
||||||
// Responsive: Landscape phone to desktop/tablet
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
|
|
||||||
// Padding to set content in a bit
|
|
||||||
body {
|
|
||||||
padding-left: 20px;
|
|
||||||
padding-right: 20px;
|
|
||||||
}
|
|
||||||
// Negative indent the now static "fixed" navbar
|
|
||||||
.navbar-fixed-top,
|
|
||||||
.navbar-fixed-bottom,
|
|
||||||
.navbar-static-top {
|
|
||||||
margin-left: -20px;
|
|
||||||
margin-right: -20px;
|
|
||||||
}
|
|
||||||
// Remove padding on container given explicit padding set on body
|
|
||||||
.container-fluid {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TYPOGRAPHY
|
|
||||||
// ----------
|
|
||||||
// Reset horizontal dl
|
|
||||||
.dl-horizontal {
|
|
||||||
dt {
|
|
||||||
float: none;
|
|
||||||
clear: none;
|
|
||||||
width: auto;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
dd {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GRID & CONTAINERS
|
|
||||||
// -----------------
|
|
||||||
// Remove width from containers
|
|
||||||
.container {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
// Fluid rows
|
|
||||||
.row-fluid {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
// Undo negative margin on rows and thumbnails
|
|
||||||
.row,
|
|
||||||
.thumbnails {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
.thumbnails > li {
|
|
||||||
float: none;
|
|
||||||
margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present
|
|
||||||
}
|
|
||||||
// Make all grid-sized elements block level again
|
|
||||||
[class*="span"],
|
|
||||||
.uneditable-input[class*="span"], // Makes uneditable inputs full-width when using grid sizing
|
|
||||||
.row-fluid [class*="span"] {
|
|
||||||
float: none;
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
margin-left: 0;
|
|
||||||
.box-sizing(border-box);
|
|
||||||
}
|
|
||||||
.span12,
|
|
||||||
.row-fluid .span12 {
|
|
||||||
width: 100%;
|
|
||||||
.box-sizing(border-box);
|
|
||||||
}
|
|
||||||
.row-fluid [class*="offset"]:first-child {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FORM FIELDS
|
|
||||||
// -----------
|
|
||||||
// Make span* classes full width
|
|
||||||
.input-large,
|
|
||||||
.input-xlarge,
|
|
||||||
.input-xxlarge,
|
|
||||||
input[class*="span"],
|
|
||||||
select[class*="span"],
|
|
||||||
textarea[class*="span"],
|
|
||||||
.uneditable-input {
|
|
||||||
.input-block-level();
|
|
||||||
}
|
|
||||||
// But don't let it screw up prepend/append inputs
|
|
||||||
.input-prepend input,
|
|
||||||
.input-append input,
|
|
||||||
.input-prepend input[class*="span"],
|
|
||||||
.input-append input[class*="span"] {
|
|
||||||
display: inline-block; // redeclare so they don't wrap to new lines
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
.controls-row [class*="span"] + [class*="span"] {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Modals
|
|
||||||
.modal {
|
|
||||||
position: fixed;
|
|
||||||
top: 20px;
|
|
||||||
left: 20px;
|
|
||||||
right: 20px;
|
|
||||||
width: auto;
|
|
||||||
margin: 0;
|
|
||||||
&.fade { top: -100px; }
|
|
||||||
&.fade.in { top: 20px; }
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// UP TO LANDSCAPE PHONE
|
|
||||||
// ---------------------
|
|
||||||
|
|
||||||
@media (max-width: 480px) {
|
|
||||||
|
|
||||||
// Smooth out the collapsing/expanding nav
|
|
||||||
.nav-collapse {
|
|
||||||
-webkit-transform: translate3d(0, 0, 0); // activate the GPU
|
|
||||||
}
|
|
||||||
|
|
||||||
// Block level the page header small tag for readability
|
|
||||||
.page-header h1 small {
|
|
||||||
display: block;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update checkboxes for iOS
|
|
||||||
input[type="checkbox"],
|
|
||||||
input[type="radio"] {
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the horizontal form styles
|
|
||||||
.form-horizontal {
|
|
||||||
.control-label {
|
|
||||||
float: none;
|
|
||||||
width: auto;
|
|
||||||
padding-top: 0;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
// Move over all input controls and content
|
|
||||||
.controls {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
// Move the options list down to align with labels
|
|
||||||
.control-list {
|
|
||||||
padding-top: 0; // has to be padding because margin collaspes
|
|
||||||
}
|
|
||||||
// Move over buttons in .form-actions to align with .controls
|
|
||||||
.form-actions {
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Medias
|
|
||||||
// Reset float and spacing to stack
|
|
||||||
.media .pull-left,
|
|
||||||
.media .pull-right {
|
|
||||||
float: none;
|
|
||||||
display: block;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
// Remove side margins since we stack instead of indent
|
|
||||||
.media-object {
|
|
||||||
margin-right: 0;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Modals
|
|
||||||
.modal {
|
|
||||||
top: 10px;
|
|
||||||
left: 10px;
|
|
||||||
right: 10px;
|
|
||||||
}
|
|
||||||
.modal-header .close {
|
|
||||||
padding: 10px;
|
|
||||||
margin: -10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carousel
|
|
||||||
.carousel-caption {
|
|
||||||
position: static;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
//
|
|
||||||
// Responsive: Tablet to desktop
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
@media (min-width: 768px) and (max-width: 979px) {
|
|
||||||
|
|
||||||
// Fixed grid
|
|
||||||
#grid > .core(@gridColumnWidth768, @gridGutterWidth768);
|
|
||||||
|
|
||||||
// Fluid grid
|
|
||||||
#grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768);
|
|
||||||
|
|
||||||
// Input grid
|
|
||||||
#grid > .input(@gridColumnWidth768, @gridGutterWidth768);
|
|
||||||
|
|
||||||
// No need to reset .thumbnails here since it's the same @gridGutterWidth
|
|
||||||
|
|
||||||
}
|
|
@ -1,189 +0,0 @@
|
|||||||
//
|
|
||||||
// Responsive: Navbar
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// TABLETS AND BELOW
|
|
||||||
// -----------------
|
|
||||||
@media (max-width: @navbarCollapseWidth) {
|
|
||||||
|
|
||||||
// UNFIX THE TOPBAR
|
|
||||||
// ----------------
|
|
||||||
// Remove any padding from the body
|
|
||||||
body {
|
|
||||||
padding-top: 0;
|
|
||||||
}
|
|
||||||
// Unfix the navbars
|
|
||||||
.navbar-fixed-top,
|
|
||||||
.navbar-fixed-bottom {
|
|
||||||
position: static;
|
|
||||||
}
|
|
||||||
.navbar-fixed-top {
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
}
|
|
||||||
.navbar-fixed-bottom {
|
|
||||||
margin-top: @baseLineHeight;
|
|
||||||
}
|
|
||||||
.navbar-fixed-top .navbar-inner,
|
|
||||||
.navbar-fixed-bottom .navbar-inner {
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
.navbar .container {
|
|
||||||
width: auto;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
// Account for brand name
|
|
||||||
.navbar .brand {
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-right: 10px;
|
|
||||||
margin: 0 0 0 -5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COLLAPSIBLE NAVBAR
|
|
||||||
// ------------------
|
|
||||||
// Nav collapse clears brand
|
|
||||||
.nav-collapse {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
// Block-level the nav
|
|
||||||
.nav-collapse .nav {
|
|
||||||
float: none;
|
|
||||||
margin: 0 0 (@baseLineHeight / 2);
|
|
||||||
}
|
|
||||||
.nav-collapse .nav > li {
|
|
||||||
float: none;
|
|
||||||
}
|
|
||||||
.nav-collapse .nav > li > a {
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
.nav-collapse .nav > .divider-vertical {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.nav-collapse .nav .nav-header {
|
|
||||||
color: @navbarText;
|
|
||||||
text-shadow: none;
|
|
||||||
}
|
|
||||||
// Nav and dropdown links in navbar
|
|
||||||
.nav-collapse .nav > li > a,
|
|
||||||
.nav-collapse .dropdown-menu a {
|
|
||||||
padding: 9px 15px;
|
|
||||||
font-weight: bold;
|
|
||||||
color: @navbarLinkColor;
|
|
||||||
.border-radius(3px);
|
|
||||||
}
|
|
||||||
// Buttons
|
|
||||||
.nav-collapse .btn {
|
|
||||||
padding: 4px 10px 4px;
|
|
||||||
font-weight: normal;
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
.nav-collapse .dropdown-menu li + li a {
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
.nav-collapse .nav > li > a:hover,
|
|
||||||
.nav-collapse .nav > li > a:focus,
|
|
||||||
.nav-collapse .dropdown-menu a:hover,
|
|
||||||
.nav-collapse .dropdown-menu a:focus {
|
|
||||||
background-color: @navbarBackground;
|
|
||||||
}
|
|
||||||
.navbar-inverse .nav-collapse .nav > li > a,
|
|
||||||
.navbar-inverse .nav-collapse .dropdown-menu a {
|
|
||||||
color: @navbarInverseLinkColor;
|
|
||||||
}
|
|
||||||
.navbar-inverse .nav-collapse .nav > li > a:hover,
|
|
||||||
.navbar-inverse .nav-collapse .nav > li > a:focus,
|
|
||||||
.navbar-inverse .nav-collapse .dropdown-menu a:hover,
|
|
||||||
.navbar-inverse .nav-collapse .dropdown-menu a:focus {
|
|
||||||
background-color: @navbarInverseBackground;
|
|
||||||
}
|
|
||||||
// Buttons in the navbar
|
|
||||||
.nav-collapse.in .btn-group {
|
|
||||||
margin-top: 5px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
// Dropdowns in the navbar
|
|
||||||
.nav-collapse .dropdown-menu {
|
|
||||||
position: static;
|
|
||||||
top: auto;
|
|
||||||
left: auto;
|
|
||||||
float: none;
|
|
||||||
display: none;
|
|
||||||
max-width: none;
|
|
||||||
margin: 0 15px;
|
|
||||||
padding: 0;
|
|
||||||
background-color: transparent;
|
|
||||||
border: none;
|
|
||||||
.border-radius(0);
|
|
||||||
.box-shadow(none);
|
|
||||||
}
|
|
||||||
.nav-collapse .open > .dropdown-menu {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-collapse .dropdown-menu:before,
|
|
||||||
.nav-collapse .dropdown-menu:after {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.nav-collapse .dropdown-menu .divider {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.nav-collapse .nav > li > .dropdown-menu {
|
|
||||||
&:before,
|
|
||||||
&:after {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Forms in navbar
|
|
||||||
.nav-collapse .navbar-form,
|
|
||||||
.nav-collapse .navbar-search {
|
|
||||||
float: none;
|
|
||||||
padding: (@baseLineHeight / 2) 15px;
|
|
||||||
margin: (@baseLineHeight / 2) 0;
|
|
||||||
border-top: 1px solid @navbarBackground;
|
|
||||||
border-bottom: 1px solid @navbarBackground;
|
|
||||||
.box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)");
|
|
||||||
}
|
|
||||||
.navbar-inverse .nav-collapse .navbar-form,
|
|
||||||
.navbar-inverse .nav-collapse .navbar-search {
|
|
||||||
border-top-color: @navbarInverseBackground;
|
|
||||||
border-bottom-color: @navbarInverseBackground;
|
|
||||||
}
|
|
||||||
// Pull right (secondary) nav content
|
|
||||||
.navbar .nav-collapse .nav.pull-right {
|
|
||||||
float: none;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
// Hide everything in the navbar save .brand and toggle button */
|
|
||||||
.nav-collapse,
|
|
||||||
.nav-collapse.collapse {
|
|
||||||
overflow: hidden;
|
|
||||||
height: 0;
|
|
||||||
}
|
|
||||||
// Navbar button
|
|
||||||
.navbar .btn-navbar {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
// STATIC NAVBAR
|
|
||||||
// -------------
|
|
||||||
.navbar-static .navbar-inner {
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// DEFAULT DESKTOP
|
|
||||||
// ---------------
|
|
||||||
|
|
||||||
@media (min-width: @navbarCollapseDesktopWidth) {
|
|
||||||
|
|
||||||
// Required to make the collapsing navbar work on regular desktops
|
|
||||||
.nav-collapse.collapse {
|
|
||||||
height: auto !important;
|
|
||||||
overflow: visible !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
//
|
|
||||||
// Responsive: Utility classes
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// IE10 Metro responsive
|
|
||||||
// Required for Windows 8 Metro split-screen snapping with IE10
|
|
||||||
// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
|
|
||||||
@-ms-viewport{
|
|
||||||
width: device-width;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hide from screenreaders and browsers
|
|
||||||
// Credit: HTML5 Boilerplate
|
|
||||||
.hidden {
|
|
||||||
display: none;
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Visibility utilities
|
|
||||||
|
|
||||||
// For desktops
|
|
||||||
.visible-phone { display: none !important; }
|
|
||||||
.visible-tablet { display: none !important; }
|
|
||||||
.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 (max-width: 767px) {
|
|
||||||
// Hide everything else
|
|
||||||
.hidden-desktop { display: inherit !important; }
|
|
||||||
.visible-desktop { display: none !important; }
|
|
||||||
// Show
|
|
||||||
.visible-phone { display: inherit !important; } // Use inherit to restore previous behavior
|
|
||||||
// Hide
|
|
||||||
.hidden-phone { display: none !important; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Print utilities
|
|
||||||
.visible-print { display: none !important; }
|
|
||||||
.hidden-print { }
|
|
||||||
|
|
||||||
@media print {
|
|
||||||
.visible-print { display: inherit !important; }
|
|
||||||
.hidden-print { display: none !important; }
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Bootstrap Responsive v2.3.2
|
|
||||||
*
|
|
||||||
* 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.less
|
|
||||||
// For phone and tablet devices
|
|
||||||
// -------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// REPEAT VARIABLES & MIXINS
|
|
||||||
// -------------------------
|
|
||||||
// Required since we compile the responsive stuff separately
|
|
||||||
|
|
||||||
@import "variables.less"; // Modify this for custom colors, font-sizes, etc
|
|
||||||
@import "mixins.less";
|
|
||||||
|
|
||||||
|
|
||||||
// RESPONSIVE CLASSES
|
|
||||||
// ------------------
|
|
||||||
|
|
||||||
@import "responsive-utilities.less";
|
|
||||||
|
|
||||||
|
|
||||||
// MEDIA QUERIES
|
|
||||||
// ------------------
|
|
||||||
|
|
||||||
// Large desktops
|
|
||||||
@import "responsive-1200px-min.less";
|
|
||||||
|
|
||||||
// Tablets to regular desktops
|
|
||||||
@import "responsive-768px-979px.less";
|
|
||||||
|
|
||||||
// Phones to portrait tablets and narrow desktops
|
|
||||||
@import "responsive-767px-max.less";
|
|
||||||
|
|
||||||
|
|
||||||
// RESPONSIVE NAVBAR
|
|
||||||
// ------------------
|
|
||||||
|
|
||||||
// From 979px and below, show a button to toggle navbar contents
|
|
||||||
@import "responsive-navbar.less";
|
|
@ -1,53 +0,0 @@
|
|||||||
//
|
|
||||||
// Scaffolding
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Body reset
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
font-family: @baseFontFamily;
|
|
||||||
font-size: @baseFontSize;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
color: @textColor;
|
|
||||||
background-color: @bodyBackground;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Links
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: @linkColor;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:hover,
|
|
||||||
a:focus {
|
|
||||||
color: @linkColorHover;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Images
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
// Rounded corners
|
|
||||||
.img-rounded {
|
|
||||||
.border-radius(6px);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add polaroid-esque trim
|
|
||||||
.img-polaroid {
|
|
||||||
padding: 4px;
|
|
||||||
background-color: #fff;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border: 1px solid rgba(0,0,0,.2);
|
|
||||||
.box-shadow(0 1px 3px rgba(0,0,0,.1));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perfect circle
|
|
||||||
.img-circle {
|
|
||||||
.border-radius(500px); // crank the border-radius so it works with most reasonably sized images
|
|
||||||
}
|
|
@ -1,104 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Slider for Bootstrap
|
|
||||||
*
|
|
||||||
* Copyright 2012 Stefan Petre
|
|
||||||
* Licensed under the Apache License v2.0
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
.slider {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
position: relative;
|
|
||||||
&.slider-horizontal {
|
|
||||||
width: 210px;
|
|
||||||
height: @baseLineHeight;
|
|
||||||
.slider-track {
|
|
||||||
height: @baseLineHeight/2;
|
|
||||||
width: 100%;
|
|
||||||
margin-top: -@baseLineHeight/4;
|
|
||||||
top: 50%;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
.slider-selection {
|
|
||||||
height: 100%;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
.slider-handle {
|
|
||||||
margin-left: -@baseLineHeight/2;
|
|
||||||
margin-top: -@baseLineHeight/4;
|
|
||||||
&.triangle {
|
|
||||||
border-width: 0 @baseLineHeight/2 @baseLineHeight/2 @baseLineHeight/2;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border-bottom-color: #0480be;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.slider-vertical {
|
|
||||||
height: 210px;
|
|
||||||
width: @baseLineHeight;
|
|
||||||
.slider-track {
|
|
||||||
width: @baseLineHeight/2;
|
|
||||||
height: 100%;
|
|
||||||
margin-left: -@baseLineHeight/4;
|
|
||||||
left: 50%;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
.slider-selection {
|
|
||||||
width: 100%;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
.slider-handle {
|
|
||||||
margin-left: -@baseLineHeight/4;
|
|
||||||
margin-top: -@baseLineHeight/2;
|
|
||||||
&.triangle {
|
|
||||||
border-width: @baseLineHeight/2 0 @baseLineHeight/2 @baseLineHeight/2;
|
|
||||||
width: 1px;
|
|
||||||
height: 1px;
|
|
||||||
border-left-color: #0480be;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
input {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.tooltip-inner {
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.slider-track {
|
|
||||||
position: absolute;
|
|
||||||
cursor: pointer;
|
|
||||||
#gradient > .vertical(#f5f5f5, #f9f9f9);
|
|
||||||
.box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
.slider-selection {
|
|
||||||
position: absolute;
|
|
||||||
#gradient > .vertical(#f9f9f9, #f5f5f5);
|
|
||||||
.box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
|
|
||||||
.box-sizing(border-box);
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
.slider-handle {
|
|
||||||
position: absolute;
|
|
||||||
width: @baseLineHeight;
|
|
||||||
height: @baseLineHeight;
|
|
||||||
#gradient > .vertical(#149bdf, #0480be);
|
|
||||||
.box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)");
|
|
||||||
opacity: 0.8;
|
|
||||||
border: 0px solid transparent;
|
|
||||||
&.round {
|
|
||||||
.border-radius(@baseLineHeight);
|
|
||||||
}
|
|
||||||
&.triangle {
|
|
||||||
background: transparent none;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,197 +0,0 @@
|
|||||||
//
|
|
||||||
// Sprites
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// ICONS
|
|
||||||
// -----
|
|
||||||
|
|
||||||
// All icons receive the styles of the <i> tag with a base class
|
|
||||||
// of .i and are then given a unique class to add width, height,
|
|
||||||
// and background-position. Your resulting HTML will look like
|
|
||||||
// <i class="icon-inbox"></i>.
|
|
||||||
|
|
||||||
// For the white version of the icons, just add the .icon-white class:
|
|
||||||
// <i class="icon-inbox icon-white"></i>
|
|
||||||
|
|
||||||
[class^="icon-"],
|
|
||||||
[class*=" icon-"] {
|
|
||||||
display: inline-block;
|
|
||||||
width: 14px;
|
|
||||||
height: 14px;
|
|
||||||
.ie7-restore-right-whitespace();
|
|
||||||
line-height: 14px;
|
|
||||||
vertical-align: text-top;
|
|
||||||
background-image: url("@{iconSpritePath}");
|
|
||||||
background-position: 14px 14px;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
margin-top: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* White icons with optional class, or on hover/focus/active states of certain elements */
|
|
||||||
.icon-white,
|
|
||||||
.nav-pills > .active > a > [class^="icon-"],
|
|
||||||
.nav-pills > .active > a > [class*=" icon-"],
|
|
||||||
.nav-list > .active > a > [class^="icon-"],
|
|
||||||
.nav-list > .active > a > [class*=" icon-"],
|
|
||||||
.navbar-inverse .nav > .active > a > [class^="icon-"],
|
|
||||||
.navbar-inverse .nav > .active > a > [class*=" icon-"],
|
|
||||||
.dropdown-menu > li > a:hover > [class^="icon-"],
|
|
||||||
.dropdown-menu > li > a:focus > [class^="icon-"],
|
|
||||||
.dropdown-menu > li > a:hover > [class*=" icon-"],
|
|
||||||
.dropdown-menu > li > a:focus > [class*=" icon-"],
|
|
||||||
.dropdown-menu > .active > a > [class^="icon-"],
|
|
||||||
.dropdown-menu > .active > a > [class*=" icon-"],
|
|
||||||
.dropdown-submenu:hover > a > [class^="icon-"],
|
|
||||||
.dropdown-submenu:focus > a > [class^="icon-"],
|
|
||||||
.dropdown-submenu:hover > a > [class*=" icon-"],
|
|
||||||
.dropdown-submenu:focus > a > [class*=" icon-"] {
|
|
||||||
background-image: url("@{iconWhiteSpritePath}");
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-glass { background-position: 0 0; }
|
|
||||||
.icon-music { background-position: -24px 0; }
|
|
||||||
.icon-search { background-position: -48px 0; }
|
|
||||||
.icon-envelope { background-position: -72px 0; }
|
|
||||||
.icon-heart { background-position: -96px 0; }
|
|
||||||
.icon-star { background-position: -120px 0; }
|
|
||||||
.icon-star-empty { background-position: -144px 0; }
|
|
||||||
.icon-user { background-position: -168px 0; }
|
|
||||||
.icon-film { background-position: -192px 0; }
|
|
||||||
.icon-th-large { background-position: -216px 0; }
|
|
||||||
.icon-th { background-position: -240px 0; }
|
|
||||||
.icon-th-list { background-position: -264px 0; }
|
|
||||||
.icon-ok { background-position: -288px 0; }
|
|
||||||
.icon-remove { background-position: -312px 0; }
|
|
||||||
.icon-zoom-in { background-position: -336px 0; }
|
|
||||||
.icon-zoom-out { background-position: -360px 0; }
|
|
||||||
.icon-off { background-position: -384px 0; }
|
|
||||||
.icon-signal { background-position: -408px 0; }
|
|
||||||
.icon-cog { background-position: -432px 0; }
|
|
||||||
.icon-trash { background-position: -456px 0; }
|
|
||||||
|
|
||||||
.icon-home { background-position: 0 -24px; }
|
|
||||||
.icon-file { background-position: -24px -24px; }
|
|
||||||
.icon-time { background-position: -48px -24px; }
|
|
||||||
.icon-road { background-position: -72px -24px; }
|
|
||||||
.icon-download-alt { background-position: -96px -24px; }
|
|
||||||
.icon-download { background-position: -120px -24px; }
|
|
||||||
.icon-upload { background-position: -144px -24px; }
|
|
||||||
.icon-inbox { background-position: -168px -24px; }
|
|
||||||
.icon-play-circle { background-position: -192px -24px; }
|
|
||||||
.icon-repeat { background-position: -216px -24px; }
|
|
||||||
.icon-refresh { background-position: -240px -24px; }
|
|
||||||
.icon-list-alt { background-position: -264px -24px; }
|
|
||||||
.icon-lock { background-position: -287px -24px; } // 1px off
|
|
||||||
.icon-flag { background-position: -312px -24px; }
|
|
||||||
.icon-headphones { background-position: -336px -24px; }
|
|
||||||
.icon-volume-off { background-position: -360px -24px; }
|
|
||||||
.icon-volume-down { background-position: -384px -24px; }
|
|
||||||
.icon-volume-up { background-position: -408px -24px; }
|
|
||||||
.icon-qrcode { background-position: -432px -24px; }
|
|
||||||
.icon-barcode { background-position: -456px -24px; }
|
|
||||||
|
|
||||||
.icon-tag { background-position: 0 -48px; }
|
|
||||||
.icon-tags { background-position: -25px -48px; } // 1px off
|
|
||||||
.icon-book { background-position: -48px -48px; }
|
|
||||||
.icon-bookmark { background-position: -72px -48px; }
|
|
||||||
.icon-print { background-position: -96px -48px; }
|
|
||||||
.icon-camera { background-position: -120px -48px; }
|
|
||||||
.icon-font { background-position: -144px -48px; }
|
|
||||||
.icon-bold { background-position: -167px -48px; } // 1px off
|
|
||||||
.icon-italic { background-position: -192px -48px; }
|
|
||||||
.icon-text-height { background-position: -216px -48px; }
|
|
||||||
.icon-text-width { background-position: -240px -48px; }
|
|
||||||
.icon-align-left { background-position: -264px -48px; }
|
|
||||||
.icon-align-center { background-position: -288px -48px; }
|
|
||||||
.icon-align-right { background-position: -312px -48px; }
|
|
||||||
.icon-align-justify { background-position: -336px -48px; }
|
|
||||||
.icon-list { background-position: -360px -48px; }
|
|
||||||
.icon-indent-left { background-position: -384px -48px; }
|
|
||||||
.icon-indent-right { background-position: -408px -48px; }
|
|
||||||
.icon-facetime-video { background-position: -432px -48px; }
|
|
||||||
.icon-picture { background-position: -456px -48px; }
|
|
||||||
|
|
||||||
.icon-pencil { background-position: 0 -72px; }
|
|
||||||
.icon-map-marker { background-position: -24px -72px; }
|
|
||||||
.icon-adjust { background-position: -48px -72px; }
|
|
||||||
.icon-tint { background-position: -72px -72px; }
|
|
||||||
.icon-edit { background-position: -96px -72px; }
|
|
||||||
.icon-share { background-position: -120px -72px; }
|
|
||||||
.icon-check { background-position: -144px -72px; }
|
|
||||||
.icon-move { background-position: -168px -72px; }
|
|
||||||
.icon-step-backward { background-position: -192px -72px; }
|
|
||||||
.icon-fast-backward { background-position: -216px -72px; }
|
|
||||||
.icon-backward { background-position: -240px -72px; }
|
|
||||||
.icon-play { background-position: -264px -72px; }
|
|
||||||
.icon-pause { background-position: -288px -72px; }
|
|
||||||
.icon-stop { background-position: -312px -72px; }
|
|
||||||
.icon-forward { background-position: -336px -72px; }
|
|
||||||
.icon-fast-forward { background-position: -360px -72px; }
|
|
||||||
.icon-step-forward { background-position: -384px -72px; }
|
|
||||||
.icon-eject { background-position: -408px -72px; }
|
|
||||||
.icon-chevron-left { background-position: -432px -72px; }
|
|
||||||
.icon-chevron-right { background-position: -456px -72px; }
|
|
||||||
|
|
||||||
.icon-plus-sign { background-position: 0 -96px; }
|
|
||||||
.icon-minus-sign { background-position: -24px -96px; }
|
|
||||||
.icon-remove-sign { background-position: -48px -96px; }
|
|
||||||
.icon-ok-sign { background-position: -72px -96px; }
|
|
||||||
.icon-question-sign { background-position: -96px -96px; }
|
|
||||||
.icon-info-sign { background-position: -120px -96px; }
|
|
||||||
.icon-screenshot { background-position: -144px -96px; }
|
|
||||||
.icon-remove-circle { background-position: -168px -96px; }
|
|
||||||
.icon-ok-circle { background-position: -192px -96px; }
|
|
||||||
.icon-ban-circle { background-position: -216px -96px; }
|
|
||||||
.icon-arrow-left { background-position: -240px -96px; }
|
|
||||||
.icon-arrow-right { background-position: -264px -96px; }
|
|
||||||
.icon-arrow-up { background-position: -289px -96px; } // 1px off
|
|
||||||
.icon-arrow-down { background-position: -312px -96px; }
|
|
||||||
.icon-share-alt { background-position: -336px -96px; }
|
|
||||||
.icon-resize-full { background-position: -360px -96px; }
|
|
||||||
.icon-resize-small { background-position: -384px -96px; }
|
|
||||||
.icon-plus { background-position: -408px -96px; }
|
|
||||||
.icon-minus { background-position: -433px -96px; }
|
|
||||||
.icon-asterisk { background-position: -456px -96px; }
|
|
||||||
|
|
||||||
.icon-exclamation-sign { background-position: 0 -120px; }
|
|
||||||
.icon-gift { background-position: -24px -120px; }
|
|
||||||
.icon-leaf { background-position: -48px -120px; }
|
|
||||||
.icon-fire { background-position: -72px -120px; }
|
|
||||||
.icon-eye-open { background-position: -96px -120px; }
|
|
||||||
.icon-eye-close { background-position: -120px -120px; }
|
|
||||||
.icon-warning-sign { background-position: -144px -120px; }
|
|
||||||
.icon-plane { background-position: -168px -120px; }
|
|
||||||
.icon-calendar { background-position: -192px -120px; }
|
|
||||||
.icon-random { background-position: -216px -120px; width: 16px; }
|
|
||||||
.icon-comment { background-position: -240px -120px; }
|
|
||||||
.icon-magnet { background-position: -264px -120px; }
|
|
||||||
.icon-chevron-up { background-position: -288px -120px; }
|
|
||||||
.icon-chevron-down { background-position: -313px -119px; } // 1px, 1px off
|
|
||||||
.icon-retweet { background-position: -336px -120px; }
|
|
||||||
.icon-shopping-cart { background-position: -360px -120px; }
|
|
||||||
.icon-folder-close { background-position: -384px -120px; width: 16px; }
|
|
||||||
.icon-folder-open { background-position: -408px -120px; width: 16px; }
|
|
||||||
.icon-resize-vertical { background-position: -432px -119px; } // 1px, 1px off
|
|
||||||
.icon-resize-horizontal { background-position: -456px -118px; } // 1px, 2px off
|
|
||||||
|
|
||||||
.icon-hdd { background-position: 0 -144px; }
|
|
||||||
.icon-bullhorn { background-position: -24px -144px; }
|
|
||||||
.icon-bell { background-position: -48px -144px; }
|
|
||||||
.icon-certificate { background-position: -72px -144px; }
|
|
||||||
.icon-thumbs-up { background-position: -96px -144px; }
|
|
||||||
.icon-thumbs-down { background-position: -120px -144px; }
|
|
||||||
.icon-hand-right { background-position: -144px -144px; }
|
|
||||||
.icon-hand-left { background-position: -168px -144px; }
|
|
||||||
.icon-hand-up { background-position: -192px -144px; }
|
|
||||||
.icon-hand-down { background-position: -216px -144px; }
|
|
||||||
.icon-circle-arrow-right { background-position: -240px -144px; }
|
|
||||||
.icon-circle-arrow-left { background-position: -264px -144px; }
|
|
||||||
.icon-circle-arrow-up { background-position: -288px -144px; }
|
|
||||||
.icon-circle-arrow-down { background-position: -312px -144px; }
|
|
||||||
.icon-globe { background-position: -336px -144px; }
|
|
||||||
.icon-wrench { background-position: -360px -144px; }
|
|
||||||
.icon-tasks { background-position: -384px -144px; }
|
|
||||||
.icon-filter { background-position: -408px -144px; }
|
|
||||||
.icon-briefcase { background-position: -432px -144px; }
|
|
||||||
.icon-fullscreen { background-position: -456px -144px; }
|
|
@ -1,244 +0,0 @@
|
|||||||
//
|
|
||||||
// Tables
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// BASE TABLES
|
|
||||||
// -----------------
|
|
||||||
|
|
||||||
table {
|
|
||||||
max-width: 100%;
|
|
||||||
background-color: @tableBackground;
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// BASELINE STYLES
|
|
||||||
// ---------------
|
|
||||||
|
|
||||||
.table {
|
|
||||||
width: 100%;
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
// Cells
|
|
||||||
th,
|
|
||||||
td {
|
|
||||||
padding: 8px;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
text-align: left;
|
|
||||||
vertical-align: top;
|
|
||||||
border-top: 1px solid @tableBorder;
|
|
||||||
}
|
|
||||||
th {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
// Bottom align for column headings
|
|
||||||
thead th {
|
|
||||||
vertical-align: bottom;
|
|
||||||
}
|
|
||||||
// Remove top border from thead by default
|
|
||||||
caption + thead tr:first-child th,
|
|
||||||
caption + thead tr:first-child td,
|
|
||||||
colgroup + thead tr:first-child th,
|
|
||||||
colgroup + thead tr:first-child td,
|
|
||||||
thead:first-child tr:first-child th,
|
|
||||||
thead:first-child tr:first-child td {
|
|
||||||
border-top: 0;
|
|
||||||
}
|
|
||||||
// Account for multiple tbody instances
|
|
||||||
tbody + tbody {
|
|
||||||
border-top: 2px solid @tableBorder;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nesting
|
|
||||||
.table {
|
|
||||||
background-color: @bodyBackground;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// CONDENSED TABLE W/ HALF PADDING
|
|
||||||
// -------------------------------
|
|
||||||
|
|
||||||
.table-condensed {
|
|
||||||
th,
|
|
||||||
td {
|
|
||||||
padding: 4px 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// BORDERED VERSION
|
|
||||||
// ----------------
|
|
||||||
|
|
||||||
.table-bordered {
|
|
||||||
border: 1px solid @tableBorder;
|
|
||||||
border-collapse: separate; // Done so we can round those corners!
|
|
||||||
*border-collapse: collapse; // IE7 can't round corners anyway
|
|
||||||
border-left: 0;
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
th,
|
|
||||||
td {
|
|
||||||
border-left: 1px solid @tableBorder;
|
|
||||||
}
|
|
||||||
// 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 {
|
|
||||||
.border-top-left-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
// For last th/td in the first row in the first thead or tbody
|
|
||||||
thead:first-child tr:first-child > th:last-child,
|
|
||||||
tbody:first-child tr:first-child > td:last-child,
|
|
||||||
tbody:first-child tr:first-child > th:last-child {
|
|
||||||
.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 {
|
|
||||||
.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 {
|
|
||||||
.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 {
|
|
||||||
.border-bottom-left-radius(0);
|
|
||||||
}
|
|
||||||
tfoot + tbody:last-child tr:last-child td:last-child {
|
|
||||||
.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 {
|
|
||||||
.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 {
|
|
||||||
.border-top-right-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ZEBRA-STRIPING
|
|
||||||
// --------------
|
|
||||||
|
|
||||||
// Default zebra-stripe styles (alternating gray and transparent backgrounds)
|
|
||||||
.table-striped {
|
|
||||||
tbody {
|
|
||||||
> tr:nth-child(odd) > td,
|
|
||||||
> tr:nth-child(odd) > th {
|
|
||||||
background-color: @tableBackgroundAccent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// HOVER EFFECT
|
|
||||||
// ------------
|
|
||||||
// Placed here since it has to come after the potential zebra striping
|
|
||||||
.table-hover {
|
|
||||||
tbody {
|
|
||||||
tr:hover > td,
|
|
||||||
tr:hover > th {
|
|
||||||
background-color: @tableBackgroundHover;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// TABLE CELL SIZING
|
|
||||||
// -----------------
|
|
||||||
|
|
||||||
// Reset default grid behavior
|
|
||||||
table td[class*="span"],
|
|
||||||
table th[class*="span"],
|
|
||||||
.row-fluid table td[class*="span"],
|
|
||||||
.row-fluid table th[class*="span"] {
|
|
||||||
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 {
|
|
||||||
&.span1 { .tableColumns(1); }
|
|
||||||
&.span2 { .tableColumns(2); }
|
|
||||||
&.span3 { .tableColumns(3); }
|
|
||||||
&.span4 { .tableColumns(4); }
|
|
||||||
&.span5 { .tableColumns(5); }
|
|
||||||
&.span6 { .tableColumns(6); }
|
|
||||||
&.span7 { .tableColumns(7); }
|
|
||||||
&.span8 { .tableColumns(8); }
|
|
||||||
&.span9 { .tableColumns(9); }
|
|
||||||
&.span10 { .tableColumns(10); }
|
|
||||||
&.span11 { .tableColumns(11); }
|
|
||||||
&.span12 { .tableColumns(12); }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TABLE BACKGROUNDS
|
|
||||||
// -----------------
|
|
||||||
// Exact selectors below required to override .table-striped
|
|
||||||
|
|
||||||
.table tbody tr {
|
|
||||||
&.success > td {
|
|
||||||
background-color: @successBackground;
|
|
||||||
}
|
|
||||||
&.error > td {
|
|
||||||
background-color: @errorBackground;
|
|
||||||
}
|
|
||||||
&.warning > td {
|
|
||||||
background-color: @warningBackground;
|
|
||||||
}
|
|
||||||
&.info > td {
|
|
||||||
background-color: @infoBackground;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hover states for .table-hover
|
|
||||||
.table-hover tbody tr {
|
|
||||||
&.success:hover > td {
|
|
||||||
background-color: darken(@successBackground, 5%);
|
|
||||||
}
|
|
||||||
&.error:hover > td {
|
|
||||||
background-color: darken(@errorBackground, 5%);
|
|
||||||
}
|
|
||||||
&.warning:hover > td {
|
|
||||||
background-color: darken(@warningBackground, 5%);
|
|
||||||
}
|
|
||||||
&.info:hover > td {
|
|
||||||
background-color: darken(@infoBackground, 5%);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
//
|
|
||||||
// Thumbnails
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files
|
|
||||||
|
|
||||||
// Make wrapper ul behave like the grid
|
|
||||||
.thumbnails {
|
|
||||||
margin-left: -@gridGutterWidth;
|
|
||||||
list-style: none;
|
|
||||||
.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 {
|
|
||||||
display: block;
|
|
||||||
padding: 4px;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
.box-shadow(0 1px 3px rgba(0,0,0,.055));
|
|
||||||
.transition(all .2s ease-in-out);
|
|
||||||
}
|
|
||||||
// Add a hover/focus state for linked versions only
|
|
||||||
a.thumbnail:hover,
|
|
||||||
a.thumbnail:focus {
|
|
||||||
border-color: @linkColor;
|
|
||||||
.box-shadow(0 1px 4px rgba(0,105,214,.25));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Images and captions
|
|
||||||
.thumbnail > img {
|
|
||||||
display: block;
|
|
||||||
max-width: 100%;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
.thumbnail .caption {
|
|
||||||
padding: 9px;
|
|
||||||
color: @gray;
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
//
|
|
||||||
// Tooltips
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Base class
|
|
||||||
.tooltip {
|
|
||||||
position: absolute;
|
|
||||||
z-index: @zindexTooltip;
|
|
||||||
display: block;
|
|
||||||
visibility: visible;
|
|
||||||
font-size: 11px;
|
|
||||||
line-height: 1.4;
|
|
||||||
.opacity(0);
|
|
||||||
&.in { .opacity(80); }
|
|
||||||
&.top { margin-top: -3px; padding: 5px 0; }
|
|
||||||
&.right { margin-left: 3px; padding: 0 5px; }
|
|
||||||
&.bottom { margin-top: 3px; padding: 5px 0; }
|
|
||||||
&.left { margin-left: -3px; padding: 0 5px; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper for the tooltip content
|
|
||||||
.tooltip-inner {
|
|
||||||
max-width: 200px;
|
|
||||||
padding: 8px;
|
|
||||||
color: @tooltipColor;
|
|
||||||
text-align: center;
|
|
||||||
text-decoration: none;
|
|
||||||
background-color: @tooltipBackground;
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Arrows
|
|
||||||
.tooltip-arrow {
|
|
||||||
position: absolute;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border-color: transparent;
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
.tooltip {
|
|
||||||
&.top .tooltip-arrow {
|
|
||||||
bottom: 0;
|
|
||||||
left: 50%;
|
|
||||||
margin-left: -@tooltipArrowWidth;
|
|
||||||
border-width: @tooltipArrowWidth @tooltipArrowWidth 0;
|
|
||||||
border-top-color: @tooltipArrowColor;
|
|
||||||
}
|
|
||||||
&.right .tooltip-arrow {
|
|
||||||
top: 50%;
|
|
||||||
left: 0;
|
|
||||||
margin-top: -@tooltipArrowWidth;
|
|
||||||
border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0;
|
|
||||||
border-right-color: @tooltipArrowColor;
|
|
||||||
}
|
|
||||||
&.left .tooltip-arrow {
|
|
||||||
top: 50%;
|
|
||||||
right: 0;
|
|
||||||
margin-top: -@tooltipArrowWidth;
|
|
||||||
border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth;
|
|
||||||
border-left-color: @tooltipArrowColor;
|
|
||||||
}
|
|
||||||
&.bottom .tooltip-arrow {
|
|
||||||
top: 0;
|
|
||||||
left: 50%;
|
|
||||||
margin-left: -@tooltipArrowWidth;
|
|
||||||
border-width: 0 @tooltipArrowWidth @tooltipArrowWidth;
|
|
||||||
border-bottom-color: @tooltipArrowColor;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,247 +0,0 @@
|
|||||||
//
|
|
||||||
// Typography
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Body text
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin: 0 0 @baseLineHeight / 2;
|
|
||||||
}
|
|
||||||
.lead {
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
font-size: @baseFontSize * 1.5;
|
|
||||||
font-weight: 200;
|
|
||||||
line-height: @baseLineHeight * 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Emphasis & misc
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
// Ex: 14px base font * 85% = about 12px
|
|
||||||
small { font-size: 85%; }
|
|
||||||
|
|
||||||
strong { font-weight: bold; }
|
|
||||||
em { font-style: italic; }
|
|
||||||
cite { font-style: normal; }
|
|
||||||
|
|
||||||
// Utility classes
|
|
||||||
.muted { color: @grayLight; }
|
|
||||||
a.muted:hover,
|
|
||||||
a.muted:focus { color: darken(@grayLight, 10%); }
|
|
||||||
|
|
||||||
.text-warning { color: @warningText; }
|
|
||||||
a.text-warning:hover,
|
|
||||||
a.text-warning:focus { color: darken(@warningText, 10%); }
|
|
||||||
|
|
||||||
.text-error { color: @errorText; }
|
|
||||||
a.text-error:hover,
|
|
||||||
a.text-error:focus { color: darken(@errorText, 10%); }
|
|
||||||
|
|
||||||
.text-info { color: @infoText; }
|
|
||||||
a.text-info:hover,
|
|
||||||
a.text-info:focus { color: darken(@infoText, 10%); }
|
|
||||||
|
|
||||||
.text-success { color: @successText; }
|
|
||||||
a.text-success:hover,
|
|
||||||
a.text-success:focus { color: darken(@successText, 10%); }
|
|
||||||
|
|
||||||
.text-left { text-align: left; }
|
|
||||||
.text-right { text-align: right; }
|
|
||||||
.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 {
|
|
||||||
padding-bottom: (@baseLineHeight / 2) - 1;
|
|
||||||
margin: @baseLineHeight 0 (@baseLineHeight * 1.5);
|
|
||||||
border-bottom: 1px solid @grayLighter;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Lists
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Unordered and Ordered lists
|
|
||||||
ul, ol {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0 0 @baseLineHeight / 2 25px;
|
|
||||||
}
|
|
||||||
ul ul,
|
|
||||||
ul ol,
|
|
||||||
ol ol,
|
|
||||||
ol ul {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove default list styles
|
|
||||||
ul.unstyled,
|
|
||||||
ol.unstyled {
|
|
||||||
margin-left: 0;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Single-line list items
|
|
||||||
ul.inline,
|
|
||||||
ol.inline {
|
|
||||||
margin-left: 0;
|
|
||||||
list-style: none;
|
|
||||||
> li {
|
|
||||||
display: inline-block;
|
|
||||||
.ie7-inline-block();
|
|
||||||
padding-left: 5px;
|
|
||||||
padding-right: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Description Lists
|
|
||||||
dl {
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
}
|
|
||||||
dt,
|
|
||||||
dd {
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
}
|
|
||||||
dt {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
dd {
|
|
||||||
margin-left: @baseLineHeight / 2;
|
|
||||||
}
|
|
||||||
// Horizontal layout (like forms)
|
|
||||||
.dl-horizontal {
|
|
||||||
.clearfix(); // Ensure dl clears floats if empty dd elements present
|
|
||||||
dt {
|
|
||||||
float: left;
|
|
||||||
width: @horizontalComponentOffset - 20;
|
|
||||||
clear: left;
|
|
||||||
text-align: right;
|
|
||||||
.text-overflow();
|
|
||||||
}
|
|
||||||
dd {
|
|
||||||
margin-left: @horizontalComponentOffset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MISC
|
|
||||||
// ----
|
|
||||||
|
|
||||||
// Horizontal rules
|
|
||||||
hr {
|
|
||||||
margin: @baseLineHeight 0;
|
|
||||||
border: 0;
|
|
||||||
border-top: 1px solid @hrBorder;
|
|
||||||
border-bottom: 1px solid @white;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Abbreviations and acronyms
|
|
||||||
abbr[title],
|
|
||||||
// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257
|
|
||||||
abbr[data-original-title] {
|
|
||||||
cursor: help;
|
|
||||||
border-bottom: 1px dotted @grayLight;
|
|
||||||
}
|
|
||||||
abbr.initialism {
|
|
||||||
font-size: 90%;
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Blockquotes
|
|
||||||
blockquote {
|
|
||||||
padding: 0 0 0 15px;
|
|
||||||
margin: 0 0 @baseLineHeight;
|
|
||||||
border-left: 5px solid @grayLighter;
|
|
||||||
p {
|
|
||||||
margin-bottom: 0;
|
|
||||||
font-size: @baseFontSize * 1.25;
|
|
||||||
font-weight: 300;
|
|
||||||
line-height: 1.25;
|
|
||||||
}
|
|
||||||
small {
|
|
||||||
display: block;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
color: @grayLight;
|
|
||||||
&:before {
|
|
||||||
content: '\2014 \00A0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float right with text-align: right
|
|
||||||
&.pull-right {
|
|
||||||
float: right;
|
|
||||||
padding-right: 15px;
|
|
||||||
padding-left: 0;
|
|
||||||
border-right: 5px solid @grayLighter;
|
|
||||||
border-left: 0;
|
|
||||||
p,
|
|
||||||
small {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
small {
|
|
||||||
&:before {
|
|
||||||
content: '';
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
content: '\00A0 \2014';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Quotes
|
|
||||||
q:before,
|
|
||||||
q:after,
|
|
||||||
blockquote:before,
|
|
||||||
blockquote:after {
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Addresses
|
|
||||||
address {
|
|
||||||
display: block;
|
|
||||||
margin-bottom: @baseLineHeight;
|
|
||||||
font-style: normal;
|
|
||||||
line-height: @baseLineHeight;
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
//
|
|
||||||
// Utility classes
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Quick 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;
|
|
||||||
}
|
|
@ -1,301 +0,0 @@
|
|||||||
//
|
|
||||||
// Variables
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Global values
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Grays
|
|
||||||
// -------------------------
|
|
||||||
@black: #000;
|
|
||||||
@grayDarker: #222;
|
|
||||||
@grayDark: #333;
|
|
||||||
@gray: #555;
|
|
||||||
@grayLight: #999;
|
|
||||||
@grayLighter: #eee;
|
|
||||||
@white: #fff;
|
|
||||||
|
|
||||||
|
|
||||||
// Accent colors
|
|
||||||
// -------------------------
|
|
||||||
@blue: #049cdb;
|
|
||||||
@blueDark: #0064cd;
|
|
||||||
@green: #46a546;
|
|
||||||
@red: #9d261d;
|
|
||||||
@yellow: #ffc40d;
|
|
||||||
@orange: #f89406;
|
|
||||||
@pink: #c3325f;
|
|
||||||
@purple: #7a43b6;
|
|
||||||
|
|
||||||
|
|
||||||
// Scaffolding
|
|
||||||
// -------------------------
|
|
||||||
@bodyBackground: @white;
|
|
||||||
@textColor: @grayDark;
|
|
||||||
|
|
||||||
|
|
||||||
// Links
|
|
||||||
// -------------------------
|
|
||||||
@linkColor: #08c;
|
|
||||||
@linkColorHover: darken(@linkColor, 15%);
|
|
||||||
|
|
||||||
|
|
||||||
// Typography
|
|
||||||
// -------------------------
|
|
||||||
@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
||||||
@serifFontFamily: Georgia, "Times New Roman", Times, serif;
|
|
||||||
@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace;
|
|
||||||
|
|
||||||
@baseFontSize: 14px;
|
|
||||||
@baseFontFamily: @sansFontFamily;
|
|
||||||
@baseLineHeight: 20px;
|
|
||||||
@altFontFamily: @serifFontFamily;
|
|
||||||
|
|
||||||
@headingsFontFamily: "Stylograph"; // empty to use BS default, @baseFontFamily
|
|
||||||
@headingsFontWeight: 100; // instead of browser default, bold
|
|
||||||
@headingsColor: inherit; // empty to use BS default, @textColor
|
|
||||||
|
|
||||||
|
|
||||||
// Component sizing
|
|
||||||
// -------------------------
|
|
||||||
// Based on 14px font-size and 20px line-height
|
|
||||||
|
|
||||||
@fontSizeLarge: @baseFontSize * 1.25; // ~18px
|
|
||||||
@fontSizeSmall: @baseFontSize * 0.85; // ~12px
|
|
||||||
@fontSizeMini: @baseFontSize * 0.75; // ~11px
|
|
||||||
|
|
||||||
@paddingLarge: 11px 19px; // 44px
|
|
||||||
@paddingSmall: 2px 10px; // 26px
|
|
||||||
@paddingMini: 0 6px; // 22px
|
|
||||||
|
|
||||||
@baseBorderRadius: 4px;
|
|
||||||
@borderRadiusLarge: 6px;
|
|
||||||
@borderRadiusSmall: 3px;
|
|
||||||
|
|
||||||
|
|
||||||
// Tables
|
|
||||||
// -------------------------
|
|
||||||
@tableBackground: transparent; // overall background-color
|
|
||||||
@tableBackgroundAccent: #f9f9f9; // for striping
|
|
||||||
@tableBackgroundHover: #f5f5f5; // for hover
|
|
||||||
@tableBorder: #ddd; // table and cell border
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
// -------------------------
|
|
||||||
@btnBackground: @white;
|
|
||||||
@btnBackgroundHighlight: darken(@white, 10%);
|
|
||||||
@btnBorder: #ccc;
|
|
||||||
|
|
||||||
@btnPrimaryBackground: @linkColor;
|
|
||||||
@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%);
|
|
||||||
|
|
||||||
@btnInfoBackground: #5bc0de;
|
|
||||||
@btnInfoBackgroundHighlight: #2f96b4;
|
|
||||||
|
|
||||||
@btnSuccessBackground: #62c462;
|
|
||||||
@btnSuccessBackgroundHighlight: #51a351;
|
|
||||||
|
|
||||||
@btnWarningBackground: lighten(@orange, 15%);
|
|
||||||
@btnWarningBackgroundHighlight: @orange;
|
|
||||||
|
|
||||||
@btnDangerBackground: #ee5f5b;
|
|
||||||
@btnDangerBackgroundHighlight: #bd362f;
|
|
||||||
|
|
||||||
@btnInverseBackground: #444;
|
|
||||||
@btnInverseBackgroundHighlight: @grayDarker;
|
|
||||||
|
|
||||||
|
|
||||||
// Forms
|
|
||||||
// -------------------------
|
|
||||||
@inputBackground: @white;
|
|
||||||
@inputBorder: #ccc;
|
|
||||||
@inputBorderRadius: @baseBorderRadius;
|
|
||||||
@inputDisabledBackground: @grayLighter;
|
|
||||||
@formActionsBackground: #f5f5f5;
|
|
||||||
@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
|
|
||||||
|
|
||||||
|
|
||||||
// Dropdowns
|
|
||||||
// -------------------------
|
|
||||||
@dropdownBackground: @white;
|
|
||||||
@dropdownBorder: rgba(0,0,0,.2);
|
|
||||||
@dropdownDividerTop: #e5e5e5;
|
|
||||||
@dropdownDividerBottom: @white;
|
|
||||||
|
|
||||||
@dropdownLinkColor: @grayDark;
|
|
||||||
@dropdownLinkColorHover: @white;
|
|
||||||
@dropdownLinkColorActive: @white;
|
|
||||||
|
|
||||||
@dropdownLinkBackgroundActive: @linkColor;
|
|
||||||
@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// COMPONENT VARIABLES
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Z-index master list
|
|
||||||
// -------------------------
|
|
||||||
// Used for a bird's eye view of components dependent on the z-axis
|
|
||||||
// Try to avoid customizing these :)
|
|
||||||
@zindexDropdown: 1000;
|
|
||||||
@zindexPopover: 1010;
|
|
||||||
@zindexTooltip: 1030;
|
|
||||||
@zindexFixedNavbar: 1030;
|
|
||||||
@zindexModalBackdrop: 1040;
|
|
||||||
@zindexModal: 1050;
|
|
||||||
|
|
||||||
|
|
||||||
// Sprite icons path
|
|
||||||
// -------------------------
|
|
||||||
@iconSpritePath: "../img/glyphicons-halflings.png";
|
|
||||||
@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png";
|
|
||||||
|
|
||||||
|
|
||||||
// Input placeholder text color
|
|
||||||
// -------------------------
|
|
||||||
@placeholderText: @grayLight;
|
|
||||||
|
|
||||||
|
|
||||||
// Hr border color
|
|
||||||
// -------------------------
|
|
||||||
@hrBorder: @grayLighter;
|
|
||||||
|
|
||||||
|
|
||||||
// Horizontal forms & lists
|
|
||||||
// -------------------------
|
|
||||||
@horizontalComponentOffset: 180px;
|
|
||||||
|
|
||||||
|
|
||||||
// Wells
|
|
||||||
// -------------------------
|
|
||||||
@wellBackground: #f5f5f5;
|
|
||||||
|
|
||||||
|
|
||||||
// Navbar
|
|
||||||
// -------------------------
|
|
||||||
@navbarCollapseWidth: 979px;
|
|
||||||
@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1;
|
|
||||||
|
|
||||||
@navbarHeight: 40px;
|
|
||||||
@navbarBackgroundHighlight: #ffffff;
|
|
||||||
@navbarBackground: darken(@navbarBackgroundHighlight, 5%);
|
|
||||||
@navbarBorder: darken(@navbarBackground, 12%);
|
|
||||||
|
|
||||||
@navbarText: #777;
|
|
||||||
@navbarLinkColor: #777;
|
|
||||||
@navbarLinkColorHover: @grayDark;
|
|
||||||
@navbarLinkColorActive: @gray;
|
|
||||||
@navbarLinkBackgroundHover: transparent;
|
|
||||||
@navbarLinkBackgroundActive: darken(@navbarBackground, 5%);
|
|
||||||
|
|
||||||
@navbarBrandColor: @navbarLinkColor;
|
|
||||||
|
|
||||||
// Inverted navbar
|
|
||||||
@navbarInverseBackground: #111111;
|
|
||||||
@navbarInverseBackgroundHighlight: #222222;
|
|
||||||
@navbarInverseBorder: #252525;
|
|
||||||
|
|
||||||
@navbarInverseText: @grayLight;
|
|
||||||
@navbarInverseLinkColor: @grayLight;
|
|
||||||
@navbarInverseLinkColorHover: @white;
|
|
||||||
@navbarInverseLinkColorActive: @navbarInverseLinkColorHover;
|
|
||||||
@navbarInverseLinkBackgroundHover: transparent;
|
|
||||||
@navbarInverseLinkBackgroundActive: @navbarInverseBackground;
|
|
||||||
|
|
||||||
@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%);
|
|
||||||
@navbarInverseSearchBackgroundFocus: @white;
|
|
||||||
@navbarInverseSearchBorder: @navbarInverseBackground;
|
|
||||||
@navbarInverseSearchPlaceholderColor: #ccc;
|
|
||||||
|
|
||||||
@navbarInverseBrandColor: @navbarInverseLinkColor;
|
|
||||||
|
|
||||||
|
|
||||||
// Pagination
|
|
||||||
// -------------------------
|
|
||||||
@paginationBackground: #fff;
|
|
||||||
@paginationBorder: #ddd;
|
|
||||||
@paginationActiveBackground: #f5f5f5;
|
|
||||||
|
|
||||||
|
|
||||||
// Hero unit
|
|
||||||
// -------------------------
|
|
||||||
@heroUnitBackground: @grayLighter;
|
|
||||||
@heroUnitHeadingColor: inherit;
|
|
||||||
@heroUnitLeadColor: inherit;
|
|
||||||
|
|
||||||
|
|
||||||
// Form states and alerts
|
|
||||||
// -------------------------
|
|
||||||
@warningText: #c09853;
|
|
||||||
@warningBackground: #fcf8e3;
|
|
||||||
@warningBorder: darken(spin(@warningBackground, -10), 3%);
|
|
||||||
|
|
||||||
@errorText: #b94a48;
|
|
||||||
@errorBackground: #f2dede;
|
|
||||||
@errorBorder: darken(spin(@errorBackground, -10), 3%);
|
|
||||||
|
|
||||||
@successText: #468847;
|
|
||||||
@successBackground: #dff0d8;
|
|
||||||
@successBorder: darken(spin(@successBackground, -10), 5%);
|
|
||||||
|
|
||||||
@infoText: #3a87ad;
|
|
||||||
@infoBackground: #d9edf7;
|
|
||||||
@infoBorder: darken(spin(@infoBackground, -10), 7%);
|
|
||||||
|
|
||||||
|
|
||||||
// Tooltips and popovers
|
|
||||||
// -------------------------
|
|
||||||
@tooltipColor: #fff;
|
|
||||||
@tooltipBackground: #000;
|
|
||||||
@tooltipArrowWidth: 5px;
|
|
||||||
@tooltipArrowColor: @tooltipBackground;
|
|
||||||
|
|
||||||
@popoverBackground: #fff;
|
|
||||||
@popoverArrowWidth: 10px;
|
|
||||||
@popoverArrowColor: #fff;
|
|
||||||
@popoverTitleBackground: darken(@popoverBackground, 3%);
|
|
||||||
|
|
||||||
// Special enhancement for popovers
|
|
||||||
@popoverArrowOuterWidth: @popoverArrowWidth + 1;
|
|
||||||
@popoverArrowOuterColor: rgba(0,0,0,.25);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// GRID
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Default 940px grid
|
|
||||||
// -------------------------
|
|
||||||
@gridColumns: 12;
|
|
||||||
@gridColumnWidth: 60px;
|
|
||||||
@gridGutterWidth: 20px;
|
|
||||||
@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
|
|
||||||
|
|
||||||
// 1200px min
|
|
||||||
@gridColumnWidth1200: 70px;
|
|
||||||
@gridGutterWidth1200: 30px;
|
|
||||||
@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);
|
|
@ -1,29 +0,0 @@
|
|||||||
//
|
|
||||||
// Wells
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Base class
|
|
||||||
.well {
|
|
||||||
min-height: 20px;
|
|
||||||
padding: 19px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
background-color: @wellBackground;
|
|
||||||
border: 1px solid darken(@wellBackground, 7%);
|
|
||||||
.border-radius(@baseBorderRadius);
|
|
||||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
|
|
||||||
blockquote {
|
|
||||||
border-color: #ddd;
|
|
||||||
border-color: rgba(0,0,0,.15);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sizes
|
|
||||||
.well-large {
|
|
||||||
padding: 24px;
|
|
||||||
.border-radius(@borderRadiusLarge);
|
|
||||||
}
|
|
||||||
.well-small {
|
|
||||||
padding: 9px;
|
|
||||||
.border-radius(@borderRadiusSmall);
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,58 +0,0 @@
|
|||||||
|
|
||||||
/* pane_hover */
|
|
||||||
#qi_pane_hover{
|
|
||||||
position:fixed;
|
|
||||||
top:20px;
|
|
||||||
left:0px;
|
|
||||||
bottom:0px;
|
|
||||||
right:0px;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#qi_pane_hover #qi_pane_hover_content{
|
|
||||||
margin:auto;
|
|
||||||
position:relative;
|
|
||||||
|
|
||||||
background:white;
|
|
||||||
background: -webkit-gradient(linear, 0% 100%, 0% 0%, from(rgb(239,242,242)), to(rgb(255,255,255)));
|
|
||||||
background: -moz-linear-gradient(0% 100%, 0% 0%, from(rgb(239,242,242)), to(rgb(255,255,255)));
|
|
||||||
-webkit-box-shadow: rgba(0,0,0,0.8) 1px 1px 50px;
|
|
||||||
-moz-box-shadow: rgba(0,0,0,0.8) 1px 1px 50px;
|
|
||||||
box-shadow: rgba(0,0,0,0.8) 1px 1px 50px;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
display:none;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#qi_pane_hover #qi_pane_hover_content .content{
|
|
||||||
|
|
||||||
position:absolute;
|
|
||||||
top:0px;
|
|
||||||
right:0px;
|
|
||||||
left:0px;
|
|
||||||
bottom:37px;
|
|
||||||
overflow:auto;
|
|
||||||
padding:10px;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#qi_pane_hover #qi_pane_hover_content .actions{
|
|
||||||
position:absolute;
|
|
||||||
bottom:0px;
|
|
||||||
left:0px;
|
|
||||||
right:0px;
|
|
||||||
text-align:right;
|
|
||||||
padding-bottom:5px;
|
|
||||||
padding-top : 5px;
|
|
||||||
border-top :1px solid rgba(127,127,127,0.2);
|
|
||||||
height:26px;
|
|
||||||
|
|
||||||
}
|
|
213
app/assets/stylesheets/jquery.bxslider.css
Normal file
213
app/assets/stylesheets/jquery.bxslider.css
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
/**
|
||||||
|
* BxSlider v4.1.2 - Fully loaded, responsive content slider
|
||||||
|
* http://bxslider.com
|
||||||
|
*
|
||||||
|
* Written by: Steven Wanderski, 2014
|
||||||
|
* http://stevenwanderski.com
|
||||||
|
* (while drinking Belgian ales and listening to jazz)
|
||||||
|
*
|
||||||
|
* CEO and founder of bxCreative, LTD
|
||||||
|
* http://bxcreative.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** RESET AND LAYOUT
|
||||||
|
===================================*/
|
||||||
|
|
||||||
|
.bx-wrapper {
|
||||||
|
position: relative;
|
||||||
|
margin: 0 auto ;
|
||||||
|
padding: 0;
|
||||||
|
*zoom: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper img {
|
||||||
|
max-width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** THEME
|
||||||
|
===================================*/
|
||||||
|
.bxslider li img{
|
||||||
|
min-width:100%;
|
||||||
|
|
||||||
|
}
|
||||||
|
.bx-wrapper .bx-viewport {
|
||||||
|
img{
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
ul{
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
background: black;
|
||||||
|
|
||||||
|
|
||||||
|
/*fix other elements on the page moving (on Chrome)*/
|
||||||
|
-webkit-transform: translatez(0);
|
||||||
|
-moz-transform: translatez(0);
|
||||||
|
-ms-transform: translatez(0);
|
||||||
|
-o-transform: translatez(0);
|
||||||
|
transform: translatez(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-pager,
|
||||||
|
.bx-wrapper .bx-controls-auto {
|
||||||
|
position: absolute;
|
||||||
|
bottom: -30px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LOADER */
|
||||||
|
|
||||||
|
.bx-wrapper .bx-loading {
|
||||||
|
min-height: 50px;
|
||||||
|
background: url(images/bx_loader.gif) center center no-repeat #fff;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 2000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PAGER */
|
||||||
|
|
||||||
|
.bx-wrapper .bx-pager {
|
||||||
|
text-align: center;
|
||||||
|
font-size: .85em;
|
||||||
|
font-family: Arial;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
padding-top: 20px;
|
||||||
|
position:absolute;
|
||||||
|
bottom:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-pager .bx-pager-item,
|
||||||
|
.bx-wrapper .bx-controls-auto .bx-controls-auto-item {
|
||||||
|
display: inline-block;
|
||||||
|
*zoom: 1;
|
||||||
|
*display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-pager.bx-default-pager a {
|
||||||
|
background: rgba(250,250,250,0.5);
|
||||||
|
text-indent: -9999px;
|
||||||
|
display: block;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
margin: 0 5px;
|
||||||
|
outline: 0;
|
||||||
|
-moz-border-radius: 5px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-pager.bx-default-pager a:hover,
|
||||||
|
.bx-wrapper .bx-pager.bx-default-pager a.active {
|
||||||
|
background: rgba(250,250,250,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DIRECTION CONTROLS (NEXT / PREV) */
|
||||||
|
|
||||||
|
.bx-wrapper .bx-prev {
|
||||||
|
left: 10px;
|
||||||
|
background: url(images/controls.png) no-repeat 0 -32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-next {
|
||||||
|
right: 10px;
|
||||||
|
background: url(images/controls.png) no-repeat -43px -32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-prev:hover {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-next:hover {
|
||||||
|
background-position: -43px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls-direction a {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -16px;
|
||||||
|
outline: 0;
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
text-indent: -9999px;
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls-direction a.disabled {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* AUTO CONTROLS (START / STOP) */
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls-auto {
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls-auto .bx-start {
|
||||||
|
display: block;
|
||||||
|
text-indent: -9999px;
|
||||||
|
width: 10px;
|
||||||
|
height: 11px;
|
||||||
|
outline: 0;
|
||||||
|
background: url(images/controls.png) -86px -11px no-repeat;
|
||||||
|
margin: 0 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls-auto .bx-start:hover,
|
||||||
|
.bx-wrapper .bx-controls-auto .bx-start.active {
|
||||||
|
background-position: -86px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls-auto .bx-stop {
|
||||||
|
display: block;
|
||||||
|
text-indent: -9999px;
|
||||||
|
width: 9px;
|
||||||
|
height: 11px;
|
||||||
|
outline: 0;
|
||||||
|
background: url(images/controls.png) -86px -44px no-repeat;
|
||||||
|
margin: 0 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls-auto .bx-stop:hover,
|
||||||
|
.bx-wrapper .bx-controls-auto .bx-stop.active {
|
||||||
|
background-position: -86px -33px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PAGER WITH AUTO-CONTROLS HYBRID LAYOUT */
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls.bx-has-controls-auto.bx-has-pager .bx-pager {
|
||||||
|
text-align: left;
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-controls.bx-has-controls-auto.bx-has-pager .bx-controls-auto {
|
||||||
|
right: 0;
|
||||||
|
width: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IMAGE CAPTIONS */
|
||||||
|
|
||||||
|
.bx-wrapper .bx-caption {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-wrapper .bx-caption span {
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
display: block;
|
||||||
|
text-align:right;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
// Bordered & Pulled
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-border {
|
|
||||||
padding: .2em .25em .15em;
|
|
||||||
border: solid .08em @fa-border-color;
|
|
||||||
border-radius: .1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pull-right { float: right; }
|
|
||||||
.pull-left { float: left; }
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
&.pull-left { margin-right: .3em; }
|
|
||||||
&.pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
// Base Class Definition
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
display: inline-block;
|
|
||||||
font-family: FontAwesome;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
line-height: 1;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
// Fixed Width Icons
|
|
||||||
// -------------------------
|
|
||||||
.@{fa-css-prefix}-fw {
|
|
||||||
width: (18em / 14);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
|
|
||||||
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
|
||||||
*/
|
|
||||||
|
|
||||||
@import "variables";
|
|
||||||
@import "mixins";
|
|
||||||
@import "path";
|
|
||||||
@import "core";
|
|
||||||
@import "larger";
|
|
||||||
@import "fixed-width";
|
|
||||||
@import "list";
|
|
||||||
@import "bordered-pulled";
|
|
||||||
@import "spinning";
|
|
||||||
@import "rotated-flipped";
|
|
||||||
@import "stacked";
|
|
||||||
@import "icons";
|
|
@ -1,412 +0,0 @@
|
|||||||
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
|
|
||||||
readers do not read off random characters that represent icons */
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }
|
|
||||||
.@{fa-css-prefix}-music:before { content: @fa-var-music; }
|
|
||||||
.@{fa-css-prefix}-search:before { content: @fa-var-search; }
|
|
||||||
.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }
|
|
||||||
.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
|
|
||||||
.@{fa-css-prefix}-star:before { content: @fa-var-star; }
|
|
||||||
.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }
|
|
||||||
.@{fa-css-prefix}-user:before { content: @fa-var-user; }
|
|
||||||
.@{fa-css-prefix}-film:before { content: @fa-var-film; }
|
|
||||||
.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
|
|
||||||
.@{fa-css-prefix}-th:before { content: @fa-var-th; }
|
|
||||||
.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
|
|
||||||
.@{fa-css-prefix}-check:before { content: @fa-var-check; }
|
|
||||||
.@{fa-css-prefix}-times:before { content: @fa-var-times; }
|
|
||||||
.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
|
|
||||||
.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
|
|
||||||
.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
|
|
||||||
.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
|
|
||||||
.@{fa-css-prefix}-gear:before,
|
|
||||||
.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
|
|
||||||
.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }
|
|
||||||
.@{fa-css-prefix}-home:before { content: @fa-var-home; }
|
|
||||||
.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }
|
|
||||||
.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }
|
|
||||||
.@{fa-css-prefix}-road:before { content: @fa-var-road; }
|
|
||||||
.@{fa-css-prefix}-download:before { content: @fa-var-download; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }
|
|
||||||
.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
|
|
||||||
.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }
|
|
||||||
.@{fa-css-prefix}-rotate-right:before,
|
|
||||||
.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }
|
|
||||||
.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }
|
|
||||||
.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
|
|
||||||
.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
|
|
||||||
.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
|
|
||||||
.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
|
|
||||||
.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
|
|
||||||
.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
|
|
||||||
.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
|
|
||||||
.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
|
|
||||||
.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
|
|
||||||
.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
|
|
||||||
.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
|
|
||||||
.@{fa-css-prefix}-book:before { content: @fa-var-book; }
|
|
||||||
.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
|
|
||||||
.@{fa-css-prefix}-print:before { content: @fa-var-print; }
|
|
||||||
.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
|
|
||||||
.@{fa-css-prefix}-font:before { content: @fa-var-font; }
|
|
||||||
.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
|
|
||||||
.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
|
|
||||||
.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
|
|
||||||
.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
|
|
||||||
.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
|
|
||||||
.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
|
|
||||||
.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
|
|
||||||
.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
|
|
||||||
.@{fa-css-prefix}-list:before { content: @fa-var-list; }
|
|
||||||
.@{fa-css-prefix}-dedent:before,
|
|
||||||
.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
|
|
||||||
.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
|
|
||||||
.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }
|
|
||||||
.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }
|
|
||||||
.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }
|
|
||||||
.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
|
|
||||||
.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
|
|
||||||
.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
|
|
||||||
.@{fa-css-prefix}-edit:before,
|
|
||||||
.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }
|
|
||||||
.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }
|
|
||||||
.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }
|
|
||||||
.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }
|
|
||||||
.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
|
|
||||||
.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
|
|
||||||
.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
|
|
||||||
.@{fa-css-prefix}-play:before { content: @fa-var-play; }
|
|
||||||
.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
|
|
||||||
.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
|
|
||||||
.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
|
|
||||||
.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
|
|
||||||
.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
|
|
||||||
.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
|
|
||||||
.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
|
|
||||||
.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
|
|
||||||
.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
|
|
||||||
.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
|
|
||||||
.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
|
|
||||||
.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
|
|
||||||
.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
|
|
||||||
.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
|
|
||||||
.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
|
|
||||||
.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }
|
|
||||||
.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }
|
|
||||||
.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
|
|
||||||
.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
|
|
||||||
.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
|
|
||||||
.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-mail-forward:before,
|
|
||||||
.@{fa-css-prefix}-share:before { content: @fa-var-share; }
|
|
||||||
.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
|
|
||||||
.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
|
|
||||||
.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
|
|
||||||
.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
|
|
||||||
.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
|
|
||||||
.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
|
|
||||||
.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
|
|
||||||
.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
|
|
||||||
.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
|
|
||||||
.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
|
|
||||||
.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
|
|
||||||
.@{fa-css-prefix}-warning:before,
|
|
||||||
.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
|
|
||||||
.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
|
|
||||||
.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
|
|
||||||
.@{fa-css-prefix}-random:before { content: @fa-var-random; }
|
|
||||||
.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
|
|
||||||
.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
|
|
||||||
.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
|
|
||||||
.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
|
|
||||||
.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
|
|
||||||
.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
|
|
||||||
.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
|
|
||||||
.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
|
|
||||||
.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }
|
|
||||||
.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }
|
|
||||||
.@{fa-css-prefix}-bar-chart-o:before { content: @fa-var-bar-chart-o; }
|
|
||||||
.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
|
|
||||||
.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
|
|
||||||
.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
|
|
||||||
.@{fa-css-prefix}-key:before { content: @fa-var-key; }
|
|
||||||
.@{fa-css-prefix}-gears:before,
|
|
||||||
.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
|
|
||||||
.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
|
|
||||||
.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }
|
|
||||||
.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }
|
|
||||||
.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
|
|
||||||
.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }
|
|
||||||
.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }
|
|
||||||
.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }
|
|
||||||
.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }
|
|
||||||
.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }
|
|
||||||
.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }
|
|
||||||
.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
|
|
||||||
.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
|
|
||||||
.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
|
|
||||||
.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }
|
|
||||||
.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
|
|
||||||
.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }
|
|
||||||
.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }
|
|
||||||
.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
|
|
||||||
.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
|
|
||||||
.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
|
|
||||||
.@{fa-css-prefix}-github:before { content: @fa-var-github; }
|
|
||||||
.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
|
|
||||||
.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
|
|
||||||
.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
|
|
||||||
.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }
|
|
||||||
.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
|
|
||||||
.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
|
|
||||||
.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
|
|
||||||
.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }
|
|
||||||
.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }
|
|
||||||
.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }
|
|
||||||
.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
|
|
||||||
.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
|
|
||||||
.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
|
|
||||||
.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
|
|
||||||
.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
|
|
||||||
.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
|
|
||||||
.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
|
|
||||||
.@{fa-css-prefix}-group:before,
|
|
||||||
.@{fa-css-prefix}-users:before { content: @fa-var-users; }
|
|
||||||
.@{fa-css-prefix}-chain:before,
|
|
||||||
.@{fa-css-prefix}-link:before { content: @fa-var-link; }
|
|
||||||
.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
|
|
||||||
.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
|
|
||||||
.@{fa-css-prefix}-cut:before,
|
|
||||||
.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }
|
|
||||||
.@{fa-css-prefix}-copy:before,
|
|
||||||
.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }
|
|
||||||
.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
|
|
||||||
.@{fa-css-prefix}-save:before,
|
|
||||||
.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }
|
|
||||||
.@{fa-css-prefix}-square:before { content: @fa-var-square; }
|
|
||||||
.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
|
|
||||||
.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
|
|
||||||
.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
|
|
||||||
.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
|
|
||||||
.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
|
|
||||||
.@{fa-css-prefix}-table:before { content: @fa-var-table; }
|
|
||||||
.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
|
|
||||||
.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
|
|
||||||
.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
|
|
||||||
.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
|
|
||||||
.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
|
|
||||||
.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
|
|
||||||
.@{fa-css-prefix}-money:before { content: @fa-var-money; }
|
|
||||||
.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
|
|
||||||
.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
|
|
||||||
.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
|
|
||||||
.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
|
|
||||||
.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
|
|
||||||
.@{fa-css-prefix}-unsorted:before,
|
|
||||||
.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
|
|
||||||
.@{fa-css-prefix}-sort-down:before,
|
|
||||||
.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-up:before,
|
|
||||||
.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }
|
|
||||||
.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
|
|
||||||
.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
|
|
||||||
.@{fa-css-prefix}-rotate-left:before,
|
|
||||||
.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
|
|
||||||
.@{fa-css-prefix}-legal:before,
|
|
||||||
.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
|
|
||||||
.@{fa-css-prefix}-dashboard:before,
|
|
||||||
.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }
|
|
||||||
.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }
|
|
||||||
.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }
|
|
||||||
.@{fa-css-prefix}-flash:before,
|
|
||||||
.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
|
|
||||||
.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
|
|
||||||
.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
|
|
||||||
.@{fa-css-prefix}-paste:before,
|
|
||||||
.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
|
|
||||||
.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }
|
|
||||||
.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }
|
|
||||||
.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }
|
|
||||||
.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }
|
|
||||||
.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
|
|
||||||
.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
|
|
||||||
.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
|
|
||||||
.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }
|
|
||||||
.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
|
|
||||||
.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }
|
|
||||||
.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }
|
|
||||||
.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }
|
|
||||||
.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }
|
|
||||||
.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
|
|
||||||
.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
|
|
||||||
.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
|
|
||||||
.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
|
|
||||||
.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
|
|
||||||
.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
|
|
||||||
.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
|
|
||||||
.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
|
|
||||||
.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
|
|
||||||
.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
|
|
||||||
.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
|
|
||||||
.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
|
|
||||||
.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
|
|
||||||
.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
|
|
||||||
.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
|
|
||||||
.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
|
|
||||||
.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
|
|
||||||
.@{fa-css-prefix}-mobile-phone:before,
|
|
||||||
.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
|
|
||||||
.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }
|
|
||||||
.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
|
|
||||||
.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
|
|
||||||
.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
|
|
||||||
.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
|
|
||||||
.@{fa-css-prefix}-mail-reply:before,
|
|
||||||
.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
|
|
||||||
.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
|
|
||||||
.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }
|
|
||||||
.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }
|
|
||||||
.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }
|
|
||||||
.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }
|
|
||||||
.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }
|
|
||||||
.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
|
|
||||||
.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }
|
|
||||||
.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }
|
|
||||||
.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
|
|
||||||
.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
|
|
||||||
.@{fa-css-prefix}-code:before { content: @fa-var-code; }
|
|
||||||
.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
|
|
||||||
.@{fa-css-prefix}-mail-reply-all:before { content: @fa-var-mail-reply-all; }
|
|
||||||
.@{fa-css-prefix}-star-half-empty:before,
|
|
||||||
.@{fa-css-prefix}-star-half-full:before,
|
|
||||||
.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }
|
|
||||||
.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
|
|
||||||
.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
|
|
||||||
.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }
|
|
||||||
.@{fa-css-prefix}-unlink:before,
|
|
||||||
.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }
|
|
||||||
.@{fa-css-prefix}-question:before { content: @fa-var-question; }
|
|
||||||
.@{fa-css-prefix}-info:before { content: @fa-var-info; }
|
|
||||||
.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
|
|
||||||
.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
|
|
||||||
.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
|
|
||||||
.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
|
|
||||||
.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
|
|
||||||
.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
|
|
||||||
.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
|
|
||||||
.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }
|
|
||||||
.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }
|
|
||||||
.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
|
|
||||||
.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
|
|
||||||
.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
|
|
||||||
.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
|
|
||||||
.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
|
|
||||||
.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
|
|
||||||
.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
|
|
||||||
.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
|
|
||||||
.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
|
|
||||||
.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
|
|
||||||
.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
|
|
||||||
.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
|
|
||||||
.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }
|
|
||||||
.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
|
|
||||||
.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }
|
|
||||||
.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }
|
|
||||||
.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }
|
|
||||||
.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
|
|
||||||
.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }
|
|
||||||
.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }
|
|
||||||
.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
|
|
||||||
.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
|
|
||||||
.@{fa-css-prefix}-toggle-down:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }
|
|
||||||
.@{fa-css-prefix}-toggle-up:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }
|
|
||||||
.@{fa-css-prefix}-toggle-right:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }
|
|
||||||
.@{fa-css-prefix}-euro:before,
|
|
||||||
.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }
|
|
||||||
.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }
|
|
||||||
.@{fa-css-prefix}-dollar:before,
|
|
||||||
.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }
|
|
||||||
.@{fa-css-prefix}-rupee:before,
|
|
||||||
.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }
|
|
||||||
.@{fa-css-prefix}-cny:before,
|
|
||||||
.@{fa-css-prefix}-rmb:before,
|
|
||||||
.@{fa-css-prefix}-yen:before,
|
|
||||||
.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }
|
|
||||||
.@{fa-css-prefix}-ruble:before,
|
|
||||||
.@{fa-css-prefix}-rouble:before,
|
|
||||||
.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }
|
|
||||||
.@{fa-css-prefix}-won:before,
|
|
||||||
.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }
|
|
||||||
.@{fa-css-prefix}-bitcoin:before,
|
|
||||||
.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
|
|
||||||
.@{fa-css-prefix}-file:before { content: @fa-var-file; }
|
|
||||||
.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }
|
|
||||||
.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }
|
|
||||||
.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
|
|
||||||
.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
|
|
||||||
.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
|
|
||||||
.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
|
|
||||||
.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
|
|
||||||
.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
|
|
||||||
.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }
|
|
||||||
.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
|
|
||||||
.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
|
|
||||||
.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
|
|
||||||
.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
|
|
||||||
.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
|
|
||||||
.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
|
|
||||||
.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }
|
|
||||||
.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
|
|
||||||
.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }
|
|
||||||
.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
|
|
||||||
.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
|
|
||||||
.@{fa-css-prefix}-android:before { content: @fa-var-android; }
|
|
||||||
.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
|
|
||||||
.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
|
|
||||||
.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
|
|
||||||
.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
|
|
||||||
.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
|
|
||||||
.@{fa-css-prefix}-female:before { content: @fa-var-female; }
|
|
||||||
.@{fa-css-prefix}-male:before { content: @fa-var-male; }
|
|
||||||
.@{fa-css-prefix}-gittip:before { content: @fa-var-gittip; }
|
|
||||||
.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }
|
|
||||||
.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }
|
|
||||||
.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
|
|
||||||
.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
|
|
||||||
.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
|
|
||||||
.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
|
|
||||||
.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
|
|
||||||
.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
|
|
||||||
.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }
|
|
||||||
.@{fa-css-prefix}-toggle-left:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }
|
|
||||||
.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }
|
|
||||||
.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
|
|
||||||
.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
|
|
||||||
.@{fa-css-prefix}-turkish-lira:before,
|
|
||||||
.@{fa-css-prefix}-try:before { content: @fa-var-try; }
|
|
||||||
.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }
|
|
@ -1,13 +0,0 @@
|
|||||||
// Icon Sizes
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
/* makes the font 33% larger relative to the icon container */
|
|
||||||
.@{fa-css-prefix}-lg {
|
|
||||||
font-size: (4em / 3);
|
|
||||||
line-height: (3em / 4);
|
|
||||||
vertical-align: -15%;
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-2x { font-size: 2em; }
|
|
||||||
.@{fa-css-prefix}-3x { font-size: 3em; }
|
|
||||||
.@{fa-css-prefix}-4x { font-size: 4em; }
|
|
||||||
.@{fa-css-prefix}-5x { font-size: 5em; }
|
|
@ -1,19 +0,0 @@
|
|||||||
// List Icons
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-ul {
|
|
||||||
padding-left: 0;
|
|
||||||
margin-left: @fa-li-width;
|
|
||||||
list-style-type: none;
|
|
||||||
> li { position: relative; }
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-li {
|
|
||||||
position: absolute;
|
|
||||||
left: -@fa-li-width;
|
|
||||||
width: @fa-li-width;
|
|
||||||
top: (2em / 14);
|
|
||||||
text-align: center;
|
|
||||||
&.@{fa-css-prefix}-lg {
|
|
||||||
left: -@fa-li-width + (4em / 14);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
// Mixins
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.fa-icon-rotate(@degrees, @rotation) {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
|
|
||||||
-webkit-transform: rotate(@degrees);
|
|
||||||
-moz-transform: rotate(@degrees);
|
|
||||||
-ms-transform: rotate(@degrees);
|
|
||||||
-o-transform: rotate(@degrees);
|
|
||||||
transform: rotate(@degrees);
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-icon-flip(@horiz, @vert, @rotation) {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
|
|
||||||
-webkit-transform: scale(@horiz, @vert);
|
|
||||||
-moz-transform: scale(@horiz, @vert);
|
|
||||||
-ms-transform: scale(@horiz, @vert);
|
|
||||||
-o-transform: scale(@horiz, @vert);
|
|
||||||
transform: scale(@horiz, @vert);
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
/* FONT PATH
|
|
||||||
* -------------------------- */
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'FontAwesome';
|
|
||||||
src: url('/fonts/fontawesome-webfont.eot?v=@{fa-version}');
|
|
||||||
src: url('/fonts/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
|
|
||||||
url('/fonts/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
|
|
||||||
url('/fonts/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
|
|
||||||
url('/fonts/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
|
|
||||||
// src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
// Rotated & Flipped Icons
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
|
|
||||||
.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
|
|
||||||
.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
|
|
||||||
.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
|
|
@ -1,30 +0,0 @@
|
|||||||
// Spinning Icons
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-spin {
|
|
||||||
-webkit-animation: spin 2s infinite linear;
|
|
||||||
-moz-animation: spin 2s infinite linear;
|
|
||||||
-o-animation: spin 2s infinite linear;
|
|
||||||
animation: spin 2s infinite linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
@-moz-keyframes spin {
|
|
||||||
0% { -moz-transform: rotate(0deg); }
|
|
||||||
100% { -moz-transform: rotate(359deg); }
|
|
||||||
}
|
|
||||||
@-webkit-keyframes spin {
|
|
||||||
0% { -webkit-transform: rotate(0deg); }
|
|
||||||
100% { -webkit-transform: rotate(359deg); }
|
|
||||||
}
|
|
||||||
@-o-keyframes spin {
|
|
||||||
0% { -o-transform: rotate(0deg); }
|
|
||||||
100% { -o-transform: rotate(359deg); }
|
|
||||||
}
|
|
||||||
@-ms-keyframes spin {
|
|
||||||
0% { -ms-transform: rotate(0deg); }
|
|
||||||
100% { -ms-transform: rotate(359deg); }
|
|
||||||
}
|
|
||||||
@keyframes spin {
|
|
||||||
0% { transform: rotate(0deg); }
|
|
||||||
100% { transform: rotate(359deg); }
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
// Stacked Icons
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-stack {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
width: 2em;
|
|
||||||
height: 2em;
|
|
||||||
line-height: 2em;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-stack-1x { line-height: inherit; }
|
|
||||||
.@{fa-css-prefix}-stack-2x { font-size: 2em; }
|
|
||||||
.@{fa-css-prefix}-inverse { color: @fa-inverse; }
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user