diff --git a/Business/Business.csproj b/Business/Business.csproj index e7919c36..40e6bc94 100644 --- a/Business/Business.csproj +++ b/Business/Business.csproj @@ -148,6 +148,7 @@ + @@ -321,6 +322,7 @@ + diff --git a/Business/Data/Laboratorio/LogAccesoTerminosCondiciones.cs b/Business/Data/Laboratorio/LogAccesoTerminosCondiciones.cs new file mode 100644 index 00000000..ddf0777f --- /dev/null +++ b/Business/Data/Laboratorio/LogAccesoTerminosCondiciones.cs @@ -0,0 +1,104 @@ +/* +insert license info here +*/ +using System; +using System.Collections; + +namespace Business.Data.Laboratorio +{ + /// + /// Generated by MyGeneration using the NHibernate Object Mapping template + /// + [Serializable] + public sealed class LogAccesoTerminosCondiciones: Business.BaseDataAccess + { + + #region Private Members + private bool m_isChanged; + + private int m_idlogacceso; + private int m_idusuario; + private DateTime m_fecha; + #endregion + + #region Default ( Empty ) Class Constuctor + /// + /// default constructor + /// + public LogAccesoTerminosCondiciones() + { + m_idlogacceso = 0; + m_idusuario = 0; + m_fecha = DateTime.MinValue; + } + #endregion // End of Default ( Empty ) Class Constuctor + + #region Required Fields Only Constructor + /// + /// required (not null) fields only constructor + /// + public LogAccesoTerminosCondiciones( + int idusuario, + DateTime fecha) + : this() + { + m_idusuario = idusuario; + m_fecha = fecha; + } + #endregion // End Required Fields Only Constructor + + #region Public Properties + + /// + /// + /// + public int IdLogAcceso + { + get { return m_idlogacceso; } + set + { + m_isChanged |= ( m_idlogacceso != value ); + m_idlogacceso = value; + } + + } + + /// + /// + /// + public int IdUsuario + { + get { return m_idusuario; } + set + { + m_isChanged |= ( m_idusuario != value ); + m_idusuario = value; + } + + } + + /// + /// + /// + public DateTime Fecha + { + get { return m_fecha; } + set + { + m_isChanged |= ( m_fecha != value ); + m_fecha = value; + } + + } + + /// + /// Returns whether or not the object has changed it's values. + /// + public bool IsChanged + { + get { return m_isChanged; } + } + + #endregion + } +} diff --git a/Business/Data/Laboratorio/LogAccesoTerminosCondiciones.hbm.xml b/Business/Data/Laboratorio/LogAccesoTerminosCondiciones.hbm.xml new file mode 100644 index 00000000..180265fc --- /dev/null +++ b/Business/Data/Laboratorio/LogAccesoTerminosCondiciones.hbm.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Business/Data/Usuario.cs b/Business/Data/Usuario.cs index af779a53..1982d0a8 100644 --- a/Business/Data/Usuario.cs +++ b/Business/Data/Usuario.cs @@ -33,9 +33,11 @@ public sealed class Usuario: Business.BaseDataAccess private int m_idarea; private bool m_requiereCambioPass; private bool m_administrador; - private bool m_externo; + private bool m_externo; private string m_email; private string m_telefono; + private DateTime m_fechaTerminosCondiciones; + private string m_tipoAutenticacion; #endregion #region Default ( Empty ) Class Constuctor @@ -63,7 +65,8 @@ public Usuario() m_externo = false; m_email= String.Empty; m_telefono = String.Empty; - + m_tipoAutenticacion = String.Empty; + m_fechaTerminosCondiciones = new DateTime(1900,01,01); } @@ -93,7 +96,8 @@ public Usuario( m_requiereCambioPass = false; m_administrador = false; m_externo = false; - + m_tipoAutenticacion = String.Empty; + m_fechaTerminosCondiciones = new DateTime(1900, 01, 01); } #endregion // End Required Fields Only Constructor @@ -330,7 +334,7 @@ public bool Activo } } - public bool Externo + public bool Externo { get { return m_externo; } set @@ -429,24 +433,46 @@ public bool IsChanged get { return m_isChanged; } } - - #endregion + /// + /// + /// + public string TipoAutenticacion + { + get { return m_tipoAutenticacion; } + + set + { + if (value != null && value.Length > 10) + throw new ArgumentOutOfRangeException("Invalid value for m_tipoAutenticacion", value, value.ToString()); + + m_isChanged |= (m_tipoAutenticacion != value); m_tipoAutenticacion = value; + } + } + #endregion + + #region Metodos - #region Metodos + #endregion - #endregion + //public bool esHemoterapia() + //{ + // var index=this.IdPerfil.Nombre.ToUpper().IndexOf("HEMOTERAPIA"); + // if (index > -1) return true; + // else return false; - //public bool esHemoterapia() - //{ - // var index=this.IdPerfil.Nombre.ToUpper().IndexOf("HEMOTERAPIA"); - // if (index > -1) return true; - // else return false; + //} - //} + public DateTime FechaAceptaTerminosCondiciones { + get { return m_fechaTerminosCondiciones; } + set { + m_isChanged |= (m_fechaTerminosCondiciones != value); + m_fechaTerminosCondiciones = value; + } } + } } diff --git a/Business/Data/Usuario.hbm.xml b/Business/Data/Usuario.hbm.xml index c0208ff7..189eb376 100644 --- a/Business/Data/Usuario.hbm.xml +++ b/Business/Data/Usuario.hbm.xml @@ -27,8 +27,10 @@ - + + + diff --git a/ImprimeLocal/App.config b/ImprimeLocal/App.config index b22e4bae..60ff3ed0 100644 --- a/ImprimeLocal/App.config +++ b/ImprimeLocal/App.config @@ -21,12 +21,12 @@ - - + + - + - + diff --git a/WebLab/Protocolos/ProtocoloEdit2.aspx b/WebLab/Protocolos/ProtocoloEdit2.aspx index 76b93786..f35df594 100644 --- a/WebLab/Protocolos/ProtocoloEdit2.aspx +++ b/WebLab/Protocolos/ProtocoloEdit2.aspx @@ -1226,6 +1226,7 @@ OrdenarDatos(); contadorfilas = contadorfilas - 1; + document.getElementById('<%= Page.Master.FindControl("ContentPlaceHolder1").FindControl("TxtCantidadFilas").ClientID %>').value = contadorfilas; //para no perder el valor luego de un postback } else { diff --git a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs index 81d5c3f6..72e29ee6 100644 --- a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs +++ b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs @@ -1111,12 +1111,16 @@ private void MostrarDeterminaciones(Protocolo oRegistro) crit.AddOrder(Order.Asc("IdDetalleProtocolo")); IList items = crit.List(); - string pivot = ""; + string pivot = ""; string sDatos = ""; - + HashSet pivote = new HashSet(); + foreach (DetalleProtocolo oDet in items) { - if (pivot != oDet.IdItem.Nombre) + //Debo cambiar la manera que verifica los repetidos, porque ahora cuando se regenera un subItem el IdDetalleProtocolo no es secuencial + //Y en la vista del protocolo se ve "duplicado" + //if (pivot != oDet.IdItem.Nombre) + if (pivote.Add(oDet.IdItem.Nombre)) // Si Add devuelve True es porque lo agrego porque no hay duplicados { /*if (sDatos == "") sDatos = oDet.IdItem.Codigo + "#" + oDet.TrajoMuestra + "#" + oDet.ConResultado; @@ -1660,14 +1664,14 @@ private void IniciarValores(Configuracion oC) chkRecordarPractica.Checked = true; } break; - case "prácticas": - TxtDatosCargados.Value = s_control[1].ToString(); break; + case "prácticas": if(Request["idServicio"] == "1") TxtDatosCargados.Value = s_control[1].ToString(); break; + case "prácticasMicro": if(Request["idServicio"] == "3") TxtDatosCargados.Value = s_control[1].ToString(); break; //case "ddlImpresora": // ddlImpresora.SelectedValue = s_control[1].ToString(); break; case "ddlImpresoraEtiqueta": - ddlImpresoraEtiqueta.SelectedValue = s_control[1].ToString(); break; - } + ddlImpresoraEtiqueta.SelectedValue = s_control[1].ToString(); break; + } } } else @@ -1749,9 +1753,11 @@ protected void btnGuardar_Click(object sender, EventArgs e) /// actualiza al paciente con la ultima obra social guardada: solo en las altas + /* No es necesario siempre se guarda -1 con el sil2 oRegistro.IdPaciente.IdObraSocial = oRegistro.IdObraSocial.IdObraSocial; oRegistro.IdPaciente.FechaUltimaActualizacion = DateTime.Now; oRegistro.IdPaciente.Save(); + */ if (ddlImpresoraEtiqueta.SelectedValue != "0") // oRegistro.ImprimirCodigoBarras(ddlImpresoraEtiqueta.SelectedItem.Text, int.Parse(Session["idUsuario"].ToString())); @@ -2081,7 +2087,7 @@ private void ImprimirCodigoBarrasAreas(Protocolo oProt, string s_listaAreas, str // ticket.AddSubHeaderLine("PRACTICAS SOLICITADAS"); // for (int i = 1; i <= cantidadFilas; i++) // { - // int l = i * 90; + // int td = i * 90; // analisis = analisis.Insert(l, "&"); // } @@ -2489,10 +2495,39 @@ private void AlmacenarSesion(Configuracion oC) if (Request["Operacion"].ToString() != "AltaTurno") { s_valores += "@ddlSectorServicio:" + ddlSectorServicio.SelectedValue; - } + } + if (chkRecordarPractica.Checked) + {//guardo la sesion de general y microbiologia por si vuelvo a cargar esos tipos de labos, luego en GuardarDetalle se actualizan si el usuario lo cambio + if(Session["ProtocoloLaboratorio"] != null) + { + string[] arr = Session["ProtocoloLaboratorio"].ToString().Split(("@").ToCharArray()); + foreach (string item in arr) + { + string[] s_control = item.Split((":").ToCharArray()); + switch (s_control[0].ToString()) { + + case "prácticas": + string practicas = "@prácticas:" + s_control[1].ToString(); + if (Request["idServicio"] == "1") + s_valores = s_valores.Replace(practicas, ""); //si es laboratorio general lo borro y lo cargo en GuardarDetalle. + else + s_valores += practicas; //si no es laboratorio general no quiero perder su session "prácticas" + break; + + case "prácticasMicro": + string practicasMicro = "@prácticasMicro:" + s_control[1].ToString(); + if (Request["idServicio"] != "3") //si no es microbiologia no quiero perder su session "prácticasMicro" + s_valores += "@prácticasMicro:" + s_control[1].ToString(); + else + s_valores = s_valores.Replace(practicasMicro, ""); //si es micro lo borro y lo cargo en GuardarDetalle. + break; + } + } + } + } - Session["ProtocoloLaboratorio"] = s_valores; + Session["ProtocoloLaboratorio"] = s_valores; } @@ -2673,6 +2708,8 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro) { /// si cambió la marca de sin muetsra foreach (DetalleProtocolo oDetalle in listadetalle) { + + if (trajomuestra == "true") /// es no trajo { if (oDetalle.TrajoMuestra == "Si") // estaba grabado Si @@ -2689,6 +2726,39 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro) oDetalle.TrajoMuestra = "Si"; oDetalle.GrabarAuditoriaDetalleProtocolo("Con Muestra", oUser.IdUsuario); oDetalle.Save(); + + /* Bug sobre la edición de determinaciones con la marca “sin muestra”: + * Si se genero el protocolo con un analisis "S/muestra" de una practica no se generan los idItem del diagrama + * (porque GuardarDetallePractica solo actualizaba TrajoMuestra del codigo de la practica) + * Correcion: si en protocolo se cambia a "Con muestra",se regeneran los detalles faltantes de la practica + */ + + if (oDetalle.IdItem == oDetalle.IdSubItem) + { + /* Si ValidadoTotal (en ProtocoloEdit2) cargó idUsuarioValida por un caso de + * "sin muestra" se debe resetear idUsuarioValida para evitar inconsistencias + */ + + //Caso 1: el análisis aún no tiene resultados (simple o compuesto), + if (!oDetalle.ConResultado) + { + oDetalle.IdUsuarioValida = 0; + oDetalle.FechaValida = DateTime.Parse("01/01/1900"); + } + + //Caso 2: Es derivacion. + //Los analisis Derivados no tienen IdUsuarioValida, solo idUsuarioResultado + + if (oDetalle.ResultadoCar == "Pendiente de derivar") + { + oDetalle.IdUsuarioValida = 0; + oDetalle.FechaValida = DateTime.Parse("01/01/1900"); + } + if (oItem.IdCategoria == 1 ) + { + GuardarDetallePractica(oDetalle, true); //regenera=true --> se omite si es Derivacion para no generar una nueva Derivacion + } + } } } @@ -2702,7 +2772,17 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro) if (Request["Operacion"].ToString() != "Modifica") { if (chkRecordarPractica.Checked) - Session["ProtocoloLaboratorio"] += "@prácticas:" + recordar_practicas; + { + //actualizo los analisis a recordar por IdTipoServicio + switch (oRegistro.IdTipoServicio.IdTipoServicio) + { + case 1: Session["ProtocoloLaboratorio"] += "@prácticas:" + recordar_practicas; /*labo general*/ break; + case 3: Session["ProtocoloLaboratorio"] += "@prácticasMicro:" + recordar_practicas; /*microbiologia*/ break; + } + + + + } } @@ -2869,11 +2949,11 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro) - private void GuardarDetallePractica(DetalleProtocolo oDet) + private void GuardarDetallePractica(DetalleProtocolo oDet, bool regenera=false) { - - - if (oDet.VerificarSiEsDerivable(oUser.IdEfector)) //oDet.IdItem.IdEfector.IdEfector != oDet.IdItem.IdEfectorDerivacion.IdEfector) //Si es un item derivable no busca hijos y guarda directamente. + //Alta normal (regenera = false) --> el código funciona como antes + // Modificación con regeneración(regenera = true) --> se omite si es Derivacion para no generar una nueva Derivacion + if (!regenera && oDet.VerificarSiEsDerivable(oUser.IdEfector)) //oDet.IdItem.IdEfector.IdEfector != oDet.IdItem.IdEfectorDerivacion.IdEfector) //Si es un item derivable no busca hijos y guarda directamente. { oDet.IdSubItem = oDet.IdItem; oDet.Save(); @@ -3739,11 +3819,11 @@ protected void cvValidacionInput_ServerValidate(object source, ServerValidateEve else { - - /// - if ((TxtDatos.Value == "") || (TxtDatos.Value == "1###on@")) + /// + + if ((TxtDatos.Value == "") || (TxtDatos.Value == "1###on@") || (TxtDatos.Value == "1###on#0@") || TxtDatos.Value == "1###false#0@") { args.IsValid = false; diff --git a/WebLab/Resultados/AnalisisEdit.aspx.cs b/WebLab/Resultados/AnalisisEdit.aspx.cs index 9c13abca..a122d531 100644 --- a/WebLab/Resultados/AnalisisEdit.aspx.cs +++ b/WebLab/Resultados/AnalisisEdit.aspx.cs @@ -109,9 +109,14 @@ private void MuestraDatos() IList items = crit.List(); string pivot = ""; string sDatos = ""; + HashSet pivote = new HashSet(); + foreach (DetalleProtocolo oDet in items) { - if (pivot != oDet.IdItem.Nombre) + //if (pivot != oDet.IdItem.Nombre) //Debo cambiar la manera que verifica los repetidos, + // porque ahora cuando se regenera un subItem el IdDetalleProtocolo no es secuencial + // Y en la vista del protocolo se ve "duplicado" + if (pivote.Add(oDet.IdItem.Nombre)) // Si Add devuelve True es porque lo agrego sin problemas de duplicados { if (sDatos == "") sDatos = oDet.IdItem.Codigo + "#" + oDet.TrajoMuestra + "#" + oDet.ConResultado; @@ -389,18 +394,62 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro) // GuardarDerivacion(oDetalle); //oDetalle.GuardarDerivacion(oUser); } - else //si ya esta actualizo si trajo muestra o no + else //si ya esta actualizo si trajo muestra o no //3/3/2026 Y regenero los analisis de las practicas si no estaban en el alta { + foreach (DetalleProtocolo oDetalle in listadetalle) { if (trajomuestra == "true") oDetalle.TrajoMuestra = "No"; - else + + else // (trajomuestra == "false" + { + /* Bug sobre la edición de determinaciones con la marca “sin muestra”: + * Si se genero el protocolo con un analisis "S/muestra" de una practica no se generan los idItem del diagrama + * (porque GuardarDetallePractica solo actualizaba TrajoMuestra del codigo de la practica) + * Correcion: si en Validacion se cambia a "Con muestra",se regeneran los detalles faltantes de la practica + */ + + + bool antesSinMuestra = (oDetalle.TrajoMuestra == "No"); oDetalle.TrajoMuestra = "Si"; + + if (antesSinMuestra && oDetalle.IdItem == oDetalle.IdSubItem && + (oRegistro.IdTipoServicio.IdTipoServicio == 1 || oRegistro.IdTipoServicio.IdTipoServicio ==3)) //Solo pasa en Labo y Microbiologia, en NO Pacientes se generan todos los items sin muesta + { + /* Si ValidadoTotal (en ProtocoloEdit2) cargó idUsuarioValida por un caso de + * "sin muestra" se debe resetear idUsuarioValida para evitar inconsistencias + */ + + //Caso 1: el análisis aún no tiene resultados (simple o compuesto), + if (!oDetalle.ConResultado) + { + oDetalle.IdUsuarioValida = 0; + oDetalle.FechaValida = DateTime.Parse("01/01/1900"); + } + + //Caso 2: Es derivacion. + //Los analisis Derivados no tienen IdUsuarioValida, solo idUsuarioResultado + if (oDetalle.ResultadoCar == "Pendiente de derivar") + { + oDetalle.IdUsuarioValida = 0; + oDetalle.FechaValida = DateTime.Parse("01/01/1900"); + } + + /* Si es un analisis Compuesto Regenero analisis. + * Considero que si el analisis es Derivacion no se debe regenerar + * Considero idItem = idSubItem + */ + + if ( oItem.IdCategoria == 1 ) + GuardarDetallePractica(oDetalle, true); //true --> se omite si es Derivacion para no generar una nueva Derivacion + } + + } oDetalle.Save(); + } - } } } @@ -541,10 +590,12 @@ private void GuardarDetalle2(Business.Data.Laboratorio.Protocolo oRegistro) - private void GuardarDetallePractica(DetalleProtocolo oDet) + private void GuardarDetallePractica(DetalleProtocolo oDet, bool regenera = false) { + //Alta normal (regenera = false) → el código funciona como antes + // Modificación con regeneración(regenera = true) → se omite si es Derivacion para no generar una nueva Derivacion - if (oDet.VerificarSiEsDerivable(oDet.IdProtocolo.IdEfector)) //oDet.IdItem.IdEfector.IdEfector != oDet.IdItem.IdEfectorDerivacion.IdEfector) //Si es un item derivable no busca hijos y guarda directamente. + if (!regenera && oDet.VerificarSiEsDerivable(oDet.IdProtocolo.IdEfector)) //oDet.IdItem.IdEfector.IdEfector != oDet.IdItem.IdEfectorDerivacion.IdEfector) //Si es un item derivable no busca hijos y guarda directamente. { oDet.IdSubItem = oDet.IdItem; oDet.Save(); diff --git a/WebLab/Usuarios/UsuarioEdit.aspx b/WebLab/Usuarios/UsuarioEdit.aspx index f3108e2e..8f190924 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx +++ b/WebLab/Usuarios/UsuarioEdit.aspx @@ -3,28 +3,24 @@ <%@ Register assembly="Anthem" namespace="Anthem" tagprefix="anthem" %> - - - - - - + + + - - - - - - + + + - + + @@ -40,7 +36,64 @@ height: 38px; } - + @@ -49,6 +102,8 @@ + +
@@ -125,6 +180,13 @@
+ + + Tipo Autenticacion: + + + + @@ -135,9 +197,11 @@ * - + + + Contraseña: @@ -147,16 +211,17 @@ * + Administrador: - + - + <%-- Efector @@ -166,7 +231,7 @@ ErrorMessage="Efector" MaximumValue="999999" MinimumValue="1" Type="Integer" ValidationGroup="0">* - + --%> Area/Laboratorio: @@ -198,6 +263,7 @@ +
@@ -208,6 +274,18 @@ + + + + + + + + + + - - + <%-- + --%> + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - + + + + + + + + +
+ + + + + Regresar + -
+
@@ -299,4 +394,5 @@ +
\ No newline at end of file diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 002cdb1d..60a086e2 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -1,8 +1,19 @@ -using System; +using Business; +using Business.Data; +using Business.Data.Laboratorio; +using CrystalDecisions.Shared; +using CrystalDecisions.Web; +using Microsoft.Win32; +using NHibernate; +using NHibernate.Expression; +using Salud; +using System; using System.Collections; +using System.Collections.Generic; using System.Configuration; using System.Data; -using System.Linq; +using System.Data.SqlClient; +using System.Text.RegularExpressions; using System.Web; using System.Web.Security; using System.Web.UI; @@ -10,12 +21,6 @@ using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; -using Business.Data; -using Business.Data.Laboratorio; -using Business; -using System.Data.SqlClient; -using CrystalDecisions.Shared; -using CrystalDecisions.Web; namespace WebLab.Usuarios { @@ -45,6 +50,11 @@ protected void Page_Load(object sender, EventArgs e) CargarListas(); if (Request["id"] != null) MostrarDatos(); + else + MostrarEfectores(); + + + } else Response.Redirect("../FinSesion.aspx", false); } @@ -74,19 +84,14 @@ private void CargarListas() ddlPerfil.Items.Insert(0, new ListItem("Seleccione un perfil", "0")); m_ssql = @" SELECT idEfector, nombre FROM Sys_Efector (nolock) ORDER BY nombre "; - oUtil.CargarCombo(ddlEfector, m_ssql, "idEfector", "nombre"); - // ddlEfector.Items.Insert(0, new ListItem("Seleccione un efector", "0")); - ddlEfector.SelectedValue = oC.IdEfector.IdEfector.ToString(); - m_ssql = @" SELECT idArea, nombre FROM LAB_Area (nolock) where baja=0 ORDER BY nombre "; + oUtil.CargarCombo(ddlEfector3, m_ssql, "idEfector", "nombre"); + ddlEfector3.Items.Insert(0, new ListItem("--Seleccione un efector--", "0")); + + m_ssql = @" SELECT idArea, nombre FROM LAB_Area (nolock) where baja=0 ORDER BY nombre "; oUtil.CargarCombo(ddlArea, m_ssql, "idArea", "nombre"); ddlArea.Items.Insert(0, new ListItem("Todas", "0")); - - m_ssql = @" SELECT idEfector, nombre FROM Sys_Efector (nolock) ORDER BY nombre "; - oUtil.CargarCombo(ddlEfector2, m_ssql, "idEfector", "nombre"); - ddlEfector2.Items.Insert(0, new ListItem("Seleccione un efector", "0")); - if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") { chkRequiereContrasenia.Checked = false; @@ -96,6 +101,7 @@ private void CargarListas() } + #region Datos Generales private void MostrarDatos() { Usuario oRegistro = new Usuario(); @@ -109,8 +115,8 @@ private void MostrarDatos() txtPassword.Enabled = false; chkActivo.Checked = oRegistro.Activo; ddlPerfil.SelectedValue = oRegistro.IdPerfil.IdPerfil.ToString(); - ddlEfector.SelectedValue = oRegistro.IdEfector.IdEfector.ToString(); - ddlEfector.Enabled = false; + //ddlEfector.SelectedValue = oRegistro.IdEfector.IdEfector.ToString(); + //ddlEfector.Enabled = false; if (ddlPerfil.SelectedValue == "15") { CargarEfectorLabo(); @@ -120,9 +126,6 @@ private void MostrarDatos() ddlArea.SelectedValue = oRegistro.IdArea.ToString(); chkExterno.Checked = oRegistro.Externo; rfvPassword.Enabled = false; - - - email.Value = oRegistro.Email; txtTelefono.Text = oRegistro.Telefono; btnBlanquear.Visible = true; @@ -132,44 +135,34 @@ private void MostrarDatos() Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); oAuditor.GrabaAuditoria("Consulta", oRegistro.IdUsuario, oRegistro.Username); - MostrarEfectores(); + ddlTipoAutenticacion.SelectedValue = oRegistro.TipoAutenticacion.Trim(); + + habilitarPorAutenticacion(); } private void habilitarAdministrador() { if (chkAdministrador.Checked) { - ddlEfector.Enabled = false; - ddlEfector.SelectedValue = "227"; /// subsecretaria de salud ddlArea.Enabled = false; ddlPerfil.Enabled = false; ddlPerfil.SelectedValue = "2"; btnAgregarEfector.Enabled = false; - ddlEfector2.Enabled = false; + lblMensajeEfector.Visible = false; lblMensajeEfector.UpdateAfterCallBack = true; + } else { - if (Request["id"] == null) - { - ddlEfector.Enabled = true; - } ddlArea.Enabled = true; ddlPerfil.Enabled = true; btnAgregarEfector.Enabled = true; - ddlEfector2.Enabled = true; } - ddlEfector.UpdateAfterCallBack = true; ddlArea.UpdateAfterCallBack = true; ddlPerfil.UpdateAfterCallBack = true; - ddlEfector2.UpdateAfterCallBack = true; btnAgregarEfector.UpdateAfterCallBack = true; - } - - protected void btnGuardar_Click(object sender, EventArgs e) - { } @@ -177,14 +170,17 @@ protected void btnGuardar_Click(object sender, EventArgs e) private void Guardar(Usuario oRegistro) { string accion = "Crea"; - if (oRegistro != null) + if (Request["id"] != null) //oRegistro nunca es null accion = "Modifica"; + Perfil oPerfil = new Perfil(); oPerfil = (Perfil)oPerfil.Get(typeof(Perfil), int.Parse(ddlPerfil.SelectedValue)); Efector oEfector = new Efector(); - oEfector = (Efector)oEfector.Get(typeof(Efector), int.Parse(ddlEfector.SelectedValue)); + + int idEfector = int.Parse((ViewState["efectores"] as DataTable).Rows[0]["idEfector"].ToString()); //Tomo el primero de la grilla + oEfector = (Efector)oEfector.Get(typeof(Efector), idEfector); Efector oEfectorDestino = new Efector(); if ((ddlEfectorDestino.SelectedValue != "0") && (ddlEfectorDestino.SelectedValue != "")) @@ -192,6 +188,8 @@ private void Guardar(Usuario oRegistro) else oEfectorDestino = oEfector; + + oRegistro.IdEfector = oEfector; oRegistro.IdEfectorDestino = oEfectorDestino; oRegistro.IdPerfil = oPerfil; @@ -209,14 +207,22 @@ private void Guardar(Usuario oRegistro) oRegistro.Telefono = txtTelefono.Text; - if (accion != "Modifica") //no se modifica contrasñea + if (Request["id"] == null) //oRegistro nunca es null { Utility oUtil = new Utility(); + string m_password = oUtil.Encrypt(txtPassword.Text); + + if (ddlTipoAutenticacion.SelectedValue == "ONELOGIN") + { + m_password = oUtil.Encrypt(txtUsername.Text); //La contraseña de ONELOGIN es el username + } oRegistro.Password = m_password; } - if (oRegistro != null) + + + if (Request["id"] != null) //oRegistro nunca es null { if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) accion = "Inhabilita"; @@ -226,6 +232,9 @@ private void Guardar(Usuario oRegistro) if (oRegistro.IdPerfil != oPerfil) accion = "Cambia Perfil"; + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) + accion = "Cambia Autenticacion: " + ddlTipoAutenticacion.SelectedValue.Trim(); + } oRegistro.Activo = chkActivo.Checked; @@ -234,27 +243,25 @@ private void Guardar(Usuario oRegistro) oRegistro.IdUsuarioActualizacion = int.Parse(Session["idUsuario"].ToString()); oRegistro.FechaActualizacion = DateTime.Now; + + oRegistro.TipoAutenticacion = ddlTipoAutenticacion.SelectedValue; oRegistro.Save(); - if (Request["id"] == null) // NUEVO USUARIO - { - UsuarioEfector oUsuarioEfector = new UsuarioEfector(); - oUsuarioEfector.IdUsuario = oRegistro; - oUsuarioEfector.IdEfector = oEfector; - oUsuarioEfector.Activo = true; - oUsuarioEfector.Save(); - } Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); - + if (Request["id"] == null) //en el alta se guardan los efectores luego de crear el usuario + //en modificacion no los guardamos desde aca, ya que se guardan en el evento "Agregar Efector" + GuardarEfectores(oRegistro); } + + protected void btnRegresar_Click(object sender, EventArgs e) { Response.Redirect("UsuarioList.aspx"); @@ -265,7 +272,7 @@ protected void btnGuardar_Click1(object sender, EventArgs e) if (Page.IsValid) { - Usuario oRegistro = new Usuario(); + Usuario oRegistro = new Usuario(); if (Request["id"] != null) { oRegistro = (Usuario)oRegistro.Get(typeof(Usuario), int.Parse(Request["id"])); @@ -288,116 +295,32 @@ protected void chkAdministrador_CheckedChanged(object sender, EventArgs e) habilitarAdministrador(); } - - - private void AgregarEfector() + private DataTable LeerDatosEfector() { - - UsuarioEfector oRegistro = new UsuarioEfector(); - Usuario oUsuario = new Usuario(); - Efector oEfector = new Efector(); - - oRegistro.IdUsuario = (Usuario)oUsuario.Get(typeof(Usuario), int.Parse(Request["id"].ToString())); - oRegistro.IdEfector = (Efector)oEfector.Get(typeof(Efector), int.Parse(ddlEfector2.SelectedValue.ToString())); - oRegistro.Activo = true; - oRegistro.Save(); - - - Usuario oAuditor = new Usuario(); - oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - - oAuditor.GrabaAuditoria("Vincula " + ddlEfector2.SelectedItem.Text.TrimStart().TrimEnd(), oRegistro.IdUsuario.IdUsuario, oRegistro.IdUsuario.Username); - - - } - - protected void btnAgregarEfector_Click(object sender, EventArgs e) - { - if (Page.IsValid) + if (Request["id"] != null) { - AgregarEfector(); - MostrarEfectores(); - - } - } - - - private void MostrarEfectores() - { - ddlEfector2.SelectedValue = "0"; - - gvListaEfector.AutoGenerateColumns = false; - gvListaEfector.DataSource = LeerDatosEfector(); - gvListaEfector.DataBind(); - gvListaEfector.UpdateAfterCallBack = true; - } - - private object LeerDatosEfector() - { - string m_strSQL = @" SELECT IR.idUsuarioEfector, R.nombre as nombre + string m_strSQL = @" SELECT IR.idUsuarioEfector, R.nombre as nombre , R.idEfector FROM Sys_UsuarioEfector IR (nolock) INNER JOIN sys_efector R (nolock) ON R.idEfector=IR.idEfector WHERE IR.idUsuario=" + Request["id"].ToString(); - DataSet Ds = new DataSet(); - SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; - SqlDataAdapter adapter = new SqlDataAdapter(); - adapter.SelectCommand = new SqlCommand(m_strSQL, conn); - adapter.Fill(Ds); - - - - return Ds.Tables[0]; - } - - protected void gvListaEfector_RowDataBound(object sender, GridViewRowEventArgs e) - { - if (e.Row.RowType == DataControlRowType.DataRow) - { + DataSet Ds = new DataSet(); + SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; + SqlDataAdapter adapter = new SqlDataAdapter(); + adapter.SelectCommand = new SqlCommand(m_strSQL, conn); + adapter.Fill(Ds); - ImageButton CmdEliminar = (ImageButton)e.Row.Cells[1].Controls[1]; - CmdEliminar.CommandArgument = this.gvListaEfector.DataKeys[e.Row.RowIndex].Value.ToString(); - CmdEliminar.CommandName = "Eliminar"; - CmdEliminar.ToolTip = "Eliminar"; + return Ds.Tables[0]; } + else return new DataTable(); } - protected void gvListaEfector_RowCommand(object sender, GridViewCommandEventArgs e) - { - if (e.CommandName != "Page") - { - switch (e.CommandName) - { - - case "Eliminar": - Eliminar(e.CommandArgument); - MostrarEfectores(); - break; - } - } - } - - private void Eliminar(object idItem) - { - UsuarioEfector oRegistro = new UsuarioEfector(); - - oRegistro = (UsuarioEfector)oRegistro.Get(typeof(UsuarioEfector), int.Parse(idItem.ToString())); - string s_efector = oRegistro.IdEfector.Nombre; - int iidusuario = oRegistro.IdUsuario.IdUsuario; - string s_username = oRegistro.IdUsuario.Username; - - - oRegistro.Delete(); - /////Auditoria - Usuario oAuditor = new Usuario(); - oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + - oAuditor.GrabaAuditoria("DesVincula " + s_efector.TrimStart().TrimEnd(), iidusuario, s_username); - } protected void btnAuditoria_Click(object sender, EventArgs e) { @@ -517,6 +440,12 @@ protected void ddlPerfil_SelectedIndexChanged(object sender, EventArgs e) { CargarEfectorLabo(); } + else + { + //Si habia algun valor seleccionado lo limpio + ddlEfectorDestino.SelectedValue = "0"; + } + ddlEfectorDestino.UpdateAfterCallBack = true; } private void CargarEfectorLabo() @@ -542,10 +471,299 @@ protected void customValidacionGeneral0_ServerValidate(object source, ServerVali if (txtUsername.Text.Trim().Length<6) { args.IsValid = false; + if (ddlTipoAutenticacion.SelectedValue == "SIL") + customValidacionGeneral0.ErrorMessage = "Usuario debe contener al menos 6 caracteres(letras o numeros)"; + else + customValidacionGeneral0.ErrorMessage = "Usuario debe contener al menos 6 numeros"; + return; } } + + + + protected void ddlTipoAutenticacion_SelectedIndexChanged(object sender, EventArgs e) + { + + habilitarPorAutenticacion(); + + } + + + protected void customValidacionGeneral1_ServerValidate1(object source, ServerValidateEventArgs args) + { + if (ddlTipoAutenticacion.SelectedValue == "ONELOGIN") + { + //El username debe ser un numero (numero de documento) no debe admitir letras ni caracteres especiales. + + bool validate = Regex.IsMatch(txtUsername.Text, @"^\d+$"); + if (!validate) + { + args.IsValid = false; + customValidacionGeneral0.ErrorMessage = "Usuario debe contener al menos 6 numeros"; + + return; + } + + } + } + + private void habilitarPorAutenticacion() + { + if (ddlTipoAutenticacion.SelectedValue == "ONELOGIN") + { + //No se habilita “Requiere nueva contraseña al ingresar” + chkRequiereContrasenia.Enabled = false; + chkRequiereContrasenia.Checked = false; + //No se habilita “exclusivo Río Negro” + chkExterno.Enabled = false; + //Por defecto la contraseña es el username + txtPassword.Enabled = false; + rfvPassword.Enabled = false; + } + else + { + chkRequiereContrasenia.Enabled = true; + chkExterno.Enabled = true; + + //Se puede poner una contraseña + if (Request["id"] == null){ txtPassword.Enabled = true; rfvPassword.Enabled = true; } + else + txtPassword.Enabled = false; + } + + + } + + + + + protected void customValidator_ServerValidate(object source, ServerValidateEventArgs args) + { + if (ddlTipoAutenticacion.SelectedValue == "ONELOGIN" && chkExterno.Checked) + { + customValidatorExterno.ErrorMessage = "Usuario ONLOGIN no puede ser “Exclusivo Río Negro”"; + args.IsValid = false; + return; + + } + } + + protected void customValidatorEfector_ServerValidate(object source, ServerValidateEventArgs args) + { + + + DataTable dt = ViewState["efectores"] as DataTable; + if(dt == null || dt.Rows.Count == 0) + { + args.IsValid = false; + this.customValidatorEfector.ErrorMessage = "Debe ingresar al menos un efector para el usuario"; + return; + } + } + + #endregion + + #region Efectores + + protected void gvListaEfector_RowDataBound(object sender, GridViewRowEventArgs e) + { + if (e.Row.RowType == DataControlRowType.DataRow) + { + ImageButton CmdEliminar = (ImageButton)e.Row.Cells[1].Controls[1]; + CmdEliminar.CommandArgument = this.gvListaEfector.DataKeys[e.Row.RowIndex].Value.ToString(); + CmdEliminar.CommandName = "Eliminar"; + CmdEliminar.ToolTip = "Eliminar"; + } + } + + protected void gvListaEfector_RowCommand(object sender, GridViewCommandEventArgs e) + { + if (e.CommandName != "Page") + { + switch (e.CommandName) + { + + case "Eliminar": + EliminarEfector(e.CommandArgument); + MostrarEfectores(); + break; + } + + } + } + + protected void btnAgregarEfector_Click(object sender, EventArgs e) + { + if (Page.IsValid) + { + AgregarEfector(); + MostrarEfectores(); + } + } + + + private void AgregarEfector() + { + lblMensajeEfector.Visible = false; + if (ddlEfector3.SelectedValue != "0") + { + bool puedeAgregar = true; + + DataTable dt = ViewState["efectores"] as DataTable; DataRow efectorEncontrado = null; + + if (dt != null && dt.Rows.Count > 0) + efectorEncontrado = dt.Rows.Find(ddlEfector3.SelectedValue); //Verifica si ya fue agregado el efctor + + if (efectorEncontrado != null) puedeAgregar = false; + + + if (puedeAgregar) + { + dt.Rows.Add(0, ddlEfector3.SelectedItem.Text, ddlEfector3.SelectedValue); + ViewState["efectores"] = dt; + //Si el usuario existe lo guarda en la base, sino lo deja en el viewstate para guardarlo cuando se guarde el usuario + if (Request["id"] != null) + { + Usuario oUsuario = new Usuario(); + oUsuario = (Usuario)oUsuario.Get(typeof(Usuario), int.Parse(Request["id"])); + GuardarEfectores(oUsuario); + } + } + else + { + lblMensajeEfector.Visible = true; + lblMensajeEfector.Text = "Alerta: Efector ya ingresado para el usuario."; + + } + } + lblMensajeEfector.UpdateAfterCallBack = true; + } + + + + private void GuardarEfectores(Business.Data.Usuario oUsuario) + { + ///Eliminar los efectores y volverlos a crear + ISession m_session = NHibernateHttpModule.CurrentSession; + ICriteria crit = m_session.CreateCriteria(typeof(UsuarioEfector)); + crit.Add(Expression.Eq("IdUsuario", oUsuario)); + IList lista = crit.List(); + + HashSet yaTieneAuditoriaVincula = new HashSet(); + + foreach (UsuarioEfector oUsuarioEfector in lista) + { + yaTieneAuditoriaVincula.Add(oUsuarioEfector.IdEfector.IdEfector); + oUsuarioEfector.Delete(); + } + + //los genero nuevamente + DataTable dt = ViewState["efectores"] as DataTable; + if (dt != null || dt.Rows.Count > 0) + { + //instancio una sola vez el usuario auditor + Usuario oAuditor = new Usuario(); + oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + foreach (DataRow row in dt.Rows) + { + UsuarioEfector oRegistro = new UsuarioEfector(); + int idEfector = int.Parse(row["idEfector"].ToString()); + Efector oEfector = new Efector(); + oEfector = (Efector)oEfector.Get(typeof(Efector), idEfector); + oRegistro.IdUsuario = oUsuario; + oRegistro.IdEfector = oEfector; + oRegistro.Activo = true; + oRegistro.Save(); + + //solo genero auditoria la primera vez que vincula el efector + if (!yaTieneAuditoriaVincula.Contains(idEfector)) + oAuditor.GrabaAuditoria("Vincula " + oEfector.Nombre, oRegistro.IdUsuario.IdUsuario, oRegistro.IdUsuario.Username); + } + } + } + private void MostrarEfectores() + { + DataTable dt; + //Cargo la tabla con valores de la base que luego guardare en el ViewState + if (ViewState["efectores"] == null) dt = LeerDatosEfector(); + else dt = ViewState["efectores"] as DataTable; + + //Si no tiene valores defino la estructura de la tabla + if (dt == null || dt.Columns.Count == 0) + { + dt = new DataTable(); + dt.Columns.Add("idUsuarioEfector", typeof(int)); + dt.Columns.Add("nombre", typeof(string)); + dt.Columns.Add("idEfector", typeof(int)); + } + + //le asigno clave primaria para despues poder buscar por este valor + dt.PrimaryKey = new DataColumn[] { dt.Columns["idEfector"] }; + ViewState["efectores"] = dt; + gvListaEfector.AutoGenerateColumns = false; + gvListaEfector.DataSource = dt; + gvListaEfector.DataBind(); + gvListaEfector.UpdateAfterCallBack = true; + + } + + + private void EliminarEfector(object idEfector) + { + bool puedeEliminar = true; + + lblMensajeEfector.Visible = false; + DataTable dt = ViewState["efectores"] as DataTable; + if(dt.Rows.Count > 1) + { + if (Request["id"] != null) + { + DataRow dr = dt.Rows.Find(idEfector); //Me traigo la fila para traer el idUsuarioEfector + int idUsuarioEfector = int.Parse(dr["idUsuarioEfector"].ToString()); + + if(idUsuarioEfector != 0) + { + UsuarioEfector oRegistro = new UsuarioEfector(); + oRegistro = (UsuarioEfector)oRegistro.Get(typeof(UsuarioEfector), idUsuarioEfector); + + if (oRegistro != null) + { + string s_efector = oRegistro.IdEfector.Nombre; + string s_username = oRegistro.IdUsuario.Username; + oRegistro.Delete(); + /////Auditoria + Usuario oAuditor = new Usuario(); + oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + oAuditor.GrabaAuditoria("DesVincula " + s_efector.TrimStart().TrimEnd(), int.Parse(Request["id"].ToString()), s_username); + } + } //else: esta solo en la visualizacion pero no en la base de datos + + } + + } + else + { + lblMensajeEfector.Visible = true; + lblMensajeEfector.Text = "Alerta: Debe tener al menos 1 efector asociado"; + lblMensajeEfector.UpdateAfterCallBack = true; + puedeEliminar = false; + } + + if (puedeEliminar) //lo borro del viewstate para mantener consistencia con lo que se va a guardar en la base + { + DataRow efectorEliminar = dt.Rows.Find(idEfector); //Lo busco para eliminarlo + dt.Rows.Remove(efectorEliminar); + ViewState["efectores"] = dt; + } + + } + + + + #endregion + } } diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs b/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs index 16e26a7c..d8c0b814 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs @@ -1,312 +1,350 @@ //------------------------------------------------------------------------------ -// -// This code was generated by a tool. +// +// Este código fue generado por una herramienta. // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// +// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si +// se vuelve a generar el código. +// //------------------------------------------------------------------------------ -namespace WebLab.Usuarios { - - - public partial class UsuarioEdit { - +namespace WebLab.Usuarios +{ + + + public partial class UsuarioEdit + { + /// - /// HFCurrTabIndex control. + /// Control HFCurrTabIndex. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.HiddenField HFCurrTabIndex; - + /// - /// txtApellido control. + /// Control txtApellido. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.TextBox txtApellido; - + /// - /// rfvApellido control. + /// Control rfvApellido. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.RequiredFieldValidator rfvApellido; - + /// - /// txtNombre control. + /// Control txtNombre. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.TextBox txtNombre; - + /// - /// rfvNombre control. + /// Control rfvNombre. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.RequiredFieldValidator rfvNombre; - + /// - /// txtFirmaValidacion control. + /// Control txtFirmaValidacion. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.TextBox txtFirmaValidacion; - + /// - /// email control. + /// Control email. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.HtmlControls.HtmlInputGenericControl email; - + /// - /// txtTelefono control. + /// Control txtTelefono. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.TextBox txtTelefono; - + /// - /// txtUsername control. + /// Control ddlTipoAutenticacion. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::System.Web.UI.WebControls.TextBox txtUsername; - + protected global::System.Web.UI.WebControls.DropDownList ddlTipoAutenticacion; + /// - /// rfvUsuario control. + /// Control txtUsername. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::System.Web.UI.WebControls.RequiredFieldValidator rfvUsuario; - + protected global::System.Web.UI.WebControls.TextBox txtUsername; + /// - /// customValidacionGeneral control. + /// Control rfvUsuario. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::System.Web.UI.WebControls.CustomValidator customValidacionGeneral; - + protected global::System.Web.UI.WebControls.RequiredFieldValidator rfvUsuario; + /// - /// customValidacionGeneral0 control. + /// Control customValidacionGeneral. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::System.Web.UI.WebControls.CustomValidator customValidacionGeneral0; - + protected global::System.Web.UI.WebControls.CustomValidator customValidacionGeneral; + /// - /// txtPassword control. + /// Control customValidacionGeneral0. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::System.Web.UI.WebControls.TextBox txtPassword; - + protected global::System.Web.UI.WebControls.CustomValidator customValidacionGeneral0; + /// - /// rfvPassword control. + /// Control customValidacionGeneral1. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::System.Web.UI.WebControls.RequiredFieldValidator rfvPassword; - + protected global::System.Web.UI.WebControls.CustomValidator customValidacionGeneral1; + /// - /// chkAdministrador control. + /// Control txtPassword. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::Anthem.CheckBox chkAdministrador; - + protected global::System.Web.UI.WebControls.TextBox txtPassword; + /// - /// ddlEfector control. + /// Control rfvPassword. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::Anthem.DropDownList ddlEfector; - + protected global::System.Web.UI.WebControls.RequiredFieldValidator rfvPassword; + /// - /// rvEfector control. + /// Control chkAdministrador. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::Anthem.RangeValidator rvEfector; - + protected global::Anthem.CheckBox chkAdministrador; + /// - /// ddlArea control. + /// Control ddlArea. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::Anthem.DropDownList ddlArea; - + /// - /// ddlPerfil control. + /// Control ddlPerfil. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::Anthem.DropDownList ddlPerfil; - + /// - /// rvPerfil control. + /// Control rvPerfil. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::Anthem.RangeValidator rvPerfil; - + /// - /// ddlEfectorDestino control. + /// Control ddlEfectorDestino. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::Anthem.DropDownList ddlEfectorDestino; - + /// - /// rvEfectorDestino control. + /// Control rvEfectorDestino. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::Anthem.RangeValidator rvEfectorDestino; - + /// - /// chkActivo control. + /// Control chkActivo. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.CheckBox chkActivo; - + /// - /// chkExterno control. + /// Control chkExterno. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.CheckBox chkExterno; - + /// - /// chkRequiereContrasenia control. + /// Control chkRequiereContrasenia. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.CheckBox chkRequiereContrasenia; - + + /// + /// Control customValidatorExterno. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.CustomValidator customValidatorExterno; + + /// + /// Control customValidatorEfector. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.CustomValidator customValidatorEfector; + /// - /// lnkRegresar control. + /// Control lnkRegresar. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.LinkButton lnkRegresar; - + /// - /// btnGuardar control. + /// Control btnGuardar. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Button btnGuardar; - + /// - /// ValidationSummary1 control. + /// Control ValidationSummary1. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1; - + /// - /// btnAuditoria control. + /// Control btnAuditoria. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Button btnAuditoria; - + /// - /// btnBlanquear control. + /// Control btnBlanquear. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Button btnBlanquear; - + /// - /// ddlEfector2 control. + /// Control ddlEfector3. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::Anthem.DropDownList ddlEfector2; - + protected global::System.Web.UI.WebControls.DropDownList ddlEfector3; + /// - /// btnAgregarEfector control. + /// Control btnAgregarEfector. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::Anthem.Button btnAgregarEfector; - + /// - /// gvListaEfector control. + /// Control lblMensajeEfector. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::Anthem.Label lblMensajeEfector; + + /// + /// Control gvListaEfector. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::Anthem.GridView gvListaEfector; + + /// + /// Control lnkRegresar1. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.LinkButton lnkRegresar1; } } diff --git a/WebLab/Usuarios/UsuarioList.aspx b/WebLab/Usuarios/UsuarioList.aspx index 443e7206..e76c95d2 100644 --- a/WebLab/Usuarios/UsuarioList.aspx +++ b/WebLab/Usuarios/UsuarioList.aspx @@ -2,125 +2,186 @@ - - + + + + + -
-
-
-

USUARIOS -

-
-
- -
-

Efector:

-
-
- - +
+ + + + +
+
+ +
+

USUARIOS +

+
+
+ + + + + + + + + + + + - + + + + + + + + + + + + + + + + - - - Exportar a Excel + + + +
Efector: + + Perfil: + +
Username: Tipo Autenticacion: + + + + +
Nombre: Apellido: +
Habilitados: + + + +
+ + Exportar a Excel    +    + + +
+ + -
- + +
+ +
+
+ - - - - - - \ No newline at end of file diff --git a/WebLab/Usuarios/UsuarioList.aspx.cs b/WebLab/Usuarios/UsuarioList.aspx.cs index 48802cc2..c2b2eea3 100644 --- a/WebLab/Usuarios/UsuarioList.aspx.cs +++ b/WebLab/Usuarios/UsuarioList.aspx.cs @@ -109,29 +109,53 @@ private void CargarListas() oUtil.CargarCombo(ddlEfector, m_ssql, "idEfector", "nombre"); if (nivelcentral) ddlEfector.Items.Insert(0, new ListItem("Todos", "0")); - + + m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) ORDER BY nombre"; + oUtil.CargarCombo(ddlPerfil, m_ssql, "idPerfil", "nombre"); + ddlPerfil.Items.Insert(0, new ListItem("Todos", "0")); + } private void CargarGrilla() { gvLista.AutoGenerateColumns = false; gvLista.DataSource = LeerDatos(); gvLista.DataBind(); + CurrentPageLabel.Text = "Página " + (gvLista.PageIndex+1) + " de " + gvLista.PageCount.ToString(); } private object LeerDatos() { string str_condicion = " where username!='adminapi'"; string m_strSQL = @"SELECT U.idUsuario, U.apellido, U.nombre, U.username, P.nombre AS perfil, E.nombre as efector , -case when U.activo=1 then 'Si' else 'No' end as habilitado, U.activo as activo +case when U.activo=1 then 'Si' else 'No' end as habilitado, U.activo as activo , tipoAutenticacion FROM Sys_Usuario AS U (nolock) INNER JOIN Sys_Perfil AS P (nolock) ON U.idPerfil = P.idPerfil inner join Sys_UsuarioEfector UE (nolock) on Ue.idusuario= U.idUsuario inner join - sys_efector as E (nolock) on Ue.idEfector= E.idEfector"; + sys_efector as E (nolock) on Ue.idEfector= E.idEfector + "; if (ddlEfector.SelectedValue != "0") str_condicion += " and E.idEfector=" + ddlEfector.SelectedValue.ToString(); - m_strSQL += str_condicion+ " order by username"; + if (ddlPerfil.SelectedValue != "0") + str_condicion += " and P.idPerfil=" + ddlPerfil.SelectedValue.ToString(); + if (ddlTipoAutenticacion.SelectedValue != "0") + str_condicion += " and tipoAutenticacion='" + ddlTipoAutenticacion.SelectedValue.ToString()+"'"; + if (ddlHabilitados.SelectedValue != "0") + if(ddlHabilitados.SelectedValue == "1") str_condicion += " and U.activo=1"; + else str_condicion += " and U.activo=0"; + + if (txtUsername.Text != "") + str_condicion += " and U.username LIKE '%" + txtUsername.Text + "%'"; + if (txtNombre.Text != "") + str_condicion += " and U.nombre LIKE '%" + txtNombre.Text +"%'"; + if (txtApellido.Text != "") + str_condicion += " and U.apellido LIKE '%" + txtApellido.Text +"%'"; + + if(chbAdministrador.Checked) + str_condicion += " and U.administrador=1"; + + m_strSQL += str_condicion + " order by username"; @@ -141,8 +165,8 @@ Sys_UsuarioEfector UE (nolock) on Ue.idusuario= U.idUsuario inner join SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(m_strSQL, conn); adapter.Fill(Ds); - - + CantidadRegistros.Text = Ds.Tables[0].Rows.Count.ToString() + " registros encontrados"; + return Ds.Tables[0]; } @@ -188,7 +212,7 @@ protected void gvLista_RowDataBound(object sender, GridViewRowEventArgs e) if (e.Row.RowType == DataControlRowType.DataRow) { - ImageButton CmdModificar = (ImageButton)e.Row.Cells[6].Controls[1]; + ImageButton CmdModificar = (ImageButton)e.Row.Cells[7].Controls[1]; CmdModificar.CommandArgument = this.gvLista.DataKeys[e.Row.RowIndex].Value.ToString(); CmdModificar.CommandName = "Modificar"; @@ -251,16 +275,32 @@ protected void lnkExcel_Click(object sender, EventArgs e) private DataTable LeerDatosExcel() { - string m_strFiltro = ""; + string m_strFiltro = "1=1 "; DataSet Ds = new DataSet(); // SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString); ///Performance: conexion de solo lectura SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; if (ddlEfector.SelectedValue != "0") - m_strFiltro = " E.idEfector=" + ddlEfector.SelectedValue.ToString(); - - + m_strFiltro += " AND E.idEfector=" + ddlEfector.SelectedValue.ToString(); + + + if (ddlPerfil.SelectedValue != "0") + m_strFiltro += " and P.idPerfil=" + ddlPerfil.SelectedValue.ToString(); + if (ddlTipoAutenticacion.SelectedValue != "0") + m_strFiltro += " and tipoAutenticacion='" + ddlTipoAutenticacion.SelectedValue.ToString() + "'"; + if (ddlHabilitados.SelectedValue != "0") + if (ddlHabilitados.SelectedValue == "1") m_strFiltro += " and U.activo=1"; + else m_strFiltro += " and U.activo=0"; + + if (txtUsername.Text != "") + m_strFiltro += " and U.username LIKE '%" + txtUsername.Text + "%'"; + if (txtNombre.Text != "") + m_strFiltro += " and U.nombre LIKE '%" + txtNombre.Text + "%'"; + if (txtApellido.Text != "") + m_strFiltro += " and U.apellido LIKE '%" + txtApellido.Text + "%'"; + if (chbAdministrador.Checked) + m_strFiltro += " and U.administrador=1"; cmd.CommandText = "[LAB_ListaUsuarios]"; @@ -308,5 +348,45 @@ private void dataTableAExcel(DataTable tabla, string nombreArchivo) Response.End(); } } + + protected void btnBuscar_Click(object sender, EventArgs e) + { + CargarGrilla(); + } + + protected void ddlPerfil_SelectedIndexChanged(object sender, EventArgs e) + { + CargarGrilla(); + } + + + + protected void gvLista_PageIndexChanging(object sender, GridViewPageEventArgs e) + { + if (Session["idUsuario"] != null) + { + gvLista.PageIndex = e.NewPageIndex; + int currentPage = gvLista.PageIndex + 1; + CurrentPageLabel.Text = "Página " + currentPage.ToString() + " de " + gvLista.PageCount.ToString(); + CargarGrilla(); + } + else + Response.Redirect("../FinSesion.aspx", false); + } + + protected void ddlTipoAutenticacion_SelectedIndexChanged(object sender, EventArgs e) + { + CargarGrilla(); + } + + protected void ddlHabilitados_SelectedIndexChanged(object sender, EventArgs e) + { + CargarGrilla(); + } + + protected void chbAdministrador_CheckedChanged(object sender, EventArgs e) + { + CargarGrilla(); + } } } diff --git a/WebLab/Usuarios/UsuarioList.aspx.designer.cs b/WebLab/Usuarios/UsuarioList.aspx.designer.cs index c6d3ef5f..730a6fd0 100644 --- a/WebLab/Usuarios/UsuarioList.aspx.designer.cs +++ b/WebLab/Usuarios/UsuarioList.aspx.designer.cs @@ -1,50 +1,160 @@ //------------------------------------------------------------------------------ -// -// This code was generated by a tool. +// +// Este código fue generado por una herramienta. // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// +// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si +// se vuelve a generar el código. +// //------------------------------------------------------------------------------ -namespace WebLab.Usuarios { - - - public partial class UsuarioList { - +namespace WebLab.Usuarios +{ + + + public partial class UsuarioList + { + /// - /// ddlEfector control. + /// Control pnlTitulo. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl pnlTitulo; + + /// + /// Control ddlEfector. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.DropDownList ddlEfector; - + /// - /// btnAgregar control. + /// Control ddlPerfil. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// - protected global::System.Web.UI.WebControls.Button btnAgregar; - + protected global::System.Web.UI.WebControls.DropDownList ddlPerfil; + + /// + /// Control txtUsername. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.TextBox txtUsername; + + /// + /// Control ddlTipoAutenticacion. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlTipoAutenticacion; + + /// + /// Control txtNombre. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.TextBox txtNombre; + + /// + /// Control txtApellido. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.TextBox txtApellido; + + /// + /// Control ddlHabilitados. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlHabilitados; + /// - /// lnkExcel control. + /// Control chbAdministrador. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.CheckBox chbAdministrador; + + /// + /// Control lnkExcel. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.LinkButton lnkExcel; - + + /// + /// Control btnBuscar. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Button btnBuscar; + + /// + /// Control btnAgregar. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Button btnAgregar; + + /// + /// Control pnlLista. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Panel pnlLista; + + /// + /// Control CantidadRegistros. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Label CantidadRegistros; + + /// + /// Control CurrentPageLabel. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Label CurrentPageLabel; + /// - /// gvLista control. + /// Control gvLista. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.GridView gvLista; } diff --git a/WebLab/WebLab.csproj b/WebLab/WebLab.csproj index 35044e51..e3c6e5f5 100644 --- a/WebLab/WebLab.csproj +++ b/WebLab/WebLab.csproj @@ -2678,6 +2678,14 @@ + + + + + + + + @@ -2705,6 +2713,7 @@ + @@ -3102,6 +3111,8 @@ + + diff --git a/WebLab/loginSIL.ascx b/WebLab/loginSIL.ascx index 5034c9b8..76136c9f 100644 --- a/WebLab/loginSIL.ascx +++ b/WebLab/loginSIL.ascx @@ -17,7 +17,7 @@ PasswordRequiredErrorMessage="Contraseña es requerida" TitleText="Nueva autenticación de usuario" UserNameLabelText="Usuario:" UserNameRequiredErrorMessage="Usuario es requerido" - > + FailureText="" >
@@ -61,3 +61,85 @@
+ + + + + + \ No newline at end of file diff --git a/WebLab/loginSIL.ascx.cs b/WebLab/loginSIL.ascx.cs index 63c66773..374a5b48 100644 --- a/WebLab/loginSIL.ascx.cs +++ b/WebLab/loginSIL.ascx.cs @@ -40,8 +40,6 @@ protected void Page_Load(object sender, EventArgs e) } } - ////else - } protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) @@ -60,9 +58,9 @@ protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) adapter.Fill(Ds); DataTable dtPermisos = Ds.Tables[0]; - if (dtPermisos.Rows.Count > 0) { - i_idusuario = int.Parse(dtPermisos.Rows[0][0].ToString()); - } + if (dtPermisos.Rows.Count > 0) { + i_idusuario = int.Parse(dtPermisos.Rows[0][0].ToString()); + } Usuario oUser = new Usuario(); @@ -71,6 +69,13 @@ protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) { oUser = (Usuario)oUser.Get(typeof(Usuario), i_idusuario); + if (MostrarTerminosCondiciones(oUser)) + { + Session["usuarioPendienteAceptacion"] = oUser; + ScriptManager.RegisterStartupScript(this, this.GetType(), "mostrarModal", "$('#modalTerminosCondiciones').modal('show');", true); + return; + } + } else { @@ -80,113 +85,7 @@ protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) } - /* Habilitar cuando se quiera autogestion de usuarios medicos - if (oUser == null) - AutenticarUsuarioLdap(Login1.UserName, Login1.Password); - */ - if (oUser != null) - { - if ((oUser.Activo)&&(oUser.IdPerfil.Activo)) - { - if ((oUser.Activo) && (oUser.Externo)) - { - Session["idUsuario"] = oUser.IdUsuario.ToString(); - Response.Redirect("~/Consulta/Historiaclinicafiltro.aspx", false); - - } - else - { - Session["idUsuarioValida"] = null; - - if (Request["Operacion"] == null) - {//////////////nuevo login - Session["SIL"] = "1"; - - if (oUser.RequiereCambioPass) - Response.Redirect("~/Usuarios/PasswordEdit2.aspx?idUsuario="+ oUser.IdUsuario.ToString(), false); - - else - { - Session["idUsuarioAux"] = oUser.IdUsuario.ToString(); - Response.Redirect("LoginEfector.aspx", false); - - //Session["idUsuario"] = oUser.IdUsuario.ToString(); - //Response.Redirect("Default.aspx", false); - } - } - else - {///////////////validacion - if (Request["idCasoFiliacion"] != null) - { - - - if ((Request["idServicio"].ToString() == "6") && (VerificarSiTienePermisodeValidar(oUser.Username, "/CasoFiliacion/CasoResultado.aspx"))) - { - //HttpContext Context; - //Context = HttpContext.Current; - //Context.Items.Add("id", Request["idCasoFiliacion"].ToString()); - Session["idUsuarioValida"] = oUser.IdUsuario.ToString(); - //Context.Items.Add("Desde", "Valida"); - //Server.Transfer("~/CasoFiliacion/CasoResultado.aspx"); - - Response.Redirect("~/casoFiliacion/CasoResultado3.aspx?id=" + Request["idCasoFiliacion"].ToString()+ "&Desde=Valida&logIn=1"); - - - } - if ((Request["idServicio"].ToString() == "3") && (VerificarSiTienePermisodeValidar(oUser.Username, "/CasoFiliacion/CasoResultadoHisto.aspx"))) - { - //HttpContext Context2; - //Context2 = HttpContext.Current; - //Context2.Items.Add("id", Request["idCasoFiliacion"].ToString()); - Session["idUsuarioValida"] = oUser.IdUsuario.ToString(); - //Context2.Items.Add("Desde", "Valida"); - //Server.Transfer("~/CasoFiliacion/CasoResultadoHisto.aspx"); - - Response.Redirect("~/CasoFiliacion/CasoResultadoHisto.aspx?id=" + Request["idCasoFiliacion"].ToString() + "&Desde=Valida&logIn=1", false); - - } - - } - else - { - string idServicio = Request["idServicio"].ToString(); - string operacion = Request["Operacion"].ToString(); - string modo = Request["modo"].ToString(); - if (VerificarSiTienePermisodeValidar(oUser.Username, "/Resultados/ResultadoBusqueda.aspx?idServicio=" + idServicio + "&Operacion=" + operacion + "&modo=" + modo)) - { - Session["idUsuarioValida"] = oUser.IdUsuario.ToString(); - if (Request["urgencia"] != null) - { - - string sredirect = "~/resultados/ResultadoEdit2.aspx?idServicio=1&Operacion=Valida&idProtocolo=" + Request["idProtocolo"].ToString() + "&Index=0&Parametros=" + Request["idProtocolo"].ToString() + "&idArea=0&urgencia=1&validado=0&modo=Urgencia"; //&idUsuarioValida=" + oUser.IdUsuario.ToString(); - if (Request["desde"] != null) - sredirect += "&desde=" + Request["desde"].ToString(); - Response.Redirect(sredirect, false); - // Response.Redirect("~/Resultados/ResultadoBusqueda.aspx?idServicio=" + idServicio + "&Operacion=" + operacion + "&modo=" + modo + "&idUsuarioValida=" + oUser.IdUsuario, false); - } - else - Response.Redirect("~/Resultados/ResultadoBusqueda.aspx?idServicio=" + idServicio + "&Operacion=" + operacion + "&modo=" + modo + "&logIn=1", false);// + "&idUsuarioValida=" + oUser.IdUsuario, false); - } - else - { - e.Authenticated = false; - Login1.FailureText = "El usuario no tiene permisos para validar."; - } - } - }//fin else casofi - }//externo - }//activo - else - { - e.Authenticated = false; - Login1.FailureText = "El usuario no está activo por inactividad."; - } - } - else - { - e.Authenticated = false; - Login1.FailureText = "El usuario y/o contraseña no son correctos."; - } + IngresoSistema(oUser, e); } @@ -327,5 +226,173 @@ FROM Sys_Menu AS M INNER JOIN return b_permiso; } } + + private void IngresoSistema(Usuario oUser, AuthenticateEventArgs e) + { + + /* Habilitar cuando se quiera autogestion de usuarios medicos + if (oUser == null) + AutenticarUsuarioLdap(Login1.UserName, Login1.Password); + */ + if (oUser != null) + { + if ((oUser.Activo) && (oUser.IdPerfil.Activo)) + { + if ((oUser.Activo) && (oUser.Externo)) + { + Session["idUsuario"] = oUser.IdUsuario.ToString(); + Response.Redirect("~/Consulta/Historiaclinicafiltro.aspx", false); + + } + else + { + Session["idUsuarioValida"] = null; + + if (Request["Operacion"] == null) + {//////////////nuevo login + Session["SIL"] = "1"; + + if (oUser.RequiereCambioPass) + Response.Redirect("~/Usuarios/PasswordEdit2.aspx?idUsuario=" + oUser.IdUsuario.ToString(), false); + + else + { + Session["idUsuarioAux"] = oUser.IdUsuario.ToString(); + Response.Redirect("LoginEfector.aspx", false); + + //Session["idUsuario"] = oUser.IdUsuario.ToString(); + //Response.Redirect("Default.aspx", false); + } + } + else + {///////////////validacion + if (Request["idCasoFiliacion"] != null) + { + + + if ((Request["idServicio"].ToString() == "6") && (VerificarSiTienePermisodeValidar(oUser.Username, "/CasoFiliacion/CasoResultado.aspx"))) + { + //HttpContext Context; + //Context = HttpContext.Current; + //Context.Items.Add("id", Request["idCasoFiliacion"].ToString()); + Session["idUsuarioValida"] = oUser.IdUsuario.ToString(); + //Context.Items.Add("Desde", "Valida"); + //Server.Transfer("~/CasoFiliacion/CasoResultado.aspx"); + + Response.Redirect("~/casoFiliacion/CasoResultado3.aspx?id=" + Request["idCasoFiliacion"].ToString() + "&Desde=Valida&logIn=1"); + + + } + if ((Request["idServicio"].ToString() == "3") && (VerificarSiTienePermisodeValidar(oUser.Username, "/CasoFiliacion/CasoResultadoHisto.aspx"))) + { + //HttpContext Context2; + //Context2 = HttpContext.Current; + //Context2.Items.Add("id", Request["idCasoFiliacion"].ToString()); + Session["idUsuarioValida"] = oUser.IdUsuario.ToString(); + //Context2.Items.Add("Desde", "Valida"); + //Server.Transfer("~/CasoFiliacion/CasoResultadoHisto.aspx"); + + Response.Redirect("~/CasoFiliacion/CasoResultadoHisto.aspx?id=" + Request["idCasoFiliacion"].ToString() + "&Desde=Valida&logIn=1", false); + + } + + } + else + { + string idServicio = Request["idServicio"].ToString(); + string operacion = Request["Operacion"].ToString(); + string modo = Request["modo"].ToString(); + if (VerificarSiTienePermisodeValidar(oUser.Username, "/Resultados/ResultadoBusqueda.aspx?idServicio=" + idServicio + "&Operacion=" + operacion + "&modo=" + modo)) + { + Session["idUsuarioValida"] = oUser.IdUsuario.ToString(); + if (Request["urgencia"] != null) + { + + string sredirect = "~/resultados/ResultadoEdit2.aspx?idServicio=1&Operacion=Valida&idProtocolo=" + Request["idProtocolo"].ToString() + "&Index=0&Parametros=" + Request["idProtocolo"].ToString() + "&idArea=0&urgencia=1&validado=0&modo=Urgencia"; //&idUsuarioValida=" + oUser.IdUsuario.ToString(); + if (Request["desde"] != null) + sredirect += "&desde=" + Request["desde"].ToString(); + Response.Redirect(sredirect, false); + // Response.Redirect("~/Resultados/ResultadoBusqueda.aspx?idServicio=" + idServicio + "&Operacion=" + operacion + "&modo=" + modo + "&idUsuarioValida=" + oUser.IdUsuario, false); + } + else + Response.Redirect("~/Resultados/ResultadoBusqueda.aspx?idServicio=" + idServicio + "&Operacion=" + operacion + "&modo=" + modo + "&logIn=1", false);// + "&idUsuarioValida=" + oUser.IdUsuario, false); + } + else + { + e.Authenticated = false; + Login1.FailureText = "El usuario no tiene permisos para validar."; + } + } + }//fin else casofi + }//externo + }//activo + else + { + e.Authenticated = false; + Login1.FailureText = "El usuario no está activo por inactividad."; + } + } + else + { + e.Authenticated = false; + Login1.FailureText = "El usuario y/o contraseña no son correctos."; + } + + lblMensajeError.Text = Login1.FailureText; + Login1.FailureText = ""; //Muestro solo lblMensajeError, ya que Login1.FailureText solo sirve para Login1_Authenticate y no para btn_aceptarTerminosCondiciones_Click + } + protected void btn_aceptarTerminosCondiciones_Click(object sender, EventArgs e) + { + Usuario oUser = (Usuario) Session["usuarioPendienteAceptacion"]; + + if (oUser != null) + { + Session["usuarioPendienteAceptacion"] = null; + //Actualizar la fecha en la bd + oUser.FechaAceptaTerminosCondiciones = DateTime.Now; + oUser.Save(); + //Actualizo acceso en log + CrearLogAcceso(oUser); + //Ingreso al sistema + AuthenticateEventArgs evento = new AuthenticateEventArgs(true); + IngresoSistema(oUser, evento); + } + else + { + Response.Redirect("Logout.aspx", true); + } + } + private void CrearLogAcceso(Usuario oUser) + { + LogAccesoTerminosCondiciones RegistroAcceso = new LogAccesoTerminosCondiciones(); + RegistroAcceso.IdUsuario = oUser.IdUsuario; + RegistroAcceso.Fecha = DateTime.Now; + RegistroAcceso.Save(); + } + + private bool MostrarTerminosCondiciones(Usuario oUser) + { + int dias = Convert.ToInt32(ConfigurationManager.AppSettings["DiasTerminosCondiciones"]); + if(dias > 0) + { + DateTime ultimaFecha = oUser.FechaAceptaTerminosCondiciones; + DateTime hoy = DateTime.Now; + + TimeSpan diferencia = hoy.Subtract(ultimaFecha); + int diferenciasDias = diferencia.Days; + + if (diferenciasDias > dias) + return true; + else + return false; + } + else + { + ScriptManager.RegisterStartupScript(this, this.GetType(), "error", "alert('❌ No hay dias definidos para los terminos y condiciones');", true); + return true; + } + + + } } } \ No newline at end of file diff --git a/WebLab/loginSIL.ascx.designer.cs b/WebLab/loginSIL.ascx.designer.cs index c841dfbd..98c1b50e 100644 --- a/WebLab/loginSIL.ascx.designer.cs +++ b/WebLab/loginSIL.ascx.designer.cs @@ -1,25 +1,53 @@ //------------------------------------------------------------------------------ -// -// This code was generated by a tool. +// +// Este código fue generado por una herramienta. // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// +// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si +// se vuelve a generar el código. +// //------------------------------------------------------------------------------ -namespace WebLab { - - +namespace WebLab +{ + + public partial class loginSIL { - + /// - /// Login1 control. + /// Control Login1. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Login Login1; + + /// + /// Control lblMensajeError. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Label lblMensajeError; + + /// + /// Control cb_aceptaTerminos. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.CheckBox cb_aceptaTerminos; + + /// + /// Control btn_aceptarTerminosCondiciones. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Button btn_aceptarTerminosCondiciones; } } diff --git a/WebLab/script/chosen/LICENSE.md b/WebLab/script/chosen/LICENSE.md new file mode 100644 index 00000000..5e1332c1 --- /dev/null +++ b/WebLab/script/chosen/LICENSE.md @@ -0,0 +1,23 @@ +#### Chosen +- by Patrick Filler for [Harvest](http://getharvest.com) +- Copyright (c) 2011-2016 by Harvest + +Available for use under the [MIT License](http://en.wikipedia.org/wiki/MIT_License) + +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. diff --git a/WebLab/script/chosen/chosen-sprite.png b/WebLab/script/chosen/chosen-sprite.png new file mode 100644 index 00000000..c57da70b Binary files /dev/null and b/WebLab/script/chosen/chosen-sprite.png differ diff --git a/WebLab/script/chosen/chosen-sprite@2x.png b/WebLab/script/chosen/chosen-sprite@2x.png new file mode 100644 index 00000000..6b505452 Binary files /dev/null and b/WebLab/script/chosen/chosen-sprite@2x.png differ diff --git a/WebLab/script/chosen/chosen.css b/WebLab/script/chosen/chosen.css new file mode 100644 index 00000000..5ae6fc94 --- /dev/null +++ b/WebLab/script/chosen/chosen.css @@ -0,0 +1,496 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.8.7 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2018 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +/* @group Base */ +.chosen-container { + position: relative; + display: inline-block; + vertical-align: middle; + font-size: 13px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.chosen-container * { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.chosen-container .chosen-drop { + position: absolute; + top: 100%; + z-index: 1010; + width: 100%; + border: 1px solid #aaa; + border-top: 0; + background: #fff; + -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15); + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15); + clip: rect(0, 0, 0, 0); + -webkit-clip-path: inset(100% 100%); + clip-path: inset(100% 100%); +} + +.chosen-container.chosen-with-drop .chosen-drop { + clip: auto; + -webkit-clip-path: none; + clip-path: none; +} + +.chosen-container a { + cursor: pointer; +} + +.chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name { + margin-right: 4px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-weight: normal; + color: #999999; +} + +.chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after { + content: ":"; + padding-left: 2px; + vertical-align: top; +} + +/* @end */ +/* @group Single Chosen */ +.chosen-container-single .chosen-single { + position: relative; + display: block; + overflow: hidden; + padding: 0 0 0 8px; + height: 25px; + border: 1px solid #aaa; + border-radius: 5px; + background-color: #fff; + background: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #fff), color-stop(50%, #f6f6f6), color-stop(52%, #eee), to(#f4f4f4)); + background: linear-gradient(#fff 20%, #f6f6f6 50%, #eee 52%, #f4f4f4 100%); + background-clip: padding-box; + -webkit-box-shadow: 0 0 3px #fff inset, 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 3px #fff inset, 0 1px 1px rgba(0, 0, 0, 0.1); + color: #444; + text-decoration: none; + white-space: nowrap; + line-height: 24px; +} + +.chosen-container-single .chosen-default { + color: #999; +} + +.chosen-container-single .chosen-single span { + display: block; + overflow: hidden; + margin-right: 26px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chosen-container-single .chosen-single-with-deselect span { + margin-right: 38px; +} + +.chosen-container-single .chosen-single abbr { + position: absolute; + top: 6px; + right: 26px; + display: block; + width: 12px; + height: 12px; + background: url("chosen-sprite.png") -42px 1px no-repeat; + font-size: 1px; +} + +.chosen-container-single .chosen-single abbr:hover { + background-position: -42px -10px; +} + +.chosen-container-single.chosen-disabled .chosen-single abbr:hover { + background-position: -42px -10px; +} + +.chosen-container-single .chosen-single div { + position: absolute; + top: 0; + right: 0; + display: block; + width: 18px; + height: 100%; +} + +.chosen-container-single .chosen-single div b { + display: block; + width: 100%; + height: 100%; + background: url("chosen-sprite.png") no-repeat 0px 2px; +} + +.chosen-container-single .chosen-search { + position: relative; + z-index: 1010; + margin: 0; + padding: 3px 4px; + white-space: nowrap; +} + +.chosen-container-single .chosen-search input[type="text"] { + margin: 1px 0; + padding: 4px 20px 4px 5px; + width: 100%; + height: auto; + outline: 0; + border: 1px solid #aaa; + background: url("chosen-sprite.png") no-repeat 100% -20px; + font-size: 1em; + font-family: sans-serif; + line-height: normal; + border-radius: 0; +} + +.chosen-container-single .chosen-drop { + margin-top: -1px; + border-radius: 0 0 4px 4px; + background-clip: padding-box; +} + +.chosen-container-single.chosen-container-single-nosearch .chosen-search { + position: absolute; + clip: rect(0, 0, 0, 0); + -webkit-clip-path: inset(100% 100%); + clip-path: inset(100% 100%); +} + +/* @end */ +/* @group Results */ +.chosen-container .chosen-results { + color: #444; + position: relative; + overflow-x: hidden; + overflow-y: auto; + margin: 0 4px 4px 0; + padding: 0 0 0 4px; + max-height: 240px; + -webkit-overflow-scrolling: touch; +} + +.chosen-container .chosen-results li { + display: none; + margin: 0; + padding: 5px 6px; + list-style: none; + line-height: 15px; + word-wrap: break-word; + -webkit-touch-callout: none; +} + +.chosen-container .chosen-results li.active-result { + display: list-item; + cursor: pointer; +} + +.chosen-container .chosen-results li.disabled-result { + display: list-item; + color: #ccc; + cursor: default; +} + +.chosen-container .chosen-results li.highlighted { + background-color: #3875d7; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); + background-image: linear-gradient(#3875d7 20%, #2a62bc 90%); + color: #fff; +} + +.chosen-container .chosen-results li.no-results { + color: #777; + display: list-item; + background: #f4f4f4; +} + +.chosen-container .chosen-results li.group-result { + display: list-item; + font-weight: bold; + cursor: default; +} + +.chosen-container .chosen-results li.group-option { + padding-left: 15px; +} + +.chosen-container .chosen-results li em { + font-style: normal; + text-decoration: underline; +} + +/* @end */ +/* @group Multi Chosen */ +.chosen-container-multi .chosen-choices { + position: relative; + overflow: hidden; + margin: 0; + padding: 0 5px; + width: 100%; + height: auto; + border: 1px solid #aaa; + background-color: #fff; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(1%, #eee), color-stop(15%, #fff)); + background-image: linear-gradient(#eee 1%, #fff 15%); + cursor: text; +} + +.chosen-container-multi .chosen-choices li { + float: left; + list-style: none; +} + +.chosen-container-multi .chosen-choices li.search-field { + margin: 0; + padding: 0; + white-space: nowrap; +} + +.chosen-container-multi .chosen-choices li.search-field input[type="text"] { + margin: 1px 0; + padding: 0; + height: 25px; + outline: 0; + border: 0 !important; + background: transparent !important; + -webkit-box-shadow: none; + box-shadow: none; + color: #999; + font-size: 100%; + font-family: sans-serif; + line-height: normal; + border-radius: 0; + width: 25px; +} + +.chosen-container-multi .chosen-choices li.search-choice { + position: relative; + margin: 3px 5px 3px 0; + padding: 3px 20px 3px 5px; + border: 1px solid #aaa; + max-width: 100%; + border-radius: 3px; + background-color: #eeeeee; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), to(#eee)); + background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-size: 100% 19px; + background-repeat: repeat-x; + background-clip: padding-box; + -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); + box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); + color: #333; + line-height: 13px; + cursor: default; +} + +.chosen-container-multi .chosen-choices li.search-choice span { + word-wrap: break-word; +} + +.chosen-container-multi .chosen-choices li.search-choice .search-choice-close { + position: absolute; + top: 4px; + right: 3px; + display: block; + width: 12px; + height: 12px; + background: url("chosen-sprite.png") -42px 1px no-repeat; + font-size: 1px; +} + +.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover { + background-position: -42px -10px; +} + +.chosen-container-multi .chosen-choices li.search-choice-disabled { + padding-right: 5px; + border: 1px solid #ccc; + background-color: #e4e4e4; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), to(#eee)); + background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + color: #666; +} + +.chosen-container-multi .chosen-choices li.search-choice-focus { + background: #d4d4d4; +} + +.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close { + background-position: -42px -10px; +} + +.chosen-container-multi .chosen-results { + margin: 0; + padding: 0; +} + +.chosen-container-multi .chosen-drop .result-selected { + display: list-item; + color: #ccc; + cursor: default; +} + +/* @end */ +/* @group Active */ +.chosen-container-active .chosen-single { + border: 1px solid #5897fb; + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); +} + +.chosen-container-active.chosen-with-drop .chosen-single { + border: 1px solid #aaa; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #eee), color-stop(80%, #fff)); + background-image: linear-gradient(#eee 20%, #fff 80%); + -webkit-box-shadow: 0 1px 0 #fff inset; + box-shadow: 0 1px 0 #fff inset; +} + +.chosen-container-active.chosen-with-drop .chosen-single div { + border-left: none; + background: transparent; +} + +.chosen-container-active.chosen-with-drop .chosen-single div b { + background-position: -18px 2px; +} + +.chosen-container-active .chosen-choices { + border: 1px solid #5897fb; + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); +} + +.chosen-container-active .chosen-choices li.search-field input[type="text"] { + color: #222 !important; +} + +/* @end */ +/* @group Disabled Support */ +.chosen-disabled { + opacity: 0.5 !important; + cursor: default; +} + +.chosen-disabled .chosen-single { + cursor: default; +} + +.chosen-disabled .chosen-choices .search-choice .search-choice-close { + cursor: default; +} + +/* @end */ +/* @group Right to Left */ +.chosen-rtl { + text-align: right; +} + +.chosen-rtl .chosen-single { + overflow: visible; + padding: 0 8px 0 0; +} + +.chosen-rtl .chosen-single span { + margin-right: 0; + margin-left: 26px; + direction: rtl; +} + +.chosen-rtl .chosen-single-with-deselect span { + margin-left: 38px; +} + +.chosen-rtl .chosen-single div { + right: auto; + left: 3px; +} + +.chosen-rtl .chosen-single abbr { + right: auto; + left: 26px; +} + +.chosen-rtl .chosen-choices li { + float: right; +} + +.chosen-rtl .chosen-choices li.search-field input[type="text"] { + direction: rtl; +} + +.chosen-rtl .chosen-choices li.search-choice { + margin: 3px 5px 3px 0; + padding: 3px 5px 3px 19px; +} + +.chosen-rtl .chosen-choices li.search-choice .search-choice-close { + right: auto; + left: 4px; +} + +.chosen-rtl.chosen-container-single .chosen-results { + margin: 0 0 4px 4px; + padding: 0 4px 0 0; +} + +.chosen-rtl .chosen-results li.group-option { + padding-right: 15px; + padding-left: 0; +} + +.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div { + border-right: none; +} + +.chosen-rtl .chosen-search input[type="text"] { + padding: 4px 5px 4px 20px; + background: url("chosen-sprite.png") no-repeat -30px -20px; + direction: rtl; +} + +.chosen-rtl.chosen-container-single .chosen-single div b { + background-position: 6px 2px; +} + +.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b { + background-position: -12px 2px; +} + +/* @end */ +/* @group Retina compatibility */ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) { + .chosen-rtl .chosen-search input[type="text"], + .chosen-container-single .chosen-single abbr, + .chosen-container-single .chosen-single div b, + .chosen-container-single .chosen-search input[type="text"], + .chosen-container-multi .chosen-choices .search-choice .search-choice-close, + .chosen-container .chosen-results-scroll-down span, + .chosen-container .chosen-results-scroll-up span { + background-image: url("chosen-sprite@2x.png") !important; + background-size: 52px 37px !important; + background-repeat: no-repeat !important; + } +} + +/* @end */ diff --git a/WebLab/script/chosen/chosen.jquery.js b/WebLab/script/chosen/chosen.jquery.js new file mode 100644 index 00000000..5f2df671 --- /dev/null +++ b/WebLab/script/chosen/chosen.jquery.js @@ -0,0 +1,1359 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.8.7 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2018 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +(function() { + var $, AbstractChosen, Chosen, SelectParser, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + + SelectParser.prototype.add_node = function(child) { + if (child.nodeName.toUpperCase() === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + + SelectParser.prototype.add_group = function(group) { + var group_position, i, len, option, ref, results1; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: group.label, + title: group.title ? group.title : void 0, + children: 0, + disabled: group.disabled, + classes: group.className + }); + ref = group.childNodes; + results1 = []; + for (i = 0, len = ref.length; i < len; i++) { + option = ref[i]; + results1.push(this.add_option(option, group_position, group.disabled)); + } + return results1; + }; + + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName.toUpperCase() === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + title: option.title ? option.title : void 0, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position, + group_label: group_position != null ? this.parsed[group_position].label : null, + classes: option.className, + style: option.style.cssText + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + + return SelectParser; + + })(); + + SelectParser.select_to_array = function(select) { + var child, i, len, parser, ref; + parser = new SelectParser(); + ref = select.childNodes; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + parser.add_node(child); + } + return parser.parsed; + }; + + AbstractChosen = (function() { + function AbstractChosen(form_field, options1) { + this.form_field = form_field; + this.options = options1 != null ? options1 : {}; + this.label_click_handler = bind(this.label_click_handler, this); + if (!AbstractChosen.browser_is_supported()) { + return; + } + this.is_multiple = this.form_field.multiple; + this.set_default_text(); + this.set_default_values(); + this.setup(); + this.set_up_html(); + this.register_observers(); + this.on_ready(); + } + + AbstractChosen.prototype.set_default_values = function() { + this.click_test_action = (function(_this) { + return function(evt) { + return _this.test_active_click(evt); + }; + })(this); + this.activate_action = (function(_this) { + return function(evt) { + return _this.activate_field(evt); + }; + })(this); + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.is_rtl = this.options.rtl || /\bchosen-rtl\b/.test(this.form_field.className); + this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; + this.disable_search_threshold = this.options.disable_search_threshold || 0; + this.disable_search = this.options.disable_search || false; + this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; + this.group_search = this.options.group_search != null ? this.options.group_search : true; + this.search_contains = this.options.search_contains || false; + this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; + this.max_selected_options = this.options.max_selected_options || Infinity; + this.inherit_select_classes = this.options.inherit_select_classes || false; + this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; + this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; + this.include_group_label_in_selected = this.options.include_group_label_in_selected || false; + this.max_shown_results = this.options.max_shown_results || Number.POSITIVE_INFINITY; + this.case_sensitive_search = this.options.case_sensitive_search || false; + return this.hide_results_on_select = this.options.hide_results_on_select != null ? this.options.hide_results_on_select : true; + }; + + AbstractChosen.prototype.set_default_text = function() { + if (this.form_field.getAttribute("data-placeholder")) { + this.default_text = this.form_field.getAttribute("data-placeholder"); + } else if (this.is_multiple) { + this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; + } + this.default_text = this.escape_html(this.default_text); + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; + }; + + AbstractChosen.prototype.choice_label = function(item) { + if (this.include_group_label_in_selected && (item.group_label != null)) { + return "" + (this.escape_html(item.group_label)) + "" + item.html; + } else { + return item.html; + } + }; + + AbstractChosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + + AbstractChosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + + AbstractChosen.prototype.input_focus = function(evt) { + if (this.is_multiple) { + if (!this.active_field) { + return setTimeout(((function(_this) { + return function() { + return _this.container_mousedown(); + }; + })(this)), 50); + } + } else { + if (!this.active_field) { + return this.activate_field(); + } + } + }; + + AbstractChosen.prototype.input_blur = function(evt) { + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout(((function(_this) { + return function() { + return _this.blur_test(); + }; + })(this)), 100); + } + }; + + AbstractChosen.prototype.label_click_handler = function(evt) { + if (this.is_multiple) { + return this.container_mousedown(evt); + } else { + return this.activate_field(); + } + }; + + AbstractChosen.prototype.results_option_build = function(options) { + var content, data, data_content, i, len, ref, shown_results; + content = ''; + shown_results = 0; + ref = this.results_data; + for (i = 0, len = ref.length; i < len; i++) { + data = ref[i]; + data_content = ''; + if (data.group) { + data_content = this.result_add_group(data); + } else { + data_content = this.result_add_option(data); + } + if (data_content !== '') { + shown_results++; + content += data_content; + } + if (options != null ? options.first : void 0) { + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.single_set_selected_text(this.choice_label(data)); + } + } + if (shown_results >= this.max_shown_results) { + break; + } + } + return content; + }; + + AbstractChosen.prototype.result_add_option = function(option) { + var classes, option_el; + if (!option.search_match) { + return ''; + } + if (!this.include_option_in_results(option)) { + return ''; + } + classes = []; + if (!option.disabled && !(option.selected && this.is_multiple)) { + classes.push("active-result"); + } + if (option.disabled && !(option.selected && this.is_multiple)) { + classes.push("disabled-result"); + } + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + if (option.classes !== "") { + classes.push(option.classes); + } + option_el = document.createElement("li"); + option_el.className = classes.join(" "); + if (option.style) { + option_el.style.cssText = option.style; + } + option_el.setAttribute("data-option-array-index", option.array_index); + option_el.innerHTML = option.highlighted_html || option.html; + if (option.title) { + option_el.title = option.title; + } + return this.outerHTML(option_el); + }; + + AbstractChosen.prototype.result_add_group = function(group) { + var classes, group_el; + if (!(group.search_match || group.group_match)) { + return ''; + } + if (!(group.active_options > 0)) { + return ''; + } + classes = []; + classes.push("group-result"); + if (group.classes) { + classes.push(group.classes); + } + group_el = document.createElement("li"); + group_el.className = classes.join(" "); + group_el.innerHTML = group.highlighted_html || this.escape_html(group.label); + if (group.title) { + group_el.title = group.title; + } + return this.outerHTML(group_el); + }; + + AbstractChosen.prototype.results_update_field = function() { + this.set_default_text(); + if (!this.is_multiple) { + this.results_reset_cleanup(); + } + this.result_clear_highlight(); + this.results_build(); + if (this.results_showing) { + return this.winnow_results(); + } + }; + + AbstractChosen.prototype.reset_single_select_options = function() { + var i, len, ref, result, results1; + ref = this.results_data; + results1 = []; + for (i = 0, len = ref.length; i < len; i++) { + result = ref[i]; + if (result.selected) { + results1.push(result.selected = false); + } else { + results1.push(void 0); + } + } + return results1; + }; + + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.winnow_results = function(options) { + var escapedQuery, fix, i, len, option, prefix, query, ref, regex, results, results_group, search_match, startpos, suffix, text; + this.no_results_clear(); + results = 0; + query = this.get_search_text(); + escapedQuery = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + regex = this.get_search_regex(escapedQuery); + ref = this.results_data; + for (i = 0, len = ref.length; i < len; i++) { + option = ref[i]; + option.search_match = false; + results_group = null; + search_match = null; + option.highlighted_html = ''; + if (this.include_option_in_results(option)) { + if (option.group) { + option.group_match = false; + option.active_options = 0; + } + if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { + results_group = this.results_data[option.group_array_index]; + if (results_group.active_options === 0 && results_group.search_match) { + results += 1; + } + results_group.active_options += 1; + } + text = option.group ? option.label : option.text; + if (!(option.group && !this.group_search)) { + search_match = this.search_string_match(text, regex); + option.search_match = search_match != null; + if (option.search_match && !option.group) { + results += 1; + } + if (option.search_match) { + if (query.length) { + startpos = search_match.index; + prefix = text.slice(0, startpos); + fix = text.slice(startpos, startpos + query.length); + suffix = text.slice(startpos + query.length); + option.highlighted_html = (this.escape_html(prefix)) + "" + (this.escape_html(fix)) + "" + (this.escape_html(suffix)); + } + if (results_group != null) { + results_group.group_match = true; + } + } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { + option.search_match = true; + } + } + } + } + this.result_clear_highlight(); + if (results < 1 && query.length) { + this.update_results_content(""); + return this.no_results(query); + } else { + this.update_results_content(this.results_option_build()); + if (!(options != null ? options.skip_highlight : void 0)) { + return this.winnow_results_set_highlight(); + } + } + }; + + AbstractChosen.prototype.get_search_regex = function(escaped_search_string) { + var regex_flag, regex_string; + regex_string = this.search_contains ? escaped_search_string : "(^|\\s|\\b)" + escaped_search_string + "[^\\s]*"; + if (!(this.enable_split_word_search || this.search_contains)) { + regex_string = "^" + regex_string; + } + regex_flag = this.case_sensitive_search ? "" : "i"; + return new RegExp(regex_string, regex_flag); + }; + + AbstractChosen.prototype.search_string_match = function(search_string, regex) { + var match; + match = regex.exec(search_string); + if (!this.search_contains && (match != null ? match[1] : void 0)) { + match.index += 1; + } + return match; + }; + + AbstractChosen.prototype.choices_count = function() { + var i, len, option, ref; + if (this.selected_option_count != null) { + return this.selected_option_count; + } + this.selected_option_count = 0; + ref = this.form_field.options; + for (i = 0, len = ref.length; i < len; i++) { + option = ref[i]; + if (option.selected) { + this.selected_option_count += 1; + } + } + return this.selected_option_count; + }; + + AbstractChosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + this.activate_field(); + if (!(this.results_showing || this.is_disabled)) { + return this.results_show(); + } + }; + + AbstractChosen.prototype.keydown_checker = function(evt) { + var ref, stroke; + stroke = (ref = evt.which) != null ? ref : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.get_search_field_value().length; + break; + case 9: + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } + this.mouse_on_container = false; + break; + case 13: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 27: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 32: + if (this.disable_search) { + evt.preventDefault(); + } + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + evt.preventDefault(); + this.keydown_arrow(); + break; + } + }; + + AbstractChosen.prototype.keyup_checker = function(evt) { + var ref, stroke; + stroke = (ref = evt.which) != null ? ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { + this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + this.results_hide(); + } + break; + case 9: + case 16: + case 17: + case 18: + case 38: + case 40: + case 91: + break; + default: + this.results_search(); + break; + } + }; + + AbstractChosen.prototype.clipboard_event_checker = function(evt) { + if (this.is_disabled) { + return; + } + return setTimeout(((function(_this) { + return function() { + return _this.results_search(); + }; + })(this)), 50); + }; + + AbstractChosen.prototype.container_width = function() { + if (this.options.width != null) { + return this.options.width; + } else { + return this.form_field.offsetWidth + "px"; + } + }; + + AbstractChosen.prototype.include_option_in_results = function(option) { + if (this.is_multiple && (!this.display_selected_options && option.selected)) { + return false; + } + if (!this.display_disabled_options && option.disabled) { + return false; + } + if (option.empty) { + return false; + } + return true; + }; + + AbstractChosen.prototype.search_results_touchstart = function(evt) { + this.touch_started = true; + return this.search_results_mouseover(evt); + }; + + AbstractChosen.prototype.search_results_touchmove = function(evt) { + this.touch_started = false; + return this.search_results_mouseout(evt); + }; + + AbstractChosen.prototype.search_results_touchend = function(evt) { + if (this.touch_started) { + return this.search_results_mouseup(evt); + } + }; + + AbstractChosen.prototype.outerHTML = function(element) { + var tmp; + if (element.outerHTML) { + return element.outerHTML; + } + tmp = document.createElement("div"); + tmp.appendChild(element); + return tmp.innerHTML; + }; + + AbstractChosen.prototype.get_single_html = function() { + return "\n " + this.default_text + "\n
\n
\n
\n
\n \n
\n
    \n
    "; + }; + + AbstractChosen.prototype.get_multi_html = function() { + return "
      \n
    • \n \n
    • \n
    \n
    \n
      \n
      "; + }; + + AbstractChosen.prototype.get_no_results_html = function(terms) { + return "
    • \n " + this.results_none_found + " " + (this.escape_html(terms)) + "\n
    • "; + }; + + AbstractChosen.browser_is_supported = function() { + if ("Microsoft Internet Explorer" === window.navigator.appName) { + return document.documentMode >= 8; + } + if (/iP(od|hone)/i.test(window.navigator.userAgent) || /IEMobile/i.test(window.navigator.userAgent) || /Windows Phone/i.test(window.navigator.userAgent) || /BlackBerry/i.test(window.navigator.userAgent) || /BB10/i.test(window.navigator.userAgent) || /Android.*Mobile/i.test(window.navigator.userAgent)) { + return false; + } + return true; + }; + + AbstractChosen.default_multiple_text = "Select Some Options"; + + AbstractChosen.default_single_text = "Select an Option"; + + AbstractChosen.default_no_result_text = "No results match"; + + return AbstractChosen; + + })(); + + $ = jQuery; + + $.fn.extend({ + chosen: function(options) { + if (!AbstractChosen.browser_is_supported()) { + return this; + } + return this.each(function(input_field) { + var $this, chosen; + $this = $(this); + chosen = $this.data('chosen'); + if (options === 'destroy') { + if (chosen instanceof Chosen) { + chosen.destroy(); + } + return; + } + if (!(chosen instanceof Chosen)) { + $this.data('chosen', new Chosen(this, options)); + } + }); + } + }); + + Chosen = (function(superClass) { + extend(Chosen, superClass); + + function Chosen() { + return Chosen.__super__.constructor.apply(this, arguments); + } + + Chosen.prototype.setup = function() { + this.form_field_jq = $(this.form_field); + return this.current_selectedIndex = this.form_field.selectedIndex; + }; + + Chosen.prototype.set_up_html = function() { + var container_classes, container_props; + container_classes = ["chosen-container"]; + container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); + if (this.inherit_select_classes && this.form_field.className) { + container_classes.push(this.form_field.className); + } + if (this.is_rtl) { + container_classes.push("chosen-rtl"); + } + container_props = { + 'class': container_classes.join(' '), + 'title': this.form_field.title + }; + if (this.form_field.id.length) { + container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; + } + this.container = $("
      ", container_props); + this.container.width(this.container_width()); + if (this.is_multiple) { + this.container.html(this.get_multi_html()); + } else { + this.container.html(this.get_single_html()); + } + this.form_field_jq.hide().after(this.container); + this.dropdown = this.container.find('div.chosen-drop').first(); + this.search_field = this.container.find('input').first(); + this.search_results = this.container.find('ul.chosen-results').first(); + this.search_field_scale(); + this.search_no_results = this.container.find('li.no-results').first(); + if (this.is_multiple) { + this.search_choices = this.container.find('ul.chosen-choices').first(); + this.search_container = this.container.find('li.search-field').first(); + } else { + this.search_container = this.container.find('div.chosen-search').first(); + this.selected_item = this.container.find('.chosen-single').first(); + } + this.results_build(); + this.set_tab_index(); + return this.set_label_behavior(); + }; + + Chosen.prototype.on_ready = function() { + return this.form_field_jq.trigger("chosen:ready", { + chosen: this + }); + }; + + Chosen.prototype.register_observers = function() { + this.container.on('touchstart.chosen', (function(_this) { + return function(evt) { + _this.container_mousedown(evt); + }; + })(this)); + this.container.on('touchend.chosen', (function(_this) { + return function(evt) { + _this.container_mouseup(evt); + }; + })(this)); + this.container.on('mousedown.chosen', (function(_this) { + return function(evt) { + _this.container_mousedown(evt); + }; + })(this)); + this.container.on('mouseup.chosen', (function(_this) { + return function(evt) { + _this.container_mouseup(evt); + }; + })(this)); + this.container.on('mouseenter.chosen', (function(_this) { + return function(evt) { + _this.mouse_enter(evt); + }; + })(this)); + this.container.on('mouseleave.chosen', (function(_this) { + return function(evt) { + _this.mouse_leave(evt); + }; + })(this)); + this.search_results.on('mouseup.chosen', (function(_this) { + return function(evt) { + _this.search_results_mouseup(evt); + }; + })(this)); + this.search_results.on('mouseover.chosen', (function(_this) { + return function(evt) { + _this.search_results_mouseover(evt); + }; + })(this)); + this.search_results.on('mouseout.chosen', (function(_this) { + return function(evt) { + _this.search_results_mouseout(evt); + }; + })(this)); + this.search_results.on('mousewheel.chosen DOMMouseScroll.chosen', (function(_this) { + return function(evt) { + _this.search_results_mousewheel(evt); + }; + })(this)); + this.search_results.on('touchstart.chosen', (function(_this) { + return function(evt) { + _this.search_results_touchstart(evt); + }; + })(this)); + this.search_results.on('touchmove.chosen', (function(_this) { + return function(evt) { + _this.search_results_touchmove(evt); + }; + })(this)); + this.search_results.on('touchend.chosen', (function(_this) { + return function(evt) { + _this.search_results_touchend(evt); + }; + })(this)); + this.form_field_jq.on("chosen:updated.chosen", (function(_this) { + return function(evt) { + _this.results_update_field(evt); + }; + })(this)); + this.form_field_jq.on("chosen:activate.chosen", (function(_this) { + return function(evt) { + _this.activate_field(evt); + }; + })(this)); + this.form_field_jq.on("chosen:open.chosen", (function(_this) { + return function(evt) { + _this.container_mousedown(evt); + }; + })(this)); + this.form_field_jq.on("chosen:close.chosen", (function(_this) { + return function(evt) { + _this.close_field(evt); + }; + })(this)); + this.search_field.on('blur.chosen', (function(_this) { + return function(evt) { + _this.input_blur(evt); + }; + })(this)); + this.search_field.on('keyup.chosen', (function(_this) { + return function(evt) { + _this.keyup_checker(evt); + }; + })(this)); + this.search_field.on('keydown.chosen', (function(_this) { + return function(evt) { + _this.keydown_checker(evt); + }; + })(this)); + this.search_field.on('focus.chosen', (function(_this) { + return function(evt) { + _this.input_focus(evt); + }; + })(this)); + this.search_field.on('cut.chosen', (function(_this) { + return function(evt) { + _this.clipboard_event_checker(evt); + }; + })(this)); + this.search_field.on('paste.chosen', (function(_this) { + return function(evt) { + _this.clipboard_event_checker(evt); + }; + })(this)); + if (this.is_multiple) { + return this.search_choices.on('click.chosen', (function(_this) { + return function(evt) { + _this.choices_click(evt); + }; + })(this)); + } else { + return this.container.on('click.chosen', function(evt) { + evt.preventDefault(); + }); + } + }; + + Chosen.prototype.destroy = function() { + $(this.container[0].ownerDocument).off('click.chosen', this.click_test_action); + if (this.form_field_label.length > 0) { + this.form_field_label.off('click.chosen'); + } + if (this.search_field[0].tabIndex) { + this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex; + } + this.container.remove(); + this.form_field_jq.removeData('chosen'); + return this.form_field_jq.show(); + }; + + Chosen.prototype.search_field_disabled = function() { + this.is_disabled = this.form_field.disabled || this.form_field_jq.parents('fieldset').is(':disabled'); + this.container.toggleClass('chosen-disabled', this.is_disabled); + this.search_field[0].disabled = this.is_disabled; + if (!this.is_multiple) { + this.selected_item.off('focus.chosen', this.activate_field); + } + if (this.is_disabled) { + return this.close_field(); + } else if (!this.is_multiple) { + return this.selected_item.on('focus.chosen', this.activate_field); + } + }; + + Chosen.prototype.container_mousedown = function(evt) { + var ref; + if (this.is_disabled) { + return; + } + if (evt && ((ref = evt.type) === 'mousedown' || ref === 'touchstart') && !this.results_showing) { + evt.preventDefault(); + } + if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.val(""); + } + $(this.container[0].ownerDocument).on('click.chosen', this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) { + evt.preventDefault(); + this.results_toggle(); + } + return this.activate_field(); + } + }; + + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { + return this.results_reset(evt); + } + }; + + Chosen.prototype.search_results_mousewheel = function(evt) { + var delta; + if (evt.originalEvent) { + delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail; + } + if (delta != null) { + evt.preventDefault(); + if (evt.type === 'DOMMouseScroll') { + delta = delta * 40; + } + return this.search_results.scrollTop(delta + this.search_results.scrollTop()); + } + }; + + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClass("chosen-container-active")) { + return this.close_field(); + } + }; + + Chosen.prototype.close_field = function() { + $(this.container[0].ownerDocument).off("click.chosen", this.click_test_action); + this.active_field = false; + this.results_hide(); + this.container.removeClass("chosen-container-active"); + this.clear_backstroke(); + this.show_search_field_default(); + this.search_field_scale(); + return this.search_field.blur(); + }; + + Chosen.prototype.activate_field = function() { + if (this.is_disabled) { + return; + } + this.container.addClass("chosen-container-active"); + this.active_field = true; + this.search_field.val(this.search_field.val()); + return this.search_field.focus(); + }; + + Chosen.prototype.test_active_click = function(evt) { + var active_container; + active_container = $(evt.target).closest('.chosen-container'); + if (active_container.length && this.container[0] === active_container[0]) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + + Chosen.prototype.results_build = function() { + this.parsing = true; + this.selected_option_count = null; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple) { + this.search_choices.find("li.search-choice").remove(); + } else { + this.single_set_selected_text(); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { + this.search_field[0].readOnly = true; + this.container.addClass("chosen-container-single-nosearch"); + } else { + this.search_field[0].readOnly = false; + this.container.removeClass("chosen-container-single-nosearch"); + } + } + this.update_results_content(this.results_option_build({ + first: true + })); + this.search_field_disabled(); + this.show_search_field_default(); + this.search_field_scale(); + return this.parsing = false; + }; + + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + if (el.length) { + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClass("highlighted"); + maxHeight = parseInt(this.search_results.css("maxHeight"), 10); + visible_top = this.search_results.scrollTop(); + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.position().top + this.search_results.scrollTop(); + high_bottom = high_top + this.result_highlight.outerHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); + } else if (high_top < visible_top) { + return this.search_results.scrollTop(high_top); + } + } + }; + + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClass("highlighted"); + } + return this.result_highlight = null; + }; + + Chosen.prototype.results_show = function() { + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field_jq.trigger("chosen:maxselected", { + chosen: this + }); + return false; + } + this.container.addClass("chosen-with-drop"); + this.results_showing = true; + this.search_field.focus(); + this.search_field.val(this.get_search_field_value()); + this.winnow_results(); + return this.form_field_jq.trigger("chosen:showing_dropdown", { + chosen: this + }); + }; + + Chosen.prototype.update_results_content = function(content) { + return this.search_results.html(content); + }; + + Chosen.prototype.results_hide = function() { + if (this.results_showing) { + this.result_clear_highlight(); + this.container.removeClass("chosen-with-drop"); + this.form_field_jq.trigger("chosen:hiding_dropdown", { + chosen: this + }); + } + return this.results_showing = false; + }; + + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field.tabIndex) { + ti = this.form_field.tabIndex; + this.form_field.tabIndex = -1; + return this.search_field[0].tabIndex = ti; + } + }; + + Chosen.prototype.set_label_behavior = function() { + this.form_field_label = this.form_field_jq.parents("label"); + if (!this.form_field_label.length && this.form_field.id.length) { + this.form_field_label = $("label[for='" + this.form_field.id + "']"); + } + if (this.form_field_label.length > 0) { + return this.form_field_label.on('click.chosen', this.label_click_handler); + } + }; + + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { + this.search_field.val(this.default_text); + return this.search_field.addClass("default"); + } else { + this.search_field.val(""); + return this.search_field.removeClass("default"); + } + }; + + Chosen.prototype.search_results_mouseup = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target.length) { + this.result_highlight = target; + this.result_select(evt); + return this.search_field.focus(); + } + }; + + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target) { + return this.result_do_highlight(target); + } + }; + + Chosen.prototype.search_results_mouseout = function(evt) { + if ($(evt.target).hasClass("active-result") || $(evt.target).parents('.active-result').first()) { + return this.result_clear_highlight(); + } + }; + + Chosen.prototype.choice_build = function(item) { + var choice, close_link; + choice = $('
    • ', { + "class": "search-choice" + }).html("" + (this.choice_label(item)) + ""); + if (item.disabled) { + choice.addClass('search-choice-disabled'); + } else { + close_link = $('', { + "class": 'search-choice-close', + 'data-option-array-index': item.array_index + }); + close_link.on('click.chosen', (function(_this) { + return function(evt) { + return _this.choice_destroy_link_click(evt); + }; + })(this)); + choice.append(close_link); + } + return this.search_container.before(choice); + }; + + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + if (!this.is_disabled) { + return this.choice_destroy($(evt.target)); + } + }; + + Chosen.prototype.choice_destroy = function(link) { + if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) { + if (this.active_field) { + this.search_field.focus(); + } else { + this.show_search_field_default(); + } + if (this.is_multiple && this.choices_count() > 0 && this.get_search_field_value().length < 1) { + this.results_hide(); + } + link.parents('li').first().remove(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.results_reset = function() { + this.reset_single_select_options(); + this.form_field.options[0].selected = true; + this.single_set_selected_text(); + this.show_search_field_default(); + this.results_reset_cleanup(); + this.trigger_form_field_change(); + if (this.active_field) { + return this.results_hide(); + } + }; + + Chosen.prototype.results_reset_cleanup = function() { + this.current_selectedIndex = this.form_field.selectedIndex; + return this.selected_item.find("abbr").remove(); + }; + + Chosen.prototype.result_select = function(evt) { + var high, item; + if (this.result_highlight) { + high = this.result_highlight; + this.result_clear_highlight(); + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field_jq.trigger("chosen:maxselected", { + chosen: this + }); + return false; + } + if (this.is_multiple) { + high.removeClass("active-result"); + } else { + this.reset_single_select_options(); + } + high.addClass("result-selected"); + item = this.results_data[high[0].getAttribute("data-option-array-index")]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + this.selected_option_count = null; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.single_set_selected_text(this.choice_label(item)); + } + if (this.is_multiple && (!this.hide_results_on_select || (evt.metaKey || evt.ctrlKey))) { + if (evt.metaKey || evt.ctrlKey) { + this.winnow_results({ + skip_highlight: true + }); + } else { + this.search_field.val(""); + this.winnow_results(); + } + } else { + this.results_hide(); + this.show_search_field_default(); + } + if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) { + this.trigger_form_field_change({ + selected: this.form_field.options[item.options_index].value + }); + } + this.current_selectedIndex = this.form_field.selectedIndex; + evt.preventDefault(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.single_set_selected_text = function(text) { + if (text == null) { + text = this.default_text; + } + if (text === this.default_text) { + this.selected_item.addClass("chosen-default"); + } else { + this.single_deselect_control_build(); + this.selected_item.removeClass("chosen-default"); + } + return this.selected_item.find("span").html(text); + }; + + Chosen.prototype.result_deselect = function(pos) { + var result_data; + result_data = this.results_data[pos]; + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + this.selected_option_count = null; + this.result_clear_highlight(); + if (this.results_showing) { + this.winnow_results(); + } + this.trigger_form_field_change({ + deselected: this.form_field.options[result_data.options_index].value + }); + this.search_field_scale(); + return true; + } else { + return false; + } + }; + + Chosen.prototype.single_deselect_control_build = function() { + if (!this.allow_single_deselect) { + return; + } + if (!this.selected_item.find("abbr").length) { + this.selected_item.find("span").first().after(""); + } + return this.selected_item.addClass("chosen-single-with-deselect"); + }; + + Chosen.prototype.get_search_field_value = function() { + return this.search_field.val(); + }; + + Chosen.prototype.get_search_text = function() { + return $.trim(this.get_search_field_value()); + }; + + Chosen.prototype.escape_html = function(text) { + return $('
      ').text(text).html(); + }; + + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high, selected_results; + selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; + do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); + if (do_high != null) { + return this.result_do_highlight(do_high); + } + }; + + Chosen.prototype.no_results = function(terms) { + var no_results_html; + no_results_html = this.get_no_results_html(terms); + this.search_results.append(no_results_html); + return this.form_field_jq.trigger("chosen:no_results", { + chosen: this + }); + }; + + Chosen.prototype.no_results_clear = function() { + return this.search_results.find(".no-results").remove(); + }; + + Chosen.prototype.keydown_arrow = function() { + var next_sib; + if (this.results_showing && this.result_highlight) { + next_sib = this.result_highlight.nextAll("li.active-result").first(); + if (next_sib) { + return this.result_do_highlight(next_sib); + } + } else { + return this.results_show(); + } + }; + + Chosen.prototype.keyup_arrow = function() { + var prev_sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + prev_sibs = this.result_highlight.prevAll("li.active-result"); + if (prev_sibs.length) { + return this.result_do_highlight(prev_sibs.first()); + } else { + if (this.choices_count() > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + + Chosen.prototype.keydown_backstroke = function() { + var next_available_destroy; + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.find("a").first()); + return this.clear_backstroke(); + } else { + next_available_destroy = this.search_container.siblings("li.search-choice").last(); + if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) { + this.pending_backstroke = next_available_destroy; + if (this.single_backstroke_delete) { + return this.keydown_backstroke(); + } else { + return this.pending_backstroke.addClass("search-choice-focus"); + } + } + } + }; + + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClass("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + + Chosen.prototype.search_field_scale = function() { + var div, i, len, style, style_block, styles, width; + if (!this.is_multiple) { + return; + } + style_block = { + position: 'absolute', + left: '-1000px', + top: '-1000px', + display: 'none', + whiteSpace: 'pre' + }; + styles = ['fontSize', 'fontStyle', 'fontWeight', 'fontFamily', 'lineHeight', 'textTransform', 'letterSpacing']; + for (i = 0, len = styles.length; i < len; i++) { + style = styles[i]; + style_block[style] = this.search_field.css(style); + } + div = $('
      ').css(style_block); + div.text(this.get_search_field_value()); + $('body').append(div); + width = div.width() + 25; + div.remove(); + if (this.container.is(':visible')) { + width = Math.min(this.container.outerWidth() - 10, width); + } + return this.search_field.width(width); + }; + + Chosen.prototype.trigger_form_field_change = function(extra) { + this.form_field_jq.trigger("input", extra); + return this.form_field_jq.trigger("change", extra); + }; + + return Chosen; + + })(AbstractChosen); + +}).call(this); diff --git a/WebLab/script/chosen/chosen.jquery.min.js b/WebLab/script/chosen/chosen.jquery.min.js new file mode 100644 index 00000000..4ad16475 --- /dev/null +++ b/WebLab/script/chosen/chosen.jquery.min.js @@ -0,0 +1,3 @@ +/* Chosen v1.8.7 | (c) 2011-2018 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ + +(function(){var t,e,s,i,n=function(t,e){return function(){return t.apply(e,arguments)}},r=function(t,e){function s(){this.constructor=t}for(var i in e)o.call(e,i)&&(t[i]=e[i]);return s.prototype=e.prototype,t.prototype=new s,t.__super__=e.prototype,t},o={}.hasOwnProperty;(i=function(){function t(){this.options_index=0,this.parsed=[]}return t.prototype.add_node=function(t){return"OPTGROUP"===t.nodeName.toUpperCase()?this.add_group(t):this.add_option(t)},t.prototype.add_group=function(t){var e,s,i,n,r,o;for(e=this.parsed.length,this.parsed.push({array_index:e,group:!0,label:t.label,title:t.title?t.title:void 0,children:0,disabled:t.disabled,classes:t.className}),o=[],s=0,i=(r=t.childNodes).length;s"+this.escape_html(t.group_label)+""+t.html:t.html},t.prototype.mouse_enter=function(){return this.mouse_on_container=!0},t.prototype.mouse_leave=function(){return this.mouse_on_container=!1},t.prototype.input_focus=function(t){if(this.is_multiple){if(!this.active_field)return setTimeout(function(t){return function(){return t.container_mousedown()}}(this),50)}else if(!this.active_field)return this.activate_field()},t.prototype.input_blur=function(t){if(!this.mouse_on_container)return this.active_field=!1,setTimeout(function(t){return function(){return t.blur_test()}}(this),100)},t.prototype.label_click_handler=function(t){return this.is_multiple?this.container_mousedown(t):this.activate_field()},t.prototype.results_option_build=function(t){var e,s,i,n,r,o,h;for(e="",h=0,n=0,r=(o=this.results_data).length;n=this.max_shown_results));n++);return e},t.prototype.result_add_option=function(t){var e,s;return t.search_match&&this.include_option_in_results(t)?(e=[],t.disabled||t.selected&&this.is_multiple||e.push("active-result"),!t.disabled||t.selected&&this.is_multiple||e.push("disabled-result"),t.selected&&e.push("result-selected"),null!=t.group_array_index&&e.push("group-option"),""!==t.classes&&e.push(t.classes),s=document.createElement("li"),s.className=e.join(" "),t.style&&(s.style.cssText=t.style),s.setAttribute("data-option-array-index",t.array_index),s.innerHTML=t.highlighted_html||t.html,t.title&&(s.title=t.title),this.outerHTML(s)):""},t.prototype.result_add_group=function(t){var e,s;return(t.search_match||t.group_match)&&t.active_options>0?((e=[]).push("group-result"),t.classes&&e.push(t.classes),s=document.createElement("li"),s.className=e.join(" "),s.innerHTML=t.highlighted_html||this.escape_html(t.label),t.title&&(s.title=t.title),this.outerHTML(s)):""},t.prototype.results_update_field=function(){if(this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing)return this.winnow_results()},t.prototype.reset_single_select_options=function(){var t,e,s,i,n;for(n=[],t=0,e=(s=this.results_data).length;t"+this.escape_html(s)+""+this.escape_html(p)),null!=a&&(a.group_match=!0)):null!=r.group_array_index&&this.results_data[r.group_array_index].search_match&&(r.search_match=!0)));return this.result_clear_highlight(),_<1&&h.length?(this.update_results_content(""),this.no_results(h)):(this.update_results_content(this.results_option_build()),(null!=t?t.skip_highlight:void 0)?void 0:this.winnow_results_set_highlight())},t.prototype.get_search_regex=function(t){var e,s;return s=this.search_contains?t:"(^|\\s|\\b)"+t+"[^\\s]*",this.enable_split_word_search||this.search_contains||(s="^"+s),e=this.case_sensitive_search?"":"i",new RegExp(s,e)},t.prototype.search_string_match=function(t,e){var s;return s=e.exec(t),!this.search_contains&&(null!=s?s[1]:void 0)&&(s.index+=1),s},t.prototype.choices_count=function(){var t,e,s;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,t=0,e=(s=this.form_field.options).length;t0?this.keydown_backstroke():this.pending_backstroke||(this.result_clear_highlight(),this.results_search());break;case 13:t.preventDefault(),this.results_showing&&this.result_select(t);break;case 27:this.results_showing&&this.results_hide();break;case 9:case 16:case 17:case 18:case 38:case 40:case 91:break;default:this.results_search()}},t.prototype.clipboard_event_checker=function(t){if(!this.is_disabled)return setTimeout(function(t){return function(){return t.results_search()}}(this),50)},t.prototype.container_width=function(){return null!=this.options.width?this.options.width:this.form_field.offsetWidth+"px"},t.prototype.include_option_in_results=function(t){return!(this.is_multiple&&!this.display_selected_options&&t.selected)&&(!(!this.display_disabled_options&&t.disabled)&&!t.empty)},t.prototype.search_results_touchstart=function(t){return this.touch_started=!0,this.search_results_mouseover(t)},t.prototype.search_results_touchmove=function(t){return this.touch_started=!1,this.search_results_mouseout(t)},t.prototype.search_results_touchend=function(t){if(this.touch_started)return this.search_results_mouseup(t)},t.prototype.outerHTML=function(t){var e;return t.outerHTML?t.outerHTML:((e=document.createElement("div")).appendChild(t),e.innerHTML)},t.prototype.get_single_html=function(){return'\n '+this.default_text+'\n
      \n
      \n
      \n \n
        \n
        '},t.prototype.get_multi_html=function(){return'
          \n
        • \n \n
        • \n
        \n
        \n
          \n
          '},t.prototype.get_no_results_html=function(t){return'
        • \n '+this.results_none_found+" "+this.escape_html(t)+"\n
        • "},t.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:!(/iP(od|hone)/i.test(window.navigator.userAgent)||/IEMobile/i.test(window.navigator.userAgent)||/Windows Phone/i.test(window.navigator.userAgent)||/BlackBerry/i.test(window.navigator.userAgent)||/BB10/i.test(window.navigator.userAgent)||/Android.*Mobile/i.test(window.navigator.userAgent))},t.default_multiple_text="Select Some Options",t.default_single_text="Select an Option",t.default_no_result_text="No results match",t}(),(t=jQuery).fn.extend({chosen:function(i){return e.browser_is_supported()?this.each(function(e){var n,r;r=(n=t(this)).data("chosen"),"destroy"!==i?r instanceof s||n.data("chosen",new s(this,i)):r instanceof s&&r.destroy()}):this}}),s=function(s){function n(){return n.__super__.constructor.apply(this,arguments)}return r(n,e),n.prototype.setup=function(){return this.form_field_jq=t(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex},n.prototype.set_up_html=function(){var e,s;return(e=["chosen-container"]).push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&e.push(this.form_field.className),this.is_rtl&&e.push("chosen-rtl"),s={"class":e.join(" "),title:this.form_field.title},this.form_field.id.length&&(s.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=t("
          ",s),this.container.width(this.container_width()),this.is_multiple?this.container.html(this.get_multi_html()):this.container.html(this.get_single_html()),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},n.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},n.prototype.register_observers=function(){return this.container.on("touchstart.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.container.on("touchend.chosen",function(t){return function(e){t.container_mouseup(e)}}(this)),this.container.on("mousedown.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.container.on("mouseup.chosen",function(t){return function(e){t.container_mouseup(e)}}(this)),this.container.on("mouseenter.chosen",function(t){return function(e){t.mouse_enter(e)}}(this)),this.container.on("mouseleave.chosen",function(t){return function(e){t.mouse_leave(e)}}(this)),this.search_results.on("mouseup.chosen",function(t){return function(e){t.search_results_mouseup(e)}}(this)),this.search_results.on("mouseover.chosen",function(t){return function(e){t.search_results_mouseover(e)}}(this)),this.search_results.on("mouseout.chosen",function(t){return function(e){t.search_results_mouseout(e)}}(this)),this.search_results.on("mousewheel.chosen DOMMouseScroll.chosen",function(t){return function(e){t.search_results_mousewheel(e)}}(this)),this.search_results.on("touchstart.chosen",function(t){return function(e){t.search_results_touchstart(e)}}(this)),this.search_results.on("touchmove.chosen",function(t){return function(e){t.search_results_touchmove(e)}}(this)),this.search_results.on("touchend.chosen",function(t){return function(e){t.search_results_touchend(e)}}(this)),this.form_field_jq.on("chosen:updated.chosen",function(t){return function(e){t.results_update_field(e)}}(this)),this.form_field_jq.on("chosen:activate.chosen",function(t){return function(e){t.activate_field(e)}}(this)),this.form_field_jq.on("chosen:open.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.form_field_jq.on("chosen:close.chosen",function(t){return function(e){t.close_field(e)}}(this)),this.search_field.on("blur.chosen",function(t){return function(e){t.input_blur(e)}}(this)),this.search_field.on("keyup.chosen",function(t){return function(e){t.keyup_checker(e)}}(this)),this.search_field.on("keydown.chosen",function(t){return function(e){t.keydown_checker(e)}}(this)),this.search_field.on("focus.chosen",function(t){return function(e){t.input_focus(e)}}(this)),this.search_field.on("cut.chosen",function(t){return function(e){t.clipboard_event_checker(e)}}(this)),this.search_field.on("paste.chosen",function(t){return function(e){t.clipboard_event_checker(e)}}(this)),this.is_multiple?this.search_choices.on("click.chosen",function(t){return function(e){t.choices_click(e)}}(this)):this.container.on("click.chosen",function(t){t.preventDefault()})},n.prototype.destroy=function(){return t(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),this.form_field_label.length>0&&this.form_field_label.off("click.chosen"),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},n.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field.disabled||this.form_field_jq.parents("fieldset").is(":disabled"),this.container.toggleClass("chosen-disabled",this.is_disabled),this.search_field[0].disabled=this.is_disabled,this.is_multiple||this.selected_item.off("focus.chosen",this.activate_field),this.is_disabled?this.close_field():this.is_multiple?void 0:this.selected_item.on("focus.chosen",this.activate_field)},n.prototype.container_mousedown=function(e){var s;if(!this.is_disabled)return!e||"mousedown"!==(s=e.type)&&"touchstart"!==s||this.results_showing||e.preventDefault(),null!=e&&t(e.target).hasClass("search-choice-close")?void 0:(this.active_field?this.is_multiple||!e||t(e.target)[0]!==this.selected_item[0]&&!t(e.target).parents("a.chosen-single").length||(e.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),t(this.container[0].ownerDocument).on("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},n.prototype.container_mouseup=function(t){if("ABBR"===t.target.nodeName&&!this.is_disabled)return this.results_reset(t)},n.prototype.search_results_mousewheel=function(t){var e;if(t.originalEvent&&(e=t.originalEvent.deltaY||-t.originalEvent.wheelDelta||t.originalEvent.detail),null!=e)return t.preventDefault(),"DOMMouseScroll"===t.type&&(e*=40),this.search_results.scrollTop(e+this.search_results.scrollTop())},n.prototype.blur_test=function(t){if(!this.active_field&&this.container.hasClass("chosen-container-active"))return this.close_field()},n.prototype.close_field=function(){return t(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale(),this.search_field.blur()},n.prototype.activate_field=function(){if(!this.is_disabled)return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},n.prototype.test_active_click=function(e){var s;return(s=t(e.target).closest(".chosen-container")).length&&this.container[0]===s[0]?this.active_field=!0:this.close_field()},n.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=i.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},n.prototype.result_do_highlight=function(t){var e,s,i,n,r;if(t.length){if(this.result_clear_highlight(),this.result_highlight=t,this.result_highlight.addClass("highlighted"),i=parseInt(this.search_results.css("maxHeight"),10),r=this.search_results.scrollTop(),n=i+r,s=this.result_highlight.position().top+this.search_results.scrollTop(),(e=s+this.result_highlight.outerHeight())>=n)return this.search_results.scrollTop(e-i>0?e-i:0);if(s0)return this.form_field_label.on("click.chosen",this.label_click_handler)},n.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},n.prototype.search_results_mouseup=function(e){var s;if((s=t(e.target).hasClass("active-result")?t(e.target):t(e.target).parents(".active-result").first()).length)return this.result_highlight=s,this.result_select(e),this.search_field.focus()},n.prototype.search_results_mouseover=function(e){var s;if(s=t(e.target).hasClass("active-result")?t(e.target):t(e.target).parents(".active-result").first())return this.result_do_highlight(s)},n.prototype.search_results_mouseout=function(e){if(t(e.target).hasClass("active-result")||t(e.target).parents(".active-result").first())return this.result_clear_highlight()},n.prototype.choice_build=function(e){var s,i;return s=t("
        • ",{"class":"search-choice"}).html(""+this.choice_label(e)+""),e.disabled?s.addClass("search-choice-disabled"):((i=t("",{"class":"search-choice-close","data-option-array-index":e.array_index})).on("click.chosen",function(t){return function(e){return t.choice_destroy_link_click(e)}}(this)),s.append(i)),this.search_container.before(s)},n.prototype.choice_destroy_link_click=function(e){if(e.preventDefault(),e.stopPropagation(),!this.is_disabled)return this.choice_destroy(t(e.target))},n.prototype.choice_destroy=function(t){if(this.result_deselect(t[0].getAttribute("data-option-array-index")))return this.active_field?this.search_field.focus():this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.get_search_field_value().length<1&&this.results_hide(),t.parents("li").first().remove(),this.search_field_scale()},n.prototype.results_reset=function(){if(this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.trigger_form_field_change(),this.active_field)return this.results_hide()},n.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},n.prototype.result_select=function(t){var e,s;if(this.result_highlight)return e=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?e.removeClass("active-result"):this.reset_single_select_options(),e.addClass("result-selected"),s=this.results_data[e[0].getAttribute("data-option-array-index")],s.selected=!0,this.form_field.options[s.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(s):this.single_set_selected_text(this.choice_label(s)),this.is_multiple&&(!this.hide_results_on_select||t.metaKey||t.ctrlKey)?t.metaKey||t.ctrlKey?this.winnow_results({skip_highlight:!0}):(this.search_field.val(""),this.winnow_results()):(this.results_hide(),this.show_search_field_default()),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.trigger_form_field_change({selected:this.form_field.options[s.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,t.preventDefault(),this.search_field_scale())},n.prototype.single_set_selected_text=function(t){return null==t&&(t=this.default_text),t===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").html(t)},n.prototype.result_deselect=function(t){var e;return e=this.results_data[t],!this.form_field.options[e.options_index].disabled&&(e.selected=!1,this.form_field.options[e.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.trigger_form_field_change({deselected:this.form_field.options[e.options_index].value}),this.search_field_scale(),!0)},n.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect)return this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")},n.prototype.get_search_field_value=function(){return this.search_field.val()},n.prototype.get_search_text=function(){return t.trim(this.get_search_field_value())},n.prototype.escape_html=function(e){return t("
          ").text(e).html()},n.prototype.winnow_results_set_highlight=function(){var t,e;if(e=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),null!=(t=e.length?e.first():this.search_results.find(".active-result").first()))return this.result_do_highlight(t)},n.prototype.no_results=function(t){var e;return e=this.get_no_results_html(t),this.search_results.append(e),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},n.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},n.prototype.keydown_arrow=function(){var t;return this.results_showing&&this.result_highlight?(t=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(t):void 0:this.results_show()},n.prototype.keyup_arrow=function(){var t;return this.results_showing||this.is_multiple?this.result_highlight?(t=this.result_highlight.prevAll("li.active-result")).length?this.result_do_highlight(t.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight()):void 0:this.results_show()},n.prototype.keydown_backstroke=function(){var t;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(t=this.search_container.siblings("li.search-choice").last()).length&&!t.hasClass("search-choice-disabled")?(this.pending_backstroke=t,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0},n.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},n.prototype.search_field_scale=function(){var e,s,i,n,r,o,h;if(this.is_multiple){for(r={position:"absolute",left:"-1000px",top:"-1000px",display:"none",whiteSpace:"pre"},s=0,i=(o=["fontSize","fontStyle","fontWeight","fontFamily","lineHeight","textTransform","letterSpacing"]).length;s").css(r)).text(this.get_search_field_value()),t("body").append(e),h=e.width()+25,e.remove(),this.container.is(":visible")&&(h=Math.min(this.container.outerWidth()-10,h)),this.search_field.width(h)}},n.prototype.trigger_form_field_change=function(t){return this.form_field_jq.trigger("input",t),this.form_field_jq.trigger("change",t)},n}()}).call(this); \ No newline at end of file diff --git a/WebLab/script/chosen/chosen.min.css b/WebLab/script/chosen/chosen.min.css new file mode 100644 index 00000000..1c68ebb1 --- /dev/null +++ b/WebLab/script/chosen/chosen.min.css @@ -0,0 +1,11 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.8.7 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2018 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15);clip:rect(0,0,0,0);-webkit-clip-path:inset(100% 100%);clip-path:inset(100% 100%)}.chosen-container.chosen-with-drop .chosen-drop{clip:auto;-webkit-clip-path:none;clip-path:none}.chosen-container a{cursor:pointer}.chosen-container .chosen-single .group-name,.chosen-container .search-choice .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .chosen-single .group-name:after,.chosen-container .search-choice .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),to(#f4f4f4));background:linear-gradient(#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;-webkit-box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;clip:rect(0,0,0,0);-webkit-clip-path:inset(100% 100%);clip-path:inset(100% 100%)}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(1%,#eee),color-stop(15%,#fff));background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:0 0!important;-webkit-box-shadow:none;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0;width:25px}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),to(#eee));background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),to(#eee));background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;border-bottom-right-radius:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#eee),color-stop(80%,#fff));background-image:linear-gradient(#eee 20%,#fff 80%);-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:none;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:none}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi),only screen and (min-resolution:1.5dppx){.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span,.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container-single .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-rtl .chosen-search input[type=text]{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}} \ No newline at end of file diff --git a/WebLab/script/chosen/chosen.proto.js b/WebLab/script/chosen/chosen.proto.js new file mode 100644 index 00000000..a4056494 --- /dev/null +++ b/WebLab/script/chosen/chosen.proto.js @@ -0,0 +1,1399 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.8.7 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2018 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +(function() { + var AbstractChosen, SelectParser, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + + SelectParser.prototype.add_node = function(child) { + if (child.nodeName.toUpperCase() === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + + SelectParser.prototype.add_group = function(group) { + var group_position, i, len, option, ref, results1; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: group.label, + title: group.title ? group.title : void 0, + children: 0, + disabled: group.disabled, + classes: group.className + }); + ref = group.childNodes; + results1 = []; + for (i = 0, len = ref.length; i < len; i++) { + option = ref[i]; + results1.push(this.add_option(option, group_position, group.disabled)); + } + return results1; + }; + + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName.toUpperCase() === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + title: option.title ? option.title : void 0, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position, + group_label: group_position != null ? this.parsed[group_position].label : null, + classes: option.className, + style: option.style.cssText + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + + return SelectParser; + + })(); + + SelectParser.select_to_array = function(select) { + var child, i, len, parser, ref; + parser = new SelectParser(); + ref = select.childNodes; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + parser.add_node(child); + } + return parser.parsed; + }; + + AbstractChosen = (function() { + function AbstractChosen(form_field, options1) { + this.form_field = form_field; + this.options = options1 != null ? options1 : {}; + this.label_click_handler = bind(this.label_click_handler, this); + if (!AbstractChosen.browser_is_supported()) { + return; + } + this.is_multiple = this.form_field.multiple; + this.set_default_text(); + this.set_default_values(); + this.setup(); + this.set_up_html(); + this.register_observers(); + this.on_ready(); + } + + AbstractChosen.prototype.set_default_values = function() { + this.click_test_action = (function(_this) { + return function(evt) { + return _this.test_active_click(evt); + }; + })(this); + this.activate_action = (function(_this) { + return function(evt) { + return _this.activate_field(evt); + }; + })(this); + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.is_rtl = this.options.rtl || /\bchosen-rtl\b/.test(this.form_field.className); + this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; + this.disable_search_threshold = this.options.disable_search_threshold || 0; + this.disable_search = this.options.disable_search || false; + this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; + this.group_search = this.options.group_search != null ? this.options.group_search : true; + this.search_contains = this.options.search_contains || false; + this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; + this.max_selected_options = this.options.max_selected_options || Infinity; + this.inherit_select_classes = this.options.inherit_select_classes || false; + this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; + this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; + this.include_group_label_in_selected = this.options.include_group_label_in_selected || false; + this.max_shown_results = this.options.max_shown_results || Number.POSITIVE_INFINITY; + this.case_sensitive_search = this.options.case_sensitive_search || false; + return this.hide_results_on_select = this.options.hide_results_on_select != null ? this.options.hide_results_on_select : true; + }; + + AbstractChosen.prototype.set_default_text = function() { + if (this.form_field.getAttribute("data-placeholder")) { + this.default_text = this.form_field.getAttribute("data-placeholder"); + } else if (this.is_multiple) { + this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; + } + this.default_text = this.escape_html(this.default_text); + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; + }; + + AbstractChosen.prototype.choice_label = function(item) { + if (this.include_group_label_in_selected && (item.group_label != null)) { + return "" + (this.escape_html(item.group_label)) + "" + item.html; + } else { + return item.html; + } + }; + + AbstractChosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + + AbstractChosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + + AbstractChosen.prototype.input_focus = function(evt) { + if (this.is_multiple) { + if (!this.active_field) { + return setTimeout(((function(_this) { + return function() { + return _this.container_mousedown(); + }; + })(this)), 50); + } + } else { + if (!this.active_field) { + return this.activate_field(); + } + } + }; + + AbstractChosen.prototype.input_blur = function(evt) { + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout(((function(_this) { + return function() { + return _this.blur_test(); + }; + })(this)), 100); + } + }; + + AbstractChosen.prototype.label_click_handler = function(evt) { + if (this.is_multiple) { + return this.container_mousedown(evt); + } else { + return this.activate_field(); + } + }; + + AbstractChosen.prototype.results_option_build = function(options) { + var content, data, data_content, i, len, ref, shown_results; + content = ''; + shown_results = 0; + ref = this.results_data; + for (i = 0, len = ref.length; i < len; i++) { + data = ref[i]; + data_content = ''; + if (data.group) { + data_content = this.result_add_group(data); + } else { + data_content = this.result_add_option(data); + } + if (data_content !== '') { + shown_results++; + content += data_content; + } + if (options != null ? options.first : void 0) { + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.single_set_selected_text(this.choice_label(data)); + } + } + if (shown_results >= this.max_shown_results) { + break; + } + } + return content; + }; + + AbstractChosen.prototype.result_add_option = function(option) { + var classes, option_el; + if (!option.search_match) { + return ''; + } + if (!this.include_option_in_results(option)) { + return ''; + } + classes = []; + if (!option.disabled && !(option.selected && this.is_multiple)) { + classes.push("active-result"); + } + if (option.disabled && !(option.selected && this.is_multiple)) { + classes.push("disabled-result"); + } + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + if (option.classes !== "") { + classes.push(option.classes); + } + option_el = document.createElement("li"); + option_el.className = classes.join(" "); + if (option.style) { + option_el.style.cssText = option.style; + } + option_el.setAttribute("data-option-array-index", option.array_index); + option_el.innerHTML = option.highlighted_html || option.html; + if (option.title) { + option_el.title = option.title; + } + return this.outerHTML(option_el); + }; + + AbstractChosen.prototype.result_add_group = function(group) { + var classes, group_el; + if (!(group.search_match || group.group_match)) { + return ''; + } + if (!(group.active_options > 0)) { + return ''; + } + classes = []; + classes.push("group-result"); + if (group.classes) { + classes.push(group.classes); + } + group_el = document.createElement("li"); + group_el.className = classes.join(" "); + group_el.innerHTML = group.highlighted_html || this.escape_html(group.label); + if (group.title) { + group_el.title = group.title; + } + return this.outerHTML(group_el); + }; + + AbstractChosen.prototype.results_update_field = function() { + this.set_default_text(); + if (!this.is_multiple) { + this.results_reset_cleanup(); + } + this.result_clear_highlight(); + this.results_build(); + if (this.results_showing) { + return this.winnow_results(); + } + }; + + AbstractChosen.prototype.reset_single_select_options = function() { + var i, len, ref, result, results1; + ref = this.results_data; + results1 = []; + for (i = 0, len = ref.length; i < len; i++) { + result = ref[i]; + if (result.selected) { + results1.push(result.selected = false); + } else { + results1.push(void 0); + } + } + return results1; + }; + + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.winnow_results = function(options) { + var escapedQuery, fix, i, len, option, prefix, query, ref, regex, results, results_group, search_match, startpos, suffix, text; + this.no_results_clear(); + results = 0; + query = this.get_search_text(); + escapedQuery = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + regex = this.get_search_regex(escapedQuery); + ref = this.results_data; + for (i = 0, len = ref.length; i < len; i++) { + option = ref[i]; + option.search_match = false; + results_group = null; + search_match = null; + option.highlighted_html = ''; + if (this.include_option_in_results(option)) { + if (option.group) { + option.group_match = false; + option.active_options = 0; + } + if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { + results_group = this.results_data[option.group_array_index]; + if (results_group.active_options === 0 && results_group.search_match) { + results += 1; + } + results_group.active_options += 1; + } + text = option.group ? option.label : option.text; + if (!(option.group && !this.group_search)) { + search_match = this.search_string_match(text, regex); + option.search_match = search_match != null; + if (option.search_match && !option.group) { + results += 1; + } + if (option.search_match) { + if (query.length) { + startpos = search_match.index; + prefix = text.slice(0, startpos); + fix = text.slice(startpos, startpos + query.length); + suffix = text.slice(startpos + query.length); + option.highlighted_html = (this.escape_html(prefix)) + "" + (this.escape_html(fix)) + "" + (this.escape_html(suffix)); + } + if (results_group != null) { + results_group.group_match = true; + } + } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { + option.search_match = true; + } + } + } + } + this.result_clear_highlight(); + if (results < 1 && query.length) { + this.update_results_content(""); + return this.no_results(query); + } else { + this.update_results_content(this.results_option_build()); + if (!(options != null ? options.skip_highlight : void 0)) { + return this.winnow_results_set_highlight(); + } + } + }; + + AbstractChosen.prototype.get_search_regex = function(escaped_search_string) { + var regex_flag, regex_string; + regex_string = this.search_contains ? escaped_search_string : "(^|\\s|\\b)" + escaped_search_string + "[^\\s]*"; + if (!(this.enable_split_word_search || this.search_contains)) { + regex_string = "^" + regex_string; + } + regex_flag = this.case_sensitive_search ? "" : "i"; + return new RegExp(regex_string, regex_flag); + }; + + AbstractChosen.prototype.search_string_match = function(search_string, regex) { + var match; + match = regex.exec(search_string); + if (!this.search_contains && (match != null ? match[1] : void 0)) { + match.index += 1; + } + return match; + }; + + AbstractChosen.prototype.choices_count = function() { + var i, len, option, ref; + if (this.selected_option_count != null) { + return this.selected_option_count; + } + this.selected_option_count = 0; + ref = this.form_field.options; + for (i = 0, len = ref.length; i < len; i++) { + option = ref[i]; + if (option.selected) { + this.selected_option_count += 1; + } + } + return this.selected_option_count; + }; + + AbstractChosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + this.activate_field(); + if (!(this.results_showing || this.is_disabled)) { + return this.results_show(); + } + }; + + AbstractChosen.prototype.keydown_checker = function(evt) { + var ref, stroke; + stroke = (ref = evt.which) != null ? ref : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.get_search_field_value().length; + break; + case 9: + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } + this.mouse_on_container = false; + break; + case 13: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 27: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 32: + if (this.disable_search) { + evt.preventDefault(); + } + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + evt.preventDefault(); + this.keydown_arrow(); + break; + } + }; + + AbstractChosen.prototype.keyup_checker = function(evt) { + var ref, stroke; + stroke = (ref = evt.which) != null ? ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { + this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + this.results_hide(); + } + break; + case 9: + case 16: + case 17: + case 18: + case 38: + case 40: + case 91: + break; + default: + this.results_search(); + break; + } + }; + + AbstractChosen.prototype.clipboard_event_checker = function(evt) { + if (this.is_disabled) { + return; + } + return setTimeout(((function(_this) { + return function() { + return _this.results_search(); + }; + })(this)), 50); + }; + + AbstractChosen.prototype.container_width = function() { + if (this.options.width != null) { + return this.options.width; + } else { + return this.form_field.offsetWidth + "px"; + } + }; + + AbstractChosen.prototype.include_option_in_results = function(option) { + if (this.is_multiple && (!this.display_selected_options && option.selected)) { + return false; + } + if (!this.display_disabled_options && option.disabled) { + return false; + } + if (option.empty) { + return false; + } + return true; + }; + + AbstractChosen.prototype.search_results_touchstart = function(evt) { + this.touch_started = true; + return this.search_results_mouseover(evt); + }; + + AbstractChosen.prototype.search_results_touchmove = function(evt) { + this.touch_started = false; + return this.search_results_mouseout(evt); + }; + + AbstractChosen.prototype.search_results_touchend = function(evt) { + if (this.touch_started) { + return this.search_results_mouseup(evt); + } + }; + + AbstractChosen.prototype.outerHTML = function(element) { + var tmp; + if (element.outerHTML) { + return element.outerHTML; + } + tmp = document.createElement("div"); + tmp.appendChild(element); + return tmp.innerHTML; + }; + + AbstractChosen.prototype.get_single_html = function() { + return "\n " + this.default_text + "\n
          \n
          \n
          \n
          \n \n
          \n
            \n
            "; + }; + + AbstractChosen.prototype.get_multi_html = function() { + return "
              \n
            • \n \n
            • \n
            \n
            \n
              \n
              "; + }; + + AbstractChosen.prototype.get_no_results_html = function(terms) { + return "
            • \n " + this.results_none_found + " " + (this.escape_html(terms)) + "\n
            • "; + }; + + AbstractChosen.browser_is_supported = function() { + if ("Microsoft Internet Explorer" === window.navigator.appName) { + return document.documentMode >= 8; + } + if (/iP(od|hone)/i.test(window.navigator.userAgent) || /IEMobile/i.test(window.navigator.userAgent) || /Windows Phone/i.test(window.navigator.userAgent) || /BlackBerry/i.test(window.navigator.userAgent) || /BB10/i.test(window.navigator.userAgent) || /Android.*Mobile/i.test(window.navigator.userAgent)) { + return false; + } + return true; + }; + + AbstractChosen.default_multiple_text = "Select Some Options"; + + AbstractChosen.default_single_text = "Select an Option"; + + AbstractChosen.default_no_result_text = "No results match"; + + return AbstractChosen; + + })(); + + this.Chosen = (function(superClass) { + var triggerHtmlEvent; + + extend(Chosen, superClass); + + function Chosen() { + return Chosen.__super__.constructor.apply(this, arguments); + } + + Chosen.prototype.setup = function() { + return this.current_selectedIndex = this.form_field.selectedIndex; + }; + + Chosen.prototype.set_up_html = function() { + var container_classes, container_props; + container_classes = ["chosen-container"]; + container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); + if (this.inherit_select_classes && this.form_field.className) { + container_classes.push(this.form_field.className); + } + if (this.is_rtl) { + container_classes.push("chosen-rtl"); + } + container_props = { + 'class': container_classes.join(' '), + 'title': this.form_field.title + }; + if (this.form_field.id.length) { + container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; + } + this.container = new Element('div', container_props); + this.container.setStyle({ + width: this.container_width() + }); + if (this.is_multiple) { + this.container.update(this.get_multi_html()); + } else { + this.container.update(this.get_single_html()); + } + this.form_field.hide().insert({ + after: this.container + }); + this.dropdown = this.container.down('div.chosen-drop'); + this.search_field = this.container.down('input'); + this.search_results = this.container.down('ul.chosen-results'); + this.search_field_scale(); + this.search_no_results = this.container.down('li.no-results'); + if (this.is_multiple) { + this.search_choices = this.container.down('ul.chosen-choices'); + this.search_container = this.container.down('li.search-field'); + } else { + this.search_container = this.container.down('div.chosen-search'); + this.selected_item = this.container.down('.chosen-single'); + } + this.results_build(); + this.set_tab_index(); + return this.set_label_behavior(); + }; + + Chosen.prototype.on_ready = function() { + return this.form_field.fire("chosen:ready", { + chosen: this + }); + }; + + Chosen.prototype.register_observers = function() { + this.container.observe("touchstart", (function(_this) { + return function(evt) { + return _this.container_mousedown(evt); + }; + })(this)); + this.container.observe("touchend", (function(_this) { + return function(evt) { + return _this.container_mouseup(evt); + }; + })(this)); + this.container.observe("mousedown", (function(_this) { + return function(evt) { + return _this.container_mousedown(evt); + }; + })(this)); + this.container.observe("mouseup", (function(_this) { + return function(evt) { + return _this.container_mouseup(evt); + }; + })(this)); + this.container.observe("mouseenter", (function(_this) { + return function(evt) { + return _this.mouse_enter(evt); + }; + })(this)); + this.container.observe("mouseleave", (function(_this) { + return function(evt) { + return _this.mouse_leave(evt); + }; + })(this)); + this.search_results.observe("mouseup", (function(_this) { + return function(evt) { + return _this.search_results_mouseup(evt); + }; + })(this)); + this.search_results.observe("mouseover", (function(_this) { + return function(evt) { + return _this.search_results_mouseover(evt); + }; + })(this)); + this.search_results.observe("mouseout", (function(_this) { + return function(evt) { + return _this.search_results_mouseout(evt); + }; + })(this)); + this.search_results.observe("mousewheel", (function(_this) { + return function(evt) { + return _this.search_results_mousewheel(evt); + }; + })(this)); + this.search_results.observe("DOMMouseScroll", (function(_this) { + return function(evt) { + return _this.search_results_mousewheel(evt); + }; + })(this)); + this.search_results.observe("touchstart", (function(_this) { + return function(evt) { + return _this.search_results_touchstart(evt); + }; + })(this)); + this.search_results.observe("touchmove", (function(_this) { + return function(evt) { + return _this.search_results_touchmove(evt); + }; + })(this)); + this.search_results.observe("touchend", (function(_this) { + return function(evt) { + return _this.search_results_touchend(evt); + }; + })(this)); + this.form_field.observe("chosen:updated", (function(_this) { + return function(evt) { + return _this.results_update_field(evt); + }; + })(this)); + this.form_field.observe("chosen:activate", (function(_this) { + return function(evt) { + return _this.activate_field(evt); + }; + })(this)); + this.form_field.observe("chosen:open", (function(_this) { + return function(evt) { + return _this.container_mousedown(evt); + }; + })(this)); + this.form_field.observe("chosen:close", (function(_this) { + return function(evt) { + return _this.close_field(evt); + }; + })(this)); + this.search_field.observe("blur", (function(_this) { + return function(evt) { + return _this.input_blur(evt); + }; + })(this)); + this.search_field.observe("keyup", (function(_this) { + return function(evt) { + return _this.keyup_checker(evt); + }; + })(this)); + this.search_field.observe("keydown", (function(_this) { + return function(evt) { + return _this.keydown_checker(evt); + }; + })(this)); + this.search_field.observe("focus", (function(_this) { + return function(evt) { + return _this.input_focus(evt); + }; + })(this)); + this.search_field.observe("cut", (function(_this) { + return function(evt) { + return _this.clipboard_event_checker(evt); + }; + })(this)); + this.search_field.observe("paste", (function(_this) { + return function(evt) { + return _this.clipboard_event_checker(evt); + }; + })(this)); + if (this.is_multiple) { + return this.search_choices.observe("click", (function(_this) { + return function(evt) { + return _this.choices_click(evt); + }; + })(this)); + } else { + return this.container.observe("click", (function(_this) { + return function(evt) { + return evt.preventDefault(); + }; + })(this)); + } + }; + + Chosen.prototype.destroy = function() { + var event, i, len, ref; + this.container.ownerDocument.stopObserving("click", this.click_test_action); + ref = ['chosen:updated', 'chosen:activate', 'chosen:open', 'chosen:close']; + for (i = 0, len = ref.length; i < len; i++) { + event = ref[i]; + this.form_field.stopObserving(event); + } + this.container.stopObserving(); + this.search_results.stopObserving(); + this.search_field.stopObserving(); + if (this.form_field_label != null) { + this.form_field_label.stopObserving(); + } + if (this.is_multiple) { + this.search_choices.stopObserving(); + this.container.select(".search-choice-close").each(function(choice) { + return choice.stopObserving(); + }); + } else { + this.selected_item.stopObserving(); + } + if (this.search_field.tabIndex) { + this.form_field.tabIndex = this.search_field.tabIndex; + } + this.container.remove(); + return this.form_field.show(); + }; + + Chosen.prototype.search_field_disabled = function() { + var ref; + this.is_disabled = this.form_field.disabled || ((ref = this.form_field.up('fieldset')) != null ? ref.disabled : void 0) || false; + if (this.is_disabled) { + this.container.addClassName('chosen-disabled'); + } else { + this.container.removeClassName('chosen-disabled'); + } + this.search_field.disabled = this.is_disabled; + if (!this.is_multiple) { + this.selected_item.stopObserving('focus', this.activate_field); + } + if (this.is_disabled) { + return this.close_field(); + } else if (!this.is_multiple) { + return this.selected_item.observe('focus', this.activate_field); + } + }; + + Chosen.prototype.container_mousedown = function(evt) { + var ref; + if (this.is_disabled) { + return; + } + if (evt && ((ref = evt.type) === 'mousedown' || ref === 'touchstart') && !this.results_showing) { + evt.preventDefault(); + } + if (!((evt != null) && evt.target.hasClassName("search-choice-close"))) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.clear(); + } + this.container.ownerDocument.observe("click", this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chosen-single"))) { + this.results_toggle(); + } + return this.activate_field(); + } + }; + + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { + return this.results_reset(evt); + } + }; + + Chosen.prototype.search_results_mousewheel = function(evt) { + var delta; + delta = evt.deltaY || -evt.wheelDelta || evt.detail; + if (delta != null) { + evt.preventDefault(); + if (evt.type === 'DOMMouseScroll') { + delta = delta * 40; + } + return this.search_results.scrollTop = delta + this.search_results.scrollTop; + } + }; + + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClassName("chosen-container-active")) { + return this.close_field(); + } + }; + + Chosen.prototype.close_field = function() { + this.container.ownerDocument.stopObserving("click", this.click_test_action); + this.active_field = false; + this.results_hide(); + this.container.removeClassName("chosen-container-active"); + this.clear_backstroke(); + this.show_search_field_default(); + this.search_field_scale(); + return this.search_field.blur(); + }; + + Chosen.prototype.activate_field = function() { + if (this.is_disabled) { + return; + } + this.container.addClassName("chosen-container-active"); + this.active_field = true; + this.search_field.value = this.get_search_field_value(); + return this.search_field.focus(); + }; + + Chosen.prototype.test_active_click = function(evt) { + if (evt.target.up('.chosen-container') === this.container) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + + Chosen.prototype.results_build = function() { + this.parsing = true; + this.selected_option_count = null; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple) { + this.search_choices.select("li.search-choice").invoke("remove"); + } else { + this.single_set_selected_text(); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { + this.search_field.readOnly = true; + this.container.addClassName("chosen-container-single-nosearch"); + } else { + this.search_field.readOnly = false; + this.container.removeClassName("chosen-container-single-nosearch"); + } + } + this.update_results_content(this.results_option_build({ + first: true + })); + this.search_field_disabled(); + this.show_search_field_default(); + this.search_field_scale(); + return this.parsing = false; + }; + + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClassName("highlighted"); + maxHeight = parseInt(this.search_results.getStyle('maxHeight'), 10); + visible_top = this.search_results.scrollTop; + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.positionedOffset().top; + high_bottom = high_top + this.result_highlight.getHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop = (high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0; + } else if (high_top < visible_top) { + return this.search_results.scrollTop = high_top; + } + }; + + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClassName('highlighted'); + } + return this.result_highlight = null; + }; + + Chosen.prototype.results_show = function() { + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field.fire("chosen:maxselected", { + chosen: this + }); + return false; + } + this.container.addClassName("chosen-with-drop"); + this.results_showing = true; + this.search_field.focus(); + this.search_field.value = this.get_search_field_value(); + this.winnow_results(); + return this.form_field.fire("chosen:showing_dropdown", { + chosen: this + }); + }; + + Chosen.prototype.update_results_content = function(content) { + return this.search_results.update(content); + }; + + Chosen.prototype.results_hide = function() { + if (this.results_showing) { + this.result_clear_highlight(); + this.container.removeClassName("chosen-with-drop"); + this.form_field.fire("chosen:hiding_dropdown", { + chosen: this + }); + } + return this.results_showing = false; + }; + + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field.tabIndex) { + ti = this.form_field.tabIndex; + this.form_field.tabIndex = -1; + return this.search_field.tabIndex = ti; + } + }; + + Chosen.prototype.set_label_behavior = function() { + this.form_field_label = this.form_field.up("label"); + if (this.form_field_label == null) { + this.form_field_label = $$("label[for='" + this.form_field.id + "']").first(); + } + if (this.form_field_label != null) { + return this.form_field_label.observe("click", this.label_click_handler); + } + }; + + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { + this.search_field.value = this.default_text; + return this.search_field.addClassName("default"); + } else { + this.search_field.value = ""; + return this.search_field.removeClassName("default"); + } + }; + + Chosen.prototype.search_results_mouseup = function(evt) { + var target; + target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); + if (target) { + this.result_highlight = target; + this.result_select(evt); + return this.search_field.focus(); + } + }; + + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); + if (target) { + return this.result_do_highlight(target); + } + }; + + Chosen.prototype.search_results_mouseout = function(evt) { + if (evt.target.hasClassName('active-result') || evt.target.up('.active-result')) { + return this.result_clear_highlight(); + } + }; + + Chosen.prototype.choice_build = function(item) { + var choice, close_link; + choice = new Element('li', { + "class": "search-choice" + }).update("" + (this.choice_label(item)) + ""); + if (item.disabled) { + choice.addClassName('search-choice-disabled'); + } else { + close_link = new Element('a', { + href: '#', + "class": 'search-choice-close', + rel: item.array_index + }); + close_link.observe("click", (function(_this) { + return function(evt) { + return _this.choice_destroy_link_click(evt); + }; + })(this)); + choice.insert(close_link); + } + return this.search_container.insert({ + before: choice + }); + }; + + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + if (!this.is_disabled) { + return this.choice_destroy(evt.target); + } + }; + + Chosen.prototype.choice_destroy = function(link) { + if (this.result_deselect(link.readAttribute("rel"))) { + if (this.active_field) { + this.search_field.focus(); + } else { + this.show_search_field_default(); + } + if (this.is_multiple && this.choices_count() > 0 && this.get_search_field_value().length < 1) { + this.results_hide(); + } + link.up('li').remove(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.results_reset = function() { + this.reset_single_select_options(); + this.form_field.options[0].selected = true; + this.single_set_selected_text(); + this.show_search_field_default(); + this.results_reset_cleanup(); + this.trigger_form_field_change(); + if (this.active_field) { + return this.results_hide(); + } + }; + + Chosen.prototype.results_reset_cleanup = function() { + var deselect_trigger; + this.current_selectedIndex = this.form_field.selectedIndex; + deselect_trigger = this.selected_item.down("abbr"); + if (deselect_trigger) { + return deselect_trigger.remove(); + } + }; + + Chosen.prototype.result_select = function(evt) { + var high, item; + if (this.result_highlight) { + high = this.result_highlight; + this.result_clear_highlight(); + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field.fire("chosen:maxselected", { + chosen: this + }); + return false; + } + if (this.is_multiple) { + high.removeClassName("active-result"); + } else { + this.reset_single_select_options(); + } + high.addClassName("result-selected"); + item = this.results_data[high.getAttribute("data-option-array-index")]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + this.selected_option_count = null; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.single_set_selected_text(this.choice_label(item)); + } + if (this.is_multiple && (!this.hide_results_on_select || (evt.metaKey || evt.ctrlKey))) { + if (evt.metaKey || evt.ctrlKey) { + this.winnow_results({ + skip_highlight: true + }); + } else { + this.search_field.value = ""; + this.winnow_results(); + } + } else { + this.results_hide(); + this.show_search_field_default(); + } + if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) { + this.trigger_form_field_change(); + } + this.current_selectedIndex = this.form_field.selectedIndex; + evt.preventDefault(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.single_set_selected_text = function(text) { + if (text == null) { + text = this.default_text; + } + if (text === this.default_text) { + this.selected_item.addClassName("chosen-default"); + } else { + this.single_deselect_control_build(); + this.selected_item.removeClassName("chosen-default"); + } + return this.selected_item.down("span").update(text); + }; + + Chosen.prototype.result_deselect = function(pos) { + var result_data; + result_data = this.results_data[pos]; + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + this.selected_option_count = null; + this.result_clear_highlight(); + if (this.results_showing) { + this.winnow_results(); + } + this.trigger_form_field_change(); + this.search_field_scale(); + return true; + } else { + return false; + } + }; + + Chosen.prototype.single_deselect_control_build = function() { + if (!this.allow_single_deselect) { + return; + } + if (!this.selected_item.down("abbr")) { + this.selected_item.down("span").insert({ + after: "" + }); + } + return this.selected_item.addClassName("chosen-single-with-deselect"); + }; + + Chosen.prototype.get_search_field_value = function() { + return this.search_field.value; + }; + + Chosen.prototype.get_search_text = function() { + return this.get_search_field_value().strip(); + }; + + Chosen.prototype.escape_html = function(text) { + return text.escapeHTML(); + }; + + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high; + if (!this.is_multiple) { + do_high = this.search_results.down(".result-selected.active-result"); + } + if (do_high == null) { + do_high = this.search_results.down(".active-result"); + } + if (do_high != null) { + return this.result_do_highlight(do_high); + } + }; + + Chosen.prototype.no_results = function(terms) { + this.search_results.insert(this.get_no_results_html(terms)); + return this.form_field.fire("chosen:no_results", { + chosen: this + }); + }; + + Chosen.prototype.no_results_clear = function() { + var nr, results1; + nr = null; + results1 = []; + while (nr = this.search_results.down(".no-results")) { + results1.push(nr.remove()); + } + return results1; + }; + + Chosen.prototype.keydown_arrow = function() { + var next_sib; + if (this.results_showing && this.result_highlight) { + next_sib = this.result_highlight.next('.active-result'); + if (next_sib) { + return this.result_do_highlight(next_sib); + } + } else { + return this.results_show(); + } + }; + + Chosen.prototype.keyup_arrow = function() { + var actives, prevs, sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + sibs = this.result_highlight.previousSiblings(); + actives = this.search_results.select("li.active-result"); + prevs = sibs.intersect(actives); + if (prevs.length) { + return this.result_do_highlight(prevs.first()); + } else { + if (this.choices_count() > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + + Chosen.prototype.keydown_backstroke = function() { + var next_available_destroy; + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.down("a")); + return this.clear_backstroke(); + } else { + next_available_destroy = this.search_container.siblings().last(); + if (next_available_destroy && next_available_destroy.hasClassName("search-choice") && !next_available_destroy.hasClassName("search-choice-disabled")) { + this.pending_backstroke = next_available_destroy; + if (this.pending_backstroke) { + this.pending_backstroke.addClassName("search-choice-focus"); + } + if (this.single_backstroke_delete) { + return this.keydown_backstroke(); + } else { + return this.pending_backstroke.addClassName("search-choice-focus"); + } + } + } + }; + + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClassName("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + + Chosen.prototype.search_field_scale = function() { + var container_width, div, i, len, style, style_block, styles, width; + if (!this.is_multiple) { + return; + } + style_block = { + position: 'absolute', + left: '-1000px', + top: '-1000px', + display: 'none', + whiteSpace: 'pre' + }; + styles = ['fontSize', 'fontStyle', 'fontWeight', 'fontFamily', 'lineHeight', 'textTransform', 'letterSpacing']; + for (i = 0, len = styles.length; i < len; i++) { + style = styles[i]; + style_block[style] = this.search_field.getStyle(style); + } + div = new Element('div').update(this.escape_html(this.get_search_field_value())); + div.setStyle(style_block); + document.body.appendChild(div); + width = div.measure('width') + 25; + div.remove(); + if (container_width = this.container.getWidth()) { + width = Math.min(container_width - 10, width); + } + return this.search_field.setStyle({ + width: width + 'px' + }); + }; + + Chosen.prototype.trigger_form_field_change = function() { + triggerHtmlEvent(this.form_field, 'input'); + return triggerHtmlEvent(this.form_field, 'change'); + }; + + triggerHtmlEvent = function(element, eventType) { + var error, evt; + if (element.dispatchEvent) { + try { + evt = new Event(eventType, { + bubbles: true, + cancelable: true + }); + } catch (error) { + evt = document.createEvent('HTMLEvents'); + evt.initEvent(eventType, true, true); + } + return element.dispatchEvent(evt); + } else { + return element.fireEvent("on" + eventType, document.createEventObject()); + } + }; + + return Chosen; + + })(AbstractChosen); + +}).call(this); diff --git a/WebLab/script/chosen/chosen.proto.min.js b/WebLab/script/chosen/chosen.proto.min.js new file mode 100644 index 00000000..cbe444d7 --- /dev/null +++ b/WebLab/script/chosen/chosen.proto.min.js @@ -0,0 +1,3 @@ +/* Chosen v1.8.7 | (c) 2011-2018 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ + +(function(){var e,t,s=function(e,t){return function(){return e.apply(t,arguments)}},i=function(e,t){function s(){this.constructor=e}for(var i in t)r.call(t,i)&&(e[i]=t[i]);return s.prototype=t.prototype,e.prototype=new s,e.__super__=t.prototype,e},r={}.hasOwnProperty;(t=function(){function e(){this.options_index=0,this.parsed=[]}return e.prototype.add_node=function(e){return"OPTGROUP"===e.nodeName.toUpperCase()?this.add_group(e):this.add_option(e)},e.prototype.add_group=function(e){var t,s,i,r,n,o;for(t=this.parsed.length,this.parsed.push({array_index:t,group:!0,label:e.label,title:e.title?e.title:void 0,children:0,disabled:e.disabled,classes:e.className}),o=[],s=0,i=(n=e.childNodes).length;s"+this.escape_html(e.group_label)+""+e.html:e.html},e.prototype.mouse_enter=function(){return this.mouse_on_container=!0},e.prototype.mouse_leave=function(){return this.mouse_on_container=!1},e.prototype.input_focus=function(e){if(this.is_multiple){if(!this.active_field)return setTimeout(function(e){return function(){return e.container_mousedown()}}(this),50)}else if(!this.active_field)return this.activate_field()},e.prototype.input_blur=function(e){if(!this.mouse_on_container)return this.active_field=!1,setTimeout(function(e){return function(){return e.blur_test()}}(this),100)},e.prototype.label_click_handler=function(e){return this.is_multiple?this.container_mousedown(e):this.activate_field()},e.prototype.results_option_build=function(e){var t,s,i,r,n,o,l;for(t="",l=0,r=0,n=(o=this.results_data).length;r=this.max_shown_results));r++);return t},e.prototype.result_add_option=function(e){var t,s;return e.search_match&&this.include_option_in_results(e)?(t=[],e.disabled||e.selected&&this.is_multiple||t.push("active-result"),!e.disabled||e.selected&&this.is_multiple||t.push("disabled-result"),e.selected&&t.push("result-selected"),null!=e.group_array_index&&t.push("group-option"),""!==e.classes&&t.push(e.classes),s=document.createElement("li"),s.className=t.join(" "),e.style&&(s.style.cssText=e.style),s.setAttribute("data-option-array-index",e.array_index),s.innerHTML=e.highlighted_html||e.html,e.title&&(s.title=e.title),this.outerHTML(s)):""},e.prototype.result_add_group=function(e){var t,s;return(e.search_match||e.group_match)&&e.active_options>0?((t=[]).push("group-result"),e.classes&&t.push(e.classes),s=document.createElement("li"),s.className=t.join(" "),s.innerHTML=e.highlighted_html||this.escape_html(e.label),e.title&&(s.title=e.title),this.outerHTML(s)):""},e.prototype.results_update_field=function(){if(this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing)return this.winnow_results()},e.prototype.reset_single_select_options=function(){var e,t,s,i,r;for(r=[],e=0,t=(s=this.results_data).length;e"+this.escape_html(s)+""+this.escape_html(p)),null!=_&&(_.group_match=!0)):null!=n.group_array_index&&this.results_data[n.group_array_index].search_match&&(n.search_match=!0)));return this.result_clear_highlight(),a<1&&l.length?(this.update_results_content(""),this.no_results(l)):(this.update_results_content(this.results_option_build()),(null!=e?e.skip_highlight:void 0)?void 0:this.winnow_results_set_highlight())},e.prototype.get_search_regex=function(e){var t,s;return s=this.search_contains?e:"(^|\\s|\\b)"+e+"[^\\s]*",this.enable_split_word_search||this.search_contains||(s="^"+s),t=this.case_sensitive_search?"":"i",new RegExp(s,t)},e.prototype.search_string_match=function(e,t){var s;return s=t.exec(e),!this.search_contains&&(null!=s?s[1]:void 0)&&(s.index+=1),s},e.prototype.choices_count=function(){var e,t,s;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,e=0,t=(s=this.form_field.options).length;e0?this.keydown_backstroke():this.pending_backstroke||(this.result_clear_highlight(),this.results_search());break;case 13:e.preventDefault(),this.results_showing&&this.result_select(e);break;case 27:this.results_showing&&this.results_hide();break;case 9:case 16:case 17:case 18:case 38:case 40:case 91:break;default:this.results_search()}},e.prototype.clipboard_event_checker=function(e){if(!this.is_disabled)return setTimeout(function(e){return function(){return e.results_search()}}(this),50)},e.prototype.container_width=function(){return null!=this.options.width?this.options.width:this.form_field.offsetWidth+"px"},e.prototype.include_option_in_results=function(e){return!(this.is_multiple&&!this.display_selected_options&&e.selected)&&(!(!this.display_disabled_options&&e.disabled)&&!e.empty)},e.prototype.search_results_touchstart=function(e){return this.touch_started=!0,this.search_results_mouseover(e)},e.prototype.search_results_touchmove=function(e){return this.touch_started=!1,this.search_results_mouseout(e)},e.prototype.search_results_touchend=function(e){if(this.touch_started)return this.search_results_mouseup(e)},e.prototype.outerHTML=function(e){var t;return e.outerHTML?e.outerHTML:((t=document.createElement("div")).appendChild(e),t.innerHTML)},e.prototype.get_single_html=function(){return'\n '+this.default_text+'\n
              \n
              \n
              \n \n
                \n
                '},e.prototype.get_multi_html=function(){return'
                  \n
                • \n \n
                • \n
                \n
                \n
                  \n
                  '},e.prototype.get_no_results_html=function(e){return'
                • \n '+this.results_none_found+" "+this.escape_html(e)+"\n
                • "},e.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:!(/iP(od|hone)/i.test(window.navigator.userAgent)||/IEMobile/i.test(window.navigator.userAgent)||/Windows Phone/i.test(window.navigator.userAgent)||/BlackBerry/i.test(window.navigator.userAgent)||/BB10/i.test(window.navigator.userAgent)||/Android.*Mobile/i.test(window.navigator.userAgent))},e.default_multiple_text="Select Some Options",e.default_single_text="Select an Option",e.default_no_result_text="No results match",e}(),this.Chosen=function(s){function r(){return r.__super__.constructor.apply(this,arguments)}var n;return i(r,e),r.prototype.setup=function(){return this.current_selectedIndex=this.form_field.selectedIndex},r.prototype.set_up_html=function(){var e,t;return(e=["chosen-container"]).push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&e.push(this.form_field.className),this.is_rtl&&e.push("chosen-rtl"),t={class:e.join(" "),title:this.form_field.title},this.form_field.id.length&&(t.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=new Element("div",t),this.container.setStyle({width:this.container_width()}),this.is_multiple?this.container.update(this.get_multi_html()):this.container.update(this.get_single_html()),this.form_field.hide().insert({after:this.container}),this.dropdown=this.container.down("div.chosen-drop"),this.search_field=this.container.down("input"),this.search_results=this.container.down("ul.chosen-results"),this.search_field_scale(),this.search_no_results=this.container.down("li.no-results"),this.is_multiple?(this.search_choices=this.container.down("ul.chosen-choices"),this.search_container=this.container.down("li.search-field")):(this.search_container=this.container.down("div.chosen-search"),this.selected_item=this.container.down(".chosen-single")),this.results_build(),this.set_tab_index(),this.set_label_behavior()},r.prototype.on_ready=function(){return this.form_field.fire("chosen:ready",{chosen:this})},r.prototype.register_observers=function(){return this.container.observe("touchstart",function(e){return function(t){return e.container_mousedown(t)}}(this)),this.container.observe("touchend",function(e){return function(t){return e.container_mouseup(t)}}(this)),this.container.observe("mousedown",function(e){return function(t){return e.container_mousedown(t)}}(this)),this.container.observe("mouseup",function(e){return function(t){return e.container_mouseup(t)}}(this)),this.container.observe("mouseenter",function(e){return function(t){return e.mouse_enter(t)}}(this)),this.container.observe("mouseleave",function(e){return function(t){return e.mouse_leave(t)}}(this)),this.search_results.observe("mouseup",function(e){return function(t){return e.search_results_mouseup(t)}}(this)),this.search_results.observe("mouseover",function(e){return function(t){return e.search_results_mouseover(t)}}(this)),this.search_results.observe("mouseout",function(e){return function(t){return e.search_results_mouseout(t)}}(this)),this.search_results.observe("mousewheel",function(e){return function(t){return e.search_results_mousewheel(t)}}(this)),this.search_results.observe("DOMMouseScroll",function(e){return function(t){return e.search_results_mousewheel(t)}}(this)),this.search_results.observe("touchstart",function(e){return function(t){return e.search_results_touchstart(t)}}(this)),this.search_results.observe("touchmove",function(e){return function(t){return e.search_results_touchmove(t)}}(this)),this.search_results.observe("touchend",function(e){return function(t){return e.search_results_touchend(t)}}(this)),this.form_field.observe("chosen:updated",function(e){return function(t){return e.results_update_field(t)}}(this)),this.form_field.observe("chosen:activate",function(e){return function(t){return e.activate_field(t)}}(this)),this.form_field.observe("chosen:open",function(e){return function(t){return e.container_mousedown(t)}}(this)),this.form_field.observe("chosen:close",function(e){return function(t){return e.close_field(t)}}(this)),this.search_field.observe("blur",function(e){return function(t){return e.input_blur(t)}}(this)),this.search_field.observe("keyup",function(e){return function(t){return e.keyup_checker(t)}}(this)),this.search_field.observe("keydown",function(e){return function(t){return e.keydown_checker(t)}}(this)),this.search_field.observe("focus",function(e){return function(t){return e.input_focus(t)}}(this)),this.search_field.observe("cut",function(e){return function(t){return e.clipboard_event_checker(t)}}(this)),this.search_field.observe("paste",function(e){return function(t){return e.clipboard_event_checker(t)}}(this)),this.is_multiple?this.search_choices.observe("click",function(e){return function(t){return e.choices_click(t)}}(this)):this.container.observe("click",function(e){return e.preventDefault()})},r.prototype.destroy=function(){var e,t,s,i;for(this.container.ownerDocument.stopObserving("click",this.click_test_action),t=0,s=(i=["chosen:updated","chosen:activate","chosen:open","chosen:close"]).length;t=r?this.search_results.scrollTop=t-i>0?t-i:0:s"+this.choice_label(e)+""),e.disabled?t.addClassName("search-choice-disabled"):((s=new Element("a",{href:"#",class:"search-choice-close",rel:e.array_index})).observe("click",function(e){return function(t){return e.choice_destroy_link_click(t)}}(this)),t.insert(s)),this.search_container.insert({before:t})},r.prototype.choice_destroy_link_click=function(e){if(e.preventDefault(),e.stopPropagation(),!this.is_disabled)return this.choice_destroy(e.target)},r.prototype.choice_destroy=function(e){if(this.result_deselect(e.readAttribute("rel")))return this.active_field?this.search_field.focus():this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.get_search_field_value().length<1&&this.results_hide(),e.up("li").remove(),this.search_field_scale()},r.prototype.results_reset=function(){if(this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.trigger_form_field_change(),this.active_field)return this.results_hide()},r.prototype.results_reset_cleanup=function(){var e;if(this.current_selectedIndex=this.form_field.selectedIndex,e=this.selected_item.down("abbr"))return e.remove()},r.prototype.result_select=function(e){var t,s;if(this.result_highlight)return t=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field.fire("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?t.removeClassName("active-result"):this.reset_single_select_options(),t.addClassName("result-selected"),s=this.results_data[t.getAttribute("data-option-array-index")],s.selected=!0,this.form_field.options[s.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(s):this.single_set_selected_text(this.choice_label(s)),this.is_multiple&&(!this.hide_results_on_select||e.metaKey||e.ctrlKey)?e.metaKey||e.ctrlKey?this.winnow_results({skip_highlight:!0}):(this.search_field.value="",this.winnow_results()):(this.results_hide(),this.show_search_field_default()),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.trigger_form_field_change(),this.current_selectedIndex=this.form_field.selectedIndex,e.preventDefault(),this.search_field_scale())},r.prototype.single_set_selected_text=function(e){return null==e&&(e=this.default_text),e===this.default_text?this.selected_item.addClassName("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClassName("chosen-default")),this.selected_item.down("span").update(e)},r.prototype.result_deselect=function(e){var t;return t=this.results_data[e],!this.form_field.options[t.options_index].disabled&&(t.selected=!1,this.form_field.options[t.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.trigger_form_field_change(),this.search_field_scale(),!0)},r.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect)return this.selected_item.down("abbr")||this.selected_item.down("span").insert({after:''}),this.selected_item.addClassName("chosen-single-with-deselect")},r.prototype.get_search_field_value=function(){return this.search_field.value},r.prototype.get_search_text=function(){return this.get_search_field_value().strip()},r.prototype.escape_html=function(e){return e.escapeHTML()},r.prototype.winnow_results_set_highlight=function(){var e;if(this.is_multiple||(e=this.search_results.down(".result-selected.active-result")),null==e&&(e=this.search_results.down(".active-result")),null!=e)return this.result_do_highlight(e)},r.prototype.no_results=function(e){return this.search_results.insert(this.get_no_results_html(e)),this.form_field.fire("chosen:no_results",{chosen:this})},r.prototype.no_results_clear=function(){var e,t;for(e=null,t=[];e=this.search_results.down(".no-results");)t.push(e.remove());return t},r.prototype.keydown_arrow=function(){var e;return this.results_showing&&this.result_highlight?(e=this.result_highlight.next(".active-result"))?this.result_do_highlight(e):void 0:this.results_show()},r.prototype.keyup_arrow=function(){var e,t,s;return this.results_showing||this.is_multiple?this.result_highlight?(s=this.result_highlight.previousSiblings(),e=this.search_results.select("li.active-result"),(t=s.intersect(e)).length?this.result_do_highlight(t.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},r.prototype.keydown_backstroke=function(){var e;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.down("a")),this.clear_backstroke()):(e=this.search_container.siblings().last())&&e.hasClassName("search-choice")&&!e.hasClassName("search-choice-disabled")?(this.pending_backstroke=e,this.pending_backstroke&&this.pending_backstroke.addClassName("search-choice-focus"),this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClassName("search-choice-focus")):void 0},r.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClassName("search-choice-focus"),this.pending_backstroke=null},r.prototype.search_field_scale=function(){var e,t,s,i,r,n,o,l;if(this.is_multiple){for(n={position:"absolute",left:"-1000px",top:"-1000px",display:"none",whiteSpace:"pre"},s=0,i=(o=["fontSize","fontStyle","fontWeight","fontFamily","lineHeight","textTransform","letterSpacing"]).length;s