├── .gitignore ├── app ├── api_1_0 │ ├── resources │ │ ├── __init__.py │ │ ├── link.py │ │ └── task.py │ └── __init__.py ├── gantt │ ├── __init__.py │ └── views.py ├── __init__.py ├── static │ ├── js │ │ ├── locale │ │ │ ├── locale_kr.js │ │ │ ├── locale_jp.js │ │ │ ├── locale_cn.js │ │ │ ├── locale_he.js │ │ │ ├── locale.js │ │ │ ├── locale_fr.js │ │ │ ├── locale_id.js │ │ │ ├── locale_tr.js │ │ │ ├── locale_hr.js │ │ │ ├── locale_cs.js │ │ │ ├── locale_hu.js │ │ │ ├── locale_si.js │ │ │ ├── locale_es.js │ │ │ ├── locale_nb.js │ │ │ ├── locale_ru.js │ │ │ ├── locale_sv.js │ │ │ ├── locale_de.js │ │ │ ├── locale_be.js │ │ │ ├── locale_it.js │ │ │ ├── locale_no.js │ │ │ ├── locale_sk.js │ │ │ ├── locale_ua.js │ │ │ ├── locale_ca.js │ │ │ ├── locale_fi.js │ │ │ ├── locale_nl.js │ │ │ ├── locale_pt.js │ │ │ ├── locale_da.js │ │ │ ├── locale_pl.js │ │ │ ├── locale_ar.js │ │ │ ├── locale_ro.js │ │ │ └── locale_el.js │ │ ├── ext │ │ │ ├── dhtmlxgantt_marker.js │ │ │ ├── dhtmlxgantt_csp.js │ │ │ ├── dhtmlxgantt_fullscreen.js │ │ │ ├── dhtmlxgantt_tooltip.js │ │ │ ├── dhtmlxgantt_multiselect.js │ │ │ ├── dhtmlxgantt_smart_rendering.js │ │ │ ├── dhtmlxgantt_quick_info.js │ │ │ ├── dhtmlxgantt_undo.js │ │ │ └── dhtmlxgantt_keyboard_navigation.js │ │ └── testdata.js │ └── css │ │ └── skins │ │ ├── dhtmlxgantt_meadow.css │ │ └── dhtmlxgantt_skyblue.css ├── models.py └── templates │ └── ganttchart.html ├── requirements.txt ├── ganttservice.py ├── config.py ├── README.md └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | -------------------------------------------------------------------------------- /app/api_1_0/resources/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/gantt/__init__.py: -------------------------------------------------------------------------------- 1 | from flask import Blueprint 2 | 3 | gantt = Blueprint('gantt', __name__) 4 | 5 | from . import views 6 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | aniso8601==1.2.1 2 | click==6.7 3 | Flask==0.12.2 4 | Flask-RESTful==0.3.6 5 | Flask-SQLAlchemy==2.2 6 | itsdangerous==0.24 7 | Jinja2==2.9.6 8 | MarkupSafe==1.0 9 | python-dateutil==2.6.1 10 | pytz==2017.2 11 | six==1.10.0 12 | SQLAlchemy==1.1.11 13 | Werkzeug==0.12.2 14 | -------------------------------------------------------------------------------- /app/gantt/views.py: -------------------------------------------------------------------------------- 1 | from flask import jsonify, render_template 2 | from ..models import Task 3 | 4 | from . import gantt 5 | 6 | @gantt.route('/') 7 | def index(): 8 | return render_template('ganttchart.html') 9 | 10 | @gantt.route('/ganttest2') 11 | def ganttest2(): 12 | tasks = Task.query.all() 13 | return jsonify(data=[i.serialize for i in tasks]) 14 | -------------------------------------------------------------------------------- /app/api_1_0/__init__.py: -------------------------------------------------------------------------------- 1 | from flask import Blueprint 2 | from flask_restful import Api 3 | 4 | from .resources.task import Task 5 | from .resources.task import TaskList 6 | from .resources.link import Link 7 | 8 | restapi_blueprint = Blueprint('api', __name__) 9 | restapi = Api(restapi_blueprint) 10 | 11 | restapi.add_resource(TaskList, '/') 12 | restapi.add_resource(Task, '/task', '/task/') 13 | restapi.add_resource(Link, '/link', '/link/') 14 | -------------------------------------------------------------------------------- /app/__init__.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from config import config 3 | from flask_sqlalchemy import SQLAlchemy 4 | 5 | db = SQLAlchemy() 6 | 7 | def create_app(config_name): 8 | app = Flask(__name__) 9 | app.config.from_object(config[config_name]) 10 | # config[config_name].init_app(app) 11 | 12 | db.init_app(app) 13 | 14 | # attach routes and custom error pages here 15 | from .gantt import gantt as gantt_blueprint 16 | app.register_blueprint(gantt_blueprint) 17 | 18 | from .api_1_0 import restapi_blueprint 19 | app.register_blueprint(restapi_blueprint, url_prefix='/api/v1.0') 20 | 21 | 22 | return app 23 | -------------------------------------------------------------------------------- /ganttservice.py: -------------------------------------------------------------------------------- 1 | import click 2 | import os 3 | from datetime import datetime 4 | from flask import Flask 5 | from app import create_app, db, models 6 | 7 | app = create_app((os.getenv('FLASK_CONFIG') or 'default')) 8 | 9 | @app.cli.command() 10 | #@click.option('--coverage/--no-coverage', default=False, help='Enable code coverage') 11 | def initdb(): 12 | """Initialize the database.""" 13 | db.create_all() 14 | 15 | 16 | @app.cli.command() 17 | #@click.option('--coverage/--no-coverage', default=False, help='Enable code coverage') 18 | def cleardb(): 19 | """Clear the database.""" 20 | db.drop_all() 21 | 22 | 23 | @app.cli.command() 24 | def addtestdata(): 25 | """Add some test data to the database""" 26 | 27 | task1 = models.Task() 28 | task1.text = "Testtask1" 29 | task1.start_date = datetime.strptime("2017-09-01", "%Y-%m-%d") 30 | task1.duration = 5 31 | task1.progress = 0.8 32 | task1.sortorder = 20 33 | task1.parent = 0 34 | 35 | db.session.add(task1) 36 | db.session.commit() 37 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import os 2 | basedir = os.path.abspath(os.path.dirname(__file__)) 3 | 4 | class Config: 5 | SECRET_KEY = os.environ.get('SECRET_KEY') or 'you_should_really_change_me' 6 | SQLALCHEMY_COMMIT_ON_TEARDOWN = True 7 | SQLALCHEMY_TRACK_MODIFICATIONS = False 8 | 9 | class DevelopmentConfig(Config): 10 | DEBUG = True 11 | HOST = '0.0.0.0' 12 | SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \ 13 | 'sqlite:///' + os.path.join(basedir, 'ganttservice-dev.sqlite3') 14 | 15 | class TestingConfig(Config): 16 | TESTING = True 17 | SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \ 18 | 'sqlite:///' + os.path.join(basedir, 'ganttservice-test.sqlite3') 19 | 20 | class ProductionConfig(Config): 21 | SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \ 22 | 'sqlite:///' + os.path.join(basedir, 'ganttservice.sqlite3') 23 | 24 | config = { 25 | 'development': DevelopmentConfig, 26 | 'testing': TestingConfig, 27 | 'production': ProductionConfig, 28 | 'default': DevelopmentConfig 29 | } 30 | -------------------------------------------------------------------------------- /app/static/js/locale/locale_kr.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],month_short:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],day_full:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],day_short:["일","월","화","수","목","금","토"]},labels:{new_task:"이름없는 작업",icon_save:"저장",icon_cancel:"취소",icon_details:"세부 사항",icon_edit:"수정",icon_delete:"삭제",confirm_closing:"",confirm_deleting:"작업을 삭제하시겠습니까?",section_description:"설명",section_time:"기간",section_type:"Type",column_text:"작업명", 10 | column_start_date:"시작일",column_duration:"기간",column_add:"",link:"전제",confirm_link_deleting:"삭제 하시겠습니까?",link_start:" (start)",link_end:" (end)",type_task:"작업",type_project:"프로젝트",type_milestone:"마일스톤",minutes:"분",hours:"시간",days:"일",weeks:"주",months:"달",years:"년",message_ok:"OK",message_cancel:"취소"}}; 11 | //# sourceMappingURL=../sources/locale/locale_kr.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_jp.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],month_short:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],day_full:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],day_short:["日","月","火","水","木","金","土"]},labels:{dhx_cal_today_button:"今日",day_tab:"日",week_tab:"週",month_tab:"月",new_event:"新イベント",icon_save:"保存",icon_cancel:"キャンセル",icon_details:"詳細",icon_edit:"編集",icon_delete:"削除",confirm_closing:"",confirm_deleting:"イベント完全に削除されます、宜しいですか?", 10 | section_description:"デスクリプション",section_time:"期間",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"キャンセル"}}; 11 | //# sourceMappingURL=../sources/locale/locale_jp.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_cn.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.config.day_date="%M %d日 %D",gantt.config.default_date="%Y年 %M %d日",gantt.config.month_date="%Y年 %M",gantt.locale={date:{month_full:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],month_short:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],day_full:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],day_short:["日","一","二","三","四","五","六"]},labels:{dhx_cal_today_button:"今天",day_tab:"日",week_tab:"周",month_tab:"月",new_event:"新建日程",icon_save:"保存",icon_cancel:"关闭",icon_details:"详细", 10 | icon_edit:"编辑",icon_delete:"删除",confirm_closing:"请确认是否撤销修改!",confirm_deleting:"是否删除日程?",section_description:"描述",section_time:"时间范围",section_type:"类型",column_text:"任务名",column_start_date:"开始时间",column_duration:"持续时间",column_add:"",link:"关联",confirm_link_deleting:"将被删除",link_start:" (开始)",link_end:" (结束)",type_task:"任务",type_project:"项目",type_milestone:"里程碑",minutes:"分钟",hours:"小时",days:"天",weeks:"周",months:"月",years:"年",message_ok:"OK",message_cancel:"关闭"}}; 11 | //# sourceMappingURL=../sources/locale/locale_cn.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_he.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],month_short:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],day_full:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],day_short:["א","ב","ג","ד","ה","ו","ש"]},labels:{dhx_cal_today_button:"היום",day_tab:"יום",week_tab:"שבוע",month_tab:"חודש",new_event:"ארוע חדש",icon_save:"שמור",icon_cancel:"בטל",icon_details:"פרטים",icon_edit:"ערוך",icon_delete:"מחק", 10 | confirm_closing:"",confirm_deleting:"ארוע ימחק סופית.להמשיך?",section_description:"הסבר",section_time:"תקופה",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"בטל" 11 | }}; 12 | //# sourceMappingURL=../sources/locale/locale_he.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["January","February","March","April","May","June","July","August","September","October","November","December"],month_short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],day_full:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],day_short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},labels:{new_task:"New task",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details",icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"", 10 | confirm_deleting:"Task will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK", 11 | message_cancel:"Cancel"}}; 12 | //# sourceMappingURL=../sources/locale/locale.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_fr.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],month_short:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Aoû","Sep","Oct","Nov","Déc"],day_full:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],day_short:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"]},labels:{new_task:"Nouvelle tâche",icon_save:"Enregistrer",icon_cancel:"Annuler",icon_details:"Détails",icon_edit:"Modifier",icon_delete:"Effacer", 10 | confirm_closing:"",confirm_deleting:"L'événement sera effacé sans appel, êtes-vous sûr ?",section_description:"Description",section_time:"Période",section_type:"Type",column_text:"Nom de la tâche",column_start_date:"Date initiale",column_duration:"Durée",column_add:"",link:"Le lien",confirm_link_deleting:"sera supprimé",link_start:"(début)",link_end:"(fin)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Heures",days:"Jours",weeks:"Semaines",months:"Mois", 11 | years:"Années",message_ok:"OK",message_cancel:"Annuler"}}; 12 | //# sourceMappingURL=../sources/locale/locale_fr.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_id.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],day_full:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],day_short:["Ming","Sen","Sel","Rab","Kam","Jum","Sab"]},labels:{dhx_cal_today_button:"Hari Ini",day_tab:"Hari",week_tab:"Minggu",month_tab:"Bulan",new_event:"Acara Baru",icon_save:"Simpan",icon_cancel:"Batal", 10 | icon_details:"Detail",icon_edit:"Edit",icon_delete:"Hapus",confirm_closing:"",confirm_deleting:"Acara akan dihapus",section_description:"Keterangan",section_time:"Periode",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week", 11 | months:"Months",years:"Years",message_ok:"OK",message_cancel:"Batal"}}; 12 | //# sourceMappingURL=../sources/locale/locale_id.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_tr.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],month_short:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],day_full:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],day_short:["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"]},labels:{dhx_cal_today_button:"Bugün",day_tab:"Gün",week_tab:"Hafta",month_tab:"Ay",new_event:"Yeni Görev",icon_save:"Kaydet",icon_cancel:"İptal",icon_details:"Detaylar", 10 | icon_edit:"Düzenle",icon_delete:"Sil",confirm_closing:"",confirm_deleting:"Görev silinecek, emin misiniz?",section_description:"Açıklama",section_time:"Zaman Aralığı",section_type:"Tip",column_text:"Görev Adı",column_start_date:"Başlangıç",column_duration:"Süre",column_add:"",link:"Bağlantı",confirm_link_deleting:"silinecek",link_start:" (başlangıç)",link_end:" (bitiş)",type_task:"Görev",type_project:"Proje",type_milestone:"Kilometretaşı",minutes:"Dakika",hours:"Saat",days:"Gün",weeks:"Hafta",months:"Ay", 11 | years:"Yıl",message_ok:"OK",message_cancel:"Ýptal"}}; 12 | //# sourceMappingURL=../sources/locale/locale_tr.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_hr.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],month_short:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],day_full:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],day_short:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"]},labels:{new_task:"Novi Zadatak",icon_save:"Spremi",icon_cancel:"Odustani",icon_details:"Detalji",icon_edit:"Izmjeni",icon_delete:"Obriši", 10 | confirm_closing:"",confirm_deleting:"Zadatak će biti trajno izbrisan, jeste li sigurni?",section_description:"Opis",section_time:"Vremenski Period",section_type:"Tip",column_text:"Naziv Zadatka",column_start_date:"Početno Vrijeme",column_duration:"Trajanje",column_add:"",link:"Poveznica",confirm_link_deleting:"će biti izbrisan",link_start:" (početak)",link_end:" (kraj)",type_task:"Zadatak",type_project:"Projekt",type_milestone:"Milestone",minutes:"Minute",hours:"Sati",days:"Dani",weeks:"Tjedni",months:"Mjeseci", 11 | years:"Godine",message_ok:"OK",message_cancel:"Odustani"}}; 12 | //# sourceMappingURL=../sources/locale/locale_hr.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_cs.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],month_short:["Led","Ún","Bře","Dub","Kvě","Čer","Čec","Srp","Září","Říj","List","Pro"],day_full:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"],day_short:["Ne","Po","Út","St","Čt","Pá","So"]},labels:{dhx_cal_today_button:"Dnes",day_tab:"Den",week_tab:"Týden",month_tab:"Měsíc",new_event:"Nová událost",icon_save:"Uložit",icon_cancel:"Zpět",icon_details:"Detail", 10 | icon_edit:"Edituj",icon_delete:"Smazat",confirm_closing:"",confirm_deleting:"Událost bude trvale smazána, opravdu?",section_description:"Poznámky",section_time:"Doba platnosti",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week", 11 | months:"Months",years:"Years",message_ok:"OK",message_cancel:"Zpět"}}; 12 | //# sourceMappingURL=../sources/locale/locale_cs.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_hu.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],month_short:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],day_full:["Vasárnap","Hétfõ","Kedd","Szerda","Csütörtök","Péntek","szombat"],day_short:["Va","Hé","Ke","Sze","Csü","Pé","Szo"]},labels:{dhx_cal_today_button:"Ma",day_tab:"Nap",week_tab:"Hét",month_tab:"Hónap",new_event:"Új esemény",icon_save:"Mentés",icon_cancel:"Mégse", 10 | icon_details:"Részletek",icon_edit:"Szerkesztés",icon_delete:"Törlés",confirm_closing:"",confirm_deleting:"Az esemény törölve lesz, biztosan folytatja?",section_description:"Leírás",section_time:"Idõszak",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours", 11 | days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Mégse"}}; 12 | //# sourceMappingURL=../sources/locale/locale_hu.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_si.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],day_short:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"]},labels:{dhx_cal_today_button:"Danes",day_tab:"Dan",week_tab:"Teden",month_tab:"Mesec",new_event:"Nov dogodek",icon_save:"Shrani",icon_cancel:"Prekliči", 10 | icon_details:"Podrobnosti",icon_edit:"Uredi",icon_delete:"Izbriši",confirm_closing:"",confirm_deleting:"Dogodek bo izbrisan. Želite nadaljevati?",section_description:"Opis",section_time:"Časovni okvir",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours", 11 | days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Prekliči"}}; 12 | //# sourceMappingURL=../sources/locale/locale_si.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_es.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],month_short:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],day_full:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],day_short:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"]},labels:{dhx_cal_today_button:"Hoy",day_tab:"Día",week_tab:"Semana",month_tab:"Mes",new_event:"Nuevo evento",icon_save:"Guardar",icon_cancel:"Cancelar", 10 | icon_details:"Detalles",icon_edit:"Editar",icon_delete:"Eliminar",confirm_closing:"",confirm_deleting:"El evento se borrará definitivamente, ¿continuar?",section_description:"Descripción",section_time:"Período",section_type:"Tipo",column_text:"Tarea",column_start_date:"Inicio",column_duration:"Duración",column_add:"",link:"Enlace",confirm_link_deleting:"será borrada",link_start:" (inicio)",link_end:" (fin)",type_task:"Tarea",type_project:"Proyecto",type_milestone:"Hito",minutes:"Minutos",hours:"Horas", 11 | days:"Días",weeks:"Semanas",months:"Meses",years:"Años",message_ok:"OK",message_cancel:"Cancelar"}}; 12 | //# sourceMappingURL=../sources/locale/locale_es.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_nb.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Mon","Tir","Ons","Tor","Fre","Lør"]},labels:{dhx_cal_today_button:"I dag",day_tab:"Dag",week_tab:"Uke",month_tab:"Måned",new_event:"Ny hendelse",icon_save:"Lagre",icon_cancel:"Avbryt", 10 | icon_details:"Detaljer",icon_edit:"Rediger",icon_delete:"Slett",confirm_closing:"",confirm_deleting:"Hendelsen vil bli slettet permanent. Er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes", 11 | hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Avbryt"}}; 12 | //# sourceMappingURL=../sources/locale/locale_nb.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_ru.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Январь","Февраль","Март","Апрель","Maй","Июнь","Июль","Август","Сентябрь","Oктябрь","Ноябрь","Декабрь"],month_short:["Янв","Фев","Maр","Aпр","Maй","Июн","Июл","Aвг","Сен","Окт","Ноя","Дек"],day_full:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],day_short:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"]},labels:{dhx_cal_today_button:"Сегодня",day_tab:"День",week_tab:"Неделя",month_tab:"Месяц",new_event:"Новое событие",icon_save:"Сохранить",icon_cancel:"Отменить", 10 | icon_details:"Детали",icon_edit:"Изменить",icon_delete:"Удалить",confirm_closing:"",confirm_deleting:"Событие будет удалено безвозвратно, продолжить?",section_description:"Описание",section_time:"Период времени",section_type:"Тип",column_text:"Задача",column_start_date:"Начало",column_duration:"Длительность",column_add:"",link:"Связь",confirm_link_deleting:"будет удалена",link_start:" (начало)",link_end:" (конец)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Минута", 11 | hours:"Час",days:"День",weeks:"Неделя",months:"Месяц",years:"Год",message_ok:"OK",message_cancel:"Отменить"}}; 12 | //# sourceMappingURL=../sources/locale/locale_ru.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_sv.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],day_short:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"]},labels:{dhx_cal_today_button:"Idag",day_tab:"Dag",week_tab:"Vecka",month_tab:"Månad",new_event:"Ny händelse",icon_save:"Spara",icon_cancel:"Avbryt", 10 | icon_details:"Detajer",icon_edit:"Ändra",icon_delete:"Ta bort",confirm_closing:"",confirm_deleting:"Är du säker på att du vill ta bort händelsen permanent?",section_description:"Beskrivning",section_time:"Tid",section_type:"Typ",column_text:"Uppgiftsnamn",column_start_date:"Starttid",column_duration:"Varaktighet",column_add:"",link:"Länk",confirm_link_deleting:"kommer tas bort",link_start:" (start)",link_end:" (slut)",type_task:"Uppgift",type_project:"Projekt",type_milestone:"Milstolpe",minutes:"Minuter", 11 | hours:"Timmar",days:"Dagar",weeks:"Veckor",months:"Månader",years:"År",message_ok:"OK",message_cancel:"Avbryt"}}; 12 | //# sourceMappingURL=../sources/locale/locale_sv.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_de.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:[" Januar"," Februar"," März "," April"," Mai"," Juni"," Juli"," August"," September "," Oktober"," November "," Dezember"],month_short:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Sonntag","Montag","Dienstag"," Mittwoch"," Donnerstag","Freitag","Samstag"],day_short:["So","Mo","Di","Mi","Do","Fr","Sa"]},labels:{dhx_cal_today_button:"Heute",day_tab:"Tag",week_tab:"Woche",month_tab:"Monat",new_event:"neuer Eintrag",icon_save:"Speichern", 10 | icon_cancel:"Abbrechen",icon_details:"Details",icon_edit:"Ändern",icon_delete:"Löschen",confirm_closing:"",confirm_deleting:"Der Eintrag wird gelöscht",section_description:"Beschreibung",section_time:"Zeitspanne",section_type:"Type",column_text:"Task-Namen",column_start_date:"Startzeit",column_duration:"Dauer",column_add:"",link:"Link",confirm_link_deleting:"werden gelöscht",link_start:"(starten)",link_end:"(ende)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minuten", 11 | hours:"Stunden",days:"Tage",weeks:"Wochen",months:"Monate",years:"Jahre",message_ok:"OK",message_cancel:"Abbrechen"}}; 12 | //# sourceMappingURL=../sources/locale/locale_de.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_be.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Студзень","Люты","Сакавік","Красавік","Maй","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Снежань"],month_short:["Студз","Лют","Сак","Крас","Maй","Чэр","Ліп","Жнів","Вер","Каст","Ліст","Снеж"],day_full:["Нядзеля","Панядзелак","Аўторак","Серада","Чацвер","Пятніца","Субота"],day_short:["Нд","Пн","Аўт","Ср","Чцв","Пт","Сб"]},labels:{dhx_cal_today_button:"Сёння",day_tab:"Дзень",week_tab:"Тыдзень",month_tab:"Месяц",new_event:"Новая падзея",icon_save:"Захаваць", 10 | icon_cancel:"Адмяніць",icon_details:"Дэталі",icon_edit:"Змяніць",icon_delete:"Выдаліць",confirm_closing:"",confirm_deleting:"Падзея будзе выдалена незваротна, працягнуць?",section_description:"Апісанне",section_time:"Перыяд часу",section_type:"Тып",column_text:"Задача",column_start_date:"Пачатак",column_duration:"Працяг",column_add:"",link:"Сувязь",confirm_link_deleting:"будзе выдалена",link_start:"(пачатак)",link_end:"(канец)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Хвiлiна", 11 | hours:"Гадзiна",days:"Дзень",weeks:"Тыдзень",months:"Месяц",years:"Год",message_ok:"OK",message_cancel:"Адмяніць"}}; 12 | //# sourceMappingURL=../sources/locale/locale_be.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_it.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],month_short:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],day_full:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],day_short:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"]},labels:{dhx_cal_today_button:"Oggi",day_tab:"Giorno",week_tab:"Settimana",month_tab:"Mese",new_event:"Nuovo evento",icon_save:"Salva", 10 | icon_cancel:"Chiudi",icon_details:"Dettagli",icon_edit:"Modifica",icon_delete:"Elimina",confirm_closing:"",confirm_deleting:"Confermi l`eliminazione, siete sicuri?",section_description:"Descrizione",section_time:"Periodo di tempo",section_type:"Tipo",column_text:"Nome Attivita`",column_start_date:"Inizio",column_duration:"Durata",column_add:"",link:"Link",confirm_link_deleting:"sara` eliminato",link_start:" (inizio)",link_end:" (fine)",type_task:"Task",type_project:"Project",type_milestone:"Milestone", 11 | minutes:"Minuti",hours:"Ore",days:"Giorni",weeks:"Settimane",months:"Mesi",years:"Anni",message_ok:"OK",message_cancel:"Chiudi"}}; 12 | //# sourceMappingURL=../sources/locale/locale_it.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_no.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Man","Tir","Ons","Tor","Fre","Lør"]},labels:{dhx_cal_today_button:"Idag",day_tab:"Dag",week_tab:"Uke",month_tab:"Måned",new_event:"Ny",icon_save:"Lagre",icon_cancel:"Avbryt",icon_details:"Detaljer", 10 | icon_edit:"Endre",icon_delete:"Slett",confirm_closing:"Endringer blir ikke lagret, er du sikker?",confirm_deleting:"Oppføringen vil bli slettet, er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes", 11 | hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Avbryt"}}; 12 | //# sourceMappingURL=../sources/locale/locale_no.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_sk.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],month_short:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sept","Okt","Nov","Dec"],day_full:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"],day_short:["Ne","Po","Ut","St","Št","Pi","So"]},labels:{dhx_cal_today_button:"Dnes",day_tab:"Deň",week_tab:"Týždeň",month_tab:"Mesiac",new_event:"Nová udalosť",icon_save:"Uložiť",icon_cancel:"Späť", 10 | icon_details:"Detail",icon_edit:"Edituj",icon_delete:"Zmazať",confirm_closing:"Vaše zmeny nebudú uložené. Skutočne?",confirm_deleting:"Udalosť bude natrvalo vymazaná. Skutočne?",section_description:"Poznámky",section_time:"Doba platnosti",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone", 11 | minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Späť"}}; 12 | //# sourceMappingURL=../sources/locale/locale_sk.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_ua.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],month_short:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],day_full:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"],day_short:["Нед","Пон","Вів","Сер","Чет","Птн","Суб"]},labels:{dhx_cal_today_button:"Сьогодні",day_tab:"День",week_tab:"Тиждень",month_tab:"Місяць",new_event:"Нова подія",icon_save:"Зберегти", 10 | icon_cancel:"Відміна",icon_details:"Деталі",icon_edit:"Редагувати",icon_delete:"Вилучити",confirm_closing:"",confirm_deleting:"Подія вилучиться назавжди. Ви впевнені?",section_description:"Опис",section_time:"Часовий проміжок",section_type:"Тип",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone", 11 | minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Відміна"}}; 12 | //# sourceMappingURL=../sources/locale/locale_ua.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_ca.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],month_short:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Des"],day_full:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"],day_short:["Dg","Dl","Dm","Dc","Dj","Dv","Ds"]},labels:{dhx_cal_today_button:"Hui",day_tab:"Dia",week_tab:"Setmana",month_tab:"Mes",new_event:"Nou esdeveniment",icon_save:"Guardar",icon_cancel:"Cancel·lar", 10 | icon_details:"Detalls",icon_edit:"Editar",icon_delete:"Esborrar",confirm_closing:"",confirm_deleting:"L'esdeveniment s'esborrarà definitivament, continuar ?",section_description:"Descripció",section_time:"Periode de temps",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes", 11 | hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Cancel·lar"}}; 12 | //# sourceMappingURL=../sources/locale/locale_ca.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_fi.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],month_short:["Tam","Hel","Maa","Huh","Tou","Kes","Hei","Elo","Syy","Lok","Mar","Jou"],day_full:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],day_short:["Su","Ma","Ti","Ke","To","Pe","La"]},labels:{dhx_cal_today_button:"Tänään",day_tab:"Päivä",week_tab:"Viikko",month_tab:"Kuukausi",new_event:"Uusi tapahtuma", 10 | icon_save:"Tallenna",icon_cancel:"Peru",icon_details:"Tiedot",icon_edit:"Muokkaa",icon_delete:"Poista",confirm_closing:"",confirm_deleting:"Haluatko varmasti poistaa tapahtuman?",section_description:"Kuvaus",section_time:"Aikajakso",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone", 11 | minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Peru"}}; 12 | //# sourceMappingURL=../sources/locale/locale_fi.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_nl.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],month_short:["Jan","Feb","mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],day_short:["Zo","Ma","Di","Wo","Do","Vr","Za"]},labels:{dhx_cal_today_button:"Vandaag",day_tab:"Dag",week_tab:"Week",month_tab:"Maand",new_event:"Nieuw item",icon_save:"Opslaan",icon_cancel:"Annuleren", 10 | icon_details:"Details",icon_edit:"Bewerken",icon_delete:"Verwijderen",confirm_closing:"",confirm_deleting:"Item zal permanent worden verwijderd, doorgaan?",section_description:"Beschrijving",section_time:"Tijd periode",section_type:"Type",column_text:"Taak omschrijving",column_start_date:"Startdatum",column_duration:"Duur",column_add:"",link:"Koppeling",confirm_link_deleting:"zal worden verwijderd",link_start:" (start)",link_end:" (eind)",type_task:"Task",type_project:"Project",type_milestone:"Milestone", 11 | minutes:"minuten",hours:"uren",days:"dagen",weeks:"weken",months:"maanden",years:"jaren",message_ok:"OK",message_cancel:"Annuleren"}}; 12 | //# sourceMappingURL=../sources/locale/locale_nl.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_pt.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],month_short:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],day_full:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],day_short:["Dom","Seg","Ter","Qua","Qui","Sex","Sab"]},labels:{dhx_cal_today_button:"Hoje",day_tab:"Dia",week_tab:"Semana",month_tab:"Mês",new_event:"Novo evento",icon_save:"Salvar",icon_cancel:"Cancelar", 10 | icon_details:"Detalhes",icon_edit:"Editar",icon_delete:"Deletar",confirm_closing:"Suas alterações serão perdidas. Você tem certeza?",confirm_deleting:"Tem certeza que deseja excluir?",section_description:"Descrição",section_time:"Período de tempo",section_type:"Type",column_text:"Nome tarefa",column_start_date:"Data início",column_duration:"Duração",column_add:"",link:"Link",confirm_link_deleting:"será apagado",link_start:" (início)",link_end:" (fim)",type_task:"Task",type_project:"Project",type_milestone:"Milestone", 11 | minutes:"Minutos",hours:"Horas",days:"Dias",weeks:"Semanas",months:"Meses",years:"Anos",message_ok:"OK",message_cancel:"Cancelar"}}; 12 | //# sourceMappingURL=../sources/locale/locale_pt.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_da.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Man","Tir","Ons","Tor","Fre","Lør"]},labels:{dhx_cal_today_button:"Idag",day_tab:"Dag",week_tab:"Uge",month_tab:"Måned",new_event:"Ny begivenhed",icon_save:"Gem",icon_cancel:"Fortryd", 10 | icon_details:"Detaljer",icon_edit:"Tilret",icon_delete:"Slet",confirm_closing:"Dine rettelser vil gå tabt.. Er dy sikker?",confirm_deleting:"Bigivenheden vil blive slettet permanent. Er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project", 11 | type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Fortryd"}}; 12 | //# sourceMappingURL=../sources/locale/locale_da.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_pl.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],month_short:["Sty","Lut","Mar","Kwi","Maj","Cze","Lip","Sie","Wrz","Paź","Lis","Gru"],day_full:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],day_short:["Nie","Pon","Wto","Śro","Czw","Pią","Sob"]},labels:{dhx_cal_today_button:"Dziś",day_tab:"Dzień",week_tab:"Tydzień",month_tab:"Miesiąc",new_event:"Nowe zdarzenie",icon_save:"Zapisz", 10 | icon_cancel:"Anuluj",icon_details:"Szczegóły",icon_edit:"Edytuj",icon_delete:"Usuń",confirm_closing:"",confirm_deleting:"Zdarzenie zostanie usunięte na zawsze, kontynuować?",section_description:"Opis",section_time:"Okres czasu",section_type:"Typ",column_text:"Nazwa zadania",column_start_date:"Początek",column_duration:"Czas trwania",column_add:"",link:"Link",confirm_link_deleting:"zostanie usunięty",link_start:" (początek)",link_end:" (koniec)",type_task:"Zadanie",type_project:"Projekt",type_milestone:"Milestone", 11 | minutes:"Minuty",hours:"Godziny",days:"Dni",weeks:"Tydzień",months:"Miesiące",years:"Lata",message_ok:"OK",message_cancel:"Anuluj"}}; 12 | //# sourceMappingURL=../sources/locale/locale_pl.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_ar.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],month_short:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],day_full:["الأحد","الأثنين","ألثلاثاء","الأربعاء","ألحميس","ألجمعة","السبت"],day_short:["احد","اثنين","ثلاثاء","اربعاء","خميس","جمعة","سبت"]},labels:{dhx_cal_today_button:"اليوم",day_tab:"يوم",week_tab:"أسبوع",month_tab:"شهر",new_event:"حدث جديد", 10 | icon_save:"اخزن",icon_cancel:"الغاء",icon_details:"تفاصيل",icon_edit:"تحرير",icon_delete:"حذف",confirm_closing:"التغييرات سوف تضيع, هل انت متأكد؟",confirm_deleting:"الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟",section_description:"الوصف",section_time:"الفترة الزمنية",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project", 11 | type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"الغاء"}}; 12 | //# sourceMappingURL=../sources/locale/locale_ar.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_ro.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","November","December"],month_short:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],day_full:["Duminica","Luni","Marti","Miercuri","Joi","Vineri","Sambata"],day_short:["Du","Lu","Ma","Mi","Jo","Vi","Sa"]},labels:{dhx_cal_today_button:"Astazi",day_tab:"Zi",week_tab:"Saptamana",month_tab:"Luna",new_event:"Eveniment nou",icon_save:"Salveaza",icon_cancel:"Anuleaza", 10 | icon_details:"Detalii",icon_edit:"Editeaza",icon_delete:"Sterge",confirm_closing:"Schimbarile nu vor fi salvate, esti sigur?",confirm_deleting:"Evenimentul va fi sters permanent, esti sigur?",section_description:"Descriere",section_time:"Interval",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone", 11 | minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Anuleaza"}}; 12 | //# sourceMappingURL=../sources/locale/locale_ro.js.map -------------------------------------------------------------------------------- /app/static/js/locale/locale_el.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.locale={date:{month_full:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάϊος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],month_short:["ΙΑΝ","ΦΕΒ","ΜΑΡ","ΑΠΡ","ΜΑΙ","ΙΟΥΝ","ΙΟΥΛ","ΑΥΓ","ΣΕΠ","ΟΚΤ","ΝΟΕ","ΔΕΚ"],day_full:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Κυριακή"],day_short:["ΚΥ","ΔΕ","ΤΡ","ΤΕ","ΠΕ","ΠΑ","ΣΑ"]},labels:{dhx_cal_today_button:"Σήμερα",day_tab:"Ημέρα",week_tab:"Εβδομάδα",month_tab:"Μήνας",new_event:"Νέο έργο", 10 | icon_save:"Αποθήκευση",icon_cancel:"Άκυρο",icon_details:"Λεπτομέρειες",icon_edit:"Επεξεργασία",icon_delete:"Διαγραφή",confirm_closing:"",confirm_deleting:"Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;",section_description:"Περιγραφή",section_time:"Χρονική περίοδος",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project", 11 | type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Άκυρο"}}; 12 | //# sourceMappingURL=../sources/locale/locale_el.js.map -------------------------------------------------------------------------------- /app/api_1_0/resources/link.py: -------------------------------------------------------------------------------- 1 | from flask import jsonify 2 | from flask_restful import Resource, reqparse 3 | from datetime import datetime 4 | from app.models import TaskLink as DBTaskLink 5 | from app import db 6 | 7 | 8 | link_parser = reqparse.RequestParser() 9 | link_parser.add_argument('source', type=int, help='link source') 10 | link_parser.add_argument('target', type=int, help='link destination') 11 | link_parser.add_argument('type', type=int, help='link type') 12 | 13 | 14 | class Link(Resource): 15 | 16 | # create a new link between two tasks 17 | def post(self): 18 | args = link_parser.parse_args() 19 | temp_tasklink = DBTaskLink() 20 | temp_tasklink.source = args['source'] 21 | temp_tasklink.target = args['target'] 22 | temp_tasklink.type = args['type'] 23 | db.session.add(temp_tasklink) 24 | db.session.commit() 25 | 26 | return jsonify(temp_tasklink.serialize) 27 | 28 | # Update a existing task 29 | def put(self,tasklink_id): 30 | args = task_parser.parse_args() 31 | 32 | temp_tasklink = DBTaskLink.query.get(tasklink_id) 33 | temp_tasklink.source = args['source'] 34 | temp_tasklink.target = args['target'] 35 | temp_tasklink.type = args['type'] 36 | 37 | db.session.add(temp_task) 38 | db.session.commit() 39 | 40 | return jsonify(temp_task.serialize) 41 | 42 | # Delete a existing link 43 | def delete(self, tasklink_id): 44 | DBTaskLink.query.filter_by(id=tasklink_id).delete() 45 | db.session.commit() 46 | return 47 | -------------------------------------------------------------------------------- /app/models.py: -------------------------------------------------------------------------------- 1 | from app import db 2 | 3 | def dump_datetime(value): 4 | """Deserialize datetime object into string form for JSON processing.""" 5 | if value is None: 6 | return None 7 | return [value.strftime("%Y-%m-%d"), value.strftime("%H:%M:%S")] 8 | 9 | 10 | class Task(db.Model): 11 | 12 | __tablename__ = "tasks" 13 | 14 | id = db.Column(db.Integer, primary_key=True) 15 | text = db.Column(db.String, nullable=False) 16 | start_date = db.Column(db.DateTime, nullable=False) 17 | duration = db.Column(db.Integer, nullable=False) 18 | progress = db.Column(db.Float, nullable=False) 19 | sortorder = db.Column(db.Integer, nullable=False) 20 | parent = db.Column(db.Integer, nullable=False) 21 | 22 | @property 23 | def serialize(self): 24 | """Return object data in easily serializeable format""" 25 | return { 26 | 'id' : self.id, 27 | 'text' : self.text, 28 | 'start_date' : self.start_date.strftime("%d-%m-%Y"), 29 | 'duration' : self.duration, 30 | 'progress' : self.progress, 31 | 'sortorder' : self.sortorder, 32 | 'parent' : self.parent 33 | } 34 | 35 | 36 | class TaskLink(db.Model): 37 | 38 | __tablename__ = "tasklinks" 39 | 40 | id = db.Column(db.Integer, primary_key=True) 41 | source = db.Column(db.Integer, nullable=False) 42 | target = db.Column(db.Integer,nullable=False) 43 | type = db.Column(db.String) 44 | 45 | @property 46 | def serialize(self): 47 | """Return object data in easily serializeable format""" 48 | return { 49 | 'id' : self.id, 50 | 'source' : self.source, 51 | 'target' : self.target, 52 | 'type' : self.type 53 | } 54 | -------------------------------------------------------------------------------- /app/static/js/ext/dhtmlxgantt_marker.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt._markers||(gantt._markers={}),gantt.config.show_markers=!0,gantt.attachEvent("onClear",function(){gantt._markers={}}),gantt.attachEvent("onGanttReady",function(){function t(t){if(!gantt.config.show_markers)return!1;if(!t.start_date)return!1;var e=gantt.getState();if(!(+t.start_date>+e.max_date||+t.end_date&&+t.end_date<+e.min_date||+t.start_date<+e.min_date)){var n=document.createElement("div");n.setAttribute("marker_id",t.id);var a="gantt_marker";gantt.templates.marker_class&&(a+=" "+gantt.templates.marker_class(t)), 10 | t.css&&(a+=" "+t.css),t.title&&(n.title=t.title),n.className=a;var i=gantt.posFromDate(t.start_date);if(n.style.left=i+"px",n.style.height=Math.max(gantt._y_from_ind(gantt._order.length),0)+"px",t.end_date){var s=gantt.posFromDate(t.end_date);n.style.width=Math.max(s-i,0)+"px"}return t.text&&(n.innerHTML="
"+t.text+"
"),n}}var e=document.createElement("div");e.className="gantt_marker_area",gantt.$task_data.appendChild(e),gantt.$marker_area=e,gantt._markerRenderer=gantt._task_renderer("markers",t,gantt.$marker_area,null); 11 | }),gantt.attachEvent("onDataRender",function(){gantt.renderMarkers()}),gantt.getMarker=function(t){return this._markers?this._markers[t]:null},gantt.addMarker=function(t){return t.id=t.id||gantt.uid(),this._markers[t.id]=t,t.id},gantt.deleteMarker=function(t){return this._markers&&this._markers[t]?(delete this._markers[t],!0):!1},gantt.updateMarker=function(t){this._markerRenderer&&this._markerRenderer.render_item(this.getMarker(t))},gantt._getMarkers=function(){var t=[];for(var e in this._markers)t.push(this._markers[e]); 12 | return t},gantt.renderMarkers=function(){if(!this._markers)return!1;if(!this._markerRenderer)return!1;var t=this._getMarkers();return this._markerRenderer.render_items(t),!0}; 13 | //# sourceMappingURL=../sources/ext/dhtmlxgantt_marker.js.map -------------------------------------------------------------------------------- /app/templates/ganttchart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Gant 6 | 7 | 8 | 9 | 10 | 20 | 21 | 22 |
23 | 72 | 73 | -------------------------------------------------------------------------------- /app/api_1_0/resources/task.py: -------------------------------------------------------------------------------- 1 | from flask import jsonify 2 | from flask_restful import Resource, reqparse 3 | from datetime import datetime 4 | from app.models import Task as DBTask 5 | from app.models import TaskLink as DBTaskLink 6 | from app import db 7 | 8 | 9 | task_parser = reqparse.RequestParser() 10 | task_parser.add_argument('text', type=str, help='A short description of the task') 11 | task_parser.add_argument('parent', type=int, help='ID of the parent task (or 0)') 12 | task_parser.add_argument('duration', type=int, help='The task duration (in days)') 13 | task_parser.add_argument('progress', type=float, help='Progress of the task') 14 | task_parser.add_argument('start_date', type=lambda x: datetime.strptime(x,'%d-%m-%Y %H:%M'), help='Start date of the task') 15 | task_parser.add_argument('end_date', type=lambda x: datetime.strptime(x,'%d-%m-%Y %H:%M'), help='End date of the task') 16 | 17 | 18 | class Task(Resource): 19 | 20 | # create a new task 21 | def post(self): 22 | args = task_parser.parse_args() 23 | 24 | temp_task = DBTask() 25 | temp_task.text = args['text'] 26 | temp_task.parent = args['parent'] 27 | temp_task.duration = args['duration'] 28 | temp_task.start_date = args['start_date'] 29 | temp_task.progress = 0 30 | temp_task.sortorder = 0 31 | 32 | db.session.add(temp_task) 33 | db.session.commit() 34 | 35 | return jsonify(temp_task.serialize) 36 | 37 | # Update a existing task 38 | def put(self,task_id): 39 | args = task_parser.parse_args() 40 | 41 | temp_task = DBTask.query.get(task_id) 42 | temp_task.text = args['text'] 43 | temp_task.parent = args['parent'] 44 | temp_task.duration = args['duration'] 45 | temp_task.start_date = args['start_date'] 46 | temp_task.progress = args['progress'] 47 | temp_task.sortorder = 0 48 | 49 | db.session.add(temp_task) 50 | db.session.commit() 51 | 52 | return jsonify(temp_task.serialize) 53 | 54 | # Delete a existing task 55 | def delete(self, task_id): 56 | DBTask.query.filter_by(id=task_id).delete() 57 | db.session.commit() 58 | return 59 | 60 | 61 | class TaskList(Resource): 62 | def get(self): 63 | tasks = DBTask.query.all() 64 | links = DBTaskLink.query.all() 65 | return jsonify(data=[i.serialize for i in tasks],links=[j.serialize for j in links]) 66 | -------------------------------------------------------------------------------- /app/static/js/ext/dhtmlxgantt_csp.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.date.date_to_str=function(t,e){return function(a){return t.replace(/%[a-zA-Z]/g,function(t){switch(t){case"%d":return e?gantt.date.to_fixed(a.getUTCDate()):gantt.date.to_fixed(a.getDate());case"%m":return e?gantt.date.to_fixed(a.getUTCMonth()+1):gantt.date.to_fixed(a.getMonth()+1);case"%j":return e?a.getUTCDate():a.getDate();case"%n":return e?a.getUTCMonth()+1:a.getMonth()+1;case"%y":return e?gantt.date.to_fixed(a.getUTCFullYear()%100):gantt.date.to_fixed(a.getFullYear()%100);case"%Y":return e?a.getUTCFullYear():a.getFullYear(); 10 | case"%D":return e?gantt.locale.date.day_short[a.getUTCDay()]:gantt.locale.date.day_short[a.getDay()];case"%l":return e?gantt.locale.date.day_full[a.getUTCDay()]:gantt.locale.date.day_full[a.getDay()];case"%M":return e?gantt.locale.date.month_short[a.getUTCMonth()]:gantt.locale.date.month_short[a.getMonth()];case"%F":return e?gantt.locale.date.month_full[a.getUTCMonth()]:gantt.locale.date.month_full[a.getMonth()];case"%h":return e?gantt.date.to_fixed((a.getUTCHours()+11)%12+1):gantt.date.to_fixed((a.getHours()+11)%12+1); 11 | case"%g":return e?(a.getUTCHours()+11)%12+1:(a.getHours()+11)%12+1;case"%G":return e?a.getUTCHours():a.getHours();case"%H":return e?gantt.date.to_fixed(a.getUTCHours()):gantt.date.to_fixed(a.getHours());case"%i":return e?gantt.date.to_fixed(a.getUTCMinutes()):gantt.date.to_fixed(a.getMinutes());case"%a":return e?a.getUTCHours()>11?"pm":"am":a.getHours()>11?"pm":"am";case"%A":return e?a.getUTCHours()>11?"PM":"AM":a.getHours()>11?"PM":"AM";case"%s":return e?gantt.date.to_fixed(a.getUTCSeconds()):gantt.date.to_fixed(a.getSeconds()); 12 | case"%W":return e?gantt.date.to_fixed(gantt.date.getUTCISOWeek(a)):gantt.date.to_fixed(gantt.date.getISOWeek(a));default:return t}})}},gantt.date.str_to_date=function(t,e){return function(a){for(var n=[0,0,1,0,0,0],r=a.match(/[a-zA-Z]+|[0-9]+/g),g=t.match(/%[a-zA-Z]/g),o=0;o50?1900:2e3);break;case"%g":case"%G":case"%h":case"%H":n[3]=r[o]||0;break;case"%i":n[4]=r[o]||0; 13 | break;case"%Y":n[0]=r[o]||0;break;case"%a":case"%A":n[3]=n[3]%12+("am"==(r[o]||"").toLowerCase()?0:12);break;case"%s":n[5]=r[o]||0;break;case"%M":n[1]=gantt.locale.date.month_short_hash[r[o]]||0;break;case"%F":n[1]=gantt.locale.date.month_full_hash[r[o]]||0}return e?new Date(Date.UTC(n[0],n[1],n[2],n[3],n[4],n[5])):new Date(n[0],n[1],n[2],n[3],n[4],n[5])}}; 14 | //# sourceMappingURL=../sources/ext/dhtmlxgantt_csp.js.map -------------------------------------------------------------------------------- /app/static/js/ext/dhtmlxgantt_fullscreen.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt._onFullScreenChange=function(){!gantt.getState().fullscreen||null!==document.fullscreenElement&&null!==document.mozFullScreenElement&&null!==document.webkitFullscreenElement&&null!==document.msFullscreenElement||gantt.collapse()},document.addEventListener&&(document.addEventListener("webkitfullscreenchange",gantt._onFullScreenChange),document.addEventListener("mozfullscreenchange",gantt._onFullScreenChange),document.addEventListener("MSFullscreenChange",gantt._onFullScreenChange),document.addEventListener("fullscreenChange",gantt._onFullScreenChange), 10 | document.addEventListener("fullscreenchange",gantt._onFullScreenChange)),gantt.expand=function(){if(gantt.callEvent("onBeforeExpand",[])){gantt._toggleFullScreen(!0);var e=gantt._obj;do e._position=e.style.position||"",e.style.position="static";while((e=e.parentNode)&&e.style);e=gantt._obj,e.style.position="absolute",e._width=e.style.width,e._height=e.style.height,e.style.width=e.style.height="100%",e.style.top=e.style.left="0px";var t=document.body;t.scrollTop=0,t=t.parentNode,t&&(t.scrollTop=0), 11 | document.body._overflow=document.body.style.overflow||"",document.body.style.overflow="hidden",document.documentElement.msRequestFullscreen&&gantt._obj&&window.setTimeout(function(){gantt._obj.style.width=window.outerWidth+"px"},1),gantt._maximize(),gantt.callEvent("onExpand",[])}},gantt.collapse=function(){if(gantt.callEvent("onBeforeCollapse",[])){var e=gantt._obj;do e.style.position=e._position;while((e=e.parentNode)&&e.style);e=gantt._obj,e.style.width=e._width,e.style.height=e._height,document.body.style.overflow=document.body._overflow, 12 | gantt._toggleFullScreen(!1),gantt._maximize(),gantt.callEvent("onCollapse",[])}},function(){var e=gantt.getState;gantt.getState=function(){var t=e.apply(this,arguments);return t.fullscreen=!!this._expanded,t}}(),gantt._maximize=function(){this._expanded=!this._expanded,this.render()},gantt._toggleFullScreen=function(e){!e&&(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement)?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():document.documentElement.requestFullscreen?document.documentElement.requestFullscreen():document.documentElement.msRequestFullscreen?document.documentElement.msRequestFullscreen():document.documentElement.mozRequestFullScreen?document.documentElement.mozRequestFullScreen():document.documentElement.webkitRequestFullscreen&&document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); 13 | }; 14 | //# sourceMappingURL=../sources/ext/dhtmlxgantt_fullscreen.js.map -------------------------------------------------------------------------------- /app/static/js/ext/dhtmlxgantt_tooltip.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt._tooltip={},gantt._tooltip_class="gantt_tooltip",gantt.config.tooltip_timeout=30,gantt.config.tooltip_offset_y=20,gantt.config.tooltip_offset_x=10,gantt._create_tooltip=function(){return this._tooltip_html||(this._tooltip_html=document.createElement("div"),this._tooltip_html.className=gantt._tooltip_class,this._waiAria.tooltipAttr(this._tooltip_html)),this._tooltip_html},gantt._is_cursor_under_tooltip=function(t,e){return t.x>=e.pos.x&&t.x<=e.pos.x+e.width?!0:t.y>=e.pos.y&&t.y<=e.pos.y+e.height?!0:!1; 10 | },gantt._show_tooltip=function(t,e){if(!gantt.config.touch||gantt.config.touch_tooltip){var n=this._create_tooltip();n.innerHTML=t,gantt.$task_data.appendChild(n);var a=n.offsetWidth+20,i=n.offsetHeight+40,s=this.$task.offsetHeight,r=this.$task.offsetWidth,o=this.getScrollState();gantt._waiAria.tooltipVisibleAttr(n),e.y+=o.y;var l={x:e.x,y:e.y};e.x+=1*gantt.config.tooltip_offset_x||0,e.y+=1*gantt.config.tooltip_offset_y||0,e.y=Math.min(Math.max(o.y,e.y),o.y+s-i),e.x=Math.min(Math.max(o.x,e.x),o.x+r-a), 11 | gantt._is_cursor_under_tooltip(l,{pos:e,width:a,height:i})&&(l.x+a>r+o.x&&(e.x=l.x-(a-20)-(1*gantt.config.tooltip_offset_x||0)),l.y+i>s+o.y&&(e.y=l.y-(i-40)-(1*gantt.config.tooltip_offset_y||0))),n.style.left=e.x+"px",n.style.top=e.y+"px"}},gantt._hide_tooltip=function(){this._tooltip_html&&this._waiAria.tooltipHiddenAttr(this._tooltip_html),this._tooltip_html&&this._tooltip_html.parentNode&&this._tooltip_html.parentNode.removeChild(this._tooltip_html),this._tooltip_id=0},gantt._is_tooltip=function(t){ 12 | var e=t.target||t.srcElement;return gantt._is_node_child(e,function(t){return t.className==this._tooltip_class})},gantt._is_task_line=function(t){var e=t.target||t.srcElement;return gantt._is_node_child(e,function(t){return t==this.$task_data})},gantt._is_node_child=function(t,e){for(var n=!1;t&&!n;)n=e.call(gantt,t),t=t.parentNode;return n},gantt._tooltip_pos=function(t){if(t.pageX||t.pageY)var e={x:t.pageX,y:t.pageY};var n=gantt.env.isIE?document.documentElement:document.body,e={x:t.clientX+n.scrollLeft-n.clientLeft, 13 | y:t.clientY+n.scrollTop-n.clientTop},a=gantt._get_position(gantt.$task_data);return e.x=e.x-a.x,e.y=e.y-a.y,e},gantt.attachEvent("onMouseMove",function(t,e){if(this.config.tooltip_timeout){document.createEventObject&&!document.createEvent&&(e=document.createEventObject(e));var n=this.config.tooltip_timeout;this._tooltip_id&&!t&&(isNaN(this.config.tooltip_hide_timeout)||(n=this.config.tooltip_hide_timeout)),clearTimeout(gantt._tooltip_ev_timer),gantt._tooltip_ev_timer=setTimeout(function(){gantt._init_tooltip(t,e); 14 | },n)}else gantt._init_tooltip(t,e)}),gantt._init_tooltip=function(t,e){if(!this._is_tooltip(e)&&(t!=this._tooltip_id||this._is_task_line(e))){if(!t)return this._hide_tooltip();this._tooltip_id=t;var n=this.getTask(t),a=this.templates.tooltip_text(n.start_date,n.end_date,n);return a?void this._show_tooltip(a,this._tooltip_pos(e)):void this._hide_tooltip()}},gantt.attachEvent("onMouseLeave",function(t){gantt._is_tooltip(t)||this._hide_tooltip()}); 15 | //# sourceMappingURL=../sources/ext/dhtmlxgantt_tooltip.js.map -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dhtmlxganttservice 2 | A minimal implementation of the REST service that is used by [dhtmlxgantt](https://dhtmlx.com/docs/products/dhtmlxGantt/). Based on Python/Flask. 3 | 4 | ## Installation 5 | Create a virutal environment (python 2.7): 6 | ``` 7 | h0ng10@linux-dev:~/development/dhtmlxganttservice$ virtualenv env 8 | New python executable in /home/h0ng10/development/dhtmlxganttservice/env/bin/python 9 | Installing setuptools, pip, wheel...done. 10 | ``` 11 | 12 | Activate the virtual environment: 13 | ``` 14 | h0ng10@linux-dev:~/development/dhtmlxganttservice$ source env/bin/activate 15 | (env) h0ng10@linux-dev:~/development/dhtmlxganttservice$ pip install -r requirements.txt 16 | ``` 17 | Install the necessary Python packages: 18 | ``` 19 | Collecting aniso8601==1.2.1 (from -r requirements.txt (line 1)) 20 | Collecting click==6.7 (from -r requirements.txt (line 2)) 21 | Using cached click-6.7-py2.py3-none-any.whl 22 | Collecting Flask==0.12.2 (from -r requirements.txt (line 3)) 23 | Using cached Flask-0.12.2-py2.py3-none-any.whl 24 | Collecting Flask-RESTful==0.3.6 (from -r requirements.txt (line 4)) 25 | Using cached Flask_RESTful-0.3.6-py2.py3-none-any.whl 26 | Collecting Flask-SQLAlchemy==2.2 (from -r requirements.txt (line 5)) 27 | Using cached Flask_SQLAlchemy-2.2-py2.py3-none-any.whl 28 | Collecting itsdangerous==0.24 (from -r requirements.txt (line 6)) 29 | Collecting Jinja2==2.9.6 (from -r requirements.txt (line 7)) 30 | Using cached Jinja2-2.9.6-py2.py3-none-any.whl 31 | Collecting MarkupSafe==1.0 (from -r requirements.txt (line 8)) 32 | Collecting python-dateutil==2.6.1 (from -r requirements.txt (line 9)) 33 | Using cached python_dateutil-2.6.1-py2.py3-none-any.whl 34 | Collecting pytz==2017.2 (from -r requirements.txt (line 10)) 35 | Using cached pytz-2017.2-py2.py3-none-any.whl 36 | Collecting six==1.10.0 (from -r requirements.txt (line 11)) 37 | Using cached six-1.10.0-py2.py3-none-any.whl 38 | Collecting SQLAlchemy==1.1.11 (from -r requirements.txt (line 12)) 39 | Collecting Werkzeug==0.12.2 (from -r requirements.txt (line 13)) 40 | Using cached Werkzeug-0.12.2-py2.py3-none-any.whl 41 | Installing collected packages: six, python-dateutil, aniso8601, click, Werkzeug, MarkupSafe, Jinja2, itsdangerous, Flask, pytz, Flask-RESTful, SQLAlchemy, Flask-SQLAlchemy 42 | Successfully installed Flask-0.12.2 Flask-RESTful-0.3.6 Flask-SQLAlchemy-2.2 Jinja2-2.9.6 MarkupSafe-1.0 SQLAlchemy-1.1.11 Werkzeug-0.12.2 aniso8601-1.2.1 click-6.7 itsdangerous-0.24 python-dateutil-2.6.1 pytz-2017.2 six-1.10.0 43 | (env) h0ng10@linux-dev:~/development/dhtmlxganttservice$ 44 | ``` 45 | Set the following environment variables: 46 | ``` 47 | (env) h0ng10@linux-dev:~/development/dhtmlxganttservice$ export FLASK_APP=ganttservice.py 48 | (env) h0ng10@linux-dev:~/development/dhtmlxganttservice$ export FLASK_DEBUG=1 49 | ``` 50 | Init the Sqlite3 database: 51 | ``` 52 | (env) h0ng10@linux-dev:~/development/dhtmlxganttservice$ flask initdb 53 | ``` 54 | 55 | Start the application 56 | ``` 57 | (env) h0ng10@linux-dev:~/development/dhtmlxganttservice$ flask run 58 | * Serving Flask app "ganttservice" 59 | * Forcing debug mode on 60 | * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 61 | * Restarting with stat 62 | * Debugger is active! 63 | * Debugger PIN: 613-510-496 64 | ``` 65 | ## Links 66 | [dhtmlxgantt REST service documentation](https://docs.dhtmlx.com/gantt/desktop__server_side.html#savingdatafromrestserver) 67 | -------------------------------------------------------------------------------- /app/static/js/ext/dhtmlxgantt_multiselect.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.config.multiselect=!0,gantt.config.multiselect_one_level=!1,gantt._multiselect={selected:{},one_level:!0,active:!0,isActive:function(){return this.update_state(),this.active},update_state:function(){this.one_level=gantt.config.multiselect_one_level;var t=this.active;this.active=gantt.config.multiselect,this.active!=t&&this.reset()},reset:function(){this.selected={}},set_last_selected:function(t){this.last_selected=t},getLastSelected:function(){var t=this.last_selected;return t&&gantt.isTaskExists(t)?t:null; 10 | },select:function(t,e){gantt.callEvent("onBeforeTaskMultiSelect",[t,!0,e])&&(this.selected[t]=!0,this.set_last_selected(t),gantt.callEvent("onTaskMultiSelect",[t,!0,e]))},toggle:function(t,e){this.selected[t]?this.unselect(t,e):this.select(t,e)},unselect:function(t,e){gantt.callEvent("onBeforeTaskMultiSelect",[t,!1,e])&&(this.selected[t]=!1,this.last_selected==t&&(this.last_selected=null),gantt.callEvent("onTaskMultiSelect",[t,!0,e]))},isSelected:function(t){return!(!gantt.isTaskExists(t)||!this.selected[t]); 11 | },getSelected:function(){var t=[];for(var e in this.selected)this.selected[e]&&gantt.isTaskExists(e)?t.push(e):this.selected[e]=!1;return t.sort(function(t,e){return gantt.calculateTaskLevel(gantt.getTask(t))>gantt.calculateTaskLevel(gantt.getTask(e))?1:-1}),t},forSelected:function(t){for(var e=this.getSelected(),n=0;ns?gantt.getNext(r):gantt.getPrev(r);this.forSelected(gantt.bind(function(t){var e=gantt.getGlobalTaskIndex(t);(e>i&&e>s||i>e&&s>e)&&(this.unselect(t),gantt.refreshTask(t))},this))}}else this.forSelected(gantt.bind(function(t){t!=e&&(this.unselect(t),gantt.refreshTask(t))},this)),this.isSelected(e)||(this.select(e),this._after_select(e));return this.isSelected(e)?!0:!1}},function(){var t=gantt.selectTask;gantt.selectTask=function(e){var n=t.call(this,e);return this.config.multiselect&&this._multiselect.select(e), 14 | n};var e=gantt.unselectTask;gantt.unselectTask=function(t){void 0!==t&&this.config.multiselect&&this._multiselect.unselect(t);var n=e.call(this,t);return n},gantt.toggleTaskSelection=function(t){this.config.multiselect&&this._multiselect.toggle(t)},gantt.getSelectedTasks=function(){return this._multiselect.getSelected()},gantt.eachSelectedTask=function(t){return this._multiselect.forSelected(t)},gantt.isSelectedTask=function(t){return this._multiselect.isSelected(t)},gantt.getLastSelectedTask=function(){ 15 | return this._multiselect.getLastSelected()}}(),gantt.attachEvent("onTaskIdChange",function(t,e){var n=gantt._multiselect;return n.isActive()?void(gantt.isSelectedTask(t)&&(n.unselect(t,null),n.select(e,null),gantt.refreshTask(e))):!0}),gantt.attachEvent("onAfterTaskDelete",function(t,e){var n=gantt._multiselect;return n.isActive()?(n.selected[t]&&n.unselect(t,null),void n.forSelected(function(t){gantt.isTaskExists(t)||n.unselect(t,null)})):!0}),gantt.attachEvent("onBeforeTaskMultiSelect",function(t,e,n){ 16 | var a=gantt._multiselect;return e&&a.isActive()?a.is_same_level(t):!0}),gantt.attachEvent("onTaskClick",function(t,e){var n=gantt._multiselect._do_selection(e);return gantt.callEvent("onMultiSelect",[e]),n}),gantt.attachEvent("onEmptyClick",function(t){return gantt._multiselect._do_selection(t),gantt.callEvent("onMultiSelect",[t]),!0}); 17 | //# sourceMappingURL=../sources/ext/dhtmlxgantt_multiselect.js.map -------------------------------------------------------------------------------- /app/static/js/ext/dhtmlxgantt_smart_rendering.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.config.smart_rendering=!0,gantt._smart_render={getViewPort:function(){var t=this.getScrollSizes(),e=gantt._restore_scroll_state();return e.y=Math.min(t.y_inner-t.y,e.y),{y:e.y,y_end:e.y+t.y}},getScrollSizes:function(){var t=gantt._scroll_sizes();return t.x=t.x||0,t.y=t.y||gantt._order.length*gantt.config.row_height,t},isInViewPort:function(t,e){return!!(t.ye.y)},isTaskDisplayed:function(t){return this.isInViewPort(this.getTaskPosition(t),this.getViewPort())},isLinkDisplayed:function(t){ 10 | return this.isInViewPort(this.getLinkPosition(t),this.getViewPort())},getTaskPosition:function(t){var e=gantt.getTaskTop(t);return{y:e,y_end:e+gantt.config.row_height}},getLinkPosition:function(t){var e=gantt.getLink(t),n=gantt.getTaskTop(e.source),a=gantt.getTaskTop(e.target);return{y:Math.min(n,a),y_end:Math.max(n,a)+gantt.config.row_height}},getRange:function(t){t=t||0;var e=this.getViewPort(),n=Math.floor(Math.max(0,e.y)/gantt.config.row_height)-t,a=Math.ceil(Math.max(0,e.y_end)/gantt.config.row_height)+t,i=gantt._order.slice(n,a); 11 | return i},_redrawItems:function(t,e){for(var n in t){var a=t[n];for(var n in a.rendered)a.hide(n);for(var i=0;i
'; 15 | s+='
';for(var r=gantt.config.quickinfo_buttons,o={icon_delete:!0,icon_edit:!0},l=0;l
"+gantt.locale.labels[r[l]]+"
"}s+="",a.innerHTML=s;var _=function(t){t=t||event,gantt._qi_button_click(t.target||t.srcElement); 16 | };gantt.event(a,"click",_),gantt.event(a,"keypress",function(t){t=t||event;var e=t.which||event.keyCode;(13==e||32==e)&&setTimeout(function(){gantt._qi_button_click(t.target||t.srcElement)},1)}),gantt.config.quick_info_detached&&gantt.event(gantt.$task_data,"scroll",function(){gantt.hideQuickInfo()})}return this._quick_info_box},gantt._qi_button_click=function(t){var e=gantt._quick_info_box;if(t&&t!=e){var n=t.className;if(-1!=n.indexOf("_icon")){var a=gantt._quick_info_box_id;gantt.$click.buttons[n.split(" ")[1].replace("icon_","")](a); 17 | }else gantt._qi_button_click(t.parentNode)}},gantt._get_event_counter_part=function(t){for(var e=gantt.getTaskNode(t),n=0,a=0,i=e;i&&"gantt_task"!=i.className;)n+=i.offsetLeft,a+=i.offsetTop,i=i.offsetParent;var s=this.getScrollState();if(i){var r=n+e.offsetWidth/2-s.x>gantt._x/2?1:0,o=a+e.offsetHeight/2-s.y>gantt._y/2?1:0;return{left:n,top:a,dx:r,dy:o,width:e.offsetWidth,height:e.offsetHeight}}return 0},gantt._fill_quick_data=function(t){var e=gantt.getTask(t),n=gantt._quick_info_box;gantt._quick_info_box_id=t; 18 | var a={content:gantt.templates.quick_info_title(e.start_date,e.end_date,e),date:gantt.templates.quick_info_date(e.start_date,e.end_date,e)},i=n.firstChild.firstChild;i.innerHTML=a.content;var s=i.nextSibling;s.innerHTML=a.date,gantt._waiAria.quickInfoHeader(n,[a.content,a.date].join(" "));var r=n.firstChild.nextSibling;r.innerHTML=gantt.templates.quick_info_content(e.start_date,e.end_date,e)}; 19 | //# sourceMappingURL=../sources/ext/dhtmlxgantt_quick_info.js.map -------------------------------------------------------------------------------- /app/static/js/ext/dhtmlxgantt_undo.js: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | gantt.config.undo_steps=10,gantt.config.undo=!0,gantt.config.redo=!0,gantt.undo=function(){this._undo.undo()},gantt.getUndoStack=function(){return this._undo._undoStack},gantt.getRedoStack=function(){return this._undo._redoStack},gantt.redo=function(){this._undo.redo()},gantt.config.undo_types={link:"link",task:"task"},gantt.config.undo_actions={update:"update",remove:"remove",add:"add"},gantt._undo={_undoStack:[],_redoStack:[],maxSteps:10,undo_enabled:!0,redo_enabled:!0,_push:function(t,e){if(e.commands.length){ 10 | for(t.push(e);t.length>this.maxSteps;)t.shift();return e}},_pop:function(t){return t.pop()},undo:function(){if(this.updateConfigs(),this.undo_enabled){var t=this._pop(this._undoStack);gantt.callEvent("onBeforeUndo",[t])!==!1&&t&&(this._applyAction(this.action.invert(t)),this._push(this._redoStack,t)),gantt.callEvent("onAfterUndo",[])}},redo:function(){if(this.updateConfigs(),this.redo_enabled){var t=this._pop(this._redoStack);gantt.callEvent("onBeforeRedo",[t])!==!1&&t&&(this._applyAction(t),this._push(this._undoStack,t)), 11 | gantt.callEvent("onAfterRedo",[])}},_applyAction:function(t){var e=null,n=this.command.entity,a=this.command.type,i={};i[n.task]={add:"addTask",update:"updateTask",remove:"deleteTask",isExists:"isTaskExists"},i[n.link]={add:"addLink",update:"updateLink",remove:"deleteLink",isExists:"isLinkExists"},gantt.batchUpdate(function(){for(var n=0;n=s){var o=a[a.length-1];if(o)return o.focus(),n.preventDefault(), 15 | !0}}else if(s>=a.length-1){var l=a[0];if(l)return l.focus(),n.preventDefault(),!0}return!1}}(),t.$keyboardNavigation.GanttNode=function(){},t.$keyboardNavigation.GanttNode.prototype=t._compose(t.$keyboardNavigation.EventHandler,{focus:function(){t.focus()},blur:function(){},disable:function(){t.$container.setAttribute("tabindex","0")},enable:function(){t.$container&&t.$container.removeAttribute("tabindex")},isEnabled:function(){return t.$container.hasAttribute("tabindex")},scrollHorizontal:function(e){ 16 | var n=t.dateFromPos(t.getScrollState().x),a=0>e?-t.config.step:t.config.step;n=t.date.add(n,a,t.config.scale_unit),t.scrollTo(t.posFromDate(n))},scrollVertical:function(e){var n=t.getScrollState().y,a=t.config.row_height;t.scrollTo(null,n+(0>e?-1:1)*a)},keys:{"alt+left":function(t){this.scrollHorizontal(-1)},"alt+right":function(t){this.scrollHorizontal(1)},"alt+up":function(t){this.scrollVertical(-1)},"alt+down":function(t){this.scrollVertical(1)},"ctrl+z":function(){t.undo&&t.undo()},"ctrl+r":function(){ 17 | t.redo&&t.redo()}}}),t.$keyboardNavigation.GanttNode.prototype.bindAll(t.$keyboardNavigation.GanttNode.prototype.keys),t.$keyboardNavigation.KeyNavNode=function(){},t.$keyboardNavigation.KeyNavNode.prototype=t._compose(t.$keyboardNavigation.EventHandler,{isValid:function(){return!0},fallback:function(){return null},moveTo:function(e){t.$keyboardNavigation.dispatcher.setActiveNode(e)},compareTo:function(t){if(!t)return!1;for(var e in this){if(!!this[e]!=!!t[e])return!1;var n=!(!this[e]||!this[e].toString),a=!(!t[e]||!t[e].toString); 18 | if(a!=n)return!1;if(a&&n){if(t[e].toString()!=this[e].toString())return!1}else if(t[e]!=this[e])return!1}},getNode:function(){},focus:function(){var t=this.getNode();t&&(t.setAttribute("tabindex","-1"),t.focus&&t.focus())},blur:function(){var t=this.getNode();t&&t.setAttribute("tabindex","-1")}}),t.$keyboardNavigation.HeaderCell=function(t){this.index=t||0},t.$keyboardNavigation.HeaderCell.prototype=t._compose(t.$keyboardNavigation.KeyNavNode,{_handlers:null,isValid:function(){return!t.config.show_grid&&t.getVisibleTaskCount()?!1:!!t.getGridColumns()[this.index]||!t.getVisibleTaskCount(); 19 | },fallback:function(){if(!t.config.show_grid)return t.getVisibleTaskCount()?new t.$keyboardNavigation.TaskRow:null;for(var e=t.getGridColumns(),n=this.index;n>=0&&!e[n];)n--;return e[n]?new t.$keyboardNavigation.HeaderCell(n):null},getNode:function(){var e=t.$grid_scale.childNodes;return e[this.index]},keys:{left:function(){this.index>0&&this.moveTo(new t.$keyboardNavigation.HeaderCell(this.index-1))},right:function(){var e=t.getGridColumns();this.index-1},fallback:function(){if(!t.getVisibleTaskCount()){ 22 | var e=new t.$keyboardNavigation.HeaderCell;return e.isValid()?e:null}var n=t._order,a=-1;if(n[this.index-1])a=this.index-1;else if(n[this.index+1])a=this.index+1;else for(var i=this.index;i>=0;){if(void 0!==n[i]){a=i;break}i--}return a>-1?new t.$keyboardNavigation.TaskRow(n[a]):void 0},getNode:function(){return t.isTaskExists(this.taskId)&&t.isTaskVisible(this.taskId)?t.config.show_grid?t.$grid.querySelector(".gantt_row["+t.config.task_attribute+"='"+this.taskId+"']"):t.getTaskNode(this.taskId):void 0; 23 | },focus:function(){t.showTask(this.taskId),t.$keyboardNavigation.KeyNavNode.prototype.focus.apply(this)},keys:{pagedown:function(){t._order.length&&this.moveTo(new t.$keyboardNavigation.TaskRow(t._order[t._order.length-1]))},pageup:function(){t._order.length&&this.moveTo(new t.$keyboardNavigation.TaskRow(t._order[0]))},up:function(){var e=null,n=t.getPrev(this.taskId);e=n?new t.$keyboardNavigation.TaskRow(n):new t.$keyboardNavigation.HeaderCell,this.moveTo(e)},down:function(){var e=t.getNext(this.taskId); 24 | e&&this.moveTo(new t.$keyboardNavigation.TaskRow(e))},space:function(e){t.getState().selected_task!=this.taskId?t.selectTask(this.taskId):t.unselectTask(this.taskId)},"ctrl+left":function(e){t.close(this.taskId)},"ctrl+right":function(e){t.open(this.taskId)},"delete":function(e){t.$click.buttons["delete"](this.taskId)},enter:function(){t.showLightbox(this.taskId)},"ctrl+enter":function(){t.createTask({},this.taskId)}}}),t.$keyboardNavigation.TaskRow.prototype.bindAll(t.$keyboardNavigation.TaskRow.prototype.keys), 25 | t.$keyboardNavigation.TaskCell=function(e,n){if(!e){var a=t.getChildren(t.config.root_id);a[0]&&(e=a[0])}this.taskId=e,this.columnIndex=n||0,this.index=t.getTaskIndex(this.taskId)},t.$keyboardNavigation.TaskCell.prototype=t._compose(t.$keyboardNavigation.TaskRow,{_handlers:null,isValid:function(){return t.$keyboardNavigation.TaskRow.prototype.isValid.call(this)&&!!t.getGridColumns()[this.columnIndex]},fallback:function(){var e=t.$keyboardNavigation.TaskRow.prototype.fallback.call(this);if(e instanceof t.$keyboardNavigation.TaskRow){ 26 | for(var n=t.getGridColumns(),a=this.columnIndex;a>=0&&!n[a];)a--;return n[a]?new t.$keyboardNavigation.TaskCell(e.taskId,a):e}},getNode:function(){if(t.isTaskExists(this.taskId)&&t.isTaskVisible(this.taskId)){if(t.config.show_grid){var e=t.$grid.querySelector(".gantt_row["+t.config.task_attribute+"='"+this.taskId+"']");return e.childNodes[this.columnIndex]}return t.getTaskNode(this.taskId)}},keys:{up:function(){var e=null,n=t.getPrev(this.taskId);e=n?new t.$keyboardNavigation.TaskCell(n,this.columnIndex):new t.$keyboardNavigation.HeaderCell(this.columnIndex), 27 | this.moveTo(e)},down:function(){var e=t.getNext(this.taskId);e&&this.moveTo(new t.$keyboardNavigation.TaskCell(e,this.columnIndex))},left:function(){this.columnIndex>0&&this.moveTo(new t.$keyboardNavigation.TaskCell(this.taskId,this.columnIndex-1))},right:function(){var e=t.getGridColumns();this.columnIndex 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /app/static/css/skins/dhtmlxgantt_meadow.css: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | .chartHeaderBg{background-color:#f4f2ea}.gridHoverStyle{background-color:#ffebbc!important}.gantt_grid_scale .gantt_grid_head_cell{border-top:none!important;border-right:none!important}.gantt_grid_data .gantt_cell{border-right:none}.gridSelection,.timelineSelection{background-color:#ffebbc!important}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:16px;margin-left:-8px;width:16px}.gantt_task .gantt_task_scale .gantt_scale_cell{border-right:1px solid #cac8bd}.gantt_row.gantt_project .gantt_cell,.gantt_row.odd.gantt_project .gantt_cell{background-color:#edf4ff}.gantt_task_row.gantt_project .gantt_task_cell,.gantt_task_row.odd.gantt_project .gantt_task_cell{background-color:#f5f8ff}.gantt_task_line.gantt_project{background-color:#c7d8f7;border:1px solid #7ba3ed}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#9ab9f1}.gantt_cal_light .gantt_cal_ltitle{padding:7px 10px}.gantt_cal_light .gantt_cal_ltext textarea{border:1px solid #d8d6ce}.gantt_cal_light .gantt_cal_larea{border-color:#d8d6ce!important;background-color:#fcfaf3}.gantt_cal_light .gantt_cal_larea .gantt_section_time{background-color:#fcfaf3}.buttonBg{background:#e0ded7}.gantt_cal_light .gantt_btn_set{height:27px;margin:5px 10px;padding:0 15px 0 10px}.gantt_cal_light .gantt_btn_set div{height:25px;margin-top:0;background-position:center center;line-height:25px}.gantt_btn_set.gantt_save_btn_set{border:1px solid #98d27e;background:#a7d991}.gantt_btn_set.gantt_cancel_btn_set{background:#e0ded7;border:1px solid #cac8bd}.gantt_btn_set.gantt_delete_btn_set{border:1px solid #ffad54;background:#ffb96d}.gantt_cal_light_wide{padding:0!important}.gantt_cal_light_wide .gantt_cal_larea{border-left:none!important;border-right:none!important}.gantt_cal_light_wide .gantt_cal_larea .gantt_cal_lsection{width:90px}.gantt_cal_light_wide .gantt_btn_set{margin:7px 10px}.gantt_popup_button.gantt_ok_button{border:1px solid #98d27e;background:#a7d991}.gantt_popup_title{background-color:#f4f2ea}.gantt_popup_shadow{box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_data_area .gantt_cal_quick_info{background-color:#f4f2ea}.gantt_data_area .gantt_cal_qi_content{background:#fcfaf3;border-bottom:1px solid #cac8bd}.gantt_qi_big_icon.icon_delete{border-color:#ffad54;background:#ffb96d}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-family:Verdana;font-size:8pt;color:#3f3f3f}.gantt_container{font-family:Verdana;font-size:11px;border:1px solid #cac8bd;position:relative;white-space:nowrap}.gantt_grid{border-right:1px solid #cac8bd}.gantt_task_scroll{overflow-x:scroll}.gantt_task{position:relative}.gantt_grid,.gantt_task{overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#3f3f3f;font-size:8pt;border-bottom:1px solid #cac8bd;background-color:#f4f2ea}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #cac8bd}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #cac8bd;text-align:center;position:relative;cursor:default;height:100%;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDAzOTZDREFDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDAzOTZDREJDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDM5NkNEOEM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDM5NkNEOUM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnzqpNoAAAEFSURBVHjapJPPDsFAEMbHZqXSi1ZC3Dg7O9bbeA7v4czZE4hLSRwkbiI4cCAN4Uyqs/pPs1vbrTDJHL7Mb77sbr8WeuMu/FOEMQaStplYdgYHFBnKjK1atZqI8+ViZZ2AMmS5x1QxFNHLNVAx1EPMNVAxBBFtvxnfuq4LUKDTTLwXXsFqNprKE1RMM2y+9oe9FV3Bw5++/3svfMRWpS0MV7fFx0Ka2e62kQEhBEbzoTA0DAPqtXqinbMD643IFGkR3KcL1Cib0yA4/DBY4A2u15ug45oFHD05x44sO+kc+FwhI0j4RZBQlUT5kH+0JS4VBpKfqaSVYDDpJ1rz9eNxlxq8BBgAcMHBu6BPeX8AAAAASUVORK5CYII=);background-position:center center;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:#ffebbc!important}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #eae9e5;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#cac8bd;height:100%;width:1px;margin:0 auto}.gantt_grid .gantt_grid_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px;z-index:1}.gantt_grid_resize_wrap .gantt_grid_resize{background-color:#cac8bd;width:1px;margin:0 auto}.gantt_drag_marker.gantt_grid_resize_area{background-color:rgba(231,231,231,.5);border-left:1px solid #cac8bd;border-right:1px solid #cac8bd;height:100%;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.gantt_cell{display:inline-block;vertical-align:top;border-right:1px solid #eae9e5;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:8pt}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task_bg .gantt_last_cell,.gantt_task_scale .gantt_last_cell{border-right-width:0}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #cac8bd;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #eae9e5}.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;display:none;position:absolute;right:0}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden;display:none}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent{width:15px;height:100%;display:inline-block}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;display:inline-block}.gantt_tree_icon.gantt_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAIqnI+py+0Powq01haA3iDgLWwek2mhNi6ZwLLdZ4owcL4kJ5OWJfX+DykAADs=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAImnI+py+0Powq01haA3iBgvnlMBnafgKLmWK4LCYpvK0+WJeX6DhUAOw==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQfAPXMWPK9N/fipOzLbPrVaP/89frqwv3tuvvprfLES+7PdP7xyP7z0vPAQfvtyMuaIv/32/735OSqFv3de+7ReP7lmf7gh/nv0v/67unFXfb29vK/PenFSaGEPfLnyv///yH5BAEAAB8ALAAAAAASABIAAAWS4Cc+ZGk+YvqZRVtgGiag6sNBThlFWnTQqQcE4sqRFj/VashsYR6HZI0JWSAjDwQCOGIgERULg/EQzJRQsGVCYHTK51qYTQDkFPj4iA4AJHIUgQoGQA8EdX4NhHgKAxeFfQkJGwGLeI6Fkg2UlQ8Dn5hBCZuchKChIxKkGw05Ga8DHlwkqg2tJ1xBtDlKvTUkviEAOw==)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQfAPvjpP/24fPHVvnUdvzotdSiKv/23vvrw/LCS/C+RfnelvPMaf/88/nbi/rsyerYq/TLYv7y1v7wzeCsLO+8P86dJfvv0MuaIsydKPPOc+SqGKGEPe/AS+zVneWwLf///yH5BAEAAB8ALAAAAAASABIAAAWZ4CdeZGleYvpdA+O+zNUBqHoZOB4EceHUqVtuF+n9VCtdQCI5BC6FA3BkCEQkBALAACVMV9eDVhGJQGnIixigaAwiG6jie2G7BxDLpVJozG13EAICPxUeGRleQQMLgggJUhiHC3pBggKPFJETGZRAF5gJCRSaFxgTC55BCByioz+nEKojGgmtHBwPJAUCELo2J8FfSMTFxsUhADs=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQVAPv7+2RkZPf39/r6+vj4+Pn5+fT09Pb29vX19fHx8fDw8Onp6fLy8u7u7uzs7PPz8+vr6+rq6uXl5ejo6O/v7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABUALAAAAAASABIAAAV4YCWOZGkGaKqaVSAMQCwLQnAOj6ErzUTXpQDgQDgcGJTFDzgSEp4HRCKytDUBMKzAoIAsJACrSCjTGhINR5hELg8ECEZifS3HCgQEgj62xwZPAnwtbgMDBQU0g21Yh4iIi3aGkzBihH52lgEEmDIEli0qoigspSYhADs=)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:center center}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:FFE0E0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:rgba(155,155,155,.1);position:absolute;top:1px;-webkit-transition:opacity .2s;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{-webkit-transition:opacity .2s;transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;font-family:Verdana;z-index:10000;margin:5px 5px 10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Verdana;border-radius:6px;border:1px solid #cac8bd;background:#fcfaf3}.gantt_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #cac8bd;height:25px;line-height:25px;display:inline-block;margin:0 5px;border-radius:4px;background:#e0ded7}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:14px;-moz-box-sizing:content-box;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #cac8bd;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.gantt-error,.gantt-info{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #cac8bd}.gantt-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:transparent}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:11px;color:#3f3f3f;width:100%;top:0;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#a7d991}.gantt_task_line{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;position:absolute;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#e1ffd4;border:1px solid #7fbc64;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{-moz-transform:scale(1.02,1.1);-o-transform:scale(1.02,1.1);-webkit-transform:scale(1.02,1.1);transform:scale(1.02,1.1);-moz-transform-origin:50%;-o-transform-origin:50%;-webkit-transform-origin:50%;transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{-moz-transform:scaleY(1.3);-o-transform:scaleY(1.3);-webkit-transform:scaleY(1.3);transform:scaleY(1.3);-moz-transform-origin:50%;-o-transform-origin:50%;-webkit-transform-origin:50%;transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;bottom:7px;font-size:11px;font-size:10px}.gantt_side_content.gantt_left{right:100%;padding-right:15px}.gantt_side_content.gantt_right{left:100%;padding-left:15px}.gantt_side_content.gantt_link_crossing{bottom:6.75px}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffb96d}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffb96d}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:13px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;-webkit-border-radius:6.5px;-moz-border-radius:6.5px;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-13px}.gantt_link_control.task_right{right:-13px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #a7d991}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #ffdeba}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_right div,.link_start_allow .gantt_link_control.task_left div{background-color:#ffdeba;border-color:#ffb96d}.link_finish_deny .gantt_link_control.task_right div,.link_start_deny .gantt_link_control.task_left div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-color:#ffb96d;margin-top:-1px}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-top-color:transparent!important;border-color:#ffb96d;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 4px 6px;border-color:#ffb96d;border-top-color:transparent!important;border-right-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-color:#ffb96d;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:w-resize;height:100%;display:none;position:absolute}.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_task_drag{width:6px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAACCAYAAACUn8ZgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTgyOEUzQzJDODQ3MTFFMjg3NDRCMUFBMTM1M0U1OTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTgyOEUzQzNDODQ3MTFFMjg3NDRCMUFBMTM1M0U1OTYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5ODI4RTNDMEM4NDcxMUUyODc0NEIxQUExMzUzRTU5NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5ODI4RTNDMUM4NDcxMUUyODc0NEIxQUExMzUzRTU5NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pj3qIQcAAAAaSURBVHjaYvz//z8DLsAEIhoaGv5jowECDAASbgp+4xzYLgAAAABJRU5ErkJggg==);z-index:1;top:0}.gantt_task_drag.task_left{left:0}.gantt_task_drag.task_right{right:0}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAYAAAAGuM1UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0JCMkQyRDhDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0JCMkQyRDlDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQkIyRDJENkM5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQkIyRDJEN0M5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppy3ICwAAADsSURBVHjafFBbaoNQEB1vghtIPlJX4Z/iX/cSsoZQGl80JZvIAvxVf1yNX6EFH+ADK8Y6nblQaGzagXNnmHPODHMVRIR5+L7/Sqm2bfv0i2TDT3ied4zjGBlU7+f8XPzCwrZtsSzLb9PTXQMRfhRFWFUVdl0nURQFco+45xsDNdwwDOVUNuR5LlHXNWZZhsyR5sDahRDC1XXdsSwLFCHgo+/hc5okhusVVFUFTdNgHMfHIAhQ0N2OaZowkbtpGhiG4Qa0RX6OYRicvCU9b2maPqzWa/grKtpE93D5zoZtkiRnyhv4Py6E3ZcAAwDb89Sl5rtPtAAAAABJRU5ErkJggg==);background-repeat:no-repeat;z-index:2}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 #ffb96d;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:#ffebbc!important}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffdc89}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #a7d991}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #9ab9f1}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#db7dc5;border:0 solid #cd49ae;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{-moz-box-shadow:inset 0 0 1px 1px #4d90fe;-webkit-box-shadow:inset 0 0 1px 1px #4d90fe;box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background:#f4f2ea;border-radius:6px;font-family:Verdana;border:1px solid #cac8bd;color:#3f3f3f;font-size:8pt;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_light select{font-family:Verdana;border:1px solid #cac8bd;font-size:11px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;white-space:nowrap;-webkit-border-radius:6px 6px 0 0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-radius:6px 6px 0 0}.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow:auto;font-family:Verdana;font-size:11px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #cac8bd;height:100%;width:100%;outline:0!important;resize:none}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #cac8bd;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-width:0;border-color:#cac8bd;border-style:solid;height:27px;color:#4f4f4f;background:#e0ded7;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.gantt_btn_set div{float:left;font-size:13px;height:17px;line-height:17px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUUzMDA3NzlDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUUzMDA3N0FDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBRTMwMDc3N0M5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBRTMwMDc3OEM5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtHrmoUAAAF4SURBVHjaYvr//z8DNTATA5UA1QxiIUdTQEAAG5CaA8S6QGyyYcOGvyzkGMLIyLgSGC4BHBwcr1RUVBhJdhHQEGagIctAhjAzM/9OSkrqd3Nz+ws3CKjAA0hNA+JcoDO34jIESC0FGhIM4tvb2y8FGjIbyPwPD2wNDQ1RIKUItG09UIM3LkOAOBzEB3rnaF5eXieQ+RYl1jo6Og4oKCicAtrGCjXMA82Q+TBD+Pj4HtfU1NQDmTewRf/jjIyMNmDgfYAatgnJMFDsxIIYrKysX7Ozs9sFBAT240xHQO/t8PT0BGliQHLZdiA3AabGz89vlrm5+RIg8x++BPkzPj5+Msj/UMM4gBTciwYGBttiY2MnAJmfiUnZj4CB2MzFxfUGWVBcXPx6WVlZE0ie6CwiJye3D+il6UCvgZ0PCreCggKQ4adIzWu/w8LCpoO8wsLC8j0yMnKipqbmelh6wQUYQUUADmACxDpADArwl4RSPT6DBqYYAQgwANyusz7jloxAAAAAAElFTkSuQmCC);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjQxN0VEOUZDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjQxN0VEQTBDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNDE3RUQ5REM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNDE3RUQ5RUM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pq9E2PUAAAH/SURBVHjaYvz//z8DNQAjTQ0KCAjgAVJFQOwBxGZQ4VNAvAOI+zZs2PCFoEFAQ+wZGRkXAMUVsNrMyPgAKJcANOwgToOAhgQCqXUgtqCg4ANXV9ctzs7Od0D8vXv3quzYsSPw06dP0lDl/kDDNmEYBDRECGjbYyCfS09Pb0dNTc1sNja2M0CpF1C1EjExMfu/fPmiBHXZZ5CrgYa9A/FZYCaysLCU/vnzh0tUVPRGU1NTPVDoNBD/R3ItyKVKAgICj/79+8cIdJksSA9QrBIkz4RkUBCINjU1XQUNWGRDQC4zBhrycMGCBYW2trbLkPWgGPTz50+wk6WlpTegBT6yIaCYXMfJybkRJPf7928ZDIOYmZl/g+jjx4+/xmcISPz27dsfYNowDOLi4gIb8PDhQ1N8hkDVGIBobm7ulxgGAb0EClyGX79+leAzBCjH9vXr13pkPSgGhYeHTwd6DxhUP62ghjzCZggw2icCw0YdGNDfQXrgkQVjGBgYHPHx8Zm9cePGHGhA/gdq/ANkysGUAHELMO3ogji+vr6zQXpwZREFkEErV66M//btmwi2LAIMyzdAlyz09/efDAoufJlW8tWrVx7Tp08PevDggc779+8VYFlGQUHhSmZm5joxMTFQ5n1OTDHCCsT6QAxKJ2JQsVdA/ASIL4J8TrPyCCDAAK8E80CvM3cMAAAAAElFTkSuQmCC);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:Verdana;font-size:11px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #CECECE;text-align:center;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px}.gantt_cal_light_wide .gantt_cal_larea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #cac8bd}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #eae9e5}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:0 0}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:11px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:5px 10px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #cac8bd}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #cac8bd}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;background:#e0ded7}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_cal_quick_info{border:1px solid #cac8bd;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fcfaf3;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-radius:6px 6px 0 0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-radius:6px 6px 0 0;padding:5px 0 8px 12px;color:#3f3f3f;background-color:#f4f2ea;border-bottom:1px solid #cac8bd}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:11px}.gantt_cal_qi_content{padding:16px 8px;font-size:13px;color:#3f3f3f;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-radius:0 0 6px 6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-radius:0 0 6px 6px;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:3.5px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDgcMloNXJQAAAFNJREFUOMvt0zEOACAIA0Dkg30rL8TJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAT/KLVk9yshBAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;color:#4f4f4f;background:#e0ded7;margin:5px 9px 8px 0;min-width:60px;line-height:27px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #cac8bd}.gantt_cal_qi_controls div{float:left;height:27px;text-align:center;line-height:27px}.gantt_tooltip{padding:10px;position:absolute;z-index:50}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:Verdana;font-size:11px}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d3d1c8;border-top:1px solid #d3d1c8}.gantt_drag_marker .gantt_cell{border-color:#d3d1c8}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#fff}.gantt_popup_button.gantt_delete_button{border:1px solid #98d27e;background:#a7d991} -------------------------------------------------------------------------------- /app/static/css/skins/dhtmlxgantt_skyblue.css: -------------------------------------------------------------------------------- 1 | /* 2 | @license 3 | 4 | dhtmlxGantt v.4.1.0 Stardard 5 | This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. 6 | 7 | (c) Dinamenta, UAB. 8 | */ 9 | .buttonBg{background:#fff}.gridHoverStyle{background-color:#ffe6b1!important;background-image:-webkit-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-moz-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-ms-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:linear-gradient(to top,#ffe09d 0,#ffeabb 100%);border-top-color:#ffc341;border-bottom-color:#ffc341}.gridSelection{background-color:#ffe6b1!important;border-bottom-color:#ffc341}.timelineSelection{background-color:#ffe6b1!important;background-image:-webkit-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-moz-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-ms-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:linear-gradient(to top,#ffe09d 0,#ffeabb 100%);border-top-color:#ffc341;border-bottom-color:#ffc341}.timelineSelection .gantt_task_cell{border-right-color:#ffce65}.gantt_popup_shadow{box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_quick_info .gantt_cal_qi_title{background:#fff}.gantt_cal_qi_controls .gantt_qi_big_icon .gantt_menu_icon.icon_delete{margin-top:5px}.gantt_popup_title{box-shadow:0 1px 1px #fff inset;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff)) 0 1px repeat-x;background-image:-webkit-linear-gradient(top,#e4f0ff 0,#dfedff 50%,#d5e8ff 100%);background-image:-moz-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-ms-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%)}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-family:Tahoma;font-size:8pt;color:#1e2022}.gantt_container{font-family:Tahoma;font-size:11px;border:1px solid #a4bed4;position:relative;white-space:nowrap}.gantt_grid{border-right:1px solid #a4bed4}.gantt_task_scroll{overflow-x:scroll}.gantt_task{position:relative}.gantt_grid,.gantt_task{overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#42464b;border-bottom:1px solid #a4bed4;box-shadow:0 1px 1px #fff inset;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff)) 0 1px repeat-x;background-image:-webkit-linear-gradient(top,#e4f0ff 0,#dfedff 50%,#d5e8ff 100%);background-image:-moz-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-ms-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%)}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #a4bed4}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #a4bed4;text-align:center;position:relative;cursor:default;height:100%;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzZCMThBRUFCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzZCMThBRUJCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NkIxOEFFOEJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NkIxOEFFOUJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVHygEAAAEpSURBVHjaYgzeGcyABfxnwA4Y0QVY/v79i1VlsUMxCr/3QC9WdTgN+P//P8Ohr4fAbDtuOwZc6lj+/PmDVeLfv39wTSA2LnU4DQC5AGYAiI1LHRNQ4j861pfSZ3j36x1YEwiD2CAxbGoZbRbZ/K/3qUcx9cPvDwzXv11n+PL3C5jPw8zDoMmlySDAKoCirnFLI8QLID/ufLOTARf48OcDw/Gfx1HE3EXcwa5j+f37N95AwgVAekB64QaATISB97/fM1z5dIXh85/PYD4vCy+DDp8OgyCrIIYBjFoTtDBSnYWyBYO9rj3DsbfHwHwrYSuGg5cPMpy4ewIzFoCmMKLjwzcOMwiwCMBjAcQGiWFTizchweRompDwuiBANoCgCxjFasQoys4AAQYARt4I/K036xQAAAAASUVORK5CYII=);background-position:center center;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:#ffe6b1!important;background-image:-webkit-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-moz-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-ms-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:linear-gradient(to top,#ffe09d 0,#ffeabb 100%);border-top-color:#ffc341;border-bottom-color:#ffc341}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #ebebeb;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#a4bed4;height:100%;width:1px;margin:0 auto}.gantt_grid .gantt_grid_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px;z-index:1}.gantt_grid_resize_wrap .gantt_grid_resize{background-color:#a4bed4;width:1px;margin:0 auto}.gantt_drag_marker.gantt_grid_resize_area{background-color:rgba(231,231,231,.5);border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;height:100%;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.gantt_cell{display:inline-block;vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task_bg .gantt_last_cell,.gantt_task_scale .gantt_last_cell{border-right-width:0}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #a4bed4;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;display:none;position:absolute;right:0}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden;display:none}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent{width:15px;height:100%;display:inline-block}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;display:inline-block}.gantt_tree_icon.gantt_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAIqnI+py+0Powq01haA3iDgLWwek2mhNi6ZwLLdZ4owcL4kJ5OWJfX+DykAADs=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAImnI+py+0Powq01haA3iBgvnlMBnafgKLmWK4LCYpvK0+WJeX6DhUAOw==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQfAPXMWPK9N/fipOzLbPrVaP/89frqwv3tuvvprfLES+7PdP7xyP7z0vPAQfvtyMuaIv/32/735OSqFv3de+7ReP7lmf7gh/nv0v/67unFXfb29vK/PenFSaGEPfLnyv///yH5BAEAAB8ALAAAAAASABIAAAWS4Cc+ZGk+YvqZRVtgGiag6sNBThlFWnTQqQcE4sqRFj/VashsYR6HZI0JWSAjDwQCOGIgERULg/EQzJRQsGVCYHTK51qYTQDkFPj4iA4AJHIUgQoGQA8EdX4NhHgKAxeFfQkJGwGLeI6Fkg2UlQ8Dn5hBCZuchKChIxKkGw05Ga8DHlwkqg2tJ1xBtDlKvTUkviEAOw==)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQfAPvjpP/24fPHVvnUdvzotdSiKv/23vvrw/LCS/C+RfnelvPMaf/88/nbi/rsyerYq/TLYv7y1v7wzeCsLO+8P86dJfvv0MuaIsydKPPOc+SqGKGEPe/AS+zVneWwLf///yH5BAEAAB8ALAAAAAASABIAAAWZ4CdeZGleYvpdA+O+zNUBqHoZOB4EceHUqVtuF+n9VCtdQCI5BC6FA3BkCEQkBALAACVMV9eDVhGJQGnIixigaAwiG6jie2G7BxDLpVJozG13EAICPxUeGRleQQMLgggJUhiHC3pBggKPFJETGZRAF5gJCRSaFxgTC55BCByioz+nEKojGgmtHBwPJAUCELo2J8FfSMTFxsUhADs=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQVAPv7+2RkZPf39/r6+vj4+Pn5+fT09Pb29vX19fHx8fDw8Onp6fLy8u7u7uzs7PPz8+vr6+rq6uXl5ejo6O/v7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABUALAAAAAASABIAAAV4YCWOZGkGaKqaVSAMQCwLQnAOj6ErzUTXpQDgQDgcGJTFDzgSEp4HRCKytDUBMKzAoIAsJACrSCjTGhINR5hELg8ECEZifS3HCgQEgj62xwZPAnwtbgMDBQU0g21Yh4iIi3aGkzBihH52lgEEmDIEli0qoigspSYhADs=)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:center center}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:FFE0E0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:rgba(155,155,155,.1);position:absolute;top:1px;-webkit-transition:opacity .2s;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{-webkit-transition:opacity .2s;transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;font-family:Tahoma;z-index:10000;margin:5px 5px 10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Tahoma;border-radius:0;border:1px solid #a4bed4;background:#fff}.gantt_popup_title{border-top-left-radius:0;border-top-right-radius:0;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #a4bed4;height:24px;line-height:24px;display:inline-block;margin:0 5px;border-radius:4px;background:#f8f8f8;background-image:-webkit-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-moz-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-ms-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:linear-gradient(to top,#e6e6e6 0,#fff 100%)}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:15px;-moz-box-sizing:content-box;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #a4bed4;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:0}.gantt-error,.gantt-info{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #a4bed4}.gantt-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:transparent}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:12px;color:#1e2022;width:100%;top:0;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#82b7de;background-image:-webkit-linear-gradient(top,#abcee8 0,#5aa0d3 36%,#bfdaee 100%);background-image:-moz-linear-gradient(top,#abcee8 0,#5aa0d3 36%,#bfdaee 100%);background-image:-ms-linear-gradient(top,#abcee8 0,#5aa0d3 36%,#bfdaee 100%);background-image:linear-gradient(to top,#abcee8 0,#5aa0d3 36%,#bfdaee 100%)}.gantt_task_line{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;position:absolute;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#eff6fb;border:1px solid #3588c5;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{-moz-transform:scale(1.02,1.1);-o-transform:scale(1.02,1.1);-webkit-transform:scale(1.02,1.1);transform:scale(1.02,1.1);-moz-transform-origin:50%;-o-transform-origin:50%;-webkit-transform-origin:50%;transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{-moz-transform:scaleY(1.3);-o-transform:scaleY(1.3);-webkit-transform:scaleY(1.3);transform:scaleY(1.3);-moz-transform-origin:50%;-o-transform-origin:50%;-webkit-transform-origin:50%;transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;bottom:7px;font-size:11px}.gantt_side_content.gantt_left{right:100%;padding-right:15px}.gantt_side_content.gantt_right{left:100%;padding-left:15px}.gantt_side_content.gantt_link_crossing{bottom:6.75px}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#4a8f43}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #4a8f43}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:13px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;-webkit-border-radius:6.5px;-moz-border-radius:6.5px;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-13px}.gantt_link_control.task_right{right:-13px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #0070fe}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #6eb867}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_right div,.link_start_allow .gantt_link_control.task_left div{background-color:#6eb867;border-color:#4a8f43}.link_finish_deny .gantt_link_control.task_right div,.link_start_deny .gantt_link_control.task_left div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 8px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-color:#4a8f43;margin-top:-1px}.gantt_link_arrow_left{border-width:4px 8px 4px 0;margin-top:-1px;border-top-color:transparent!important;border-color:#4a8f43;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 4px 8px;border-color:#4a8f43;border-top-color:transparent!important;border-right-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:4px 8px 0 4px;border-color:#4a8f43;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:w-resize;height:100%;display:none;position:absolute}.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_task_drag{width:6px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAACCAYAAACUn8ZgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDEyNDQ5RDdCRTQ5MTFFMjhBQzlGRDA2RDIyNDc5NzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDEyNDQ5RDhCRTQ5MTFFMjhBQzlGRDA2RDIyNDc5NzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTI0NDlENUJFNDkxMUUyOEFDOUZEMDZEMjI0Nzk3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMTI0NDlENkJFNDkxMUUyOEFDOUZEMDZEMjI0Nzk3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv8NECcAAAAaSURBVHjaYvz//z8DLsAEIsw6j/3HRgMEGAARnwqNiuFmdQAAAABJRU5ErkJggg==);z-index:1;top:0}.gantt_task_drag.task_left{left:0}.gantt_task_drag.task_right{right:0}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDNGNzQ1MTZCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDNGNzQ1MTdCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0M0Y3NDUxNEJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0M0Y3NDUxNUJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrBLI3EAAACISURBVHjafE07DkMhDAuftQdgYuCWbZ9a0WtwGJC4BgMbYmVGaZLpqWpryZFjOwrACSmlSLzCN1DwrLUik/TtM3yUUnDOiWMMZE3enTNF4gghRO89KKXkABGh9w6ttcPSHp1zsNaCvbcUjDHAHhVemg1rrVxprYWs2ZOMR84ZfoGfXuAP3gIMABorQUvC1invAAAAAElFTkSuQmCC);background-repeat:no-repeat;z-index:2}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 #4a8f43;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:#ffe6b1!important;border-bottom-color:#ffc341}.gantt_task_row.gantt_selected{background-color:#ffe6b1!important;background-image:-webkit-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-moz-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-ms-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:linear-gradient(to top,#ffe09d 0,#ffeabb 100%);border-top-color:#ffc341;border-bottom-color:#ffc341}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffce65}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #5aa0d3}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #9ab9f1}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#db7dc5;border:0 solid #cd49ae;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{-moz-box-shadow:inset 0 0 1px 1px #4d90fe;-webkit-box-shadow:inset 0 0 1px 1px #4d90fe;box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background-color:#eff6fb;border-radius:0;font-family:Tahoma;font-size:11px;border:1px solid #a4bed4;color:#42464b;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_light select{font-family:Tahoma;border:1px solid #a4bed4;font-size:11px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;white-space:nowrap;-webkit-border-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-radius:0}.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow:auto;font-family:Tahoma;font-size:11px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #a4bed4;height:100%;width:100%;outline:0!important;resize:none}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #a4bed4;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:2px 25px 2px 10px;float:left;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-width:1px;border-color:#a4bed4;border-style:solid;height:26px;color:#42464b;background:#f8f8f8;background-image:-webkit-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-moz-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-ms-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:linear-gradient(to top,#e6e6e6 0,#fff 100%);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.gantt_btn_set div{float:left;font-size:13px;height:20px;line-height:20px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkE5Nzc4RENDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkE5Nzc4RERDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQTk3NzhEQUMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCQTk3NzhEQkMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pr5Ot2UAAAFoSURBVHjapFO7SgNRED0rxkjEELbcQksLBUMg4EfkG7YV/AFTpBAUfNQisVDQD7CQlBaWwoZ8gNEiFttmg3GTfbF6JtzFTUJYyIHhDnfOnJm5Dy2OYywDjQJnF5ex/dXDweENNtaAzT/jur46IY1D4McHvv3J+nZ7BGNrG436sSaU3ucHqtUqzP1sVcflMizLEl8EwjBEFEXwomwC5DInEeDGaDSC62cTIJc5iUAQBGJukE1A8YkVNYLv++h232WMRUYOuakRlOLTwzU8z1tYPZ/Po1QqJR0kAgQDWTEjwLaIWq0GwzDmJtm2jVarNSvAeeQQXVe6ME1Tgs1mMyXA2GAwQKFQmH8G/X4fjuOgWCxKkP40yMnlcukO1MNgAivoui5B+tMgh3H1DuQa66fnaLfbGA6HMgY7oNGfNnL+v0RN/cbnl9f46qSBSqUiM9J4ZQSvVgl0Oh1pf2d3D4/3d5q27Hf+FWAAc90EKSR5k78AAAAASUVORK5CYII=);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzU4NTQ3NUZDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzU4NTQ3NjBDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNTg1NDc1REMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNTg1NDc1RUMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVB3hoAAAEYSURBVHjapJM9CsJAEIUTFStbQRA8gKCNKSIIeohUVraC9oKiGBRsBDvBylbwEkJQCys9gJUgeIOAxDfwEpYNpsmDL7PZ+cn+TMwgCIw0yhgplZPH3bbVuRqYgiYogxe4ABc8wqD69RpbQR6MwQ04TDZoHc6LP/tvC2uw4Fi+Vgcmrct58W9iW4BaYAB80OGSQ8my7xz7jDsAT11Bn3alJYvUa1pp8VGBNu0uIVm2s9fiowJF8OWJ/0sWPRlX1At8eLqlhGRRhXEfvcCJtpeQLOpq8VGBLe04Ibmh+Ld6AY8HWOBVzUCVvio780z/LrxCtQ9EQ+5tBOZElRzeUmmqWCfKlyfAAkfw5vyb7xb9vlrATPs7/wQYAISgQGDaq6hUAAAAAElFTkSuQmCC);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:Tahoma;font-size:11px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #CECECE;text-align:center;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #a4bed4}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:0 0}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:11px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:5px 10px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #a4bed4}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #a4bed4}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;background:#f8f8f8;background-image:-webkit-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-moz-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-ms-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:linear-gradient(to top,#e6e6e6 0,#fff 100%)}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_cal_quick_info{border:1px solid #a4bed4;border-radius:0;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-radius:0;padding:5px 0 8px 12px;color:#1e2022;box-shadow:0 1px 1px #fff inset;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff)) 0 1px repeat-x;background-image:-webkit-linear-gradient(top,#e4f0ff 0,#dfedff 50%,#d5e8ff 100%);background-image:-moz-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-ms-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);border-bottom:1px solid #a4bed4}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:11px}.gantt_cal_qi_content{padding:16px 8px;font-size:13px;color:#1e2022;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-radius:0;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:3px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDhEuX3ujFgAAAFNJREFUOMvt0zEOACAIA0DksTyqn8XJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+sNUIROnQoAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;color:#42464b;background:#f8f8f8;background-image:-webkit-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-moz-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-ms-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:linear-gradient(to top,#e6e6e6 0,#fff 100%);margin:5px 9px 8px 0;min-width:60px;line-height:26px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #a4bed4}.gantt_cal_qi_controls div{float:left;height:26px;text-align:center;line-height:26px}.gantt_tooltip{padding:10px;position:absolute;z-index:50}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:Tahoma;font-size:11px}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#e4f0ff} --------------------------------------------------------------------------------