$(function () { $('[data-toggle="tooltip"]').tooltip({ container: 'body' }); function youtube_parser(url) { var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; var match = url.match(regExp); return (match && match[7].length == 11) ? match[7] : false; } $('iframe').each(function (i, o) { var $o = $(o); if ($o.prop('src').search('youtube') != -1) { if (!$o.parent().hasClass('embed-responsive')) { $o.addClass('embed-responsive-item'); $o.wrapAll('
'); var vid = youtube_parser($o.prop("src")); if (vid) { $o.addClass('hidden-print'); $o.parent().addClass('youtube-preview youtube-preview-print').append(''); $o.parent().append(''); } } } }); $.fn.modal.Constructor.prototype.enforceFocus = function () {}; // var api = common.getAPI(); // var socket = io.connect(api); // socket.on('getNotification', function (data) { // if (data.user_id == parseInt($("input[name='current_user_id']").val())) { // var number = parseInt($("#number_notif_1").html()) + 1; // $("#number_notif_1").html(number).removeClass("hidden"); // $("#number_notif_2").html(number); // var html = `
  • // // ` + data.content + ` // //
  • `; // $("#notif_lists").prepend(html); // notification.df(`` + data.content + ``, 30000, data.type); // } // }); }); $(document).on('focusin', function (e) { if ($(e.target).closest(".mce-window").length) { e.stopImmediatePropagation(); } }); /** * Các hàm sử dụng chung */ var common = {}; common.csrf = $('meta[name="csrf-token"]').attr("content"); common.csrfParam = $('meta[name="csrf-param"]').attr("content"); common.getAPI = function () { var protocol = location.protocol; var slashes = protocol.concat("//"); var host = slashes.concat(window.location.hostname); return host + ":8002/"; }; common.sendNotification = function (data) { var api = common.getAPI(); $.ajax({ url: api + "notification", type: 'POST', data: JSON.stringify(data), contentType: 'application/json', success: function (data) { } }); }; common.mark = function (e) { $.ajax({ url: $(e).attr("data-href"), type: 'POST', success: function (data) { $("#number_notif_2").html("0"); $("#number_notif_1").html("0").addClass("hidden"); } }); }; common.modalOpen = function (data, lg, title) { $("#myModalContent").html(data); $("#myModalContent").attr("style", ""); if (lg) { $(".modal-dialog").addClass("modal-lg"); } else { $(".modal-dialog").removeClass("modal-lg"); } if (!title) { $("#modalHeader").addClass("hidden"); } else { $("#modalHeader").removeClass("hidden"); $("#myModalLabel").html(title); } $("#myModalFooter").addClass("hidden"); $("#myModal").modal(); }; common.modalOpenFullScreen = function (data, title) { $("input[name='ReLoadFullScreen']").val("false"); $("#myModalFullScreenContent").html(data); if (title == false) { $("#modalFullScreenHeader").addClass("hidden"); } else { $("#modalFullScreenHeader").removeClass("hidden"); $("#myModalFullScreenLabel").html(title); } $("#myModalFullScreen").modal(); }; common.modalBlock = function (stt) { if (stt) { $("#blocking").modal({ keyboard: false, backdrop: false }); } else { $("#blocking").modal("hide"); } }; common.uploadBlock = function (stt) { if (stt) { $("#uploadBlock").modal({ keyboard: false, backdrop: false }); } else { $("#uploadBlock").modal("hide"); } }; common.modalAlert = function (text, cls, link) { $("#alertModalContent").html(text); $("#alertModalDialog").removeClass("modal-lg"); $("#alertModal").modal({ backdrop: 'static', keyboard: false }); switch (cls) { case "success": $("#alertModalHeader").attr("style", "background-color:#5cb85c;color:white;"); break; case "danger": $("#alertModalHeader").attr("style", "background-color:#d9534f;color:white;"); break; case "info": $("#alertModalHeader").attr("style", "background-color:#5bc0de;color:white;"); break; case "warning": $("#alertModalHeader").attr("style", "background-color:#f0ad4e;color:white;"); break; } if (link !== "") { $('#alertModal').on('hide.bs.modal', function () { window.location = link; }); } }; common.ajaxError = function () { common.modalAlert($("input[name='CO_LOI_XAY_RA_HAY_THU_LAI']").val(), "danger", ""); }; common.btnUpload = function (mUrl, className, extension, fileSize) { var fData = { UploadFile: true, Name: className }; fData[common.csrfParam] = common.csrf; new afuButton({ uploadURI: mUrl, formData: fData, wrap: { tagName: 'div', classes: '' }, fileExtension: extension, fileSizeLimit: fileSize, classes: 'btn btn-default file-paperclip-' + className, fakeInputContent: '', onUploaded: function (data) { common.uploadBlock(false); if (data !== 'false') { var r = JSON.parse(data); if (r['link'] == 2) { alert('Định dạng tệp tin không được hỗ trợ!\n Các loại tệp tin được hỗ trợ: ' + extension); } else { //alert("Tệp tin đã được tải lên thành công"); $("#fileUpload" + className).attr("href", r['link']); $("#fileUpload" + className).html(r['name'] + " "); $("input[name='fileUploadLink" + className + "']").val(r['link']); } } else { alert('Có lỗi xảy ra, tải tệp tin không thành công!'); } } }).addInstance('file' + className); $(".file-paperclip-" + className).closest("div").attr("style", "display:inline-block;"); }; common.btnUploadImage = function (mUrl, className, extension, fileSize) { var fData = { UploadImage: true, Name: className }; fData[common.csrfParam] = common.csrf; new afuButton({ uploadURI: mUrl, formData: fData, wrap: { tagName: 'div', classes: '' }, fileExtension: extension, fileSizeLimit: fileSize, classes: 'btn btn-primary btn-xs', fakeInputContent: ' Chọn hình ảnh', onUploaded: function (data) { common.uploadBlock(false); alert("Hình ảnh đã được tải lên thành công"); $("#HinhMinhHoa" + className).attr("src", "data/uploads" + data); $("input[name='HinhMinhHoaLink" + className + "']").val(data); $("input[name='updateStatus']").val("1"); } }).addInstance('image' + className); }; common.dateTimePicker = function (id) { $('#' + id).datetimepicker({ locale: 'vi', ignoreReadonly: true, format: 'HH:mm DD/MM/YYYY', sideBySide: true }); }; common.dateTimePickerDay = function (id) { $('#' + id).datetimepicker({ locale: 'vi', ignoreReadonly: true, format: 'DD/MM/YYYY' }); }; common.dateTimePickerHour = function (id) { $('#' + id).datetimepicker({ locale: 'vi', ignoreReadonly: true, format: 'HH:mm' }); }; common.dateTimePickerByClass = function (cls, format) { $('.' + cls).datetimepicker({ locale: 'vi', ignoreReadonly: true, sideBySide: true, format: format }); }; common.checkAll = function (id, cls) { $('#' + id).on('ifChecked', function (event) { $('.' + cls).iCheck('check'); }); $('#' + id).on('ifUnchecked', function (event) { $('.' + cls).iCheck('uncheck'); }); $('#' + id).on('ifChanged', function (event) { if (!this.changed) { this.changed = true; $('#' + id).iCheck('check'); } else { this.changed = false; $('#' + id).iCheck('uncheck'); } $('#' + id).iCheck('update'); }); }; common.getUrlParameter = function (sParam) { var sPageURL = decodeURIComponent(window.location.search.substring(1)), sURLVariables = sPageURL.split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] === sParam) { return sParameterName[1] === undefined ? true : sParameterName[1]; } } }; common.error = function (id, text) { $("#" + id).addClass("has-error").removeClass("has-success"); $("#" + id).find(".help-block").html(text).removeClass("hidden"); }; common.success = function (id) { $("#" + id).addClass("has-success").removeClass("has-error"); $("#" + id).find(".help-block").addClass("hidden"); }; common.resetForm = function (e) { common.modalBlock(true); $.ajax({ url: $(e).attr("href"), type: 'POST', success: function (data) { common.modalBlock(false); common.modalOpen(data.form, false, data.title); }, error: function (jqXHR, textStatus, errorThrown) { common.modalBlock(false); common.ajaxError(); } }); }; common.reset = function (e) { var deleteDB = false; var resetDevice = false; if ($("input[name='DeleteDatabase']").is(':checked')) deleteDB = true; if ($("input[name='ResetDevice']").is(':checked')) resetDevice = true; if (!deleteDB && !resetDevice) { alert($("input[name='HAY_LUA_CHON_THAO_TAC']").val()); return; } var confirmText = ""; if (deleteDB) confirmText = $("input[name='DELETE_DB_CONFIRM']").val(); if (resetDevice) confirmText = $("input[name='RESET_DB_CONFIRM']").val(); if (confirm(confirmText)) { common.modalBlock(true); $.ajax({ url: $(e).attr("data-href"), type: 'POST', data: { deleteDB: deleteDB, resetDevice: resetDevice }, success: function (data) { common.modalBlock(false); if (data.status) window.location = data.url; else { $("#reset-error").removeClass("hidden"); $("#reset-close").addClass("hidden"); $("#reset-accept").html(data.btnText); } }, error: function (jqXHR, textStatus, errorThrown) { common.modalBlock(false); common.ajaxError(); } }); } }; common.validateIp = function (Ip) { if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(Ip)) { return true; } return false; }; common.changeLanguage = function (e) { $.ajax({ url: $(e).attr("href"), type: 'POST', success: function (data) { window.location.reload(true); }, error: function (jqXHR, textStatus, errorThrown) { } }); } /** * ========================= */ /** * Notification */ var notification = { success: function (text, time) { $.notify({ icon: "fa fa-check", message: "" + text + "" }, { type: "success", allow_dismiss: false, showProgressbar: false, z_index: 99999999, placement: { from: "bottom", align: "left" }, offset: 70, delay: time, animate: { enter: 'animated fadeInDown', exit: 'animated fadeOutUp' }, }); }, danger: function (text, time) { $.notify({ icon: "fa fa-remove", message: "" + text + "" }, { type: "danger", allow_dismiss: false, showProgressbar: false, z_index: 99999999, placement: { from: "bottom", align: "left" }, offset: 70, delay: time, animate: { enter: 'animated fadeInDown', exit: 'animated fadeOutUp' }, }); }, warning: function (text, time) { $.notify({ icon: "fa fa-question-circle", message: "" + text + "" }, { type: "warning", allow_dismiss: false, showProgressbar: false, z_index: 99999999, placement: { from: "bottom", align: "left" }, offset: 70, delay: time, animate: { enter: 'animated fadeInDown', exit: 'animated fadeOutUp' }, }); }, info: function (text, time) { $.notify({ icon: "fa fa-info-circle", message: "" + text + "" }, { type: "info", allow_dismiss: false, showProgressbar: false, z_index: 99999999, placement: { from: "bottom", align: "right" }, offset: 70, delay: time, animate: { enter: 'animated fadeInDown', exit: 'animated fadeOutUp' }, }); }, df: function (text, time, type) { $.notify({ icon: "fa fa-info-circle", message: text }, { type: type, allow_dismiss: false, showProgressbar: false, z_index: 99999999, placement: { from: "bottom", align: "right" }, offset: 70, delay: time, animate: { enter: 'animated fadeInDown', exit: 'animated fadeOutUp' }, }); }, primary: function (text, time) { $.notify({ icon: "fa fa-info-circle", message: "" + text + "" }, { type: "primary", allow_dismiss: false, showProgressbar: false, z_index: 99999999, placement: { from: "bottom", align: "left" }, offset: 70, delay: time, animate: { enter: 'animated fadeInDown', exit: 'animated fadeOutUp' }, }); }, }; +function ($, document) { //Fix scroll with modal multiple show var stackModal = 0; var orginBodyPad = ''; $(document).on('show.bs.modal', '.modal', function (event) { // var zIndex = 1040 + (10 * $('.modal:visible').length); // $(this).css('z-index', zIndex); if (stackModal <= 0) { orginBodyPad = document.body.style.paddingRight || ''; } stackModal++; setTimeout(function () { $('.modal-backdrop').not('.modal-stack') // .css('z-index', zIndex - 1) .addClass('modal-stack'); }, 0); $(this).appendTo(document.body); }); $(document).on('hidden.bs.modal', '.modal', function (event) { stackModal--; if (stackModal > 0) { $('body').addClass("modal-open"); } else { $('body').removeClass("modal-open"); document.body.style.paddingRight = orginBodyPad; orginBodyPad = ''; } }); }(jQuery, document);