瀏覽代碼

摄像头回放后台

任敬轩 3 年之前
父節點
當前提交
a55e05ab12
共有 100 個文件被更改,包括 39996 次插入15 次删除
  1. 40 0
      Modules/Camera/Database/Migrations/2022_07_08_153542_create_playback.php
  2. 1 1
      Modules/Camera/Entities/CameraList.php
  3. 8 0
      Modules/Camera/Enum/CameraEnum.php
  4. 99 2
      Modules/Camera/Http/Controllers/CameraController.php
  5. 20 4
      Modules/Camera/Resources/views/camera_add.blade.php
  6. 88 8
      Modules/Camera/Resources/views/camera_list.blade.php
  7. 189 0
      Modules/Camera/Resources/views/playback_edit.blade.php
  8. 2 0
      Modules/Camera/Routes/web.php
  9. 二進制
      public/bootstrap_date/css/font/iconfont.eot
  10. 78 0
      public/bootstrap_date/css/font/iconfont.svg
  11. 二進制
      public/bootstrap_date/css/font/iconfont.ttf
  12. 二進制
      public/bootstrap_date/css/font/iconfont.woff
  13. 10 0
      public/bootstrap_date/css/style.css
  14. 1607 0
      public/bootstrap_date/css/wui.css
  15. 1 0
      public/bootstrap_date/css/wui.min.css
  16. 314 0
      public/bootstrap_date/js/angular.min.js
  17. 6 0
      public/bootstrap_date/js/jquery.min.js
  18. 653 0
      public/bootstrap_date/js/wui-date.js
  19. 1 0
      public/bootstrap_date/js/wui-date.min.js
  20. 3340 0
      public/datetimepicker/css/animate.css
  21. 5 0
      public/datetimepicker/css/bootstrap.min.css
  22. 2 0
      public/datetimepicker/css/materialdesignicons.min.css
  23. 4259 0
      public/datetimepicker/css/style.min.css
  24. 二進制
      public/datetimepicker/favicon.ico
  25. 二進制
      public/datetimepicker/fonts/materialdesignicons.eot
  26. 6150 0
      public/datetimepicker/fonts/materialdesignicons.svg
  27. 二進制
      public/datetimepicker/fonts/materialdesignicons.ttf
  28. 二進制
      public/datetimepicker/fonts/materialdesignicons.woff
  29. 二進制
      public/datetimepicker/fonts/materialdesignicons.woff2
  30. 二進制
      public/datetimepicker/images/captcha.png
  31. 二進制
      public/datetimepicker/images/gallery/1.jpg
  32. 二進制
      public/datetimepicker/images/gallery/10.jpg
  33. 二進制
      public/datetimepicker/images/gallery/11.jpg
  34. 二進制
      public/datetimepicker/images/gallery/13.jpg
  35. 二進制
      public/datetimepicker/images/gallery/14.jpg
  36. 二進制
      public/datetimepicker/images/gallery/15.jpg
  37. 二進制
      public/datetimepicker/images/gallery/16.jpg
  38. 二進制
      public/datetimepicker/images/gallery/17.jpg
  39. 二進制
      public/datetimepicker/images/gallery/2.jpg
  40. 二進制
      public/datetimepicker/images/gallery/3.jpg
  41. 二進制
      public/datetimepicker/images/gallery/4.jpg
  42. 二進制
      public/datetimepicker/images/gallery/5.jpg
  43. 二進制
      public/datetimepicker/images/gallery/6.jpg
  44. 二進制
      public/datetimepicker/images/gallery/7.jpg
  45. 二進制
      public/datetimepicker/images/gallery/8.jpg
  46. 二進制
      public/datetimepicker/images/gallery/9.jpg
  47. 二進制
      public/datetimepicker/images/img-slide-1.jpg
  48. 二進制
      public/datetimepicker/images/img-slide-2.jpg
  49. 二進制
      public/datetimepicker/images/img-slide-3.jpg
  50. 二進制
      public/datetimepicker/images/img-slide-4.jpg
  51. 二進制
      public/datetimepicker/images/img-slide-5.jpg
  52. 二進制
      public/datetimepicker/images/logo-ico.png
  53. 二進制
      public/datetimepicker/images/logo-sidebar.png
  54. 二進制
      public/datetimepicker/images/logo.png
  55. 二進制
      public/datetimepicker/images/users/avatar.jpg
  56. 18962 0
      public/datetimepicker/js/Chart.js
  57. 1106 0
      public/datetimepicker/js/bootstrap-colorpicker/bootstrap-colorpicker.js
  58. 5 0
      public/datetimepicker/js/bootstrap-colorpicker/bootstrap-colorpicker.min.js
  59. 222 0
      public/datetimepicker/js/bootstrap-colorpicker/css/bootstrap-colorpicker.css
  60. 1 0
      public/datetimepicker/js/bootstrap-colorpicker/css/bootstrap-colorpicker.css.map
  61. 10 0
      public/datetimepicker/js/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css
  62. 1 0
      public/datetimepicker/js/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css.map
  63. 二進制
      public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png
  64. 二進制
      public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png
  65. 二進制
      public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png
  66. 二進制
      public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png
  67. 二進制
      public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png
  68. 2089 0
      public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker.js
  69. 9 0
      public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker.min.js
  70. 681 0
      public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker3.css
  71. 1 0
      public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker3.css.map
  72. 9 0
      public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker3.min.css
  73. 1 0
      public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker3.min.css.map
  74. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js
  75. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js
  76. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js
  77. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js
  78. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js
  79. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js
  80. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js
  81. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js
  82. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js
  83. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js
  84. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js
  85. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js
  86. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js
  87. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js
  88. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js
  89. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js
  90. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js
  91. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js
  92. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js
  93. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js
  94. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js
  95. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js
  96. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js
  97. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js
  98. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js
  99. 1 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js
  100. 0 0
      public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js

+ 40 - 0
Modules/Camera/Database/Migrations/2022_07_08_153542_create_playback.php

@@ -0,0 +1,40 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreatePlayback extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('playback', function (Blueprint $table) {
+            $table->bigIncrements('id')->comment('ID');
+            $table->integer('camera_id')->index()->comment('摄像头ID');
+            $table->string('title')->nullable()->comment('时间段标题');
+            $table->string('start_time')->nullable()->comment('开始时间');
+            $table->string('end_time')->nullable()->comment('开始时间');
+            $table->timestamps();
+            $table->softDeletes();
+        });
+
+        Schema::table('camera_list', function (Blueprint $table) {
+            $table->tinyInteger('playback')->default('0')->comment('可回放 0:不可以 1:可以');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('playback');
+    }
+}

+ 1 - 1
Modules/Camera/Entities/CameraList.php

@@ -10,5 +10,5 @@ class CameraList extends Model
     protected $table        = 'camera_list';
     public    $incrementing = false;
     protected $keyType      = 'string';
-    protected $fillable     = ['mine_id', 'index_code', 'camera_name', 'camera_source', 'revert_id', 'ip', 'port', 'com_number','sort','video_recorder','camera_status'];
+    protected $fillable     = ['mine_id', 'index_code', 'camera_name', 'camera_source', 'revert_id', 'ip', 'port', 'com_number','sort','video_recorder','camera_status','playback'];
 }

+ 8 - 0
Modules/Camera/Enum/CameraEnum.php

@@ -84,6 +84,14 @@ class CameraEnum
         self::VIDEO_RECORDER_TD => '天地伟业',
     ];
 
+    //是否可回放
+    const VIDEO_RECORDER_FALSE = 0;  //不可以
+    const VIDEO_RECORDER_TRUE = 1;  //可以
+    const VIDEO_PLAY_BACK = [
+        self::VIDEO_RECORDER_FALSE => '不可以',
+        self::VIDEO_RECORDER_TRUE => '可以',
+    ];
+
     //乐橙接口url
     const ACCESS_TOKEN_URL = 'https://openapi.lechange.cn:443/openapi/accessToken';  //获取access_token
     const LIVE_LIST_URL    = 'https://openapi.lechange.cn/openapi/liveList';         //获取视频列表

+ 99 - 2
Modules/Camera/Http/Controllers/CameraController.php

@@ -136,8 +136,18 @@ class CameraController extends BaseController
 
         foreach ($camera_list as $key => $val) {
             $camera_list[$key]->parent_title = MineList::where('id', explode('|', $val->degree)[0])->value('title');
+            //判断是否是海康视频服务器
+            if($val->camera_source == CameraEnum::CAMERA_SOURCE_2){
+                $is_hak = DB::table('mine_list_ext')->where('mine_id',explode('|', $val->degree)[0])->value('is_hak');
+                if($is_hak == CameraEnum::VIDEO_RECORDER_HK){
+                    $camera_list[$key]->playback = 0;//显示
+                }else{
+                    $camera_list[$key]->playback = 1;//不显示
+                }
+            }else{
+                $camera_list[$key]->playback = 1;//不显示
+            }
         }
-
         $tableObj             = new TableAuxiliary('camera/list', $camera_list);
 
 //        $tableObj->search('input', 'mine_name', '矿区名称');
@@ -169,10 +179,11 @@ class CameraController extends BaseController
         $data['searchs']        = $tableObj->searchColumns;
         $data['primaryKey']     = $tableObj->primaryKey;
         $data['displayActions'] = $tableObj->displayActions;
+
         if (is_string($data['displayActions']['value'])) {
             $data['displayActions']['value'] = [$data['displayActions']['value']];
         }
-        $data['actionBtns']          = $tableObj->actionBtns;
+        $data['actionBtns']          = ['view', 'edit', 'del','playback'];
         $data['actionBtnsAttribute'] = $tableObj->actionBtnsAttribute;
         $data['topActions']          = $tableObj->topActions;
         $data['displayActionOthers'] = $tableObj->displayActionOthers;
@@ -276,6 +287,17 @@ class CameraController extends BaseController
 
         foreach ($camera_list as $key => $val) {
             $camera_list[$key]->parent_title = MineList::where('id', explode('|', $val->degree)[0])->value('title');
+            //判断是否是海康视频服务器
+            if($val->camera_source == CameraEnum::CAMERA_SOURCE_2){
+                $is_hak = DB::table('mine_list_ext')->where('mine_id',explode('|', $val->degree)[0])->value('is_hak');
+                if($is_hak == CameraEnum::VIDEO_RECORDER_HK){
+                    $camera_list[$key]->playback = 0;//显示0
+                }else{
+                    $camera_list[$key]->playback = 1;//不显示1
+                }
+            }else{
+                $camera_list[$key]->playback = 1;//不显示1
+            }
             $val->camera_type =   CameraEnum::CAMERA_TYPE_EXCHANGE[$val->camera_type];
             $val->camera_source =   CameraEnum::CAMERA_SOURCE_EXCHANGE[$val->camera_source];
         }
@@ -331,6 +353,17 @@ class CameraController extends BaseController
 
         foreach ($camera_list as $key => $val) {
             $camera_list[$key]->parent_title = MineList::where('id', explode('|', $val->degree)[0])->value('title');
+            //判断是否是海康视频服务器
+            if($val->camera_source == CameraEnum::CAMERA_SOURCE_2){
+                $is_hak = DB::table('mine_list_ext')->where('mine_id',explode('|', $val->degree)[0])->value('is_hak');
+                if($is_hak == CameraEnum::VIDEO_RECORDER_HK){
+                    $camera_list[$key]->playback = 0;//显示
+                }else{
+                    $camera_list[$key]->playback = 1;//不显示
+                }
+            }else{
+                $camera_list[$key]->playback = 1;//不显示
+            }
             $val->camera_type =   CameraEnum::CAMERA_TYPE_EXCHANGE[$val->camera_type];
             $val->camera_source =   CameraEnum::CAMERA_SOURCE_EXCHANGE[$val->camera_source];
         }
@@ -519,6 +552,70 @@ class CameraController extends BaseController
         return $this->redirect('admin/camera/list');
     }
 
+    //编辑回放
+    public function cameraListPlayback(Request $request)
+    {
+        $id = $request->input('id');
+        if (empty($id)) {
+            return $this->redirect('admin/camera/list');
+        }
+        if ($request->isMethod('post')) {
+            $params = $request->all();
+
+            if(isset($params['title'])) {
+                for ($i = 0; $i < count($params['title']); $i++) {
+                    if ($params['title'][$i] == null || $params['start_time'][$i] == null || $params['end_time'][$i] == null) {
+                        return $this->error(1, '请输入必填字段');
+                    }
+                    if(strtotime($params['end_time'][$i]) < strtotime($params['start_time'][$i])){
+                        return $this->error(1, '开始时间不能大于结束时间');
+                    }
+                }
+            }
+
+            DB::table('playback')->where('camera_id',$params['id'])->delete();
+
+            $camera['playback'] = $params['playback'];
+            DB::table('camera_list')->where('id',$params['id'])->update($camera);
+
+            if($params['playback'] == 1){//可回放
+                if(isset($params['title'])){
+                    for($i=0;$i<count($params['title']);$i++){
+                        $playback['camera_id'] = $params['id'];
+                        $playback['title'] = $params['title'][$i];
+                        $playback['start_time'] = $params['start_time'][$i];
+                        $playback['end_time'] = $params['end_time'][$i];
+                        $playback['created_at'] = date('Y-m-d H:i:s');
+                        $playback['updated_at'] = date('Y-m-d H:i:s');
+                        DB::table('playback')->insert($playback);
+                    }
+                }
+            }
+            return $this->redirect('admin/camera/list');
+        }
+
+        $camera  = CameraList::find($id);
+
+        $playback = DB::table('playback')->where('camera_id',$id)->where('deleted_at',null)->get();
+
+        $formObj = new FromAuxiliary('camera/list/edit', $camera);
+
+        $formObj->radio('playback', '是否可回放',CameraEnum::VIDEO_PLAY_BACK);
+
+        $formObj->title = '摄像头回放';
+
+        $data['path']       = '/admin/' . $formObj->path;
+        $data['fromTitle']  = $formObj->title;
+        $data['columns']    = $formObj->columns;
+        $data['item']       = $formObj->item;
+        $data['hasHr']      = $formObj->hasHr;
+        $data['primaryKey'] = $formObj->primaryKey;
+        $data['footBtns']   = $formObj->footBtns;
+        $data['colWidth']   = $formObj->colWidth;
+        $data['playback']   = $playback;
+        return $this->view('camera::playback_edit', $data);
+    }
+
     //编辑摄像头列表
     public function cameraListEdit(Request $request)
     {

File diff suppressed because it is too large
+ 20 - 4
Modules/Camera/Resources/views/camera_add.blade.php


File diff suppressed because it is too large
+ 88 - 8
Modules/Camera/Resources/views/camera_list.blade.php


File diff suppressed because it is too large
+ 189 - 0
Modules/Camera/Resources/views/playback_edit.blade.php


+ 2 - 0
Modules/Camera/Routes/web.php

@@ -21,6 +21,8 @@ Route::prefix('admin')->group(function() {
     Route::get('/camera/list/edit', 'CameraController@cameraListEdit');
     Route::post('/camera/list/edit', 'CameraController@cameraListEditPost');
     Route::post('/camera/list/del', 'CameraController@cameraListDelPost');
+    Route::get('/camera/list/playback', 'CameraController@cameraListPlayback');
+    Route::post('/camera/list/playback', 'CameraController@cameraListPlayback');
     Route::any('/camera/list/import', 'CameraController@cameraListImport');
     Route::get('/camera/list/importTemplate', 'CameraController@cameraListTemplate');
     Route::post('/camera/upload/cover_picture', 'CameraController@cameraUploadCpicture');

二進制
public/bootstrap_date/css/font/iconfont.eot


File diff suppressed because it is too large
+ 78 - 0
public/bootstrap_date/css/font/iconfont.svg


二進制
public/bootstrap_date/css/font/iconfont.ttf


二進制
public/bootstrap_date/css/font/iconfont.woff


+ 10 - 0
public/bootstrap_date/css/style.css

@@ -0,0 +1,10 @@
+.wui-area {
+	margin-bottom: 30px;
+}
+p {
+	font-size: 12px;
+	color: #333;
+}
+li,p{
+	margin-bottom: 15px;
+}

File diff suppressed because it is too large
+ 1607 - 0
public/bootstrap_date/css/wui.css


File diff suppressed because it is too large
+ 1 - 0
public/bootstrap_date/css/wui.min.css


File diff suppressed because it is too large
+ 314 - 0
public/bootstrap_date/js/angular.min.js


File diff suppressed because it is too large
+ 6 - 0
public/bootstrap_date/js/jquery.min.js


+ 653 - 0
public/bootstrap_date/js/wui-date.js

@@ -0,0 +1,653 @@
+angular.module('wui.date',[]).directive('wuiDate', function() {
+	return {
+		// Restrict to elements and attributes
+		restrict: 'EA',
+
+		// Assign the angular link function
+		compile: fieldCompile,
+
+		// Assign the angular directive template HTML
+		template: fieldTemplate,
+		// templateUrl: "pageTemplate.html",
+
+		// Assign the angular scope attribute formatting
+		scope: {
+			id: '@?', // 时间插件主键 默认scope.$id
+			name: '@?', // 绑定表单验证input的name属性
+			format: '@?', // 定义时间格式 默认yyyy-mm-dd
+			interval: '@?', // 定义time时间间隔 默认30minutes
+			placeholder: '@?', // 选择框提示语 默认 '选择时间'
+			position: '@?', // 定义选择框浮动位置 默认left
+			ngModel: '=', // 父scope绑定的时间的属性
+			btns: '@', // 按钮信息 空则不显示任何按钮
+			dateClass: '@?', // 自定义样式
+			width: '@?', // 输入框宽度 支持px及百分比
+			size: '@?' // 插件大小 默认为迷你型  large、L、l表示大型窗
+		}
+
+	};
+
+	function fieldCompile(scope, element, attr) {
+		return {
+			pre: function(scope, element, attr) {
+
+				scope.id = scope.id || 'date' + scope.$id; // 生成插件唯一id
+				var position = scope.position || 'left', // 面板浮动
+					iptWidth = parseInt(scope.width); // 输入框宽度
+					iptWidthU = scope.width?scope.width.search('%') == -1 ? 'px' : '%':null,
+					size = scope.size != 'large' && scope.size != 'l' && scope.size != 'L' ? 'small' : null;
+				angular.element(element).find('.wui-date').addClass('wui-date-' + scope.id);
+				if(scope.name != '' && typeof scope.name != 'undefined') {
+					angular.element(element).find('.wui-date input').attr('name', scope.name);
+				}
+				if(size) {
+					angular.element(element).find('.wui-date').addClass(size); // 大小
+				}
+				angular.element(element).find('.wui-date .wui-date-picker').addClass(position); // 面板添加浮动
+				scope.dateClass ? angular.element(element).find('.wui-date').addClass(scope.dateClass) : null; // 插件外部样式
+				iptWidth ? angular.element(element).find('.wui-date').css('width', iptWidth + iptWidthU) : null; // 输入框宽度
+			},
+			post: function(scope, element, attr) {
+				fieldLink(scope, element, attr);
+			}
+		}
+	}
+
+	function fieldLink(scope, element, attr) {
+		// 初始化
+		var GMTDate, // GMT格式时间
+			format = (scope.format || 'yyyy-mm-dd').toLowerCase(), // 时间格式
+			interval = parseInt(scope.interval) || 30, // time间隔
+			interval = (60 % interval === 0 || interval % 60 === 0) && interval <= 12 * 60 ? interval : 30,
+			placeholder = scope.placeholder || "选择时间",
+			maxYear = parseInt(new Date().getFullYear()) + 100, // 插件最大year
+			minYear = 1900, // 插件最小year
+			SPECIAL_DATE_RULES = ['至今'], // 特殊字符串规则
+			DATE_RULES = ['yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:mm', 'yyyy-mm-dd', 'yyyy-mm']; // 内置的日期格式
+
+		// angular对象初始化
+		scope.date = {
+			year: '0000',
+			month: '00',
+			date: '00',
+			hours: '00',
+			minutes: '00',
+			seconds: '00',
+			dateList: [],
+			timeList: [],
+			yearList: {},
+			showPicker: false,
+			showTimePicker: false,
+			showTimeList: true,
+			showClearIcon: false,
+			selector: 1,
+			btns: scope.btns ? JSON.parse(scope.btns.replace(/'/g, '"')) : {}, // btns字符串转对象
+			showBtn: false,
+		};
+
+		// 初始化GMT时间
+		function GMTDateInit(date) {
+			date = dateFormat(date);
+			if(date) {
+				if(!SPECIAL_DATE_RULES.includes(date)) {
+					GMTDate = StrDateToGMT(date);
+				} else {
+					GMTDate = new Date();
+				}
+			} else {
+				GMTDate = new Date();
+			}
+		}
+
+		// 加载dom
+		function domBootstrap(format) {
+			if(Object.keys(scope.date.btns).length) {
+				scope.date.showBtn = true;
+			}
+			switch(format) {
+				case 'yyyy-mm-dd hh:mm:ss':
+				case 'yyyy-mm-dd hh:mm':
+					scope.date.showTimePicker = true; // 
+					scope.date.selector = 1;
+					angular.element(element).find('.wui-date .wui-date-picker').removeClass('no_timer');
+					break;
+				case 'yyyy-mm-dd':
+					scope.date.showTimePicker = false;
+					angular.element(element).find('.wui-date .wui-date-picker').addClass('no_timer');
+					scope.date.selector = 1;
+					break;
+				case 'yyyy-mm':
+					scope.date.showTimePicker = false;
+					scope.date.selector = 2;
+					angular.element(element).find('.wui-date .wui-date-picker').addClass('no_timer');
+					break;
+				default:
+					break;
+			}
+		}
+
+		// 时间格式化
+		function dateFormat(date) {
+			if(!date) {
+				return null;
+			}
+			if(SPECIAL_DATE_RULES.includes(date)) { // 特殊字符串
+				return date;
+			}
+			date = date.toString().replace(/[\D]/g, ""); // 清除时间除数字外字符
+			var len = format.replace(/\W/g, "").length; // 默认格式长度
+			var str = date.length >= len ? date.slice(0, len) : '';
+			if(date && str) {
+				switch(format) {
+					case 'yyyy-mm-dd hh:mm:ss':
+						date = str.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3 $4:$5:$6");
+						break;
+					case 'yyyy-mm-dd hh:mm':
+						date = str.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3 $4:$5");
+						break;
+					case 'yyyy-mm-dd':
+						date = str.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3");
+						break;
+					case 'yyyy-mm':
+						date = str.replace(/(\d{4})(\d{2})/, "$1-$2");
+						break;
+					default:
+						break;
+				}
+				return str !== date ? date : null; // 正则替换失败后返回原字符串  替换成功则 str != date 
+			}
+			return null;
+		}
+		// 字符串时间格式化为标准时间
+		function StrDateToGMT(date) {
+			if(date && new Date(date) != 'Invalid Date') {
+				return new Date(date);
+			}
+			return null;
+		}
+		// 标准时间格式化为字符串时间
+		function GMTToStrDate(date) {
+			date = new Date(date);
+			if(date && toString.call(date) == '[object Date]') {
+				return date.getFullYear() + '/' + getDoubleDigit(date.getMonth() + 1) + '/' + getDoubleDigit(date.getDate()) + ' ' + getDoubleDigit(date.getHours()) + ':' + getDoubleDigit(date.getMinutes()) + ':' + getDoubleDigit(date.getSeconds());
+			}
+			return null;
+		}
+		// 生成两位月、日
+		function getDoubleDigit(num) {
+			num = '0' + num;
+			return num.slice(-2);
+		}
+
+		// 显示的年月日时分秒数据 
+		function getAllDate() {
+			scope.date.year = GMTDate.getFullYear(); // 初始化年份
+			scope.date.month = getDoubleDigit(GMTDate.getMonth() + 1); // 两位月份
+			scope.date.day = getDoubleDigit(GMTDate.getDate()); // 两位日期
+			scope.date.hours = getDoubleDigit(GMTDate.getHours()); // 两位时
+			scope.date.minutes = getDoubleDigit(GMTDate.getMinutes()); // 两位分
+			scope.date.seconds = getDoubleDigit(GMTDate.getSeconds()); // 两位秒
+		}
+		// 生成日期数据
+		function getDateList(date) {
+			date = date || new Date();
+			if(date.getFullYear() <= maxYear && date.getFullYear() >= minYear) { // 判断年份上下限
+				// 初始化数据
+				var dateList = [], // 属性type:1 表示上月的日期 2表示当月日期 3表示下月日期, 属性date:当天是几号
+					weekOfFirstDay, // 当月第一天是周几
+					endDayOfMonth, // 当前月份最后一天
+					endDayOfLastMonth, // 上月最后一天
+					modelDate = StrDateToGMT(scope.ngModel);
+
+				getAllDate();
+
+				weekOfFirstDay = new Date(scope.date.year, scope.date.month - 1, 1).getDay();
+				endDayOfMonth = new Date(scope.date.year, scope.date.month, 0).getDate();
+				endDayOfLastMonth = new Date(scope.date.year, scope.date.month - 1, 0).getDate();
+
+				// 当月日期列表
+				for(var i = 1; i <= endDayOfMonth; i++) {
+					// 面板显示日期与输入框日期相同返回 true
+					if(modelDate) {
+						var condition1 = modelDate.getFullYear() == scope.date.year && (modelDate.getMonth() + 1) == scope.date.month && modelDate.getDate() == i;
+					}
+					// 面板日期为系统当天日期返回 true
+					var condition2 = new Date().getFullYear() == GMTDate.getFullYear() && new Date().getMonth() == GMTDate.getMonth() && new Date().getDate() == i;
+					var dateObj = {
+						'type': 2,
+						'date': i
+					};
+					if(condition1) {
+						dateObj.current = true; // currently picked
+					}
+					if(condition2) {
+						dateObj.today = true; // today
+					}
+					dateList.push(dateObj);
+				}
+
+				// 根据week生成填充上月日期
+				var prevLen = 0; // the length of prev month day
+				prevLen = weekOfFirstDay || 7;
+				for(var j = 0; j < prevLen; j++) {
+					dateList.unshift({
+						'type': 1,
+						'date': endDayOfLastMonth--
+					});
+				}
+
+				// 每个面板最多显示42天  计算剩余下月显示的天数
+				var nextLen = 42 - prevLen - endDayOfMonth;
+				for(var k = 1; k <= nextLen; k++) {
+					dateList.push({
+						'type': 3,
+						'date': k
+					});
+				}
+
+				// 按每行显示7天分割数组
+				var count = 0,
+					arr = [],
+					resList = [];
+				for(var l = 0; l < dateList.length; l++) {
+					count++;
+					arr.push(dateList[l]);
+					if(count >= 7) {
+						resList.push(arr);
+						count = 0;
+						arr = [];
+					}
+				}
+				return resList;
+			}
+		}
+
+		// 生成时间选择列表数据
+		function createTimeList() {
+			var h = 8,
+				m = 0,
+				resList = [{
+					'time': '08:00'
+				}];
+			// fill time list
+			for(var i = 1; i < 24 * 60 / interval; i++) {
+				m = m + interval;
+				if(m >= 60) {
+					h = h + (m / 60);
+					m = 0;
+				}
+				if(h >= 24) {
+					h = h - 24;
+				}
+				var timeObj = {
+					'time': getDoubleDigit(h) + ":" + getDoubleDigit(m)
+				};
+				resList.push(timeObj);
+			}
+			return resList;
+		}
+
+		// 生成年份选择列表数据
+		function createYearList(year) {
+			year = parseInt(year) || GMTDate.getFullYear();
+			if(year) {
+				var yearList = {};
+				yearList.startYear = year;
+				yearList.endYear = yearList.startYear + 10;
+				yearList.y1 = [];
+				yearList.y2 = [];
+				yearList.y3 = [];
+
+				for(var i = 0; i < 4; i++) {
+					yearList.y1.push(year + i);
+					yearList.y2.push(year + i + 4);
+					if(yearList.y3.length <= 2) {
+						yearList.y3.push(year + i + 8);
+					}
+				}
+				return yearList;
+			}
+			return null;
+		}
+
+		// 输出时间
+		function outputDate() {
+			scope.ngModel = dateFormat(GMTToStrDate(GMTDate));
+		}
+
+		// 点击某天关闭弹窗的规则
+		var DATE_PICK_CLOSE = (format == DATE_RULES[2]);
+
+		// Pick Date
+		scope.pickDate = function(item, e) {
+			if(item.type == 2) {
+				GMTDate.setDate(item.date);
+				if(DATE_PICK_CLOSE) {
+					scope.date.showPicker = false;
+				}
+			} else if(item.type == 1) {
+				GMTDate.setDate(item.date);
+				GMTDate.setMonth(scope.date.month - 2);
+			} else if(item.type == 3) {
+				GMTDate.setDate(item.date);
+				GMTDate.setMonth(scope.date.month);
+			}
+			outputDate();
+			scope.date.dateList = getDateList(GMTDate); // 生成年月日数据
+		}
+
+		// Pick Time
+		scope.pickTime = function(time) {
+			GMTDate.setHours(time.slice(0, 2));
+			GMTDate.setMinutes(time.slice(3, 5));
+			outputDate();
+			getAllDate();
+		}
+
+		// Prev Year
+		scope.prevYear = function() {
+			var y = scope.date.year - 1;
+			if(y >= minYear) {
+				GMTDate.setFullYear(y);
+				scope.date.dateList = getDateList(GMTDate); // 生成年月日数据
+			}
+		}
+
+		// Next Year
+		scope.nextYear = function() {
+			var y = scope.date.year + 1;
+			if(y <= maxYear) {
+				GMTDate.setFullYear(y);
+				scope.date.dateList = getDateList(GMTDate); // 生成年月日数据
+			}
+		}
+
+		// Prev Year
+		scope.prevYearByMonth = function() {
+			var y = scope.date.year - 1;
+			if(y >= minYear) {
+				GMTDate.setFullYear(y);
+				getAllDate();
+			}
+		}
+
+		// Next Year
+		scope.nextYearByMonth = function() {
+			var y = scope.date.year + 1;
+			if(y <= maxYear) {
+				GMTDate.setFullYear(y);
+				getAllDate();
+			}
+		}
+
+		// Prev Month
+		scope.prevMonth = function() {
+			var m = scope.date.month - 2;
+			GMTDate.setMonth(m);
+			scope.date.dateList = getDateList(GMTDate); // 生成年月日数据
+		}
+
+		// Next Month
+		scope.nextMonth = function() {
+			var m = scope.date.month;
+			GMTDate.setMonth(m);
+			scope.date.dateList = getDateList(GMTDate); // 生成年月日数据
+		}
+
+		// 打开年份选择列表
+		scope.openYearPicker = function(year) {
+			scope.date.selector = 3;
+			scope.date.yearList = createYearList(year);
+		}
+
+		// Pick Year
+		scope.selectYear = function(year) {
+			GMTDate.setFullYear(year);
+			scope.date.selector = 2;
+			getAllDate();
+			outputDate();
+		}
+
+		scope.pickPrevYear = function() {
+			var year = scope.date.yearList.startYear - 11;
+			if(year >= minYear) {
+				scope.openYearPicker(year);
+			}
+		}
+
+		scope.pickNextYear = function() {
+			var year = scope.date.yearList.startYear + 11;
+			if(year <= maxYear) {
+				scope.openYearPicker(year);
+			}
+		}
+
+		// 打开月份选择列表
+		scope.openMonthPicker = function() {
+			scope.date.selector = 2;
+		}
+
+		// 点击某月关闭弹窗的规则
+		var MONTH_PICK_CLOSE = (format == DATE_RULES[3]);
+
+		// Select Month
+		scope.selectMonth = function(m) {
+			GMTDate.setMonth(m - 1);
+			scope.date.dateList = getDateList(GMTDate); // 生成年月日数据
+			scope.date.selector = 1;
+			outputDate();
+			if(MONTH_PICK_CLOSE) {
+				scope.date.showPicker = false;
+			}
+		}
+
+		// 选择至今
+		scope.hitherto = function() {
+			scope.ngModel = '至今';
+			scope.date.showPicker = false;
+		}
+
+		// Picker open
+		scope.openPicker = function() {
+			domBootstrap(format); // 打开日期面板更新样式
+			angular.element(".wui-date .wui-date-picker").hide();
+			angular.element(".wui-date-" + scope.id + " .wui-date-picker").show();
+			GMTDateInit(scope.ngModel);
+			scope.date.dateList = getDateList(GMTDate); // 生成年月日数据
+			scope.date.showPicker = true;
+		}
+
+		// 确定按钮
+		scope.confirm = function() {
+			outputDate();
+			scope.date.showPicker = false;
+		}
+
+		// 此刻按钮
+		scope.moment = function() {
+			GMTDate = new Date();
+			outputDate();
+			scope.date.showPicker = false;
+		}
+
+		// 格式化input的date
+		scope.checkDateFormat = function() {
+			scope.ngModel = dateFormat(scope.ngModel);
+		}
+
+		// date init
+		scope.dateInit = function() {
+			domBootstrap(format);
+			GMTDateInit(scope.ngModel);
+			scope.date.dateList = getDateList(GMTDate); // 生成年月日数据
+			scope.date.timeList = createTimeList();
+		}
+
+		scope.$watch('date.showPicker', function() {
+			if(scope.date.showPicker) {
+				scope.dateInit();
+			}
+		});
+
+		// Close by click blank
+		element.on('click', function(e) {
+			//阻止底层冒泡
+			e.stopPropagation();
+		});
+
+		angular.element('body').on('click', ':not(.wui-date)', function() {
+			angular.element(element).find('.wui-date-picker').hide();
+		});
+
+	}
+
+	function fieldTemplate(scope, element, attr) {
+		return(
+			'<div class="wui-date wui-date" ng-app="wui.date">' +
+			'<div class="wui-date-editor" ng-click="openPicker()">' +
+			'<input class="wui-input wui-input-block wui-date-input" type="text" placeholder="{{placeholder}}" ng-model="ngModel" autocomplete="off" ng-blur=checkDateFormat()>' +
+			'<i class="iconfont icon1">&#xe807;</i>' +
+			'</div>' +
+			'<br/>' +
+			'<div class="wui-date-picker" ng-show="date.showPicker">' +
+			'<div class="wui-date-picker_body">' +
+			'<div class="wui-date-picker_panel" ng-show="date.selector == 1">' +
+			'<div class="wui-date-panel_header">' +
+			'<i class="iconfont" ng-click="prevYear()">&#xe809;</i>' +
+			'<i class="iconfont" ng-click="prevMonth()">&#xe808;</i>' +
+			'<span class="title">' +
+			'<span class="txt" ng-click="openYearPicker()"><span>{{date.year}}</span> 年 </span>' +
+			'<span class="txt" ng-click="openMonthPicker()"><span>{{date.month}}</span> 月</span>' +
+			'</span>' +
+			'<i class="iconfont" ng-click="nextMonth()">&#xe886;</i>' +
+			'<i class="iconfont" ng-click="nextYear()">&#xe640;</i>' +
+			'</div>' +
+			'<div class="wui-date-picker_content">' +
+			'<table class="wui-data-table">' +
+			'<tr>' +
+			'<th>日</th>' +
+			'<th>一</th>' +
+			'<th>二</th>' +
+			'<th>三</th>' +
+			'<th>四</th>' +
+			'<th>五</th>' +
+			'<th>六</th>' +
+			'</tr>' +
+			'<tr ng-repeat="item in date.dateList track by $index">' +
+			'<td ng-repeat="subItem in date.dateList[$index]"><div ng-class="{&apos;prev-date&apos;:subItem.type==1,&apos;date&apos;:subItem.type==2,&apos;next-date&apos;:subItem.type==3}"><span ng-click="pickDate(subItem,$event)" ng-class="{&apos;today&apos;:subItem.today,&apos;current&apos;:subItem.current}">{{subItem.date}}</span></div></td>' +
+			'</tr>' +
+			'</table>' +
+			'</div>' +
+			'</div>' +
+			'<div class="wui-date-picker_panel month_panel" ng-show="date.selector == 2">' +
+			'<div class="wui-date-panel_header">' +
+			'<i class="iconfont" ng-click="prevYearByMonth()">&#xe809;</i>' +
+			'<span class="title">' +
+			'<span class="txt" ng-click="openYearPicker()"><span>{{date.year}}</span> 年</span>' +
+			'</span>' +
+			'<i class="iconfont" ng-click="nextYearByMonth()">&#xe640;</i>' +
+			'</div>	' +
+			'<div class="wui-date-picker_content">' +
+			'<table class="wui-data-table">' +
+			'<tr>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(1)">一月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(2)">二月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(3)">三月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(4)">四月</a>' +
+			'</td>' +
+			'</tr>' +
+			'<tr>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(5)">五月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(6)">六月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(7)">七月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(8)">八月</a>' +
+			'</td>' +
+			'</tr>' +
+			'<tr>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(9)">九月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(10)">十月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(11)">十一月</a>' +
+			'</td>' +
+			'<td>' +
+			'<a class="cell" ng-click="selectMonth(12)">十二月</a>' +
+			'</td>' +
+			'</tr>' +
+			'</table>' +
+			'</div>	' +
+			'</div>' +
+			'<div class="wui-date-picker_panel year_panel" ng-show="date.selector == 3 ">' +
+			'<div class="wui-date-panel_header">' +
+			'<i class="iconfont" ng-click="pickPrevYear()">&#xe809;</i>' +
+			'<span class="title">' +
+			'<span class="txt"><span>{{date.yearList.startYear}}</span> 年 - <span>{{date.yearList.endYear}}</span> 年</span>' +
+			'</span>' +
+			'<i class="iconfont" ng-click="pickNextYear()">&#xe640;</i>' +
+			'</div>' +
+			'<div class="wui-date-picker_content">' +
+			'<table class="wui-data-table">' +
+			'<tr>' +
+			'<td ng-repeat="item in date.yearList.y1 track by $index">' +
+			'<a class="cell" ng-click="selectYear(item)">{{item}}</a>' +
+			'</td>' +
+			'</tr>' +
+			'<tr>' +
+			'<td ng-repeat="item in date.yearList.y2 track by $index">' +
+			'<a class="cell" ng-click="selectYear(item)">{{item}}</a>' +
+			'</td>' +
+			'</tr>' +
+			'<tr>' +
+			'<td ng-repeat="item in date.yearList.y3 track by $index">' +
+			'<a class="cell" ng-click="selectYear(item)">{{item}}</a>' +
+			'</td>' +
+			'</tr>' +
+			'</table>' +
+			'</div>' +
+			'</div>' +
+			'<div class="wui-date-picker_aside" ng-show="date.showTimePicker">' +
+			'<div class="wui-date-aside_header">' +
+			'<div class="wui-select wui-select-block time-select" id="time">' +
+			'<div class="wui-select-selection time-selection">' +
+			'<input type="hidden" name="" value="" >' +
+			'<span class="wui-select-icon iconfont time-icon">&#xe887;</span>' +
+			'<span class="wui-select-placeholder placeholder">{{date.hours}}:{{date.minutes}}</span>' +
+			'<span class="wui-select-selected-value value"></span>' +
+			'</div>' +
+			'<div class="wui-select-menu time-menu" ng-show="date.showTimeList">' +
+			'<ul>' +
+			'<li class="wui-select-item time-menu-item" ng-repeat="item in date.timeList" ng-click="pickTime(item.time)">{{item.time}}</li>' +
+			'</ul>' +
+			'</div>' +
+			'</div>' +
+			'</div>' +
+			'</div>' +
+			'</div>' +
+			'<div class="wui-date-picker_footer" ng-show="date.showBtn">' +
+			'<button type="button" class="wui-btn wui-btn-white wui-btn-xsmall" ng-click="moment()" ng-if="date.btns.now">{{date.btns.now}}</button>' +
+			'<button type="button" class="wui-btn wui-btn-primary wui-btn-xsmall" ng-click="confirm()" ng-if="date.btns.ok">{{date.btns.ok}}</button>' +
+			'<button type="button" class="wui-btn wui-btn-white wui-btn-xsmall" ng-click="hitherto()" ng-if="date.btns.hitherto">至今</button>' +
+			'</div>' +
+			'</div>' +
+			'</div>'
+		);
+	}
+
+});

File diff suppressed because it is too large
+ 1 - 0
public/bootstrap_date/js/wui-date.min.js


File diff suppressed because it is too large
+ 3340 - 0
public/datetimepicker/css/animate.css


File diff suppressed because it is too large
+ 5 - 0
public/datetimepicker/css/bootstrap.min.css


File diff suppressed because it is too large
+ 2 - 0
public/datetimepicker/css/materialdesignicons.min.css


File diff suppressed because it is too large
+ 4259 - 0
public/datetimepicker/css/style.min.css


二進制
public/datetimepicker/favicon.ico


二進制
public/datetimepicker/fonts/materialdesignicons.eot


File diff suppressed because it is too large
+ 6150 - 0
public/datetimepicker/fonts/materialdesignicons.svg


二進制
public/datetimepicker/fonts/materialdesignicons.ttf


二進制
public/datetimepicker/fonts/materialdesignicons.woff


二進制
public/datetimepicker/fonts/materialdesignicons.woff2


二進制
public/datetimepicker/images/captcha.png


二進制
public/datetimepicker/images/gallery/1.jpg


二進制
public/datetimepicker/images/gallery/10.jpg


二進制
public/datetimepicker/images/gallery/11.jpg


二進制
public/datetimepicker/images/gallery/13.jpg


二進制
public/datetimepicker/images/gallery/14.jpg


二進制
public/datetimepicker/images/gallery/15.jpg


二進制
public/datetimepicker/images/gallery/16.jpg


二進制
public/datetimepicker/images/gallery/17.jpg


二進制
public/datetimepicker/images/gallery/2.jpg


二進制
public/datetimepicker/images/gallery/3.jpg


二進制
public/datetimepicker/images/gallery/4.jpg


二進制
public/datetimepicker/images/gallery/5.jpg


二進制
public/datetimepicker/images/gallery/6.jpg


二進制
public/datetimepicker/images/gallery/7.jpg


二進制
public/datetimepicker/images/gallery/8.jpg


二進制
public/datetimepicker/images/gallery/9.jpg


二進制
public/datetimepicker/images/img-slide-1.jpg


二進制
public/datetimepicker/images/img-slide-2.jpg


二進制
public/datetimepicker/images/img-slide-3.jpg


二進制
public/datetimepicker/images/img-slide-4.jpg


二進制
public/datetimepicker/images/img-slide-5.jpg


二進制
public/datetimepicker/images/logo-ico.png


二進制
public/datetimepicker/images/logo-sidebar.png


二進制
public/datetimepicker/images/logo.png


二進制
public/datetimepicker/images/users/avatar.jpg


File diff suppressed because it is too large
+ 18962 - 0
public/datetimepicker/js/Chart.js


File diff suppressed because it is too large
+ 1106 - 0
public/datetimepicker/js/bootstrap-colorpicker/bootstrap-colorpicker.js


File diff suppressed because it is too large
+ 5 - 0
public/datetimepicker/js/bootstrap-colorpicker/bootstrap-colorpicker.min.js


+ 222 - 0
public/datetimepicker/js/bootstrap-colorpicker/css/bootstrap-colorpicker.css

@@ -0,0 +1,222 @@
+/*!
+ * Bootstrap Colorpicker v2.3.3
+ * http://mjolnic.github.io/bootstrap-colorpicker/
+ *
+ * Originally written by (c) 2012 Stefan Petre
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ */
+.colorpicker-saturation {
+  width: 100px;
+  height: 100px;
+  background-image: url("../img/bootstrap-colorpicker/saturation.png");
+  cursor: crosshair;
+  float: left;
+}
+.colorpicker-saturation i {
+  display: block;
+  height: 5px;
+  width: 5px;
+  border: 1px solid #000;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: -4px 0 0 -4px;
+}
+.colorpicker-saturation i b {
+  display: block;
+  height: 5px;
+  width: 5px;
+  border: 1px solid #fff;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+.colorpicker-hue,
+.colorpicker-alpha {
+  width: 15px;
+  height: 100px;
+  float: left;
+  cursor: row-resize;
+  margin-left: 4px;
+  margin-bottom: 4px;
+}
+.colorpicker-hue i,
+.colorpicker-alpha i {
+  display: block;
+  height: 1px;
+  background: #000;
+  border-top: 1px solid #fff;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  margin-top: -1px;
+}
+.colorpicker-hue {
+  background-image: url("../img/bootstrap-colorpicker/hue.png");
+}
+.colorpicker-alpha {
+  background-image: url("../img/bootstrap-colorpicker/alpha.png");
+  display: none;
+}
+.colorpicker-saturation,
+.colorpicker-hue,
+.colorpicker-alpha {
+  background-size: contain;
+}
+.colorpicker {
+  padding: 4px;
+  min-width: 130px;
+  margin-top: 1px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  z-index: 2500;
+}
+.colorpicker:before,
+.colorpicker:after {
+  display: table;
+  content: "";
+  line-height: 0;
+}
+.colorpicker:after {
+  clear: both;
+}
+.colorpicker:before {
+  content: '';
+  display: inline-block;
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #ccc;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  position: absolute;
+  top: -7px;
+  left: 6px;
+}
+.colorpicker:after {
+  content: '';
+  display: inline-block;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #ffffff;
+  position: absolute;
+  top: -6px;
+  left: 7px;
+}
+.colorpicker div {
+  position: relative;
+}
+.colorpicker.colorpicker-with-alpha {
+  min-width: 140px;
+}
+.colorpicker.colorpicker-with-alpha .colorpicker-alpha {
+  display: block;
+}
+.colorpicker-color {
+  height: 10px;
+  margin-top: 5px;
+  clear: both;
+  background-image: url("../img/bootstrap-colorpicker/alpha.png");
+  background-position: 0 100%;
+}
+.colorpicker-color div {
+  height: 10px;
+}
+.colorpicker-selectors {
+  display: none;
+  height: 10px;
+  margin-top: 5px;
+  clear: both;
+}
+.colorpicker-selectors i {
+  cursor: pointer;
+  float: left;
+  height: 10px;
+  width: 10px;
+}
+.colorpicker-selectors i + i {
+  margin-left: 3px;
+}
+.colorpicker-element .input-group-addon i,
+.colorpicker-element .add-on i {
+  display: inline-block;
+  cursor: pointer;
+  height: 16px;
+  vertical-align: text-top;
+  width: 16px;
+}
+.colorpicker.colorpicker-inline {
+  position: relative;
+  display: inline-block;
+  float: none;
+  z-index: auto;
+}
+.colorpicker.colorpicker-horizontal {
+  width: 110px;
+  min-width: 110px;
+  height: auto;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-saturation {
+  margin-bottom: 4px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-color {
+  width: 100px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue,
+.colorpicker.colorpicker-horizontal .colorpicker-alpha {
+  width: 100px;
+  height: 15px;
+  float: left;
+  cursor: col-resize;
+  margin-left: 0px;
+  margin-bottom: 4px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue i,
+.colorpicker.colorpicker-horizontal .colorpicker-alpha i {
+  display: block;
+  height: 15px;
+  background: #ffffff;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 1px;
+  border: none;
+  margin-top: 0px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue {
+  background-image: url("../img/bootstrap-colorpicker/hue-horizontal.png");
+}
+.colorpicker.colorpicker-horizontal .colorpicker-alpha {
+  background-image: url("../img/bootstrap-colorpicker/alpha-horizontal.png");
+}
+.colorpicker.colorpicker-hidden {
+  display: none;
+}
+.colorpicker.colorpicker-visible {
+  display: block;
+}
+.colorpicker-inline.colorpicker-visible {
+  display: inline-block;
+}
+.colorpicker-right:before {
+  left: auto;
+  right: 6px;
+}
+.colorpicker-right:after {
+  left: auto;
+  right: 7px;
+}
+.colorpicker-no-arrow:before {
+  border-right: 0;
+  border-left: 0;
+}
+.colorpicker-no-arrow:after {
+  border-right: 0;
+  border-left: 0;
+}
+/*# sourceMappingURL=bootstrap-colorpicker.css.map */

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-colorpicker/css/bootstrap-colorpicker.css.map


File diff suppressed because it is too large
+ 10 - 0
public/datetimepicker/js/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css.map


二進制
public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png


二進制
public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png


二進制
public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png


二進制
public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png


二進制
public/datetimepicker/js/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png


File diff suppressed because it is too large
+ 2089 - 0
public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker.js


File diff suppressed because it is too large
+ 9 - 0
public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker.min.js


+ 681 - 0
public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker3.css

@@ -0,0 +1,681 @@
+/*!
+ * Datepicker for Bootstrap v1.6.1 (https://github.com/eternicode/bootstrap-datepicker)
+ *
+ * Copyright 2012 Stefan Petre
+ * Improvements by Andrew Rowls
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+ */
+.datepicker {
+  border-radius: 4px;
+  direction: ltr;
+}
+.datepicker-inline {
+  width: 220px;
+}
+.datepicker.datepicker-rtl {
+  direction: rtl;
+}
+.datepicker.datepicker-rtl table tr td span {
+  float: right;
+}
+.datepicker-dropdown {
+  top: 0;
+  left: 0;
+  padding: 4px;
+}
+.datepicker-dropdown:before {
+  content: '';
+  display: inline-block;
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid rgba(0, 0, 0, 0.15);
+  border-top: 0;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  position: absolute;
+}
+.datepicker-dropdown:after {
+  content: '';
+  display: inline-block;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #ffffff;
+  border-top: 0;
+  position: absolute;
+}
+.datepicker-dropdown.datepicker-orient-left:before {
+  left: 6px;
+}
+.datepicker-dropdown.datepicker-orient-left:after {
+  left: 7px;
+}
+.datepicker-dropdown.datepicker-orient-right:before {
+  right: 6px;
+}
+.datepicker-dropdown.datepicker-orient-right:after {
+  right: 7px;
+}
+.datepicker-dropdown.datepicker-orient-bottom:before {
+  top: -7px;
+}
+.datepicker-dropdown.datepicker-orient-bottom:after {
+  top: -6px;
+}
+.datepicker-dropdown.datepicker-orient-top:before {
+  bottom: -7px;
+  border-bottom: 0;
+  border-top: 7px solid rgba(0, 0, 0, 0.15);
+}
+.datepicker-dropdown.datepicker-orient-top:after {
+  bottom: -6px;
+  border-bottom: 0;
+  border-top: 6px solid #ffffff;
+}
+.datepicker > div {
+  display: none;
+}
+.datepicker table {
+  margin: 0;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.datepicker table tr td,
+.datepicker table tr th {
+  text-align: center;
+  width: 30px;
+  height: 30px;
+  border-radius: 4px;
+  border: none;
+}
+.table-striped .datepicker table tr td,
+.table-striped .datepicker table tr th {
+  background-color: transparent;
+}
+.datepicker table tr td.old,
+.datepicker table tr td.new {
+  color: #777777;
+}
+.datepicker table tr td.day:hover,
+.datepicker table tr td.focused {
+  background: #eeeeee;
+  cursor: pointer;
+}
+.datepicker table tr td.disabled,
+.datepicker table tr td.disabled:hover {
+  background: none;
+  color: #777777;
+  cursor: default;
+}
+.datepicker table tr td.highlighted {
+  color: #000000;
+  background-color: #d9edf7;
+  border-color: #85c5e5;
+  border-radius: 0;
+}
+.datepicker table tr td.highlighted:focus,
+.datepicker table tr td.highlighted.focus {
+  color: #000000;
+  background-color: #afd9ee;
+  border-color: #298fc2;
+}
+.datepicker table tr td.highlighted:hover {
+  color: #000000;
+  background-color: #afd9ee;
+  border-color: #52addb;
+}
+.datepicker table tr td.highlighted:active,
+.datepicker table tr td.highlighted.active {
+  color: #000000;
+  background-color: #afd9ee;
+  border-color: #52addb;
+}
+.datepicker table tr td.highlighted:active:hover,
+.datepicker table tr td.highlighted.active:hover,
+.datepicker table tr td.highlighted:active:focus,
+.datepicker table tr td.highlighted.active:focus,
+.datepicker table tr td.highlighted:active.focus,
+.datepicker table tr td.highlighted.active.focus {
+  color: #000000;
+  background-color: #91cbe8;
+  border-color: #298fc2;
+}
+.datepicker table tr td.highlighted.disabled:hover,
+.datepicker table tr td.highlighted[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.highlighted:hover,
+.datepicker table tr td.highlighted.disabled:focus,
+.datepicker table tr td.highlighted[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.highlighted:focus,
+.datepicker table tr td.highlighted.disabled.focus,
+.datepicker table tr td.highlighted[disabled].focus,
+fieldset[disabled] .datepicker table tr td.highlighted.focus {
+  background-color: #d9edf7;
+  border-color: #85c5e5;
+}
+.datepicker table tr td.highlighted.focused {
+  background: #afd9ee;
+}
+.datepicker table tr td.highlighted.disabled,
+.datepicker table tr td.highlighted.disabled:active {
+  background: #d9edf7;
+  color: #777777;
+}
+.datepicker table tr td.today {
+  color: #000000;
+  background-color: #ffdb99;
+  border-color: #ffb733;
+}
+.datepicker table tr td.today:focus,
+.datepicker table tr td.today.focus {
+  color: #000000;
+  background-color: #ffc966;
+  border-color: #b37400;
+}
+.datepicker table tr td.today:hover {
+  color: #000000;
+  background-color: #ffc966;
+  border-color: #f59e00;
+}
+.datepicker table tr td.today:active,
+.datepicker table tr td.today.active {
+  color: #000000;
+  background-color: #ffc966;
+  border-color: #f59e00;
+}
+.datepicker table tr td.today:active:hover,
+.datepicker table tr td.today.active:hover,
+.datepicker table tr td.today:active:focus,
+.datepicker table tr td.today.active:focus,
+.datepicker table tr td.today:active.focus,
+.datepicker table tr td.today.active.focus {
+  color: #000000;
+  background-color: #ffbc42;
+  border-color: #b37400;
+}
+.datepicker table tr td.today.disabled:hover,
+.datepicker table tr td.today[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.today:hover,
+.datepicker table tr td.today.disabled:focus,
+.datepicker table tr td.today[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.today:focus,
+.datepicker table tr td.today.disabled.focus,
+.datepicker table tr td.today[disabled].focus,
+fieldset[disabled] .datepicker table tr td.today.focus {
+  background-color: #ffdb99;
+  border-color: #ffb733;
+}
+.datepicker table tr td.today.focused {
+  background: #ffc966;
+}
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today.disabled:active {
+  background: #ffdb99;
+  color: #777777;
+}
+.datepicker table tr td.range {
+  color: #000000;
+  background-color: #eeeeee;
+  border-color: #bbbbbb;
+  border-radius: 0;
+}
+.datepicker table tr td.range:focus,
+.datepicker table tr td.range.focus {
+  color: #000000;
+  background-color: #d5d5d5;
+  border-color: #7c7c7c;
+}
+.datepicker table tr td.range:hover {
+  color: #000000;
+  background-color: #d5d5d5;
+  border-color: #9d9d9d;
+}
+.datepicker table tr td.range:active,
+.datepicker table tr td.range.active {
+  color: #000000;
+  background-color: #d5d5d5;
+  border-color: #9d9d9d;
+}
+.datepicker table tr td.range:active:hover,
+.datepicker table tr td.range.active:hover,
+.datepicker table tr td.range:active:focus,
+.datepicker table tr td.range.active:focus,
+.datepicker table tr td.range:active.focus,
+.datepicker table tr td.range.active.focus {
+  color: #000000;
+  background-color: #c3c3c3;
+  border-color: #7c7c7c;
+}
+.datepicker table tr td.range.disabled:hover,
+.datepicker table tr td.range[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.range:hover,
+.datepicker table tr td.range.disabled:focus,
+.datepicker table tr td.range[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.range:focus,
+.datepicker table tr td.range.disabled.focus,
+.datepicker table tr td.range[disabled].focus,
+fieldset[disabled] .datepicker table tr td.range.focus {
+  background-color: #eeeeee;
+  border-color: #bbbbbb;
+}
+.datepicker table tr td.range.focused {
+  background: #d5d5d5;
+}
+.datepicker table tr td.range.disabled,
+.datepicker table tr td.range.disabled:active {
+  background: #eeeeee;
+  color: #777777;
+}
+.datepicker table tr td.range.highlighted {
+  color: #000000;
+  background-color: #e4eef3;
+  border-color: #9dc1d3;
+}
+.datepicker table tr td.range.highlighted:focus,
+.datepicker table tr td.range.highlighted.focus {
+  color: #000000;
+  background-color: #c1d7e3;
+  border-color: #4b88a6;
+}
+.datepicker table tr td.range.highlighted:hover {
+  color: #000000;
+  background-color: #c1d7e3;
+  border-color: #73a6c0;
+}
+.datepicker table tr td.range.highlighted:active,
+.datepicker table tr td.range.highlighted.active {
+  color: #000000;
+  background-color: #c1d7e3;
+  border-color: #73a6c0;
+}
+.datepicker table tr td.range.highlighted:active:hover,
+.datepicker table tr td.range.highlighted.active:hover,
+.datepicker table tr td.range.highlighted:active:focus,
+.datepicker table tr td.range.highlighted.active:focus,
+.datepicker table tr td.range.highlighted:active.focus,
+.datepicker table tr td.range.highlighted.active.focus {
+  color: #000000;
+  background-color: #a8c8d8;
+  border-color: #4b88a6;
+}
+.datepicker table tr td.range.highlighted.disabled:hover,
+.datepicker table tr td.range.highlighted[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.range.highlighted:hover,
+.datepicker table tr td.range.highlighted.disabled:focus,
+.datepicker table tr td.range.highlighted[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.range.highlighted:focus,
+.datepicker table tr td.range.highlighted.disabled.focus,
+.datepicker table tr td.range.highlighted[disabled].focus,
+fieldset[disabled] .datepicker table tr td.range.highlighted.focus {
+  background-color: #e4eef3;
+  border-color: #9dc1d3;
+}
+.datepicker table tr td.range.highlighted.focused {
+  background: #c1d7e3;
+}
+.datepicker table tr td.range.highlighted.disabled,
+.datepicker table tr td.range.highlighted.disabled:active {
+  background: #e4eef3;
+  color: #777777;
+}
+.datepicker table tr td.range.today {
+  color: #000000;
+  background-color: #f7ca77;
+  border-color: #f1a417;
+}
+.datepicker table tr td.range.today:focus,
+.datepicker table tr td.range.today.focus {
+  color: #000000;
+  background-color: #f4b747;
+  border-color: #815608;
+}
+.datepicker table tr td.range.today:hover {
+  color: #000000;
+  background-color: #f4b747;
+  border-color: #bf800c;
+}
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today.active {
+  color: #000000;
+  background-color: #f4b747;
+  border-color: #bf800c;
+}
+.datepicker table tr td.range.today:active:hover,
+.datepicker table tr td.range.today.active:hover,
+.datepicker table tr td.range.today:active:focus,
+.datepicker table tr td.range.today.active:focus,
+.datepicker table tr td.range.today:active.focus,
+.datepicker table tr td.range.today.active.focus {
+  color: #000000;
+  background-color: #f2aa25;
+  border-color: #815608;
+}
+.datepicker table tr td.range.today.disabled:hover,
+.datepicker table tr td.range.today[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today.disabled:focus,
+.datepicker table tr td.range.today[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.range.today:focus,
+.datepicker table tr td.range.today.disabled.focus,
+.datepicker table tr td.range.today[disabled].focus,
+fieldset[disabled] .datepicker table tr td.range.today.focus {
+  background-color: #f7ca77;
+  border-color: #f1a417;
+}
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today.disabled:active {
+  background: #f7ca77;
+  color: #777777;
+}
+.datepicker table tr td.selected,
+.datepicker table tr td.selected.highlighted {
+  color: #ffffff;
+  background-color: #777777;
+  border-color: #555555;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td.selected:focus,
+.datepicker table tr td.selected.highlighted:focus,
+.datepicker table tr td.selected.focus,
+.datepicker table tr td.selected.highlighted.focus {
+  color: #ffffff;
+  background-color: #5e5e5e;
+  border-color: #161616;
+}
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected.highlighted:hover {
+  color: #ffffff;
+  background-color: #5e5e5e;
+  border-color: #373737;
+}
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected.highlighted:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected.highlighted.active {
+  color: #ffffff;
+  background-color: #5e5e5e;
+  border-color: #373737;
+}
+.datepicker table tr td.selected:active:hover,
+.datepicker table tr td.selected.highlighted:active:hover,
+.datepicker table tr td.selected.active:hover,
+.datepicker table tr td.selected.highlighted.active:hover,
+.datepicker table tr td.selected:active:focus,
+.datepicker table tr td.selected.highlighted:active:focus,
+.datepicker table tr td.selected.active:focus,
+.datepicker table tr td.selected.highlighted.active:focus,
+.datepicker table tr td.selected:active.focus,
+.datepicker table tr td.selected.highlighted:active.focus,
+.datepicker table tr td.selected.active.focus,
+.datepicker table tr td.selected.highlighted.active.focus {
+  color: #ffffff;
+  background-color: #4c4c4c;
+  border-color: #161616;
+}
+.datepicker table tr td.selected.disabled:hover,
+.datepicker table tr td.selected.highlighted.disabled:hover,
+.datepicker table tr td.selected[disabled]:hover,
+.datepicker table tr td.selected.highlighted[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.selected:hover,
+fieldset[disabled] .datepicker table tr td.selected.highlighted:hover,
+.datepicker table tr td.selected.disabled:focus,
+.datepicker table tr td.selected.highlighted.disabled:focus,
+.datepicker table tr td.selected[disabled]:focus,
+.datepicker table tr td.selected.highlighted[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.selected:focus,
+fieldset[disabled] .datepicker table tr td.selected.highlighted:focus,
+.datepicker table tr td.selected.disabled.focus,
+.datepicker table tr td.selected.highlighted.disabled.focus,
+.datepicker table tr td.selected[disabled].focus,
+.datepicker table tr td.selected.highlighted[disabled].focus,
+fieldset[disabled] .datepicker table tr td.selected.focus,
+fieldset[disabled] .datepicker table tr td.selected.highlighted.focus {
+  background-color: #777777;
+  border-color: #555555;
+}
+.datepicker table tr td.active,
+.datepicker table tr td.active.highlighted {
+  color: #ffffff;
+  background-color: #337ab7;
+  border-color: #2e6da4;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td.active:focus,
+.datepicker table tr td.active.highlighted:focus,
+.datepicker table tr td.active.focus,
+.datepicker table tr td.active.highlighted.focus {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #122b40;
+}
+.datepicker table tr td.active:hover,
+.datepicker table tr td.active.highlighted:hover {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.datepicker table tr td.active:active,
+.datepicker table tr td.active.highlighted:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active.highlighted.active {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.datepicker table tr td.active:active:hover,
+.datepicker table tr td.active.highlighted:active:hover,
+.datepicker table tr td.active.active:hover,
+.datepicker table tr td.active.highlighted.active:hover,
+.datepicker table tr td.active:active:focus,
+.datepicker table tr td.active.highlighted:active:focus,
+.datepicker table tr td.active.active:focus,
+.datepicker table tr td.active.highlighted.active:focus,
+.datepicker table tr td.active:active.focus,
+.datepicker table tr td.active.highlighted:active.focus,
+.datepicker table tr td.active.active.focus,
+.datepicker table tr td.active.highlighted.active.focus {
+  color: #ffffff;
+  background-color: #204d74;
+  border-color: #122b40;
+}
+.datepicker table tr td.active.disabled:hover,
+.datepicker table tr td.active.highlighted.disabled:hover,
+.datepicker table tr td.active[disabled]:hover,
+.datepicker table tr td.active.highlighted[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.active:hover,
+fieldset[disabled] .datepicker table tr td.active.highlighted:hover,
+.datepicker table tr td.active.disabled:focus,
+.datepicker table tr td.active.highlighted.disabled:focus,
+.datepicker table tr td.active[disabled]:focus,
+.datepicker table tr td.active.highlighted[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.active:focus,
+fieldset[disabled] .datepicker table tr td.active.highlighted:focus,
+.datepicker table tr td.active.disabled.focus,
+.datepicker table tr td.active.highlighted.disabled.focus,
+.datepicker table tr td.active[disabled].focus,
+.datepicker table tr td.active.highlighted[disabled].focus,
+fieldset[disabled] .datepicker table tr td.active.focus,
+fieldset[disabled] .datepicker table tr td.active.highlighted.focus {
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.datepicker table tr td span {
+  display: block;
+  width: 23%;
+  height: 54px;
+  line-height: 54px;
+  float: left;
+  margin: 1%;
+  cursor: pointer;
+  border-radius: 4px;
+}
+.datepicker table tr td span:hover,
+.datepicker table tr td span.focused {
+  background: #eeeeee;
+}
+.datepicker table tr td span.disabled,
+.datepicker table tr td span.disabled:hover {
+  background: none;
+  color: #777777;
+  cursor: default;
+}
+.datepicker table tr td span.active,
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active.disabled:hover {
+  color: #ffffff;
+  background-color: #337ab7;
+  border-color: #2e6da4;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td span.active:focus,
+.datepicker table tr td span.active:hover:focus,
+.datepicker table tr td span.active.disabled:focus,
+.datepicker table tr td span.active.disabled:hover:focus,
+.datepicker table tr td span.active.focus,
+.datepicker table tr td span.active:hover.focus,
+.datepicker table tr td span.active.disabled.focus,
+.datepicker table tr td span.active.disabled:hover.focus {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #122b40;
+}
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active:hover:hover,
+.datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active.disabled:hover:hover {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.datepicker table tr td span.active:active:hover,
+.datepicker table tr td span.active:hover:active:hover,
+.datepicker table tr td span.active.disabled:active:hover,
+.datepicker table tr td span.active.disabled:hover:active:hover,
+.datepicker table tr td span.active.active:hover,
+.datepicker table tr td span.active:hover.active:hover,
+.datepicker table tr td span.active.disabled.active:hover,
+.datepicker table tr td span.active.disabled:hover.active:hover,
+.datepicker table tr td span.active:active:focus,
+.datepicker table tr td span.active:hover:active:focus,
+.datepicker table tr td span.active.disabled:active:focus,
+.datepicker table tr td span.active.disabled:hover:active:focus,
+.datepicker table tr td span.active.active:focus,
+.datepicker table tr td span.active:hover.active:focus,
+.datepicker table tr td span.active.disabled.active:focus,
+.datepicker table tr td span.active.disabled:hover.active:focus,
+.datepicker table tr td span.active:active.focus,
+.datepicker table tr td span.active:hover:active.focus,
+.datepicker table tr td span.active.disabled:active.focus,
+.datepicker table tr td span.active.disabled:hover:active.focus,
+.datepicker table tr td span.active.active.focus,
+.datepicker table tr td span.active:hover.active.focus,
+.datepicker table tr td span.active.disabled.active.focus,
+.datepicker table tr td span.active.disabled:hover.active.focus {
+  color: #ffffff;
+  background-color: #204d74;
+  border-color: #122b40;
+}
+.datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active:hover.disabled:hover,
+.datepicker table tr td span.active.disabled.disabled:hover,
+.datepicker table tr td span.active.disabled:hover.disabled:hover,
+.datepicker table tr td span.active[disabled]:hover,
+.datepicker table tr td span.active:hover[disabled]:hover,
+.datepicker table tr td span.active.disabled[disabled]:hover,
+.datepicker table tr td span.active.disabled:hover[disabled]:hover,
+fieldset[disabled] .datepicker table tr td span.active:hover,
+fieldset[disabled] .datepicker table tr td span.active:hover:hover,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
+.datepicker table tr td span.active.disabled:focus,
+.datepicker table tr td span.active:hover.disabled:focus,
+.datepicker table tr td span.active.disabled.disabled:focus,
+.datepicker table tr td span.active.disabled:hover.disabled:focus,
+.datepicker table tr td span.active[disabled]:focus,
+.datepicker table tr td span.active:hover[disabled]:focus,
+.datepicker table tr td span.active.disabled[disabled]:focus,
+.datepicker table tr td span.active.disabled:hover[disabled]:focus,
+fieldset[disabled] .datepicker table tr td span.active:focus,
+fieldset[disabled] .datepicker table tr td span.active:hover:focus,
+fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
+.datepicker table tr td span.active.disabled.focus,
+.datepicker table tr td span.active:hover.disabled.focus,
+.datepicker table tr td span.active.disabled.disabled.focus,
+.datepicker table tr td span.active.disabled:hover.disabled.focus,
+.datepicker table tr td span.active[disabled].focus,
+.datepicker table tr td span.active:hover[disabled].focus,
+.datepicker table tr td span.active.disabled[disabled].focus,
+.datepicker table tr td span.active.disabled:hover[disabled].focus,
+fieldset[disabled] .datepicker table tr td span.active.focus,
+fieldset[disabled] .datepicker table tr td span.active:hover.focus,
+fieldset[disabled] .datepicker table tr td span.active.disabled.focus,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus {
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.datepicker table tr td span.old,
+.datepicker table tr td span.new {
+  color: #777777;
+}
+.datepicker .datepicker-switch {
+  width: 145px;
+}
+.datepicker .datepicker-switch,
+.datepicker .prev,
+.datepicker .next,
+.datepicker tfoot tr th {
+  cursor: pointer;
+}
+.datepicker .datepicker-switch:hover,
+.datepicker .prev:hover,
+.datepicker .next:hover,
+.datepicker tfoot tr th:hover {
+  background: #eeeeee;
+}
+.datepicker .cw {
+  font-size: 10px;
+  width: 12px;
+  padding: 0 2px 0 5px;
+  vertical-align: middle;
+}
+.input-group.date .input-group-addon {
+  cursor: pointer;
+}
+.input-daterange {
+  width: 100%;
+}
+.input-daterange input {
+  text-align: center;
+}
+.input-daterange input:first-child {
+  border-radius: 3px 0 0 3px;
+}
+.input-daterange input:last-child {
+  border-radius: 0 3px 3px 0;
+}
+.input-daterange .input-group-addon {
+  width: auto;
+  min-width: 16px;
+  padding: 4px 5px;
+  line-height: 1.42857143;
+  text-shadow: 0 1px 0 #fff;
+  border-width: 1px 0;
+  margin-left: -5px;
+  margin-right: -5px;
+}
+/*# sourceMappingURL=bootstrap-datepicker3.css.map */

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker3.css.map


File diff suppressed because it is too large
+ 9 - 0
public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker3.min.css


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/bootstrap-datepicker3.min.css.map


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js


+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js

@@ -0,0 +1 @@
+!function(a){a.fn.datepicker.dates.az={days:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],daysShort:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],daysMin:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],months:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthsShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],today:"Bu gün",weekStart:1}}(jQuery);

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js


+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js

@@ -0,0 +1 @@
+!function(a){a.fn.datepicker.dates.bs={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"}}(jQuery);

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js


+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js

@@ -0,0 +1 @@
+!function(a){a.fn.datepicker.dates.cy={days:["Sul","Llun","Mawrth","Mercher","Iau","Gwener","Sadwrn"],daysShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],daysMin:["Su","Ll","Ma","Me","Ia","Gwe","Sa"],months:["Ionawr","Chewfror","Mawrth","Ebrill","Mai","Mehefin","Gorfennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthsShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tach","Rha"],today:"Heddiw"}}(jQuery);

+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js

@@ -0,0 +1 @@
+!function(a){a.fn.datepicker.dates.da={days:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],daysShort:["søn","man","tir","ons","tor","fre","lør"],daysMin:["sø","ma","ti","on","to","fr","lø"],months:["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],monthsShort:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],today:"I Dag",clear:"Nulstil"}}(jQuery);

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js


+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js

@@ -0,0 +1 @@
+!function(a){a.fn.datepicker.dates.eu={days:["Igandea","Astelehena","Asteartea","Asteazkena","Osteguna","Ostirala","Larunbata"],daysShort:["Ig","Al","Ar","Az","Og","Ol","Lr"],daysMin:["Ig","Al","Ar","Az","Og","Ol","Lr"],months:["Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua"],monthsShort:["Urt","Ots","Mar","Api","Mai","Eka","Uzt","Abu","Ira","Urr","Aza","Abe"],today:"Gaur"}}(jQuery);

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js


+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js

@@ -0,0 +1 @@
+!function(a){a.fn.datepicker.dates.fo={days:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leygardagur"],daysShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],daysMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],months:["Januar","Februar","Marts","Apríl","Mei","Juni","Juli","August","Septembur","Oktobur","Novembur","Desembur"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"Í Dag",clear:"Reinsa"}}(jQuery);

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js


+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js

@@ -0,0 +1 @@
+!function(a){a.fn.datepicker.dates.gl={days:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],daysShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],daysMin:["Do","Lu","Ma","Me","Xo","Ve","Sa"],months:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthsShort:["Xan","Feb","Mar","Abr","Mai","Xun","Xul","Ago","Sep","Out","Nov","Dec"],today:"Hoxe",clear:"Limpar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery);

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js


+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js

@@ -0,0 +1 @@
+!function(a){a.fn.datepicker.dates.hr={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],months:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthsShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],today:"Danas"}}(jQuery);

File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js


File diff suppressed because it is too large
+ 1 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js


+ 0 - 0
public/datetimepicker/js/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js


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