Updated version of jQuery.Gantt

This commit is contained in:
neyric 2013-09-25 18:54:14 +02:00
Родитель 48eaadd45f
Коммит d9ad070461
18 изменённых файлов: 945 добавлений и 607 удалений

Просмотреть файл

@ -4,9 +4,8 @@
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Github issues Gantt</title>
<meta charset="utf-8">
<link rel="stylesheet" href="http://taitems.github.com/jQuery.Gantt/css/style.css">
<link rel="stylesheet" href="/lib/jQuery.Gantt/css/style.css">
<link rel="stylesheet" href="/stylesheets/style.css">
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
</head>
<body>
@ -26,10 +25,8 @@
<div class="gantt-dev"></div>
</div>
<script src="/lib/jquery-1.7.2.min.js"></script>
<script src="/lib/jquery.fn.gantt.js"></script>
<script src="/lib/bootstrap-tooltip.js"></script>
<script src="/lib/bootstrap-popover.js"></script>
<script src="/lib/jquery-1.10.2.min.js"></script>
<script src="/lib/jQuery.Gantt/js/jquery.fn.gantt.min.js"></script>
<!-- From server -->
<script src="/issues.js"></script>
@ -41,13 +38,6 @@
<script>
$(function() {
"use strict";
$("#refresh-button").on("click", function () {
$.ajax('/trigger_refresh', {
success: function () { window.location.reload(); }
});
});
Planning.init();
});
</script>

114
public/lib/bootstrap-popover.js поставляемый
Просмотреть файл

@ -1,114 +0,0 @@
/* ===========================================================
* bootstrap-popover.js v2.2.2
* http://twitter.github.com/bootstrap/javascript.html#popovers
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* 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"; // jshint ;_;
/* POPOVER PUBLIC CLASS DEFINITION
* =============================== */
var Popover = function (element, options) {
this.init('popover', element, options)
}
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
========================================== */
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
constructor: Popover
, setContent: function () {
var $tip = this.tip()
, title = this.getTitle()
, content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
$tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
$tip.removeClass('fade top bottom left right in')
}
, hasContent: function () {
return this.getTitle() || this.getContent()
}
, getContent: function () {
var content
, $e = this.$element
, o = this.options
content = $e.attr('data-content')
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
return content
}
, tip: function () {
if (!this.$tip) {
this.$tip = $(this.options.template)
}
return this.$tip
}
, destroy: function () {
this.hide().$element.off('.' + this.type).removeData(this.type)
}
})
/* POPOVER PLUGIN DEFINITION
* ======================= */
var old = $.fn.popover
$.fn.popover = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('popover')
, options = typeof option == 'object' && option
if (!data) $this.data('popover', (data = new Popover(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.popover.Constructor = Popover
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
placement: 'right'
, trigger: 'click'
, content: ''
, template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"></div></div></div>'
})
/* POPOVER NO CONFLICT
* =================== */
$.fn.popover.noConflict = function () {
$.fn.popover = old
return this
}
}(window.jQuery);

287
public/lib/bootstrap-tooltip.js поставляемый
Просмотреть файл

@ -1,287 +0,0 @@
/* ===========================================================
* bootstrap-tooltip.js v2.2.2
* http://twitter.github.com/bootstrap/javascript.html#tooltips
* Inspired by the original jQuery.tipsy by Jason Frame
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* 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"; // jshint ;_;
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var Tooltip = function (element, options) {
this.init('tooltip', element, options)
}
Tooltip.prototype = {
constructor: Tooltip
, init: function (type, element, options) {
var eventIn
, eventOut
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
this.enabled = true
if (this.options.trigger == 'click') {
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
} else if (this.options.trigger != 'manual') {
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
}
this.options.selector ?
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
this.fixTitle()
}
, getOptions: function (options) {
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
if (options.delay && typeof options.delay == 'number') {
options.delay = {
show: options.delay
, hide: options.delay
}
}
return options
}
, enter: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (!self.options.delay || !self.options.delay.show) return self.show()
clearTimeout(this.timeout)
self.hoverState = 'in'
this.timeout = setTimeout(function() {
if (self.hoverState == 'in') self.show()
}, self.options.delay.show)
}
, leave: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (this.timeout) clearTimeout(this.timeout)
if (!self.options.delay || !self.options.delay.hide) return self.hide()
self.hoverState = 'out'
this.timeout = setTimeout(function() {
if (self.hoverState == 'out') self.hide()
}, self.options.delay.hide)
}
, show: function () {
var $tip
, inside
, pos
, actualWidth
, actualHeight
, placement
, tp
if (this.hasContent() && this.enabled) {
$tip = this.tip()
this.setContent()
if (this.options.animation) {
$tip.addClass('fade')
}
placement = typeof this.options.placement == 'function' ?
this.options.placement.call(this, $tip[0], this.$element[0]) :
this.options.placement
inside = /in/.test(placement)
$tip
.detach()
.css({ top: 0, left: 0, display: 'block' })
.insertAfter(this.$element)
pos = this.getPosition(inside)
actualWidth = $tip[0].offsetWidth
actualHeight = $tip[0].offsetHeight
switch (inside ? placement.split(' ')[1] : placement) {
case 'bottom':
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'top':
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'left':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
break
case 'right':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
break
}
$tip
.offset(tp)
.addClass(placement)
.addClass('in')
}
}
, setContent: function () {
var $tip = this.tip()
, title = this.getTitle()
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
$tip.removeClass('fade in top bottom left right')
}
, hide: function () {
var that = this
, $tip = this.tip()
$tip.removeClass('in')
function removeWithAnimation() {
var timeout = setTimeout(function () {
$tip.off($.support.transition.end).detach()
}, 500)
$tip.one($.support.transition.end, function () {
clearTimeout(timeout)
$tip.detach()
})
}
$.support.transition && this.$tip.hasClass('fade') ?
removeWithAnimation() :
$tip.detach()
return this
}
, fixTitle: function () {
var $e = this.$element
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
}
}
, hasContent: function () {
return this.getTitle()
}
, getPosition: function (inside) {
return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
width: this.$element[0].offsetWidth
, height: this.$element[0].offsetHeight
})
}
, getTitle: function () {
var title
, $e = this.$element
, o = this.options
title = $e.attr('data-original-title')
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
return title
}
, tip: function () {
return this.$tip = this.$tip || $(this.options.template)
}
, validate: function () {
if (!this.$element[0].parentNode) {
this.hide()
this.$element = null
this.options = null
}
}
, enable: function () {
this.enabled = true
}
, disable: function () {
this.enabled = false
}
, toggleEnabled: function () {
this.enabled = !this.enabled
}
, toggle: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
self[self.tip().hasClass('in') ? 'hide' : 'show']()
}
, destroy: function () {
this.hide().$element.off('.' + this.type).removeData(this.type)
}
}
/* TOOLTIP PLUGIN DEFINITION
* ========================= */
var old = $.fn.tooltip
$.fn.tooltip = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tooltip')
, options = typeof option == 'object' && option
if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tooltip.Constructor = Tooltip
$.fn.tooltip.defaults = {
animation: true
, placement: 'top'
, selector: false
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
, trigger: 'hover'
, title: ''
, delay: 0
, html: false
}
/* TOOLTIP NO CONFLICT
* =================== */
$.fn.tooltip.noConflict = function () {
$.fn.tooltip = old
return this
}
}(window.jQuery);

Просмотреть файл

@ -0,0 +1,23 @@
[Demo and Documentation](http://taitems.github.com/jQuery.Gantt/)
==============
jQuery Gantt Chart is a simple chart that implements gantt functionality as
a jQuery component.
It's able to:
- Read json data
- Paging results
- Display different colours for each task
- Display short description as hints
- Mark holidays
Plugin was tested and should work on:
- Firefox 4+
- Chrome 13+
- Safari 5+
- Opera 9+
- IE 8+
Distributed under an MIT license.

Просмотреть файл

@ -0,0 +1,426 @@
.gantt, .gantt2 {
width: 100%;
margin: 20px auto;
border: 14px solid #ddd;
position: relative;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.gantt:after {
content: ".";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
.fn-gantt {
width: 100%;
}
.fn-gantt .fn-content {
overflow: hidden;
position: relative;
width: 100%;
}
/* === LEFT PANEL === */
.fn-gantt .leftPanel {
float: left;
width: 225px;
overflow: hidden;
border-right: 1px solid #DDD;
position: relative;
z-index: 20;
}
.fn-gantt .row {
float: left;
height: 24px;
line-height: 24px;
margin-left: -1px;
}
.fn-gantt .leftPanel .fn-label {
display: inline-block;
margin: 0 0 0 5px;
color: #484A4D;
width: 110px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.fn-gantt .leftPanel .row0 {
border-top: 1px solid #DDD;
}
.fn-gantt .leftPanel .name, .fn-gantt .leftPanel .desc {
float: left;
height: 23px;
margin: 0;
border-bottom: 1px solid #DDD;
background-color: #f6f6f6;
}
.fn-gantt .leftPanel .name {
width: 110px;
font-weight: bold;
}
.fn-gantt .leftPanel .desc {
width: 115px;
}
.fn-gantt .leftPanel .fn-wide, .fn-gantt .leftPanel .fn-wide .fn-label {
width: 225px;
}
.fn-gantt .spacer {
margin: -2px 0 1px 0;
border-bottom: none;
background-color: #f6f6f6;
}
/* === RIGHT PANEL === */
.fn-gantt .rightPanel {
overflow: hidden;
}
.fn-gantt .dataPanel {
margin-left: 0px;
border-right: 1px solid #DDD;
background-image: url(../img/grid.png);
background-repeat: repeat;
background-position: 24px 24px;
}
.fn-gantt .day, .fn-gantt .date {
overflow: visible;
width: 24px;
line-height: 24px;
text-align: center;
border-left: 1px solid #DDD;
border-bottom: 1px solid #DDD;
margin: -1px 0 0 -1px;
font-size: 11px;
color: #484a4d;
text-shadow: 0 1px 0 rgba(255,255,255,0.75);
text-align: center;
}
.fn-gantt .holiday {
background-color: #ffd263;
height: 23px;
margin: 0 0 -1px -1px;
}
.fn-gantt .today {
background-color: #fff8da;
height: 23px;
margin: 0 0 -1px -1px;
font-weight: bold;
text-align: center;
}
.fn-gantt .sa, .fn-gantt .sn, .fn-gantt .wd {
height: 23px;
margin: 0 0 0 -1px;
text-align: center;
}
.fn-gantt .sa, .fn-gantt .sn {
color: #939496;
background-color: #f5f5f5;
text-align: center;
}
.fn-gantt .wd {
background-color: #f6f6f6;
text-align: center;
}
.fn-gantt .rightPanel .month, .fn-gantt .rightPanel .year {
float: left;
overflow: hidden;
border-left: 1px solid #DDD;
border-bottom: 1px solid #DDD;
height: 23px;
margin: 0 0 0 -1px;
background-color: #f6f6f6;
font-weight: bold;
font-size: 11px;
color: #484a4d;
text-shadow: 0 1px 0 rgba(255,255,255,0.75);
text-align: center;
}
.fn-gantt-hint {
border: 5px solid #edc332;
background-color: #fff5d4;
padding: 10px;
position: absolute;
display: none;
z-index: 11;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.fn-gantt .bar {
background-color: #D0E4FD;
height: 18px;
margin: 4px 3px 3px 3px;
position: absolute;
z-index: 10;
text-align: center;
-webkit-box-shadow: 0 0 1px rgba(0,0,0,0.25) inset;
-moz-box-shadow: 0 0 1px rgba(0,0,0,0.25) inset;
box-shadow: 0 0 1px rgba(0,0,0,0.25) inset;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.fn-gantt .bar .fn-label {
line-height: 18px;
font-weight: bold;
white-space: nowrap;
width: 100%;
text-overflow: ellipsis;
overflow: hidden;
text-shadow: 0 1px 0 rgba(255,255,255,0.4);
color: #414B57 !important;
text-align: center;
font-size: 11px;
}
.fn-gantt .ganttRed {
background-color: #F9C4E1;
}
.fn-gantt .ganttRed .fn-label {
color: #78436D !important;
}
.fn-gantt .ganttGreen {
background-color: #D8EDA3;
}
.fn-gantt .ganttGreen .fn-label {
color: #778461 !important;
}
.fn-gantt .ganttOrange {
background-color: #FCD29A;
}
.fn-gantt .ganttOrange .fn-label {
color: #714715 !important;
}
/* === BOTTOM NAVIGATION === */
.fn-gantt .bottom {
clear: both;
background-color: #f6f6f6;
width: 100%;
}
.fn-gantt .navigate {
border-top: 1px solid #DDD;
padding: 10px 0 10px 225px;
}
.fn-gantt .navigate .nav-slider {
height: 20px;
display: inline-block;
}
.fn-gantt .navigate .nav-slider-left, .fn-gantt .navigate .nav-slider-right {
text-align: center;
height: 20px;
display: inline-block;
}
.fn-gantt .navigate .nav-slider-left {
float: left;
}
.fn-gantt .navigate .nav-slider-right {
float: right;
}
.fn-gantt .navigate .nav-slider-content {
text-align: left;
width: 160px;
height: 20px;
display: inline-block;
margin: 0 10px;
}
.fn-gantt .navigate .nav-slider-bar, .fn-gantt .navigate .nav-slider-button {
position: absolute;
display: block;
}
.fn-gantt .navigate .nav-slider-bar {
width: 155px;
height: 6px;
background-color: #838688;
margin: 8px 0 0 0;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.6) inset;
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.6) inset;
box-shadow: 0 1px 3px rgba(0,0,0,0.6) inset;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.fn-gantt .navigate .nav-slider-button {
width: 17px;
height: 60px;
background: url(../img/slider_handle.png) center center no-repeat;
left: 0px;
top: 0px;
margin: -26px 0 0 0;
cursor: pointer;
}
.fn-gantt .navigate .page-number {
display: inline-block;
font-size: 10px;
height: 20px;
}
.fn-gantt .navigate .page-number span {
color: #666666;
margin: 0 6px;
height: 20px;
line-height: 20px;
display: inline-block;
}
.fn-gantt .navigate a:link, .fn-gantt .navigate a:visited, .fn-gantt .navigate a:active {
text-decoration: none;
}
.fn-gantt .nav-link {
margin: 0 3px 0 0;
display: inline-block;
width: 20px;
height: 20px;
font-size: 0px;
background: #595959 url(../img/icon_sprite.png) !important;
border: 1px solid #454546;
cursor: pointer;
vertical-align: top;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.1) inset, 0 1px 1px rgba(0,0,0,0.2);
-moz-box-shadow: 0 1px 0 rgba(255,255,255,0.1) inset, 0 1px 1px rgba(0,0,0,0.2);
box-shadow: 0 1px 0 rgba(255,255,255,0.1) inset, 0 1px 1px rgba(0,0,0,0.2);
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.fn-gantt .nav-link:active {
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.25) inset, 0 1px 0 #FFF;
-moz-box-shadow: 0 1px 1px rgba(0,0,0,0.25) inset, 0 1px 0 #FFF;
box-shadow: 0 1px 1px rgba(0,0,0,0.25) inset, 0 1px 0 #FFF;
}
.fn-gantt .navigate .nav-page-back {
background-position: 1px 0 !important;
margin: 0;
}
.fn-gantt .navigate .nav-page-next {
background-position: 1px -16px !important;
margin-right: 15px;
}
.fn-gantt .navigate .nav-slider .nav-page-next {
margin-right: 5px;
}
.fn-gantt .navigate .nav-begin {
background-position: 1px -112px !important;
}
.fn-gantt .navigate .nav-prev-week {
background-position: 1px -128px !important;
}
.fn-gantt .navigate .nav-prev-day {
background-position: 1px -48px !important;
}
.fn-gantt .navigate .nav-next-day {
background-position: 1px -64px !important;
}
.fn-gantt .navigate .nav-next-week {
background-position: 1px -160px !important;
}
.fn-gantt .navigate .nav-end {
background-position: 1px -144px !important;
}
.fn-gantt .navigate .nav-zoomOut {
background-position: 1px -96px !important;
}
.fn-gantt .navigate .nav-zoomIn {
background-position: 1px -80px !important;
margin-left: 15px;
}
.fn-gantt .navigate .nav-now {
background-position: 1px -32px !important;
}
.fn-gantt .navigate .nav-slider .nav-now {
margin-right: 5px;
}
.fn-gantt-loader {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#bf000000', endColorstr='#bf000000',GradientType=0 );
background: rgba(0,0,0,0.75);
z-index: 30;
}
.fn-gantt-loader-spinner span {
position: absolute;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
text-align: center;
height: 1em;
line-height: 1em;
color: #fff;
font-size: 1em;
font-weight: bold;
}
.row:after {
clear: both;
}

Двоичные данные
public/lib/jQuery.Gantt/img/grid.png Executable file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 96 B

Двоичные данные
public/lib/jQuery.Gantt/img/icon_sprite.png Executable file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 808 B

Двоичные данные
public/lib/jQuery.Gantt/img/slider_handle.png Executable file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 817 B

Просмотреть файл

@ -0,0 +1,16 @@
[{ "name": " Planning ","desc": "Inception","values": [{"from": "/Date(1320192000000)/", "to": "/Date(1321401600000)/", "desc": "Id: 1<br/>Name: Planning <br/>Date: 2011-11-02 to 2011-11-16", "label": " Planni...", "customClass": "ganttRed"}]},
{ "name": " Gathering requirements ","desc": "Inception","values": [{"from": "/Date(1321401600000)/", "to": "/Date(1322870400000)/", "desc": "Id: 2<br/>Name: Gathering requirements <br/>Date: 2011-11-16 to 2011-12-03", "label": " Gather...", "customClass": "ganttGreen"}]},
{ "name": " Determine scope ","desc": "Inception","values": [{"from": "/Date(1322611200000)/", "to": "/Date(1323302400000)/", "desc": "Id: 3<br/>Name: Determine scope <br/>Date: 2011-11-30 to 2011-12-08", "label": " Determ...", "customClass": "ganttOrange"}]},
{ "name": " Analysis and design ","desc": "Iteration 1","values": [{"from": "/Date(1323302400000)/", "to": "/Date(1324684800000)/", "desc": "Id: 4<br/>Name: Analysis and design <br/>Date: 2011-12-08 to 2011-12-24", "label": " Analys..."}]},
{ "name": " Implementation ","desc": "Iteration 1","values": [{"from": "/Date(1324857600000)/", "to": "/Date(1326758400000)/", "desc": "Id: 5<br/>Name: Implementation <br/>Date: 2011-12-26 to 2012-01-17", "label": " Implem...", "customClass": "ganttRed"}]},
{ "name": " Deliver prototype ","desc": "Iteration 1","values": [{"from": "/Date(1326758400000)/", "to": "/Date(1326844800000)/", "desc": "Id: 6<br/>Name: Deliver prototype <br/>Date: 2012-01-17 to 2012-01-18", "label": " Delive...", "customClass": "ganttGreen"}]},
{ "name": " Testing ","desc": "Iteration 1","values": [{"from": "/Date(1326844800000)/", "to": "/Date(1328659200000)/", "desc": "Id: 7<br/>Name: Testing <br/>Date: 2012-01-18 to 2012-02-08", "label": " Testin...", "customClass": "ganttOrange"}]},
{ "name": " Review and evaluation ","desc": "Iteration 1","values": [{"from": "/Date(1328659200000)/", "to": "/Date(1328832000000)/", "desc": "Id: 8<br/>Name: Review and evaluation <br/>Date: 2012-02-08 to 2012-02-10", "label": " Review..."}]},
{ "name": " Analysis and enhancement of design ","desc": "Iteration 2","values": [{"from": "/Date(1328832000000)/", "to": "/Date(1329868800000)/", "desc": "Id: 9<br/>Name: Analysis and enhancement of design <br/>Date: 2012-02-10 to 2012-02-22", "label": " Analys...", "customClass": "ganttRed"}]},
{ "name": " Implementation (enhancement of prototype)","desc": "Iteration 2","values": [{"from": "/Date(1329868800000)/", "to": "/Date(1331337600000)/", "desc": "Id: 10<br/>Name: Implementation (enhancement of prototype)<br/>Date: 2012-02-22 to 2012-03-10", "label": " Implem...", "customClass": "ganttGreen"}]},
{ "name": " Deliver prototype ","desc": "Iteration 2","values": [{"from": "/Date(1331510400000)/", "to": "/Date(1331596800000)/", "desc": "Id: 11<br/>Name: Deliver prototype <br/>Date: 2012-03-12 to 2012-03-13", "label": " Delive...", "customClass": "ganttOrange"}]},
{ "name": " Testing ","desc": "Iteration 2","values": [{"from": "/Date(1331596800000)/", "to": "/Date(1332547200000)/", "desc": "Id: 12<br/>Name: Testing <br/>Date: 2012-03-13 to 2012-03-24", "label": " Testin...", "customClass": "ganttRed"}]},
{ "name": " Review and evaluation ","desc": "Iteration 2","values": [{"from": "/Date(1332720000000)/", "to": "/Date(1332892800000)/", "desc": "Id: 13<br/>Name: Review and evaluation <br/>Date: 2012-03-26 to 2012-03-28", "label": " Review...", "customClass": "ganttGreen"}]},
{ "name": " Finalising ","desc": "Finalization","values": [{"from": "/Date(1332892800000)/", "to": "/Date(1333065600000)/", "desc": "Id: 14<br/>Name: Finalising <br/>Date: 2012-03-28 to 2012-03-30", "label": " Finali...", "customClass": "ganttOrnage"}]},
{ "name": " Deployment ","desc": "Finalization","values": [{"from": "/Date(1333065600000)/", "to": "/Date(1333411200000)/", "desc": "Id: 15<br/>Name: Deployment <br/>Date: 2012-03-30 to 2012-04-03", "label": " Deploy..."}]},
{ "name": " Project review and evaluation ","desc": "Finalization","values": [{"from": "/Date(1333411200000)/", "to": "/Date(1333584000000)/", "desc": "Id: 16<br/>Name: Project review and evaluation <br/>Date: 2012-04-03 to 2012-04-05", "label": " Projec...", "customClass": "ganttRed"}]}]

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -0,0 +1,103 @@
[{ "name": "Task#1",
"desc": "",
"values": [
{"from": "/Date(1296547200000)/", "to": "/Date(1296554400000)/", "desc": "<b>Task #</b>1<br><b>Data</b>: [2011-02-01 08:00:00 - 2011-02-01 10:00:00] ", "customClass": "ganttRed", "label": "Task #1"},
{"from": "/Date(1296637200000)/", "to": "/Date(1296649800000)/", "desc": "<b>Task #</b>1<br><b>Data</b>: [2011-02-02 09:00:00 - 2011-02-02 12:30:00] ", "customClass": "ganttOrange", "label": "Task #1"}
]
},
{ "name": "Task#2",
"desc": "",
"values": [
{"from": "/Date(1296554400000)/", "to": "/Date(1296568800000)/", "desc": "<b>Task #</b>2<br><b>Data</b>: [2011-02-01 10:00:00 - 2011-02-01 14:00:00] ", "customClass": "ganttRed", "label": "Task #2"},
{"from": "/Date(1296653400000)/", "to": "/Date(1296658800000)/", "desc": "<b>Task #</b>2<br><b>Data</b>: [2011-02-02 13:30:00 - 2011-02-02 15:00:00] ", "customClass": "ganttGreen"}
]
},
{ "name": "Task#3",
"desc": "",
"values": [
{"from": "/Date(1296574200000)/", "to": "/Date(1296576000000)/", "desc": "<b>Task #</b>3<br><b>Data</b>: [2011-02-01 15:30:00 - 2011-02-01 16:00:00] "},
{"from": "/Date(1296655200000)/", "to": "/Date(1296662400000)/", "desc": "<b>Task #</b>3<br><b>Data</b>: [2011-02-02 14:00:00 - 2011-02-02 16:00:00] ", "customClass": "ganttOrange"}
]
},
{ "name": "Task#4",
"desc": "",
"values": [
{"from": "/Date(1296633600000)/", "to": "/Date(1296646200000)/", "desc": "<b>Task #</b>4<br><b>Data</b>: [2011-02-02 08:00:00 - 2011-02-02 11:30:00] ", "label": "Task #4"},
{"from": "/Date(1296720000000)/", "to": "/Date(1296730800000)/", "desc": "<b>Task #</b>4<br><b>Data</b>: [2011-02-03 08:00:00 - 2011-02-03 11:00:00] ", "customClass": "ganttGreen"}
]
},
{ "name": "Task#5",
"desc": "",
"values": [
{"from": "/Date(1296646200000)/", "to": "/Date(1296651600000)/", "desc": "<b>Task #</b>5<br><b>Data</b>: [2011-02-02 11:30:00 - 2011-02-02 13:00:00] ", "label": "Task #5"},
{"from": "/Date(1296727200000)/", "to": "/Date(1296741600000)/", "desc": "<b>Task #</b>5<br><b>Data</b>: [2011-02-03 10:00:00 - 2011-02-03 14:00:00] ", "customClass": "ganttRed", "label": "Task #5"}
]
},
{ "name": "Task#6",
"desc": "",
"values": [
{"from": "/Date(1296651600000)/", "to": "/Date(1296662400000)/", "desc": "<b>Task #</b>6<br><b>Data</b>: [2011-02-02 13:00:00 - 2011-02-02 16:00:00] ", "customClass": "ganttGreen"},
{"from": "/Date(1296716400000)/", "to": "/Date(1296725400000)/", "desc": "<b>Task #</b>6<br><b>Data</b>: [2011-02-03 07:00:00 - 2011-02-03 09:30:00] ", "customClass": "ganttOrange"}
]
},
{ "name": "Task#7",
"desc": "",
"values": [
{"from": "/Date(1296662400000)/", "to": "/Date(1296669600000)/", "desc": "<b>Task #</b>7<br><b>Data</b>: [2011-02-02 16:00:00 - 2011-02-02 18:00:00] ", "label": "Task #7"},
{"from": "/Date(1296748800000)/", "to": "/Date(1296756000000)/", "desc": "<b>Task #</b>7<br><b>Data</b>: [2011-02-03 16:00:00 - 2011-02-03 18:00:00] ", "customClass": "ganttGreen", "label": "Task #7"}
]
},
{ "name": "Task#8",
"desc": "",
"values": [
{"from": "/Date(1296720000000)/", "to": "/Date(1296734400000)/", "desc": "<b>Task #</b>8<br><b>Data</b>: [2011-02-03 08:00:00 - 2011-02-03 12:00:00] ", "customClass": "ganttRed", "label": "Task #8"}
]
},
{ "name": "Task#9",
"desc": "",
"values": [
{"from": "/Date(1296660600000)/", "to": "/Date(1296667800000)/", "desc": "<b>Task #</b>9<br><b>Data</b>: [2011-02-02 15:30:00 - 2011-02-02 17:30:00] ", "customClass": "ganttOrange"},
{"from": "/Date(1296734400000)/", "to": "/Date(1296745200000)/", "desc": "<b>Task #</b>9<br><b>Data</b>: [2011-02-03 12:00:00 - 2011-02-03 15:00:00] ", "customClass": "ganttRed"}
]
},
{ "name": "Task#10",
"desc": "",
"values": [
{"from": "/Date(1296745200000)/", "to": "/Date(1296752400000)/", "desc": "<b>Task #</b>10<br><b>Data</b>: [2011-02-03 15:00:00 - 2011-02-03 17:00:00] "}
]
},
{ "name": "Task#11",
"desc": "",
"values": [
{"from": "/Date(1296547200000)/", "to": "/Date(1296554400000)/", "desc": "<b>Task #</b>11<br><b>Data</b>: [2011-02-01 08:00:00 - 2011-02-01 10:00:00] "},
{"from": "/Date(1296660600000)/", "to": "/Date(1296669600000)/", "desc": "<b>Task #</b>11<br><b>Data</b>: [2011-02-02 15:30:00 - 2011-02-02 18:00:00] ", "customClass": "ganttOrange"}
]
},
{ "name": "Task#12",
"desc": "",
"values": [
{"from": "/Date(1296554400000)/", "to": "/Date(1296568800000)/", "desc": "<b>Task #</b>12<br><b>Data</b>: [2011-02-01 10:00:00 - 2011-02-01 14:00:00] ", "customClass": "ganttGreen"},
{"from": "/Date(1296658800000)/", "to": "/Date(1296664200000)/", "desc": "<b>Task #</b>12<br><b>Data</b>: [2011-02-02 15:00:00 - 2011-02-02 16:30:00] ", "customClass": "ganttOrange"}
]
},
{ "name": "Task#13",
"desc": "",
"values": [
{"from": "/Date(1296574200000)/", "to": "/Date(1296576000000)/", "desc": "<b>Task #</b>13<br><b>Data</b>: [2011-02-01 15:30:00 - 2011-02-01 16:00:00] "},
{"from": "/Date(1296720000000)/", "to": "/Date(1296730800000)/", "desc": "<b>Task #</b>13<br><b>Data</b>: [2011-02-03 08:00:00 - 2011-02-03 11:00:00] ", "customClass": "ganttRed"}
]
},
{ "name": "Task#14",
"desc": "",
"values": [
{"from": "/Date(1296543600000)/", "to": "/Date(1296550800000)/", "desc": "<b>Task #</b>14<br><b>Data</b>: [2011-02-01 07:00:00 - 2011-02-01 09:00:00] ", "customClass": "ganttOrange"},
{"from": "/Date(1296633600000)/", "to": "/Date(1296646200000)/", "desc": "<b>Task #</b>14<br><b>Data</b>: [2011-02-02 08:00:00 - 2011-02-02 11:30:00] ", "customClass": "ganttGreen"}
]
},
{ "name": "Task#15",
"desc": "",
"values": [
{"from": "/Date(1296556200000)/", "to": "/Date(1296565200000)/", "desc": "<b>Task #</b>15<br><b>Data</b>: [2011-02-01 10:30:00 - 2011-02-01 13:00:00] ", "label": "Task #15"},
{"from": "/Date(1296646200000)/", "to": "/Date(1296651600000)/", "desc": "<b>Task #</b>15<br><b>Data</b>: [2011-02-02 11:30:00 - 2011-02-02 13:00:00] ", "customClass": "ganttOrange", "label": "Task #15"}
]
}]

Просмотреть файл

@ -0,0 +1,47 @@
/*!
* jQuery Cookie Plugin
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2011, Klaus Hartl
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://www.opensource.org/licenses/mit-license.php
* http://www.opensource.org/licenses/GPL-2.0
*/
(function ($) {
$.cookie = function (key, value, options) {
// key and at least value given, set cookie...
if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
options = $.extend({}, options);
if (value === null || value === undefined) {
options.expires = -1;
}
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setDate(t.getDate() + days);
}
value = String(value);
return (document.cookie = [
encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// key and possibly options given, get cookie...
options = value || {};
var decode = options.raw ? function (s) { return s; } : decodeURIComponent;
var pairs = document.cookie.split('; ');
for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
}
return null;
};
})(jQuery);

494
public/lib/jquery.fn.gantt.js → public/lib/jQuery.Gantt/js/jquery.fn.gantt.js поставляемый Normal file → Executable file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

1
public/lib/jQuery.Gantt/js/jquery.fn.gantt.min.js поставляемый Executable file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

6
public/lib/jQuery.Gantt/js/jquery.min.js поставляемый Executable file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

6
public/lib/jquery-1.10.2.min.js поставляемый Normal file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

4
public/lib/jquery-1.7.2.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -324,6 +324,13 @@ var Planning = {
init: function () {
$("#refresh-button").on("click", function () {
$.ajax('/trigger_refresh', {
success: function () { window.location.reload(); }
});
});
// Index milestones by id & add milestone issues
milestones.forEach(function(ghAttributes) {
if(config.excludedMilestones.indexOf(ghAttributes.title) == -1) {