After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 266 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.1 KiB |
@ -1,2 +0,0 @@
|
||||
// Place all the behaviors and hooks related to the matching controller here.
|
||||
// All this logic will automatically be available in application.js.
|
@ -0,0 +1,85 @@
|
||||
// Get all the keys from document
|
||||
var keys = document.querySelectorAll('#calculator span');
|
||||
var operators = ['+', '-', 'x', '÷'];
|
||||
var decimalAdded = false;
|
||||
|
||||
// Add onclick event to all the keys and perform operations
|
||||
for(var i = 0; i < keys.length; i++) {
|
||||
keys[i].onclick = function(e) {
|
||||
// Get the input and button values
|
||||
var input = document.querySelector('.calc-screen');
|
||||
var inputVal = input.innerHTML;
|
||||
var btnVal = this.innerHTML;
|
||||
|
||||
// Now, just append the key values (btnValue) to the input string and finally use javascript's eval function to get the result
|
||||
// If clear key is pressed, erase everything
|
||||
if(btnVal == 'C') {
|
||||
input.innerHTML = '';
|
||||
decimalAdded = false;
|
||||
}
|
||||
|
||||
// If eval key is pressed, calculate and display the result
|
||||
else if(btnVal == '=') {
|
||||
var equation = inputVal;
|
||||
var lastChar = equation[equation.length - 1];
|
||||
|
||||
// Replace all instances of x and ÷ with * and / respectively. This can be done easily using regex and the 'g' tag which will replace all instances of the matched character/substring
|
||||
equation = equation.replace(/x/g, '*').replace(/÷/g, '/');
|
||||
|
||||
// Final thing left to do is checking the last character of the equation. If it's an operator or a decimal, remove it
|
||||
if(operators.indexOf(lastChar) > -1 || lastChar == '.')
|
||||
equation = equation.replace(/.$/, '');
|
||||
|
||||
if(equation)
|
||||
input.innerHTML = eval(equation);
|
||||
|
||||
decimalAdded = false;
|
||||
}
|
||||
|
||||
// Basic functionality of the calculator is complete. But there are some problems like
|
||||
// 1. No two operators should be added consecutively.
|
||||
// 2. The equation shouldn't start from an operator except minus
|
||||
// 3. not more than 1 decimal should be there in a number
|
||||
|
||||
// We'll fix these issues using some simple checks
|
||||
|
||||
// indexOf works only in IE9+
|
||||
else if(operators.indexOf(btnVal) > -1) {
|
||||
// Operator is clicked
|
||||
// Get the last character from the equation
|
||||
var lastChar = inputVal[inputVal.length - 1];
|
||||
|
||||
// Only add operator if input is not empty and there is no operator at the last
|
||||
if(inputVal != '' && operators.indexOf(lastChar) == -1)
|
||||
input.innerHTML += btnVal;
|
||||
|
||||
// Allow minus if the string is empty
|
||||
else if(inputVal == '' && btnVal == '-')
|
||||
input.innerHTML += btnVal;
|
||||
|
||||
// Replace the last operator (if exists) with the newly pressed operator
|
||||
if(operators.indexOf(lastChar) > -1 && inputVal.length > 1) {
|
||||
// Here, '.' matches any character while $ denotes the end of string, so anything (will be an operator in this case) at the end of string will get replaced by new operator
|
||||
input.innerHTML = inputVal.replace(/.$/, btnVal);
|
||||
}
|
||||
|
||||
decimalAdded =false;
|
||||
}
|
||||
|
||||
// Now only the decimal problem is left. We can solve it easily using a flag 'decimalAdded' which we'll set once the decimal is added and prevent more decimals to be added once it's set. It will be reset when an operator, eval or clear key is pressed.
|
||||
else if(btnVal == '.') {
|
||||
if(!decimalAdded) {
|
||||
input.innerHTML += btnVal;
|
||||
decimalAdded = true;
|
||||
}
|
||||
}
|
||||
|
||||
// if any other key is pressed, just append it
|
||||
else {
|
||||
input.innerHTML += btnVal;
|
||||
}
|
||||
|
||||
// prevent page jumps
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
@ -0,0 +1,104 @@
|
||||
var autosave;
|
||||
var autosave_time = 5000; // miliseconds
|
||||
|
||||
$(document).ready(function(){
|
||||
load_list();
|
||||
|
||||
$("#notes-list .scroller").slimscroll({
|
||||
height: '330px',
|
||||
size: "5px"
|
||||
});
|
||||
|
||||
$(".add-note").click(function(){
|
||||
save_note();
|
||||
$("#notes-app").addClass("new-item");
|
||||
$("#note-text").val("");
|
||||
$("#note-text").attr("rel",guidGenerator());
|
||||
});
|
||||
|
||||
$(".back-note-list").click(function(){
|
||||
save_note();
|
||||
$("#notes-app").removeClass("new-item");
|
||||
});
|
||||
|
||||
$(document).on("click", "#notes-list .note-trunc", function(e){
|
||||
e.preventDefault();
|
||||
var id = $(this).attr("rel");
|
||||
$("#note-text").attr("rel",id);
|
||||
$("#note-text").val(localStorage.getItem(id));
|
||||
$("#notes-app").addClass("new-item");
|
||||
});
|
||||
|
||||
$(document).on("blur change", "#note-text", function(){
|
||||
save_note();
|
||||
});
|
||||
|
||||
$(document).on("click", "#notes-list .kill-note", function(e){
|
||||
e.preventDefault();
|
||||
var id = $(this).attr("rel");
|
||||
bootbox.confirm("Are you sure to remove this note?", function(result) {
|
||||
if(result === true){
|
||||
localStorage.removeItem(id);
|
||||
load_list();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
autosave = window.setInterval(function(){
|
||||
if($("#notes-app").hasClass("new-item")){
|
||||
save_note();
|
||||
}
|
||||
},autosave_time);
|
||||
});
|
||||
|
||||
function save_note(){
|
||||
if($("#note-text").val() != ""){
|
||||
$("#notes-app").addClass("saved");
|
||||
localStorage.setItem($("#note-text").attr("rel"),$("#note-text").val());
|
||||
console.log("Note saved!");
|
||||
load_list();
|
||||
window.setTimeout(function(){
|
||||
$("#notes-app").removeClass("saved");
|
||||
},1000);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function load_list(){
|
||||
$("#notes-list ul").html("");
|
||||
var ids = [];
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
var id = localStorage.length-i-1;
|
||||
if(localStorage.key(id).startsWith("coco-note-")){
|
||||
ids.push(id);
|
||||
}
|
||||
}
|
||||
ids = ids.sort();
|
||||
for (var x = 0;x < ids.length;x++){
|
||||
var note = localStorage.getItem(localStorage.key(ids[x])).truncate(40);
|
||||
$("#notes-list ul").append("<li><a href='javascript:;' class='note-trunc' rel='"+localStorage.key(ids[x])+"'>"+note+"</a><div class='btn-group pull-right'><a class='btn btn-sm btn-link kill-note' rel='"+localStorage.key(ids[x])+"'><i class='icon-trash'></i></a></div></li>");
|
||||
}
|
||||
}
|
||||
|
||||
function guidGenerator() {
|
||||
var d = new Date().getTime();
|
||||
d = 9999999999999-d;
|
||||
var S4 = function() {
|
||||
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
|
||||
};
|
||||
return "coco-note-"+(d+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
|
||||
}
|
||||
|
||||
if (typeof String.prototype.startsWith != 'function') {
|
||||
// see below for better implementation!
|
||||
String.prototype.startsWith = function (str){
|
||||
return this.indexOf(str) == 0;
|
||||
};
|
||||
}
|
||||
|
||||
String.prototype.truncate = function(m) {
|
||||
return (this.length > m)
|
||||
? jQuery.trim(this).substring(0, m) + "..."
|
||||
: this;
|
||||
};
|
@ -0,0 +1,80 @@
|
||||
$(document).ready(function(){
|
||||
$.fn.editable.defaults.mode = 'inline';
|
||||
$(".todo-list").sortable({
|
||||
cancel: ".done",
|
||||
axis: "y",
|
||||
cursor: "move",
|
||||
forcePlaceholderSize: true
|
||||
});
|
||||
|
||||
$(document).on("ifChecked", ".check-icon input", function(){
|
||||
var parent = $(this).parents("li:first");
|
||||
$(parent).addClass("done");
|
||||
$(parent).data("orig-order",$(parent).index()).insertAfter($(".todo-list li:last"));
|
||||
$('.todo-item',parent).editable("toggleDisabled");
|
||||
});
|
||||
|
||||
$(document).on("ifUnchecked", ".check-icon input", function(){
|
||||
var parent = $(this).parents("li:first");
|
||||
$(parent).removeClass("done");
|
||||
if($(parent).data("orig-order")){
|
||||
$(parent).insertAfter($(".todo-list li:eq("+($(parent).data("orig-order")-1)+")"));
|
||||
}
|
||||
$('.todo-item',parent).editable("toggleDisabled");
|
||||
});
|
||||
|
||||
$(document).on("click",".add-todo", function(){
|
||||
var $item = '<li class="animated bounceInDown">'+
|
||||
'<span class="check-icon"><input type="checkbox" /></span>'+
|
||||
'<span class="todo-item">New item</span>'+
|
||||
'<span class="todo-options pull-right">'+
|
||||
'<a href="javascript:;" class="todo-delete"><i class="icon-cancel-3"></i></a>'+
|
||||
'</span>'+
|
||||
'</li>';
|
||||
$(".todo-list").append($item);
|
||||
|
||||
$('input').iCheck({
|
||||
checkboxClass: 'icheckbox_square-aero',
|
||||
radioClass: 'iradio_square-aero',
|
||||
increaseArea: '20%'
|
||||
});
|
||||
|
||||
$('.todo-list .todo-item').editable({
|
||||
type: 'text'
|
||||
});
|
||||
window.setTimeout(function () {
|
||||
$(".todo-list li").removeClass("animated");
|
||||
}, 500);
|
||||
});
|
||||
|
||||
$(document).on("click", ".todo-delete", function(){
|
||||
var parent = $(this).parents("li:first");
|
||||
$(parent).hide(200);
|
||||
})
|
||||
|
||||
var $contextMenu = $("#contextMenu");
|
||||
var $rowClicked;
|
||||
|
||||
$(document).on("contextmenu", ".todo-list li", function (e) {
|
||||
$rowClicked = $(this)
|
||||
$contextMenu.css({
|
||||
display: "block",
|
||||
left: e.pageX,
|
||||
top: e.pageY
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$contextMenu.on("click", "a", function () {
|
||||
$rowClicked.removeAttr("class").addClass($(this).data("priority"));
|
||||
$contextMenu.hide();
|
||||
});
|
||||
|
||||
$(document).click(function () {
|
||||
$contextMenu.hide();
|
||||
});
|
||||
|
||||
$('.todo-list .todo-item').editable({
|
||||
type: 'text'
|
||||
});
|
||||
});
|
@ -0,0 +1,408 @@
|
||||
var w;
|
||||
var h;
|
||||
var dw;
|
||||
var dh;
|
||||
|
||||
function executeFunctionByName(functionName, context /*, args */) {
|
||||
var args = [].slice.call(arguments).splice(2);
|
||||
var namespaces = functionName.split(".");
|
||||
var func = namespaces.pop();
|
||||
for(var i = 0; i < namespaces.length; i++) {
|
||||
context = context[namespaces[i]];
|
||||
}
|
||||
return context[func].apply(this, args);
|
||||
}
|
||||
|
||||
var changeptype = function(){
|
||||
w = $(window).width();
|
||||
h = $(window).height();
|
||||
dw = $(document).width();
|
||||
dh = $(document).height();
|
||||
|
||||
if(jQuery.browser.mobile === true){
|
||||
$("body").addClass("mobile").removeClass("fixed-left");
|
||||
}
|
||||
|
||||
if(!$("#wrapper").hasClass("forced")){
|
||||
if(w > 990){
|
||||
$("body").removeClass("smallscreen").addClass("widescreen");
|
||||
$("#wrapper").removeClass("enlarged");
|
||||
}else{
|
||||
$("body").removeClass("widescreen").addClass("smallscreen");
|
||||
$("#wrapper").addClass("enlarged");
|
||||
$(".left ul").removeAttr("style");
|
||||
}
|
||||
if($("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left")){
|
||||
$("body").removeClass("fixed-left").addClass("fixed-left-void");
|
||||
}else if(!$("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left-void")){
|
||||
$("body").removeClass("fixed-left-void").addClass("fixed-left");
|
||||
}
|
||||
|
||||
}
|
||||
toggle_slimscroll(".slimscrollleft");
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
FastClick.attach(document.body);
|
||||
resizefunc.push("initscrolls");
|
||||
resizefunc.push("changeptype");
|
||||
$('.sparkline').sparkline('html', { enableTagOptions: true });
|
||||
|
||||
$('.animate-number').each(function(){
|
||||
$(this).animateNumbers($(this).attr("data-value"), true, parseInt($(this).attr("data-duration")));
|
||||
})
|
||||
|
||||
//TOOLTIP
|
||||
$('body').tooltip({
|
||||
selector: "[data-toggle=tooltip]",
|
||||
container: "body"
|
||||
});
|
||||
|
||||
//RESPONSIVE SIDEBAR
|
||||
|
||||
|
||||
$(".open-right").click(function(e){
|
||||
$("#wrapper").toggleClass("open-right-sidebar");
|
||||
e.stopPropagation();
|
||||
$("body").trigger("resize");
|
||||
});
|
||||
|
||||
|
||||
$(".open-left").click(function(e){
|
||||
e.stopPropagation();
|
||||
$("#wrapper").toggleClass("enlarged");
|
||||
$("#wrapper").addClass("forced");
|
||||
|
||||
if($("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left")){
|
||||
$("body").removeClass("fixed-left").addClass("fixed-left-void");
|
||||
}else if(!$("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left-void")){
|
||||
$("body").removeClass("fixed-left-void").addClass("fixed-left");
|
||||
}
|
||||
if($("#wrapper").hasClass("enlarged")){
|
||||
$(".left ul").removeAttr("style");
|
||||
}else{
|
||||
$(".subdrop").siblings("ul:first").show();
|
||||
}
|
||||
toggle_slimscroll(".slimscrollleft");
|
||||
$("body").trigger("resize");
|
||||
});
|
||||
|
||||
// LEFT SIDE MAIN NAVIGATION
|
||||
$("#sidebar-menu a").on('click',function(e){
|
||||
if(!$("#wrapper").hasClass("enlarged")){
|
||||
|
||||
if($(this).parent().hasClass("has_sub")) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
if(!$(this).hasClass("subdrop")) {
|
||||
// hide any open menus and remove all other classes
|
||||
$("ul",$(this).parents("ul:first")).slideUp(350);
|
||||
$("a",$(this).parents("ul:first")).removeClass("subdrop");
|
||||
$("#sidebar-menu .pull-right i").removeClass("fa-angle-up").addClass("fa-angle-down");
|
||||
|
||||
// open our new menu and add the open class
|
||||
$(this).next("ul").slideDown(350);
|
||||
$(this).addClass("subdrop");
|
||||
$(".pull-right i",$(this).parents(".has_sub:last")).removeClass("fa-angle-down").addClass("fa-angle-up");
|
||||
$(".pull-right i",$(this).siblings("ul")).removeClass("fa-angle-up").addClass("fa-angle-down");
|
||||
}else if($(this).hasClass("subdrop")) {
|
||||
$(this).removeClass("subdrop");
|
||||
$(this).next("ul").slideUp(350);
|
||||
$(".pull-right i",$(this).parent()).removeClass("fa-angle-up").addClass("fa-angle-down");
|
||||
//$(".pull-right i",$(this).parents("ul:eq(1)")).removeClass("fa-chevron-down").addClass("fa-chevron-left");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// NAVIGATION HIGHLIGHT & OPEN PARENT
|
||||
$("#sidebar-menu ul li.has_sub a.active").parents("li:last").children("a:first").addClass("active").trigger("click");
|
||||
|
||||
//WIDGET ACTIONS
|
||||
$(".widget-header .widget-close").on("click",function(event){
|
||||
event.preventDefault();
|
||||
$item = $(this).parents(".widget:first");
|
||||
bootbox.confirm("Are you sure to remove this widget?", function(result) {
|
||||
if(result === true){
|
||||
$item.addClass("animated bounceOutUp");
|
||||
window.setTimeout(function () {
|
||||
if($item.data("is-app")){
|
||||
|
||||
$item.removeClass("animated bounceOutUp");
|
||||
if($item.hasClass("ui-draggable")){
|
||||
$item.find(".widget-popout").click();
|
||||
}
|
||||
$item.hide();
|
||||
$("a[data-app='"+$item.attr("id")+"']").addClass("clickable");
|
||||
}else{
|
||||
$item.remove();
|
||||
}
|
||||
}, 300);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on("click", ".widget-header .widget-toggle", function(event){
|
||||
event.preventDefault();
|
||||
$(this).toggleClass("closed").parents(".widget:first").find(".widget-content").slideToggle();
|
||||
});
|
||||
|
||||
$(document).on("click", ".widget-header .widget-popout", function(event){
|
||||
event.preventDefault();
|
||||
var widget = $(this).parents(".widget:first");
|
||||
if(widget.hasClass("modal-widget")){
|
||||
$("i",this).removeClass("icon-window").addClass("icon-publish");
|
||||
widget.removeAttr("style").removeClass("modal-widget");
|
||||
widget.find(".widget-maximize,.widget-toggle").removeClass("nevershow");
|
||||
widget.draggable("destroy").resizable("destroy");
|
||||
}else{
|
||||
widget.removeClass("maximized");
|
||||
widget.find(".widget-maximize,.widget-toggle").addClass("nevershow");
|
||||
$("i",this).removeClass("icon-publish").addClass("icon-window");
|
||||
var w = widget.width();
|
||||
var h = widget.height();
|
||||
widget.addClass("modal-widget").removeAttr("style").width(w).height(h);
|
||||
$(widget).draggable({ handle: ".widget-header",containment: ".content-page" }).css({"left":widget.position().left-2,"top":widget.position().top-2}).resizable({minHeight: 150,minWidth: 200});
|
||||
}
|
||||
window.setTimeout(function () {
|
||||
$("body").trigger("resize");
|
||||
},300);
|
||||
});
|
||||
|
||||
$("a[data-app]").each(function(e){
|
||||
var app = $(this).data("app");
|
||||
var status = $(this).data("status");
|
||||
$("#"+app).data("is-app",true);
|
||||
if(status == "inactive"){
|
||||
$("#"+app).hide();
|
||||
$(this).addClass("clickable");
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on("click", "a[data-app].clickable", function(event){
|
||||
event.preventDefault();
|
||||
$(this).removeClass("clickable");
|
||||
var app = $(this).data("app");
|
||||
$("#"+app).show();
|
||||
$("#"+app+" .widget-popout").click();
|
||||
topd = $("#"+app).offset().top - $(window).scrollTop();
|
||||
$("#"+app).css({"left":"10","top":-(topd-60)+"px"}).addClass("fadeInDown animated");
|
||||
window.setTimeout(function () {
|
||||
$("#"+app).removeClass("fadeInDown animated");
|
||||
}, 300);
|
||||
});
|
||||
|
||||
$(document).on("click", ".widget", function(){
|
||||
if($(this).hasClass("modal-widget")){
|
||||
$(".modal-widget").css("z-index",5);
|
||||
$(this).css("z-index",6);
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on("click", '.widget .reload', function (event) {
|
||||
event.preventDefault();
|
||||
var el = $(this).parents(".widget:first");
|
||||
blockUI(el);
|
||||
window.setTimeout(function () {
|
||||
unblockUI(el);
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
$(document).on("click", ".widget-header .widget-maximize", function(event){
|
||||
event.preventDefault();
|
||||
$(this).parents(".widget:first").removeAttr("style").toggleClass("maximized");
|
||||
$("i",this).toggleClass("icon-resize-full-1").toggleClass("icon-resize-small-1");
|
||||
$(this).parents(".widget:first").find(".widget-toggle").toggleClass("nevershow");
|
||||
$("body").trigger("resize");
|
||||
return false;
|
||||
});
|
||||
|
||||
$( ".portlets" ).sortable({
|
||||
connectWith: ".portlets",
|
||||
handle: ".widget-header",
|
||||
cancel: ".modal-widget",
|
||||
opacity: 0.5,
|
||||
dropOnEmpty: true,
|
||||
forcePlaceholderSize: true,
|
||||
receive: function(event, ui) {$("body").trigger("resize")}
|
||||
});
|
||||
|
||||
// Init Code Highlighter
|
||||
prettyPrint();
|
||||
|
||||
//RUN RESIZE ITEMS
|
||||
$(window).resize(debounce(resizeitems,100));
|
||||
$("body").trigger("resize");
|
||||
|
||||
//SELECT
|
||||
$('.selectpicker').selectpicker();
|
||||
|
||||
|
||||
//FILE INPUT
|
||||
$('input[type=file]').bootstrapFileInput();
|
||||
|
||||
|
||||
//DATE PICKER
|
||||
$('.datepicker-input').datepicker();
|
||||
|
||||
|
||||
//ICHECK
|
||||
$('input:not(.ios-switch)').iCheck({
|
||||
checkboxClass: 'icheckbox_square-aero',
|
||||
radioClass: 'iradio_square-aero',
|
||||
increaseArea: '20%' // optional
|
||||
});
|
||||
|
||||
// IOS7 SWITCH
|
||||
$(".ios-switch").each(function(){
|
||||
mySwitch = new Switch(this);
|
||||
});
|
||||
|
||||
//GALLERY
|
||||
$('.gallery-wrap').each(function() { // the containers for all your galleries
|
||||
$(this).magnificPopup({
|
||||
delegate: 'a.zooming', // the selector for gallery item
|
||||
type: 'image',
|
||||
removalDelay: 300,
|
||||
mainClass: 'mfp-fade',
|
||||
gallery: {
|
||||
enabled:true
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
var debounce = function(func, wait, immediate) {
|
||||
var timeout, result;
|
||||
return function() {
|
||||
var context = this, args = arguments;
|
||||
var later = function() {
|
||||
timeout = null;
|
||||
if (!immediate) result = func.apply(context, args);
|
||||
};
|
||||
var callNow = immediate && !timeout;
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(later, wait);
|
||||
if (callNow) result = func.apply(context, args);
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
function resizeitems(){
|
||||
if($.isArray(resizefunc)){
|
||||
for (i = 0; i < resizefunc.length; i++) {
|
||||
window[resizefunc[i]]();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function initscrolls(){
|
||||
if(jQuery.browser.mobile !== true){
|
||||
//SLIM SCROLL
|
||||
$('.slimscroller').slimscroll({
|
||||
height: 'auto',
|
||||
size: "5px"
|
||||
});
|
||||
|
||||
$('.slimscrollleft').slimScroll({
|
||||
height: 'auto',
|
||||
position: 'left',
|
||||
size: "5px",
|
||||
color: '#7A868F'
|
||||
});
|
||||
}
|
||||
}
|
||||
function toggle_slimscroll(item){
|
||||
if($("#wrapper").hasClass("enlarged")){
|
||||
$(item).css("overflow","inherit").parent().css("overflow","inherit");
|
||||
$(item). siblings(".slimScrollBar").css("visibility","hidden");
|
||||
}else{
|
||||
$(item).css("overflow","hidden").parent().css("overflow","hidden");
|
||||
$(item). siblings(".slimScrollBar").css("visibility","visible");
|
||||
}
|
||||
}
|
||||
|
||||
function nifty_modal_alert(effect,header,text){
|
||||
|
||||
var randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));
|
||||
var uniqid = randLetter + Date.now();
|
||||
|
||||
$modal = '<div class="md-modal md-effect-'+effect+'" id="'+uniqid+'">';
|
||||
$modal += '<div class="md-content">';
|
||||
$modal += '<h3>'+header+'</h3>';
|
||||
$modal += '<div class="md-modal-body">'+text;
|
||||
$modal += '</div>';
|
||||
$modal += '</div>';
|
||||
$modal += '</div>';
|
||||
|
||||
$("body").prepend($modal);
|
||||
|
||||
window.setTimeout(function () {
|
||||
$("#"+uniqid).addClass("md-show");
|
||||
$(".md-overlay,.md-close").click(function(){
|
||||
$("#"+uniqid).removeClass("md-show");
|
||||
window.setTimeout(function () {$("#"+uniqid).remove();},500);
|
||||
});
|
||||
},100);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function blockUI(item) {
|
||||
$(item).block({
|
||||
message: '<div class="loading"></div>',
|
||||
css: {
|
||||
border: 'none',
|
||||
width: '14px',
|
||||
backgroundColor: 'none'
|
||||
},
|
||||
overlayCSS: {
|
||||
backgroundColor: '#fff',
|
||||
opacity: 0.4,
|
||||
cursor: 'wait'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function unblockUI(item) {
|
||||
$(item).unblock();
|
||||
}
|
||||
|
||||
function toggle_fullscreen(){
|
||||
var fullscreenEnabled = document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled;
|
||||
if(fullscreenEnabled){
|
||||
if(!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {
|
||||
launchIntoFullscreen(document.documentElement);
|
||||
}else{
|
||||
exitFullscreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Thanks to http://davidwalsh.name/fullscreen
|
||||
|
||||
function launchIntoFullscreen(element) {
|
||||
if(element.requestFullscreen) {
|
||||
element.requestFullscreen();
|
||||
} else if(element.mozRequestFullScreen) {
|
||||
element.mozRequestFullScreen();
|
||||
} else if(element.webkitRequestFullscreen) {
|
||||
element.webkitRequestFullscreen();
|
||||
} else if(element.msRequestFullscreen) {
|
||||
element.msRequestFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
function exitFullscreen() {
|
||||
if(document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if(document.mozCancelFullScreen) {
|
||||
document.mozCancelFullScreen();
|
||||
} else if(document.webkitExitFullscreen) {
|
||||
document.webkitExitFullscreen();
|
||||
}
|
||||
}
|
@ -0,0 +1,126 @@
|
||||
$(function () {
|
||||
|
||||
function runCalendar() {
|
||||
var $modal = $('#event-modal');
|
||||
$('#draggable-events div.draggable-event').each(function () {
|
||||
// create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)
|
||||
// it doesn't need to have a start or end
|
||||
var eventObject = {
|
||||
title: $.trim($(this).text()) // use the element's text as the event title
|
||||
};
|
||||
// store the Event Object in the DOM element so we can get to it later
|
||||
$(this).data('eventObject', eventObject);
|
||||
// make the event draggable using jQuery UI
|
||||
$(this).draggable({
|
||||
zIndex: 999,
|
||||
revert: true, // will cause the event to go back to its
|
||||
revertDuration: 20 // original position after the drag
|
||||
});
|
||||
});
|
||||
/* Initialize the calendar */
|
||||
var date = new Date();
|
||||
var d = date.getDate();
|
||||
var m = date.getMonth();
|
||||
var y = date.getFullYear();
|
||||
var form = '';
|
||||
var calendar = $('#calendar').fullCalendar({
|
||||
slotDuration: '00:15:00', /* If we want to split day time each 15minutes */
|
||||
minTime: '08:00:00',
|
||||
maxTime: '19:00:00',
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'month,agendaWeek,agendaDay'
|
||||
},
|
||||
events: [{
|
||||
title: 'Take your pills!',
|
||||
start: new Date(y, m, 2),
|
||||
className: 'bg-darkblue-2'
|
||||
}, {
|
||||
title: 'Visit Doctor',
|
||||
start: '2014-05-15 14:00:00',
|
||||
start: '2014-05-15 15:00:00',
|
||||
className: 'bg-red-1'
|
||||
}],
|
||||
editable: true,
|
||||
droppable: true, // this allows things to be dropped onto the calendar !!!
|
||||
drop: function (date, allDay) { // this function is called when something is dropped
|
||||
// retrieve the dropped element's stored Event Object
|
||||
var originalEventObject = $(this).data('eventObject');
|
||||
var $categoryClass = $(this).attr('data-class');
|
||||
// we need to copy it, so that multiple events don't have a reference to the same object
|
||||
var copiedEventObject = $.extend({}, originalEventObject);
|
||||
// assign it the date that was reported
|
||||
copiedEventObject.start = date;
|
||||
copiedEventObject.allDay = allDay;
|
||||
if ($categoryClass)
|
||||
copiedEventObject['className'] = [$categoryClass];
|
||||
// render the event on the calendar
|
||||
// the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
|
||||
$('#calendar').fullCalendar('renderEvent', copiedEventObject, true);
|
||||
// is the "remove after drop" checkbox checked?
|
||||
if ($('#drop-remove').is(':checked')) {
|
||||
// if so, remove the element from the "Draggable Events" list
|
||||
$(this).remove();
|
||||
}
|
||||
},
|
||||
|
||||
selectable: true,
|
||||
eventClick: function (calEvent, jsEvent, view) {
|
||||
var form = $("<form></form>");
|
||||
form.append("<label>Change event name</label>");
|
||||
form.append("<div class='input-group'><input class='form-control' type=text value='" + calEvent.title + "' /><span class='input-group-btn'><button type='submit' class='btn btn-success'><i class='fa fa-check'></i> Save Changes</button></span></div>");
|
||||
$modal.modal({
|
||||
backdrop: 'static'
|
||||
});
|
||||
$modal.find('.delete-event').show().end().find('.save-event').hide().end().find('.modal-body').empty().prepend(form).end().find('.delete-event').unbind('click').click(function () {
|
||||
calendar.fullCalendar('removeEvents', function (ev) {
|
||||
return (ev._id == calEvent._id);
|
||||
});
|
||||
$modal.modal('hide');
|
||||
});
|
||||
$modal.find('form').on('submit', function () {
|
||||
calEvent.title = form.find("input[type=text]").val();
|
||||
calendar.fullCalendar('updateEvent', calEvent);
|
||||
$modal.modal('hide');
|
||||
return false;
|
||||
});
|
||||
},
|
||||
select: function (start, end, allDay) {
|
||||
$modal.modal({
|
||||
backdrop: 'static'
|
||||
});
|
||||
form = $("<form></form>");
|
||||
form.append("<div class='row'></div>");
|
||||
form.find(".row").append("<div class='col-md-6'><div class='form-group'><label class='control-label'>Event Name</label><input class='form-control' placeholder='Insert Event Name' type='text' name='title'/></div></div>").append("<div class='col-md-6'><div class='form-group'><label class='control-label'>Category</label><select class='form-control' name='category'></select></div></div>").find("select[name='category']").append("<option value='bg-red'>Work</option>")
|
||||
.append("<option value='bg-green-1'>Entertainment</option>").append("<option value='bg-pink-1'>Meeting</option>").append("<option value='bg-lightblue-1'>Lunch</option>").append("<option value='bg-red-1'>Work</option>").append("<option value='bg-blue-1'>Sport</option>");
|
||||
$modal.find('.delete-event').hide().end().find('.save-event').show().end().find('.modal-body').empty().prepend(form).end().find('.save-event').unbind('click').click(function () {
|
||||
form.submit();
|
||||
});
|
||||
$modal.find('form').on('submit', function () {
|
||||
title = form.find("input[name='title']").val();
|
||||
$categoryClass = form.find("select[name='category'] option:checked").val();
|
||||
if (title !== null && title.length != 0) {
|
||||
calendar.fullCalendar('renderEvent', {
|
||||
title: title,
|
||||
start: start,
|
||||
end: end,
|
||||
allDay: false,
|
||||
className: $categoryClass
|
||||
}, true);
|
||||
}
|
||||
else{
|
||||
alert('You need a title for the event!');
|
||||
}
|
||||
$modal.modal('hide');
|
||||
return false;
|
||||
});
|
||||
calendar.fullCalendar('unselect');
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
runCalendar();
|
||||
|
||||
});
|
@ -0,0 +1,60 @@
|
||||
$(function(){
|
||||
$("#datatables-1").dataTable();
|
||||
|
||||
var table = $('#datatables-2').DataTable();
|
||||
|
||||
$("#datatables-2 tfoot th").each( function ( i ) {
|
||||
var select = $('<select class="form-control input-sm"><option value=""></option></select>')
|
||||
.appendTo( $(this).empty() )
|
||||
.on( 'change', function () {
|
||||
table.column( i )
|
||||
.search( '^'+$(this).val()+'$', true, false )
|
||||
.draw();
|
||||
} );
|
||||
|
||||
table.column( i ).data().unique().sort().each( function ( d, j ) {
|
||||
select.append( '<option value="'+d+'">'+d+'</option>' )
|
||||
} );
|
||||
} );
|
||||
|
||||
$('#datatables-3').dataTable( {
|
||||
"footerCallback": function ( row, data, start, end, display ) {
|
||||
var api = this.api(), data;
|
||||
|
||||
// Remove the formatting to get integer data for summation
|
||||
var intVal = function ( i ) {
|
||||
return typeof i === 'string' ?
|
||||
i.replace(/[\$,]/g, '')*1 :
|
||||
typeof i === 'number' ?
|
||||
i : 0;
|
||||
};
|
||||
|
||||
// Total over all pages
|
||||
data = api.column( 4 ).data();
|
||||
total = data.length ?
|
||||
data.reduce( function (a, b) {
|
||||
return intVal(a) + intVal(b);
|
||||
} ) :
|
||||
0;
|
||||
|
||||
// Total over this page
|
||||
data = api.column( 4, { page: 'current'} ).data();
|
||||
pageTotal = data.length ?
|
||||
data.reduce( function (a, b) {
|
||||
return intVal(a) + intVal(b);
|
||||
} ) :
|
||||
0;
|
||||
|
||||
// Update footer
|
||||
$( api.column( 4 ).footer() ).html(
|
||||
'$'+pageTotal +' ( $'+ total +' total)'
|
||||
);
|
||||
}
|
||||
} );
|
||||
$('#datatables-4').DataTable( {
|
||||
dom: 'T<"clear">lfrtip',
|
||||
tableTools: {
|
||||
"sSwfPath": "./assets/libs/jquery-datatables/extensions/TableTools/swf/copy_csv_xls_pdf.swf"
|
||||
}
|
||||
} );
|
||||
})
|
@ -0,0 +1,290 @@
|
||||
$(document).ready(function() {
|
||||
// Generate a simple captcha
|
||||
function randomNumber(min, max) {
|
||||
return Math.floor(Math.random() * (max - min + 1) + min);
|
||||
};
|
||||
$('#captchaOperation').html([randomNumber(1, 20), '+', randomNumber(1, 30), '='].join(' '));
|
||||
|
||||
|
||||
//EXAMPLE REGISTER FORM
|
||||
$('#registerForm').bootstrapValidator({
|
||||
message: 'This value is not valid',
|
||||
fields: {
|
||||
username: {
|
||||
message: 'The username is not valid',
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The username is required and can\'t be empty'
|
||||
},
|
||||
stringLength: {
|
||||
min: 6,
|
||||
max: 30,
|
||||
message: 'The username must be more than 6 and less than 30 characters long'
|
||||
},
|
||||
regexp: {
|
||||
regexp: /^[a-zA-Z0-9_\.]+$/,
|
||||
message: 'The username can only consist of alphabetical, number, dot and underscore'
|
||||
},
|
||||
different: {
|
||||
field: 'password',
|
||||
message: 'The username and password can\'t be the same as each other'
|
||||
}
|
||||
}
|
||||
},
|
||||
email: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The email address is required and can\'t be empty'
|
||||
},
|
||||
emailAddress: {
|
||||
message: 'The input is not a valid email address'
|
||||
}
|
||||
}
|
||||
},
|
||||
password: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The password is required and can\'t be empty'
|
||||
},
|
||||
identical: {
|
||||
field: 'confirmPassword',
|
||||
message: 'The password and its confirm are not the same'
|
||||
},
|
||||
different: {
|
||||
field: 'username',
|
||||
message: 'The password can\'t be the same as username'
|
||||
}
|
||||
}
|
||||
},
|
||||
confirmPassword: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The confirm password is required and can\'t be empty'
|
||||
},
|
||||
identical: {
|
||||
field: 'password',
|
||||
message: 'The password and its confirm are not the same'
|
||||
},
|
||||
different: {
|
||||
field: 'username',
|
||||
message: 'The password can\'t be the same as username'
|
||||
}
|
||||
}
|
||||
},
|
||||
phoneNumber: {
|
||||
validators: {
|
||||
digits: {
|
||||
message: 'The value can contain only digits'
|
||||
}
|
||||
}
|
||||
},
|
||||
acceptTerms: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'You have to accept the terms and policies'
|
||||
}
|
||||
}
|
||||
},
|
||||
captcha: {
|
||||
validators: {
|
||||
callback: {
|
||||
message: 'Wrong answer',
|
||||
callback: function(value, validator) {
|
||||
var items = $('#captchaOperation').html().split(' '), sum = parseInt(items[0]) + parseInt(items[2]);
|
||||
return value == sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//EXAMPLE CONTACT FORM
|
||||
$('#contactForm').bootstrapValidator({
|
||||
message: 'This value is not valid',
|
||||
fields: {
|
||||
name: {
|
||||
message: 'Name is not valid',
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'Name is required and can\'t be empty'
|
||||
},
|
||||
regexp: {
|
||||
regexp: /^[a-zA-Z0-9_\.]+$/,
|
||||
message: 'Name can only consist of alphabetical, number, dot and underscore'
|
||||
}
|
||||
}
|
||||
},
|
||||
email: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The email address is required and can\'t be empty'
|
||||
},
|
||||
emailAddress: {
|
||||
message: 'The input is not a valid email address'
|
||||
}
|
||||
}
|
||||
},
|
||||
website: {
|
||||
validators: {
|
||||
uri: {
|
||||
message: 'The input is not a valid URL'
|
||||
}
|
||||
}
|
||||
},
|
||||
Contactmessage: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'Message is required and can\'t be empty'
|
||||
},
|
||||
stringLength: {
|
||||
min: 6,
|
||||
message: 'Message must be more than 6 characters long'
|
||||
}
|
||||
}
|
||||
},
|
||||
captcha: {
|
||||
validators: {
|
||||
callback: {
|
||||
message: 'Wrong answer',
|
||||
callback: function(value, validator) {
|
||||
var items = $('#captchaOperation').html().split(' '), sum = parseInt(items[0]) + parseInt(items[2]);
|
||||
return value == sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//Regular expression based validators
|
||||
$('#ExpressionValidator').bootstrapValidator({
|
||||
message: 'This value is not valid',
|
||||
fields: {
|
||||
email: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The email address is required and can\'t be empty'
|
||||
},
|
||||
emailAddress: {
|
||||
message: 'The input is not a valid email address'
|
||||
}
|
||||
}
|
||||
},
|
||||
website: {
|
||||
validators: {
|
||||
uri: {
|
||||
message: 'The input is not a valid URL'
|
||||
}
|
||||
}
|
||||
},
|
||||
phoneNumber: {
|
||||
validators: {
|
||||
digits: {
|
||||
message: 'The value can contain only digits'
|
||||
}
|
||||
}
|
||||
},
|
||||
color: {
|
||||
validators: {
|
||||
hexColor: {
|
||||
message: 'The input is not a valid hex color'
|
||||
}
|
||||
}
|
||||
},
|
||||
zipCode: {
|
||||
validators: {
|
||||
usZipCode: {
|
||||
message: 'The input is not a valid US zip code'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//Regular expression based validators
|
||||
$('#NotEmptyValidator').bootstrapValidator({
|
||||
message: 'This value is not valid',
|
||||
fields: {
|
||||
username: {
|
||||
message: 'The username is not valid',
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The username is required and can\'t be empty'
|
||||
},
|
||||
stringLength: {
|
||||
min: 6,
|
||||
max: 30,
|
||||
message: 'The username must be more than 6 and less than 30 characters long'
|
||||
},
|
||||
regexp: {
|
||||
regexp: /^[a-zA-Z0-9_\.]+$/,
|
||||
message: 'The username can only consist of alphabetical, number, dot and underscore'
|
||||
}
|
||||
}
|
||||
},
|
||||
country: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The country is required and can\'t be empty'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//Regular expression based validators
|
||||
$('#IdenticalValidator').bootstrapValidator({
|
||||
message: 'This value is not valid',
|
||||
fields: {
|
||||
password: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The password is required and can\'t be empty'
|
||||
},
|
||||
identical: {
|
||||
field: 'confirmPassword',
|
||||
message: 'The password and its confirm are not the same'
|
||||
}
|
||||
}
|
||||
},
|
||||
confirmPassword: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'The confirm password is required and can\'t be empty'
|
||||
},
|
||||
identical: {
|
||||
field: 'password',
|
||||
message: 'The password and its confirm are not the same'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//Regular expression based validators
|
||||
$('#OtherValidator').bootstrapValidator({
|
||||
message: 'This value is not valid',
|
||||
fields: {
|
||||
ages: {
|
||||
validators: {
|
||||
lessThan: {
|
||||
value: 100,
|
||||
inclusive: true,
|
||||
message: 'The ages has to be less than 100'
|
||||
},
|
||||
greaterThan: {
|
||||
value: 10,
|
||||
inclusive: false,
|
||||
message: 'The ages has to be greater than or equals to 10'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
@ -0,0 +1,6 @@
|
||||
$(function() {
|
||||
$('#myWizard').easyWizard({
|
||||
buttonsClass: 'btn btn-default',
|
||||
submitButtonClass: 'btn btn-primary'
|
||||
});
|
||||
});
|
@ -0,0 +1,5 @@
|
||||
$(function() {
|
||||
$('.summernote').summernote({
|
||||
height: 500
|
||||
});
|
||||
});
|
@ -0,0 +1,168 @@
|
||||
$(function(){
|
||||
|
||||
$("#gmap-1").gmap3({
|
||||
marker:{
|
||||
latLng: [46.578498,2.457275],
|
||||
options:{
|
||||
draggable:true
|
||||
},
|
||||
events:{
|
||||
dragend: function(marker){
|
||||
$(this).gmap3({
|
||||
getaddress:{
|
||||
latLng:marker.getPosition(),
|
||||
callback:function(results){
|
||||
var map = $(this).gmap3("get"),
|
||||
infowindow = $(this).gmap3({get:"infowindow"}),
|
||||
content = results && results[1] ? results && results[1].formatted_address : "no address";
|
||||
if (infowindow){
|
||||
infowindow.open(map, marker);
|
||||
infowindow.setContent(content);
|
||||
} else {
|
||||
$(this).gmap3({
|
||||
infowindow:{
|
||||
anchor:marker,
|
||||
options:{content: content}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
map:{
|
||||
options:{
|
||||
zoom: 5
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#gmap-2").gmap3({
|
||||
map:{
|
||||
options:{
|
||||
center:[46.578498,2.457275],
|
||||
zoom: 4,
|
||||
mapTypeId: google.maps.MapTypeId.TERRAIN
|
||||
}
|
||||
},
|
||||
marker:{
|
||||
values: [
|
||||
[49.28952958093682, 6.152559438984804],
|
||||
{
|
||||
latLng:[44.28952958093682, 6.152559438984804],
|
||||
options:{
|
||||
icon: "http://maps.google.com/mapfiles/marker_green.png"
|
||||
}
|
||||
},
|
||||
[49.28952958093682, -1.1501188139848408],
|
||||
{
|
||||
latLng:[44.28952958093682, -1.1501188139848408],
|
||||
events:{
|
||||
click:function(){
|
||||
alert("I'm the last one, and i have my own click event");
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
events:{ // events trigged by markers
|
||||
click: function(){
|
||||
alert("Here is the default click event");
|
||||
}
|
||||
},
|
||||
cluster:{
|
||||
radius: 100,
|
||||
0: {
|
||||
content: "<div class='cluster cluster-1'>CLUSTER_COUNT</div>",
|
||||
width: 53,
|
||||
height: 52
|
||||
},
|
||||
20: {
|
||||
content: "<div class='cluster cluster-2'>CLUSTER_COUNT</div>",
|
||||
width: 56,
|
||||
height: 55
|
||||
},
|
||||
50: {
|
||||
content: "<div class='cluster cluster-3'>CLUSTER_COUNT</div>",
|
||||
width: 66,
|
||||
height: 65
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var fenway = new google.maps.LatLng(42.345573,-71.098326);
|
||||
$("#gmap-3").gmap3({
|
||||
map:{
|
||||
options:{
|
||||
zoom: 14,
|
||||
mapTypeId: google.maps.MapTypeId.ROADMAP,
|
||||
streetViewControl: true,
|
||||
center: fenway
|
||||
}
|
||||
},
|
||||
streetviewpanorama:{
|
||||
options:{
|
||||
container: $("#gmap-4"),
|
||||
opts:{
|
||||
position: fenway,
|
||||
pov: {
|
||||
heading: 34,
|
||||
pitch: 10,
|
||||
zoom: 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#gmap-5").gmap3({
|
||||
map:{
|
||||
address:"ISTABBUL, TURKEY",
|
||||
options:{
|
||||
zoom:4,
|
||||
mapTypeId: google.maps.MapTypeId.SATELLITE,
|
||||
mapTypeControl: true,
|
||||
mapTypeControlOptions: {
|
||||
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
|
||||
},
|
||||
navigationControl: true,
|
||||
scrollwheel: true,
|
||||
streetViewControl: true
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#gmap-6").gmap3({
|
||||
map:{
|
||||
options:{
|
||||
center:[33, -111],
|
||||
zoom:10,
|
||||
mapTypeControlOptions: {
|
||||
mapTypeIds: [google.maps.MapTypeId.ROADMAP,
|
||||
google.maps.MapTypeId.SATELLITE,
|
||||
google.maps.MapTypeId.HYBRID,
|
||||
google.maps.MapTypeId.TERRAIN,
|
||||
"sectional"]
|
||||
}
|
||||
}
|
||||
},
|
||||
imagemaptype:{
|
||||
id: "sectional",
|
||||
options:{
|
||||
getTileUrl: function(coord, zoom) {
|
||||
return "http://www.fourpeaksnavigation.com/sectionals/phx" + "/" + zoom + "/" + coord.x + "/" + coord.y + ".png";
|
||||
},
|
||||
tileSize: new google.maps.Size(256, 256),
|
||||
isPng: true,
|
||||
name: "Chart",
|
||||
minZoom: 1,
|
||||
maxZoom: 111
|
||||
},
|
||||
callback: function(){
|
||||
$(this).gmap3("get").setMapTypeId("sectional");
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
@ -0,0 +1,373 @@
|
||||
var timer;
|
||||
var graph;
|
||||
var graph2;
|
||||
|
||||
$(document).ready(function(){
|
||||
$(".dial").knob();
|
||||
var cityAreaData = [
|
||||
500.70,
|
||||
410.16,
|
||||
210.69,
|
||||
120.17,
|
||||
64.31,
|
||||
150.35,
|
||||
130.22,
|
||||
120.71,
|
||||
300.32
|
||||
]
|
||||
$('#vector-map').vectorMap({
|
||||
map: 'us_aea_en',
|
||||
normalizeFunction: 'polynomial',
|
||||
zoomOnScroll:true,
|
||||
focusOn:{
|
||||
x: 0,
|
||||
y: 0,
|
||||
scale: 0.9
|
||||
},
|
||||
zoomMin:0.9,
|
||||
hoverColor: false,
|
||||
regionStyle:{
|
||||
initial: {
|
||||
fill: '#bbbbbb',
|
||||
"fill-opacity": 1,
|
||||
stroke: '#a5ded9',
|
||||
"stroke-width": 0,
|
||||
"stroke-opacity": 0
|
||||
},
|
||||
hover: {
|
||||
"fill-opacity": 0.8
|
||||
}
|
||||
},
|
||||
markerStyle: {
|
||||
initial: {
|
||||
fill: '#F57A82',
|
||||
stroke: 'rgba(230,140,110,.8)',
|
||||
"fill-opacity": 1,
|
||||
"stroke-width": 9,
|
||||
"stroke-opacity": 0.5,
|
||||
r: 3
|
||||
},
|
||||
hover: {
|
||||
stroke: 'black',
|
||||
"stroke-width": 2
|
||||
},
|
||||
selected: {
|
||||
fill: 'blue'
|
||||
},
|
||||
selectedHover: {
|
||||
}
|
||||
},
|
||||
backgroundColor: '#ffffff',
|
||||
markers :[
|
||||
|
||||
{latLng: [35.85, -77.88], name: 'Rocky Mt,NC'},
|
||||
{latLng: [32.90, -97.03], name: 'Dallas/FW,TX'},
|
||||
{latLng: [39.37, -75.07], name: 'Millville,NJ'}
|
||||
|
||||
],
|
||||
series: {
|
||||
markers: [{
|
||||
attribute: 'r',
|
||||
scale: [3, 7],
|
||||
values: cityAreaData
|
||||
}]
|
||||
}
|
||||
});
|
||||
if ("geolocation" in navigator) {
|
||||
$('.js-geolocation').show();
|
||||
} else {
|
||||
$('.js-geolocation').hide();
|
||||
}
|
||||
|
||||
/* Where in the world are you? */
|
||||
$(document).on('click', '.js-geolocation', function() {
|
||||
navigator.geolocation.getCurrentPosition(function(position) {
|
||||
loadWeather(position.coords.latitude+','+position.coords.longitude); //load weather using your lat/lng coordinates
|
||||
});
|
||||
});
|
||||
|
||||
resizefunc.push("reload_charts");
|
||||
//$(".content-page").resize(debounce(reload_charts,100));
|
||||
|
||||
load_charts();
|
||||
loadWeather('Seattle','');
|
||||
monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
||||
dayNames = ["S", "M", "T", "W", "T", "F", "S"];
|
||||
|
||||
var cTime = new Date(), month = cTime.getMonth()+1, year = cTime.getFullYear();
|
||||
|
||||
var events = [
|
||||
{
|
||||
"date": "4/"+month+"/"+year,
|
||||
"title": 'Meet a friend',
|
||||
"link": 'javascript:;',
|
||||
"color": 'rgba(255,255,255,0.2)',
|
||||
"content": 'Contents here'
|
||||
},
|
||||
{
|
||||
"date": "7/"+month+"/"+year,
|
||||
"title": 'Kick off meeting!',
|
||||
"link": 'javascript:;',
|
||||
"color": 'rgba(255,255,255,0.2)',
|
||||
"content": 'Have a kick off meeting with .inc company'
|
||||
},
|
||||
{
|
||||
"date": "19/"+month+"/"+year,
|
||||
"title": 'Link to Google',
|
||||
"link": 'http://www.google.com',
|
||||
"color": 'rgba(255,255,255,0.2)',
|
||||
}
|
||||
];
|
||||
|
||||
$('#calendar-box2').bic_calendar({
|
||||
events: events,
|
||||
dayNames: dayNames,
|
||||
monthNames: monthNames,
|
||||
showDays: true,
|
||||
displayMonthController: true,
|
||||
displayYearController: false,
|
||||
popoverOptions:{
|
||||
placement: 'top',
|
||||
trigger: 'hover',
|
||||
html: true
|
||||
},
|
||||
tooltipOptions:{
|
||||
placement: 'top',
|
||||
html: true
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function loadWeather(location, woeid) {
|
||||
$.simpleWeather({
|
||||
location: location,
|
||||
woeid: woeid,
|
||||
unit: 'c',
|
||||
success: function(weather) {
|
||||
html = '<h2><i class="wicon-'+weather.code+'"></i> '+weather.temp+'°'+weather.units.temp+' <span class="w-temp2">/ '+weather.tempAlt+'°F</span></h2>';
|
||||
html += '<span class="w-region">'+weather.city+', '+weather.region+'</li>';
|
||||
html += '<span class="w-currently">'+weather.currently+'</span>';
|
||||
html += '';
|
||||
|
||||
$("#weather").html(html);
|
||||
},
|
||||
error: function(error) {
|
||||
$("#weather").html('<p>'+error+'</p>');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function reload_charts(){
|
||||
graph.configure({
|
||||
width: $("#home-chart-3").width()
|
||||
});
|
||||
graph.render();
|
||||
|
||||
graph2.configure({
|
||||
width: $("#home-chart-2").width()
|
||||
});
|
||||
graph2.render();
|
||||
window.morris1.redraw();
|
||||
window.morris2.redraw();
|
||||
}
|
||||
|
||||
function load_charts(){
|
||||
//MORRIS
|
||||
|
||||
window.morris1 = Morris.Bar({
|
||||
element: 'morris-bar-home',
|
||||
data: [
|
||||
{ y: 'Indonesia', a: 952},
|
||||
{ y: 'India', a: 985},
|
||||
{ y: 'Malaysia', a: 955},
|
||||
{ y: 'China', a: 785 },
|
||||
{ y: 'Philipina', a: 700 },
|
||||
{ y: 'Autralia', a: 601 },
|
||||
{ y: 'United Kingdom', a: 421 },
|
||||
{ y: 'United States', a: 725 },
|
||||
{ y: 'Taiwan', a: 350 },
|
||||
{ y: 'New Zealand', a: 120 },
|
||||
{ y: 'Singapore', a: 124}
|
||||
],
|
||||
xkey: 'y',
|
||||
ykeys: ['a'],
|
||||
redraw: true,
|
||||
labels: ['Visitor'],
|
||||
resize: true,
|
||||
barColors: ['#45B29D'],
|
||||
gridTextColor: ['#777'],
|
||||
gridTextSize: 11,
|
||||
hideHover: 'auto',
|
||||
grid :false
|
||||
});
|
||||
|
||||
//MORRIS
|
||||
window.morris2 = Morris.Area({
|
||||
element: 'morris-home',
|
||||
padding: 10,
|
||||
behaveLikeLine: true,
|
||||
gridEnabled: false,
|
||||
gridLineColor: '#dddddd',
|
||||
axes: true,
|
||||
resize: true,
|
||||
smooth:true,
|
||||
pointSize: 0,
|
||||
lineWidth: 0,
|
||||
fillOpacity:0.85,
|
||||
data: [
|
||||
{period: '2010 Q1', iphone: 4666, ipad: 3666, itouch: 2666},
|
||||
{period: '2010 Q2', iphone: 4441, ipad: 3441, itouch: 2441},
|
||||
{period: '2010 Q3', iphone: 6501, ipad: 4501, itouch: 2501},
|
||||
{period: '2010 Q4', iphone: 7689, ipad: 6689, itouch: 5689},
|
||||
{period: '2011 Q1', iphone: 4293, ipad: 3293, itouch: 2293},
|
||||
{period: '2011 Q2', iphone: 5881, ipad: 3881, itouch: 1881},
|
||||
{period: '2011 Q3', iphone: 5588, ipad: 3588, itouch: 1588},
|
||||
{period: '2011 Q4', iphone: 15073, ipad: 8967, itouch: 5175},
|
||||
{period: '2012 Q1', iphone: 10687, ipad: 4460, itouch: 2028},
|
||||
{period: '2012 Q2', iphone: 12432, ipad: 5713, itouch: 3791}
|
||||
],
|
||||
lineColors:['#869d9d','#EFC94C','#45B29D'],
|
||||
xkey: 'period',
|
||||
redraw: true,
|
||||
ykeys: ['iphone', 'ipad', 'itouch'],
|
||||
labels: ['All Visitors', 'Returning Visitors', 'Unique Visitors'],
|
||||
hideHover: 'auto'
|
||||
|
||||
});
|
||||
/*
|
||||
Morris.Donut({
|
||||
element: 'morris-donut',
|
||||
data: [
|
||||
{label: "Download Sales", value: 12},
|
||||
{label: "In-Store Sales", value: 30},
|
||||
{label: "Mail-Order Sales", value: 20}
|
||||
]
|
||||
});
|
||||
*/
|
||||
var seriesData = [ [], [], []];
|
||||
var random = new Rickshaw.Fixtures.RandomData(50);
|
||||
|
||||
for (var i = 0; i < 40; i++) {
|
||||
random.addData(seriesData);
|
||||
}
|
||||
|
||||
graph = new Rickshaw.Graph( {
|
||||
element: document.querySelector("#home-chart-3"),
|
||||
height: 150,
|
||||
renderer: 'line',
|
||||
interpolation: 'linear',
|
||||
series: [
|
||||
{
|
||||
data: seriesData[0],
|
||||
color: 'rgba(0,0,0,0.4)',
|
||||
name:'S&P'
|
||||
},{
|
||||
data: seriesData[1],
|
||||
color: 'rgba(0,0,0,0.3)',
|
||||
name:'Dow jones'
|
||||
},{
|
||||
data: seriesData[2],
|
||||
color: 'rgba(0,0,0,0.2)',
|
||||
name:'Nasdaq'
|
||||
}
|
||||
]
|
||||
} );
|
||||
var hoverDetail = new Rickshaw.Graph.HoverDetail({
|
||||
graph: graph
|
||||
});
|
||||
|
||||
graph.render();
|
||||
|
||||
setInterval( function() {
|
||||
random.removeData(seriesData);
|
||||
random.addData(seriesData);
|
||||
for (lastitem in seriesData[0]);
|
||||
var cur = parseInt($("#sp-status").text());
|
||||
|
||||
if(cur > seriesData[0][lastitem].y.toFixed(2)){
|
||||
$("#sp-status").addClass("text-danger").html("<i class='fa fa-caret-down'></i> "+seriesData[0][lastitem].y.toFixed(2));
|
||||
}else{
|
||||
$("#sp-status").removeClass("text-danger").html("<i class='fa fa-caret-up'></i> "+seriesData[0][lastitem].y.toFixed(2));
|
||||
}
|
||||
for (lastitem in seriesData[1]);
|
||||
var cur = parseInt($("#dow-status").text());
|
||||
|
||||
if(cur > seriesData[1][lastitem].y.toFixed(2)){
|
||||
$("#dow-status").addClass("text-danger").html("<i class='fa fa-caret-down'></i> "+seriesData[1][lastitem].y.toFixed(2));
|
||||
}else{
|
||||
$("#dow-status").removeClass("text-danger").html("<i class='fa fa-caret-up'></i> "+seriesData[1][lastitem].y.toFixed(2));
|
||||
}
|
||||
for (lastitem in seriesData[2]);
|
||||
var cur = parseInt($("#nasdaq-status").text());
|
||||
|
||||
if(cur > seriesData[2][lastitem].y.toFixed(2)){
|
||||
$("#nasdaq-status").addClass("text-danger").html("<i class='fa fa-caret-down'></i> "+seriesData[2][lastitem].y.toFixed(2));
|
||||
}else{
|
||||
$("#nasdaq-status").removeClass("text-danger").html("<i class='fa fa-caret-up'></i> "+seriesData[2][lastitem].y.toFixed(2));
|
||||
}
|
||||
graph.update();
|
||||
|
||||
},5000);
|
||||
|
||||
var seriesData2 = [ [], []];
|
||||
var random2 = new Rickshaw.Fixtures.RandomData(50);
|
||||
|
||||
for (var i = 0; i < 50; i++) {
|
||||
random2.addData(seriesData2);
|
||||
}
|
||||
graph2 = new Rickshaw.Graph( {
|
||||
element: document.querySelector("#home-chart-2"),
|
||||
height: 150,
|
||||
interpolation: 'linear',
|
||||
renderer: 'area',
|
||||
series: [
|
||||
{
|
||||
data: seriesData2[0],
|
||||
color: 'rgba(255,255,255,0.3)',
|
||||
name:'Web Server'
|
||||
},{
|
||||
data: seriesData2[1],
|
||||
color: 'rgba(255,255,255,0.1)',
|
||||
name:'Database Server'
|
||||
}
|
||||
]
|
||||
} );
|
||||
var hoverDetail = new Rickshaw.Graph.HoverDetail( {
|
||||
graph: graph2
|
||||
});
|
||||
|
||||
graph2.render();
|
||||
clearInterval(timer);
|
||||
timer = setInterval( function() {
|
||||
random2.removeData(seriesData2);
|
||||
random2.addData(seriesData2);
|
||||
for (lastitem in seriesData2[0]);
|
||||
$('.ws-load').data('easyPieChart').update(seriesData2[0][lastitem].y);
|
||||
//for (lastitem in seriesData2[1]);
|
||||
//$('.ds-load').data('easyPieChart').update(seriesData2[1][lastitem].y);
|
||||
graph2.update();
|
||||
|
||||
},2000);
|
||||
|
||||
$('.ws-load').easyPieChart({
|
||||
animate: 1000,
|
||||
trackColor: "rgba(0,0,0,0.1)",
|
||||
barColor: "#68C39F",
|
||||
scaleColor: false,
|
||||
size: 90,
|
||||
onStep: function(from, to, percent) {
|
||||
$(this.el).find('.percent').text(Math.round(percent));
|
||||
}
|
||||
});
|
||||
/*$('.ds-load').easyPieChart({
|
||||
animate: 1000,
|
||||
scaleColor: false,
|
||||
trackColor: "rgba(0,0,0,0.1)",
|
||||
barColor: "#68C39F",
|
||||
size: 50,
|
||||
onStep: function(from, to, percent) {
|
||||
$(this.el).find('.percent').text(Math.round(percent));
|
||||
}
|
||||
});*/
|
||||
}
|
||||
//http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20csv%20where%20url%3D%27http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes.csv%3Fs%3dDOW%2CNASDAQ%2CSP%26f%3Dsl1d1t1c1ohgv%26e%3D.csv%27%20and%20columns%3D%27symbol%2Cprice%2Cdate%2Ctime%2Cchange%2Ccol1%2Chigh%2Clow%2Ccol2%27&format=json&diagnostics=true&callback=
|
@ -0,0 +1,378 @@
|
||||
var timer;
|
||||
var graph;
|
||||
var graph2;
|
||||
|
||||
$(document).ready(function(){
|
||||
$(".dial").knob();
|
||||
var cityAreaData = [
|
||||
500.70,
|
||||
410.16,
|
||||
210.69,
|
||||
120.17,
|
||||
64.31,
|
||||
150.35,
|
||||
130.22,
|
||||
120.71,
|
||||
300.32
|
||||
]
|
||||
$('#vector-map').vectorMap({
|
||||
map: 'world_mill_en',
|
||||
normalizeFunction: 'polynomial',
|
||||
zoomOnScroll:true,
|
||||
focusOn:{
|
||||
x: 0,
|
||||
y: 0,
|
||||
scale: 0.9
|
||||
},
|
||||
zoomMin:0.9,
|
||||
hoverColor: false,
|
||||
regionStyle:{
|
||||
initial: {
|
||||
fill: '#bbbbbb',
|
||||
"fill-opacity": 1,
|
||||
stroke: '#a5ded9',
|
||||
"stroke-width": 0,
|
||||
"stroke-opacity": 0
|
||||
},
|
||||
hover: {
|
||||
"fill-opacity": 0.8
|
||||
}
|
||||
},
|
||||
markerStyle: {
|
||||
initial: {
|
||||
fill: '#F57A82',
|
||||
stroke: 'rgba(230,140,110,.8)',
|
||||
"fill-opacity": 1,
|
||||
"stroke-width": 9,
|
||||
"stroke-opacity": 0.5,
|
||||
r: 3
|
||||
},
|
||||
hover: {
|
||||
stroke: 'black',
|
||||
"stroke-width": 2
|
||||
},
|
||||
selected: {
|
||||
fill: 'blue'
|
||||
},
|
||||
selectedHover: {
|
||||
}
|
||||
},
|
||||
backgroundColor: '#ffffff',
|
||||
markers :[
|
||||
|
||||
{latLng: [35.85, -77.88], name: 'Rocky Mt,NC'},
|
||||
{latLng: [32.90, -97.03], name: 'Dallas/FW,TX'},
|
||||
{latLng: [41.00, 28.96], name: 'Istanbul, TR'},
|
||||
{latLng: [39.37, -75.07], name: 'Millville,NJ'}
|
||||
|
||||
],
|
||||
series: {
|
||||
markers: [{
|
||||
attribute: 'r',
|
||||
scale: [3, 7],
|
||||
values: cityAreaData
|
||||
}]
|
||||
}
|
||||
});
|
||||
if ("geolocation" in navigator) {
|
||||
$('.js-geolocation').show();
|
||||
} else {
|
||||
$('.js-geolocation').hide();
|
||||
}
|
||||
|
||||
/* Where in the world are you? */
|
||||
$(document).on('click', '.js-geolocation', function() {
|
||||
navigator.geolocation.getCurrentPosition(function(position) {
|
||||
loadWeather(position.coords.latitude+','+position.coords.longitude); //load weather using your lat/lng coordinates
|
||||
});
|
||||
});
|
||||
|
||||
resizefunc.push("reload_charts");
|
||||
//$(".content-page").resize(debounce(reload_charts,100));
|
||||
|
||||
load_charts();
|
||||
loadWeather('Seattle','');
|
||||
monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
||||
dayNames = ["S", "M", "T", "W", "T", "F", "S"];
|
||||
|
||||
var cTime = new Date(), month = cTime.getMonth()+1, year = cTime.getFullYear();
|
||||
|
||||
var events = [
|
||||
{
|
||||
"date": "4/"+month+"/"+year,
|
||||
"title": 'Meet a friend',
|
||||
"link": 'javascript:;',
|
||||
"color": 'rgba(255,255,255,0.2)',
|
||||
"content": 'Contents here'
|
||||
},
|
||||
{
|
||||
"date": "7/"+month+"/"+year,
|
||||
"title": 'Kick off meeting!',
|
||||
"link": 'javascript:;',
|
||||
"color": 'rgba(255,255,255,0.2)',
|
||||
"content": 'Have a kick off meeting with .inc company'
|
||||
},
|
||||
{
|
||||
"date": "19/"+month+"/"+year,
|
||||
"title": 'Link to Google',
|
||||
"link": 'http://www.google.com',
|
||||
"color": 'rgba(255,255,255,0.2)',
|
||||
}
|
||||
];
|
||||
|
||||
$('#calendar-box2').bic_calendar({
|
||||
events: events,
|
||||
dayNames: dayNames,
|
||||
monthNames: monthNames,
|
||||
showDays: true,
|
||||
displayMonthController: true,
|
||||
displayYearController: false,
|
||||
popoverOptions:{
|
||||
placement: 'top',
|
||||
trigger: 'hover',
|
||||
html: true
|
||||
},
|
||||
tooltipOptions:{
|
||||
placement: 'top',
|
||||
html: true
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function loadWeather(location, woeid) {
|
||||
$.simpleWeather({
|
||||
location: location,
|
||||
woeid: woeid,
|
||||
unit: 'c',
|
||||
success: function(weather) {
|
||||
html = '<h2><i class="wicon-'+weather.code+'"></i> '+weather.temp+'°'+weather.units.temp+' <span class="w-temp2">/ '+weather.tempAlt+'°F</span></h2>';
|
||||
html += '<span class="w-region">'+weather.city+', '+weather.region+'</li>';
|
||||
html += '<span class="w-currently">'+weather.currently+'</span>';
|
||||
html += '';
|
||||
|
||||
$("#weather").html(html);
|
||||
},
|
||||
error: function(error) {
|
||||
$("#weather").html('<p>'+error+'</p>');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function reload_charts(){
|
||||
graph.configure({
|
||||
width: $("#home-chart-3").width()
|
||||
});
|
||||
graph.render();
|
||||
|
||||
graph2.configure({
|
||||
width: $("#home-chart-2").width()
|
||||
});
|
||||
graph2.render();
|
||||
window.morris1.redraw();
|
||||
window.morris2.redraw();
|
||||
}
|
||||
|
||||
function load_charts(){
|
||||
//MORRIS
|
||||
|
||||
window.morris1 = Morris.Bar({
|
||||
element: 'morris-bar-home',
|
||||
data: [
|
||||
{ y: 'Indonesia', a: 952},
|
||||
{ y: 'India', a: 985},
|
||||
{ y: 'Malaysia', a: 955},
|
||||
{ y: 'China', a: 785 },
|
||||
{ y: 'Philipina', a: 700 },
|
||||
{ y: 'Autralia', a: 601 },
|
||||
{ y: 'United Kingdom', a: 421 },
|
||||
{ y: 'United States', a: 725 },
|
||||
{ y: 'Taiwan', a: 350 },
|
||||
{ y: 'New Zealand', a: 120 },
|
||||
{ y: 'Singapore', a: 124}
|
||||
],
|
||||
xkey: 'y',
|
||||
ykeys: ['a'],
|
||||
redraw: true,
|
||||
labels: ['Visitor'],
|
||||
resize: true,
|
||||
barColors: ['#45B29D'],
|
||||
gridTextColor: ['#777'],
|
||||
gridTextSize: 11,
|
||||
hideHover: 'auto',
|
||||
grid :false
|
||||
});
|
||||
|
||||
//MORRIS
|
||||
window.morris2 = Morris.Line({
|
||||
element: 'morris-home',
|
||||
padding: 20,
|
||||
behaveLikeLine: true,
|
||||
gridEnabled: false,
|
||||
gridLineColor: '#dddddd',
|
||||
axes: true,
|
||||
resize: true,
|
||||
smooth:false,
|
||||
pointSize: 3,
|
||||
lineWidth: 2,
|
||||
fillOpacity:0.85,
|
||||
data: [
|
||||
{period: '2009 Q1', iphone: 4666, ipad: 3666, itouch: 2666},
|
||||
{period: '2009 Q2', iphone: 4441, ipad: 3441, itouch: 2441},
|
||||
{period: '2009 Q3', iphone: 16501, ipad: 14501, itouch: 12501},
|
||||
{period: '2009 Q4', iphone: 7689, ipad: 6689, itouch: 5689},
|
||||
{period: '2010 Q1', iphone: 4666, ipad: 3666, itouch: 2666},
|
||||
{period: '2010 Q2', iphone: 4441, ipad: 3441, itouch: 2441},
|
||||
{period: '2010 Q3', iphone: 6501, ipad: 4501, itouch: 2501},
|
||||
{period: '2010 Q4', iphone: 7689, ipad: 6689, itouch: 5689},
|
||||
{period: '2011 Q1', iphone: 2293, ipad: 1293, itouch: 293},
|
||||
{period: '2011 Q2', iphone: 5881, ipad: 3881, itouch: 1881},
|
||||
{period: '2011 Q3', iphone: 5588, ipad: 3588, itouch: 1588},
|
||||
{period: '2011 Q4', iphone: 15073, ipad: 8967, itouch: 5175},
|
||||
{period: '2012 Q1', iphone: 10687, ipad: 4460, itouch: 2028},
|
||||
{period: '2012 Q2', iphone: 12432, ipad: 5713, itouch: 3791}
|
||||
],
|
||||
lineColors:['#abb7b7','#ABC8E2','#183152'],
|
||||
xkey: 'period',
|
||||
redraw: true,
|
||||
ykeys: ['iphone', 'ipad'],
|
||||
labels: ['All Visitors', 'Returning Visitors'],
|
||||
hideHover: 'auto'
|
||||
|
||||
});
|
||||
/*
|
||||
Morris.Donut({
|
||||
element: 'morris-donut',
|
||||
data: [
|
||||
{label: "Download Sales", value: 12},
|
||||
{label: "In-Store Sales", value: 30},
|
||||
{label: "Mail-Order Sales", value: 20}
|
||||
]
|
||||
});
|
||||
*/
|
||||
var seriesData = [ [], [], []];
|
||||
var random = new Rickshaw.Fixtures.RandomData(50);
|
||||
|
||||
for (var i = 0; i < 40; i++) {
|
||||
random.addData(seriesData);
|
||||
}
|
||||
|
||||
graph = new Rickshaw.Graph( {
|
||||
element: document.querySelector("#home-chart-3"),
|
||||
height: 150,
|
||||
renderer: 'line',
|
||||
interpolation: 'linear',
|
||||
series: [
|
||||
{
|
||||
data: seriesData[0],
|
||||
color: 'rgba(0,0,0,0.4)',
|
||||
name:'S&P'
|
||||
},{
|
||||
data: seriesData[1],
|
||||
color: 'rgba(0,0,0,0.3)',
|
||||
name:'Dow jones'
|
||||
},{
|
||||
data: seriesData[2],
|
||||
color: 'rgba(0,0,0,0.2)',
|
||||
name:'Nasdaq'
|
||||
}
|
||||
]
|
||||
} );
|
||||
var hoverDetail = new Rickshaw.Graph.HoverDetail({
|
||||
graph: graph
|
||||
});
|
||||
|
||||
graph.render();
|
||||
|
||||
setInterval( function() {
|
||||
random.removeData(seriesData);
|
||||
random.addData(seriesData);
|
||||
for (lastitem in seriesData[0]);
|
||||
var cur = parseInt($("#sp-status").text());
|
||||
|
||||
if(cur > seriesData[0][lastitem].y.toFixed(2)){
|
||||
$("#sp-status").addClass("text-danger").html("<i class='fa fa-caret-down'></i> "+seriesData[0][lastitem].y.toFixed(2));
|
||||
}else{
|
||||
$("#sp-status").removeClass("text-danger").html("<i class='fa fa-caret-up'></i> "+seriesData[0][lastitem].y.toFixed(2));
|
||||
}
|
||||
for (lastitem in seriesData[1]);
|
||||
var cur = parseInt($("#dow-status").text());
|
||||
|
||||
if(cur > seriesData[1][lastitem].y.toFixed(2)){
|
||||
$("#dow-status").addClass("text-danger").html("<i class='fa fa-caret-down'></i> "+seriesData[1][lastitem].y.toFixed(2));
|
||||
}else{
|
||||
$("#dow-status").removeClass("text-danger").html("<i class='fa fa-caret-up'></i> "+seriesData[1][lastitem].y.toFixed(2));
|
||||
}
|
||||
for (lastitem in seriesData[2]);
|
||||
var cur = parseInt($("#nasdaq-status").text());
|
||||
|
||||
if(cur > seriesData[2][lastitem].y.toFixed(2)){
|
||||
$("#nasdaq-status").addClass("text-danger").html("<i class='fa fa-caret-down'></i> "+seriesData[2][lastitem].y.toFixed(2));
|
||||
}else{
|
||||
$("#nasdaq-status").removeClass("text-danger").html("<i class='fa fa-caret-up'></i> "+seriesData[2][lastitem].y.toFixed(2));
|
||||
}
|
||||
graph.update();
|
||||
|
||||
},5000);
|
||||
|
||||
var seriesData2 = [ [], []];
|
||||
var random2 = new Rickshaw.Fixtures.RandomData(50);
|
||||
|
||||
for (var i = 0; i < 50; i++) {
|
||||
random2.addData(seriesData2);
|
||||
}
|
||||
graph2 = new Rickshaw.Graph( {
|
||||
element: document.querySelector("#home-chart-2"),
|
||||
height: 254,
|
||||
interpolation: 'linear',
|
||||
renderer: 'area',
|
||||
series: [
|
||||
{
|
||||
data: seriesData2[0],
|
||||
color: 'rgba(255,255,255,0.3)',
|
||||
name:'Web Server'
|
||||
},{
|
||||
data: seriesData2[1],
|
||||
color: 'rgba(255,255,255,0.1)',
|
||||
name:'Database Server'
|
||||
}
|
||||
]
|
||||
} );
|
||||
var hoverDetail = new Rickshaw.Graph.HoverDetail( {
|
||||
graph: graph2
|
||||
});
|
||||
|
||||
graph2.render();
|
||||
clearInterval(timer);
|
||||
timer = setInterval( function() {
|
||||
random2.removeData(seriesData2);
|
||||
random2.addData(seriesData2);
|
||||
for (lastitem in seriesData2[0]);
|
||||
$('.ws-load').data('easyPieChart').update(seriesData2[0][lastitem].y);
|
||||
//for (lastitem in seriesData2[1]);
|
||||
//$('.ds-load').data('easyPieChart').update(seriesData2[1][lastitem].y);
|
||||
graph2.update();
|
||||
|
||||
},2000);
|
||||
|
||||
$('.ws-load').easyPieChart({
|
||||
animate: 1000,
|
||||
trackColor: "rgba(0,0,0,0.1)",
|
||||
barColor: "#68C39F",
|
||||
scaleColor: false,
|
||||
size: 90,
|
||||
onStep: function(from, to, percent) {
|
||||
$(this.el).find('.percent').text(Math.round(percent));
|
||||
}
|
||||
});
|
||||
/*$('.ds-load').easyPieChart({
|
||||
animate: 1000,
|
||||
scaleColor: false,
|
||||
trackColor: "rgba(0,0,0,0.1)",
|
||||
barColor: "#68C39F",
|
||||
size: 50,
|
||||
onStep: function(from, to, percent) {
|
||||
$(this.el).find('.percent').text(Math.round(percent));
|
||||
}
|
||||
});*/
|
||||
}
|
||||
//http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20csv%20where%20url%3D%27http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes.csv%3Fs%3dDOW%2CNASDAQ%2CSP%26f%3Dsl1d1t1c1ohgv%26e%3D.csv%27%20and%20columns%3D%27symbol%2Cprice%2Cdate%2Ctime%2Cchange%2Ccol1%2Chigh%2Clow%2Ccol2%27&format=json&diagnostics=true&callback=
|
@ -0,0 +1,8 @@
|
||||
$(function(){
|
||||
resizefunc.push("arrangesizeLockscreen");
|
||||
$(".lock-page .login-wrap").addClass("animated flipInX");
|
||||
});
|
||||
|
||||
function arrangesizeLockscreen(){
|
||||
$(".lock-page").height($(window).height());
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
$(function(){
|
||||
Morris.Line({
|
||||
element: 'line-example',
|
||||
resize: true,
|
||||
data: [
|
||||
{ y: '2006', a: 100, b: 90 },
|
||||
{ y: '2007', a: 75, b: 65 },
|
||||
{ y: '2008', a: 50, b: 40 },
|
||||
{ y: '2009', a: 75, b: 65 },
|
||||
{ y: '2010', a: 50, b: 40 },
|
||||
{ y: '2011', a: 75, b: 65 },
|
||||
{ y: '2012', a: 100, b: 90 }
|
||||
],
|
||||
xkey: 'y',
|
||||
ykeys: ['a', 'b'],
|
||||
labels: ['Series A', 'Series B']
|
||||
});
|
||||
|
||||
Morris.Area({
|
||||
element: 'area-example',
|
||||
resize: true,
|
||||
data: [
|
||||
{ y: '2006', a: 100, b: 90 },
|
||||
{ y: '2007', a: 75, b: 65 },
|
||||
{ y: '2008', a: 50, b: 40 },
|
||||
{ y: '2009', a: 75, b: 65 },
|
||||
{ y: '2010', a: 50, b: 40 },
|
||||
{ y: '2011', a: 75, b: 65 },
|
||||
{ y: '2012', a: 100, b: 90 }
|
||||
],
|
||||
xkey: 'y',
|
||||
ykeys: ['a', 'b'],
|
||||
labels: ['Series A', 'Series B']
|
||||
});
|
||||
|
||||
Morris.Bar({
|
||||
element: 'bar-example',
|
||||
resize: true,
|
||||
data: [
|
||||
{ y: '2007', a: 75, b: 65 },
|
||||
{ y: '2008', a: 50, b: 40 },
|
||||
{ y: '2009', a: 75, b: 65 },
|
||||
{ y: '2010', a: 50, b: 40 },
|
||||
{ y: '2011', a: 75, b: 65 }
|
||||
],
|
||||
xkey: 'y',
|
||||
ykeys: ['a', 'b'],
|
||||
labels: ['Series A', 'Series B']
|
||||
});
|
||||
|
||||
Morris.Donut({
|
||||
element: 'donut-example',
|
||||
resize: true,
|
||||
data: [
|
||||
{label: "Download Sales", value: 12},
|
||||
{label: "In-Store Sales", value: 30},
|
||||
{label: "Mail-Order Sales", value: 20}
|
||||
]
|
||||
});
|
||||
|
||||
});
|
@ -0,0 +1,22 @@
|
||||
var output;
|
||||
$(document).ready(function(){
|
||||
var updateOutput = function(e)
|
||||
{
|
||||
var list = e.length ? e : $(e.target),
|
||||
output = list.data('output');
|
||||
if (window.JSON) {
|
||||
output.val(window.JSON.stringify(list.nestable('serialize')));//, null, 2));
|
||||
} else {
|
||||
output.val('JSON browser support required for this demo.');
|
||||
}
|
||||
};
|
||||
|
||||
// activate Nestable for list 1
|
||||
$('#nestable').nestable({
|
||||
group: 1
|
||||
}).on('change', updateOutput);
|
||||
|
||||
$('#nestable2').nestable().on('change', updateOutput);
|
||||
updateOutput($('#nestable').data('output', $('#nestable-output')));
|
||||
updateOutput($('#nestable2').data('output', $('#nestable2-output')));
|
||||
})
|
@ -0,0 +1,11 @@
|
||||
$(function(){
|
||||
$('.summernote-small').summernote({
|
||||
toolbar: [
|
||||
['style', ['bold', 'italic', 'underline', 'clear']],
|
||||
['fontsize', ['fontsize']],
|
||||
['color', ['color']],
|
||||
['para', ['ul', 'ol', 'paragraph']]
|
||||
],
|
||||
height: 200
|
||||
});
|
||||
});
|
@ -0,0 +1,101 @@
|
||||
function notify(style,position) {
|
||||
if(style == "error"){
|
||||
icon = "fa fa-exclamation";
|
||||
}else if(style == "warning"){
|
||||
icon = "fa fa-warning";
|
||||
}else if(style == "success"){
|
||||
icon = "fa fa-check";
|
||||
}else if(style == "info"){
|
||||
icon = "fa fa-question";
|
||||
}else{
|
||||
icon = "fa fa-circle-o";
|
||||
}
|
||||
$.notify({
|
||||
title: 'Sample Notification',
|
||||
text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae orci ut dolor scelerisque aliquam.',
|
||||
image: "<i class='"+icon+"'></i>"
|
||||
}, {
|
||||
style: 'metro',
|
||||
className: style,
|
||||
globalPosition:position,
|
||||
showAnimation: "show",
|
||||
showDuration: 0,
|
||||
hideDuration: 0,
|
||||
autoHide: false,
|
||||
clickToHide: true
|
||||
});
|
||||
}
|
||||
|
||||
function notify2(style,position) {
|
||||
$(".autohidebut").notify({
|
||||
text: '<i class="fa fa-comment-o"></i> Hi buddy. I\'m here!'
|
||||
}, {
|
||||
style: 'metro',
|
||||
className: 'nonspaced',
|
||||
elementPosition:position,
|
||||
showAnimation: "show",
|
||||
showDuration: 0,
|
||||
hideDuration: 0,
|
||||
autoHide: false,
|
||||
clickToHide: true
|
||||
});
|
||||
}
|
||||
|
||||
function autohidenotify(style,position) {
|
||||
if(style == "error"){
|
||||
icon = "fa fa-exclamation";
|
||||
}else if(style == "warning"){
|
||||
icon = "fa fa-warning";
|
||||
}else if(style == "success"){
|
||||
icon = "fa fa-check";
|
||||
}else if(style == "info"){
|
||||
icon = "fa fa-question";
|
||||
}else{
|
||||
icon = "fa fa-circle-o";
|
||||
}
|
||||
$.notify({
|
||||
title: 'I will be closed in 3 seconds...',
|
||||
text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae orci ut dolor scelerisque aliquam.',
|
||||
image: "<i class='fa fa-warning'></i>"
|
||||
}, {
|
||||
style: 'metro',
|
||||
className: style,
|
||||
globalPosition:position,
|
||||
showAnimation: "show",
|
||||
showDuration: 0,
|
||||
hideDuration: 0,
|
||||
autoHideDelay: 3000,
|
||||
autoHide: true,
|
||||
clickToHide: true
|
||||
});
|
||||
}
|
||||
|
||||
function nconfirm() {
|
||||
$.notify({
|
||||
title: 'Are you nuts?!',
|
||||
text: 'Are you sure you want to do nothing?<div class="clearfix"></div><br><a class="btn btn-sm btn-default yes">Yes</a> <a class="btn btn-sm btn-danger no">No</a>',
|
||||
image: "<i class='fa fa-warning'></i>"
|
||||
}, {
|
||||
style: 'metro',
|
||||
className: "cool",
|
||||
showAnimation: "show",
|
||||
showDuration: 0,
|
||||
hideDuration: 0,
|
||||
autoHide: false,
|
||||
clickToHide: false
|
||||
});
|
||||
}
|
||||
|
||||
$(function(){
|
||||
//listen for click events from this style
|
||||
$(document).on('click', '.notifyjs-metro-base .no', function() {
|
||||
//programmatically trigger propogating hide event
|
||||
$(this).trigger('notify-hide');
|
||||
});
|
||||
$(document).on('click', '.notifyjs-metro-base .yes', function() {
|
||||
//show button text
|
||||
alert($(this).text() + " clicked!");
|
||||
//hide notification
|
||||
$(this).trigger('notify-hide');
|
||||
});
|
||||
})
|
@ -0,0 +1,25 @@
|
||||
var initCharts = function() {
|
||||
var charts = $('.percentage');
|
||||
charts.easyPieChart({
|
||||
animate: 1000,
|
||||
lineWidth: 5,
|
||||
barColor: "#eb5055",
|
||||
lineCap: "butt",
|
||||
size: "150",
|
||||
scaleColor: "transparent",
|
||||
onStep: function(from, to, percent) {
|
||||
$(this.el).find('.cpercent').text(Math.round(percent));
|
||||
}
|
||||
});
|
||||
$('.updatePieCharts').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
charts.each(function() {
|
||||
$(this).data('easyPieChart').update(Math.floor(100*Math.random()));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$(function(){
|
||||
$(".knob").knob();
|
||||
initCharts();
|
||||
})
|
@ -0,0 +1,131 @@
|
||||
$(function(){
|
||||
// Initiate graphs right after interface loaded
|
||||
rungraphs();
|
||||
|
||||
});
|
||||
|
||||
function rungraphs(){
|
||||
var graph = new Rickshaw.Graph( {
|
||||
element: document.querySelector("#chart-2"),
|
||||
width: $("#chart-2").parent().width(),
|
||||
height: 235,
|
||||
renderer: 'area',
|
||||
stroke: true,
|
||||
series: [ {
|
||||
data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 }, { x: 3, y: 20 }, { x: 4, y: 16 } ],
|
||||
color: 'rgba(70,130,180,0.5)',
|
||||
stroke: 'rgba(0,0,0,0.15)'
|
||||
}, {
|
||||
data: [ { x: 0, y: 22 }, { x: 1, y: 25 }, { x: 2, y: 38 }, { x: 3, y: 44 }, { x: 4, y: 46 } ],
|
||||
color: 'rgba(202,226,247,0.5)',
|
||||
stroke: 'rgba(0,0,0,0.15)'
|
||||
} ]
|
||||
} );
|
||||
|
||||
graph.renderer.unstack = true;
|
||||
graph.render();
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: document.querySelector("#chart-1"),
|
||||
width: $("#chart-1").parent().width(),
|
||||
height: 235,
|
||||
renderer: 'line',
|
||||
series: [{
|
||||
data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 }, { x: 3, y: 30 }, { x: 4, y: 32 } ],
|
||||
color: '#4682b4'
|
||||
}, {
|
||||
data: [ { x: 0, y: 20 }, { x: 1, y: 24 }, { x: 2, y: 19 }, { x: 3, y: 15 }, { x: 4, y: 16 } ],
|
||||
color: '#9cc1e0'
|
||||
}]
|
||||
});
|
||||
graph.render();
|
||||
|
||||
var graph = new Rickshaw.Graph( {
|
||||
element: document.querySelector("#chart-3"),
|
||||
height: 235,
|
||||
renderer: 'bar',
|
||||
stack: false,
|
||||
series: [
|
||||
{
|
||||
data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 }, { x: 3, y: 30 }, { x: 4, y: 32 } ],
|
||||
color: '#4682b4'
|
||||
}, {
|
||||
data: [ { x: 0, y: 20 }, { x: 1, y: 24 }, { x: 2, y: 19 }, { x: 3, y: 15 }, { x: 4, y: 16 } ],
|
||||
color: '#9cc1e0'
|
||||
|
||||
} ]
|
||||
} );
|
||||
|
||||
graph.render();
|
||||
|
||||
var graph = new Rickshaw.Graph( {
|
||||
element: document.querySelector("#chart-4"),
|
||||
renderer: 'bar',
|
||||
height: 235,
|
||||
stack: true,
|
||||
series: [
|
||||
{
|
||||
data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 }, { x: 3, y: 30 }, { x: 4, y: 32 } ],
|
||||
color: '#4682b4'
|
||||
}, {
|
||||
data: [ { x: 0, y: 20 }, { x: 1, y: 24 }, { x: 2, y: 19 }, { x: 3, y: 15 }, { x: 4, y: 16 } ],
|
||||
color: '#9cc1e0'
|
||||
|
||||
} ]
|
||||
} );
|
||||
|
||||
graph.render();
|
||||
// set up our data series with 50 random data points
|
||||
|
||||
var seriesData = [ [], [], [] ];
|
||||
var random = new Rickshaw.Fixtures.RandomData(150);
|
||||
|
||||
for (var i = 0; i < 150; i++) {
|
||||
random.addData(seriesData);
|
||||
}
|
||||
|
||||
// instantiate our graph!
|
||||
|
||||
var graph = new Rickshaw.Graph( {
|
||||
element: document.getElementById("chart-5"),
|
||||
height: 500,
|
||||
renderer: 'line',
|
||||
series: [
|
||||
{
|
||||
color: "#6FB07F",
|
||||
data: seriesData[0],
|
||||
name: 'New York'
|
||||
}, {
|
||||
color: "#FCB03C",
|
||||
data: seriesData[1],
|
||||
name: 'London'
|
||||
}, {
|
||||
color: "#FC5B3F",
|
||||
data: seriesData[2],
|
||||
name: 'Tokyo'
|
||||
}
|
||||
]
|
||||
} );
|
||||
|
||||
graph.render();
|
||||
|
||||
var hoverDetail = new Rickshaw.Graph.HoverDetail( {
|
||||
graph: graph
|
||||
} );
|
||||
|
||||
var legend = new Rickshaw.Graph.Legend( {
|
||||
graph: graph,
|
||||
element: document.getElementById('legend')
|
||||
|
||||
} );
|
||||
|
||||
var shelving = new Rickshaw.Graph.Behavior.Series.Toggle( {
|
||||
graph: graph,
|
||||
legend: legend
|
||||
} );
|
||||
|
||||
var axes = new Rickshaw.Graph.Axis.Time( {
|
||||
graph: graph
|
||||
} );
|
||||
axes.render();
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
$(function(){
|
||||
// Bar + line composite charts
|
||||
$('#compositebar').sparkline('html', { type: 'bar', barColor: '#aaf' });
|
||||
$('#compositebar').sparkline([4,1,5,7,9,9,8,7,6,6,4,7,8,4,3,2,2,5,6,7],
|
||||
{ composite: true, fillColor: false, lineColor: 'red' });
|
||||
|
||||
// Larger line charts for the docs
|
||||
$('.largeline').sparkline('html',
|
||||
{ type: 'line', height: '2.5em', width: '4em' });
|
||||
|
||||
// Customized line chart
|
||||
$('#linecustom').sparkline('html',
|
||||
{height: '1.5em', width: '8em', lineColor: '#f00', fillColor: '#ffa',
|
||||
minSpotColor: false, maxSpotColor: false, spotColor: '#77f', spotRadius: 3});
|
||||
|
||||
// Bar charts using inline values
|
||||
$('.sparkbar').sparkline('html', {type: 'bar'});
|
||||
|
||||
$('.barformat').sparkline([1, 3, 5, 3, 8], {
|
||||
type: 'bar',
|
||||
tooltipFormat: '{{value:levels}} - {{value}}',
|
||||
tooltipValueLookups: {
|
||||
levels: $.range_map({ ':2': 'Low', '3:6': 'Medium', '7:': 'High' })
|
||||
}
|
||||
});
|
||||
|
||||
// Tri-state charts using inline values
|
||||
$('.sparktristate').sparkline('html', {type: 'tristate'});
|
||||
$('.sparktristatecols').sparkline('html',
|
||||
{type: 'tristate', colorMap: {'-2': '#fa7', '2': '#44f'} });
|
||||
|
||||
// Composite line charts, the second using values supplied via javascript
|
||||
$('#compositeline').sparkline('html', { fillColor: false, changeRangeMin: 0, chartRangeMax: 10 });
|
||||
$('#compositeline').sparkline([4,1,5,7,9,9,8,7,6,6,4,7,8,4,3,2,2,5,6,7],
|
||||
{ composite: true, fillColor: false, lineColor: 'red', changeRangeMin: 0, chartRangeMax: 10 });
|
||||
|
||||
// Line charts with normal range marker
|
||||
$('#normalline').sparkline('html',
|
||||
{ fillColor: false, normalRangeMin: -1, normalRangeMax: 8 });
|
||||
$('#normalExample').sparkline('html',
|
||||
{ fillColor: false, normalRangeMin: 80, normalRangeMax: 95, normalRangeColor: '#4f4' });
|
||||
|
||||
// Discrete charts
|
||||
$('.discrete1').sparkline('html',
|
||||
{ type: 'discrete', lineColor: 'blue', xwidth: 18 });
|
||||
$('#discrete2').sparkline('html',
|
||||
{ type: 'discrete', lineColor: 'blue', thresholdColor: 'red', thresholdValue: 4 });
|
||||
|
||||
// Bullet charts
|
||||
$('.sparkbullet').sparkline('html', { type: 'bullet' });
|
||||
|
||||
// Pie charts
|
||||
$('.sparkpie').sparkline('html', { type: 'pie', height: '1.0em' });
|
||||
|
||||
// Box plots
|
||||
$('.sparkboxplot').sparkline('html', { type: 'box'});
|
||||
$('.sparkboxplotraw').sparkline([ 1, 3, 5, 8, 10, 15, 18 ],
|
||||
{type:'box', raw: true, showOutliers:true, target: 6});
|
||||
|
||||
// Box plot with specific field order
|
||||
$('.boxfieldorder').sparkline('html', {
|
||||
type: 'box',
|
||||
tooltipFormatFieldlist: ['med', 'lq', 'uq'],
|
||||
tooltipFormatFieldlistKey: 'field'
|
||||
});
|
||||
|
||||
// click event demo sparkline
|
||||
$('.clickdemo').sparkline();
|
||||
$('.clickdemo').bind('sparklineClick', function(ev) {
|
||||
var sparkline = ev.sparklines[0],
|
||||
region = sparkline.getCurrentRegionFields();
|
||||
value = region.y;
|
||||
alert("Clicked on x="+region.x+" y="+region.y);
|
||||
});
|
||||
|
||||
});
|
@ -0,0 +1,3 @@
|
||||
$(document).ready(function(){
|
||||
|
||||
});
|
@ -0,0 +1,32 @@
|
||||
$(function(){
|
||||
$('#vmap-1').vectorMap({map: 'world_mill_en',backgroundColor: 'transparent',
|
||||
regionStyle: {
|
||||
initial: {
|
||||
fill: '#8d8d8d'
|
||||
}
|
||||
}});
|
||||
$('#vmap-3').vectorMap({map: 'europe_mill_en',backgroundColor: 'transparent',
|
||||
regionStyle: {
|
||||
initial: {
|
||||
fill: '#8d8d8d'
|
||||
}
|
||||
}});
|
||||
$('#vmap-4').vectorMap({map: 'us_aea_en',backgroundColor: 'transparent',
|
||||
regionStyle: {
|
||||
initial: {
|
||||
fill: '#8d8d8d'
|
||||
}
|
||||
}});
|
||||
$('#vmap-5').vectorMap({map: 'uk_mill_en',backgroundColor: 'transparent',
|
||||
regionStyle: {
|
||||
initial: {
|
||||
fill: '#8d8d8d'
|
||||
}
|
||||
}});
|
||||
$('#vmap-6').vectorMap({map: 'us-il-chicago_mill_en',backgroundColor: 'transparent',
|
||||
regionStyle: {
|
||||
initial: {
|
||||
fill: '#8d8d8d'
|
||||
}
|
||||
}});
|
||||
});
|
@ -0,0 +1,86 @@
|
||||
.bic_calendar{
|
||||
}
|
||||
.bic_calendar a{
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
.bic_calendar .table tbody > tr > td{
|
||||
text-align: center;
|
||||
padding: 0px;
|
||||
}
|
||||
.bic_calendar td a{
|
||||
|
||||
}
|
||||
.bic_calendar .header{
|
||||
padding: 10px 0 10px 0;
|
||||
}
|
||||
.bic_calendar .button-month-previous{
|
||||
padding: 5px;
|
||||
float: left;
|
||||
}
|
||||
.bic_calendar .button-month-next{
|
||||
padding: 5px;
|
||||
float: right;
|
||||
}
|
||||
.bic_calendar .button-year-previous{
|
||||
padding: 5px;
|
||||
float: left;
|
||||
}
|
||||
.bic_calendar .button-year-next{
|
||||
padding: 5px;
|
||||
float: right;
|
||||
}
|
||||
.bic_calendar .monthAndYear{
|
||||
text-align: center;
|
||||
font-weight: 600;
|
||||
}
|
||||
.bic_calendar .days-month{
|
||||
font-weight: 600;
|
||||
}
|
||||
.bic_calendar .event{
|
||||
color: white;
|
||||
background: #3B5A97;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.bic_calendar .event:hover > a{
|
||||
background: #3B5A97;
|
||||
text-shadow: 0 0 4px #fff;
|
||||
}
|
||||
.bic_calendar .event a{
|
||||
color: white;
|
||||
}
|
||||
.bic_calendar .day:hover{
|
||||
background: rgba(0,0,0,0.04)
|
||||
}
|
||||
.bic_calendar .table{
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
.bic_calendar .days-month td{
|
||||
background: #f0f0f0 ;
|
||||
}
|
||||
.bic_calendar .selection{
|
||||
background: rgba(141,200,230,0.5);
|
||||
}
|
||||
.bic_calendar .first-selection{
|
||||
border-radius: 6px 0 0 6px;
|
||||
border-right: 0;
|
||||
}
|
||||
.bic_calendar .last-selection{
|
||||
border-radius: 0 6px 6px 0;
|
||||
border-left: 0;
|
||||
}
|
||||
.bic_calendar .middle-selection{
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.bic_calendar .popover{
|
||||
color: #000;
|
||||
text-shadow: none;
|
||||
}
|
||||
.bic_calendar .popover-content{
|
||||
font-weight: 300;
|
||||
}
|
@ -0,0 +1,182 @@
|
||||
/*!
|
||||
* Datepicker for Bootstrap
|
||||
*
|
||||
* Copyright 2012 Stefan Petre
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*/
|
||||
.datepicker {
|
||||
top: 0;
|
||||
left: 0;
|
||||
padding: 4px;
|
||||
margin-top: 1px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
/*.dow {
|
||||
border-top: 1px solid #ddd !important;
|
||||
}*/
|
||||
|
||||
}
|
||||
.datepicker:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
.datepicker:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #ffffff;
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
.datepicker > div {
|
||||
display: none;
|
||||
}
|
||||
.datepicker table {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
.datepicker td,
|
||||
.datepicker th {
|
||||
text-align: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.datepicker td.day:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker td.day.disabled {
|
||||
color: #eeeeee;
|
||||
}
|
||||
.datepicker td.old,
|
||||
.datepicker td.new {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker td.active,
|
||||
.datepicker td.active:hover {
|
||||
color: #ffffff;
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #0044cc;
|
||||
/* Darken IE7 buttons by default so they stand out more given they won't have borders */
|
||||
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker td.active:hover,
|
||||
.datepicker td.active:hover:hover,
|
||||
.datepicker td.active:focus,
|
||||
.datepicker td.active:hover:focus,
|
||||
.datepicker td.active:active,
|
||||
.datepicker td.active:hover:active,
|
||||
.datepicker td.active.active,
|
||||
.datepicker td.active:hover.active,
|
||||
.datepicker td.active.disabled,
|
||||
.datepicker td.active:hover.disabled,
|
||||
.datepicker td.active[disabled],
|
||||
.datepicker td.active:hover[disabled] {
|
||||
color: #ffffff;
|
||||
background-color: #0044cc;
|
||||
*background-color: #003bb3;
|
||||
}
|
||||
.datepicker td.active:active,
|
||||
.datepicker td.active:hover:active,
|
||||
.datepicker td.active.active,
|
||||
.datepicker td.active:hover.active {
|
||||
background-color: #003399 \9;
|
||||
}
|
||||
.datepicker td span {
|
||||
display: block;
|
||||
width: 47px;
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
float: left;
|
||||
margin: 2px;
|
||||
cursor: pointer;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.datepicker td span:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.datepicker td span.active {
|
||||
color: #ffffff;
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #0044cc;
|
||||
/* Darken IE7 buttons by default so they stand out more given they won't have borders */
|
||||
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker td span.active:hover,
|
||||
.datepicker td span.active:focus,
|
||||
.datepicker td span.active:active,
|
||||
.datepicker td span.active.active,
|
||||
.datepicker td span.active.disabled,
|
||||
.datepicker td span.active[disabled] {
|
||||
color: #ffffff;
|
||||
background-color: #0044cc;
|
||||
*background-color: #003bb3;
|
||||
}
|
||||
.datepicker td span.active:active,
|
||||
.datepicker td span.active.active {
|
||||
background-color: #003399 \9;
|
||||
}
|
||||
.datepicker td span.old {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker th.switch {
|
||||
width: 145px;
|
||||
}
|
||||
.datepicker th.next,
|
||||
.datepicker th.prev {
|
||||
font-size: 21px;
|
||||
}
|
||||
.datepicker thead tr:first-child th {
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker thead tr:first-child th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.input-append.date .add-on i,
|
||||
.input-prepend.date .add-on i {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
@ -0,0 +1,474 @@
|
||||
/* =========================================================
|
||||
* bootstrap-datepicker.js
|
||||
* http://www.eyecon.ro/bootstrap-datepicker
|
||||
* =========================================================
|
||||
* 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( $ ) {
|
||||
|
||||
// Picker object
|
||||
|
||||
var Datepicker = function(element, options){
|
||||
this.element = $(element);
|
||||
this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy');
|
||||
this.picker = $(DPGlobal.template)
|
||||
.appendTo('body')
|
||||
.on({
|
||||
click: $.proxy(this.click, this)//,
|
||||
//mousedown: $.proxy(this.mousedown, this)
|
||||
});
|
||||
this.isInput = this.element.is('input');
|
||||
this.component = this.element.is('.date') ? this.element.find('.add-on') : false;
|
||||
|
||||
if (this.isInput) {
|
||||
this.element.on({
|
||||
focus: $.proxy(this.show, this),
|
||||
//blur: $.proxy(this.hide, this),
|
||||
keyup: $.proxy(this.update, this)
|
||||
});
|
||||
} else {
|
||||
if (this.component){
|
||||
this.component.on('click', $.proxy(this.show, this));
|
||||
} else {
|
||||
this.element.on('click', $.proxy(this.show, this));
|
||||
}
|
||||
}
|
||||
|
||||
this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0;
|
||||
if (typeof this.minViewMode === 'string') {
|
||||
switch (this.minViewMode) {
|
||||
case 'months':
|
||||
this.minViewMode = 1;
|
||||
break;
|
||||
case 'years':
|
||||
this.minViewMode = 2;
|
||||
break;
|
||||
default:
|
||||
this.minViewMode = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.viewMode = options.viewMode||this.element.data('date-viewmode')||0;
|
||||
if (typeof this.viewMode === 'string') {
|
||||
switch (this.viewMode) {
|
||||
case 'months':
|
||||
this.viewMode = 1;
|
||||
break;
|
||||
case 'years':
|
||||
this.viewMode = 2;
|
||||
break;
|
||||
default:
|
||||
this.viewMode = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.startViewMode = this.viewMode;
|
||||
this.weekStart = options.weekStart||this.element.data('date-weekstart')||0;
|
||||
this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1;
|
||||
this.onRender = options.onRender;
|
||||
this.fillDow();
|
||||
this.fillMonths();
|
||||
this.update();
|
||||
this.showMode();
|
||||
};
|
||||
|
||||
Datepicker.prototype = {
|
||||
constructor: Datepicker,
|
||||
|
||||
show: function(e) {
|
||||
this.picker.show();
|
||||
this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
|
||||
this.place();
|
||||
$(window).on('resize', $.proxy(this.place, this));
|
||||
if (e ) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
}
|
||||
if (!this.isInput) {
|
||||
}
|
||||
var that = this;
|
||||
$(document).on('mousedown', function(ev){
|
||||
if ($(ev.target).closest('.datepicker').length == 0) {
|
||||
that.hide();
|
||||
}
|
||||
});
|
||||
this.element.trigger({
|
||||
type: 'show',
|
||||
date: this.date
|
||||
});
|
||||
},
|
||||
|
||||
hide: function(){
|
||||
this.picker.hide();
|
||||
$(window).off('resize', this.place);
|
||||
this.viewMode = this.startViewMode;
|
||||
this.showMode();
|
||||
if (!this.isInput) {
|
||||
$(document).off('mousedown', this.hide);
|
||||
}
|
||||
//this.set();
|
||||
this.element.trigger({
|
||||
type: 'hide',
|
||||
date: this.date
|
||||
});
|
||||
},
|
||||
|
||||
set: function() {
|
||||
var formated = DPGlobal.formatDate(this.date, this.format);
|
||||
if (!this.isInput) {
|
||||
if (this.component){
|
||||
this.element.find('input').prop('value', formated);
|
||||
}
|
||||
this.element.data('date', formated);
|
||||
} else {
|
||||
this.element.prop('value', formated);
|
||||
}
|
||||
},
|
||||
|
||||
setValue: function(newDate) {
|
||||
if (typeof newDate === 'string') {
|
||||
this.date = DPGlobal.parseDate(newDate, this.format);
|
||||
} else {
|
||||
this.date = new Date(newDate);
|
||||
}
|
||||
this.set();
|
||||
this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
|
||||
this.fill();
|
||||
},
|
||||
|
||||
place: function(){
|
||||
var offset = this.component ? this.component.offset() : this.element.offset();
|
||||
this.picker.css({
|
||||
top: offset.top + this.height,
|
||||
left: offset.left
|
||||
});
|
||||
},
|
||||
|
||||
update: function(newDate){
|
||||
this.date = DPGlobal.parseDate(
|
||||
typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')),
|
||||
this.format
|
||||
);
|
||||
this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
|
||||
this.fill();
|
||||
},
|
||||
|
||||
fillDow: function(){
|
||||
var dowCnt = this.weekStart;
|
||||
var html = '<tr>';
|
||||
while (dowCnt < this.weekStart + 7) {
|
||||
html += '<th class="dow">'+DPGlobal.dates.daysMin[(dowCnt++)%7]+'</th>';
|
||||
}
|
||||
html += '</tr>';
|
||||
this.picker.find('.datepicker-days thead').append(html);
|
||||
},
|
||||
|
||||
fillMonths: function(){
|
||||
var html = '';
|
||||
var i = 0
|
||||
while (i < 12) {
|
||||
html += '<span class="month">'+DPGlobal.dates.monthsShort[i++]+'</span>';
|
||||
}
|
||||
this.picker.find('.datepicker-months td').append(html);
|
||||
},
|
||||
|
||||
fill: function() {
|
||||
var d = new Date(this.viewDate),
|
||||
year = d.getFullYear(),
|
||||
month = d.getMonth(),
|
||||
currentDate = this.date.valueOf();
|
||||
this.picker.find('.datepicker-days th:eq(1)')
|
||||
.text(DPGlobal.dates.months[month]+' '+year);
|
||||
var prevMonth = new Date(year, month-1, 28,0,0,0,0),
|
||||
day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth());
|
||||
prevMonth.setDate(day);
|
||||
prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7);
|
||||
var nextMonth = new Date(prevMonth);
|
||||
nextMonth.setDate(nextMonth.getDate() + 42);
|
||||
nextMonth = nextMonth.valueOf();
|
||||
var html = [];
|
||||
var clsName,
|
||||
prevY,
|
||||
prevM;
|
||||
while(prevMonth.valueOf() < nextMonth) {
|
||||
if (prevMonth.getDay() === this.weekStart) {
|
||||
html.push('<tr>');
|
||||
}
|
||||
clsName = this.onRender(prevMonth);
|
||||
prevY = prevMonth.getFullYear();
|
||||
prevM = prevMonth.getMonth();
|
||||
if ((prevM < month && prevY === year) || prevY < year) {
|
||||
clsName += ' old';
|
||||
} else if ((prevM > month && prevY === year) || prevY > year) {
|
||||
clsName += ' new';
|
||||
}
|
||||
if (prevMonth.valueOf() === currentDate) {
|
||||
clsName += ' active';
|
||||
}
|
||||
html.push('<td class="day '+clsName+'">'+prevMonth.getDate() + '</td>');
|
||||
if (prevMonth.getDay() === this.weekEnd) {
|
||||
html.push('</tr>');
|
||||
}
|
||||
prevMonth.setDate(prevMonth.getDate()+1);
|
||||
}
|
||||
this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
|
||||
var currentYear = this.date.getFullYear();
|
||||
|
||||
var months = this.picker.find('.datepicker-months')
|
||||
.find('th:eq(1)')
|
||||
.text(year)
|
||||
.end()
|
||||
.find('span').removeClass('active');
|
||||
if (currentYear === year) {
|
||||
months.eq(this.date.getMonth()).addClass('active');
|
||||
}
|
||||
|
||||
html = '';
|
||||
year = parseInt(year/10, 10) * 10;
|
||||
var yearCont = this.picker.find('.datepicker-years')
|
||||
.find('th:eq(1)')
|
||||
.text(year + '-' + (year + 9))
|
||||
.end()
|
||||
.find('td');
|
||||
year -= 1;
|
||||
for (var i = -1; i < 11; i++) {
|
||||
html += '<span class="year'+(i === -1 || i === 10 ? ' old' : '')+(currentYear === year ? ' active' : '')+'">'+year+'</span>';
|
||||
year += 1;
|
||||
}
|
||||
yearCont.html(html);
|
||||
},
|
||||
|
||||
click: function(e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
var target = $(e.target).closest('span, td, th');
|
||||
if (target.length === 1) {
|
||||
switch(target[0].nodeName.toLowerCase()) {
|
||||
case 'th':
|
||||
switch(target[0].className) {
|
||||
case 'switch':
|
||||
this.showMode(1);
|
||||
break;
|
||||
case 'prev':
|
||||
case 'next':
|
||||
this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call(
|
||||
this.viewDate,
|
||||
this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) +
|
||||
DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1)
|
||||
);
|
||||
this.fill();
|
||||
this.set();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'span':
|
||||
if (target.is('.month')) {
|
||||
var month = target.parent().find('span').index(target);
|
||||
this.viewDate.setMonth(month);
|
||||
} else {
|
||||
var year = parseInt(target.text(), 10)||0;
|
||||
this.viewDate.setFullYear(year);
|
||||
}
|
||||
if (this.viewMode !== 0) {
|
||||
this.date = new Date(this.viewDate);
|
||||
this.element.trigger({
|
||||
type: 'changeDate',
|
||||
date: this.date,
|
||||
viewMode: DPGlobal.modes[this.viewMode].clsName
|
||||
});
|
||||
}
|
||||
this.showMode(-1);
|
||||
this.fill();
|
||||
this.set();
|
||||
break;
|
||||
case 'td':
|
||||
if (target.is('.day') && !target.is('.disabled')){
|
||||
var day = parseInt(target.text(), 10)||1;
|
||||
var month = this.viewDate.getMonth();
|
||||
if (target.is('.old')) {
|
||||
month -= 1;
|
||||
} else if (target.is('.new')) {
|
||||
month += 1;
|
||||
}
|
||||
var year = this.viewDate.getFullYear();
|
||||
this.date = new Date(year, month, day,0,0,0,0);
|
||||
this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0);
|
||||
this.fill();
|
||||
this.set();
|
||||
this.element.trigger({
|
||||
type: 'changeDate',
|
||||
date: this.date,
|
||||
viewMode: DPGlobal.modes[this.viewMode].clsName
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
mousedown: function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
},
|
||||
|
||||
showMode: function(dir) {
|
||||
if (dir) {
|
||||
this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir));
|
||||
}
|
||||
this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.datepicker = function ( option, val ) {
|
||||
return this.each(function () {
|
||||
var $this = $(this),
|
||||
data = $this.data('datepicker'),
|
||||
options = typeof option === 'object' && option;
|
||||
if (!data) {
|
||||
$this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options))));
|
||||
}
|
||||
if (typeof option === 'string') data[option](val);
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.datepicker.defaults = {
|
||||
onRender: function(date) {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
$.fn.datepicker.Constructor = Datepicker;
|
||||
|
||||
var DPGlobal = {
|
||||
modes: [
|
||||
{
|
||||
clsName: 'days',
|
||||
navFnc: 'Month',
|
||||
navStep: 1
|
||||
},
|
||||
{
|
||||
clsName: 'months',
|
||||
navFnc: 'FullYear',
|
||||
navStep: 1
|
||||
},
|
||||
{
|
||||
clsName: 'years',
|
||||
navFnc: 'FullYear',
|
||||
navStep: 10
|
||||
}],
|
||||
dates:{
|
||||
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
|
||||
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
|
||||
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
|
||||
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
|
||||
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
|
||||
},
|
||||
isLeapYear: function (year) {
|
||||
return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))
|
||||
},
|
||||
getDaysInMonth: function (year, month) {
|
||||
return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
|
||||
},
|
||||
parseFormat: function(format){
|
||||
var separator = format.match(/[.\/\-\s].*?/),
|
||||
parts = format.split(/\W+/);
|
||||
if (!separator || !parts || parts.length === 0){
|
||||
throw new Error("Invalid date format.");
|
||||
}
|
||||
return {separator: separator, parts: parts};
|
||||
},
|
||||
parseDate: function(date, format) {
|
||||
var parts = date.split(format.separator),
|
||||
date = new Date(),
|
||||
val;
|
||||
date.setHours(0);
|
||||
date.setMinutes(0);
|
||||
date.setSeconds(0);
|
||||
date.setMilliseconds(0);
|
||||
if (parts.length === format.parts.length) {
|
||||
var year = date.getFullYear(), day = date.getDate(), month = date.getMonth();
|
||||
for (var i=0, cnt = format.parts.length; i < cnt; i++) {
|
||||
val = parseInt(parts[i], 10)||1;
|
||||
switch(format.parts[i]) {
|
||||
case 'dd':
|
||||
case 'd':
|
||||
day = val;
|
||||
date.setDate(val);
|
||||
break;
|
||||
case 'mm':
|
||||
case 'm':
|
||||
month = val - 1;
|
||||
date.setMonth(val - 1);
|
||||
break;
|
||||
case 'yy':
|
||||
year = 2000 + val;
|
||||
date.setFullYear(2000 + val);
|
||||
break;
|
||||
case 'yyyy':
|
||||
year = val;
|
||||
date.setFullYear(val);
|
||||
break;
|
||||
}
|
||||
}
|
||||
date = new Date(year, month, day, 0 ,0 ,0);
|
||||
}
|
||||
return date;
|
||||
},
|
||||
formatDate: function(date, format){
|
||||
var val = {
|
||||
d: date.getDate(),
|
||||
m: date.getMonth() + 1,
|
||||
yy: date.getFullYear().toString().substring(2),
|
||||
yyyy: date.getFullYear()
|
||||
};
|
||||
val.dd = (val.d < 10 ? '0' : '') + val.d;
|
||||
val.mm = (val.m < 10 ? '0' : '') + val.m;
|
||||
var date = [];
|
||||
for (var i=0, cnt = format.parts.length; i < cnt; i++) {
|
||||
date.push(val[format.parts[i]]);
|
||||
}
|
||||
return date.join(format.separator);
|
||||
},
|
||||
headTemplate: '<thead>'+
|
||||
'<tr>'+
|
||||
'<th class="prev">‹</th>'+
|
||||
'<th colspan="5" class="switch"></th>'+
|
||||
'<th class="next">›</th>'+
|
||||
'</tr>'+
|
||||
'</thead>',
|
||||
contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>'
|
||||
};
|
||||
DPGlobal.template = '<div class="datepicker dropdown-menu">'+
|
||||
'<div class="datepicker-days">'+
|
||||
'<table class=" table-condensed">'+
|
||||
DPGlobal.headTemplate+
|
||||
'<tbody></tbody>'+
|
||||
'</table>'+
|
||||
'</div>'+
|
||||
'<div class="datepicker-months">'+
|
||||
'<table class="table-condensed">'+
|
||||
DPGlobal.headTemplate+
|
||||
DPGlobal.contTemplate+
|
||||
'</table>'+
|
||||
'</div>'+
|
||||
'<div class="datepicker-years">'+
|
||||
'<table class="table-condensed">'+
|
||||
DPGlobal.headTemplate+
|
||||
DPGlobal.contTemplate+
|
||||
'</table>'+
|
||||
'</div>'+
|
||||
'</div>';
|
||||
|
||||
}( window.jQuery );
|
@ -0,0 +1,122 @@
|
||||
/*
|
||||
Bootstrap - File Input
|
||||
======================
|
||||
|
||||
This is meant to convert all file input tags into a set of elements that displays consistently in all browsers.
|
||||
|
||||
Converts all
|
||||
<input type="file">
|
||||
into Bootstrap buttons
|
||||
<a class="btn">Browse</a>
|
||||
|
||||
*/
|
||||
$(function() {
|
||||
|
||||
$.fn.bootstrapFileInput = function() {
|
||||
|
||||
this.each(function(i,elem){
|
||||
|
||||
var $elem = $(elem);
|
||||
|
||||
// Maybe some fields don't need to be standardized.
|
||||
if (typeof $elem.attr('data-bfi-disabled') != 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Set the word to be displayed on the button
|
||||
var buttonWord = 'Browse';
|
||||
|
||||
if (typeof $elem.attr('title') != 'undefined') {
|
||||
buttonWord = $elem.attr('title');
|
||||
}
|
||||
|
||||
// Start by getting the HTML of the input element.
|
||||
// Thanks for the tip http://stackoverflow.com/a/1299069
|
||||
var input = $('<div>').append( $elem.eq(0).clone() ).html();
|
||||
var className = '';
|
||||
|
||||
if (!!$elem.attr('class')) {
|
||||
className = ' ' + $elem.attr('class');
|
||||
}
|
||||
|
||||
// Now we're going to replace that input field with a Bootstrap button.
|
||||
// The input will actually still be there, it will just be float above and transparent (done with the CSS).
|
||||
$elem.replaceWith('<a class="file-input-wrapper btn' + className + '">'+buttonWord+input+'</a>');
|
||||
})
|
||||
|
||||
// After we have found all of the file inputs let's apply a listener for tracking the mouse movement.
|
||||
// This is important because the in order to give the illusion that this is a button in FF we actually need to move the button from the file input under the cursor. Ugh.
|
||||
.promise().done( function(){
|
||||
|
||||
// As the cursor moves over our new Bootstrap button we need to adjust the position of the invisible file input Browse button to be under the cursor.
|
||||
// This gives us the pointer cursor that FF denies us
|
||||
$('.file-input-wrapper').mousemove(function(cursor) {
|
||||
|
||||
var input, wrapper,
|
||||
wrapperX, wrapperY,
|
||||
inputWidth, inputHeight,
|
||||
cursorX, cursorY;
|
||||
|
||||
// This wrapper element (the button surround this file input)
|
||||
wrapper = $(this);
|
||||
// The invisible file input element
|
||||
input = wrapper.find("input");
|
||||
// The left-most position of the wrapper
|
||||
wrapperX = wrapper.offset().left;
|
||||
// The top-most position of the wrapper
|
||||
wrapperY = wrapper.offset().top;
|
||||
// The with of the browsers input field
|
||||
inputWidth= input.width();
|
||||
// The height of the browsers input field
|
||||
inputHeight= input.height();
|
||||
//The position of the cursor in the wrapper
|
||||
cursorX = cursor.pageX;
|
||||
cursorY = cursor.pageY;
|
||||
|
||||
//The positions we are to move the invisible file input
|
||||
// The 20 at the end is an arbitrary number of pixels that we can shift the input such that cursor is not pointing at the end of the Browse button but somewhere nearer the middle
|
||||
moveInputX = cursorX - wrapperX - inputWidth + 20;
|
||||
// Slides the invisible input Browse button to be positioned middle under the cursor
|
||||
moveInputY = cursorY- wrapperY - (inputHeight/2);
|
||||
|
||||
// Apply the positioning styles to actually move the invisible file input
|
||||
input.css({
|
||||
left:moveInputX,
|
||||
top:moveInputY
|
||||
});
|
||||
});
|
||||
|
||||
$('.file-input-wrapper input[type=file]').change(function(){
|
||||
|
||||
var fileName;
|
||||
fileName = $(this).val();
|
||||
|
||||
// Remove any previous file names
|
||||
$(this).parent().next('.file-input-name').remove();
|
||||
if (!!$(this).prop('files') && $(this).prop('files').length > 1) {
|
||||
fileName = $(this)[0].files.length+' files';
|
||||
//$(this).parent().after('<span class="file-input-name">'+$(this)[0].files.length+' files</span>');
|
||||
}
|
||||
else {
|
||||
// var fakepath = 'C:\\fakepath\\';
|
||||
// fileName = $(this).val().replace('C:\\fakepath\\','');
|
||||
fileName = fileName.substring(fileName.lastIndexOf('\\')+1,fileName.length);
|
||||
}
|
||||
|
||||
$(this).parent().after('<span class="file-input-name">'+fileName+'</span>');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
// Add the styles before the first stylesheet
|
||||
// This ensures they can be easily overridden with developer styles
|
||||
var cssHtml = '<style>'+
|
||||
'.file-input-wrapper { overflow: hidden; position: relative; cursor: pointer; z-index: 1; }'+
|
||||
'.file-input-wrapper input[type=file], .file-input-wrapper input[type=file]:focus, .file-input-wrapper input[type=file]:hover { position: absolute; top: 0; left: 0; cursor: pointer; opacity: 0; filter: alpha(opacity=0); z-index: 99; outline: 0; }'+
|
||||
'.file-input-name { margin-left: 8px; }'+
|
||||
'</style>';
|
||||
$('link[rel=stylesheet]').eq(0).before(cssHtml);
|
||||
|
||||
});
|
@ -0,0 +1,360 @@
|
||||
/* ===========================================================
|
||||
* Bootstrap: inputmask.js v3.1.0
|
||||
* http://jasny.github.io/bootstrap/javascript/#inputmask
|
||||
*
|
||||
* Based on Masked Input plugin by Josh Bush (digitalbush.com)
|
||||
* ===========================================================
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
*
|
||||
* 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 ($) { "use strict";
|
||||
|
||||
var isIphone = (window.orientation !== undefined)
|
||||
var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1
|
||||
var isIE = window.navigator.appName == 'Microsoft Internet Explorer'
|
||||
|
||||
// INPUTMASK PUBLIC CLASS DEFINITION
|
||||
// =================================
|
||||
|
||||
var Inputmask = function (element, options) {
|
||||
if (isAndroid) return // No support because caret positioning doesn't work on Android
|
||||
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, Inputmask.DEFAULTS, options)
|
||||
this.mask = String(this.options.mask)
|
||||
|
||||
this.init()
|
||||
this.listen()
|
||||
|
||||
this.checkVal() //Perform initial check for existing values
|
||||
}
|
||||
|
||||
Inputmask.DEFAULTS = {
|
||||
mask: "",
|
||||
placeholder: "_",
|
||||
definitions: {
|
||||
'9': "[0-9]",
|
||||
'a': "[A-Za-z]",
|
||||
'w': "[A-Za-z0-9]",
|
||||
'*': "."
|
||||
}
|
||||
}
|
||||
|
||||
Inputmask.prototype.init = function() {
|
||||
var defs = this.options.definitions
|
||||
var len = this.mask.length
|
||||
|
||||
this.tests = []
|
||||
this.partialPosition = this.mask.length
|
||||
this.firstNonMaskPos = null
|
||||
|
||||
$.each(this.mask.split(""), $.proxy(function(i, c) {
|
||||
if (c == '?') {
|
||||
len--
|
||||
this.partialPosition = i
|
||||
} else if (defs[c]) {
|
||||
this.tests.push(new RegExp(defs[c]))
|
||||
if (this.firstNonMaskPos === null)
|
||||
this.firstNonMaskPos = this.tests.length - 1
|
||||
} else {
|
||||
this.tests.push(null)
|
||||
}
|
||||
}, this))
|
||||
|
||||
this.buffer = $.map(this.mask.split(""), $.proxy(function(c, i) {
|
||||
if (c != '?') return defs[c] ? this.options.placeholder : c
|
||||
}, this))
|
||||
|
||||
this.focusText = this.$element.val()
|
||||
|
||||
this.$element.data("rawMaskFn", $.proxy(function() {
|
||||
return $.map(this.buffer, function(c, i) {
|
||||
return this.tests[i] && c != this.options.placeholder ? c : null
|
||||
}).join('')
|
||||
}, this))
|
||||
}
|
||||
|
||||
Inputmask.prototype.listen = function() {
|
||||
if (this.$element.attr("readonly")) return
|
||||
|
||||
var pasteEventName = (isIE ? 'paste' : 'input') + ".mask"
|
||||
|
||||
this.$element
|
||||
.on("unmask.bs.inputmask", $.proxy(this.unmask, this))
|
||||
|
||||
.on("focus.bs.inputmask", $.proxy(this.focusEvent, this))
|
||||
.on("blur.bs.inputmask", $.proxy(this.blurEvent, this))
|
||||
|
||||
.on("keydown.bs.inputmask", $.proxy(this.keydownEvent, this))
|
||||
.on("keypress.bs.inputmask", $.proxy(this.keypressEvent, this))
|
||||
|
||||
.on(pasteEventName, $.proxy(this.pasteEvent, this))
|
||||
}
|
||||
|
||||
//Helper Function for Caret positioning
|
||||
Inputmask.prototype.caret = function(begin, end) {
|
||||
if (this.$element.length === 0) return
|
||||
if (typeof begin == 'number') {
|
||||
end = (typeof end == 'number') ? end : begin
|
||||
return this.$element.each(function() {
|
||||
if (this.setSelectionRange) {
|
||||
this.setSelectionRange(begin, end)
|
||||
} else if (this.createTextRange) {
|
||||
var range = this.createTextRange()
|
||||
range.collapse(true)
|
||||
range.moveEnd('character', end)
|
||||
range.moveStart('character', begin)
|
||||
range.select()
|
||||
}
|
||||
})
|
||||
} else {
|
||||
if (this.$element[0].setSelectionRange) {
|
||||
begin = this.$element[0].selectionStart
|
||||
end = this.$element[0].selectionEnd
|
||||
} else if (document.selection && document.selection.createRange) {
|
||||
var range = document.selection.createRange()
|
||||
begin = 0 - range.duplicate().moveStart('character', -100000)
|
||||
end = begin + range.text.length
|
||||
}
|
||||
return {
|
||||
begin: begin,
|
||||
end: end
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Inputmask.prototype.seekNext = function(pos) {
|
||||
var len = this.mask.length
|
||||
while (++pos <= len && !this.tests[pos]);
|
||||
|
||||
return pos
|
||||
}
|
||||
|
||||
Inputmask.prototype.seekPrev = function(pos) {
|
||||
while (--pos >= 0 && !this.tests[pos]);
|
||||
|
||||
return pos
|
||||
}
|
||||
|
||||
Inputmask.prototype.shiftL = function(begin,end) {
|
||||
var len = this.mask.length
|
||||
|
||||
if (begin < 0) return
|
||||
|
||||
for (var i = begin, j = this.seekNext(end); i < len; i++) {
|
||||
if (this.tests[i]) {
|
||||
if (j < len && this.tests[i].test(this.buffer[j])) {
|
||||
this.buffer[i] = this.buffer[j]
|
||||
this.buffer[j] = this.options.placeholder
|
||||
} else
|
||||
break
|
||||
j = this.seekNext(j)
|
||||
}
|
||||
}
|
||||
this.writeBuffer()
|
||||
this.caret(Math.max(this.firstNonMaskPos, begin))
|
||||
}
|
||||
|
||||
Inputmask.prototype.shiftR = function(pos) {
|
||||
var len = this.mask.length
|
||||
|
||||
for (var i = pos, c = this.options.placeholder; i < len; i++) {
|
||||
if (this.tests[i]) {
|
||||
var j = this.seekNext(i)
|
||||
var t = this.buffer[i]
|
||||
this.buffer[i] = c
|
||||
if (j < len && this.tests[j].test(t))
|
||||
c = t
|
||||
else
|
||||
break
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Inputmask.prototype.unmask = function() {
|
||||
this.$element
|
||||
.unbind(".mask")
|
||||
.removeData("inputmask")
|
||||
}
|
||||
|
||||
Inputmask.prototype.focusEvent = function() {
|
||||
this.focusText = this.$element.val()
|
||||
var len = this.mask.length
|
||||
var pos = this.checkVal()
|
||||
this.writeBuffer()
|
||||
|
||||
var that = this
|
||||
var moveCaret = function() {
|
||||
if (pos == len)
|
||||
that.caret(0, pos)
|
||||
else
|
||||
that.caret(pos)
|
||||
}
|
||||
|
||||
moveCaret()
|
||||
setTimeout(moveCaret, 50)
|
||||
}
|
||||
|
||||
Inputmask.prototype.blurEvent = function() {
|
||||
this.checkVal()
|
||||
if (this.$element.val() !== this.focusText)
|
||||
this.$element.trigger('change')
|
||||
}
|
||||
|
||||
Inputmask.prototype.keydownEvent = function(e) {
|
||||
var k = e.which
|
||||
|
||||
//backspace, delete, and escape get special treatment
|
||||
if (k == 8 || k == 46 || (isIphone && k == 127)) {
|
||||
var pos = this.caret(),
|
||||
begin = pos.begin,
|
||||
end = pos.end
|
||||
|
||||
if (end - begin === 0) {
|
||||
begin = k != 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1))
|
||||
end = k == 46 ? this.seekNext(end) : end
|
||||
}
|
||||
this.clearBuffer(begin, end)
|
||||
this.shiftL(begin, end - 1)
|
||||
|
||||
return false
|
||||
} else if (k == 27) {//escape
|
||||
this.$element.val(this.focusText)
|
||||
this.caret(0, this.checkVal())
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
Inputmask.prototype.keypressEvent = function(e) {
|
||||
var len = this.mask.length
|
||||
|
||||
var k = e.which,
|
||||
pos = this.caret()
|
||||
|
||||
if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore
|
||||
return true
|
||||
} else if (k) {
|
||||
if (pos.end - pos.begin !== 0) {
|
||||
this.clearBuffer(pos.begin, pos.end)
|
||||
this.shiftL(pos.begin, pos.end - 1)
|
||||
}
|
||||
|
||||
var p = this.seekNext(pos.begin - 1)
|
||||
if (p < len) {
|
||||
var c = String.fromCharCode(k)
|
||||
if (this.tests[p].test(c)) {
|
||||
this.shiftR(p)
|
||||
this.buffer[p] = c
|
||||
this.writeBuffer()
|
||||
var next = this.seekNext(p)
|
||||
this.caret(next)
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
Inputmask.prototype.pasteEvent = function() {
|
||||
var that = this
|
||||
|
||||
setTimeout(function() {
|
||||
that.caret(that.checkVal(true))
|
||||
}, 0)
|
||||
}
|
||||
|
||||
Inputmask.prototype.clearBuffer = function(start, end) {
|
||||
var len = this.mask.length
|
||||
|
||||
for (var i = start; i < end && i < len; i++) {
|
||||
if (this.tests[i])
|
||||
this.buffer[i] = this.options.placeholder
|
||||
}
|
||||
}
|
||||
|
||||
Inputmask.prototype.writeBuffer = function() {
|
||||
return this.$element.val(this.buffer.join('')).val()
|
||||
}
|
||||
|
||||
Inputmask.prototype.checkVal = function(allow) {
|
||||
var len = this.mask.length
|
||||
//try to place characters where they belong
|
||||
var test = this.$element.val()
|
||||
var lastMatch = -1
|
||||
|
||||
for (var i = 0, pos = 0; i < len; i++) {
|
||||
if (this.tests[i]) {
|
||||
this.buffer[i] = this.options.placeholder
|
||||
while (pos++ < test.length) {
|
||||
var c = test.charAt(pos - 1)
|
||||
if (this.tests[i].test(c)) {
|
||||
this.buffer[i] = c
|
||||
lastMatch = i
|
||||
break
|
||||
}
|
||||
}
|
||||
if (pos > test.length)
|
||||
break
|
||||
} else if (this.buffer[i] == test.charAt(pos) && i != this.partialPosition) {
|
||||
pos++
|
||||
lastMatch = i
|
||||
}
|
||||
}
|
||||
if (!allow && lastMatch + 1 < this.partialPosition) {
|
||||
this.$element.val("")
|
||||
this.clearBuffer(0, len)
|
||||
} else if (allow || lastMatch + 1 >= this.partialPosition) {
|
||||
this.writeBuffer()
|
||||
if (!allow) this.$element.val(this.$element.val().substring(0, lastMatch + 1))
|
||||
}
|
||||
return (this.partialPosition ? i : this.firstNonMaskPos)
|
||||
}
|
||||
|
||||
|
||||
// INPUTMASK PLUGIN DEFINITION
|
||||
// ===========================
|
||||
|
||||
var old = $.fn.inputmask
|
||||
|
||||
$.fn.inputmask = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('bs.inputmask')
|
||||
|
||||
if (!data) $this.data('bs.inputmask', (data = new Inputmask(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.inputmask.Constructor = Inputmask
|
||||
|
||||
|
||||
// INPUTMASK NO CONFLICT
|
||||
// ====================
|
||||
|
||||
$.fn.inputmask.noConflict = function () {
|
||||
$.fn.inputmask = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
// INPUTMASK DATA-API
|
||||
// ==================
|
||||
|
||||
$(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('bs.inputmask')) return
|
||||
$this.inputmask($this.data())
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* bootstrap-select v1.4.2
|
||||
* http://silviomoreto.github.io/bootstrap-select/
|
||||
*
|
||||
* Copyright 2013 bootstrap-select
|
||||
* Licensed under the MIT license
|
||||
*/.bootstrap-select.btn-group,.bootstrap-select.btn-group[class*="span"]{float:none;display:inline-block;margin-bottom:10px;margin-left:0}.form-search .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group{margin-bottom:0}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:0}.bootstrap-select.btn-group.pull-right,.bootstrap-select.btn-group[class*="span"].pull-right,.row-fluid .bootstrap-select.btn-group[class*="span"].pull-right{float:right}.input-append .bootstrap-select.btn-group{margin-left:-1px}.input-prepend .bootstrap-select.btn-group{margin-right:-1px}.bootstrap-select:not([class*="span"]):not([class*="col-"]):not([class*="form-control"]){width:220px}.bootstrap-select{width:220px\0}.bootstrap-select.form-control:not([class*="span"]){width:100%}.bootstrap-select>.btn{width:100%}.error .bootstrap-select .btn{border:1px solid #b94a48}.dropdown-menu{z-index:2000}.bootstrap-select.show-menu-arrow.open>.btn{z-index:2051}.bootstrap-select .btn:focus{outline:thin dotted #333 !important;outline:5px auto -webkit-focus-ring-color !important;outline-offset:-2px}.bootstrap-select.btn-group .btn .filter-option{overflow:hidden;position:absolute;left:12px;right:25px;text-align:left}.bootstrap-select.btn-group .btn .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group>.disabled,.bootstrap-select.btn-group .dropdown-menu li.disabled>a{cursor:not-allowed}.bootstrap-select.btn-group>.disabled:focus{outline:none !important}.bootstrap-select.btn-group[class*="span"] .btn{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;border:0;padding:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu dt{display:block;padding:3px 20px;cursor:default}.bootstrap-select.btn-group .div-contain{overflow:hidden}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li>a.opt{position:relative;padding-left:35px}.bootstrap-select.btn-group .dropdown-menu li>a{cursor:pointer}.bootstrap-select.btn-group .dropdown-menu li>dt small{font-weight:normal}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a i.check-mark{display:inline-block;position:absolute;right:15px;margin-top:2.5px}.bootstrap-select.btn-group .dropdown-menu li a i.check-mark{display:none}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu li:not(.disabled)>a:hover small,.bootstrap-select.btn-group .dropdown-menu li:not(.disabled)>a:focus small,.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled)>a small{color:#64b1d8;color:rgba(255,255,255,0.4)}.bootstrap-select.btn-group .dropdown-menu li>dt small{font-weight:normal}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #CCC;border-bottom-color:rgba(0,0,0,0.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid white;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after{display:block}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px}.mobile-device{position:absolute;top:0;left:0;display:block !important;width:100%;height:100% !important;opacity:0}.bootstrap-select.fit-width{width:auto !important}.bootstrap-select.btn-group.fit-width .btn .filter-option{position:static}.bootstrap-select.btn-group.fit-width .btn .caret{position:static;top:auto;margin-top:-1px}.control-group.error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select-searchbox{padding:4px 8px}.bootstrap-select-searchbox input{margin-bottom:0}
|
After Width: | Height: | Size: 1.8 KiB |
@ -0,0 +1,589 @@
|
||||
/*
|
||||
Version: 3.4.3 Timestamp: Tue Sep 17 06:47:14 PDT 2013
|
||||
*/
|
||||
.select2-container {
|
||||
margin: 0;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
/* inline-block for ie7 */
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.select2-container,
|
||||
.select2-drop,
|
||||
.select2-search,
|
||||
.select2-search input {
|
||||
/*
|
||||
Force border-box so that % widths fit the parent
|
||||
container without overlap because of margin/padding.
|
||||
|
||||
More Info : http://www.quirksmode.org/css/box.html
|
||||
*/
|
||||
-webkit-box-sizing: border-box; /* webkit */
|
||||
-moz-box-sizing: border-box; /* firefox */
|
||||
box-sizing: border-box; /* css3 */
|
||||
}
|
||||
|
||||
.select2-container .select2-choice {
|
||||
display: block;
|
||||
height: 26px;
|
||||
padding: 0 0 0 8px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
white-space: nowrap;
|
||||
line-height: 26px;
|
||||
color: #444;
|
||||
text-decoration: none;
|
||||
|
||||
border-radius: 4px;
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.select2-container.select2-drop-above .select2-choice {
|
||||
border-bottom-color: #aaa;
|
||||
|
||||
border-radius: 0 0 4px 4px;
|
||||
|
||||
}
|
||||
|
||||
.select2-container.select2-allowclear .select2-choice .select2-chosen {
|
||||
margin-right: 42px;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice > .select2-chosen {
|
||||
margin-right: 26px;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
white-space: nowrap;
|
||||
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice abbr {
|
||||
display: none;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
position: absolute;
|
||||
right: 24px;
|
||||
top: 8px;
|
||||
|
||||
font-size: 1px;
|
||||
text-decoration: none;
|
||||
|
||||
border: 0;
|
||||
background: url('select2.png') right top no-repeat;
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.select2-container.select2-allowclear .select2-choice abbr {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice abbr:hover {
|
||||
background-position: right -11px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.select2-drop-mask {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
opacity: 0;
|
||||
z-index: 9998;
|
||||
/* styles required for IE to work */
|
||||
background-color: #fff;
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
|
||||
.select2-drop {
|
||||
width: 100%;
|
||||
margin-top: -1px;
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
top: 100%;
|
||||
|
||||
background: #fff;
|
||||
color: #000;
|
||||
border: 1px solid #aaa;
|
||||
border-top: 0;
|
||||
|
||||
border-radius: 0 0 4px 4px;
|
||||
|
||||
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.select2-drop-auto-width {
|
||||
border-top: 1px solid #aaa;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.select2-drop-auto-width .select2-search {
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above {
|
||||
margin-top: 1px;
|
||||
border-top: 1px solid #aaa;
|
||||
border-bottom: 0;
|
||||
|
||||
border-radius: 4px 4px 0 0;
|
||||
|
||||
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.select2-drop-active {
|
||||
border: 1px solid #5897fb;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above.select2-drop-active {
|
||||
border-top: 1px solid #5897fb;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice .select2-arrow {
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
|
||||
border-left: 1px solid #aaa;
|
||||
border-radius: 0 4px 4px 0;
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
background: #ccc;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice .select2-arrow b {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('select2.png') no-repeat 0 1px;
|
||||
}
|
||||
|
||||
.select2-search {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
min-height: 26px;
|
||||
margin: 0;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
position: relative;
|
||||
z-index: 10000;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.select2-search input {
|
||||
width: 100%;
|
||||
height: auto !important;
|
||||
min-height: 26px;
|
||||
padding: 4px 20px 4px 5px;
|
||||
margin: 0;
|
||||
|
||||
outline: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
border-radius: 0;
|
||||
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
|
||||
background: #fff url('select2.png') no-repeat 100% -22px;
|
||||
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
||||
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #fff 85%, #eee 99%);
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above .select2-search input {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.select2-search input.select2-active {
|
||||
background: #fff url('select2-spinner.gif') no-repeat 100%;
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(top, #fff 85%, #eee 99%);
|
||||
}
|
||||
|
||||
.select2-container-active .select2-choice,
|
||||
.select2-container-active .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
outline: none;
|
||||
|
||||
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
.select2-dropdown-open .select2-choice {
|
||||
border-bottom-color: transparent;
|
||||
-webkit-box-shadow: 0 1px 0 #fff inset;
|
||||
box-shadow: 0 1px 0 #fff inset;
|
||||
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
|
||||
background-color: #eee;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
|
||||
background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
||||
background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
||||
background-image: linear-gradient(top, #fff 0%, #eee 50%);
|
||||
}
|
||||
|
||||
.select2-dropdown-open.select2-drop-above .select2-choice,
|
||||
.select2-dropdown-open.select2-drop-above .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
border-top-color: transparent;
|
||||
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
|
||||
background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
|
||||
background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
||||
background-image: linear-gradient(bottom, #fff 0%, #eee 50%);
|
||||
}
|
||||
|
||||
.select2-dropdown-open .select2-choice .select2-arrow {
|
||||
background: transparent;
|
||||
border-left: none;
|
||||
filter: none;
|
||||
}
|
||||
.select2-dropdown-open .select2-choice .select2-arrow b {
|
||||
background-position: -18px 1px;
|
||||
}
|
||||
|
||||
/* results */
|
||||
.select2-results {
|
||||
max-height: 200px;
|
||||
padding: 0 0 0 4px;
|
||||
margin: 4px 4px 4px 0;
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.select2-results ul.select2-result-sub {
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }
|
||||
|
||||
.select2-results li {
|
||||
list-style: none;
|
||||
display: list-item;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.select2-results li.select2-result-with-children > .select2-result-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.select2-results .select2-result-label {
|
||||
padding: 3px 7px 4px;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
|
||||
min-height: 1em;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted {
|
||||
background: #3875d7;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.select2-results li em {
|
||||
background: #feffde;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted em {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted ul {
|
||||
background: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
|
||||
.select2-results .select2-no-results,
|
||||
.select2-results .select2-searching,
|
||||
.select2-results .select2-selection-limit {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/*
|
||||
disabled look for disabled choices in the results dropdown
|
||||
*/
|
||||
.select2-results .select2-disabled.select2-highlighted {
|
||||
color: #666;
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
cursor: default;
|
||||
}
|
||||
.select2-results .select2-disabled {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-results .select2-selected {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select2-more-results.select2-active {
|
||||
background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
|
||||
}
|
||||
|
||||
.select2-more-results {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* disabled styles */
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border: 1px solid #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice .select2-arrow {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice abbr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* multiselect */
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
height: auto !important;
|
||||
height: 1%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
cursor: text;
|
||||
overflow: hidden;
|
||||
|
||||
background-color: #fff;
|
||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
|
||||
background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
|
||||
background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
|
||||
background-image: linear-gradient(top, #eee 1%, #fff 15%);
|
||||
}
|
||||
|
||||
.select2-locked {
|
||||
padding: 3px 5px 3px 5px !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
min-height: 26px;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-active .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
outline: none;
|
||||
|
||||
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
.select2-container-multi .select2-choices li {
|
||||
float: left;
|
||||
list-style: none;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-field {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-field input {
|
||||
padding: 5px;
|
||||
margin: 1px 0;
|
||||
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
color: #666;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
|
||||
background: #fff url('select2-spinner.gif') no-repeat 100% !important;
|
||||
}
|
||||
|
||||
.select2-default {
|
||||
color: #999 !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice {
|
||||
padding: 3px 5px 3px 18px;
|
||||
margin: 3px 0 3px 5px;
|
||||
position: relative;
|
||||
|
||||
line-height: 13px;
|
||||
color: #333;
|
||||
cursor: default;
|
||||
border: 1px solid #aaaaaa;
|
||||
|
||||
border-radius: 3px;
|
||||
|
||||
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
background-color: #e4e4e4;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
|
||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
|
||||
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
|
||||
cursor: default;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice-focus {
|
||||
background: #d4d4d4;
|
||||
}
|
||||
|
||||
.select2-search-choice-close {
|
||||
display: block;
|
||||
width: 12px;
|
||||
height: 13px;
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
top: 4px;
|
||||
|
||||
font-size: 1px;
|
||||
outline: none;
|
||||
background: url('select2.png') right top no-repeat;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-search-choice-close {
|
||||
left: 3px;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
|
||||
background-position: right -11px;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
|
||||
background-position: right -11px;
|
||||
}
|
||||
|
||||
/* disabled styles */
|
||||
.select2-container-multi.select2-container-disabled .select2-choices {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border: 1px solid #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
|
||||
padding: 3px 5px 3px 5px;
|
||||
border: 1px solid #ddd;
|
||||
background-image: none;
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
|
||||
background: none;
|
||||
}
|
||||
/* end multiselect */
|
||||
|
||||
|
||||
.select2-result-selectable .select2-match,
|
||||
.select2-result-unselectable .select2-match {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.select2-offscreen, .select2-offscreen:focus {
|
||||
clip: rect(0 0 0 0) !important;
|
||||
width: 1px !important;
|
||||
height: 1px !important;
|
||||
border: 0 !important;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
overflow: hidden !important;
|
||||
position: absolute !important;
|
||||
outline: 0 !important;
|
||||
left: 0px !important;
|
||||
top: 0px !important;
|
||||
}
|
||||
|
||||
.select2-display-none {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select2-measure-scrollbar {
|
||||
position: absolute;
|
||||
top: -10000px;
|
||||
left: -10000px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
overflow: scroll;
|
||||
}
|
||||
/* Retina-ize icons */
|
||||
|
||||
|
After Width: | Height: | Size: 613 B |
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* BootstrapValidator (http://bootstrapvalidator.com)
|
||||
*
|
||||
* The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3
|
||||
*
|
||||
* @version v0.4.5
|
||||
* @author https://twitter.com/nghuuphuoc
|
||||
* @copyright (c) 2013 - 2014 Nguyen Huu Phuoc
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
|
||||
.bv-form .help-block{margin-bottom:0}.nav-tabs li.bv-tab-success>a{color:#3c763d}.nav-tabs li.bv-tab-error>a{color:#a94442}
|
@ -0,0 +1,663 @@
|
||||
/*! X-editable - v1.5.1
|
||||
* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
|
||||
* http://github.com/vitalets/x-editable
|
||||
* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */
|
||||
.editableform {
|
||||
margin-bottom: 0; /* overwrites bootstrap margin */
|
||||
}
|
||||
|
||||
.editableform .control-group {
|
||||
margin-bottom: 0; /* overwrites bootstrap margin */
|
||||
white-space: nowrap; /* prevent wrapping buttons on new line */
|
||||
line-height: 20px; /* overwriting bootstrap line-height. See #133 */
|
||||
}
|
||||
|
||||
/*
|
||||
BS3 width:1005 for inputs breaks editable form in popup
|
||||
See: https://github.com/vitalets/x-editable/issues/393
|
||||
*/
|
||||
.editableform .form-control {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.editable-buttons {
|
||||
display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */
|
||||
vertical-align: top;
|
||||
margin-left: 7px;
|
||||
/* inline-block emulation for IE7*/
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
}
|
||||
|
||||
.editable-buttons.editable-buttons-bottom {
|
||||
display: block;
|
||||
margin-top: 7px;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.editable-input {
|
||||
vertical-align: top;
|
||||
display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */
|
||||
width: auto; /* bootstrap-responsive has width: 100% that breakes layout */
|
||||
white-space: normal; /* reset white-space decalred in parent*/
|
||||
/* display-inline emulation for IE7*/
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
}
|
||||
|
||||
.editable-buttons .editable-cancel {
|
||||
margin-left: 7px;
|
||||
}
|
||||
|
||||
/*for jquery-ui buttons need set height to look more pretty*/
|
||||
.editable-buttons button.ui-button-icon-only {
|
||||
height: 24px;
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
.editableform-loading {
|
||||
background: url('../img/loading.gif') center center no-repeat;
|
||||
height: 25px;
|
||||
width: auto;
|
||||
min-width: 25px;
|
||||
}
|
||||
|
||||
.editable-inline .editableform-loading {
|
||||
background-position: left 5px;
|
||||
}
|
||||
|
||||
.editable-error-block {
|
||||
max-width: 300px;
|
||||
margin: 5px 0 0 0;
|
||||
width: auto;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
/*add padding for jquery ui*/
|
||||
.editable-error-block.ui-state-error {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.editable-error {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* ---- For specific types ---- */
|
||||
|
||||
.editableform .editable-date {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/* move datepicker icon to center of add-on button. See https://github.com/vitalets/x-editable/issues/183 */
|
||||
.editable-inline .add-on .icon-th {
|
||||
margin-top: 3px;
|
||||
margin-left: 1px;
|
||||
}
|
||||
|
||||
|
||||
/* checklist vertical alignment */
|
||||
.editable-checklist label input[type="checkbox"],
|
||||
.editable-checklist label span {
|
||||
vertical-align: middle;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.editable-checklist label {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* set exact width of textarea to fit buttons toolbar */
|
||||
.editable-wysihtml5 {
|
||||
width: 566px;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
/* clear button shown as link in date inputs */
|
||||
.editable-clear {
|
||||
clear: both;
|
||||
font-size: 0.9em;
|
||||
text-decoration: none;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* IOS-style clear button for text inputs */
|
||||
.editable-clear-x {
|
||||
background: url('../img/clear.png') center center no-repeat;
|
||||
display: block;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
position: absolute;
|
||||
opacity: 0.6;
|
||||
z-index: 100;
|
||||
|
||||
top: 50%;
|
||||
right: 6px;
|
||||
margin-top: -6px;
|
||||
|
||||
}
|
||||
|
||||
.editable-clear-x:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.editable-pre-wrapped {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.editable-container.editable-popup {
|
||||
max-width: none !important; /* without this rule poshytip/tooltip does not stretch */
|
||||
}
|
||||
|
||||
.editable-container.popover {
|
||||
width: auto; /* without this rule popover does not stretch */
|
||||
}
|
||||
|
||||
.editable-container.editable-inline {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: auto;
|
||||
/* inline-block emulation for IE7*/
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
}
|
||||
|
||||
.editable-container.ui-widget {
|
||||
font-size: inherit; /* jqueryui widget font 1.1em too big, overwrite it */
|
||||
z-index: 9990; /* should be less than select2 dropdown z-index to close dropdown first when click */
|
||||
}
|
||||
.editable-click,
|
||||
a.editable-click,
|
||||
a.editable-click:hover {
|
||||
text-decoration: none;
|
||||
border-bottom: dashed 1px #0088cc;
|
||||
}
|
||||
|
||||
.editable-click.editable-disabled,
|
||||
a.editable-click.editable-disabled,
|
||||
a.editable-click.editable-disabled:hover {
|
||||
color: #585858;
|
||||
cursor: default;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.editable-empty, .editable-empty:hover, .editable-empty:focus{
|
||||
font-style: italic;
|
||||
color: #DD1144;
|
||||
/* border-bottom: none; */
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.editable-unsaved {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.editable-unsaved:after {
|
||||
/* content: '*'*/
|
||||
}
|
||||
|
||||
.editable-bg-transition {
|
||||
-webkit-transition: background-color 1400ms ease-out;
|
||||
-moz-transition: background-color 1400ms ease-out;
|
||||
-o-transition: background-color 1400ms ease-out;
|
||||
-ms-transition: background-color 1400ms ease-out;
|
||||
transition: background-color 1400ms ease-out;
|
||||
}
|
||||
|
||||
/*see https://github.com/vitalets/x-editable/issues/139 */
|
||||
.form-horizontal .editable
|
||||
{
|
||||
padding-top: 5px;
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* Datepicker for Bootstrap
|
||||
*
|
||||
* Copyright 2012 Stefan Petre
|
||||
* Improvements by Andrew Rowls
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*/
|
||||
.datepicker {
|
||||
padding: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
direction: ltr;
|
||||
/*.dow {
|
||||
border-top: 1px solid #ddd !important;
|
||||
}*/
|
||||
|
||||
}
|
||||
.datepicker-inline {
|
||||
width: 220px;
|
||||
}
|
||||
.datepicker.datepicker-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
.datepicker.datepicker-rtl table tr td span {
|
||||
float: right;
|
||||
}
|
||||
.datepicker-dropdown {
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
.datepicker-dropdown:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
.datepicker-dropdown:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #ffffff;
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
.datepicker > div {
|
||||
display: none;
|
||||
}
|
||||
.datepicker.days div.datepicker-days {
|
||||
display: block;
|
||||
}
|
||||
.datepicker.months div.datepicker-months {
|
||||
display: block;
|
||||
}
|
||||
.datepicker.years div.datepicker-years {
|
||||
display: block;
|
||||
}
|
||||
.datepicker table {
|
||||
margin: 0;
|
||||
}
|
||||
.datepicker td,
|
||||
.datepicker th {
|
||||
text-align: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: none;
|
||||
}
|
||||
.table-striped .datepicker table tr td,
|
||||
.table-striped .datepicker table tr th {
|
||||
background-color: transparent;
|
||||
}
|
||||
.datepicker table tr td.day:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker table tr td.old,
|
||||
.datepicker table tr td.new {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker table tr td.disabled,
|
||||
.datepicker table tr td.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
.datepicker table tr td.today,
|
||||
.datepicker table tr td.today:hover,
|
||||
.datepicker table tr td.today.disabled,
|
||||
.datepicker table tr td.today.disabled:hover {
|
||||
background-color: #fde19a;
|
||||
background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
|
||||
background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
|
||||
border-color: #fdf59a #fdf59a #fbed50;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
color: #000;
|
||||
}
|
||||
.datepicker table tr td.today:hover,
|
||||
.datepicker table tr td.today:hover:hover,
|
||||
.datepicker table tr td.today.disabled:hover,
|
||||
.datepicker table tr td.today.disabled:hover:hover,
|
||||
.datepicker table tr td.today:active,
|
||||
.datepicker table tr td.today:hover:active,
|
||||
.datepicker table tr td.today.disabled:active,
|
||||
.datepicker table tr td.today.disabled:hover:active,
|
||||
.datepicker table tr td.today.active,
|
||||
.datepicker table tr td.today:hover.active,
|
||||
.datepicker table tr td.today.disabled.active,
|
||||
.datepicker table tr td.today.disabled:hover.active,
|
||||
.datepicker table tr td.today.disabled,
|
||||
.datepicker table tr td.today:hover.disabled,
|
||||
.datepicker table tr td.today.disabled.disabled,
|
||||
.datepicker table tr td.today.disabled:hover.disabled,
|
||||
.datepicker table tr td.today[disabled],
|
||||
.datepicker table tr td.today:hover[disabled],
|
||||
.datepicker table tr td.today.disabled[disabled],
|
||||
.datepicker table tr td.today.disabled:hover[disabled] {
|
||||
background-color: #fdf59a;
|
||||
}
|
||||
.datepicker table tr td.today:active,
|
||||
.datepicker table tr td.today:hover:active,
|
||||
.datepicker table tr td.today.disabled:active,
|
||||
.datepicker table tr td.today.disabled:hover:active,
|
||||
.datepicker table tr td.today.active,
|
||||
.datepicker table tr td.today:hover.active,
|
||||
.datepicker table tr td.today.disabled.active,
|
||||
.datepicker table tr td.today.disabled:hover.active {
|
||||
background-color: #fbf069 \9;
|
||||
}
|
||||
.datepicker table tr td.today:hover:hover {
|
||||
color: #000;
|
||||
}
|
||||
.datepicker table tr td.today.active:hover {
|
||||
color: #fff;
|
||||
}
|
||||
.datepicker table tr td.range,
|
||||
.datepicker table tr td.range:hover,
|
||||
.datepicker table tr td.range.disabled,
|
||||
.datepicker table tr td.range.disabled:hover {
|
||||
background: #eeeeee;
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.datepicker table tr td.range.today,
|
||||
.datepicker table tr td.range.today:hover,
|
||||
.datepicker table tr td.range.today.disabled,
|
||||
.datepicker table tr td.range.today.disabled:hover {
|
||||
background-color: #f3d17a;
|
||||
background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a);
|
||||
background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
|
||||
background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a);
|
||||
background-image: -o-linear-gradient(top, #f3c17a, #f3e97a);
|
||||
background-image: linear-gradient(top, #f3c17a, #f3e97a);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
|
||||
border-color: #f3e97a #f3e97a #edde34;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.datepicker table tr td.range.today:hover,
|
||||
.datepicker table tr td.range.today:hover:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover:hover,
|
||||
.datepicker table tr td.range.today:active,
|
||||
.datepicker table tr td.range.today:hover:active,
|
||||
.datepicker table tr td.range.today.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled:hover:active,
|
||||
.datepicker table tr td.range.today.active,
|
||||
.datepicker table tr td.range.today:hover.active,
|
||||
.datepicker table tr td.range.today.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled:hover.active,
|
||||
.datepicker table tr td.range.today.disabled,
|
||||
.datepicker table tr td.range.today:hover.disabled,
|
||||
.datepicker table tr td.range.today.disabled.disabled,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled,
|
||||
.datepicker table tr td.range.today[disabled],
|
||||
.datepicker table tr td.range.today:hover[disabled],
|
||||
.datepicker table tr td.range.today.disabled[disabled],
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled] {
|
||||
background-color: #f3e97a;
|
||||
}
|
||||
.datepicker table tr td.range.today:active,
|
||||
.datepicker table tr td.range.today:hover:active,
|
||||
.datepicker table tr td.range.today.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled:hover:active,
|
||||
.datepicker table tr td.range.today.active,
|
||||
.datepicker table tr td.range.today:hover.active,
|
||||
.datepicker table tr td.range.today.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled:hover.active {
|
||||
background-color: #efe24b \9;
|
||||
}
|
||||
.datepicker table tr td.selected,
|
||||
.datepicker table tr td.selected:hover,
|
||||
.datepicker table tr td.selected.disabled,
|
||||
.datepicker table tr td.selected.disabled:hover {
|
||||
background-color: #9e9e9e;
|
||||
background-image: -moz-linear-gradient(top, #b3b3b3, #808080);
|
||||
background-image: -ms-linear-gradient(top, #b3b3b3, #808080);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
|
||||
background-image: -webkit-linear-gradient(top, #b3b3b3, #808080);
|
||||
background-image: -o-linear-gradient(top, #b3b3b3, #808080);
|
||||
background-image: linear-gradient(top, #b3b3b3, #808080);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
|
||||
border-color: #808080 #808080 #595959;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td.selected:hover,
|
||||
.datepicker table tr td.selected:hover:hover,
|
||||
.datepicker table tr td.selected.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled:hover:hover,
|
||||
.datepicker table tr td.selected:active,
|
||||
.datepicker table tr td.selected:hover:active,
|
||||
.datepicker table tr td.selected.disabled:active,
|
||||
.datepicker table tr td.selected.disabled:hover:active,
|
||||
.datepicker table tr td.selected.active,
|
||||
.datepicker table tr td.selected:hover.active,
|
||||
.datepicker table tr td.selected.disabled.active,
|
||||
.datepicker table tr td.selected.disabled:hover.active,
|
||||
.datepicker table tr td.selected.disabled,
|
||||
.datepicker table tr td.selected:hover.disabled,
|
||||
.datepicker table tr td.selected.disabled.disabled,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled,
|
||||
.datepicker table tr td.selected[disabled],
|
||||
.datepicker table tr td.selected:hover[disabled],
|
||||
.datepicker table tr td.selected.disabled[disabled],
|
||||
.datepicker table tr td.selected.disabled:hover[disabled] {
|
||||
background-color: #808080;
|
||||
}
|
||||
.datepicker table tr td.selected:active,
|
||||
.datepicker table tr td.selected:hover:active,
|
||||
.datepicker table tr td.selected.disabled:active,
|
||||
.datepicker table tr td.selected.disabled:hover:active,
|
||||
.datepicker table tr td.selected.active,
|
||||
.datepicker table tr td.selected:hover.active,
|
||||
.datepicker table tr td.selected.disabled.active,
|
||||
.datepicker table tr td.selected.disabled:hover.active {
|
||||
background-color: #666666 \9;
|
||||
}
|
||||
.datepicker table tr td.active,
|
||||
.datepicker table tr td.active:hover,
|
||||
.datepicker table tr td.active.disabled,
|
||||
.datepicker table tr td.active.disabled:hover {
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(top, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td.active:hover,
|
||||
.datepicker table tr td.active:hover:hover,
|
||||
.datepicker table tr td.active.disabled:hover,
|
||||
.datepicker table tr td.active.disabled:hover:hover,
|
||||
.datepicker table tr td.active:active,
|
||||
.datepicker table tr td.active:hover:active,
|
||||
.datepicker table tr td.active.disabled:active,
|
||||
.datepicker table tr td.active.disabled:hover:active,
|
||||
.datepicker table tr td.active.active,
|
||||
.datepicker table tr td.active:hover.active,
|
||||
.datepicker table tr td.active.disabled.active,
|
||||
.datepicker table tr td.active.disabled:hover.active,
|
||||
.datepicker table tr td.active.disabled,
|
||||
.datepicker table tr td.active:hover.disabled,
|
||||
.datepicker table tr td.active.disabled.disabled,
|
||||
.datepicker table tr td.active.disabled:hover.disabled,
|
||||
.datepicker table tr td.active[disabled],
|
||||
.datepicker table tr td.active:hover[disabled],
|
||||
.datepicker table tr td.active.disabled[disabled],
|
||||
.datepicker table tr td.active.disabled:hover[disabled] {
|
||||
background-color: #0044cc;
|
||||
}
|
||||
.datepicker table tr td.active:active,
|
||||
.datepicker table tr td.active:hover:active,
|
||||
.datepicker table tr td.active.disabled:active,
|
||||
.datepicker table tr td.active.disabled:hover:active,
|
||||
.datepicker table tr td.active.active,
|
||||
.datepicker table tr td.active:hover.active,
|
||||
.datepicker table tr td.active.disabled.active,
|
||||
.datepicker table tr td.active.disabled:hover.active {
|
||||
background-color: #003399 \9;
|
||||
}
|
||||
.datepicker table tr td span {
|
||||
display: block;
|
||||
width: 23%;
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
float: left;
|
||||
margin: 1%;
|
||||
cursor: pointer;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.datepicker table tr td span:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.datepicker table tr td span.disabled,
|
||||
.datepicker table tr td span.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
.datepicker table tr td span.active,
|
||||
.datepicker table tr td span.active:hover,
|
||||
.datepicker table tr td span.active.disabled,
|
||||
.datepicker table tr td span.active.disabled:hover {
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(top, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td span.active:hover,
|
||||
.datepicker table tr td span.active:hover:hover,
|
||||
.datepicker table tr td span.active.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled:hover:hover,
|
||||
.datepicker table tr td span.active:active,
|
||||
.datepicker table tr td span.active:hover:active,
|
||||
.datepicker table tr td span.active.disabled:active,
|
||||
.datepicker table tr td span.active.disabled:hover:active,
|
||||
.datepicker table tr td span.active.active,
|
||||
.datepicker table tr td span.active:hover.active,
|
||||
.datepicker table tr td span.active.disabled.active,
|
||||
.datepicker table tr td span.active.disabled:hover.active,
|
||||
.datepicker table tr td span.active.disabled,
|
||||
.datepicker table tr td span.active:hover.disabled,
|
||||
.datepicker table tr td span.active.disabled.disabled,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled,
|
||||
.datepicker table tr td span.active[disabled],
|
||||
.datepicker table tr td span.active:hover[disabled],
|
||||
.datepicker table tr td span.active.disabled[disabled],
|
||||
.datepicker table tr td span.active.disabled:hover[disabled] {
|
||||
background-color: #0044cc;
|
||||
}
|
||||
.datepicker table tr td span.active:active,
|
||||
.datepicker table tr td span.active:hover:active,
|
||||
.datepicker table tr td span.active.disabled:active,
|
||||
.datepicker table tr td span.active.disabled:hover:active,
|
||||
.datepicker table tr td span.active.active,
|
||||
.datepicker table tr td span.active:hover.active,
|
||||
.datepicker table tr td span.active.disabled.active,
|
||||
.datepicker table tr td span.active.disabled:hover.active {
|
||||
background-color: #003399 \9;
|
||||
}
|
||||
.datepicker table tr td span.old,
|
||||
.datepicker table tr td span.new {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker th.datepicker-switch {
|
||||
width: 145px;
|
||||
}
|
||||
.datepicker thead tr:first-child th,
|
||||
.datepicker tfoot tr th {
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker thead tr:first-child th:hover,
|
||||
.datepicker tfoot tr th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.datepicker .cw {
|
||||
font-size: 10px;
|
||||
width: 12px;
|
||||
padding: 0 2px 0 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.datepicker thead tr:first-child th.cw {
|
||||
cursor: default;
|
||||
background-color: transparent;
|
||||
}
|
||||
.input-append.date .add-on i,
|
||||
.input-prepend.date .add-on i {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
.input-daterange input {
|
||||
text-align: center;
|
||||
}
|
||||
.input-daterange input:first-child {
|
||||
-webkit-border-radius: 3px 0 0 3px;
|
||||
-moz-border-radius: 3px 0 0 3px;
|
||||
border-radius: 3px 0 0 3px;
|
||||
}
|
||||
.input-daterange input:last-child {
|
||||
-webkit-border-radius: 0 3px 3px 0;
|
||||
-moz-border-radius: 0 3px 3px 0;
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
.input-daterange .add-on {
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
min-width: 16px;
|
||||
height: 18px;
|
||||
padding: 4px 5px;
|
||||
font-weight: normal;
|
||||
line-height: 18px;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 0 #ffffff;
|
||||
vertical-align: middle;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #ccc;
|
||||
margin-left: -5px;
|
||||
margin-right: -5px;
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
$(function(){
|
||||
//ajax mocks
|
||||
$.mockjaxSettings.responseTime = 500;
|
||||
|
||||
$.mockjax({
|
||||
url: '/post',
|
||||
response: function(settings) {
|
||||
log(settings, this);
|
||||
}
|
||||
});
|
||||
|
||||
$.mockjax({
|
||||
url: '/error',
|
||||
status: 400,
|
||||
statusText: 'Bad Request',
|
||||
response: function(settings) {
|
||||
this.responseText = 'Please input correct value';
|
||||
log(settings, this);
|
||||
}
|
||||
});
|
||||
|
||||
$.mockjax({
|
||||
url: '/status',
|
||||
status: 500,
|
||||
response: function(settings) {
|
||||
this.responseText = 'Internal Server Error';
|
||||
log(settings, this);
|
||||
}
|
||||
});
|
||||
|
||||
$.mockjax({
|
||||
url: '/groups',
|
||||
response: function(settings) {
|
||||
this.responseText = [
|
||||
{value: 0, text: 'Guest'},
|
||||
{value: 1, text: 'Service'},
|
||||
{value: 2, text: 'Customer'},
|
||||
{value: 3, text: 'Operator'},
|
||||
{value: 4, text: 'Support'},
|
||||
{value: 5, text: 'Admin'}
|
||||
];
|
||||
log(settings, this);
|
||||
}
|
||||
});
|
||||
|
||||
function log(settings, response) {
|
||||
var s = [], str;
|
||||
s.push(settings.type.toUpperCase() + ' url = "' + settings.url + '"');
|
||||
for(var a in settings.data) {
|
||||
if(settings.data[a] && typeof settings.data[a] === 'object') {
|
||||
str = [];
|
||||
for(var j in settings.data[a]) {str.push(j+': "'+settings.data[a][j]+'"');}
|
||||
str = '{ '+str.join(', ')+' }';
|
||||
} else {
|
||||
str = '"'+settings.data[a]+'"';
|
||||
}
|
||||
s.push(a + ' = ' + str);
|
||||
}
|
||||
s.push('RESPONSE: status = ' + response.status);
|
||||
|
||||
if(response.responseText) {
|
||||
if($.isArray(response.responseText)) {
|
||||
s.push('[');
|
||||
$.each(response.responseText, function(i, v){
|
||||
s.push('{value: ' + v.value+', text: "'+v.text+'"}');
|
||||
});
|
||||
s.push(']');
|
||||
} else {
|
||||
s.push($.trim(response.responseText));
|
||||
}
|
||||
}
|
||||
s.push('--------------------------------------\n');
|
||||
$('#console').val(s.join('\n') + $('#console').val());
|
||||
}
|
||||
|
||||
});
|
@ -0,0 +1,521 @@
|
||||
/*!
|
||||
* MockJax - jQuery Plugin to Mock Ajax requests
|
||||
*
|
||||
* Version: 1.5.0pre
|
||||
* Released:
|
||||
* Home: http://github.com/appendto/jquery-mockjax
|
||||
* Author: Jonathan Sharp (http://jdsharp.com)
|
||||
* License: MIT,GPL
|
||||
*
|
||||
* Copyright (c) 2011 appendTo LLC.
|
||||
* Dual licensed under the MIT or GPL licenses.
|
||||
* http://appendto.com/open-source-licenses
|
||||
*/
|
||||
(function($) {
|
||||
var _ajax = $.ajax,
|
||||
mockHandlers = [],
|
||||
CALLBACK_REGEX = /=\?(&|$)/,
|
||||
jsc = (new Date()).getTime();
|
||||
|
||||
|
||||
// Parse the given XML string.
|
||||
function parseXML(xml) {
|
||||
if ( window['DOMParser'] == undefined && window.ActiveXObject ) {
|
||||
DOMParser = function() { };
|
||||
DOMParser.prototype.parseFromString = function( xmlString ) {
|
||||
var doc = new ActiveXObject('Microsoft.XMLDOM');
|
||||
doc.async = 'false';
|
||||
doc.loadXML( xmlString );
|
||||
return doc;
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
var xmlDoc = ( new DOMParser() ).parseFromString( xml, 'text/xml' );
|
||||
if ( $.isXMLDoc( xmlDoc ) ) {
|
||||
var err = $('parsererror', xmlDoc);
|
||||
if ( err.length == 1 ) {
|
||||
throw('Error: ' + $(xmlDoc).text() );
|
||||
}
|
||||
} else {
|
||||
throw('Unable to parse XML');
|
||||
}
|
||||
} catch( e ) {
|
||||
var msg = ( e.name == undefined ? e : e.name + ': ' + e.message );
|
||||
$(document).trigger('xmlParseError', [ msg ]);
|
||||
return undefined;
|
||||
}
|
||||
return xmlDoc;
|
||||
}
|
||||
|
||||
// Trigger a jQuery event
|
||||
function trigger(s, type, args) {
|
||||
(s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);
|
||||
}
|
||||
|
||||
// Check if the data field on the mock handler and the request match. This
|
||||
// can be used to restrict a mock handler to being used only when a certain
|
||||
// set of data is passed to it.
|
||||
function isMockDataEqual( mock, live ) {
|
||||
var identical = false;
|
||||
// Test for situations where the data is a querystring (not an object)
|
||||
if (typeof live === 'string') {
|
||||
// Querystring may be a regex
|
||||
return $.isFunction( mock.test ) ? mock.test(live) : mock == live;
|
||||
}
|
||||
$.each(mock, function(k, v) {
|
||||
if ( live[k] === undefined ) {
|
||||
identical = false;
|
||||
return identical;
|
||||
} else {
|
||||
identical = true;
|
||||
if ( typeof live[k] == 'object' ) {
|
||||
return isMockDataEqual(mock[k], live[k]);
|
||||
} else {
|
||||
if ( $.isFunction( mock[k].test ) ) {
|
||||
identical = mock[k].test(live[k]);
|
||||
} else {
|
||||
identical = ( mock[k] == live[k] );
|
||||
}
|
||||
return identical;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return identical;
|
||||
}
|
||||
|
||||
// Check the given handler should mock the given request
|
||||
function getMockForRequest( handler, requestSettings ) {
|
||||
// If the mock was registered with a function, let the function decide if we
|
||||
// want to mock this request
|
||||
if ( $.isFunction(handler) ) {
|
||||
return handler( requestSettings );
|
||||
}
|
||||
|
||||
// Inspect the URL of the request and check if the mock handler's url
|
||||
// matches the url for this ajax request
|
||||
if ( $.isFunction(handler.url.test) ) {
|
||||
// The user provided a regex for the url, test it
|
||||
if ( !handler.url.test( requestSettings.url ) ) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// Look for a simple wildcard '*' or a direct URL match
|
||||
var star = handler.url.indexOf('*');
|
||||
if (handler.url !== requestSettings.url && star === -1 ||
|
||||
!new RegExp(handler.url.replace(/[-[\]{}()+?.,\\^$|#\s]/g, "\\$&").replace('*', '.+')).test(requestSettings.url)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Inspect the data submitted in the request (either POST body or GET query string)
|
||||
if ( handler.data && requestSettings.data ) {
|
||||
if ( !isMockDataEqual(handler.data, requestSettings.data) ) {
|
||||
// They're not identical, do not mock this request
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// Inspect the request type
|
||||
if ( handler && handler.type &&
|
||||
handler.type.toLowerCase() != requestSettings.type.toLowerCase() ) {
|
||||
// The request type doesn't match (GET vs. POST)
|
||||
return null;
|
||||
}
|
||||
|
||||
return handler;
|
||||
}
|
||||
|
||||
// If logging is enabled, log the mock to the console
|
||||
function logMock( mockHandler, requestSettings ) {
|
||||
var c = $.extend({}, $.mockjaxSettings, mockHandler);
|
||||
if ( c.log && $.isFunction(c.log) ) {
|
||||
c.log('MOCK ' + requestSettings.type.toUpperCase() + ': ' + requestSettings.url, $.extend({}, requestSettings));
|
||||
}
|
||||
}
|
||||
|
||||
// Process the xhr objects send operation
|
||||
function _xhrSend(mockHandler, requestSettings, origSettings) {
|
||||
|
||||
// This is a substitute for < 1.4 which lacks $.proxy
|
||||
var process = (function(that) {
|
||||
return function() {
|
||||
return (function() {
|
||||
// The request has returned
|
||||
this.status = mockHandler.status;
|
||||
this.statusText = mockHandler.statusText;
|
||||
this.readyState = 4;
|
||||
|
||||
// We have an executable function, call it to give
|
||||
// the mock handler a chance to update it's data
|
||||
if ( $.isFunction(mockHandler.response) ) {
|
||||
mockHandler.response(origSettings);
|
||||
}
|
||||
// Copy over our mock to our xhr object before passing control back to
|
||||
// jQuery's onreadystatechange callback
|
||||
if ( requestSettings.dataType == 'json' && ( typeof mockHandler.responseText == 'object' ) ) {
|
||||
this.responseText = JSON.stringify(mockHandler.responseText);
|
||||
} else if ( requestSettings.dataType == 'xml' ) {
|
||||
if ( typeof mockHandler.responseXML == 'string' ) {
|
||||
this.responseXML = parseXML(mockHandler.responseXML);
|
||||
} else {
|
||||
this.responseXML = mockHandler.responseXML;
|
||||
}
|
||||
} else {
|
||||
this.responseText = mockHandler.responseText;
|
||||
}
|
||||
if( typeof mockHandler.status == 'number' || typeof mockHandler.status == 'string' ) {
|
||||
this.status = mockHandler.status;
|
||||
}
|
||||
if( typeof mockHandler.statusText === "string") {
|
||||
this.statusText = mockHandler.statusText;
|
||||
}
|
||||
// jQuery < 1.4 doesn't have onreadystate change for xhr
|
||||
if ( $.isFunction(this.onreadystatechange) ) {
|
||||
if( mockHandler.isTimeout) {
|
||||
this.status = -1;
|
||||
}
|
||||
this.onreadystatechange( mockHandler.isTimeout ? 'timeout' : undefined );
|
||||
} else if ( mockHandler.isTimeout ) {
|
||||
// Fix for 1.3.2 timeout to keep success from firing.
|
||||
this.status = -1;
|
||||
}
|
||||
}).apply(that);
|
||||
};
|
||||
})(this);
|
||||
|
||||
if ( mockHandler.proxy ) {
|
||||
// We're proxying this request and loading in an external file instead
|
||||
_ajax({
|
||||
global: false,
|
||||
url: mockHandler.proxy,
|
||||
type: mockHandler.proxyType,
|
||||
data: mockHandler.data,
|
||||
dataType: requestSettings.dataType === "script" ? "text/plain" : requestSettings.dataType,
|
||||
complete: function(xhr, txt) {
|
||||
mockHandler.responseXML = xhr.responseXML;
|
||||
mockHandler.responseText = xhr.responseText;
|
||||
mockHandler.status = xhr.status;
|
||||
mockHandler.statusText = xhr.statusText;
|
||||
this.responseTimer = setTimeout(process, mockHandler.responseTime || 0);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// type == 'POST' || 'GET' || 'DELETE'
|
||||
if ( requestSettings.async === false ) {
|
||||
// TODO: Blocking delay
|
||||
process();
|
||||
} else {
|
||||
this.responseTimer = setTimeout(process, mockHandler.responseTime || 50);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Construct a mocked XHR Object
|
||||
function xhr(mockHandler, requestSettings, origSettings, origHandler) {
|
||||
// Extend with our default mockjax settings
|
||||
mockHandler = $.extend({}, $.mockjaxSettings, mockHandler);
|
||||
|
||||
if (typeof mockHandler.headers === 'undefined') {
|
||||
mockHandler.headers = {};
|
||||
}
|
||||
if ( mockHandler.contentType ) {
|
||||
mockHandler.headers['content-type'] = mockHandler.contentType;
|
||||
}
|
||||
|
||||
return {
|
||||
status: mockHandler.status,
|
||||
statusText: mockHandler.statusText,
|
||||
readyState: 1,
|
||||
open: function() { },
|
||||
send: function() {
|
||||
origHandler.fired = true;
|
||||
_xhrSend.call(this, mockHandler, requestSettings, origSettings);
|
||||
},
|
||||
abort: function() {
|
||||
clearTimeout(this.responseTimer);
|
||||
},
|
||||
setRequestHeader: function(header, value) {
|
||||
mockHandler.headers[header] = value;
|
||||
},
|
||||
getResponseHeader: function(header) {
|
||||
// 'Last-modified', 'Etag', 'content-type' are all checked by jQuery
|
||||
if ( mockHandler.headers && mockHandler.headers[header] ) {
|
||||
// Return arbitrary headers
|
||||
return mockHandler.headers[header];
|
||||
} else if ( header.toLowerCase() == 'last-modified' ) {
|
||||
return mockHandler.lastModified || (new Date()).toString();
|
||||
} else if ( header.toLowerCase() == 'etag' ) {
|
||||
return mockHandler.etag || '';
|
||||
} else if ( header.toLowerCase() == 'content-type' ) {
|
||||
return mockHandler.contentType || 'text/plain';
|
||||
}
|
||||
},
|
||||
getAllResponseHeaders: function() {
|
||||
var headers = '';
|
||||
$.each(mockHandler.headers, function(k, v) {
|
||||
headers += k + ': ' + v + "\n";
|
||||
});
|
||||
return headers;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Process a JSONP mock request.
|
||||
function processJsonpMock( requestSettings, mockHandler, origSettings ) {
|
||||
// Handle JSONP Parameter Callbacks, we need to replicate some of the jQuery core here
|
||||
// because there isn't an easy hook for the cross domain script tag of jsonp
|
||||
|
||||
processJsonpUrl( requestSettings );
|
||||
|
||||
requestSettings.dataType = "json";
|
||||
if(requestSettings.data && CALLBACK_REGEX.test(requestSettings.data) || CALLBACK_REGEX.test(requestSettings.url)) {
|
||||
createJsonpCallback(requestSettings, mockHandler);
|
||||
|
||||
// We need to make sure
|
||||
// that a JSONP style response is executed properly
|
||||
|
||||
var rurl = /^(\w+:)?\/\/([^\/?#]+)/,
|
||||
parts = rurl.exec( requestSettings.url ),
|
||||
remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
|
||||
|
||||
requestSettings.dataType = "script";
|
||||
if(requestSettings.type.toUpperCase() === "GET" && remote ) {
|
||||
var newMockReturn = processJsonpRequest( requestSettings, mockHandler, origSettings );
|
||||
|
||||
// Check if we are supposed to return a Deferred back to the mock call, or just
|
||||
// signal success
|
||||
if(newMockReturn) {
|
||||
return newMockReturn;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Append the required callback parameter to the end of the request URL, for a JSONP request
|
||||
function processJsonpUrl( requestSettings ) {
|
||||
if ( requestSettings.type.toUpperCase() === "GET" ) {
|
||||
if ( !CALLBACK_REGEX.test( requestSettings.url ) ) {
|
||||
requestSettings.url += (/\?/.test( requestSettings.url ) ? "&" : "?") +
|
||||
(requestSettings.jsonp || "callback") + "=?";
|
||||
}
|
||||
} else if ( !requestSettings.data || !CALLBACK_REGEX.test(requestSettings.data) ) {
|
||||
requestSettings.data = (requestSettings.data ? requestSettings.data + "&" : "") + (requestSettings.jsonp || "callback") + "=?";
|
||||
}
|
||||
}
|
||||
|
||||
// Process a JSONP request by evaluating the mocked response text
|
||||
function processJsonpRequest( requestSettings, mockHandler, origSettings ) {
|
||||
// Synthesize the mock request for adding a script tag
|
||||
var callbackContext = origSettings && origSettings.context || requestSettings,
|
||||
newMock = null;
|
||||
|
||||
|
||||
// If the response handler on the moock is a function, call it
|
||||
if ( mockHandler.response && $.isFunction(mockHandler.response) ) {
|
||||
mockHandler.response(origSettings);
|
||||
} else {
|
||||
|
||||
// Evaluate the responseText javascript in a global context
|
||||
if( typeof mockHandler.responseText === 'object' ) {
|
||||
$.globalEval( '(' + JSON.stringify( mockHandler.responseText ) + ')');
|
||||
} else {
|
||||
$.globalEval( '(' + mockHandler.responseText + ')');
|
||||
}
|
||||
}
|
||||
|
||||
// Successful response
|
||||
jsonpSuccess( requestSettings, mockHandler );
|
||||
jsonpComplete( requestSettings, mockHandler );
|
||||
|
||||
// If we are running under jQuery 1.5+, return a deferred object
|
||||
if(jQuery.Deferred){
|
||||
newMock = new jQuery.Deferred();
|
||||
if(typeof mockHandler.responseText == "object"){
|
||||
newMock.resolve( mockHandler.responseText );
|
||||
}
|
||||
else{
|
||||
newMock.resolve( jQuery.parseJSON( mockHandler.responseText ) );
|
||||
}
|
||||
}
|
||||
return newMock;
|
||||
}
|
||||
|
||||
|
||||
// Create the required JSONP callback function for the request
|
||||
function createJsonpCallback( requestSettings, mockHandler ) {
|
||||
jsonp = requestSettings.jsonpCallback || ("jsonp" + jsc++);
|
||||
|
||||
// Replace the =? sequence both in the query string and the data
|
||||
if ( requestSettings.data ) {
|
||||
requestSettings.data = (requestSettings.data + "").replace(CALLBACK_REGEX, "=" + jsonp + "$1");
|
||||
}
|
||||
|
||||
requestSettings.url = requestSettings.url.replace(CALLBACK_REGEX, "=" + jsonp + "$1");
|
||||
|
||||
|
||||
// Handle JSONP-style loading
|
||||
window[ jsonp ] = window[ jsonp ] || function( tmp ) {
|
||||
data = tmp;
|
||||
jsonpSuccess( requestSettings, mockHandler );
|
||||
jsonpComplete( requestSettings, mockHandler );
|
||||
// Garbage collect
|
||||
window[ jsonp ] = undefined;
|
||||
|
||||
try {
|
||||
delete window[ jsonp ];
|
||||
} catch(e) {}
|
||||
|
||||
if ( head ) {
|
||||
head.removeChild( script );
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// The JSONP request was successful
|
||||
function jsonpSuccess(requestSettings, mockHandler) {
|
||||
// If a local callback was specified, fire it and pass it the data
|
||||
if ( requestSettings.success ) {
|
||||
requestSettings.success.call( callbackContext, ( mockHandler.response ? mockHandler.response.toString() : mockHandler.responseText || ''), status, {} );
|
||||
}
|
||||
|
||||
// Fire the global callback
|
||||
if ( requestSettings.global ) {
|
||||
trigger(requestSettings, "ajaxSuccess", [{}, requestSettings] );
|
||||
}
|
||||
}
|
||||
|
||||
// The JSONP request was completed
|
||||
function jsonpComplete(requestSettings, mockHandler) {
|
||||
// Process result
|
||||
if ( requestSettings.complete ) {
|
||||
requestSettings.complete.call( callbackContext, {} , status );
|
||||
}
|
||||
|
||||
// The request was completed
|
||||
if ( requestSettings.global ) {
|
||||
trigger( "ajaxComplete", [{}, requestSettings] );
|
||||
}
|
||||
|
||||
// Handle the global AJAX counter
|
||||
if ( requestSettings.global && ! --jQuery.active ) {
|
||||
jQuery.event.trigger( "ajaxStop" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// The core $.ajax replacement.
|
||||
function handleAjax( url, origSettings ) {
|
||||
var mockRequest, requestSettings, mockHandler;
|
||||
|
||||
// If url is an object, simulate pre-1.5 signature
|
||||
if ( typeof url === "object" ) {
|
||||
origSettings = url;
|
||||
url = undefined;
|
||||
} else {
|
||||
// work around to support 1.5 signature
|
||||
origSettings.url = url;
|
||||
}
|
||||
|
||||
// Extend the original settings for the request
|
||||
requestSettings = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
|
||||
|
||||
// Iterate over our mock handlers (in registration order) until we find
|
||||
// one that is willing to intercept the request
|
||||
for(var k = 0; k < mockHandlers.length; k++) {
|
||||
if ( !mockHandlers[k] ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
mockHandler = getMockForRequest( mockHandlers[k], requestSettings );
|
||||
if(!mockHandler) {
|
||||
// No valid mock found for this request
|
||||
continue;
|
||||
}
|
||||
|
||||
// Handle console logging
|
||||
logMock( mockHandler, requestSettings );
|
||||
|
||||
|
||||
if ( requestSettings.dataType === "jsonp" ) {
|
||||
if ((mockRequest = processJsonpMock( requestSettings, mockHandler, origSettings ))) {
|
||||
// This mock will handle the JSONP request
|
||||
return mockRequest;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Removed to fix #54 - keep the mocking data object intact
|
||||
//mockHandler.data = requestSettings.data;
|
||||
|
||||
mockHandler.cache = requestSettings.cache;
|
||||
mockHandler.timeout = requestSettings.timeout;
|
||||
mockHandler.global = requestSettings.global;
|
||||
|
||||
(function(mockHandler, requestSettings, origSettings, origHandler) {
|
||||
mockRequest = _ajax.call($, $.extend(true, {}, origSettings, {
|
||||
// Mock the XHR object
|
||||
xhr: function() { return xhr( mockHandler, requestSettings, origSettings, origHandler ) }
|
||||
}));
|
||||
})(mockHandler, requestSettings, origSettings, mockHandlers[k]);
|
||||
|
||||
return mockRequest;
|
||||
}
|
||||
|
||||
// We don't have a mock request, trigger a normal request
|
||||
return _ajax.apply($, [origSettings]);
|
||||
}
|
||||
|
||||
|
||||
// Public
|
||||
|
||||
$.extend({
|
||||
ajax: handleAjax
|
||||
});
|
||||
|
||||
$.mockjaxSettings = {
|
||||
//url: null,
|
||||
//type: 'GET',
|
||||
log: function(msg) {
|
||||
window['console'] && window.console.log && window.console.log(msg);
|
||||
},
|
||||
status: 200,
|
||||
statusText: "OK",
|
||||
responseTime: 500,
|
||||
isTimeout: false,
|
||||
contentType: 'text/plain',
|
||||
response: '',
|
||||
responseText: '',
|
||||
responseXML: '',
|
||||
proxy: '',
|
||||
proxyType: 'GET',
|
||||
|
||||
lastModified: null,
|
||||
etag: '',
|
||||
headers: {
|
||||
etag: 'IJF@H#@923uf8023hFO@I#H#',
|
||||
'content-type' : 'text/plain'
|
||||
}
|
||||
};
|
||||
|
||||
$.mockjax = function(settings) {
|
||||
var i = mockHandlers.length;
|
||||
mockHandlers[i] = settings;
|
||||
return i;
|
||||
};
|
||||
$.mockjaxClear = function(i) {
|
||||
if ( arguments.length == 1 ) {
|
||||
mockHandlers[i] = null;
|
||||
} else {
|
||||
mockHandlers = [];
|
||||
}
|
||||
};
|
||||
$.mockjax.handler = function(i) {
|
||||
if ( arguments.length == 1 ) {
|
||||
return mockHandlers[i];
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
After Width: | Height: | Size: 509 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 62 KiB |