Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
e2ac212f
Commit
e2ac212f
authored
Apr 20, 2015
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
resolve confilict
parent
09d3763a
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
0 additions
and
1023 deletions
+0
-1023
connect.py
connect.py
+0
-4
AddUserAsset.py
docs/AddUserAsset.py
+0
-18
install.py
docs/install.py
+0
-4
require.txt
docs/require.txt
+0
-11
settings.py
jumpserver/settings.py
+0
-4
log_handler.py
log_handler.py
+0
-4
ssh
ssh
+0
-395
ssh.py
ssh.py
+0
-395
layer.ext.js
static/js/layer/extend/layer.ext.js
+0
-15
layer.min.js
static/js/layer/layer.min.js
+0
-19
layer.css
static/js/layer/skin/layer.css
+0
-86
layer.ext.css
static/js/layer/skin/layer.ext.css
+0
-48
log_offline.html
templates/jlog/log_offline.html
+0
-12
log_online.html
templates/jlog/log_online.html
+0
-8
No files found.
connect.py
View file @
e2ac212f
...
@@ -24,11 +24,7 @@ from multiprocessing import Pool
...
@@ -24,11 +24,7 @@ from multiprocessing import Pool
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
<<<<<<<
HEAD
django
.
setup
()
=======
#django.setup()
#django.setup()
>>>>>>>
beta
from
juser.models
import
User
from
juser.models
import
User
from
jlog.models
import
Log
from
jlog.models
import
Log
...
...
docs/AddUserAsset.py
View file @
e2ac212f
...
@@ -7,11 +7,7 @@ import datetime
...
@@ -7,11 +7,7 @@ import datetime
sys
.
path
.
append
(
'../'
)
sys
.
path
.
append
(
'../'
)
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
<<<<<<<
HEAD
django
.
setup
()
=======
#django.setup()
#django.setup()
>>>>>>>
beta
from
juser.views
import
db_add_user
,
md5_crypt
,
CRYPTOR
,
db_add_group
from
juser.views
import
db_add_user
,
md5_crypt
,
CRYPTOR
,
db_add_group
...
@@ -103,11 +99,7 @@ def test_add_asset():
...
@@ -103,11 +99,7 @@ def test_add_asset():
bis_group_all
=
BisGroup
.
objects
.
all
()
bis_group_all
=
BisGroup
.
objects
.
all
()
dept_all
=
DEPT
.
objects
.
all
()
dept_all
=
DEPT
.
objects
.
all
()
for
i
in
range
(
1
,
500
):
for
i
in
range
(
1
,
500
):
<<<<<<<
HEAD
ip
=
'192.168.1.'
+
str
(
i
)
=======
ip
=
'192.168.5.'
+
str
(
i
)
ip
=
'192.168.5.'
+
str
(
i
)
>>>>>>>
beta
asset
=
Asset
(
ip
=
ip
,
port
=
22
,
login_type
=
'L'
,
idc
=
test_idc
,
is_active
=
True
,
comment
=
'test'
)
asset
=
Asset
(
ip
=
ip
,
port
=
22
,
login_type
=
'L'
,
idc
=
test_idc
,
is_active
=
True
,
comment
=
'test'
)
asset
.
save
()
asset
.
save
()
asset
.
bis_group
=
[
random
.
choice
(
bis_group_all
)
for
i
in
range
(
2
)]
asset
.
bis_group
=
[
random
.
choice
(
bis_group_all
)
for
i
in
range
(
2
)]
...
@@ -136,15 +128,6 @@ def test_add_log():
...
@@ -136,15 +128,6 @@ def test_add_log():
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
#install()
#install()
<<<<<<<
HEAD
test_add_dept
()
test_add_group
()
test_add_user
()
test_add_idc
()
test_add_asset_group
()
test_add_asset
()
test_add_log
()
=======
#test_add_dept()
#test_add_dept()
#test_add_group()
#test_add_group()
#test_add_user()
#test_add_user()
...
@@ -152,7 +135,6 @@ if __name__ == '__main__':
...
@@ -152,7 +135,6 @@ if __name__ == '__main__':
#test_add_asset_group()
#test_add_asset_group()
test_add_asset
()
test_add_asset
()
#test_add_log()
#test_add_log()
>>>>>>>
beta
...
...
docs/install.py
View file @
e2ac212f
...
@@ -7,11 +7,7 @@ import datetime
...
@@ -7,11 +7,7 @@ import datetime
sys
.
path
.
append
(
'../'
)
sys
.
path
.
append
(
'../'
)
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
<<<<<<<
HEAD
django
.
setup
()
=======
#django.setup()
#django.setup()
>>>>>>>
beta
from
juser.views
import
db_add_user
,
md5_crypt
,
CRYPTOR
,
db_add_group
from
juser.views
import
db_add_user
,
md5_crypt
,
CRYPTOR
,
db_add_group
...
...
docs/require.txt
deleted
100644 → 0
View file @
09d3763a
pexpect==3.3
sphinx-me==0.3
django==1.6
python-ldap==2.4.18
paramiko==1.15.1
pycrypto==2.6.1
ecdsa>=0.11
MySQL-python==1.2.5
readline
django-uuidfield
\ No newline at end of file
jumpserver/settings.py
View file @
e2ac212f
...
@@ -66,11 +66,7 @@ MIDDLEWARE_CLASSES = (
...
@@ -66,11 +66,7 @@ MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware'
,
'django.middleware.common.CommonMiddleware'
,
#'django.middleware.csrf.CsrfViewMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware'
,
'django.contrib.auth.middleware.AuthenticationMiddleware'
,
<<<<<<<
HEAD
'django.contrib.auth.middleware.SessionAuthenticationMiddleware'
,
=======
#'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
#'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
>>>>>>>
beta
'django.contrib.messages.middleware.MessageMiddleware'
,
'django.contrib.messages.middleware.MessageMiddleware'
,
'django.middleware.clickjacking.XFrameOptionsMiddleware'
,
'django.middleware.clickjacking.XFrameOptionsMiddleware'
,
)
)
...
...
log_handler.py
View file @
e2ac212f
...
@@ -10,11 +10,7 @@ from datetime import datetime
...
@@ -10,11 +10,7 @@ from datetime import datetime
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
import
django
import
django
<<<<<<<
HEAD
django
.
setup
()
=======
#django.setup()
#django.setup()
>>>>>>>
beta
from
jlog.models
import
Log
from
jlog.models
import
Log
...
...
ssh
deleted
100644 → 0
View file @
09d3763a
#!/usr/local/bin/python
import
socket
import
sys
import
os
import
ast
import
select
import
time
from
datetime
import
datetime
import
paramiko
import
struct
import
fcntl
import
signal
import
textwrap
import
django
import
getpass
import
fnmatch
import
optparse
import
readline
from
multiprocessing
import
Pool
from
ConfigParser
import
ConfigParser
from
django.core.exceptions
import
ObjectDoesNotExist
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
django
.
setup
()
from
juser.models
import
User
from
jasset.models
import
Asset
from
jlog.models
import
Log
from
jumpserver.views
import
PyCrypt
from
jumpserver.api
import
user_perm_asset_api
,
user_perm_group_api
try
:
import
termios
import
tty
except
ImportError
:
print
'
\033
[1;31mOnly postfix supported.
\033
[0m'
time
.
sleep
(
3
)
sys
.
exit
()
BASE_DIR
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
CONF
=
ConfigParser
()
CONF
.
read
(
os
.
path
.
join
(
BASE_DIR
,
'jumpserver.conf'
))
LOG_DIR
=
os
.
path
.
join
(
BASE_DIR
,
'logs'
)
SSH_KEY_DIR
=
os
.
path
.
join
(
BASE_DIR
,
'keys'
)
SERVER_KEY_DIR
=
os
.
path
.
join
(
SSH_KEY_DIR
,
'server'
)
KEY
=
CONF
.
get
(
'web'
,
'key'
)
LOGIN_NAME
=
getpass
.
getuser
()
def
color_print
(
msg
,
color
=
'blue'
):
"""Print colorful string."""
color_msg
=
{
'blue'
:
'
\033
[1;36m
%
s
\033
[0m'
,
'green'
:
'
\033
[1;32m
%
s
\033
[0m'
,
'red'
:
'
\033
[1;31m
%
s
\033
[0m'
}
print
color_msg
.
get
(
color
,
'blue'
)
%
msg
def
color_print_exit
(
msg
,
color
=
'red'
):
"""Print colorful string and exit."""
color_print
(
msg
,
color
=
color
)
time
.
sleep
(
2
)
sys
.
exit
()
class
ServerError
(
Exception
):
pass
def
get_win_size
():
"""This function use to get the size of the windows!"""
if
'TIOCGWINSZ'
in
dir
(
termios
):
TIOCGWINSZ
=
termios
.
TIOCGWINSZ
else
:
TIOCGWINSZ
=
1074295912L
# Assume
s
=
struct
.
pack
(
'HHHH'
,
0
,
0
,
0
,
0
)
x
=
fcntl
.
ioctl
(
sys
.
stdout
.
fileno
(),
TIOCGWINSZ
,
s
)
return
struct
.
unpack
(
'HHHH'
,
x
)[
0
:
2
]
def
set_win_size
(
sig
,
data
):
"""This function use to set the window size of the terminal!"""
try
:
win_size
=
get_win_size
()
channel
.
resize_pty
(
height
=
win_size
[
0
],
width
=
win_size
[
1
])
except
:
pass
def
get_object
(
model
,
**
kwargs
):
try
:
the_object
=
model
.
objects
.
get
(
**
kwargs
)
except
ObjectDoesNotExist
:
raise
ServerError
(
'Object get
%
s failed.'
%
str
(
kwargs
.
values
()))
return
the_object
def
log_record
(
username
,
host
):
"""Logging user command and output."""
connect_log_dir
=
os
.
path
.
join
(
LOG_DIR
,
'connect'
)
timestamp_start
=
int
(
time
.
time
())
today
=
time
.
strftime
(
'
%
Y
%
m
%
d'
,
time
.
localtime
(
timestamp_start
))
time_now
=
time
.
strftime
(
'
%
H
%
M
%
S'
,
time
.
localtime
(
timestamp_start
))
today_connect_log_dir
=
os
.
path
.
join
(
connect_log_dir
,
today
)
log_filename
=
'
%
s_
%
s_
%
s.log'
%
(
username
,
host
,
time_now
)
log_file_path
=
os
.
path
.
join
(
today_connect_log_dir
,
log_filename
)
pid
=
os
.
getpid
()
ip_list
=
[]
remote_ip
=
os
.
popen
(
"who |grep `ps aux |gawk '{if ($2==
%
s) print $1}'` |gawk '{print $5}'|tr -d '()'"
%
pid
)
.
readlines
()
for
ip
in
remote_ip
:
ip_list
.
append
(
ip
.
strip
(
'
\n
'
))
ip_list
=
','
.
join
(
list
(
set
(
ip_list
)))
if
not
os
.
path
.
isdir
(
today_connect_log_dir
):
try
:
os
.
makedirs
(
today_connect_log_dir
)
os
.
chmod
(
today_connect_log_dir
,
0777
)
except
OSError
:
raise
ServerError
(
'Create
%
s failed, Please modify
%
s permission.'
%
(
today_connect_log_dir
,
connect_log_dir
))
try
:
log_file
=
open
(
log_file_path
,
'a'
)
except
IOError
:
raise
ServerError
(
'Create logfile failed, Please modify
%
s permission.'
%
today_connect_log_dir
)
log
=
Log
(
user
=
username
,
host
=
host
,
remote_ip
=
ip_list
,
log_path
=
log_file_path
,
start_time
=
datetime
.
now
(),
pid
=
pid
)
log_file
.
write
(
'Starttime is
%
s
\n
'
%
datetime
.
now
())
log
.
save
()
return
log_file
,
log
def
posix_shell
(
chan
,
username
,
host
):
"""
Use paramiko channel connect server interactive.
"""
log_file
,
log
=
log_record
(
username
,
host
)
old_tty
=
termios
.
tcgetattr
(
sys
.
stdin
)
try
:
tty
.
setraw
(
sys
.
stdin
.
fileno
())
tty
.
setcbreak
(
sys
.
stdin
.
fileno
())
chan
.
settimeout
(
0.0
)
while
True
:
try
:
r
,
w
,
e
=
select
.
select
([
chan
,
sys
.
stdin
],
[],
[])
except
:
pass
if
chan
in
r
:
try
:
x
=
chan
.
recv
(
1024
)
if
len
(
x
)
==
0
:
break
sys
.
stdout
.
write
(
x
)
sys
.
stdout
.
flush
()
log_file
.
write
(
x
)
log_file
.
flush
()
except
socket
.
timeout
:
pass
if
sys
.
stdin
in
r
:
x
=
os
.
read
(
sys
.
stdin
.
fileno
(),
1
)
if
len
(
x
)
==
0
:
break
chan
.
send
(
x
)
finally
:
timestamp_end
=
time
.
time
()
termios
.
tcsetattr
(
sys
.
stdin
,
termios
.
TCSADRAIN
,
old_tty
)
log_file
.
write
(
'Endtime is
%
s'
%
datetime
.
now
())
log_file
.
close
()
log
.
is_finished
=
True
log
.
log_finished
=
False
log
.
end_time
=
datetime
.
now
()
log
.
save
()
def
get_user_host
(
username
):
"""Get the hosts of under the user control."""
hosts_attr
=
{}
asset_all
=
user_perm_asset_api
(
username
)
for
asset
in
asset_all
:
hosts_attr
[
asset
.
ip
]
=
[
asset
.
id
,
asset
.
comment
]
return
hosts_attr
def
get_user_hostgroup
(
username
):
"""Get the hostgroups of under the user control."""
groups_attr
=
{}
group_all
=
user_perm_group_api
(
username
)
for
group
in
group_all
:
groups_attr
[
group
.
name
]
=
[
group
.
id
,
group
.
comment
]
return
groups_attr
def
get_connect_item
(
username
,
ip
):
cryptor
=
PyCrypt
(
KEY
)
asset
=
get_object
(
Asset
,
ip
=
ip
)
port
=
asset
.
port
if
not
asset
.
is_active
:
raise
ServerError
(
'Host
%
s is not active.'
%
ip
)
user
=
get_object
(
User
,
username
=
username
)
if
not
user
.
is_active
:
raise
ServerError
(
'User
%
s is not active.'
%
username
)
login_type_dict
=
{
'L'
:
user
.
ldap_pwd
,
}
if
asset
.
login_type
in
login_type_dict
:
password
=
cryptor
.
decrypt
(
login_type_dict
[
asset
.
login_type
])
return
username
,
password
,
ip
,
port
elif
asset
.
login_type
==
'M'
:
username
=
asset
.
username
password
=
cryptor
.
decrypt
(
asset
.
password
)
return
username
,
password
,
ip
,
port
else
:
raise
ServerError
(
'Login type is not in ["L", "M"]'
)
def
verify_connect
(
username
,
part_ip
):
hosts_attr
=
get_user_host
(
username
)
hosts
=
hosts_attr
.
keys
()
ip_matched
=
[
ip
for
ip
in
hosts
if
part_ip
in
ip
]
if
len
(
ip_matched
)
>
1
:
for
ip
in
ip_matched
:
print
'
%
s --
%
s'
%
(
ip
,
hosts_attr
[
ip
][
1
])
elif
len
(
ip_matched
)
<
1
:
color_print
(
'No Permission or No host.'
,
'red'
)
else
:
username
,
password
,
host
,
port
=
get_connect_item
(
username
,
ip_matched
[
0
])
print
username
,
password
,
host
,
port
connect
(
username
,
password
,
host
,
port
,
LOGIN_NAME
)
def
print_prompt
():
msg
=
"""
\033
[1;32m### Welcome Use JumpServer To Login. ###
\033
[0m
1) Type
\033
[32mIP ADDRESS
\033
[0m To Login.
2) Type
\033
[32mP/p
\033
[0m To Print The Servers You Available.
3) Type
\033
[32mG/g
\033
[0m To Print The Server Groups You Available.
4) Type
\033
[32mE/e
\033
[0m To Execute Command On Several Servers.
5) Type
\033
[32mQ/q
\033
[0m To Quit.
"""
print
textwrap
.
dedent
(
msg
)
def
print_user_host
(
username
):
hosts_attr
=
get_user_host
(
username
)
hosts
=
hosts_attr
.
keys
()
hosts
.
sort
()
for
ip
in
hosts
:
print
'
%
s --
%
s'
%
(
ip
,
hosts_attr
[
ip
][
1
])
def
print_user_hostgroup
(
username
):
group_attr
=
get_user_hostgroup
(
username
)
groups
=
group_attr
.
keys
()
for
g
in
groups
:
print
'
%
s --
%
s'
%
(
g
,
group_attr
[
g
][
1
])
def
connect
(
username
,
password
,
host
,
port
,
login_name
):
"""
Connect server.
"""
ps1
=
"PS1='[
\
u@
%
s
\
W]
\
$ '
\n
"
%
host
login_msg
=
"clear;echo -e '
\\
033[32mLogin
%
s done. Enjoy it.
\\
033[0m'
\n
"
%
host
# Make a ssh connection
ssh
=
paramiko
.
SSHClient
()
ssh
.
load_system_host_keys
()
ssh
.
set_missing_host_key_policy
(
paramiko
.
AutoAddPolicy
())
try
:
ssh
.
connect
(
host
,
port
=
port
,
username
=
username
,
password
=
password
,
compress
=
True
)
except
paramiko
.
ssh_exception
.
AuthenticationException
,
paramiko
.
ssh_exception
.
SSHException
:
raise
ServerError
(
'Authentication Error.'
)
except
socket
.
error
:
raise
ServerError
(
'Connect SSH Socket Port Error, Please Correct it.'
)
# Make a channel and set windows size
global
channel
win_size
=
get_win_size
()
channel
=
ssh
.
invoke_shell
(
height
=
win_size
[
0
],
width
=
win_size
[
1
])
#channel.resize_pty(height=win_size[0], width=win_size[1])
try
:
signal
.
signal
(
signal
.
SIGWINCH
,
set_win_size
)
except
:
pass
# Set PS1 and msg it
channel
.
send
(
ps1
)
channel
.
send
(
login_msg
)
# Make ssh interactive tunnel
posix_shell
(
channel
,
login_name
,
host
)
# Shutdown channel socket
channel
.
close
()
ssh
.
close
()
def
remote_exec_cmd
(
ip
,
port
,
username
,
password
,
cmd
):
try
:
time
.
sleep
(
5
)
ssh
=
paramiko
.
SSHClient
()
ssh
.
set_missing_host_key_policy
(
paramiko
.
AutoAddPolicy
())
ssh
.
connect
(
ip
,
port
,
username
,
password
,
timeout
=
5
)
stdin
,
stdout
,
stderr
=
ssh
.
exec_command
(
"bash -l -c '
%
s'"
%
cmd
)
out
=
stdout
.
readlines
()
err
=
stderr
.
readlines
()
color_print
(
'
%
s:'
%
ip
,
'blue'
)
for
i
in
out
:
color_print
(
" "
*
4
+
i
.
strip
(),
'green'
)
for
j
in
err
:
color_print
(
" "
*
4
+
j
.
strip
(),
'red'
)
ssh
.
close
()
except
Exception
as
e
:
color_print
(
ip
+
':'
,
'blue'
)
color_print
(
str
(
e
),
'red'
)
def
multi_remote_exec_cmd
(
hosts
,
username
,
cmd
):
pool
=
Pool
(
processes
=
5
)
for
host
in
hosts
:
username
,
password
,
ip
,
port
=
get_connect_item
(
username
,
host
)
pool
.
apply_async
(
remote_exec_cmd
,
(
ip
,
port
,
username
,
password
,
cmd
))
pool
.
close
()
pool
.
join
()
def
exec_cmd_servers
(
username
):
hosts
=
[]
color_print
(
"Input the Host IP(s),Separated by Commas, q/Q to Quit.
\n
\
You can choose in the following IP(s), Use Linux / Unix glob."
,
'green'
)
print_user_host
(
LOGIN_NAME
)
while
True
:
inputs
=
raw_input
(
'
\033
[1;32mip(s)>:
\033
[0m'
)
if
inputs
in
[
'q'
,
'Q'
]:
break
get_hosts
=
get_user_host
(
username
)
.
keys
()
for
host
in
get_hosts
:
if
fnmatch
.
fnmatch
(
host
,
inputs
):
hosts
.
append
(
host
.
strip
())
if
len
(
hosts
)
==
0
:
color_print
(
"Check again, Not matched any ip!"
,
'red'
)
continue
else
:
print
"You matched ip:
%
s"
%
hosts
color_print
(
"Input the Command , The command will be Execute on servers, q/Q to quit."
,
'green'
)
while
True
:
cmd
=
raw_input
(
'
\033
[1;32mCmd(s):
\033
[0m'
)
if
cmd
in
[
'q'
,
'Q'
]:
break
exec_log_dir
=
os
.
path
.
join
(
LOG_DIR
,
'exec_cmds'
)
if
not
os
.
path
.
isdir
(
exec_log_dir
):
os
.
mkdir
(
exec_log_dir
)
os
.
chmod
(
exec_log_dir
,
0777
)
filename
=
"
%
s/
%
s.log"
%
(
exec_log_dir
,
time
.
strftime
(
'
%
Y
%
m
%
d'
))
f
=
open
(
filename
,
'a'
)
f
.
write
(
"DateTime:
%
s User:
%
s Host:
%
s Cmds:
%
s
\n
"
%
(
time
.
strftime
(
'
%
Y/
%
m/
%
d
%
H:
%
M:
%
S'
),
username
,
hosts
,
cmd
))
multi_remote_exec_cmd
(
hosts
,
username
,
cmd
)
def
help
():
global
p
,
options
,
arguments
usage
=
"usage:
%
prog '' [options] arg1 [options] arg2"
p
=
optparse
.
OptionParser
(
usage
=
usage
)
p
.
add_option
(
'-p'
,
'--host'
,
help
=
"Print The Servers You Available."
)
p
.
add_option
(
'-g'
,
'--group'
,
help
=
"Print The Server Groups You Available."
)
options
,
arguments
=
p
.
parse_args
()
def
main
():
help
()
if
options
.
host
:
pass
elif
options
.
group
:
pass
else
:
try
:
verify_connect
(
LOGIN_NAME
,
sys
.
argv
[
1
])
except
ServerError
,
e
:
color_print
(
e
,
'red'
)
if
__name__
==
'__main__'
:
main
()
ssh.py
deleted
100644 → 0
View file @
09d3763a
#!/usr/bin/env python
import
socket
import
sys
import
os
import
ast
import
select
import
time
from
datetime
import
datetime
import
paramiko
import
struct
import
fcntl
import
signal
import
textwrap
import
django
import
getpass
import
fnmatch
import
optparse
import
readline
from
multiprocessing
import
Pool
from
ConfigParser
import
ConfigParser
from
django.core.exceptions
import
ObjectDoesNotExist
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
django
.
setup
()
from
juser.models
import
User
from
jasset.models
import
Asset
from
jlog.models
import
Log
from
jumpserver.views
import
PyCrypt
from
jumpserver.api
import
user_perm_asset_api
,
user_perm_group_api
try
:
import
termios
import
tty
except
ImportError
:
print
'
\033
[1;31mOnly postfix supported.
\033
[0m'
time
.
sleep
(
3
)
sys
.
exit
()
BASE_DIR
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
CONF
=
ConfigParser
()
CONF
.
read
(
os
.
path
.
join
(
BASE_DIR
,
'jumpserver.conf'
))
LOG_DIR
=
os
.
path
.
join
(
BASE_DIR
,
'logs'
)
SSH_KEY_DIR
=
os
.
path
.
join
(
BASE_DIR
,
'keys'
)
SERVER_KEY_DIR
=
os
.
path
.
join
(
SSH_KEY_DIR
,
'server'
)
KEY
=
CONF
.
get
(
'web'
,
'key'
)
LOGIN_NAME
=
getpass
.
getuser
()
def
color_print
(
msg
,
color
=
'blue'
):
"""Print colorful string."""
color_msg
=
{
'blue'
:
'
\033
[1;36m
%
s
\033
[0m'
,
'green'
:
'
\033
[1;32m
%
s
\033
[0m'
,
'red'
:
'
\033
[1;31m
%
s
\033
[0m'
}
print
color_msg
.
get
(
color
,
'blue'
)
%
msg
def
color_print_exit
(
msg
,
color
=
'red'
):
"""Print colorful string and exit."""
color_print
(
msg
,
color
=
color
)
time
.
sleep
(
2
)
sys
.
exit
()
class
ServerError
(
Exception
):
pass
def
get_win_size
():
"""This function use to get the size of the windows!"""
if
'TIOCGWINSZ'
in
dir
(
termios
):
TIOCGWINSZ
=
termios
.
TIOCGWINSZ
else
:
TIOCGWINSZ
=
1074295912L
# Assume
s
=
struct
.
pack
(
'HHHH'
,
0
,
0
,
0
,
0
)
x
=
fcntl
.
ioctl
(
sys
.
stdout
.
fileno
(),
TIOCGWINSZ
,
s
)
return
struct
.
unpack
(
'HHHH'
,
x
)[
0
:
2
]
def
set_win_size
(
sig
,
data
):
"""This function use to set the window size of the terminal!"""
try
:
win_size
=
get_win_size
()
channel
.
resize_pty
(
height
=
win_size
[
0
],
width
=
win_size
[
1
])
except
:
pass
def
get_object
(
model
,
**
kwargs
):
try
:
the_object
=
model
.
objects
.
get
(
**
kwargs
)
except
ObjectDoesNotExist
:
raise
ServerError
(
'Object get
%
s failed.'
%
str
(
kwargs
.
values
()))
return
the_object
def
log_record
(
username
,
host
):
"""Logging user command and output."""
connect_log_dir
=
os
.
path
.
join
(
LOG_DIR
,
'connect'
)
timestamp_start
=
int
(
time
.
time
())
today
=
time
.
strftime
(
'
%
Y
%
m
%
d'
,
time
.
localtime
(
timestamp_start
))
time_now
=
time
.
strftime
(
'
%
H
%
M
%
S'
,
time
.
localtime
(
timestamp_start
))
today_connect_log_dir
=
os
.
path
.
join
(
connect_log_dir
,
today
)
log_filename
=
'
%
s_
%
s_
%
s.log'
%
(
username
,
host
,
time_now
)
log_file_path
=
os
.
path
.
join
(
today_connect_log_dir
,
log_filename
)
pid
=
os
.
getpid
()
ip_list
=
[]
remote_ip
=
os
.
popen
(
"who |grep `ps aux |gawk '{if ($2==
%
s) print $1}'` |gawk '{print $5}'|tr -d '()'"
%
pid
)
.
readlines
()
for
ip
in
remote_ip
:
ip_list
.
append
(
ip
.
strip
(
'
\n
'
))
ip_list
=
','
.
join
(
list
(
set
(
ip_list
)))
if
not
os
.
path
.
isdir
(
today_connect_log_dir
):
try
:
os
.
makedirs
(
today_connect_log_dir
)
os
.
chmod
(
today_connect_log_dir
,
0777
)
except
OSError
:
raise
ServerError
(
'Create
%
s failed, Please modify
%
s permission.'
%
(
today_connect_log_dir
,
connect_log_dir
))
try
:
log_file
=
open
(
log_file_path
,
'a'
)
except
IOError
:
raise
ServerError
(
'Create logfile failed, Please modify
%
s permission.'
%
today_connect_log_dir
)
log
=
Log
(
user
=
username
,
host
=
host
,
remote_ip
=
ip_list
,
log_path
=
log_file_path
,
start_time
=
datetime
.
now
(),
pid
=
pid
)
log_file
.
write
(
'Starttime is
%
s
\n
'
%
datetime
.
now
())
log
.
save
()
return
log_file
,
log
def
posix_shell
(
chan
,
username
,
host
):
"""
Use paramiko channel connect server interactive.
"""
log_file
,
log
=
log_record
(
username
,
host
)
old_tty
=
termios
.
tcgetattr
(
sys
.
stdin
)
try
:
tty
.
setraw
(
sys
.
stdin
.
fileno
())
tty
.
setcbreak
(
sys
.
stdin
.
fileno
())
chan
.
settimeout
(
0.0
)
while
True
:
try
:
r
,
w
,
e
=
select
.
select
([
chan
,
sys
.
stdin
],
[],
[])
except
:
pass
if
chan
in
r
:
try
:
x
=
chan
.
recv
(
1024
)
if
len
(
x
)
==
0
:
break
sys
.
stdout
.
write
(
x
)
sys
.
stdout
.
flush
()
log_file
.
write
(
x
)
log_file
.
flush
()
except
socket
.
timeout
:
pass
if
sys
.
stdin
in
r
:
x
=
os
.
read
(
sys
.
stdin
.
fileno
(),
1
)
if
len
(
x
)
==
0
:
break
chan
.
send
(
x
)
finally
:
timestamp_end
=
time
.
time
()
termios
.
tcsetattr
(
sys
.
stdin
,
termios
.
TCSADRAIN
,
old_tty
)
log_file
.
write
(
'Endtime is
%
s'
%
datetime
.
now
())
log_file
.
close
()
log
.
is_finished
=
True
log
.
log_finished
=
False
log
.
end_time
=
datetime
.
now
()
log
.
save
()
def
get_user_host
(
username
):
"""Get the hosts of under the user control."""
hosts_attr
=
{}
asset_all
=
user_perm_asset_api
(
username
)
for
asset
in
asset_all
:
hosts_attr
[
asset
.
ip
]
=
[
asset
.
id
,
asset
.
comment
]
return
hosts_attr
def
get_user_hostgroup
(
username
):
"""Get the hostgroups of under the user control."""
groups_attr
=
{}
group_all
=
user_perm_group_api
(
username
)
for
group
in
group_all
:
groups_attr
[
group
.
name
]
=
[
group
.
id
,
group
.
comment
]
return
groups_attr
def
get_connect_item
(
username
,
ip
):
cryptor
=
PyCrypt
(
KEY
)
asset
=
get_object
(
Asset
,
ip
=
ip
)
port
=
asset
.
port
if
not
asset
.
is_active
:
raise
ServerError
(
'Host
%
s is not active.'
%
ip
)
user
=
get_object
(
User
,
username
=
username
)
if
not
user
.
is_active
:
raise
ServerError
(
'User
%
s is not active.'
%
username
)
login_type_dict
=
{
'L'
:
user
.
ldap_pwd
,
}
if
asset
.
login_type
in
login_type_dict
:
password
=
cryptor
.
decrypt
(
login_type_dict
[
asset
.
login_type
])
return
username
,
password
,
ip
,
port
elif
asset
.
login_type
==
'M'
:
username
=
asset
.
username
password
=
cryptor
.
decrypt
(
asset
.
password
)
return
username
,
password
,
ip
,
port
else
:
raise
ServerError
(
'Login type is not in ["L", "M"]'
)
def
verify_connect
(
username
,
part_ip
):
hosts_attr
=
get_user_host
(
username
)
hosts
=
hosts_attr
.
keys
()
ip_matched
=
[
ip
for
ip
in
hosts
if
part_ip
in
ip
]
if
len
(
ip_matched
)
>
1
:
for
ip
in
ip_matched
:
print
'
%
s --
%
s'
%
(
ip
,
hosts_attr
[
ip
][
1
])
elif
len
(
ip_matched
)
<
1
:
color_print
(
'No Permission or No host.'
,
'red'
)
else
:
username
,
password
,
host
,
port
=
get_connect_item
(
username
,
ip_matched
[
0
])
print
username
,
password
,
host
,
port
connect
(
username
,
password
,
host
,
port
,
LOGIN_NAME
)
def
print_prompt
():
msg
=
"""
\033
[1;32m### Welcome Use JumpServer To Login. ###
\033
[0m
1) Type
\033
[32mIP ADDRESS
\033
[0m To Login.
2) Type
\033
[32mP/p
\033
[0m To Print The Servers You Available.
3) Type
\033
[32mG/g
\033
[0m To Print The Server Groups You Available.
4) Type
\033
[32mE/e
\033
[0m To Execute Command On Several Servers.
5) Type
\033
[32mQ/q
\033
[0m To Quit.
"""
print
textwrap
.
dedent
(
msg
)
def
print_user_host
(
username
):
hosts_attr
=
get_user_host
(
username
)
hosts
=
hosts_attr
.
keys
()
hosts
.
sort
()
for
ip
in
hosts
:
print
'
%
s --
%
s'
%
(
ip
,
hosts_attr
[
ip
][
1
])
def
print_user_hostgroup
(
username
):
group_attr
=
get_user_hostgroup
(
username
)
groups
=
group_attr
.
keys
()
for
g
in
groups
:
print
'
%
s --
%
s'
%
(
g
,
group_attr
[
g
][
1
])
def
connect
(
username
,
password
,
host
,
port
,
login_name
):
"""
Connect server.
"""
ps1
=
"PS1='[
\
u@
%
s
\
W]
\
$ '
\n
"
%
host
login_msg
=
"clear;echo -e '
\\
033[32mLogin
%
s done. Enjoy it.
\\
033[0m'
\n
"
%
host
# Make a ssh connection
ssh
=
paramiko
.
SSHClient
()
ssh
.
load_system_host_keys
()
ssh
.
set_missing_host_key_policy
(
paramiko
.
AutoAddPolicy
())
try
:
ssh
.
connect
(
host
,
port
=
port
,
username
=
username
,
password
=
password
,
compress
=
True
)
except
paramiko
.
ssh_exception
.
AuthenticationException
,
paramiko
.
ssh_exception
.
SSHException
:
raise
ServerError
(
'Authentication Error.'
)
except
socket
.
error
:
raise
ServerError
(
'Connect SSH Socket Port Error, Please Correct it.'
)
# Make a channel and set windows size
global
channel
win_size
=
get_win_size
()
channel
=
ssh
.
invoke_shell
(
height
=
win_size
[
0
],
width
=
win_size
[
1
])
#channel.resize_pty(height=win_size[0], width=win_size[1])
try
:
signal
.
signal
(
signal
.
SIGWINCH
,
set_win_size
)
except
:
pass
# Set PS1 and msg it
channel
.
send
(
ps1
)
channel
.
send
(
login_msg
)
# Make ssh interactive tunnel
posix_shell
(
channel
,
login_name
,
host
)
# Shutdown channel socket
channel
.
close
()
ssh
.
close
()
def
remote_exec_cmd
(
ip
,
port
,
username
,
password
,
cmd
):
try
:
time
.
sleep
(
5
)
ssh
=
paramiko
.
SSHClient
()
ssh
.
set_missing_host_key_policy
(
paramiko
.
AutoAddPolicy
())
ssh
.
connect
(
ip
,
port
,
username
,
password
,
timeout
=
5
)
stdin
,
stdout
,
stderr
=
ssh
.
exec_command
(
"bash -l -c '
%
s'"
%
cmd
)
out
=
stdout
.
readlines
()
err
=
stderr
.
readlines
()
color_print
(
'
%
s:'
%
ip
,
'blue'
)
for
i
in
out
:
color_print
(
" "
*
4
+
i
.
strip
(),
'green'
)
for
j
in
err
:
color_print
(
" "
*
4
+
j
.
strip
(),
'red'
)
ssh
.
close
()
except
Exception
as
e
:
color_print
(
ip
+
':'
,
'blue'
)
color_print
(
str
(
e
),
'red'
)
def
multi_remote_exec_cmd
(
hosts
,
username
,
cmd
):
pool
=
Pool
(
processes
=
5
)
for
host
in
hosts
:
username
,
password
,
ip
,
port
=
get_connect_item
(
username
,
host
)
pool
.
apply_async
(
remote_exec_cmd
,
(
ip
,
port
,
username
,
password
,
cmd
))
pool
.
close
()
pool
.
join
()
def
exec_cmd_servers
(
username
):
hosts
=
[]
color_print
(
"Input the Host IP(s),Separated by Commas, q/Q to Quit.
\n
\
You can choose in the following IP(s), Use Linux / Unix glob."
,
'green'
)
print_user_host
(
LOGIN_NAME
)
while
True
:
inputs
=
raw_input
(
'
\033
[1;32mip(s)>:
\033
[0m'
)
if
inputs
in
[
'q'
,
'Q'
]:
break
get_hosts
=
get_user_host
(
username
)
.
keys
()
for
host
in
get_hosts
:
if
fnmatch
.
fnmatch
(
host
,
inputs
):
hosts
.
append
(
host
.
strip
())
if
len
(
hosts
)
==
0
:
color_print
(
"Check again, Not matched any ip!"
,
'red'
)
continue
else
:
print
"You matched ip:
%
s"
%
hosts
color_print
(
"Input the Command , The command will be Execute on servers, q/Q to quit."
,
'green'
)
while
True
:
cmd
=
raw_input
(
'
\033
[1;32mCmd(s):
\033
[0m'
)
if
cmd
in
[
'q'
,
'Q'
]:
break
exec_log_dir
=
os
.
path
.
join
(
LOG_DIR
,
'exec_cmds'
)
if
not
os
.
path
.
isdir
(
exec_log_dir
):
os
.
mkdir
(
exec_log_dir
)
os
.
chmod
(
exec_log_dir
,
0777
)
filename
=
"
%
s/
%
s.log"
%
(
exec_log_dir
,
time
.
strftime
(
'
%
Y
%
m
%
d'
))
f
=
open
(
filename
,
'a'
)
f
.
write
(
"DateTime:
%
s User:
%
s Host:
%
s Cmds:
%
s
\n
"
%
(
time
.
strftime
(
'
%
Y/
%
m/
%
d
%
H:
%
M:
%
S'
),
username
,
hosts
,
cmd
))
multi_remote_exec_cmd
(
hosts
,
username
,
cmd
)
def
help
():
global
p
,
options
,
arguments
usage
=
"usage:
%
prog '' [options] arg1 [options] arg2"
p
=
optparse
.
OptionParser
(
usage
=
usage
)
p
.
add_option
(
'-p'
,
'--host'
,
help
=
"Print The Servers You Available."
)
p
.
add_option
(
'-g'
,
'--group'
,
help
=
"Print The Server Groups You Available."
)
options
,
arguments
=
p
.
parse_args
()
def
main
():
help
()
if
options
.
host
:
pass
elif
options
.
group
:
pass
else
:
try
:
verify_connect
(
LOGIN_NAME
,
sys
.
argv
[
1
])
except
ServerError
,
e
:
color_print
(
e
,
'red'
)
if
__name__
==
'__main__'
:
main
()
static/js/layer/extend/layer.ext.js
View file @
e2ac212f
<<<<<<<
HEAD
/**
/**
@Name: layer拓展类,依赖于layer
@Name: layer拓展类,依赖于layer
...
@@ -10,17 +9,4 @@
...
@@ -10,17 +9,4 @@
*/
*/
=======
/**
@Name: layer拓展类,依赖于layer
@Date: 2014.08.13
@Author: 贤心
@Versions:1.8.5-ext
@Api:http://sentsin.com/jquery/layer
@Desc: 本拓展会持续更新
*/
>>>>>>>
beta
layer
.
use
(
"skin/layer.ext.css"
,
function
(){
layer
.
ext
&&
layer
.
ext
()}),
layer
.
prompt
=
function
(
a
,
b
,
c
){
var
d
=
{},
a
=
a
||
{},
e
=
{
area
:[
"auto"
,
"auto"
],
offset
:[
a
.
top
||
""
,
""
],
title
:
a
.
title
||
"信息"
,
dialog
:{
btns
:
2
,
type
:
-
1
,
msg
:
'<input type="'
+
function
(){
return
1
===
a
.
type
?
"password"
:
2
===
a
.
type
?
"file"
:
"text"
}()
+
'" class="xubox_prompt xubox_form" id="xubox_prompt" value="'
+
(
a
.
val
||
""
)
+
'" />'
,
yes
:
function
(
c
){
var
e
=
d
.
prompt
.
val
();
""
===
e
?
d
.
prompt
.
focus
():
e
.
replace
(
/
\s
/g
,
""
).
length
>
(
a
.
length
||
1
e3
)?
layer
.
tips
(
"最多输入"
+
(
a
.
length
||
1
e3
)
+
"个字数"
,
"#xubox_prompt"
,
2
):
b
&&
b
(
e
,
c
,
d
.
prompt
)},
no
:
c
},
success
:
function
(){
d
.
prompt
=
$
(
"#xubox_prompt"
),
d
.
prompt
.
focus
()}};
return
3
===
a
.
type
&&
(
e
.
dialog
.
msg
=
'<textarea class="xubox_prompt xubox_form xubox_formArea" id="xubox_prompt">'
+
(
a
.
val
||
""
)
+
"</textarea>"
),
$
.
layer
(
e
)},
layer
.
tab
=
function
(
a
){
var
a
=
a
||
{},
c
=
a
.
data
||
[],
d
=
{
type
:
1
,
border
:[
0
],
area
:[
"auto"
,
"auto"
],
bgcolor
:
""
,
title
:
!
1
,
shade
:
a
.
shade
,
offset
:
a
.
offset
,
move
:
".xubox_tabmove"
,
closeBtn
:
!
1
,
page
:{
html
:
'<div class="xubox_tab" style="'
+
function
(){
return
a
.
area
=
a
.
area
||
[],
"width:"
+
(
a
.
area
[
0
]
||
"500px"
)
+
"; height:"
+
(
a
.
area
[
1
]
||
"300px"
)
+
'">'
}()
+
'<span class="xubox_tabmove"></span>'
+
'<div class="xubox_tabtit">'
+
function
(){
var
a
=
c
.
length
,
b
=
1
,
d
=
""
;
if
(
a
>
0
)
for
(
d
=
'<span class="xubox_tabnow">'
+
c
[
0
].
title
+
"</span>"
;
a
>
b
;
b
++
)
d
+=
"<span>"
+
c
[
b
].
title
+
"</span>"
;
return
d
}()
+
"</div>"
+
'<ul class="xubox_tab_main">'
+
function
(){
var
a
=
c
.
length
,
b
=
1
,
d
=
""
;
if
(
a
>
0
)
for
(
d
=
'<li class="xubox_tabli xubox_tab_layer">'
+
(
c
[
0
].
content
||
"content未传入"
)
+
"</li>"
;
a
>
b
;
b
++
)
d
+=
'<li class="xubox_tabli">'
+
(
c
[
b
].
content
||
"content未传入"
)
+
"</li>"
;
return
d
}()
+
"</ul>"
+
'<span class="xubox_tabclose" title="关闭">X</span>'
+
"</div>"
},
success
:
function
(
a
){
var
b
=
$
(
".xubox_tabtit"
).
children
(),
c
=
$
(
".xubox_tab_main"
).
children
(),
d
=
$
(
".xubox_tabclose"
);
b
.
on
(
"click"
,
function
(){
var
a
=
$
(
this
),
b
=
a
.
index
();
a
.
addClass
(
"xubox_tabnow"
).
siblings
().
removeClass
(
"xubox_tabnow"
),
c
.
eq
(
b
).
show
().
siblings
().
hide
()}),
d
.
on
(
"click"
,
function
(){
layer
.
close
(
a
.
attr
(
"times"
))})}};
return
$
.
layer
(
d
)},
layer
.
photos
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
;
if
(
a
=
a
||
{},
b
=
{
imgIndex
:
1
,
end
:
null
,
html
:
$
(
"html"
)},
c
=
$
(
window
),
d
=
a
.
json
,
e
=
a
.
page
,
d
){
if
(
f
=
d
.
data
,
1
!==
d
.
status
)
return
layer
.
msg
(
"未请求到数据"
,
2
,
8
),
void
0
;
if
(
b
.
imgLen
=
f
.
length
,
!
(
f
.
length
>
0
))
return
layer
.
msg
(
"没有任何图片"
,
2
,
8
),
void
0
;
b
.
thissrc
=
f
[
d
.
start
].
src
,
b
.
pid
=
f
[
d
.
start
].
pid
,
b
.
imgsname
=
d
.
title
||
""
,
b
.
name
=
f
[
d
.
start
].
name
,
b
.
imgIndex
=
d
.
start
+
1
}
else
g
=
$
(
e
.
parent
).
find
(
"img"
),
h
=
g
.
eq
(
e
.
start
),
b
.
thissrc
=
h
.
attr
(
"layer-img"
)
||
h
.
attr
(
"src"
),
b
.
pid
=
h
.
attr
(
"pid"
),
b
.
imgLen
=
g
.
length
,
b
.
imgsname
=
e
.
title
||
""
,
b
.
name
=
h
.
attr
(
"alt"
),
b
.
imgIndex
=
e
.
start
+
1
;
return
i
=
{
type
:
1
,
border
:[
0
],
area
:[(
a
.
html
?
915
:
600
)
+
"px"
,
"auto"
],
title
:
!
1
,
shade
:[.
9
,
"#000"
,
!
0
],
shadeClose
:
!
0
,
offset
:[
"25px"
,
""
],
bgcolor
:
""
,
page
:{
html
:
'<div class="xubox_bigimg"><img src="'
+
b
.
thissrc
+
'" alt="'
+
(
b
.
name
||
""
)
+
'" layer-pid="'
+
(
b
.
pid
||
""
)
+
'"><div class="xubox_imgsee">'
+
function
(){
return
b
.
imgLen
>
1
?
'<a href="" class="xubox_iconext xubox_prev"></a><a href="" class="xubox_iconext xubox_next"></a>'
:
""
}()
+
'<div class="xubox_imgbar"><span class="xubox_imgtit"><a href="javascript:;">'
+
b
.
imgsname
+
" </a><em>"
+
b
.
imgIndex
+
"/"
+
b
.
imgLen
+
"</em></span></div></div></div>"
+
function
(){
return
a
.
html
?
'<div class="xubox_intro">'
+
a
.
html
+
"</div>"
:
""
}()},
success
:
function
(
a
){
b
.
bigimg
=
a
.
find
(
".xubox_bigimg"
),
b
.
imgsee
=
b
.
bigimg
.
find
(
".xubox_imgsee"
),
b
.
imgbar
=
b
.
imgsee
.
find
(
".xubox_imgbar"
),
b
.
imgtit
=
b
.
imgbar
.
find
(
".xubox_imgtit"
),
b
.
layero
=
a
;
var
c
=
b
.
imgs
=
b
.
bigimg
.
find
(
"img"
);
clearTimeout
(
b
.
timerr
),
b
.
timerr
=
setTimeout
(
function
(){
$
(
"html"
).
css
(
"overflow"
,
"hidden"
).
attr
(
"layer-full"
,
b
.
index
)},
10
),
c
.
load
(
function
(){
b
.
imgarea
=
[
c
.
outerWidth
(),
c
.
outerHeight
()],
b
.
resize
(
a
)}),
b
.
event
()},
end
:
function
(){
layer
.
closeAll
(),
b
.
end
=!
0
}},
b
.
event
=
function
(){
b
.
bigimg
.
hover
(
function
(){
b
.
imgsee
.
show
()},
function
(){
b
.
imgsee
.
hide
()}),
i
.
imgprev
=
function
(){
b
.
imgIndex
--
,
b
.
imgIndex
<
1
&&
(
b
.
imgIndex
=
b
.
imgLen
),
b
.
tabimg
()},
b
.
bigimg
.
find
(
".xubox_prev"
).
on
(
"click"
,
function
(
a
){
a
.
preventDefault
(),
i
.
imgprev
()}),
i
.
imgnext
=
function
(){
b
.
imgIndex
++
,
b
.
imgIndex
>
b
.
imgLen
&&
(
b
.
imgIndex
=
1
),
b
.
tabimg
()},
b
.
bigimg
.
find
(
".xubox_next"
).
on
(
"click"
,
function
(
a
){
a
.
preventDefault
(),
i
.
imgnext
()}),
$
(
document
).
keyup
(
function
(
a
){
if
(
!
b
.
end
){
var
c
=
a
.
keyCode
;
a
.
preventDefault
(),
37
===
c
?
i
.
imgprev
():
39
===
c
?
i
.
imgnext
():
27
===
c
&&
layer
.
close
(
b
.
index
)}}),
b
.
tabimg
=
function
(){
var
e
,
h
,
i
,
j
,
k
;
b
.
imgs
.
removeAttr
(
"style"
),
d
?(
j
=
f
[
b
.
imgIndex
-
1
],
e
=
j
.
src
,
h
=
j
.
pid
,
i
=
j
.
name
):(
k
=
g
.
eq
(
b
.
imgIndex
-
1
),
e
=
k
.
attr
(
"layer-img"
)
||
k
.
attr
(
"src"
),
h
=
k
.
attr
(
"layer-pid"
)
||
""
,
i
=
k
.
attr
(
"alt"
)
||
""
),
b
.
imgs
.
attr
({
src
:
e
,
"layer-pid"
:
h
,
alt
:
i
}),
b
.
imgtit
.
find
(
"em"
).
text
(
b
.
imgIndex
+
"/"
+
b
.
imgLen
),
b
.
imgsee
.
show
(),
a
.
tab
&&
a
.
tab
({
pid
:
h
,
name
:
i
})}},
b
.
resize
=
function
(
d
){
var
g
,
e
=
{},
f
=
[
c
.
width
(),
c
.
height
()];
e
.
limit
=
f
[
0
]
-
f
[
0
]
/
f
[
1
]
*
(
60
*
f
[
0
]
/
f
[
1
]),
e
.
limit
<
600
&&
(
e
.
limit
=
600
),
g
=
[
e
.
limit
,
f
[
1
]
>
400
?
f
[
1
]
-
50
:
400
],
g
[
0
]
=
a
.
html
?
g
[
0
]:
g
[
0
]
-
300
,
layer
.
area
(
b
.
index
,{
width
:
g
[
0
]
+
(
a
.
html
?
15
:
0
),
height
:
g
[
1
]}),
e
.
flwidth
=
g
[
0
]
-
(
a
.
html
?
300
:
0
),
b
.
imgarea
[
0
]
>
e
.
flwidth
?
b
.
imgs
.
css
({
width
:
e
.
flwidth
}):
b
.
imgs
.
css
({
width
:
b
.
imgarea
[
0
]}),
b
.
imgs
.
outerHeight
()
<
g
[
1
]
&&
b
.
imgs
.
css
({
top
:(
g
[
1
]
-
b
.
imgs
.
outerHeight
())
/
2
}),
b
.
imgs
.
css
({
visibility
:
"visible"
}),
b
.
bigimg
.
css
({
width
:
e
.
flwidth
,
height
:
g
[
1
],
"background-color"
:
a
.
bgcolor
}),
a
.
html
&&
d
.
find
(
".xubox_intro"
).
css
({
height
:
g
[
1
]}),
e
=
null
,
f
=
null
,
g
=
null
},
c
.
on
(
"resize"
,
function
(){
b
.
end
||
(
b
.
timer
&&
clearTimeout
(
b
.
timer
),
b
.
timer
=
setTimeout
(
function
(){
b
.
resize
(
b
.
layero
)},
200
))}),
b
.
index
=
$
.
layer
(
i
),
b
.
index
},
layer
.
photosPage
=
function
(
a
){
var
b
=
{};
b
.
run
=
function
(
b
){
layer
.
photos
({
html
:
a
.
html
,
success
:
a
.
success
,
page
:{
title
:
a
.
title
,
id
:
a
.
id
,
start
:
b
,
parent
:
a
.
parent
}})},
a
=
a
||
{},
$
(
a
.
parent
).
find
(
"img"
).
each
(
function
(
a
){
$
(
this
).
on
(
"click"
,
function
(){
b
.
run
(
a
)})})};
layer
.
use
(
"skin/layer.ext.css"
,
function
(){
layer
.
ext
&&
layer
.
ext
()}),
layer
.
prompt
=
function
(
a
,
b
,
c
){
var
d
=
{},
a
=
a
||
{},
e
=
{
area
:[
"auto"
,
"auto"
],
offset
:[
a
.
top
||
""
,
""
],
title
:
a
.
title
||
"信息"
,
dialog
:{
btns
:
2
,
type
:
-
1
,
msg
:
'<input type="'
+
function
(){
return
1
===
a
.
type
?
"password"
:
2
===
a
.
type
?
"file"
:
"text"
}()
+
'" class="xubox_prompt xubox_form" id="xubox_prompt" value="'
+
(
a
.
val
||
""
)
+
'" />'
,
yes
:
function
(
c
){
var
e
=
d
.
prompt
.
val
();
""
===
e
?
d
.
prompt
.
focus
():
e
.
replace
(
/
\s
/g
,
""
).
length
>
(
a
.
length
||
1
e3
)?
layer
.
tips
(
"最多输入"
+
(
a
.
length
||
1
e3
)
+
"个字数"
,
"#xubox_prompt"
,
2
):
b
&&
b
(
e
,
c
,
d
.
prompt
)},
no
:
c
},
success
:
function
(){
d
.
prompt
=
$
(
"#xubox_prompt"
),
d
.
prompt
.
focus
()}};
return
3
===
a
.
type
&&
(
e
.
dialog
.
msg
=
'<textarea class="xubox_prompt xubox_form xubox_formArea" id="xubox_prompt">'
+
(
a
.
val
||
""
)
+
"</textarea>"
),
$
.
layer
(
e
)},
layer
.
tab
=
function
(
a
){
var
a
=
a
||
{},
c
=
a
.
data
||
[],
d
=
{
type
:
1
,
border
:[
0
],
area
:[
"auto"
,
"auto"
],
bgcolor
:
""
,
title
:
!
1
,
shade
:
a
.
shade
,
offset
:
a
.
offset
,
move
:
".xubox_tabmove"
,
closeBtn
:
!
1
,
page
:{
html
:
'<div class="xubox_tab" style="'
+
function
(){
return
a
.
area
=
a
.
area
||
[],
"width:"
+
(
a
.
area
[
0
]
||
"500px"
)
+
"; height:"
+
(
a
.
area
[
1
]
||
"300px"
)
+
'">'
}()
+
'<span class="xubox_tabmove"></span>'
+
'<div class="xubox_tabtit">'
+
function
(){
var
a
=
c
.
length
,
b
=
1
,
d
=
""
;
if
(
a
>
0
)
for
(
d
=
'<span class="xubox_tabnow">'
+
c
[
0
].
title
+
"</span>"
;
a
>
b
;
b
++
)
d
+=
"<span>"
+
c
[
b
].
title
+
"</span>"
;
return
d
}()
+
"</div>"
+
'<ul class="xubox_tab_main">'
+
function
(){
var
a
=
c
.
length
,
b
=
1
,
d
=
""
;
if
(
a
>
0
)
for
(
d
=
'<li class="xubox_tabli xubox_tab_layer">'
+
(
c
[
0
].
content
||
"content未传入"
)
+
"</li>"
;
a
>
b
;
b
++
)
d
+=
'<li class="xubox_tabli">'
+
(
c
[
b
].
content
||
"content未传入"
)
+
"</li>"
;
return
d
}()
+
"</ul>"
+
'<span class="xubox_tabclose" title="关闭">X</span>'
+
"</div>"
},
success
:
function
(
a
){
var
b
=
$
(
".xubox_tabtit"
).
children
(),
c
=
$
(
".xubox_tab_main"
).
children
(),
d
=
$
(
".xubox_tabclose"
);
b
.
on
(
"click"
,
function
(){
var
a
=
$
(
this
),
b
=
a
.
index
();
a
.
addClass
(
"xubox_tabnow"
).
siblings
().
removeClass
(
"xubox_tabnow"
),
c
.
eq
(
b
).
show
().
siblings
().
hide
()}),
d
.
on
(
"click"
,
function
(){
layer
.
close
(
a
.
attr
(
"times"
))})}};
return
$
.
layer
(
d
)},
layer
.
photos
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
;
if
(
a
=
a
||
{},
b
=
{
imgIndex
:
1
,
end
:
null
,
html
:
$
(
"html"
)},
c
=
$
(
window
),
d
=
a
.
json
,
e
=
a
.
page
,
d
){
if
(
f
=
d
.
data
,
1
!==
d
.
status
)
return
layer
.
msg
(
"未请求到数据"
,
2
,
8
),
void
0
;
if
(
b
.
imgLen
=
f
.
length
,
!
(
f
.
length
>
0
))
return
layer
.
msg
(
"没有任何图片"
,
2
,
8
),
void
0
;
b
.
thissrc
=
f
[
d
.
start
].
src
,
b
.
pid
=
f
[
d
.
start
].
pid
,
b
.
imgsname
=
d
.
title
||
""
,
b
.
name
=
f
[
d
.
start
].
name
,
b
.
imgIndex
=
d
.
start
+
1
}
else
g
=
$
(
e
.
parent
).
find
(
"img"
),
h
=
g
.
eq
(
e
.
start
),
b
.
thissrc
=
h
.
attr
(
"layer-img"
)
||
h
.
attr
(
"src"
),
b
.
pid
=
h
.
attr
(
"pid"
),
b
.
imgLen
=
g
.
length
,
b
.
imgsname
=
e
.
title
||
""
,
b
.
name
=
h
.
attr
(
"alt"
),
b
.
imgIndex
=
e
.
start
+
1
;
return
i
=
{
type
:
1
,
border
:[
0
],
area
:[(
a
.
html
?
915
:
600
)
+
"px"
,
"auto"
],
title
:
!
1
,
shade
:[.
9
,
"#000"
,
!
0
],
shadeClose
:
!
0
,
offset
:[
"25px"
,
""
],
bgcolor
:
""
,
page
:{
html
:
'<div class="xubox_bigimg"><img src="'
+
b
.
thissrc
+
'" alt="'
+
(
b
.
name
||
""
)
+
'" layer-pid="'
+
(
b
.
pid
||
""
)
+
'"><div class="xubox_imgsee">'
+
function
(){
return
b
.
imgLen
>
1
?
'<a href="" class="xubox_iconext xubox_prev"></a><a href="" class="xubox_iconext xubox_next"></a>'
:
""
}()
+
'<div class="xubox_imgbar"><span class="xubox_imgtit"><a href="javascript:;">'
+
b
.
imgsname
+
" </a><em>"
+
b
.
imgIndex
+
"/"
+
b
.
imgLen
+
"</em></span></div></div></div>"
+
function
(){
return
a
.
html
?
'<div class="xubox_intro">'
+
a
.
html
+
"</div>"
:
""
}()},
success
:
function
(
a
){
b
.
bigimg
=
a
.
find
(
".xubox_bigimg"
),
b
.
imgsee
=
b
.
bigimg
.
find
(
".xubox_imgsee"
),
b
.
imgbar
=
b
.
imgsee
.
find
(
".xubox_imgbar"
),
b
.
imgtit
=
b
.
imgbar
.
find
(
".xubox_imgtit"
),
b
.
layero
=
a
;
var
c
=
b
.
imgs
=
b
.
bigimg
.
find
(
"img"
);
clearTimeout
(
b
.
timerr
),
b
.
timerr
=
setTimeout
(
function
(){
$
(
"html"
).
css
(
"overflow"
,
"hidden"
).
attr
(
"layer-full"
,
b
.
index
)},
10
),
c
.
load
(
function
(){
b
.
imgarea
=
[
c
.
outerWidth
(),
c
.
outerHeight
()],
b
.
resize
(
a
)}),
b
.
event
()},
end
:
function
(){
layer
.
closeAll
(),
b
.
end
=!
0
}},
b
.
event
=
function
(){
b
.
bigimg
.
hover
(
function
(){
b
.
imgsee
.
show
()},
function
(){
b
.
imgsee
.
hide
()}),
i
.
imgprev
=
function
(){
b
.
imgIndex
--
,
b
.
imgIndex
<
1
&&
(
b
.
imgIndex
=
b
.
imgLen
),
b
.
tabimg
()},
b
.
bigimg
.
find
(
".xubox_prev"
).
on
(
"click"
,
function
(
a
){
a
.
preventDefault
(),
i
.
imgprev
()}),
i
.
imgnext
=
function
(){
b
.
imgIndex
++
,
b
.
imgIndex
>
b
.
imgLen
&&
(
b
.
imgIndex
=
1
),
b
.
tabimg
()},
b
.
bigimg
.
find
(
".xubox_next"
).
on
(
"click"
,
function
(
a
){
a
.
preventDefault
(),
i
.
imgnext
()}),
$
(
document
).
keyup
(
function
(
a
){
if
(
!
b
.
end
){
var
c
=
a
.
keyCode
;
a
.
preventDefault
(),
37
===
c
?
i
.
imgprev
():
39
===
c
?
i
.
imgnext
():
27
===
c
&&
layer
.
close
(
b
.
index
)}}),
b
.
tabimg
=
function
(){
var
e
,
h
,
i
,
j
,
k
;
b
.
imgs
.
removeAttr
(
"style"
),
d
?(
j
=
f
[
b
.
imgIndex
-
1
],
e
=
j
.
src
,
h
=
j
.
pid
,
i
=
j
.
name
):(
k
=
g
.
eq
(
b
.
imgIndex
-
1
),
e
=
k
.
attr
(
"layer-img"
)
||
k
.
attr
(
"src"
),
h
=
k
.
attr
(
"layer-pid"
)
||
""
,
i
=
k
.
attr
(
"alt"
)
||
""
),
b
.
imgs
.
attr
({
src
:
e
,
"layer-pid"
:
h
,
alt
:
i
}),
b
.
imgtit
.
find
(
"em"
).
text
(
b
.
imgIndex
+
"/"
+
b
.
imgLen
),
b
.
imgsee
.
show
(),
a
.
tab
&&
a
.
tab
({
pid
:
h
,
name
:
i
})}},
b
.
resize
=
function
(
d
){
var
g
,
e
=
{},
f
=
[
c
.
width
(),
c
.
height
()];
e
.
limit
=
f
[
0
]
-
f
[
0
]
/
f
[
1
]
*
(
60
*
f
[
0
]
/
f
[
1
]),
e
.
limit
<
600
&&
(
e
.
limit
=
600
),
g
=
[
e
.
limit
,
f
[
1
]
>
400
?
f
[
1
]
-
50
:
400
],
g
[
0
]
=
a
.
html
?
g
[
0
]:
g
[
0
]
-
300
,
layer
.
area
(
b
.
index
,{
width
:
g
[
0
]
+
(
a
.
html
?
15
:
0
),
height
:
g
[
1
]}),
e
.
flwidth
=
g
[
0
]
-
(
a
.
html
?
300
:
0
),
b
.
imgarea
[
0
]
>
e
.
flwidth
?
b
.
imgs
.
css
({
width
:
e
.
flwidth
}):
b
.
imgs
.
css
({
width
:
b
.
imgarea
[
0
]}),
b
.
imgs
.
outerHeight
()
<
g
[
1
]
&&
b
.
imgs
.
css
({
top
:(
g
[
1
]
-
b
.
imgs
.
outerHeight
())
/
2
}),
b
.
imgs
.
css
({
visibility
:
"visible"
}),
b
.
bigimg
.
css
({
width
:
e
.
flwidth
,
height
:
g
[
1
],
"background-color"
:
a
.
bgcolor
}),
a
.
html
&&
d
.
find
(
".xubox_intro"
).
css
({
height
:
g
[
1
]}),
e
=
null
,
f
=
null
,
g
=
null
},
c
.
on
(
"resize"
,
function
(){
b
.
end
||
(
b
.
timer
&&
clearTimeout
(
b
.
timer
),
b
.
timer
=
setTimeout
(
function
(){
b
.
resize
(
b
.
layero
)},
200
))}),
b
.
index
=
$
.
layer
(
i
),
b
.
index
},
layer
.
photosPage
=
function
(
a
){
var
b
=
{};
b
.
run
=
function
(
b
){
layer
.
photos
({
html
:
a
.
html
,
success
:
a
.
success
,
page
:{
title
:
a
.
title
,
id
:
a
.
id
,
start
:
b
,
parent
:
a
.
parent
}})},
a
=
a
||
{},
$
(
a
.
parent
).
find
(
"img"
).
each
(
function
(
a
){
$
(
this
).
on
(
"click"
,
function
(){
b
.
run
(
a
)})})};
\ No newline at end of file
static/js/layer/layer.min.js
View file @
e2ac212f
<<<<<<<
HEAD
/****************************************
/****************************************
@Name:layer v1.8.5 弹层组件压缩版
@Name:layer v1.8.5 弹层组件压缩版
...
@@ -14,21 +13,4 @@
...
@@ -14,21 +13,4 @@
"use strict"
;
"use strict"
;
var
c
,
d
,
var
c
,
d
,
e
=
""
,
//组件存放目录,为空表示自动获取
e
=
""
,
//组件存放目录,为空表示自动获取
=======
/****************************************
@Name:layer v1.8.5 弹层组件压缩版
@Author:贤心
@Date:2014-08-13
@Blog:http://sentsin.com
@Copyright:Sentsin Xu(贤心)
@官网:http://sentsin.com/jquery/layer
*/
;
!
function
(
a
,
b
){
"use strict"
;
var
c
,
d
,
e
=
""
,
//组件存放目录,为空表示自动获取
>>>>>>>
beta
f
=
{
getPath
:
function
(){
var
a
=
document
.
scripts
,
b
=
a
[
a
.
length
-
1
].
src
;
return
e
?
e
:
b
.
substring
(
0
,
b
.
lastIndexOf
(
"/"
)
+
1
)},
type
:[
"dialog"
,
"page"
,
"iframe"
,
"loading"
,
"tips"
]};
a
.
layer
=
{
v
:
"1.8.5"
,
ie6
:
!!
a
.
ActiveXObject
&&!
a
.
XMLHttpRequest
,
index
:
0
,
path
:
f
.
getPath
(),
use
:
function
(
a
,
b
){
var
d
=
c
(
"head"
)[
0
],
a
=
a
.
replace
(
/
\s
/g
,
""
),
e
=
/
\.
css$/
.
test
(
a
),
f
=
document
.
createElement
(
e
?
"link"
:
"script"
),
g
=
a
.
replace
(
/
\.
|
\/
/g
,
""
);
e
&&
(
f
.
type
=
"text/css"
,
f
.
rel
=
"stylesheet"
),
f
[
e
?
"href"
:
"src"
]
=
/^http:
\/\/
/
.
test
(
a
)?
a
:
layer
.
path
+
a
,
f
.
id
=
g
,
c
(
"#"
+
g
)[
0
]
||
d
.
appendChild
(
f
),
b
&&
(
document
.
all
?
c
(
f
).
ready
(
b
):
c
(
f
).
load
(
b
))},
alert
:
function
(
a
,
b
,
d
,
e
){
var
f
=
"function"
==
typeof
d
,
g
=
{
dialog
:{
msg
:
a
,
type
:
b
,
yes
:
f
?
d
:
e
},
area
:[
"auto"
,
"auto"
]};
return
f
||
(
g
.
title
=
d
),
c
.
layer
(
g
)},
confirm
:
function
(
a
,
b
,
d
,
e
){
var
f
=
"function"
==
typeof
d
,
g
=
{
dialog
:{
msg
:
a
,
type
:
4
,
btns
:
2
,
yes
:
b
,
no
:
f
?
d
:
e
}};
return
f
||
(
g
.
title
=
d
),
c
.
layer
(
g
)},
msg
:
function
(
a
,
d
,
e
,
f
){
var
g
=
{
title
:
!
1
,
closeBtn
:
!
1
,
time
:
d
===
b
?
2
:
d
,
dialog
:{
msg
:
""
===
a
||
a
===
b
?
" "
:
a
},
end
:
f
};
return
"object"
==
typeof
e
?(
g
.
dialog
.
type
=
e
.
type
,
g
.
shade
=
e
.
shade
,
g
.
shift
=
e
.
rate
):
"function"
==
typeof
e
?
g
.
end
=
e
:
g
.
dialog
.
type
=
e
,
c
.
layer
(
g
)},
load
:
function
(
a
,
b
){
return
"string"
==
typeof
a
?
layer
.
msg
(
a
,
b
||
0
,
16
):
c
.
layer
({
time
:
a
,
loading
:{
type
:
b
},
bgcolor
:
b
?
"#fff"
:
""
,
shade
:
b
?[.
1
,
"#000"
]:[
0
],
border
:
3
!==
b
&&
b
?[
6
,.
3
,
"#000"
]:[
0
],
type
:
3
,
title
:[
""
,
!
1
],
closeBtn
:[
0
,
!
1
]})},
tips
:
function
(
a
,
b
,
d
,
e
,
f
,
g
){
var
h
=
{
type
:
4
,
shade
:
!
1
,
success
:
function
(
a
){
this
.
closeBtn
||
a
.
find
(
".xubox_tips"
).
css
({
"padding-right"
:
10
})},
bgcolor
:
""
,
tips
:{
msg
:
a
,
follow
:
b
}};
return
h
.
time
=
"object"
==
typeof
d
?
d
.
time
:
0
|
d
,
d
=
d
||
{},
h
.
closeBtn
=
d
.
closeBtn
||!
1
,
h
.
maxWidth
=
d
.
maxWidth
||
e
,
h
.
tips
.
guide
=
d
.
guide
||
f
,
h
.
tips
.
style
=
d
.
style
||
g
,
h
.
tips
.
more
=
d
.
more
,
c
.
layer
(
h
)}};
var
g
=
[
"xubox_layer"
,
"xubox_iframe"
,
".xubox_title"
,
".xubox_text"
,
".xubox_page"
,
".xubox_main"
],
h
=
function
(
a
){
var
b
=
this
,
d
=
b
.
config
;
layer
.
index
++
,
b
.
index
=
layer
.
index
,
b
.
config
=
c
.
extend
({},
d
,
a
),
b
.
config
.
dialog
=
c
.
extend
({},
d
.
dialog
,
a
.
dialog
),
b
.
config
.
page
=
c
.
extend
({},
d
.
page
,
a
.
page
),
b
.
config
.
iframe
=
c
.
extend
({},
d
.
iframe
,
a
.
iframe
),
b
.
config
.
loading
=
c
.
extend
({},
d
.
loading
,
a
.
loading
),
b
.
config
.
tips
=
c
.
extend
({},
d
.
tips
,
a
.
tips
),
b
.
creat
()};
h
.
pt
=
h
.
prototype
,
h
.
pt
.
config
=
{
type
:
0
,
shade
:[.
3
,
"#000"
],
fix
:
!
0
,
move
:
".xubox_title"
,
title
:
"信息"
,
offset
:[
""
,
"50%"
],
area
:[
"310px"
,
"auto"
],
closeBtn
:[
0
,
!
0
],
time
:
0
,
bgcolor
:
"#fff"
,
border
:[
6
,.
3
,
"#000"
],
zIndex
:
19891014
,
maxWidth
:
400
,
dialog
:{
btns
:
1
,
btn
:[
"确定"
,
"取消"
],
type
:
8
,
msg
:
""
,
yes
:
function
(
a
){
layer
.
close
(
a
)},
no
:
function
(
a
){
layer
.
close
(
a
)}},
page
:{
dom
:
"#xulayer"
,
html
:
""
,
url
:
""
},
iframe
:{
src
:
"http://sentsin.com"
,
scrolling
:
"auto"
},
loading
:{
type
:
0
},
tips
:{
msg
:
""
,
follow
:
""
,
guide
:
0
,
isGuide
:
!
0
,
style
:[
"background-color:#FF9900; color:#fff;"
,
"#FF9900"
]},
success
:
function
(){},
close
:
function
(
a
){
layer
.
close
(
a
)},
end
:
function
(){}},
h
.
pt
.
space
=
function
(
a
){
var
b
=
this
,
a
=
a
||
""
,
c
=
b
.
index
,
d
=
b
.
config
,
e
=
d
.
dialog
,
f
=-
1
===
e
.
type
?
""
:
'<span class="xubox_msg xulayer_png32 xubox_msgico xubox_msgtype'
+
e
.
type
+
'"></span>'
,
h
=
[
'<div class="xubox_dialog">'
+
f
+
'<span class="xubox_msg xubox_text" style="'
+
(
f
?
""
:
"padding-left:20px"
)
+
'">'
+
e
.
msg
+
"</span></div>"
,
'<div class="xubox_page">'
+
a
+
"</div>"
,
'<iframe scrolling="'
+
d
.
iframe
.
scrolling
+
'" allowtransparency="true" id="'
+
g
[
1
]
+
c
+
'" name="'
+
g
[
1
]
+
c
+
'" onload="this.className=
\'
'
+
g
[
1
]
+
'
\'
" class="'
+
g
[
1
]
+
'" frameborder="0" src="'
+
d
.
iframe
.
src
+
'"></iframe>'
,
'<span class="xubox_loading xubox_loading_'
+
d
.
loading
.
type
+
'"></span>'
,
'<div class="xubox_tips" style="'
+
d
.
tips
.
style
[
0
]
+
'"><div class="xubox_tipsMsg">'
+
d
.
tips
.
msg
+
'</div><i class="layerTipsG"></i></div>'
],
i
=
""
,
j
=
""
,
k
=
d
.
zIndex
+
c
,
l
=
"z-index:"
+
k
+
"; background-color:"
+
d
.
shade
[
1
]
+
"; opacity:"
+
d
.
shade
[
0
]
+
"; filter:alpha(opacity="
+
100
*
d
.
shade
[
0
]
+
");"
;
d
.
shade
[
0
]
&&
(
i
=
'<div times="'
+
c
+
'" id="xubox_shade'
+
c
+
'" class="xubox_shade" style="'
+
l
+
'"></div>'
),
d
.
zIndex
=
k
;
var
m
=
""
,
n
=
""
,
o
=
"z-index:"
+
(
k
-
1
)
+
"; background-color: "
+
d
.
border
[
2
]
+
"; opacity:"
+
d
.
border
[
1
]
+
"; filter:alpha(opacity="
+
100
*
d
.
border
[
1
]
+
"); top:-"
+
d
.
border
[
0
]
+
"px; left:-"
+
d
.
border
[
0
]
+
"px;"
;
d
.
border
[
0
]
&&
(
j
=
'<div id="xubox_border'
+
c
+
'" class="xubox_border" style="'
+
o
+
'"></div>'
),
!
d
.
maxmin
||
1
!==
d
.
type
&&
2
!==
d
.
type
||
/^
\d
+%$/
.
test
(
d
.
area
[
0
])
&&
/^
\d
+%$/
.
test
(
d
.
area
[
1
])
||
(
n
=
'<a class="xubox_min" href="javascript:;"><cite></cite></a><a class="xubox_max xulayer_png32" href="javascript:;"></a>'
),
d
.
closeBtn
[
1
]
&&
(
n
+=
'<a class="xubox_close xulayer_png32 xubox_close'
+
d
.
closeBtn
[
0
]
+
'" href="javascript:;" style="'
+
(
4
===
d
.
type
?
"position:absolute; right:-3px; _right:7px; top:-4px;"
:
""
)
+
'"></a>'
);
var
p
=
"object"
==
typeof
d
.
title
;
return
d
.
title
&&
(
m
=
'<div class="xubox_title" style="'
+
(
p
?
d
.
title
[
1
]:
""
)
+
'"><em>'
+
(
p
?
d
.
title
[
0
]:
d
.
title
)
+
"</em></div>"
),[
i
,
'<div times="'
+
c
+
'" showtime="'
+
d
.
time
+
'" style="z-index:'
+
k
+
'" id="'
+
g
[
0
]
+
c
+
'" class="'
+
g
[
0
]
+
'"><div style="background-color:'
+
d
.
bgcolor
+
"; z-index:"
+
k
+
'" class="xubox_main">'
+
h
[
d
.
type
]
+
m
+
'<span class="xubox_setwin">'
+
n
+
'</span><span class="xubox_botton"></span></div>'
+
j
+
"</div>"
]},
h
.
pt
.
creat
=
function
(){
var
a
=
this
,
b
=
""
,
d
=
a
.
config
,
e
=
d
.
dialog
,
f
=
a
.
index
,
h
=
d
.
page
,
i
=
c
(
"body"
),
j
=
function
(
d
){
var
d
=
d
||
""
;
b
=
a
.
space
(
d
),
i
.
append
(
c
(
b
[
0
]))};
switch
(
d
.
type
){
case
0
:
d
.
title
||
(
d
.
area
=
[
"auto"
,
"auto"
]),
c
(
".xubox_dialog"
)[
0
]
&&
layer
.
close
(
c
(
".xubox_dialog"
).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
));
break
;
case
1
:
if
(
""
!==
h
.
html
)
j
(
'<div class="xuboxPageHtml">'
+
h
.
html
+
"</div>"
),
i
.
append
(
c
(
b
[
1
]));
else
if
(
""
!==
h
.
url
)
j
(
'<div class="xuboxPageHtml" id="xuboxPageHtml'
+
f
+
'">'
+
h
.
html
+
"</div>"
),
i
.
append
(
c
(
b
[
1
])),
c
.
get
(
h
.
url
,
function
(
a
){
c
(
"#xuboxPageHtml"
+
f
).
html
(
a
.
toString
()),
h
.
ok
&&
h
.
ok
(
a
)});
else
{
if
(
0
!=
c
(
h
.
dom
).
parents
(
g
[
4
]).
length
)
return
;
j
(),
c
(
h
.
dom
).
show
().
wrap
(
c
(
b
[
1
]))}
break
;
case
3
:
d
.
title
=!
1
,
d
.
area
=
[
"auto"
,
"auto"
],
d
.
closeBtn
=
[
""
,
!
1
],
c
(
".xubox_loading"
)[
0
]
&&
layer
.
closeLoad
();
break
;
case
4
:
d
.
title
=!
1
,
d
.
area
=
[
"auto"
,
"auto"
],
d
.
fix
=!
1
,
d
.
border
=
[
0
],
d
.
tips
.
more
||
layer
.
closeTips
()}
1
!==
d
.
type
&&
(
j
(),
i
.
append
(
c
(
b
[
1
])));
var
k
=
a
.
layerE
=
c
(
"#"
+
g
[
0
]
+
f
);
if
(
k
.
css
({
width
:
d
.
area
[
0
],
height
:
d
.
area
[
1
]}),
d
.
fix
||
k
.
css
({
position
:
"absolute"
}),
d
.
title
&&
(
3
!==
d
.
type
||
4
!==
d
.
type
)){
var
l
=
0
===
d
.
type
?
e
:
d
,
m
=
k
.
find
(
".xubox_botton"
);
switch
(
l
.
btn
=
d
.
btn
||
e
.
btn
,
l
.
btns
){
case
0
:
m
.
html
(
""
).
hide
();
break
;
case
1
:
m
.
html
(
'<a href="javascript:;" class="xubox_yes xubox_botton1">'
+
l
.
btn
[
0
]
+
"</a>"
);
break
;
case
2
:
m
.
html
(
'<a href="javascript:;" class="xubox_yes xubox_botton2">'
+
l
.
btn
[
0
]
+
'</a><a href="javascript:;" class="xubox_no xubox_botton3">'
+
l
.
btn
[
1
]
+
"</a>"
)}}
"auto"
===
k
.
css
(
"left"
)?(
k
.
hide
(),
setTimeout
(
function
(){
k
.
show
(),
a
.
set
(
f
)},
500
)):
a
.
set
(
f
),
d
.
time
<=
0
||
a
.
autoclose
(),
a
.
callback
()},
f
.
fade
=
function
(
a
,
b
,
c
){
a
.
css
({
opacity
:
0
}).
animate
({
opacity
:
c
},
b
)},
h
.
pt
.
offset
=
function
(){
var
a
=
this
,
b
=
a
.
config
,
c
=
a
.
layerE
,
e
=
c
.
outerHeight
();
a
.
offsetTop
=
""
===
b
.
offset
[
0
]
&&
e
<
d
.
height
()?(
d
.
height
()
-
e
-
2
*
b
.
border
[
0
])
/
2
:
-
1
!=
b
.
offset
[
0
].
indexOf
(
"px"
)?
parseFloat
(
b
.
offset
[
0
]):
parseFloat
(
b
.
offset
[
0
]
||
0
)
/
100
*
d
.
height
(),
a
.
offsetTop
=
a
.
offsetTop
+
b
.
border
[
0
]
+
(
b
.
fix
?
0
:
d
.
scrollTop
()),
-
1
!=
b
.
offset
[
1
].
indexOf
(
"px"
)?
a
.
offsetLeft
=
parseFloat
(
b
.
offset
[
1
])
+
b
.
border
[
0
]:(
b
.
offset
[
1
]
=
""
===
b
.
offset
[
1
]?
"50%"
:
b
.
offset
[
1
],
a
.
offsetLeft
=
"50%"
===
b
.
offset
[
1
]?
b
.
offset
[
1
]:
parseFloat
(
b
.
offset
[
1
])
/
100
*
d
.
width
()
+
b
.
border
[
0
])},
h
.
pt
.
set
=
function
(
a
){
var
b
=
this
,
e
=
b
.
config
,
h
=
(
e
.
dialog
,
e
.
page
),
i
=
(
e
.
loading
,
b
.
layerE
),
j
=
i
.
find
(
g
[
2
]);
switch
(
b
.
autoArea
(
a
),
e
.
title
?
0
===
e
.
type
&&
layer
.
ie6
&&
j
.
css
({
width
:
i
.
outerWidth
()}):
4
!==
e
.
type
&&
i
.
find
(
".xubox_close"
).
addClass
(
"xubox_close1"
),
i
.
attr
({
type
:
f
.
type
[
e
.
type
]}),
b
.
offset
(),
4
!==
e
.
type
&&
(
e
.
shift
&&!
layer
.
ie6
?
"object"
==
typeof
e
.
shift
?
b
.
shift
(
e
.
shift
[
0
],
e
.
shift
[
1
]
||
500
,
e
.
shift
[
2
]):
b
.
shift
(
e
.
shift
,
500
):
i
.
css
({
top
:
b
.
offsetTop
,
left
:
b
.
offsetLeft
})),
e
.
type
){
case
0
:
i
.
find
(
g
[
5
]).
css
({
"background-color"
:
"#fff"
}),
e
.
title
?
i
.
find
(
g
[
3
]).
css
({
paddingTop
:
18
+
j
.
outerHeight
()}):(
i
.
find
(
".xubox_msgico"
).
css
({
top
:
8
}),
i
.
find
(
g
[
3
]).
css
({
marginTop
:
11
}));
break
;
case
1
:
i
.
find
(
h
.
dom
).
addClass
(
"layer_pageContent"
),
e
.
shade
[
0
]
&&
i
.
css
({
zIndex
:
e
.
zIndex
+
1
}),
e
.
title
&&
i
.
find
(
g
[
4
]).
css
({
top
:
j
.
outerHeight
()});
break
;
case
2
:
var
k
=
i
.
find
(
"."
+
g
[
1
]),
l
=
i
.
height
();
k
.
addClass
(
"xubox_load"
).
css
({
width
:
i
.
width
()}),
k
.
css
(
e
.
title
?{
top
:
j
.
height
(),
height
:
l
-
j
.
height
()}:{
top
:
0
,
height
:
l
}),
layer
.
ie6
&&
k
.
attr
(
"src"
,
e
.
iframe
.
src
);
break
;
case
4
:
var
m
=
[
0
,
i
.
outerHeight
()],
n
=
c
(
e
.
tips
.
follow
),
o
=
{
width
:
n
.
outerWidth
(),
height
:
n
.
outerHeight
(),
top
:
n
.
offset
().
top
,
left
:
n
.
offset
().
left
},
p
=
i
.
find
(
".layerTipsG"
);
e
.
tips
.
isGuide
||
p
.
remove
(),
i
.
outerWidth
()
>
e
.
maxWidth
&&
i
.
width
(
e
.
maxWidth
),
o
.
tipColor
=
e
.
tips
.
style
[
1
],
m
[
0
]
=
i
.
outerWidth
(),
o
.
autoLeft
=
function
(){
o
.
left
+
m
[
0
]
-
d
.
width
()
>
0
?(
o
.
tipLeft
=
o
.
left
+
o
.
width
-
m
[
0
],
p
.
css
({
right
:
12
,
left
:
"auto"
})):
o
.
tipLeft
=
o
.
left
},
o
.
where
=
[
function
(){
o
.
autoLeft
(),
o
.
tipTop
=
o
.
top
-
m
[
1
]
-
10
,
p
.
removeClass
(
"layerTipsB"
).
addClass
(
"layerTipsT"
).
css
({
"border-right-color"
:
o
.
tipColor
})},
function
(){
o
.
tipLeft
=
o
.
left
+
o
.
width
+
10
,
o
.
tipTop
=
o
.
top
,
p
.
removeClass
(
"layerTipsL"
).
addClass
(
"layerTipsR"
).
css
({
"border-bottom-color"
:
o
.
tipColor
})},
function
(){
o
.
autoLeft
(),
o
.
tipTop
=
o
.
top
+
o
.
height
+
10
,
p
.
removeClass
(
"layerTipsT"
).
addClass
(
"layerTipsB"
).
css
({
"border-right-color"
:
o
.
tipColor
})},
function
(){
o
.
tipLeft
=
o
.
left
-
m
[
0
]
+
10
,
o
.
tipTop
=
o
.
top
,
p
.
removeClass
(
"layerTipsR"
).
addClass
(
"layerTipsL"
).
css
({
"border-bottom-color"
:
o
.
tipColor
})}],
o
.
where
[
e
.
tips
.
guide
](),
0
===
e
.
tips
.
guide
?
o
.
top
-
(
d
.
scrollTop
()
+
m
[
1
]
+
16
)
<
0
&&
o
.
where
[
2
]():
1
===
e
.
tips
.
guide
?
d
.
width
()
-
(
o
.
left
+
o
.
width
+
m
[
0
]
+
16
)
>
0
||
o
.
where
[
3
]():
2
===
e
.
tips
.
guide
?
o
.
top
-
d
.
scrollTop
()
+
o
.
height
+
m
[
1
]
+
16
-
d
.
height
()
>
0
&&
o
.
where
[
0
]():
3
===
e
.
tips
.
guide
?
m
[
0
]
+
16
-
o
.
left
>
0
&&
o
.
where
[
1
]():
4
===
e
.
tips
.
guide
,
i
.
css
({
left
:
o
.
tipLeft
,
top
:
o
.
tipTop
})}
e
.
fadeIn
&&
(
f
.
fade
(
i
,
e
.
fadeIn
,
1
),
f
.
fade
(
c
(
"#xubox_shade"
+
a
),
e
.
fadeIn
,
e
.
shade
[
0
])),
e
.
fix
&&
""
===
e
.
offset
[
0
]
&&!
e
.
shift
&&
d
.
on
(
"resize"
,
function
(){
i
.
css
({
top
:(
d
.
height
()
-
i
.
outerHeight
())
/
2
})}),
b
.
move
()},
h
.
pt
.
shift
=
function
(
a
,
b
,
c
){
var
e
=
this
,
f
=
e
.
config
,
g
=
e
.
layerE
,
h
=
0
,
i
=
d
.
width
(),
j
=
d
.
height
()
+
(
f
.
fix
?
0
:
d
.
scrollTop
());
h
=
"50%"
==
f
.
offset
[
1
]
||
""
==
f
.
offset
[
1
]?
g
.
outerWidth
()
/
2
:
g
.
outerWidth
();
var
k
=
{
t
:{
top
:
e
.
offsetTop
},
b
:{
top
:
j
-
g
.
outerHeight
()
-
f
.
border
[
0
]},
cl
:
h
+
f
.
border
[
0
],
ct
:
-
g
.
outerHeight
(),
cr
:
i
-
h
-
f
.
border
[
0
]};
switch
(
a
){
case
"left-top"
:
g
.
css
({
left
:
k
.
cl
,
top
:
k
.
ct
}).
animate
(
k
.
t
,
b
);
break
;
case
"top"
:
g
.
css
({
top
:
k
.
ct
}).
animate
(
k
.
t
,
b
);
break
;
case
"right-top"
:
g
.
css
({
left
:
k
.
cr
,
top
:
k
.
ct
}).
animate
(
k
.
t
,
b
);
break
;
case
"right-bottom"
:
g
.
css
({
left
:
k
.
cr
,
top
:
j
}).
animate
(
c
?
k
.
t
:
k
.
b
,
b
);
break
;
case
"bottom"
:
g
.
css
({
top
:
j
}).
animate
(
c
?
k
.
t
:
k
.
b
,
b
);
break
;
case
"left-bottom"
:
g
.
css
({
left
:
k
.
cl
,
top
:
j
}).
animate
(
c
?
k
.
t
:
k
.
b
,
b
);
break
;
case
"left"
:
g
.
css
({
left
:
-
g
.
outerWidth
()}).
animate
({
left
:
e
.
offsetLeft
},
b
)}},
h
.
pt
.
autoArea
=
function
(
a
){
var
b
,
d
=
this
,
a
=
a
||
d
.
index
,
e
=
d
.
config
,
f
=
e
.
page
,
h
=
c
(
"#"
+
g
[
0
]
+
a
),
i
=
h
.
find
(
g
[
2
]),
j
=
h
.
find
(
g
[
5
]),
k
=
e
.
title
?
i
.
innerHeight
():
0
,
l
=
0
;
switch
(
"auto"
===
e
.
area
[
0
]
&&
j
.
outerWidth
()
>=
e
.
maxWidth
&&
h
.
css
({
width
:
e
.
maxWidth
}),
e
.
type
){
case
0
:
var
m
=
h
.
find
(
".xubox_botton>a"
);
b
=
h
.
find
(
g
[
3
]).
outerHeight
()
+
20
,
m
.
length
>
0
&&
(
l
=
m
.
outerHeight
()
+
20
);
break
;
case
1
:
var
n
=
h
.
find
(
g
[
4
]);
b
=
c
(
f
.
dom
).
outerHeight
(),
"auto"
===
e
.
area
[
0
]
&&
h
.
css
({
width
:
n
.
outerWidth
()}),(
""
!==
f
.
html
||
""
!==
f
.
url
)
&&
(
b
=
n
.
outerHeight
());
break
;
case
2
:
h
.
find
(
"iframe"
).
css
({
width
:
h
.
outerWidth
(),
height
:
h
.
outerHeight
()
-
(
e
.
title
?
i
.
innerHeight
():
0
)});
break
;
case
3
:
var
o
=
h
.
find
(
".xubox_loading"
);
b
=
o
.
outerHeight
(),
j
.
css
({
width
:
o
.
width
()})}
"auto"
===
e
.
area
[
1
]
&&
j
.
css
({
height
:
k
+
b
+
l
}),
c
(
"#xubox_border"
+
a
).
css
({
width
:
h
.
outerWidth
()
+
2
*
e
.
border
[
0
],
height
:
h
.
outerHeight
()
+
2
*
e
.
border
[
0
]}),
layer
.
ie6
&&
"auto"
!==
e
.
area
[
0
]
&&
j
.
css
({
width
:
h
.
outerWidth
()}),
h
.
css
(
"50%"
!==
e
.
offset
[
1
]
&&
""
!=
e
.
offset
[
1
]
||
4
===
e
.
type
?{
marginLeft
:
0
}:{
marginLeft
:
-
h
.
outerWidth
()
/
2
})},
h
.
pt
.
move
=
function
(){
var
a
=
this
,
b
=
a
.
config
,
e
=
{
setY
:
0
,
moveLayer
:
function
(){
if
(
0
==
parseInt
(
e
.
layerE
.
css
(
"margin-left"
)))
var
a
=
parseInt
(
e
.
move
.
css
(
"left"
));
else
var
a
=
parseInt
(
e
.
move
.
css
(
"left"
))
+-
parseInt
(
e
.
layerE
.
css
(
"margin-left"
));
"fixed"
!==
e
.
layerE
.
css
(
"position"
)
&&
(
a
-=
e
.
layerE
.
parent
().
offset
().
left
,
e
.
setY
=
0
),
e
.
layerE
.
css
({
left
:
a
,
top
:
parseInt
(
e
.
move
.
css
(
"top"
))
-
e
.
setY
})}},
f
=
a
.
layerE
.
find
(
b
.
move
);
b
.
move
&&
f
.
attr
(
"move"
,
"ok"
),
f
.
css
(
b
.
move
?{
cursor
:
"move"
}:{
cursor
:
"auto"
}),
c
(
b
.
move
).
on
(
"mousedown"
,
function
(
a
){
if
(
a
.
preventDefault
(),
"ok"
===
c
(
this
).
attr
(
"move"
)){
e
.
ismove
=!
0
,
e
.
layerE
=
c
(
this
).
parents
(
"."
+
g
[
0
]);
var
f
=
e
.
layerE
.
offset
().
left
,
h
=
e
.
layerE
.
offset
().
top
,
i
=
e
.
layerE
.
width
()
-
6
,
j
=
e
.
layerE
.
height
()
-
6
;
c
(
"#xubox_moves"
)[
0
]
||
c
(
"body"
).
append
(
'<div id="xubox_moves" class="xubox_moves" style="left:'
+
f
+
"px; top:"
+
h
+
"px; width:"
+
i
+
"px; height:"
+
j
+
'px; z-index:2147483584"></div>'
),
e
.
move
=
c
(
"#xubox_moves"
),
b
.
moveType
&&
e
.
move
.
css
({
opacity
:
0
}),
e
.
moveX
=
a
.
pageX
-
e
.
move
.
position
().
left
,
e
.
moveY
=
a
.
pageY
-
e
.
move
.
position
().
top
,
"fixed"
!==
e
.
layerE
.
css
(
"position"
)
||
(
e
.
setY
=
d
.
scrollTop
())}}),
c
(
document
).
mousemove
(
function
(
a
){
if
(
e
.
ismove
){
var
c
=
a
.
pageX
-
e
.
moveX
,
f
=
a
.
pageY
-
e
.
moveY
;
if
(
a
.
preventDefault
(),
!
b
.
moveOut
){
e
.
setY
=
d
.
scrollTop
();
var
g
=
d
.
width
()
-
e
.
move
.
outerWidth
()
-
b
.
border
[
0
],
h
=
b
.
border
[
0
]
+
e
.
setY
;
c
<
b
.
border
[
0
]
&&
(
c
=
b
.
border
[
0
]),
c
>
g
&&
(
c
=
g
),
h
>
f
&&
(
f
=
h
),
f
>
d
.
height
()
-
e
.
move
.
outerHeight
()
-
b
.
border
[
0
]
+
e
.
setY
&&
(
f
=
d
.
height
()
-
e
.
move
.
outerHeight
()
-
b
.
border
[
0
]
+
e
.
setY
)}
e
.
move
.
css
({
left
:
c
,
top
:
f
}),
b
.
moveType
&&
e
.
moveLayer
(),
c
=
null
,
f
=
null
,
g
=
null
,
h
=
null
}}).
mouseup
(
function
(){
try
{
e
.
ismove
&&
(
e
.
moveLayer
(),
e
.
move
.
remove
()),
e
.
ismove
=!
1
}
catch
(
a
){
e
.
ismove
=!
1
}
b
.
moveEnd
&&
b
.
moveEnd
()})},
h
.
pt
.
autoclose
=
function
(){
var
a
=
this
,
b
=
a
.
config
.
time
,
c
=
function
(){
b
--
,
0
===
b
&&
(
layer
.
close
(
a
.
index
),
clearInterval
(
a
.
autotime
))};
a
.
autotime
=
setInterval
(
c
,
1
e3
)},
f
.
config
=
{
end
:{}},
h
.
pt
.
callback
=
function
(){
var
a
=
this
,
b
=
a
.
layerE
,
d
=
a
.
config
,
e
=
d
.
dialog
;
a
.
openLayer
(),
a
.
config
.
success
(
b
),
layer
.
ie6
&&
a
.
IE6
(
b
),
b
.
find
(
".xubox_close"
).
on
(
"click"
,
function
(){
d
.
close
(
a
.
index
),
layer
.
close
(
a
.
index
)}),
b
.
find
(
".xubox_yes"
).
on
(
"click"
,
function
(){
d
.
yes
?
d
.
yes
(
a
.
index
):
e
.
yes
(
a
.
index
)}),
b
.
find
(
".xubox_no"
).
on
(
"click"
,
function
(){
d
.
no
?
d
.
no
(
a
.
index
):
e
.
no
(
a
.
index
),
layer
.
close
(
a
.
index
)}),
a
.
config
.
shadeClose
&&
c
(
"#xubox_shade"
+
a
.
index
).
on
(
"click"
,
function
(){
layer
.
close
(
a
.
index
)}),
b
.
find
(
".xubox_min"
).
on
(
"click"
,
function
(){
layer
.
min
(
a
.
index
,
d
),
d
.
min
&&
d
.
min
(
b
)}),
b
.
find
(
".xubox_max"
).
on
(
"click"
,
function
(){
c
(
this
).
hasClass
(
"xubox_maxmin"
)?(
layer
.
restore
(
a
.
index
),
d
.
restore
&&
d
.
restore
(
b
)):(
layer
.
full
(
a
.
index
,
d
),
d
.
full
&&
d
.
full
(
b
))}),
f
.
config
.
end
[
a
.
index
]
=
d
.
end
},
f
.
reselect
=
function
(){
c
.
each
(
c
(
"select"
),
function
(){
var
a
=
c
(
this
);
a
.
parents
(
"."
+
g
[
0
])[
0
]
||
1
==
a
.
attr
(
"layer"
)
&&
c
(
"."
+
g
[
0
]).
length
<
1
&&
a
.
removeAttr
(
"layer"
).
show
(),
a
=
null
})},
h
.
pt
.
IE6
=
function
(
a
){
var
b
=
this
,
e
=
a
.
offset
().
top
;
if
(
b
.
config
.
fix
)
var
f
=
function
(){
a
.
css
({
top
:
d
.
scrollTop
()
+
e
})};
else
var
f
=
function
(){
a
.
css
({
top
:
e
})};
f
(),
d
.
scroll
(
f
),
c
.
each
(
c
(
"select"
),
function
(){
var
a
=
c
(
this
);
a
.
parents
(
"."
+
g
[
0
])[
0
]
||
"none"
==
a
.
css
(
"display"
)
||
a
.
attr
({
layer
:
"1"
}).
hide
(),
a
=
null
})},
h
.
pt
.
openLayer
=
function
(){{
var
a
=
this
;
a
.
layerE
}
layer
.
autoArea
=
function
(
b
){
return
a
.
autoArea
(
b
)},
layer
.
shift
=
function
(
b
,
c
,
d
){
a
.
shift
(
b
,
c
,
d
)},
layer
.
setMove
=
function
(){
return
a
.
move
()},
layer
.
zIndex
=
a
.
config
.
zIndex
,
layer
.
setTop
=
function
(
a
){
var
b
=
function
(){
layer
.
zIndex
++
,
a
.
css
(
"z-index"
,
layer
.
zIndex
+
1
)};
return
layer
.
zIndex
=
parseInt
(
a
[
0
].
style
.
zIndex
),
a
.
on
(
"mousedown"
,
b
),
layer
.
zIndex
}},
f
.
isauto
=
function
(
a
,
b
,
c
){
"auto"
===
b
.
area
[
0
]
&&
(
b
.
area
[
0
]
=
a
.
outerWidth
()),
"auto"
===
b
.
area
[
1
]
&&
(
b
.
area
[
1
]
=
a
.
outerHeight
()),
a
.
attr
({
area
:
b
.
area
+
","
+
c
}),
a
.
find
(
".xubox_max"
).
addClass
(
"xubox_maxmin"
)},
f
.
rescollbar
=
function
(
a
){
g
.
html
.
attr
(
"layer-full"
)
==
a
&&
(
g
.
html
[
0
].
style
.
removeProperty
?
g
.
html
[
0
].
style
.
removeProperty
(
"overflow"
):
g
.
html
[
0
].
style
.
removeAttribute
(
"overflow"
),
g
.
html
.
removeAttr
(
"layer-full"
))},
layer
.
getIndex
=
function
(
a
){
return
c
(
a
).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
)},
layer
.
getChildFrame
=
function
(
a
,
b
){
return
b
=
b
||
c
(
"."
+
g
[
1
]).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
),
c
(
"#"
+
g
[
0
]
+
b
).
find
(
"."
+
g
[
1
]).
contents
().
find
(
a
)},
layer
.
getFrameIndex
=
function
(
a
){
return
c
(
a
?
"#"
+
a
:
"."
+
g
[
1
]).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
)},
layer
.
iframeAuto
=
function
(
a
){
a
=
a
||
c
(
"."
+
g
[
1
]).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
);
var
b
=
layer
.
getChildFrame
(
"body"
,
a
).
outerHeight
(),
d
=
c
(
"#"
+
g
[
0
]
+
a
),
e
=
d
.
find
(
g
[
2
]),
f
=
0
;
e
&&
(
f
=
e
.
height
()),
d
.
css
({
height
:
b
+
f
});
var
h
=-
parseInt
(
c
(
"#xubox_border"
+
a
).
css
(
"top"
));
c
(
"#xubox_border"
+
a
).
css
({
height
:
b
+
2
*
h
+
f
}),
c
(
"#"
+
g
[
1
]
+
a
).
css
({
height
:
b
})},
layer
.
iframeSrc
=
function
(
a
,
b
){
c
(
"#"
+
g
[
0
]
+
a
).
find
(
"iframe"
).
attr
(
"src"
,
b
)},
layer
.
area
=
function
(
a
,
b
){
var
d
=
[
c
(
"#"
+
g
[
0
]
+
a
),
c
(
"#xubox_border"
+
a
)],
e
=
d
[
0
].
attr
(
"type"
),
h
=
d
[
0
].
find
(
g
[
5
]),
i
=
d
[
0
].
find
(
g
[
2
]);
if
(
e
===
f
.
type
[
1
]
||
e
===
f
.
type
[
2
]){
if
(
d
[
0
].
css
(
b
),
h
.
css
({
width
:
b
.
width
,
height
:
b
.
height
}),
e
===
f
.
type
[
2
]){
var
j
=
d
[
0
].
find
(
"iframe"
);
j
.
css
({
width
:
b
.
width
,
height
:
i
?
b
.
height
-
i
.
innerHeight
():
b
.
height
})}
"0px"
!==
d
[
0
].
css
(
"margin-left"
)
&&
(
b
.
hasOwnProperty
(
"top"
)
&&
d
[
0
].
css
({
top
:
b
.
top
-
(
d
[
1
][
0
]?
parseFloat
(
d
[
1
].
css
(
"top"
)):
0
)}),
b
.
hasOwnProperty
(
"left"
)
&&
d
[
0
].
css
({
left
:
b
.
left
+
d
[
0
].
outerWidth
()
/
2
-
(
d
[
1
][
0
]?
parseFloat
(
d
[
1
].
css
(
"left"
)):
0
)}),
d
[
0
].
css
({
marginLeft
:
-
d
[
0
].
outerWidth
()
/
2
})),
d
[
1
][
0
]
&&
d
[
1
].
css
({
width
:
parseFloat
(
b
.
width
)
-
2
*
parseFloat
(
d
[
1
].
css
(
"left"
)),
height
:
parseFloat
(
b
.
height
)
-
2
*
parseFloat
(
d
[
1
].
css
(
"top"
))})}},
layer
.
min
=
function
(
a
,
b
){
var
d
=
c
(
"#"
+
g
[
0
]
+
a
),
e
=
[
d
.
position
().
top
,
d
.
position
().
left
+
parseFloat
(
d
.
css
(
"margin-left"
))];
f
.
isauto
(
d
,
b
,
e
),
layer
.
area
(
a
,{
width
:
180
,
height
:
35
}),
d
.
find
(
".xubox_min"
).
hide
(),
"page"
===
d
.
attr
(
"type"
)
&&
d
.
find
(
g
[
4
]).
hide
(),
f
.
rescollbar
(
a
)},
layer
.
restore
=
function
(
a
){{
var
b
=
c
(
"#"
+
g
[
0
]
+
a
),
d
=
b
.
attr
(
"area"
).
split
(
","
);
b
.
attr
(
"type"
)}
layer
.
area
(
a
,{
width
:
parseFloat
(
d
[
0
]),
height
:
parseFloat
(
d
[
1
]),
top
:
parseFloat
(
d
[
2
]),
left
:
parseFloat
(
d
[
3
])}),
b
.
find
(
".xubox_max"
).
removeClass
(
"xubox_maxmin"
),
b
.
find
(
".xubox_min"
).
show
(),
"page"
===
b
.
attr
(
"type"
)
&&
b
.
find
(
g
[
4
]).
show
(),
f
.
rescollbar
(
a
)},
layer
.
full
=
function
(
a
,
b
){
var
e
,
h
=
c
(
"#"
+
g
[
0
]
+
a
),
i
=
2
*
b
.
border
[
0
]
||
6
,
j
=
[
h
.
position
().
top
,
h
.
position
().
left
+
parseFloat
(
h
.
css
(
"margin-left"
))];
f
.
isauto
(
h
,
b
,
j
),
g
.
html
.
attr
(
"layer-full"
)
||
g
.
html
.
css
(
"overflow"
,
"hidden"
).
attr
(
"layer-full"
,
a
),
clearTimeout
(
e
),
e
=
setTimeout
(
function
(){
layer
.
area
(
a
,{
top
:
"fixed"
===
h
.
css
(
"position"
)?
0
:
d
.
scrollTop
(),
left
:
"fixed"
===
h
.
css
(
"position"
)?
0
:
d
.
scrollLeft
(),
width
:
d
.
width
()
-
i
,
height
:
d
.
height
()
-
i
})},
100
)},
layer
.
title
=
function
(
a
,
b
){
var
d
=
c
(
"#"
+
g
[
0
]
+
(
b
||
layer
.
index
)).
find
(
".xubox_title>em"
);
d
.
html
(
a
)},
layer
.
close
=
function
(
a
){
var
b
=
c
(
"#"
+
g
[
0
]
+
a
),
d
=
b
.
attr
(
"type"
),
e
=
c
(
"#xubox_moves, #xubox_shade"
+
a
);
if
(
b
[
0
]){
if
(
d
==
f
.
type
[
1
])
if
(
b
.
find
(
".xuboxPageHtml"
)[
0
])
b
[
0
].
innerHTML
=
""
,
b
.
remove
();
else
{
b
.
find
(
".xubox_setwin,.xubox_close,.xubox_botton,.xubox_title,.xubox_border"
).
remove
();
for
(
var
h
=
0
;
3
>
h
;
h
++
)
b
.
find
(
".layer_pageContent"
).
unwrap
().
hide
()}
else
b
[
0
].
innerHTML
=
""
,
b
.
remove
();
e
.
remove
(),
layer
.
ie6
&&
f
.
reselect
(),
f
.
rescollbar
(
a
),
"function"
==
typeof
f
.
config
.
end
[
a
]
&&
f
.
config
.
end
[
a
](),
delete
f
.
config
.
end
[
a
]}},
layer
.
closeLoad
=
function
(){
layer
.
close
(
c
(
".xubox_loading"
).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
))},
layer
.
closeTips
=
function
(){
layer
.
closeAll
(
"tips"
)},
layer
.
closeAll
=
function
(
a
){
c
.
each
(
c
(
"."
+
g
[
0
]),
function
(){
var
b
=
c
(
this
),
d
=
a
?
b
.
attr
(
"type"
)
===
a
:
1
;
d
&&
layer
.
close
(
b
.
attr
(
"times"
)),
d
=
null
})},
f
.
run
=
function
(){
c
=
jQuery
,
d
=
c
(
a
),
g
.
html
=
c
(
"html"
),
layer
.
use
(
"skin/layer.css"
),
c
.
layer
=
function
(
a
){
var
b
=
new
h
(
a
);
return
b
.
index
},(
new
Image
).
src
=
layer
.
path
+
"skin/default/xubox_ico0.png"
},
"function"
==
typeof
define
?
define
(
function
(){
return
f
.
run
(),
layer
}):
f
.
run
()}(
window
);
f
=
{
getPath
:
function
(){
var
a
=
document
.
scripts
,
b
=
a
[
a
.
length
-
1
].
src
;
return
e
?
e
:
b
.
substring
(
0
,
b
.
lastIndexOf
(
"/"
)
+
1
)},
type
:[
"dialog"
,
"page"
,
"iframe"
,
"loading"
,
"tips"
]};
a
.
layer
=
{
v
:
"1.8.5"
,
ie6
:
!!
a
.
ActiveXObject
&&!
a
.
XMLHttpRequest
,
index
:
0
,
path
:
f
.
getPath
(),
use
:
function
(
a
,
b
){
var
d
=
c
(
"head"
)[
0
],
a
=
a
.
replace
(
/
\s
/g
,
""
),
e
=
/
\.
css$/
.
test
(
a
),
f
=
document
.
createElement
(
e
?
"link"
:
"script"
),
g
=
a
.
replace
(
/
\.
|
\/
/g
,
""
);
e
&&
(
f
.
type
=
"text/css"
,
f
.
rel
=
"stylesheet"
),
f
[
e
?
"href"
:
"src"
]
=
/^http:
\/\/
/
.
test
(
a
)?
a
:
layer
.
path
+
a
,
f
.
id
=
g
,
c
(
"#"
+
g
)[
0
]
||
d
.
appendChild
(
f
),
b
&&
(
document
.
all
?
c
(
f
).
ready
(
b
):
c
(
f
).
load
(
b
))},
alert
:
function
(
a
,
b
,
d
,
e
){
var
f
=
"function"
==
typeof
d
,
g
=
{
dialog
:{
msg
:
a
,
type
:
b
,
yes
:
f
?
d
:
e
},
area
:[
"auto"
,
"auto"
]};
return
f
||
(
g
.
title
=
d
),
c
.
layer
(
g
)},
confirm
:
function
(
a
,
b
,
d
,
e
){
var
f
=
"function"
==
typeof
d
,
g
=
{
dialog
:{
msg
:
a
,
type
:
4
,
btns
:
2
,
yes
:
b
,
no
:
f
?
d
:
e
}};
return
f
||
(
g
.
title
=
d
),
c
.
layer
(
g
)},
msg
:
function
(
a
,
d
,
e
,
f
){
var
g
=
{
title
:
!
1
,
closeBtn
:
!
1
,
time
:
d
===
b
?
2
:
d
,
dialog
:{
msg
:
""
===
a
||
a
===
b
?
" "
:
a
},
end
:
f
};
return
"object"
==
typeof
e
?(
g
.
dialog
.
type
=
e
.
type
,
g
.
shade
=
e
.
shade
,
g
.
shift
=
e
.
rate
):
"function"
==
typeof
e
?
g
.
end
=
e
:
g
.
dialog
.
type
=
e
,
c
.
layer
(
g
)},
load
:
function
(
a
,
b
){
return
"string"
==
typeof
a
?
layer
.
msg
(
a
,
b
||
0
,
16
):
c
.
layer
({
time
:
a
,
loading
:{
type
:
b
},
bgcolor
:
b
?
"#fff"
:
""
,
shade
:
b
?[.
1
,
"#000"
]:[
0
],
border
:
3
!==
b
&&
b
?[
6
,.
3
,
"#000"
]:[
0
],
type
:
3
,
title
:[
""
,
!
1
],
closeBtn
:[
0
,
!
1
]})},
tips
:
function
(
a
,
b
,
d
,
e
,
f
,
g
){
var
h
=
{
type
:
4
,
shade
:
!
1
,
success
:
function
(
a
){
this
.
closeBtn
||
a
.
find
(
".xubox_tips"
).
css
({
"padding-right"
:
10
})},
bgcolor
:
""
,
tips
:{
msg
:
a
,
follow
:
b
}};
return
h
.
time
=
"object"
==
typeof
d
?
d
.
time
:
0
|
d
,
d
=
d
||
{},
h
.
closeBtn
=
d
.
closeBtn
||!
1
,
h
.
maxWidth
=
d
.
maxWidth
||
e
,
h
.
tips
.
guide
=
d
.
guide
||
f
,
h
.
tips
.
style
=
d
.
style
||
g
,
h
.
tips
.
more
=
d
.
more
,
c
.
layer
(
h
)}};
var
g
=
[
"xubox_layer"
,
"xubox_iframe"
,
".xubox_title"
,
".xubox_text"
,
".xubox_page"
,
".xubox_main"
],
h
=
function
(
a
){
var
b
=
this
,
d
=
b
.
config
;
layer
.
index
++
,
b
.
index
=
layer
.
index
,
b
.
config
=
c
.
extend
({},
d
,
a
),
b
.
config
.
dialog
=
c
.
extend
({},
d
.
dialog
,
a
.
dialog
),
b
.
config
.
page
=
c
.
extend
({},
d
.
page
,
a
.
page
),
b
.
config
.
iframe
=
c
.
extend
({},
d
.
iframe
,
a
.
iframe
),
b
.
config
.
loading
=
c
.
extend
({},
d
.
loading
,
a
.
loading
),
b
.
config
.
tips
=
c
.
extend
({},
d
.
tips
,
a
.
tips
),
b
.
creat
()};
h
.
pt
=
h
.
prototype
,
h
.
pt
.
config
=
{
type
:
0
,
shade
:[.
3
,
"#000"
],
fix
:
!
0
,
move
:
".xubox_title"
,
title
:
"信息"
,
offset
:[
""
,
"50%"
],
area
:[
"310px"
,
"auto"
],
closeBtn
:[
0
,
!
0
],
time
:
0
,
bgcolor
:
"#fff"
,
border
:[
6
,.
3
,
"#000"
],
zIndex
:
19891014
,
maxWidth
:
400
,
dialog
:{
btns
:
1
,
btn
:[
"确定"
,
"取消"
],
type
:
8
,
msg
:
""
,
yes
:
function
(
a
){
layer
.
close
(
a
)},
no
:
function
(
a
){
layer
.
close
(
a
)}},
page
:{
dom
:
"#xulayer"
,
html
:
""
,
url
:
""
},
iframe
:{
src
:
"http://sentsin.com"
,
scrolling
:
"auto"
},
loading
:{
type
:
0
},
tips
:{
msg
:
""
,
follow
:
""
,
guide
:
0
,
isGuide
:
!
0
,
style
:[
"background-color:#FF9900; color:#fff;"
,
"#FF9900"
]},
success
:
function
(){},
close
:
function
(
a
){
layer
.
close
(
a
)},
end
:
function
(){}},
h
.
pt
.
space
=
function
(
a
){
var
b
=
this
,
a
=
a
||
""
,
c
=
b
.
index
,
d
=
b
.
config
,
e
=
d
.
dialog
,
f
=-
1
===
e
.
type
?
""
:
'<span class="xubox_msg xulayer_png32 xubox_msgico xubox_msgtype'
+
e
.
type
+
'"></span>'
,
h
=
[
'<div class="xubox_dialog">'
+
f
+
'<span class="xubox_msg xubox_text" style="'
+
(
f
?
""
:
"padding-left:20px"
)
+
'">'
+
e
.
msg
+
"</span></div>"
,
'<div class="xubox_page">'
+
a
+
"</div>"
,
'<iframe scrolling="'
+
d
.
iframe
.
scrolling
+
'" allowtransparency="true" id="'
+
g
[
1
]
+
c
+
'" name="'
+
g
[
1
]
+
c
+
'" onload="this.className=
\'
'
+
g
[
1
]
+
'
\'
" class="'
+
g
[
1
]
+
'" frameborder="0" src="'
+
d
.
iframe
.
src
+
'"></iframe>'
,
'<span class="xubox_loading xubox_loading_'
+
d
.
loading
.
type
+
'"></span>'
,
'<div class="xubox_tips" style="'
+
d
.
tips
.
style
[
0
]
+
'"><div class="xubox_tipsMsg">'
+
d
.
tips
.
msg
+
'</div><i class="layerTipsG"></i></div>'
],
i
=
""
,
j
=
""
,
k
=
d
.
zIndex
+
c
,
l
=
"z-index:"
+
k
+
"; background-color:"
+
d
.
shade
[
1
]
+
"; opacity:"
+
d
.
shade
[
0
]
+
"; filter:alpha(opacity="
+
100
*
d
.
shade
[
0
]
+
");"
;
d
.
shade
[
0
]
&&
(
i
=
'<div times="'
+
c
+
'" id="xubox_shade'
+
c
+
'" class="xubox_shade" style="'
+
l
+
'"></div>'
),
d
.
zIndex
=
k
;
var
m
=
""
,
n
=
""
,
o
=
"z-index:"
+
(
k
-
1
)
+
"; background-color: "
+
d
.
border
[
2
]
+
"; opacity:"
+
d
.
border
[
1
]
+
"; filter:alpha(opacity="
+
100
*
d
.
border
[
1
]
+
"); top:-"
+
d
.
border
[
0
]
+
"px; left:-"
+
d
.
border
[
0
]
+
"px;"
;
d
.
border
[
0
]
&&
(
j
=
'<div id="xubox_border'
+
c
+
'" class="xubox_border" style="'
+
o
+
'"></div>'
),
!
d
.
maxmin
||
1
!==
d
.
type
&&
2
!==
d
.
type
||
/^
\d
+%$/
.
test
(
d
.
area
[
0
])
&&
/^
\d
+%$/
.
test
(
d
.
area
[
1
])
||
(
n
=
'<a class="xubox_min" href="javascript:;"><cite></cite></a><a class="xubox_max xulayer_png32" href="javascript:;"></a>'
),
d
.
closeBtn
[
1
]
&&
(
n
+=
'<a class="xubox_close xulayer_png32 xubox_close'
+
d
.
closeBtn
[
0
]
+
'" href="javascript:;" style="'
+
(
4
===
d
.
type
?
"position:absolute; right:-3px; _right:7px; top:-4px;"
:
""
)
+
'"></a>'
);
var
p
=
"object"
==
typeof
d
.
title
;
return
d
.
title
&&
(
m
=
'<div class="xubox_title" style="'
+
(
p
?
d
.
title
[
1
]:
""
)
+
'"><em>'
+
(
p
?
d
.
title
[
0
]:
d
.
title
)
+
"</em></div>"
),[
i
,
'<div times="'
+
c
+
'" showtime="'
+
d
.
time
+
'" style="z-index:'
+
k
+
'" id="'
+
g
[
0
]
+
c
+
'" class="'
+
g
[
0
]
+
'"><div style="background-color:'
+
d
.
bgcolor
+
"; z-index:"
+
k
+
'" class="xubox_main">'
+
h
[
d
.
type
]
+
m
+
'<span class="xubox_setwin">'
+
n
+
'</span><span class="xubox_botton"></span></div>'
+
j
+
"</div>"
]},
h
.
pt
.
creat
=
function
(){
var
a
=
this
,
b
=
""
,
d
=
a
.
config
,
e
=
d
.
dialog
,
f
=
a
.
index
,
h
=
d
.
page
,
i
=
c
(
"body"
),
j
=
function
(
d
){
var
d
=
d
||
""
;
b
=
a
.
space
(
d
),
i
.
append
(
c
(
b
[
0
]))};
switch
(
d
.
type
){
case
0
:
d
.
title
||
(
d
.
area
=
[
"auto"
,
"auto"
]),
c
(
".xubox_dialog"
)[
0
]
&&
layer
.
close
(
c
(
".xubox_dialog"
).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
));
break
;
case
1
:
if
(
""
!==
h
.
html
)
j
(
'<div class="xuboxPageHtml">'
+
h
.
html
+
"</div>"
),
i
.
append
(
c
(
b
[
1
]));
else
if
(
""
!==
h
.
url
)
j
(
'<div class="xuboxPageHtml" id="xuboxPageHtml'
+
f
+
'">'
+
h
.
html
+
"</div>"
),
i
.
append
(
c
(
b
[
1
])),
c
.
get
(
h
.
url
,
function
(
a
){
c
(
"#xuboxPageHtml"
+
f
).
html
(
a
.
toString
()),
h
.
ok
&&
h
.
ok
(
a
)});
else
{
if
(
0
!=
c
(
h
.
dom
).
parents
(
g
[
4
]).
length
)
return
;
j
(),
c
(
h
.
dom
).
show
().
wrap
(
c
(
b
[
1
]))}
break
;
case
3
:
d
.
title
=!
1
,
d
.
area
=
[
"auto"
,
"auto"
],
d
.
closeBtn
=
[
""
,
!
1
],
c
(
".xubox_loading"
)[
0
]
&&
layer
.
closeLoad
();
break
;
case
4
:
d
.
title
=!
1
,
d
.
area
=
[
"auto"
,
"auto"
],
d
.
fix
=!
1
,
d
.
border
=
[
0
],
d
.
tips
.
more
||
layer
.
closeTips
()}
1
!==
d
.
type
&&
(
j
(),
i
.
append
(
c
(
b
[
1
])));
var
k
=
a
.
layerE
=
c
(
"#"
+
g
[
0
]
+
f
);
if
(
k
.
css
({
width
:
d
.
area
[
0
],
height
:
d
.
area
[
1
]}),
d
.
fix
||
k
.
css
({
position
:
"absolute"
}),
d
.
title
&&
(
3
!==
d
.
type
||
4
!==
d
.
type
)){
var
l
=
0
===
d
.
type
?
e
:
d
,
m
=
k
.
find
(
".xubox_botton"
);
switch
(
l
.
btn
=
d
.
btn
||
e
.
btn
,
l
.
btns
){
case
0
:
m
.
html
(
""
).
hide
();
break
;
case
1
:
m
.
html
(
'<a href="javascript:;" class="xubox_yes xubox_botton1">'
+
l
.
btn
[
0
]
+
"</a>"
);
break
;
case
2
:
m
.
html
(
'<a href="javascript:;" class="xubox_yes xubox_botton2">'
+
l
.
btn
[
0
]
+
'</a><a href="javascript:;" class="xubox_no xubox_botton3">'
+
l
.
btn
[
1
]
+
"</a>"
)}}
"auto"
===
k
.
css
(
"left"
)?(
k
.
hide
(),
setTimeout
(
function
(){
k
.
show
(),
a
.
set
(
f
)},
500
)):
a
.
set
(
f
),
d
.
time
<=
0
||
a
.
autoclose
(),
a
.
callback
()},
f
.
fade
=
function
(
a
,
b
,
c
){
a
.
css
({
opacity
:
0
}).
animate
({
opacity
:
c
},
b
)},
h
.
pt
.
offset
=
function
(){
var
a
=
this
,
b
=
a
.
config
,
c
=
a
.
layerE
,
e
=
c
.
outerHeight
();
a
.
offsetTop
=
""
===
b
.
offset
[
0
]
&&
e
<
d
.
height
()?(
d
.
height
()
-
e
-
2
*
b
.
border
[
0
])
/
2
:
-
1
!=
b
.
offset
[
0
].
indexOf
(
"px"
)?
parseFloat
(
b
.
offset
[
0
]):
parseFloat
(
b
.
offset
[
0
]
||
0
)
/
100
*
d
.
height
(),
a
.
offsetTop
=
a
.
offsetTop
+
b
.
border
[
0
]
+
(
b
.
fix
?
0
:
d
.
scrollTop
()),
-
1
!=
b
.
offset
[
1
].
indexOf
(
"px"
)?
a
.
offsetLeft
=
parseFloat
(
b
.
offset
[
1
])
+
b
.
border
[
0
]:(
b
.
offset
[
1
]
=
""
===
b
.
offset
[
1
]?
"50%"
:
b
.
offset
[
1
],
a
.
offsetLeft
=
"50%"
===
b
.
offset
[
1
]?
b
.
offset
[
1
]:
parseFloat
(
b
.
offset
[
1
])
/
100
*
d
.
width
()
+
b
.
border
[
0
])},
h
.
pt
.
set
=
function
(
a
){
var
b
=
this
,
e
=
b
.
config
,
h
=
(
e
.
dialog
,
e
.
page
),
i
=
(
e
.
loading
,
b
.
layerE
),
j
=
i
.
find
(
g
[
2
]);
switch
(
b
.
autoArea
(
a
),
e
.
title
?
0
===
e
.
type
&&
layer
.
ie6
&&
j
.
css
({
width
:
i
.
outerWidth
()}):
4
!==
e
.
type
&&
i
.
find
(
".xubox_close"
).
addClass
(
"xubox_close1"
),
i
.
attr
({
type
:
f
.
type
[
e
.
type
]}),
b
.
offset
(),
4
!==
e
.
type
&&
(
e
.
shift
&&!
layer
.
ie6
?
"object"
==
typeof
e
.
shift
?
b
.
shift
(
e
.
shift
[
0
],
e
.
shift
[
1
]
||
500
,
e
.
shift
[
2
]):
b
.
shift
(
e
.
shift
,
500
):
i
.
css
({
top
:
b
.
offsetTop
,
left
:
b
.
offsetLeft
})),
e
.
type
){
case
0
:
i
.
find
(
g
[
5
]).
css
({
"background-color"
:
"#fff"
}),
e
.
title
?
i
.
find
(
g
[
3
]).
css
({
paddingTop
:
18
+
j
.
outerHeight
()}):(
i
.
find
(
".xubox_msgico"
).
css
({
top
:
8
}),
i
.
find
(
g
[
3
]).
css
({
marginTop
:
11
}));
break
;
case
1
:
i
.
find
(
h
.
dom
).
addClass
(
"layer_pageContent"
),
e
.
shade
[
0
]
&&
i
.
css
({
zIndex
:
e
.
zIndex
+
1
}),
e
.
title
&&
i
.
find
(
g
[
4
]).
css
({
top
:
j
.
outerHeight
()});
break
;
case
2
:
var
k
=
i
.
find
(
"."
+
g
[
1
]),
l
=
i
.
height
();
k
.
addClass
(
"xubox_load"
).
css
({
width
:
i
.
width
()}),
k
.
css
(
e
.
title
?{
top
:
j
.
height
(),
height
:
l
-
j
.
height
()}:{
top
:
0
,
height
:
l
}),
layer
.
ie6
&&
k
.
attr
(
"src"
,
e
.
iframe
.
src
);
break
;
case
4
:
var
m
=
[
0
,
i
.
outerHeight
()],
n
=
c
(
e
.
tips
.
follow
),
o
=
{
width
:
n
.
outerWidth
(),
height
:
n
.
outerHeight
(),
top
:
n
.
offset
().
top
,
left
:
n
.
offset
().
left
},
p
=
i
.
find
(
".layerTipsG"
);
e
.
tips
.
isGuide
||
p
.
remove
(),
i
.
outerWidth
()
>
e
.
maxWidth
&&
i
.
width
(
e
.
maxWidth
),
o
.
tipColor
=
e
.
tips
.
style
[
1
],
m
[
0
]
=
i
.
outerWidth
(),
o
.
autoLeft
=
function
(){
o
.
left
+
m
[
0
]
-
d
.
width
()
>
0
?(
o
.
tipLeft
=
o
.
left
+
o
.
width
-
m
[
0
],
p
.
css
({
right
:
12
,
left
:
"auto"
})):
o
.
tipLeft
=
o
.
left
},
o
.
where
=
[
function
(){
o
.
autoLeft
(),
o
.
tipTop
=
o
.
top
-
m
[
1
]
-
10
,
p
.
removeClass
(
"layerTipsB"
).
addClass
(
"layerTipsT"
).
css
({
"border-right-color"
:
o
.
tipColor
})},
function
(){
o
.
tipLeft
=
o
.
left
+
o
.
width
+
10
,
o
.
tipTop
=
o
.
top
,
p
.
removeClass
(
"layerTipsL"
).
addClass
(
"layerTipsR"
).
css
({
"border-bottom-color"
:
o
.
tipColor
})},
function
(){
o
.
autoLeft
(),
o
.
tipTop
=
o
.
top
+
o
.
height
+
10
,
p
.
removeClass
(
"layerTipsT"
).
addClass
(
"layerTipsB"
).
css
({
"border-right-color"
:
o
.
tipColor
})},
function
(){
o
.
tipLeft
=
o
.
left
-
m
[
0
]
+
10
,
o
.
tipTop
=
o
.
top
,
p
.
removeClass
(
"layerTipsR"
).
addClass
(
"layerTipsL"
).
css
({
"border-bottom-color"
:
o
.
tipColor
})}],
o
.
where
[
e
.
tips
.
guide
](),
0
===
e
.
tips
.
guide
?
o
.
top
-
(
d
.
scrollTop
()
+
m
[
1
]
+
16
)
<
0
&&
o
.
where
[
2
]():
1
===
e
.
tips
.
guide
?
d
.
width
()
-
(
o
.
left
+
o
.
width
+
m
[
0
]
+
16
)
>
0
||
o
.
where
[
3
]():
2
===
e
.
tips
.
guide
?
o
.
top
-
d
.
scrollTop
()
+
o
.
height
+
m
[
1
]
+
16
-
d
.
height
()
>
0
&&
o
.
where
[
0
]():
3
===
e
.
tips
.
guide
?
m
[
0
]
+
16
-
o
.
left
>
0
&&
o
.
where
[
1
]():
4
===
e
.
tips
.
guide
,
i
.
css
({
left
:
o
.
tipLeft
,
top
:
o
.
tipTop
})}
e
.
fadeIn
&&
(
f
.
fade
(
i
,
e
.
fadeIn
,
1
),
f
.
fade
(
c
(
"#xubox_shade"
+
a
),
e
.
fadeIn
,
e
.
shade
[
0
])),
e
.
fix
&&
""
===
e
.
offset
[
0
]
&&!
e
.
shift
&&
d
.
on
(
"resize"
,
function
(){
i
.
css
({
top
:(
d
.
height
()
-
i
.
outerHeight
())
/
2
})}),
b
.
move
()},
h
.
pt
.
shift
=
function
(
a
,
b
,
c
){
var
e
=
this
,
f
=
e
.
config
,
g
=
e
.
layerE
,
h
=
0
,
i
=
d
.
width
(),
j
=
d
.
height
()
+
(
f
.
fix
?
0
:
d
.
scrollTop
());
h
=
"50%"
==
f
.
offset
[
1
]
||
""
==
f
.
offset
[
1
]?
g
.
outerWidth
()
/
2
:
g
.
outerWidth
();
var
k
=
{
t
:{
top
:
e
.
offsetTop
},
b
:{
top
:
j
-
g
.
outerHeight
()
-
f
.
border
[
0
]},
cl
:
h
+
f
.
border
[
0
],
ct
:
-
g
.
outerHeight
(),
cr
:
i
-
h
-
f
.
border
[
0
]};
switch
(
a
){
case
"left-top"
:
g
.
css
({
left
:
k
.
cl
,
top
:
k
.
ct
}).
animate
(
k
.
t
,
b
);
break
;
case
"top"
:
g
.
css
({
top
:
k
.
ct
}).
animate
(
k
.
t
,
b
);
break
;
case
"right-top"
:
g
.
css
({
left
:
k
.
cr
,
top
:
k
.
ct
}).
animate
(
k
.
t
,
b
);
break
;
case
"right-bottom"
:
g
.
css
({
left
:
k
.
cr
,
top
:
j
}).
animate
(
c
?
k
.
t
:
k
.
b
,
b
);
break
;
case
"bottom"
:
g
.
css
({
top
:
j
}).
animate
(
c
?
k
.
t
:
k
.
b
,
b
);
break
;
case
"left-bottom"
:
g
.
css
({
left
:
k
.
cl
,
top
:
j
}).
animate
(
c
?
k
.
t
:
k
.
b
,
b
);
break
;
case
"left"
:
g
.
css
({
left
:
-
g
.
outerWidth
()}).
animate
({
left
:
e
.
offsetLeft
},
b
)}},
h
.
pt
.
autoArea
=
function
(
a
){
var
b
,
d
=
this
,
a
=
a
||
d
.
index
,
e
=
d
.
config
,
f
=
e
.
page
,
h
=
c
(
"#"
+
g
[
0
]
+
a
),
i
=
h
.
find
(
g
[
2
]),
j
=
h
.
find
(
g
[
5
]),
k
=
e
.
title
?
i
.
innerHeight
():
0
,
l
=
0
;
switch
(
"auto"
===
e
.
area
[
0
]
&&
j
.
outerWidth
()
>=
e
.
maxWidth
&&
h
.
css
({
width
:
e
.
maxWidth
}),
e
.
type
){
case
0
:
var
m
=
h
.
find
(
".xubox_botton>a"
);
b
=
h
.
find
(
g
[
3
]).
outerHeight
()
+
20
,
m
.
length
>
0
&&
(
l
=
m
.
outerHeight
()
+
20
);
break
;
case
1
:
var
n
=
h
.
find
(
g
[
4
]);
b
=
c
(
f
.
dom
).
outerHeight
(),
"auto"
===
e
.
area
[
0
]
&&
h
.
css
({
width
:
n
.
outerWidth
()}),(
""
!==
f
.
html
||
""
!==
f
.
url
)
&&
(
b
=
n
.
outerHeight
());
break
;
case
2
:
h
.
find
(
"iframe"
).
css
({
width
:
h
.
outerWidth
(),
height
:
h
.
outerHeight
()
-
(
e
.
title
?
i
.
innerHeight
():
0
)});
break
;
case
3
:
var
o
=
h
.
find
(
".xubox_loading"
);
b
=
o
.
outerHeight
(),
j
.
css
({
width
:
o
.
width
()})}
"auto"
===
e
.
area
[
1
]
&&
j
.
css
({
height
:
k
+
b
+
l
}),
c
(
"#xubox_border"
+
a
).
css
({
width
:
h
.
outerWidth
()
+
2
*
e
.
border
[
0
],
height
:
h
.
outerHeight
()
+
2
*
e
.
border
[
0
]}),
layer
.
ie6
&&
"auto"
!==
e
.
area
[
0
]
&&
j
.
css
({
width
:
h
.
outerWidth
()}),
h
.
css
(
"50%"
!==
e
.
offset
[
1
]
&&
""
!=
e
.
offset
[
1
]
||
4
===
e
.
type
?{
marginLeft
:
0
}:{
marginLeft
:
-
h
.
outerWidth
()
/
2
})},
h
.
pt
.
move
=
function
(){
var
a
=
this
,
b
=
a
.
config
,
e
=
{
setY
:
0
,
moveLayer
:
function
(){
if
(
0
==
parseInt
(
e
.
layerE
.
css
(
"margin-left"
)))
var
a
=
parseInt
(
e
.
move
.
css
(
"left"
));
else
var
a
=
parseInt
(
e
.
move
.
css
(
"left"
))
+-
parseInt
(
e
.
layerE
.
css
(
"margin-left"
));
"fixed"
!==
e
.
layerE
.
css
(
"position"
)
&&
(
a
-=
e
.
layerE
.
parent
().
offset
().
left
,
e
.
setY
=
0
),
e
.
layerE
.
css
({
left
:
a
,
top
:
parseInt
(
e
.
move
.
css
(
"top"
))
-
e
.
setY
})}},
f
=
a
.
layerE
.
find
(
b
.
move
);
b
.
move
&&
f
.
attr
(
"move"
,
"ok"
),
f
.
css
(
b
.
move
?{
cursor
:
"move"
}:{
cursor
:
"auto"
}),
c
(
b
.
move
).
on
(
"mousedown"
,
function
(
a
){
if
(
a
.
preventDefault
(),
"ok"
===
c
(
this
).
attr
(
"move"
)){
e
.
ismove
=!
0
,
e
.
layerE
=
c
(
this
).
parents
(
"."
+
g
[
0
]);
var
f
=
e
.
layerE
.
offset
().
left
,
h
=
e
.
layerE
.
offset
().
top
,
i
=
e
.
layerE
.
width
()
-
6
,
j
=
e
.
layerE
.
height
()
-
6
;
c
(
"#xubox_moves"
)[
0
]
||
c
(
"body"
).
append
(
'<div id="xubox_moves" class="xubox_moves" style="left:'
+
f
+
"px; top:"
+
h
+
"px; width:"
+
i
+
"px; height:"
+
j
+
'px; z-index:2147483584"></div>'
),
e
.
move
=
c
(
"#xubox_moves"
),
b
.
moveType
&&
e
.
move
.
css
({
opacity
:
0
}),
e
.
moveX
=
a
.
pageX
-
e
.
move
.
position
().
left
,
e
.
moveY
=
a
.
pageY
-
e
.
move
.
position
().
top
,
"fixed"
!==
e
.
layerE
.
css
(
"position"
)
||
(
e
.
setY
=
d
.
scrollTop
())}}),
c
(
document
).
mousemove
(
function
(
a
){
if
(
e
.
ismove
){
var
c
=
a
.
pageX
-
e
.
moveX
,
f
=
a
.
pageY
-
e
.
moveY
;
if
(
a
.
preventDefault
(),
!
b
.
moveOut
){
e
.
setY
=
d
.
scrollTop
();
var
g
=
d
.
width
()
-
e
.
move
.
outerWidth
()
-
b
.
border
[
0
],
h
=
b
.
border
[
0
]
+
e
.
setY
;
c
<
b
.
border
[
0
]
&&
(
c
=
b
.
border
[
0
]),
c
>
g
&&
(
c
=
g
),
h
>
f
&&
(
f
=
h
),
f
>
d
.
height
()
-
e
.
move
.
outerHeight
()
-
b
.
border
[
0
]
+
e
.
setY
&&
(
f
=
d
.
height
()
-
e
.
move
.
outerHeight
()
-
b
.
border
[
0
]
+
e
.
setY
)}
e
.
move
.
css
({
left
:
c
,
top
:
f
}),
b
.
moveType
&&
e
.
moveLayer
(),
c
=
null
,
f
=
null
,
g
=
null
,
h
=
null
}}).
mouseup
(
function
(){
try
{
e
.
ismove
&&
(
e
.
moveLayer
(),
e
.
move
.
remove
()),
e
.
ismove
=!
1
}
catch
(
a
){
e
.
ismove
=!
1
}
b
.
moveEnd
&&
b
.
moveEnd
()})},
h
.
pt
.
autoclose
=
function
(){
var
a
=
this
,
b
=
a
.
config
.
time
,
c
=
function
(){
b
--
,
0
===
b
&&
(
layer
.
close
(
a
.
index
),
clearInterval
(
a
.
autotime
))};
a
.
autotime
=
setInterval
(
c
,
1
e3
)},
f
.
config
=
{
end
:{}},
h
.
pt
.
callback
=
function
(){
var
a
=
this
,
b
=
a
.
layerE
,
d
=
a
.
config
,
e
=
d
.
dialog
;
a
.
openLayer
(),
a
.
config
.
success
(
b
),
layer
.
ie6
&&
a
.
IE6
(
b
),
b
.
find
(
".xubox_close"
).
on
(
"click"
,
function
(){
d
.
close
(
a
.
index
),
layer
.
close
(
a
.
index
)}),
b
.
find
(
".xubox_yes"
).
on
(
"click"
,
function
(){
d
.
yes
?
d
.
yes
(
a
.
index
):
e
.
yes
(
a
.
index
)}),
b
.
find
(
".xubox_no"
).
on
(
"click"
,
function
(){
d
.
no
?
d
.
no
(
a
.
index
):
e
.
no
(
a
.
index
),
layer
.
close
(
a
.
index
)}),
a
.
config
.
shadeClose
&&
c
(
"#xubox_shade"
+
a
.
index
).
on
(
"click"
,
function
(){
layer
.
close
(
a
.
index
)}),
b
.
find
(
".xubox_min"
).
on
(
"click"
,
function
(){
layer
.
min
(
a
.
index
,
d
),
d
.
min
&&
d
.
min
(
b
)}),
b
.
find
(
".xubox_max"
).
on
(
"click"
,
function
(){
c
(
this
).
hasClass
(
"xubox_maxmin"
)?(
layer
.
restore
(
a
.
index
),
d
.
restore
&&
d
.
restore
(
b
)):(
layer
.
full
(
a
.
index
,
d
),
d
.
full
&&
d
.
full
(
b
))}),
f
.
config
.
end
[
a
.
index
]
=
d
.
end
},
f
.
reselect
=
function
(){
c
.
each
(
c
(
"select"
),
function
(){
var
a
=
c
(
this
);
a
.
parents
(
"."
+
g
[
0
])[
0
]
||
1
==
a
.
attr
(
"layer"
)
&&
c
(
"."
+
g
[
0
]).
length
<
1
&&
a
.
removeAttr
(
"layer"
).
show
(),
a
=
null
})},
h
.
pt
.
IE6
=
function
(
a
){
var
b
=
this
,
e
=
a
.
offset
().
top
;
if
(
b
.
config
.
fix
)
var
f
=
function
(){
a
.
css
({
top
:
d
.
scrollTop
()
+
e
})};
else
var
f
=
function
(){
a
.
css
({
top
:
e
})};
f
(),
d
.
scroll
(
f
),
c
.
each
(
c
(
"select"
),
function
(){
var
a
=
c
(
this
);
a
.
parents
(
"."
+
g
[
0
])[
0
]
||
"none"
==
a
.
css
(
"display"
)
||
a
.
attr
({
layer
:
"1"
}).
hide
(),
a
=
null
})},
h
.
pt
.
openLayer
=
function
(){{
var
a
=
this
;
a
.
layerE
}
layer
.
autoArea
=
function
(
b
){
return
a
.
autoArea
(
b
)},
layer
.
shift
=
function
(
b
,
c
,
d
){
a
.
shift
(
b
,
c
,
d
)},
layer
.
setMove
=
function
(){
return
a
.
move
()},
layer
.
zIndex
=
a
.
config
.
zIndex
,
layer
.
setTop
=
function
(
a
){
var
b
=
function
(){
layer
.
zIndex
++
,
a
.
css
(
"z-index"
,
layer
.
zIndex
+
1
)};
return
layer
.
zIndex
=
parseInt
(
a
[
0
].
style
.
zIndex
),
a
.
on
(
"mousedown"
,
b
),
layer
.
zIndex
}},
f
.
isauto
=
function
(
a
,
b
,
c
){
"auto"
===
b
.
area
[
0
]
&&
(
b
.
area
[
0
]
=
a
.
outerWidth
()),
"auto"
===
b
.
area
[
1
]
&&
(
b
.
area
[
1
]
=
a
.
outerHeight
()),
a
.
attr
({
area
:
b
.
area
+
","
+
c
}),
a
.
find
(
".xubox_max"
).
addClass
(
"xubox_maxmin"
)},
f
.
rescollbar
=
function
(
a
){
g
.
html
.
attr
(
"layer-full"
)
==
a
&&
(
g
.
html
[
0
].
style
.
removeProperty
?
g
.
html
[
0
].
style
.
removeProperty
(
"overflow"
):
g
.
html
[
0
].
style
.
removeAttribute
(
"overflow"
),
g
.
html
.
removeAttr
(
"layer-full"
))},
layer
.
getIndex
=
function
(
a
){
return
c
(
a
).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
)},
layer
.
getChildFrame
=
function
(
a
,
b
){
return
b
=
b
||
c
(
"."
+
g
[
1
]).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
),
c
(
"#"
+
g
[
0
]
+
b
).
find
(
"."
+
g
[
1
]).
contents
().
find
(
a
)},
layer
.
getFrameIndex
=
function
(
a
){
return
c
(
a
?
"#"
+
a
:
"."
+
g
[
1
]).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
)},
layer
.
iframeAuto
=
function
(
a
){
a
=
a
||
c
(
"."
+
g
[
1
]).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
);
var
b
=
layer
.
getChildFrame
(
"body"
,
a
).
outerHeight
(),
d
=
c
(
"#"
+
g
[
0
]
+
a
),
e
=
d
.
find
(
g
[
2
]),
f
=
0
;
e
&&
(
f
=
e
.
height
()),
d
.
css
({
height
:
b
+
f
});
var
h
=-
parseInt
(
c
(
"#xubox_border"
+
a
).
css
(
"top"
));
c
(
"#xubox_border"
+
a
).
css
({
height
:
b
+
2
*
h
+
f
}),
c
(
"#"
+
g
[
1
]
+
a
).
css
({
height
:
b
})},
layer
.
iframeSrc
=
function
(
a
,
b
){
c
(
"#"
+
g
[
0
]
+
a
).
find
(
"iframe"
).
attr
(
"src"
,
b
)},
layer
.
area
=
function
(
a
,
b
){
var
d
=
[
c
(
"#"
+
g
[
0
]
+
a
),
c
(
"#xubox_border"
+
a
)],
e
=
d
[
0
].
attr
(
"type"
),
h
=
d
[
0
].
find
(
g
[
5
]),
i
=
d
[
0
].
find
(
g
[
2
]);
if
(
e
===
f
.
type
[
1
]
||
e
===
f
.
type
[
2
]){
if
(
d
[
0
].
css
(
b
),
h
.
css
({
width
:
b
.
width
,
height
:
b
.
height
}),
e
===
f
.
type
[
2
]){
var
j
=
d
[
0
].
find
(
"iframe"
);
j
.
css
({
width
:
b
.
width
,
height
:
i
?
b
.
height
-
i
.
innerHeight
():
b
.
height
})}
"0px"
!==
d
[
0
].
css
(
"margin-left"
)
&&
(
b
.
hasOwnProperty
(
"top"
)
&&
d
[
0
].
css
({
top
:
b
.
top
-
(
d
[
1
][
0
]?
parseFloat
(
d
[
1
].
css
(
"top"
)):
0
)}),
b
.
hasOwnProperty
(
"left"
)
&&
d
[
0
].
css
({
left
:
b
.
left
+
d
[
0
].
outerWidth
()
/
2
-
(
d
[
1
][
0
]?
parseFloat
(
d
[
1
].
css
(
"left"
)):
0
)}),
d
[
0
].
css
({
marginLeft
:
-
d
[
0
].
outerWidth
()
/
2
})),
d
[
1
][
0
]
&&
d
[
1
].
css
({
width
:
parseFloat
(
b
.
width
)
-
2
*
parseFloat
(
d
[
1
].
css
(
"left"
)),
height
:
parseFloat
(
b
.
height
)
-
2
*
parseFloat
(
d
[
1
].
css
(
"top"
))})}},
layer
.
min
=
function
(
a
,
b
){
var
d
=
c
(
"#"
+
g
[
0
]
+
a
),
e
=
[
d
.
position
().
top
,
d
.
position
().
left
+
parseFloat
(
d
.
css
(
"margin-left"
))];
f
.
isauto
(
d
,
b
,
e
),
layer
.
area
(
a
,{
width
:
180
,
height
:
35
}),
d
.
find
(
".xubox_min"
).
hide
(),
"page"
===
d
.
attr
(
"type"
)
&&
d
.
find
(
g
[
4
]).
hide
(),
f
.
rescollbar
(
a
)},
layer
.
restore
=
function
(
a
){{
var
b
=
c
(
"#"
+
g
[
0
]
+
a
),
d
=
b
.
attr
(
"area"
).
split
(
","
);
b
.
attr
(
"type"
)}
layer
.
area
(
a
,{
width
:
parseFloat
(
d
[
0
]),
height
:
parseFloat
(
d
[
1
]),
top
:
parseFloat
(
d
[
2
]),
left
:
parseFloat
(
d
[
3
])}),
b
.
find
(
".xubox_max"
).
removeClass
(
"xubox_maxmin"
),
b
.
find
(
".xubox_min"
).
show
(),
"page"
===
b
.
attr
(
"type"
)
&&
b
.
find
(
g
[
4
]).
show
(),
f
.
rescollbar
(
a
)},
layer
.
full
=
function
(
a
,
b
){
var
e
,
h
=
c
(
"#"
+
g
[
0
]
+
a
),
i
=
2
*
b
.
border
[
0
]
||
6
,
j
=
[
h
.
position
().
top
,
h
.
position
().
left
+
parseFloat
(
h
.
css
(
"margin-left"
))];
f
.
isauto
(
h
,
b
,
j
),
g
.
html
.
attr
(
"layer-full"
)
||
g
.
html
.
css
(
"overflow"
,
"hidden"
).
attr
(
"layer-full"
,
a
),
clearTimeout
(
e
),
e
=
setTimeout
(
function
(){
layer
.
area
(
a
,{
top
:
"fixed"
===
h
.
css
(
"position"
)?
0
:
d
.
scrollTop
(),
left
:
"fixed"
===
h
.
css
(
"position"
)?
0
:
d
.
scrollLeft
(),
width
:
d
.
width
()
-
i
,
height
:
d
.
height
()
-
i
})},
100
)},
layer
.
title
=
function
(
a
,
b
){
var
d
=
c
(
"#"
+
g
[
0
]
+
(
b
||
layer
.
index
)).
find
(
".xubox_title>em"
);
d
.
html
(
a
)},
layer
.
close
=
function
(
a
){
var
b
=
c
(
"#"
+
g
[
0
]
+
a
),
d
=
b
.
attr
(
"type"
),
e
=
c
(
"#xubox_moves, #xubox_shade"
+
a
);
if
(
b
[
0
]){
if
(
d
==
f
.
type
[
1
])
if
(
b
.
find
(
".xuboxPageHtml"
)[
0
])
b
[
0
].
innerHTML
=
""
,
b
.
remove
();
else
{
b
.
find
(
".xubox_setwin,.xubox_close,.xubox_botton,.xubox_title,.xubox_border"
).
remove
();
for
(
var
h
=
0
;
3
>
h
;
h
++
)
b
.
find
(
".layer_pageContent"
).
unwrap
().
hide
()}
else
b
[
0
].
innerHTML
=
""
,
b
.
remove
();
e
.
remove
(),
layer
.
ie6
&&
f
.
reselect
(),
f
.
rescollbar
(
a
),
"function"
==
typeof
f
.
config
.
end
[
a
]
&&
f
.
config
.
end
[
a
](),
delete
f
.
config
.
end
[
a
]}},
layer
.
closeLoad
=
function
(){
layer
.
close
(
c
(
".xubox_loading"
).
parents
(
"."
+
g
[
0
]).
attr
(
"times"
))},
layer
.
closeTips
=
function
(){
layer
.
closeAll
(
"tips"
)},
layer
.
closeAll
=
function
(
a
){
c
.
each
(
c
(
"."
+
g
[
0
]),
function
(){
var
b
=
c
(
this
),
d
=
a
?
b
.
attr
(
"type"
)
===
a
:
1
;
d
&&
layer
.
close
(
b
.
attr
(
"times"
)),
d
=
null
})},
f
.
run
=
function
(){
c
=
jQuery
,
d
=
c
(
a
),
g
.
html
=
c
(
"html"
),
layer
.
use
(
"skin/layer.css"
),
c
.
layer
=
function
(
a
){
var
b
=
new
h
(
a
);
return
b
.
index
},(
new
Image
).
src
=
layer
.
path
+
"skin/default/xubox_ico0.png"
},
"function"
==
typeof
define
?
define
(
function
(){
return
f
.
run
(),
layer
}):
f
.
run
()}(
window
);
\ No newline at end of file
static/js/layer/skin/layer.css
View file @
e2ac212f
<<<<<<<
HEAD
/**
/**
@Name: layer's style
@Name: layer's style
...
@@ -82,88 +81,3 @@
...
@@ -82,88 +81,3 @@
=======
/**
@Name: layer's style
@Date: 2012.09.15
@Author: 贤心
@blog: sentsin.com
**/
*
html
{
background-image
:
url(about:blank)
;
background-attachment
:
fixed
;}
/** common **/
.xubox_shade
,
.xubox_layer
{
position
:
fixed
;
_position
:
absolute
;}
.xubox_shade
{
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
100%
;
_height
:
expression
(
document
.
body
.
offsetHeight
+
"px"
);}
.xubox_layer
{
top
:
150px
;
left
:
50%
;
height
:
auto
;
width
:
310px
;
margin-left
:
-155px
;}
.xubox_border
,
.xubox_title
,
.xubox_title
i
,
.xubox_page
,
.xubox_iframe
,
.xubox_title
em
,
.xubox_close
,
.xubox_msgico
,
.xubox_moves
{
position
:
absolute
;}
.xubox_border
{
border-radius
:
5px
;}
.xubox_title
{
left
:
0
;
top
:
0
;}
.xubox_main
{
position
:
relative
;
height
:
100%
;
_float
:
left
;}
.xubox_page
{
top
:
0
;
left
:
0
;}
.xubox_load
{
background
:
url(default/xubox_loading0.gif)
#fff
center
center
no-repeat
;}
.xubox_loading
{
display
:
block
;
float
:
left
;
text-decoration
:
none
;
color
:
#FFF
;
_float
:
none
;
}
.xulayer_png32
{
background
:
url(default/xubox_ico0.png)
no-repeat
;}
.xubox_moves
{
border
:
3px
solid
#666
;
cursor
:
move
;
background-color
:
rgba
(
255
,
255
,
255
,
.3
);
background-color
:
#fff
\
9
;
filter
:
alpha
(
opacity
=
50
);}
.xubox_msgico
{
width
:
32px
;
height
:
32px
;
top
:
52px
;
left
:
15px
;
background
:
url(default/xubox_ico0.png)
no-repeat
;}
.xubox_text
{
padding-left
:
55px
;
float
:
left
;
line-height
:
25px
;
word-break
:
break-all
;
padding-right
:
20px
;
overflow
:
hidden
;
font-size
:
14px
;}
.xubox_msgtype0
{
background-position
:
-91px
-38px
;}
.xubox_msgtype1
{
background-position
:
-128px
-38px
}
.xubox_msgtype2
{
background-position
:
-163px
-38px
;}
.xubox_msgtype3
{
background-position
:
-91px
-75px
;}
.xubox_msgtype4
{
background-position
:
-163px
-75px
;}
.xubox_msgtype5
{
background-position
:
-163px
-112px
;}
.xubox_msgtype6
{
background-position
:
-163px
-148px
;}
.xubox_msgtype7
{
background-position
:
-128px
-75px
;}
.xubox_msgtype8
{
background-position
:
-91px
-6px
;}
.xubox_msgtype9
{
background-position
:
-129px
-6px
;}
.xubox_msgtype10
{
background-position
:
-163px
-6px
;}
.xubox_msgtype11
{
background-position
:
-206px
-6px
;}
.xubox_msgtype12
{
background-position
:
-206px
-44px
;}
.xubox_msgtype13
{
background-position
:
-206px
-81px
;}
.xubox_msgtype14
{
background-position
:
-206px
-122px
;}
.xubox_msgtype15
{
background-position
:
-206px
-157px
;}
.xubox_loading_0
{
width
:
60px
;
height
:
24px
;
background
:
url(default/xubox_loading0.gif)
no-repeat
;}
.xubox_loading_1
{
width
:
37px
;
height
:
37px
;
background
:
url(default/xubox_loading1.gif)
no-repeat
;}
.xubox_loading_2
,
.xubox_msgtype16
{
width
:
32px
;
height
:
32px
;
background
:
url(default/xubox_loading2.gif)
no-repeat
;}
.xubox_loading_3
{
width
:
126px
;
height
:
22px
;
background
:
url(default/xubox_loading3.gif)
no-repeat
;}
.xubox_setwin
{
position
:
absolute
;
right
:
10px
;
*
right
:
0
;
top
:
10px
;
font-size
:
0
;}
.xubox_setwin
a
{
position
:
relative
;
display
:
inline-block
;
*
display
:
inline
;
*
zoom
:
1
;
vertical-align
:
top
;
width
:
14px
;
height
:
14px
;
margin-left
:
10px
;
font-size
:
12px
;
_overflow
:
hidden
;}
.xubox_setwin
.xubox_min
cite
{
position
:
absolute
;
width
:
14px
;
height
:
2px
;
left
:
0
;
top
:
50%
;
margin-top
:
-1px
;
background-color
:
#919191
;
cursor
:
pointer
;
_overflow
:
hidden
;}
.xubox_setwin
.xubox_min
:hover
cite
{
background-color
:
#2D93CA
;
}
.xubox_setwin
.xubox_max
{
background-position
:
-6px
-189px
;}
.xubox_setwin
.xubox_max
:hover
{
background-position
:
-6px
-206px
;}
.xubox_setwin
.xubox_maxmin
{
background-position
:
-29px
-189px
;}
.xubox_setwin
.xubox_maxmin
:hover
{
background-position
:
-29px
-206px
;}
.xubox_setwin
.xubox_close0
{
width
:
14px
;
height
:
14px
;
background-position
:
-31px
-7px
;
cursor
:
pointer
;}
.xubox_setwin
.xubox_close0
:hover
{
background-position
:
-51px
-7px
;}
.xubox_setwin
.xubox_close1
{
position
:
absolute
;
right
:
-28px
;
top
:
-28px
;
width
:
30px
;
height
:
30px
;
margin-left
:
0
;
background-position
:
-60px
-195px
;
*
right
:
-18px
;
_right
:
-15px
;
_top
:
-23px
;
_width
:
14px
;
_height
:
14px
;
_background-position
:
-31px
-7px
;}
.xubox_setwin
.xubox_close1
:hover
{
background-position
:
-91px
-195px
;
_background-position
:
-51px
-7px
;}
.xubox_title
{
width
:
100%
;
height
:
35px
;
line-height
:
35px
;
border-bottom
:
1px
solid
#D5D5D5
;
background
:
url(default/xubox_title0.png)
#EBEBEB
repeat-x
;
font-size
:
14px
;
color
:
#333
;}
.xubox_title
em
{
height
:
20px
;
line-height
:
20px
;
width
:
60%
;
top
:
7px
;
left
:
10px
;
font-style
:
normal
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
white-space
:
nowrap
;}
.xubox_botton
a
{
position
:
absolute
;
bottom
:
10px
;
left
:
50%
;
background
:
url(default/xubox_ico0.png)
repeat
;
text-decoration
:
none
;
color
:
#FFF
;
font-size
:
14px
;
text-align
:
center
;
font-weight
:
bold
;
overflow
:
hidden
;
}
.xubox_botton
a
:hover
{
text-decoration
:
none
;
color
:
#FFF
;
}
.xubox_botton
.xubox_botton1
{
width
:
79px
;
height
:
32px
;
line-height
:
32px
;
margin-left
:
-39px
;
background-position
:
-6px
-34px
;}
.xubox_botton1
:hover
{
background-position
:
-6px
-72px
;}
.xubox_botton
.xubox_botton2
{
margin-left
:
-76px
;
width
:
71px
;
height
:
29px
;
line-height
:
29px
;
background-position
:
-5px
-114px
;}
.xubox_botton2
:hover
{
background-position
:
-5px
-146px
;}
.xubox_botton
.xubox_botton3
{
width
:
71px
;
height
:
29px
;
line-height
:
29px
;
margin-left
:
10px
;
background-position
:
-81px
-114px
;}
.xubox_botton3
:hover
{
background-position
:
-81px
-146px
;}
.xubox_tips
{
position
:
relative
;
line-height
:
20px
;
min-width
:
12px
;
padding
:
3px
30px
3px
10px
;
font-size
:
12px
;
_float
:
left
;
border-radius
:
3px
;
box-shadow
:
1px
1px
3px
rgba
(
0
,
0
,
0
,
.3
);}
.xubox_tips
i
.layerTipsG
{
position
:
absolute
;
width
:
0
;
height
:
0
;
border-width
:
8px
;
border-color
:
transparent
;
border-style
:
dashed
;
*
overflow
:
hidden
;}
.xubox_tips
i
.layerTipsT
,
.xubox_tips
i
.layerTipsB
{
left
:
5px
;
border-right-style
:
solid
;}
.xubox_tips
i
.layerTipsT
{
bottom
:
-8px
;}
.xubox_tips
i
.layerTipsB
{
top
:
-8px
;}
.xubox_tips
i
.layerTipsR
,
.xubox_tips
i
.layerTipsL
{
top
:
1px
;
border-bottom-style
:
solid
;}
.xubox_tips
i
.layerTipsR
{
left
:
-8px
;}
.xubox_tips
i
.layerTipsL
{
right
:
-8px
;}
>>>>>>>
beta
static/js/layer/skin/layer.ext.css
View file @
e2ac212f
<<<<<<<
HEAD
/**
/**
@Name: layer拓展样式
@Name: layer拓展样式
...
@@ -44,50 +43,3 @@
...
@@ -44,50 +43,3 @@
.xubox_imgtit
em
{
padding-left
:
10px
;}
.xubox_imgtit
em
{
padding-left
:
10px
;}
=======
/**
@Name: layer拓展样式
@Date: 2012.12.13
@Author: 贤心
@blog: sentsin.com
**/
.xubox_iconext
{
background
:
url(default/icon_ext.png)
no-repeat
;}
/* prompt模式 */
.xubox_layer
.xubox_form
{
width
:
240px
;
height
:
30px
;
line-height
:
30px
;
padding
:
0
5px
;
border
:
1px
solid
#ccc
;
background
:
url(default/textbg.png)
#fff
repeat-x
;
color
:
#333
;}
.xubox_layer
.xubox_formArea
{
width
:
300px
;
height
:
100px
;
line-height
:
20px
;}
/* tab模式 */
.xubox_layer
.xubox_tab
{
position
:
relative
;
background-color
:
#fff
;
box-shadow
:
1px
1px
50px
rgba
(
0
,
0
,
0
,
.4
)}
.xubox_layer
.xubox_tabmove
{
position
:
absolute
;
width
:
600px
;
height
:
30px
;
top
:
0
;
left
:
0
;}
.xubox_layer
.xubox_tabtit
{
display
:
block
;
height
:
34px
;
border-bottom
:
1px
solid
#ccc
;
background-color
:
#eee
;}
.xubox_layer
.xubox_tabtit
span
{
position
:
relative
;
float
:
left
;
width
:
120px
;
height
:
34px
;
line-height
:
34px
;
text-align
:
center
;
cursor
:
default
;}
.xubox_layer
.xubox_tabtit
span
.xubox_tabnow
{
left
:
-1px
;
_top
:
1px
;
height
:
35px
;
border-left
:
1px
solid
#ccc
;
border-right
:
1px
solid
#ccc
;
background-color
:
#fff
;
z-index
:
10
;}
.xubox_layer
.xubox_tab_main
{
line-height
:
24px
;
clear
:
both
;}
.xubox_layer
.xubox_tab_main
.xubox_tabli
{
display
:
none
;}
.xubox_layer
.xubox_tab_main
.xubox_tabli.xubox_tab_layer
{
display
:
block
;}
.xubox_layer
.xubox_tabclose
{
position
:
absolute
;
right
:
10px
;
top
:
5px
;
cursor
:
pointer
;}
/* photo模式 */
.xubox_bigimg
,
.xubox_intro
{
height
:
300px
}
.xubox_bigimg
{
position
:
relative
;
display
:
block
;
width
:
600px
;
text-align
:
center
;
background
:
url(default/xubox_loading1.gif)
center
center
no-repeat
#000
;
overflow
:
hidden
;
}
.xubox_bigimg
img
{
position
:
relative
;
display
:
inline-block
;
visibility
:
hidden
;}
.xubox_intro
{
position
:
absolute
;
right
:
-315px
;
top
:
0
;
width
:
300px
;
background-color
:
#fff
;
overflow-x
:
hidden
;
overflow-y
:
auto
;}
.xubox_imgsee
{
display
:
none
;}
.xubox_prev
,
.xubox_next
{
position
:
absolute
;
top
:
50%
;
width
:
27px
;
_width
:
44px
;
height
:
44px
;
margin-top
:
-22px
;
outline
:
none
;
blr
:
expression
(
this
.
onFocus
=
this
.
blur
());}
.xubox_prev
{
left
:
10px
;
background-position
:
-5px
-5px
;
_background-position
:
-70px
-5px
;}
.xubox_prev
:hover
{
background-position
:
-33px
-5px
;
_background-position
:
-120px
-5px
;}
.xubox_next
{
right
:
10px
;
_right
:
8px
;
background-position
:
-5px
-50px
;
_background-position
:
-70px
-50px
;}
.xubox_next
:hover
{
background-position
:
-33px
-50px
;
_background-position
:
-120px
-50px
;}
.xubox_imgbar
{
position
:
absolute
;
left
:
0
;
bottom
:
0
;
width
:
100%
;
height
:
32px
;
line-height
:
32px
;
background-color
:
rgba
(
0
,
0
,
0
,
.8
);
background-color
:
#000
\
9
;
filter
:
Alpha
(
opacity
=
80
);
color
:
#fff
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
white-space
:
nowrap
;
font-size
:
0
;}
.xubox_imgtit
{
/*position:absolute; left:20px;*/
}
.xubox_imgtit
*
{
display
:
inline-block
;
*
display
:
inline
;
*
zoom
:
1
;
vertical-align
:
top
;
font-size
:
12px
;}
.xubox_imgtit
a
{
max-width
:
65%
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
white-space
:
nowrap
;
color
:
#fff
;}
.xubox_imgtit
a
:hover
{
color
:
#fff
;
text-decoration
:
underline
;}
.xubox_imgtit
em
{
padding-left
:
10px
;}
>>>>>>>
beta
templates/jlog/log_offline.html
View file @
e2ac212f
...
@@ -128,17 +128,6 @@
...
@@ -128,17 +128,6 @@
var
div_username
=
' 用户名: '
+
'<span class="text-info">'
+
username
+
''
+
'</span>'
;
var
div_username
=
' 用户名: '
+
'<span class="text-info">'
+
username
+
''
+
'</span>'
;
var
div_ip
=
' 主机: '
+
'<span class="text-info">'
+
ip
+
'</span>'
;
var
div_ip
=
' 主机: '
+
'<span class="text-info">'
+
ip
+
'</span>'
;
var
div_time
=
' 开始时间: '
+
'<span class="text-info">'
+
start_time
+
'</span>'
+
' 结束时间: '
+
'<span class="text-info">'
+
end_time
+
'</span'
var
div_time
=
' 开始时间: '
+
'<span class="text-info">'
+
start_time
+
'</span>'
+
' 结束时间: '
+
'<span class="text-info">'
+
end_time
+
'</span'
<<<<<<<
HEAD
var
title
=
'JumpServer命令统计 '
+
div_username
+
div_ip
+
div_time
$
.
ajax
({
url
:
url
,
success
:
function
(
data
){
BootstrapDialog
.
show
({
title
:
title
,
message
:
data
});
}});
return
false
;
})
globalConfig
=
{
SOCKET_HOST
:
"{{ web_socket_host }}"
}
=======
var
title
=
'JumpServer命令统计 '
+
div_username
+
div_ip
+
div_time
;
var
title
=
'JumpServer命令统计 '
+
div_username
+
div_ip
+
div_time
;
$
.
ajax
({
url
:
url
,
success
:
function
(
data
){
$
.
ajax
({
url
:
url
,
success
:
function
(
data
){
var
tag
=
$
(
'<div style="height: 500px;overflow: auto;background-color: rgba(0, 0, 0, 0);"></div>'
).
html
(
data
.
replace
(
/
\n
/g
,
"<br />"
));
var
tag
=
$
(
'<div style="height: 500px;overflow: auto;background-color: rgba(0, 0, 0, 0);"></div>'
).
html
(
data
.
replace
(
/
\n
/g
,
"<br />"
));
...
@@ -149,7 +138,6 @@
...
@@ -149,7 +138,6 @@
globalConfig
=
{
globalConfig
=
{
SOCKET_HOST
:
"{{ web_socket_host }}"
SOCKET_HOST
:
"{{ web_socket_host }}"
};
};
>>>>>>>
beta
function
log_search
(){
function
log_search
(){
$
.
ajax
({
$
.
ajax
({
...
...
templates/jlog/log_online.html
View file @
e2ac212f
...
@@ -136,19 +136,11 @@
...
@@ -136,19 +136,11 @@
BootstrapDialog
.
show
({
message
:
function
(){
BootstrapDialog
.
show
({
message
:
function
(){
var
option
,
exsit_message
;
var
option
,
exsit_message
;
var
escapeString
=
function
(
html
){
var
escapeString
=
function
(
html
){
<<<<<<<
HEAD
var
elem
=
document
.
createElement
(
'div'
)
var
txt
=
document
.
createTextNode
(
html
)
elem
.
appendChild
(
txt
)
return
elem
.
innerHTML
;
}
=======
var
elem
=
document
.
createElement
(
'div'
);
var
elem
=
document
.
createElement
(
'div'
);
var
txt
=
document
.
createTextNode
(
html
);
var
txt
=
document
.
createTextNode
(
html
);
elem
.
appendChild
(
txt
);
elem
.
appendChild
(
txt
);
return
elem
.
innerHTML
;
return
elem
.
innerHTML
;
};
};
>>>>>>>
beta
var
tag
=
$
(
'<div id="log" style="height: 500px;overflow: auto;background-color: rgba(0, 0, 0, 0);"></div>'
);
var
tag
=
$
(
'<div id="log" style="height: 500px;overflow: auto;background-color: rgba(0, 0, 0, 0);"></div>'
);
//告诉服务器端有用户登录
//告诉服务器端有用户登录
socket
.
emit
(
'login'
,
{
userid
:
message
.
id
,
filename
:
message
.
filename
});
socket
.
emit
(
'login'
,
{
userid
:
message
.
id
,
filename
:
message
.
filename
});
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment