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']
+ ];
+ }
?>
=
dmstr\widgets\Menu::widget(
diff --git a/views/device/index.tpl b/views/device/index.tpl
index 45c4ff01..f0a293cb 100644
--- a/views/device/index.tpl
+++ b/views/device/index.tpl
@@ -56,6 +56,9 @@
'name',
'serial',
'ip_address',
+ 'subnet_mask',
+ 'gateway',
+ 'mac_address',
[
'attribute' => '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 @@
+
+
+
+
+
+
+
+
\ 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