diff --git a/assets/ScheduleAsset.php b/assets/ScheduleAsset.php new file mode 100644 index 00000000..71fd9699 --- /dev/null +++ b/assets/ScheduleAsset.php @@ -0,0 +1,23 @@ + false, - "TCTECH" => false + "TCTECH" => true ]; diff --git a/controllers/ScheduleController.php b/controllers/ScheduleController.php new file mode 100644 index 00000000..20017af3 --- /dev/null +++ b/controllers/ScheduleController.php @@ -0,0 +1,157 @@ +user->isGuest) + return $this->redirect(['/site/login']); + } + + /** + * {@inheritdoc} + */ + public function behaviors() { + return [ + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + public function actionIndex() { + $this->view->title = 'Lịch trình'; + $searchModel = new ScheduleSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + public function actionCreate() { + $model = new Schedule(); + Yii::$app->response->format = "json"; + if (Yii::$app->request->post()) { + $post = Yii::$app->request->post(); + $data = [ + "Name" => $post["Name"], + "Description" => $post["Description"], + "SunTime1" => Schedule::combineTime($post["FromSun1"], $post["ToSun1"]), + "SunTime2" => Schedule::combineTime($post["FromSun2"], $post["ToSun2"]), + "SunTime3" => Schedule::combineTime($post["FromSun3"], $post["ToSun3"]), + "MonTime1" => Schedule::combineTime($post["FromMon1"], $post["ToMon1"]), + "MonTime2" => Schedule::combineTime($post["FromMon2"], $post["ToMon2"]), + "MonTime3" => Schedule::combineTime($post["FromMon3"], $post["ToMon3"]), + "TueTime1" => Schedule::combineTime($post["FromTue1"], $post["ToTue1"]), + "TueTime2" => Schedule::combineTime($post["FromTue2"], $post["ToTue2"]), + "TueTime3" => Schedule::combineTime($post["FromTue3"], $post["ToTue3"]), + "WedTime1" => Schedule::combineTime($post["FromWed1"], $post["ToWed1"]), + "WedTime2" => Schedule::combineTime($post["FromWed2"], $post["ToWed2"]), + "WedTime3" => Schedule::combineTime($post["FromWed3"], $post["ToWed3"]), + "ThuTime1" => Schedule::combineTime($post["FromThu1"], $post["ToThu1"]), + "ThuTime2" => Schedule::combineTime($post["FromThu2"], $post["ToThu2"]), + "ThuTime3" => Schedule::combineTime($post["FromThu3"], $post["ToThu3"]), + "FriTime1" => Schedule::combineTime($post["FromFri1"], $post["ToFri1"]), + "FriTime2" => Schedule::combineTime($post["FromFri2"], $post["ToFri2"]), + "FriTime3" => Schedule::combineTime($post["FromFri3"], $post["ToFri3"]), + "SatTime1" => Schedule::combineTime($post["FromSat1"], $post["ToSat1"]), + "SatTime2" => Schedule::combineTime($post["FromSat2"], $post["ToSat2"]), + "SatTime3" => Schedule::combineTime($post["FromSat3"], $post["ToSat3"]) + ]; + if ($model->create($data)) { + return ["status" => true]; + } else + return ["status" => false, "type" => "error"]; + } else { + return [ + "title" => Html::tag("i", "", ["class" => "fa fa-plus-square"]) . " Thêm", + "form" => $this->renderPartial("form", [ + "model" => $model, + "url" => Url::to(["create"]), + "dayOfWeek" => Schedule::$dayOfWeek + ]) + ]; + } + } + + public function actionUpdate($id) { + $model = $this->findModel($id); + Yii::$app->response->format = "json"; + if (Yii::$app->request->post()) { + $post = Yii::$app->request->post(); + $model->name = $post["Name"]; + $model->description = $post["Description"]; + $model->SunTime1 = Schedule::combineTime($post["FromSun1"], $post["ToSun1"]); + $model->SunTime2 = Schedule::combineTime($post["FromSun2"], $post["ToSun2"]); + $model->SunTime3 = Schedule::combineTime($post["FromSun3"], $post["ToSun3"]); + $model->MonTime1 = Schedule::combineTime($post["FromMon1"], $post["ToMon1"]); + $model->MonTime2 = Schedule::combineTime($post["FromMon2"], $post["ToMon2"]); + $model->MonTime3 = Schedule::combineTime($post["FromMon3"], $post["ToMon3"]); + $model->TueTime1 = Schedule::combineTime($post["FromTue1"], $post["ToTue1"]); + $model->TueTime2 = Schedule::combineTime($post["FromTue2"], $post["ToTue2"]); + $model->TueTime3 = Schedule::combineTime($post["FromTue3"], $post["ToTue3"]); + $model->WedTime1 = Schedule::combineTime($post["FromWed1"], $post["ToWed1"]); + $model->WedTime2 = Schedule::combineTime($post["FromWed2"], $post["ToWed2"]); + $model->WedTime3 = Schedule::combineTime($post["FromWed3"], $post["ToWed3"]); + $model->ThuTime1 = Schedule::combineTime($post["FromThu1"], $post["ToThu1"]); + $model->ThuTime2 = Schedule::combineTime($post["FromThu2"], $post["ToThu2"]); + $model->ThuTime3 = Schedule::combineTime($post["FromThu3"], $post["ToThu3"]); + $model->FriTime1 = Schedule::combineTime($post["FromFri1"], $post["ToFri1"]); + $model->FriTime2 = Schedule::combineTime($post["FromFri2"], $post["ToFri2"]); + $model->FriTime3 = Schedule::combineTime($post["FromFri3"], $post["ToFri3"]); + $model->SatTime1 = Schedule::combineTime($post["FromSat1"], $post["ToSat1"]); + $model->SatTime2 = Schedule::combineTime($post["FromSat2"], $post["ToSat2"]); + $model->SatTime3 = Schedule::combineTime($post["FromSat3"], $post["ToSat3"]); + $model->modified_at = time(); + if ($model->save()) { + return ["status" => true]; + } else + return ["status" => false, "type" => "error"]; + } else { + return [ + "title" => Html::tag("i", "", ["class" => "fa fa-edit"]) . " Tùy chỉnh", + "form" => $this->renderPartial("form", [ + "model" => $model, + "url" => Url::to(["update", "id" => $id]), + "dayOfWeek" => Schedule::$dayOfWeek + ]) + ]; + } + } + + public function actionDelete() { + if (Yii::$app->request->post()) { + $lists = Yii::$app->request->post("lists"); + Schedule::deleteAll(["IN", "id", $lists]); + \app\models\Staff::updateAll(["schedule_id" => 0, ["IN", "id", $lists]]); + } + } + + protected function findModel($id) { + if (($model = Schedule::findOne($id)) !== null) { + return $model; + } + + throw new NotFoundHttpException('The requested page does not exist.'); + } + +} diff --git a/models/Schedule.php b/models/Schedule.php new file mode 100644 index 00000000..ce0731ae --- /dev/null +++ b/models/Schedule.php @@ -0,0 +1,153 @@ + 200], + [['created_at', 'modified_at'], 'integer'], + [['SunTime1', 'SunTime2', 'SunTime3', 'MonTime1', 'MonTime2', 'MonTime3', 'TueTime1', 'TueTime2', 'TueTime3', 'WedTime1', 'WedTime2', 'WedTime3', 'ThuTime1', 'ThuTime2', 'ThuTime3', 'FriTime1', 'FriTime2', 'FriTime3', 'SatTime1', 'SatTime2', 'SatTime3'], 'string', 'max' => 100], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() { + return [ + 'id' => 'ID', + 'name' => 'Tên lịch trình', + 'description' => 'Chú thích', + 'SunTime1' => 'Sun Time1', + 'SunTime2' => 'Sun Time2', + 'SunTime3' => 'Sun Time3', + 'MonTime1' => 'Mon Time1', + 'MonTime2' => 'Mon Time2', + 'MonTime3' => 'Mon Time3', + 'TueTime1' => 'Tue Time1', + 'TueTime2' => 'Tue Time2', + 'TueTime3' => 'Tue Time3', + 'WedTime1' => 'Wed Time1', + 'WedTime2' => 'Wed Time2', + 'WedTime3' => 'Wed Time3', + 'ThuTime1' => 'Thu Time1', + 'ThuTime2' => 'Thu Time2', + 'ThuTime3' => 'Thu Time3', + 'FriTime1' => 'Fri Time1', + 'FriTime2' => 'Fri Time2', + 'FriTime3' => 'Fri Time3', + 'SatTime1' => 'Sat Time1', + 'SatTime2' => 'Sat Time2', + 'SatTime3' => 'Sat Time3', + 'created_at' => 'Thời gian tạo', + 'modified_at' => 'Thời gian sửa', + ]; + } + + public static $dayOfWeek = [ + "Mon" => "Thứ hai", + "Tue" => "Thứ ba", + "Wed" => "Thứ tư", + "Thu" => "Thứ năm", + "Fri" => "Thứ sáu", + "Sat" => "Thứ bảy", + "Sun" => "Chủ nhật" + ]; + + public function create($data) { + $r = $this->load([ + 'name' => $data["Name"], + 'description' => $data["Description"], + 'SunTime1' => $data["SunTime1"], + 'SunTime2' => $data["SunTime2"], + 'SunTime3' => $data["SunTime3"], + 'MonTime1' => $data["MonTime1"], + 'MonTime2' => $data["MonTime2"], + 'MonTime3' => $data["MonTime3"], + 'TueTime1' => $data["TueTime1"], + 'TueTime2' => $data["TueTime2"], + 'TueTime3' => $data["TueTime3"], + 'WedTime1' => $data["WedTime1"], + 'WedTime2' => $data["WedTime2"], + 'WedTime3' => $data["WedTime3"], + 'ThuTime1' => $data["ThuTime1"], + 'ThuTime2' => $data["ThuTime2"], + 'ThuTime3' => $data["ThuTime3"], + 'FriTime1' => $data["FriTime1"], + 'FriTime2' => $data["FriTime2"], + 'FriTime3' => $data["FriTime3"], + 'SatTime1' => $data["SatTime1"], + 'SatTime2' => $data["SatTime2"], + 'SatTime3' => $data["SatTime3"], + "created_at" => time(), + "modified_at" => time() + ], ''); + if ($r) { + try { + $this->save(); + return $this->id; + } catch (\Exception $ex) { + return false; + } + } + } + + public static function combineTime($from, $to) { + return $from . "-" . $to; + } + + public static function convertTime($from, $to) { + $fTemp = explode(":", $from); + $front = dechex(intval($fTemp[0]) * 100 + intval($fTemp[1])); + $tTemp = explode(":", $to); + $back = dechex(intval($tTemp[0]) * 100 + intval($tTemp[1])); + return hexdec("0" . $front . "0" . $back); + } + +} diff --git a/models/ScheduleSearch.php b/models/ScheduleSearch.php new file mode 100644 index 00000000..f392114f --- /dev/null +++ b/models/ScheduleSearch.php @@ -0,0 +1,91 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'SunTime1' => $this->SunTime1, + 'SunTime2' => $this->SunTime2, + 'SunTime3' => $this->SunTime3, + 'MonTime1' => $this->MonTime1, + 'MonTime2' => $this->MonTime2, + 'MonTime3' => $this->MonTime3, + 'TueTime1' => $this->TueTime1, + 'TueTime2' => $this->TueTime2, + 'TueTime3' => $this->TueTime3, + 'WedTime1' => $this->WedTime1, + 'WedTime2' => $this->WedTime2, + 'WedTime3' => $this->WedTime3, + 'ThuTime1' => $this->ThuTime1, + 'ThuTime2' => $this->ThuTime2, + 'ThuTime3' => $this->ThuTime3, + 'FriTime1' => $this->FriTime1, + 'FriTime2' => $this->FriTime2, + 'FriTime3' => $this->FriTime3, + 'SatTime1' => $this->SatTime1, + 'SatTime2' => $this->SatTime2, + 'SatTime3' => $this->SatTime3, + 'created_at' => $this->created_at, + 'modified_at' => $this->modified_at, + ]); + + $query->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'description', $this->description]); + + return $dataProvider; + } + +} diff --git a/models/Staff.php b/models/Staff.php index 2bd7ce6a..b5923604 100644 --- a/models/Staff.php +++ b/models/Staff.php @@ -21,6 +21,7 @@ use Yii; * @property int $created_at * @property int $modified_at * @property int $card_register_time + * @property int $schedule_id */ class Staff extends \yii\db\ActiveRecord { @@ -37,7 +38,7 @@ class Staff extends \yii\db\ActiveRecord { public function rules() { return [ [['code', 'name', 'gender'], 'required'], - [['code', 'card_number', 'department_id', 'birthday', 'date_in', 'created_at', 'modified_at', 'card_register_time'], 'integer'], + [['code', 'card_number', 'department_id', 'birthday', 'date_in', 'created_at', 'modified_at', 'card_register_time', 'schedule_id'], 'integer'], [['address'], 'string'], [['name', 'email'], 'string', 'max' => 100], [['gender'], 'string', 'max' => 10], diff --git a/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/header.php b/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/header.php index 8dc362b7..6f2c1e5d 100644 --- a/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/header.php +++ b/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/header.php @@ -30,8 +30,8 @@ use yii\widgets\ActiveForm; Thiết bị -
  • - +
  • "> + Kiểm soát truy cập
  • diff --git a/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/left.php b/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/left.php index 0a9e6c3e..1a4ec5ee 100644 --- a/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/left.php +++ b/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/left.php @@ -27,6 +27,12 @@ ['label' => 'Tìm kiếm thiết bị', 'url' => ['/device/search'], 'icon' => 'search'] ]; } + if (in_array($this->context->id, ['schedule'])) { + $items = [ + ['label' => 'Lịch trình', 'url' => ['/schedule'], 'icon' => 'calendar'], + ['label' => 'Cấp quyền truy cập', 'url' => ['/device'], 'icon' => 'cogs'] + ]; + } ?> 'status', 'format' => 'raw', @@ -63,13 +66,7 @@ 'contentOptions' => ['class' => 'text-center'], 'value' => \app\helpers\DeviceGrid::status($statusArray) ], - [ - 'attribute' => 'type', - 'format' => 'raw', - 'filter' => $typeArray, - 'contentOptions' => ['class' => 'text-center'], - 'value' => \app\helpers\DeviceGrid::type($typeArray) - ], + 'type', [ 'attribute' => 'area_id', 'format' => 'raw', @@ -77,14 +74,7 @@ 'contentOptions' => ['class' => 'text-center'], 'value' => \app\helpers\DeviceGrid::area($areaArray) ], - [ - 'attribute' => 'created_at', - 'value' => \app\helpers\CommonGrid::createdAt() - ], - [ - 'attribute' => 'modified_at', - 'value' => \app\helpers\CommonGrid::modifiedAt() - ] + 'version' ] ])} {/Pjax} diff --git a/views/schedule/form.tpl b/views/schedule/form.tpl new file mode 100644 index 00000000..85264bfa --- /dev/null +++ b/views/schedule/form.tpl @@ -0,0 +1,125 @@ + + +
    +
    +
    +
    +
    Tên lịch trình *
    + +
    + +
    +
    +
    +
    +
    +
    Chú thích
    + +
    +
    +
    +
    + + + + + + + + + + + + {foreach from=$dayOfWeek item=day key=k} + + + + + + + + {/foreach} + +
    NgàyKhung giờ 1Khung giờ 2Khung giờ 3
    {$day} +
    + {if $model[$k|cat:"Time1"]} + {$time=explode("-",$model[$k|cat:"Time1"])} + {if $time[0]!=="00:00" || $time[1]!=="00:00"} + {$time[0]} - {$time[1]} + {else} + + {/if} + {else} + + {/if} +
    + +
    +
    + {if $model[$k|cat:"Time2"]} + {$time=explode("-",$model[$k|cat:"Time2"])} + {if $time[0]!=="00:00" || $time[1]!=="00:00"} + {$time[0]} - {$time[1]} + {else} + + {/if} + {else} + + {/if} +
    + +
    +
    + {if $model[$k|cat:"Time3"]} + {$time=explode("-",$model[$k|cat:"Time3"])} + {if $time[0]!=="00:00" || $time[1]!=="00:00"} + {$time[0]} - {$time[1]} + {else} + + {/if} + {else} + + {/if} +
    + +
    +
    + + +
    +
    +
    + + +
    \ No newline at end of file diff --git a/views/schedule/index.tpl b/views/schedule/index.tpl new file mode 100644 index 00000000..edb7e556 --- /dev/null +++ b/views/schedule/index.tpl @@ -0,0 +1,57 @@ +{extends file=$smarty.current_dir|cat:'/../extends.tpl'} +{use class="yii\helpers\Url"} +{use class="yii\grid\GridView"} +{use class="yii\widgets\Pjax" type="block"} +{use class="app\assets\ScheduleAsset"} +{ScheduleAsset::register($this)|void} +{block name='content'} +
    +
    + + + +
    + {Pjax id="schedule-list"} + {GridView::widget([ + 'dataProvider' => $dataProvider, + 'filterModel' => $searchModel, + 'layout'=> \app\helpers\CommonGrid::getLayout(), + 'tableOptions' => [ + 'class' => 'table table-striped table-bordered table-hover', + 'style' => 'background:#fff;min-width:700px;' + ], + 'rowOptions' => \app\helpers\CommonGrid::rows("schedule", true), + 'columns' => [ + [ + 'class' => 'yii\grid\SerialColumn', + 'contentOptions' => ['class' => 'text-center'], + 'headerOptions' => ['class' => 'text-center', 'style' => 'width:3%'] + ], + [ + 'header' => "", + 'format' => 'raw', + 'contentOptions' => ['class' => 'text-center'], + 'headerOptions' => ['class' => 'text-center', 'style' => 'width:3%'], + 'value' => \app\helpers\CommonGrid::checkbox("schedule") + ], + 'name', + 'description', + [ + 'attribute' => 'created_at', + 'value' => \app\helpers\CommonGrid::createdAt() + ], + [ + 'attribute' => 'modified_at', + 'value' => \app\helpers\CommonGrid::modifiedAt() + ] + ] + ])} + {/Pjax} +
    +{/block} \ No newline at end of file diff --git a/web/js/common.js b/web/js/common.js index 38bdaf3a..30139809 100644 --- a/web/js/common.js +++ b/web/js/common.js @@ -245,6 +245,9 @@ common.form = function (e, obj, bigSize) { if (obj === 'device') { $('#Area').select2(); } + if (obj === 'schedule') { + common.dateTimePickerByClass("select-picker", "HH:mm"); + } }, error: function (jqXHR, textStatus, errorThrown) { common.modalBlock(false); diff --git a/web/js/schedule.js b/web/js/schedule.js new file mode 100644 index 00000000..46c42db5 --- /dev/null +++ b/web/js/schedule.js @@ -0,0 +1,237 @@ +$(function () { + common.checkboxInit("schedule"); +}); + +function _create(e) { + common.modalBlock(true); + $.ajax({ + url: $(e).attr('data-href'), + type: 'POST', + success: function (data) { + common.modalBlock(false); + common.modalOpen(data.form, true, data.title); + common.dateTimePickerByClass("select-picker", "HH:mm"); + }, + error: function (jqXHR, textStatus, errorThrown) { + common.modalBlock(false); + common.ajaxError(); + } + }); +} + +function openFormTimePicker(e) { + if (saveCurrentPos()) { + var id = $(e).attr("data-id"); + $("#data-" + id).addClass("hidden"); + $("#form-" + id).removeClass("hidden"); + $("input[name='CurrentPos']").val(id); + } +} + +function _copy(e) { + if (saveCurrentPos()) { + var fromDay = $(e).attr("data-from"); + var targetDay = $(e).attr("data-target"); + + var fDay1 = $("input[name='From" + fromDay + "1']").val(); + var tDay1 = $("input[name='To" + fromDay + "1']").val(); + if (fDay1 !== "00:00" || tDay1 !== "00:00") { + var html = `` + fDay1 + ` - ` + tDay1 + ``; + $("#data-" + targetDay + "1").html(html); + $("input[name='From" + targetDay + "1']").val(fDay1); + $("input[name='To" + targetDay + "1']").val(tDay1); + } + + var fDay2 = $("input[name='From" + fromDay + "2']").val(); + var tDay2 = $("input[name='To" + fromDay + "2']").val(); + if (fDay2 !== "00:00" || tDay2 !== "00:00") { + var html = `` + fDay2 + ` - ` + tDay2 + ``; + $("#data-" + targetDay + "2").html(html); + $("input[name='From" + targetDay + "2']").val(fDay2); + $("input[name='To" + targetDay + "2']").val(tDay2); + } + + var fDay3 = $("input[name='From" + fromDay + "3']").val(); + var tDay3 = $("input[name='To" + fromDay + "3']").val(); + if (fDay3 !== "00:00" || tDay3 !== "00:00") { + var html = `` + fDay3 + ` - ` + tDay3 + ``; + $("#data-" + targetDay + "3").html(html); + $("input[name='From" + targetDay + "3']").val(fDay3); + $("input[name='To" + targetDay + "3']").val(tDay3); + } + } +} + +function saveCurrentPos() { + var currentID = $("input[name='CurrentPos']").val(); + if (currentID !== "") { + var f = $("input[name='From" + currentID + "']").val(); + var t = $("input[name='To" + currentID + "']").val(); + if (convertTime(f) > convertTime(t)) { + alert("Mốc thời gian lựa chọn chưa đúng!"); + return false; + } + if (f !== "00:00" || t !== "00:00") { + var html = `` + f + ` - ` + t + ``; + $("#data-" + currentID).html(html); + } else if (f === "00:00" && t === "00:00") { + var html = ``; + $("#data-" + currentID).html(html); + } + } + $(".time-picker-data").removeClass("hidden"); + $(".time-picker-form").addClass("hidden"); + return true; +} + +function convertTime(time) { + var split = time.split(":"); + return parseInt(split[0]) * 60 + parseInt(split[1]); +} + +function validate() { + var error = 0; + var Name = $("input[name='Name']").val(); + if (Name === "") { + common.error("name", "Tên lịch trình không được để trống"); + error++; + } else { + common.success("name"); + } + return error == 0 ? true : false; +} + +function save(e) { + if (validate() && saveCurrentPos()) { + common.modalBlock(true); + $.ajax({ + url: $(e).attr('data-href'), + type: 'POST', + data: { + Name: $("input[name='Name']").val(), + Description: $("input[name='Description']").val(), + FromMon1: $("input[name='FromMon1']").val(), + ToMon1: $("input[name='ToMon1']").val(), + FromMon2: $("input[name='FromMon2']").val(), + ToMon2: $("input[name='ToMon2']").val(), + FromMon3: $("input[name='FromMon3']").val(), + ToMon3: $("input[name='ToMon3']").val(), + FromTue1: $("input[name='FromTue1']").val(), + ToTue1: $("input[name='ToTue1']").val(), + FromTue2: $("input[name='FromTue2']").val(), + ToTue2: $("input[name='ToTue2']").val(), + FromTue3: $("input[name='FromTue3']").val(), + ToTue3: $("input[name='ToTue3']").val(), + FromWed1: $("input[name='FromWed1']").val(), + ToWed1: $("input[name='ToWed1']").val(), + FromWed2: $("input[name='FromWed2']").val(), + ToWed2: $("input[name='ToWed2']").val(), + FromWed3: $("input[name='FromWed3']").val(), + ToWed3: $("input[name='ToWed3']").val(), + FromThu1: $("input[name='FromThu1']").val(), + ToThu1: $("input[name='ToThu1']").val(), + FromThu2: $("input[name='FromThu2']").val(), + ToThu2: $("input[name='ToThu2']").val(), + FromThu3: $("input[name='FromThu3']").val(), + ToThu3: $("input[name='ToThu3']").val(), + FromFri1: $("input[name='FromFri1']").val(), + ToFri1: $("input[name='ToFri1']").val(), + FromFri2: $("input[name='FromFri2']").val(), + ToFri2: $("input[name='ToFri2']").val(), + FromFri3: $("input[name='FromFri3']").val(), + ToFri3: $("input[name='ToFri3']").val(), + FromSat1: $("input[name='FromSat1']").val(), + ToSat1: $("input[name='ToSat1']").val(), + FromSat2: $("input[name='FromSat2']").val(), + ToSat2: $("input[name='ToSat2']").val(), + FromSat3: $("input[name='FromSat3']").val(), + ToSat3: $("input[name='ToSat3']").val(), + FromSun1: $("input[name='FromSun1']").val(), + ToSun1: $("input[name='ToSun1']").val(), + FromSun2: $("input[name='FromSun2']").val(), + ToSun2: $("input[name='ToSun2']").val(), + FromSun3: $("input[name='FromSun3']").val(), + ToSun3: $("input[name='ToSun3']").val() + }, + success: function (data) { + common.modalBlock(false); + if (data.status) { + notification.success("Đã lưu thông tin", 1000); + $.pjax.reload({container: '#schedule-list'}); + $("#schedule-list").on('pjax:success', function () { + common.checkboxInit("schedule"); + }); + $("#myModal").modal("hide"); + } else { + notification.danger("Có lỗi xảy ra, không lưu được dữ liệu!", 1000); + } + }, + error: function (jqXHR, textStatus, errorThrown) { + common.modalBlock(false); + common.ajaxError(); + } + }); + } +} + +function _form(e) { + var lists = []; + $.each($("input[name='checkbox-schedule']:checked"), function () { + lists.push($(this).val()); + }); + if (lists.length == 0) { + alert("Vui lòng lựa chọn đối tượng để thay đổi!"); + return; + } + if (lists.length > 1) { + alert("Tác vụ này không thể lựa chọn nhiều hơn một đối tượng!"); + return; + } + common.modalBlock(true); + $.ajax({ + url: $(e).attr('data-href') + "?id=" + lists[0], + type: 'POST', + success: function (data) { + common.modalBlock(false); + common.modalOpen(data.form, true, data.title); + common.dateTimePickerByClass("select-picker", "HH:mm"); + }, + error: function (jqXHR, textStatus, errorThrown) { + common.modalBlock(false); + common.ajaxError(); + } + }); +} + +function _delete(e) { + var lists = []; + $.each($("input[name='checkbox-schedule']:checked"), function () { + lists.push($(this).val()); + }); + if (lists.length == 0) { + alert("Vui lòng lựa chọn đối tượng để xóa!"); + return; + } + if (confirm("Bạn có chắc chắn muốn xóa các đối tượng đã lựa chọn không?")) { + common.modalBlock(true); + $.ajax({ + url: $(e).attr('data-href'), + type: 'POST', + data: { + lists: lists + }, + success: function (data) { + common.modalBlock(false); + notification.danger("Đã xóa dữ liệu", 1000); + $.pjax.reload({container: '#schedule-list'}); + $("#schedule-list").on('pjax:success', function () { + common.checkboxInit("schedule"); + }); + }, + error: function (jqXHR, textStatus, errorThrown) { + common.modalBlock(false); + common.ajaxError(); + } + }); + } +} \ No newline at end of file diff --git a/web/slider/bootstrap-slider.min.css b/web/slider/bootstrap-slider.min.css new file mode 100644 index 00000000..578d3606 --- /dev/null +++ b/web/slider/bootstrap-slider.min.css @@ -0,0 +1,41 @@ +/*! ======================================================= + VERSION 10.6.2 +========================================================= */ +/*! ========================================================= + * bootstrap-slider.js + * + * Maintainers: + * Kyle Kemp + * - Twitter: @seiyria + * - Github: seiyria + * Rohit Kalkur + * - Twitter: @Rovolutionary + * - Github: rovolution + * + * ========================================================= + * + * bootstrap-slider is released under the MIT License + * Copyright (c) 2019 Kyle Kemp, Rohit Kalkur, and contributors + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * ========================================================= */.slider{display:inline-block;vertical-align:middle;position:relative}.slider.slider-horizontal{width:210px;height:20px}.slider.slider-horizontal .slider-track{height:10px;width:100%;margin-top:-5px;top:50%;left:0}.slider.slider-horizontal .slider-selection,.slider.slider-horizontal .slider-track-low,.slider.slider-horizontal .slider-track-high{height:100%;top:0;bottom:0}.slider.slider-horizontal .slider-tick,.slider.slider-horizontal .slider-handle{margin-left:-10px}.slider.slider-horizontal .slider-tick.triangle,.slider.slider-horizontal .slider-handle.triangle{position:relative;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);border-width:0 10px 10px 10px;width:0;height:0;border-bottom-color:#2e6da4;margin-top:0}.slider.slider-horizontal .slider-tick-container{white-space:nowrap;position:absolute;top:0;left:0;width:100%}.slider.slider-horizontal .slider-tick-label-container{white-space:nowrap;margin-top:20px}.slider.slider-horizontal .slider-tick-label-container .slider-tick-label{padding-top:4px;display:inline-block;text-align:center}.slider.slider-horizontal .tooltip{-ms-transform:translateX(-50%);transform:translateX(-50%)}.slider.slider-horizontal.slider-rtl .slider-track{left:initial;right:0}.slider.slider-horizontal.slider-rtl .slider-tick,.slider.slider-horizontal.slider-rtl .slider-handle{margin-left:initial;margin-right:-10px}.slider.slider-horizontal.slider-rtl .slider-tick-container{left:initial;right:0}.slider.slider-horizontal.slider-rtl .tooltip{-ms-transform:translateX(50%);transform:translateX(50%)}.slider.slider-vertical{height:210px;width:20px}.slider.slider-vertical .slider-track{width:10px;height:100%;left:25%;top:0}.slider.slider-vertical .slider-selection{width:100%;left:0;top:0;bottom:0}.slider.slider-vertical .slider-track-low,.slider.slider-vertical .slider-track-high{width:100%;left:0;right:0}.slider.slider-vertical .slider-tick,.slider.slider-vertical .slider-handle{margin-top:-10px}.slider.slider-vertical .slider-tick.triangle,.slider.slider-vertical .slider-handle.triangle{border-width:10px 0 10px 10px;width:1px;height:1px;border-left-color:#2e6da4;border-right-color:#2e6da4;margin-left:0;margin-right:0}.slider.slider-vertical .slider-tick-label-container{white-space:nowrap}.slider.slider-vertical .slider-tick-label-container .slider-tick-label{padding-left:4px}.slider.slider-vertical .tooltip{-ms-transform:translateY(-50%);transform:translateY(-50%)}.slider.slider-vertical.slider-rtl .slider-track{left:initial;right:25%}.slider.slider-vertical.slider-rtl .slider-selection{left:initial;right:0}.slider.slider-vertical.slider-rtl .slider-tick.triangle,.slider.slider-vertical.slider-rtl .slider-handle.triangle{border-width:10px 10px 10px 0}.slider.slider-vertical.slider-rtl .slider-tick-label-container .slider-tick-label{padding-left:initial;padding-right:4px}.slider.slider-disabled .slider-handle{background-image:-webkit-linear-gradient(top,#dfdfdf 0,#bebebe 100%);background-image:-o-linear-gradient(top,#dfdfdf 0,#bebebe 100%);background-image:linear-gradient(to bottom,#dfdfdf 0,#bebebe 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdfdfdf',endColorstr='#ffbebebe',GradientType=0);background-repeat:repeat-x}.slider.slider-disabled .slider-track{background-image:-webkit-linear-gradient(top,#e5e5e5 0,#e9e9e9 100%);background-image:-o-linear-gradient(top,#e5e5e5 0,#e9e9e9 100%);background-image:linear-gradient(to bottom,#e5e5e5 0,#e9e9e9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe5e5e5',endColorstr='#ffe9e9e9',GradientType=0);background-repeat:repeat-x;cursor:not-allowed}.slider input{display:none}.slider .tooltip{pointer-events:none}.slider .tooltip.top{margin-top:-36px}.slider .tooltip-inner{white-space:nowrap;max-width:none}.slider .hide{display:none}.slider-track{position:absolute;cursor:pointer;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#f9f9f9 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#f9f9f9 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);border-radius:4px}.slider-selection{position:absolute;background-image:-webkit-linear-gradient(top,#f9f9f9 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#f9f9f9 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#f9f9f9 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9',endColorstr='#fff5f5f5',GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.slider-selection.tick-slider-selection{background-image:-webkit-linear-gradient(top,#8ac1ef 0,#82b3de 100%);background-image:-o-linear-gradient(top,#8ac1ef 0,#82b3de 100%);background-image:linear-gradient(to bottom,#8ac1ef 0,#82b3de 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8ac1ef',endColorstr='#ff82b3de',GradientType=0);background-repeat:repeat-x}.slider-track-low,.slider-track-high{position:absolute;background:transparent;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.slider-handle{position:absolute;top:0;width:20px;height:20px;background-color:#337ab7;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',endColorstr='#ff2e6da4',GradientType=0);background-repeat:repeat-x;filter:none;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);border:0 solid transparent}.slider-handle:hover{cursor:pointer}.slider-handle.round{border-radius:50%}.slider-handle.triangle{background:transparent none}.slider-handle.custom{background:transparent none}.slider-handle.custom::before{line-height:20px;font-size:20px;content:'\2605';color:#726204}.slider-tick{position:absolute;cursor:pointer;width:20px;height:20px;background-image:-webkit-linear-gradient(top,#f9f9f9 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#f9f9f9 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#f9f9f9 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9',endColorstr='#fff5f5f5',GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;filter:none;opacity:.8;border:0 solid transparent}.slider-tick.round{border-radius:50%}.slider-tick.triangle{background:transparent none}.slider-tick.custom{background:transparent none}.slider-tick.custom::before{line-height:20px;font-size:20px;content:'\2605';color:#726204}.slider-tick.in-selection{background-image:-webkit-linear-gradient(top,#8ac1ef 0,#82b3de 100%);background-image:-o-linear-gradient(top,#8ac1ef 0,#82b3de 100%);background-image:linear-gradient(to bottom,#8ac1ef 0,#82b3de 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8ac1ef',endColorstr='#ff82b3de',GradientType=0);background-repeat:repeat-x;opacity:1} \ No newline at end of file diff --git a/web/slider/bootstrap-slider.min.js b/web/slider/bootstrap-slider.min.js new file mode 100644 index 00000000..90e52004 --- /dev/null +++ b/web/slider/bootstrap-slider.min.js @@ -0,0 +1,5 @@ +/*! ======================================================= + VERSION 10.6.2 +========================================================= */ +"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},windowIsDefined="object"===("undefined"==typeof window?"undefined":_typeof(window));!function(a){if("function"==typeof define&&define.amd)define(["jquery"],a);else if("object"===("undefined"==typeof module?"undefined":_typeof(module))&&module.exports){var b;try{b=require("jquery")}catch(c){b=null}module.exports=a(b)}else window&&(window.Slider=a(window.jQuery))}(function(a){var b="slider",c="bootstrapSlider";windowIsDefined&&!window.console&&(window.console={}),windowIsDefined&&!window.console.log&&(window.console.log=function(){}),windowIsDefined&&!window.console.warn&&(window.console.warn=function(){});var d;return function(a){function b(){}function c(a){function c(b){b.prototype.option||(b.prototype.option=function(b){a.isPlainObject(b)&&(this.options=a.extend(!0,this.options,b))})}function e(b,c){a.fn[b]=function(e){if("string"==typeof e){for(var g=d.call(arguments,1),h=0,i=this.length;i>h;h++){var j=this[h],k=a.data(j,b);if(k)if(a.isFunction(k[e])&&"_"!==e.charAt(0)){var l=k[e].apply(k,g);if(void 0!==l&&l!==k)return l}else f("no such method '"+e+"' for "+b+" instance");else f("cannot call methods on "+b+" prior to initialization; attempted to call '"+e+"'")}return this}var m=this.map(function(){var d=a.data(this,b);return d?(d.option(e),d._init()):(d=new c(this,e),a.data(this,b,d)),a(this)});return 1===m.length?m[0]:m}}if(a){var f="undefined"==typeof console?b:function(a){console.error(a)};return a.bridget=function(a,b){c(b),e(a,b)},a.bridget}}var d=Array.prototype.slice;c(a)}(a),function(a){function e(b,c){function d(a,b){var c="data-slider-"+b.replace(/_/g,"-"),d=a.getAttribute(c);try{return JSON.parse(d)}catch(e){return d}}this._state={value:null,enabled:null,offset:null,size:null,percentage:null,inDrag:!1,over:!1,tickIndex:null},this.ticksCallbackMap={},this.handleCallbackMap={},"string"==typeof b?this.element=document.querySelector(b):b instanceof HTMLElement&&(this.element=b),c=c?c:{};for(var e=Object.keys(this.defaultOptions),f=c.hasOwnProperty("min"),g=c.hasOwnProperty("max"),i=0;i0,this.ticksAreValid||(this.options.lock_to_ticks=!1),"auto"===this.options.rtl){var l=window.getComputedStyle(this.element);null!=l?this.options.rtl="rtl"===l.direction:this.options.rtl="rtl"===this.element.style.direction}"vertical"!==this.options.orientation||"top"!==this.options.tooltip_position&&"bottom"!==this.options.tooltip_position?"horizontal"!==this.options.orientation||"left"!==this.options.tooltip_position&&"right"!==this.options.tooltip_position||(this.options.tooltip_position="top"):this.options.rtl?this.options.tooltip_position="left":this.options.tooltip_position="right";var m,n,o,p,q,r=this.element.style.width,s=!1,t=this.element.parentNode;if(this.sliderElem)s=!0;else{this.sliderElem=document.createElement("div"),this.sliderElem.className="slider";var u=document.createElement("div");u.className="slider-track",n=document.createElement("div"),n.className="slider-track-low",m=document.createElement("div"),m.className="slider-selection",o=document.createElement("div"),o.className="slider-track-high",p=document.createElement("div"),p.className="slider-handle min-slider-handle",p.setAttribute("role","slider"),p.setAttribute("aria-valuemin",this.options.min),p.setAttribute("aria-valuemax",this.options.max),q=document.createElement("div"),q.className="slider-handle max-slider-handle",q.setAttribute("role","slider"),q.setAttribute("aria-valuemin",this.options.min),q.setAttribute("aria-valuemax",this.options.max),u.appendChild(n),u.appendChild(m),u.appendChild(o),this.rangeHighlightElements=[];var v=this.options.rangeHighlights;if(Array.isArray(v)&&v.length>0)for(var w=0;w0){for(this.ticksContainer=document.createElement("div"),this.ticksContainer.className="slider-tick-container",i=0;i0)for(this.tickLabelContainer=document.createElement("div"),this.tickLabelContainer.className="slider-tick-label-container",i=0;i0&&(g||(this.options.max=Math.max.apply(Math,this.options.ticks)),f||(this.options.min=Math.min.apply(Math,this.options.ticks))),Array.isArray(this.options.value)?(this.options.range=!0,this._state.value=this.options.value):this.options.range?this._state.value=[this.options.value,this.options.max]:this._state.value=this.options.value,this.trackLow=n||this.trackLow,this.trackSelection=m||this.trackSelection,this.trackHigh=o||this.trackHigh,"none"===this.options.selection?(this._addClass(this.trackLow,"hide"),this._addClass(this.trackSelection,"hide"),this._addClass(this.trackHigh,"hide")):("after"===this.options.selection||"before"===this.options.selection)&&(this._removeClass(this.trackLow,"hide"),this._removeClass(this.trackSelection,"hide"),this._removeClass(this.trackHigh,"hide")),this.handle1=p||this.handle1,this.handle2=q||this.handle2,s===!0)for(this._removeClass(this.handle1,"round triangle"),this._removeClass(this.handle2,"round triangle hide"),i=0;ib.max?b.max:a},toValue:function(a){var b=a/100*(this.options.max-this.options.min),c=!0;if(this.options.ticks_positions.length>0){for(var d,e,f,g=0,i=1;i0){for(var b,c,d,e=0,f=0;f0?this.options.ticks[f-1]:0,d=f>0?this.options.ticks_positions[f-1]:0,c=this.options.ticks[f],e=this.options.ticks_positions[f];break}if(f>0){var g=(a-b)/(c-b);return d+g*(e-d)}}return 100*(a-this.options.min)/(this.options.max-this.options.min)}},logarithmic:{toValue:function(a){var b=1-this.options.min,c=Math.log(this.options.min+b),d=Math.log(this.options.max+b),e=Math.exp(c+(d-c)*a/100)-b;return Math.round(e)===d?d:(e=this.options.min+Math.round((e-this.options.min)/this.options.step)*this.options.step,h.linear.getValue(e,this.options))},toPercentage:function(a){if(this.options.max===this.options.min)return 0;var b=1-this.options.min,c=Math.log(this.options.max+b),d=Math.log(this.options.min+b),e=Math.log(a+b);return 100*(e-d)/(c-d)}}};d=function(a,b){return e.call(this,a,b),this},d.prototype={_init:function(){},constructor:d,defaultOptions:{id:"",min:0,max:10,step:1,precision:0,orientation:"horizontal",value:5,range:!1,selection:"before",tooltip:"show",tooltip_split:!1,lock_to_ticks:!1,handle:"round",reversed:!1,rtl:"auto",enabled:!0,formatter:function(a){return Array.isArray(a)?a[0]+" : "+a[1]:a},natural_arrow_keys:!1,ticks:[],ticks_positions:[],ticks_labels:[],ticks_snap_bounds:0,ticks_tooltip:!1,scale:"linear",focus:!1,tooltip_position:null,labelledby:null,rangeHighlights:[]},getElement:function(){return this.sliderElem},getValue:function(){return this.options.range?this._state.value:this._state.value[0]},setValue:function(a,b,c){a||(a=0);var d=this.getValue();this._state.value=this._validateInputValue(a);var e=this._applyPrecision.bind(this);this.options.range?(this._state.value[0]=e(this._state.value[0]),this._state.value[1]=e(this._state.value[1]),this.ticksAreValid&&this.options.lock_to_ticks&&(this._state.value[0]=this.options.ticks[this._getClosestTickIndex(this._state.value[0])],this._state.value[1]=this.options.ticks[this._getClosestTickIndex(this._state.value[1])]),this._state.value[0]=Math.max(this.options.min,Math.min(this.options.max,this._state.value[0])),this._state.value[1]=Math.max(this.options.min,Math.min(this.options.max,this._state.value[1]))):(this._state.value=e(this._state.value),this.ticksAreValid&&this.options.lock_to_ticks&&(this._state.value=this.options.ticks[this._getClosestTickIndex(this._state.value)]),this._state.value=[Math.max(this.options.min,Math.min(this.options.max,this._state.value))],this._addClass(this.handle2,"hide"),"after"===this.options.selection?this._state.value[1]=this.options.max:this._state.value[1]=this.options.min),this._setTickIndex(),this.options.max>this.options.min?this._state.percentage=[this._toPercentage(this._state.value[0]),this._toPercentage(this._state.value[1]),100*this.options.step/(this.options.max-this.options.min)]:this._state.percentage=[0,0,100],this._layout();var f=this.options.range?this._state.value:this._state.value[0];this._setDataVal(f),b===!0&&this._trigger("slide",f);var g=!1;return g=Array.isArray(f)?d[0]!==f[0]||d[1]!==f[1]:d!==f,g&&c===!0&&this._trigger("change",{oldValue:d,newValue:f}),this},destroy:function(){this._removeSliderEventHandlers(),this.sliderElem.parentNode.removeChild(this.sliderElem),this.element.style.display="",this._cleanUpEventCallbacksMap(),this.element.removeAttribute("data"),a&&(this._unbindJQueryEventHandlers(),f===b&&this.$element.removeData(f),this.$element.removeData(c))},disable:function(){return this._state.enabled=!1,this.handle1.removeAttribute("tabindex"),this.handle2.removeAttribute("tabindex"),this._addClass(this.sliderElem,"slider-disabled"),this._trigger("slideDisabled"),this},enable:function(){return this._state.enabled=!0,this.handle1.setAttribute("tabindex",0),this.handle2.setAttribute("tabindex",0),this._removeClass(this.sliderElem,"slider-disabled"),this._trigger("slideEnabled"),this},toggle:function(){return this._state.enabled?this.disable():this.enable(),this},isEnabled:function(){return this._state.enabled},on:function(a,b){return this._bindNonQueryEventHandler(a,b),this},off:function(b,c){a?(this.$element.off(b,c),this.$sliderElem.off(b,c)):this._unbindNonQueryEventHandler(b,c)},getAttribute:function(a){return a?this.options[a]:this.options},setAttribute:function(a,b){return this.options[a]=b,this},refresh:function(d){var g=this.getValue();return this._removeSliderEventHandlers(),e.call(this,this.element,this.options),d&&d.useCurrentValue===!0&&this.setValue(g),a&&(f===b?(a.data(this.element,b,this),a.data(this.element,c,this)):a.data(this.element,c,this)),this},relayout:function(){return this._resize(),this},_removeTooltipListener:function(a,b){this.handle1.removeEventListener(a,b,!1),this.handle2.removeEventListener(a,b,!1)},_removeSliderEventHandlers:function(){if(this.handle1.removeEventListener("keydown",this.handle1Keydown,!1),this.handle2.removeEventListener("keydown",this.handle2Keydown,!1),this.options.ticks_tooltip){for(var a=this.ticksContainer.getElementsByClassName("slider-tick"),b=0;b0&&a.options.ticks_positions[c]||a._toPercentage(a.options.ticks[c])):f=a._toPercentage(e),d.value[0]=e,d.percentage[0]=f,a._setToolTipOnMouseOver(d),a._showTooltip()};return b.addEventListener("mouseenter",d,!1),d},addMouseLeave:function(a,b){var c=function(){a._hideTooltip()};return b.addEventListener("mouseleave",c,!1),c}}},_layout:function(){var a,b;if(a=this.options.reversed?[100-this._state.percentage[0],this.options.range?100-this._state.percentage[1]:this._state.percentage[1]]:[this._state.percentage[0],this._state.percentage[1]],this.handle1.style[this.stylePos]=a[0]+"%",this.handle1.setAttribute("aria-valuenow",this._state.value[0]),b=this.options.formatter(this._state.value[0]),isNaN(b)?this.handle1.setAttribute("aria-valuetext",b):this.handle1.removeAttribute("aria-valuetext"),this.handle2.style[this.stylePos]=a[1]+"%",this.handle2.setAttribute("aria-valuenow",this._state.value[1]),b=this.options.formatter(this._state.value[1]),isNaN(b)?this.handle2.setAttribute("aria-valuetext",b):this.handle2.removeAttribute("aria-valuetext"),this.rangeHighlightElements.length>0&&Array.isArray(this.options.rangeHighlights)&&this.options.rangeHighlights.length>0)for(var c=0;c0){var h,i="vertical"===this.options.orientation?"height":"width";h="vertical"===this.options.orientation?"marginTop":this.options.rtl?"marginRight":"marginLeft";var j=this._state.size/(this.options.ticks.length-1);if(this.tickLabelContainer){var k=0;if(0===this.options.ticks_positions.length)"vertical"!==this.options.orientation&&(this.tickLabelContainer.style[h]=-j/2+"px"),k=this.tickLabelContainer.offsetHeight;else for(l=0;lk&&(k=this.tickLabelContainer.childNodes[l].offsetHeight);"horizontal"===this.options.orientation&&(this.sliderElem.style.marginBottom=k+"px")}for(var l=0;l=a[0]&&m<=a[1]&&this._addClass(this.ticks[l],"in-selection"):"after"===this.options.selection&&m>=a[0]?this._addClass(this.ticks[l],"in-selection"):"before"===this.options.selection&&m<=a[0]&&this._addClass(this.ticks[l],"in-selection"),this.tickLabels[l]&&(this.tickLabels[l].style[i]=j+"px","vertical"!==this.options.orientation&&void 0!==this.options.ticks_positions[l]?(this.tickLabels[l].style.position="absolute",this.tickLabels[l].style[this.stylePos]=m+"%",this.tickLabels[l].style[h]=-j/2+"px"):"vertical"===this.options.orientation&&(this.options.rtl?this.tickLabels[l].style.marginRight=this.sliderElem.offsetWidth+"px":this.tickLabels[l].style.marginLeft=this.sliderElem.offsetWidth+"px",this.tickLabelContainer.style[h]=this.sliderElem.offsetWidth/2*-1+"px"),this._removeClass(this.tickLabels[l],"label-in-selection label-is-selection"),this.options.range?m>=a[0]&&m<=a[1]&&(this._addClass(this.tickLabels[l],"label-in-selection"),(m===a[0]||a[1])&&this._addClass(this.tickLabels[l],"label-is-selection")):("after"===this.options.selection&&m>=a[0]?this._addClass(this.tickLabels[l],"label-in-selection"):"before"===this.options.selection&&m<=a[0]&&this._addClass(this.tickLabels[l],"label-in-selection"),m===a[0]&&this._addClass(this.tickLabels[l],"label-is-selection")))}}var n;if(this.options.range){n=this.options.formatter(this._state.value),this._setText(this.tooltipInner,n),this.tooltip.style[this.stylePos]=(a[1]+a[0])/2+"%";var o=this.options.formatter(this._state.value[0]);this._setText(this.tooltipInner_min,o);var p=this.options.formatter(this._state.value[1]);this._setText(this.tooltipInner_max,p),this.tooltip_min.style[this.stylePos]=a[0]+"%",this.tooltip_max.style[this.stylePos]=a[1]+"%"}else n=this.options.formatter(this._state.value[0]),this._setText(this.tooltipInner,n),this.tooltip.style[this.stylePos]=a[0]+"%";if("vertical"===this.options.orientation)this.trackLow.style.top="0",this.trackLow.style.height=Math.min(a[0],a[1])+"%",this.trackSelection.style.top=Math.min(a[0],a[1])+"%",this.trackSelection.style.height=Math.abs(a[0]-a[1])+"%",this.trackHigh.style.bottom="0",this.trackHigh.style.height=100-Math.min(a[0],a[1])-Math.abs(a[0]-a[1])+"%";else{"right"===this.stylePos?this.trackLow.style.right="0":this.trackLow.style.left="0",this.trackLow.style.width=Math.min(a[0],a[1])+"%","right"===this.stylePos?this.trackSelection.style.right=Math.min(a[0],a[1])+"%":this.trackSelection.style.left=Math.min(a[0],a[1])+"%",this.trackSelection.style.width=Math.abs(a[0]-a[1])+"%","right"===this.stylePos?this.trackHigh.style.left="0":this.trackHigh.style.right="0",this.trackHigh.style.width=100-Math.min(a[0],a[1])-Math.abs(a[0]-a[1])+"%";var q=this.tooltip_min.getBoundingClientRect(),r=this.tooltip_max.getBoundingClientRect();"bottom"===this.options.tooltip_position?q.right>r.left?(this._removeClass(this.tooltip_max,"bottom"),this._addClass(this.tooltip_max,"top"),this.tooltip_max.style.top="",this.tooltip_max.style.bottom="22px"):(this._removeClass(this.tooltip_max,"top"),this._addClass(this.tooltip_max,"bottom"),this.tooltip_max.style.top=this.tooltip_min.style.top,this.tooltip_max.style.bottom=""):q.right>r.left?(this._removeClass(this.tooltip_max,"top"),this._addClass(this.tooltip_max,"bottom"),this.tooltip_max.style.top="18px"):(this._removeClass(this.tooltip_max,"bottom"),this._addClass(this.tooltip_max,"top"),this.tooltip_max.style.top=this.tooltip_min.style.top)}},_createHighlightRange:function(a,b){return this._isHighlightRange(a,b)?a>b?{start:b,size:a-b}:{start:a,size:b-a}:null},_isHighlightRange:function(a,b){return a>=0&&100>=a&&b>=0&&100>=b?!0:!1},_resize:function(a){this._state.offset=this._offset(this.sliderElem),this._state.size=this.sliderElem[this.sizePos],this._layout()},_removeProperty:function(a,b){a.style.removeProperty?a.style.removeProperty(b):a.style.removeAttribute(b)},_mousedown:function(a){if(!this._state.enabled)return!1;a.preventDefault&&a.preventDefault(),this._state.offset=this._offset(this.sliderElem),this._state.size=this.sliderElem[this.sizePos];var b=this._getPercentage(a);if(this.options.range){var c=Math.abs(this._state.percentage[0]-b),d=Math.abs(this._state.percentage[1]-b);this._state.dragged=d>c?0:1,this._adjustPercentageForRangeSliders(b)}else this._state.dragged=0;this._state.percentage[this._state.dragged]=b,this.touchCapable&&(document.removeEventListener("touchmove",this.mousemove,!1),document.removeEventListener("touchend",this.mouseup,!1)),this.mousemove&&document.removeEventListener("mousemove",this.mousemove,!1),this.mouseup&&document.removeEventListener("mouseup",this.mouseup,!1),this.mousemove=this._mousemove.bind(this),this.mouseup=this._mouseup.bind(this),this.touchCapable&&(document.addEventListener("touchmove",this.mousemove,!1),document.addEventListener("touchend",this.mouseup,!1)),document.addEventListener("mousemove",this.mousemove,!1),document.addEventListener("mouseup",this.mouseup,!1),this._state.inDrag=!0;var e=this._calculateValue();return this._trigger("slideStart",e),this.setValue(e,!1,!0),a.returnValue=!1,this.options.focus&&this._triggerFocusOnHandle(this._state.dragged),!0},_touchstart:function(a){this._mousedown(a)},_triggerFocusOnHandle:function(a){0===a&&this.handle1.focus(),1===a&&this.handle2.focus()},_keydown:function(a,b){if(!this._state.enabled)return!1;var c;switch(b.keyCode){case 37:case 40:c=-1;break;case 39:case 38:c=1}if(c){if(this.options.natural_arrow_keys){var d="horizontal"===this.options.orientation,e="vertical"===this.options.orientation,f=this.options.rtl,g=this.options.reversed;d?f?g||(c=-c):g&&(c=-c):e&&(g||(c=-c))}var h;if(this.ticksAreValid&&this.options.lock_to_ticks){var i=void 0;i=this.options.ticks.indexOf(this._state.value[a]),-1===i&&(i=0,window.console.warn("(lock_to_ticks) _keydown: index should not be -1")),i+=c,i=Math.max(0,Math.min(this.options.ticks.length-1,i)),h=this.options.ticks[i]}else h=this._state.value[a]+c*this.options.step;var j=this._toPercentage(h);if(this._state.keyCtrl=a,this.options.range){this._adjustPercentageForRangeSliders(j);var k=this._state.keyCtrl?this._state.value[0]:h,l=this._state.keyCtrl?h:this._state.value[1];h=[Math.max(this.options.min,Math.min(this.options.max,k)),Math.max(this.options.min,Math.min(this.options.max,l))]}else h=Math.max(this.options.min,Math.min(this.options.max,h));return this._trigger("slideStart",h),this.setValue(h,!0,!0),this._trigger("slideStop",h),this._pauseEvent(b),delete this._state.keyCtrl,!1}},_pauseEvent:function(a){a.stopPropagation&&a.stopPropagation(),a.preventDefault&&a.preventDefault(),a.cancelBubble=!0,a.returnValue=!1},_mousemove:function(a){if(!this._state.enabled)return!1; +var b=this._getPercentage(a);this._adjustPercentageForRangeSliders(b),this._state.percentage[this._state.dragged]=b;var c=this._calculateValue(!0);return this.setValue(c,!0,!0),!1},_touchmove:function(a){void 0!==a.changedTouches&&a.preventDefault&&a.preventDefault()},_adjustPercentageForRangeSliders:function(a){if(this.options.range){var b=this._getNumDigitsAfterDecimalPlace(a);b=b?b-1:0;var c=this._applyToFixedAndParseFloat(a,b);0===this._state.dragged&&this._applyToFixedAndParseFloat(this._state.percentage[1],b)c?(this._state.percentage[1]=this._state.percentage[0],this._state.dragged=0):0===this._state.keyCtrl&&this._toPercentage(this._state.value[1])a&&(this._state.percentage[1]=this._state.percentage[0],this._state.keyCtrl=0,this.handle1.focus())}},_mouseup:function(a){if(!this._state.enabled)return!1;var b=this._getPercentage(a);this._adjustPercentageForRangeSliders(b),this._state.percentage[this._state.dragged]=b,this.touchCapable&&(document.removeEventListener("touchmove",this.mousemove,!1),document.removeEventListener("touchend",this.mouseup,!1)),document.removeEventListener("mousemove",this.mousemove,!1),document.removeEventListener("mouseup",this.mouseup,!1),this._state.inDrag=!1,this._state.over===!1&&this._hideTooltip();var c=this._calculateValue(!0);return this.setValue(c,!1,!0),this._trigger("slideStop",c),this._state.dragged=null,!1},_setValues:function(a,b){var c=0===a?0:100;this._state.percentage[a]!==c&&(b.data[a]=this._toValue(this._state.percentage[a]),b.data[a]=this._applyPrecision(b.data[a]))},_calculateValue:function(a){var b={};return this.options.range?(b.data=[this.options.min,this.options.max],this._setValues(0,b),this._setValues(1,b),a&&(b.data[0]=this._snapToClosestTick(b.data[0]),b.data[1]=this._snapToClosestTick(b.data[1]))):(b.data=this._toValue(this._state.percentage[0]),b.data=parseFloat(b.data),b.data=this._applyPrecision(b.data),a&&(b.data=this._snapToClosestTick(b.data))),b.data},_snapToClosestTick:function(a){for(var b=[a,1/0],c=0;ce&&(b=e,c=d)}return c},_setTickIndex:function(){this.ticksAreValid&&(this._state.tickIndex=[this.options.ticks.indexOf(this._state.value[0]),this.options.ticks.indexOf(this._state.value[1])])}},a&&a.fn&&(a.fn.slider?(windowIsDefined&&window.console.warn("bootstrap-slider.js - WARNING: $.fn.slider namespace is already bound. Use the $.fn.bootstrapSlider namespace instead."),f=c):(a.bridget(b,d),f=b),a.bridget(c,d),a(function(){a("input[data-provide=slider]")[f]()}))}(a),d}); \ No newline at end of file