Commit 83564d06 by 石头

提交admin

1 parent 6ba2354e
Showing 408 changed files with 1468 additions and 101 deletions
...@@ -73,7 +73,16 @@ ...@@ -73,7 +73,16 @@
<groupId>com.fasterxml.jackson.datatype</groupId> <groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId> <artifactId>jackson-datatype-jsr310</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal-weixin</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>2.2</version>
</dependency>
</dependencies> </dependencies>
......
package com.dookay.cihai.wechat; package com.dookay.cihai.wechat;
import com.dookay.cihai.core.CiHaiCoreApplication; import com.dookay.cihai.core.CihaiCoreApplication;
import com.dookay.coral.common.core.CoralCommonCoreMarker; import com.dookay.coral.common.core.CoralCommonCoreMarker;
import com.dookay.coral.common.web.CoralCommonWebMarker; import com.dookay.coral.common.web.CoralCommonWebMarker;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
...@@ -22,14 +22,14 @@ import org.springframework.cache.annotation.EnableCaching; ...@@ -22,14 +22,14 @@ import org.springframework.cache.annotation.EnableCaching;
scanBasePackageClasses = { scanBasePackageClasses = {
CoralCommonCoreMarker.class, CoralCommonCoreMarker.class,
CoralCommonWebMarker.class, CoralCommonWebMarker.class,
CiHaiCoreApplication.class, CihaiCoreApplication.class,
CihaiJspApplication.class, CihaiJspApplication.class,
}) })
@MapperScan(basePackageClasses = CiHaiCoreApplication.class) @MapperScan(basePackageClasses = CihaiCoreApplication.class)
@ServletComponentScan(basePackageClasses = { @ServletComponentScan(basePackageClasses = {
CoralCommonWebMarker.class, CoralCommonWebMarker.class,
CihaiJspApplication.class, CihaiJspApplication.class,
CiHaiCoreApplication.class CihaiCoreApplication.class
}) })
@EnableCaching @EnableCaching
public class CihaiJspApplication extends SpringBootServletInitializer { public class CihaiJspApplication extends SpringBootServletInitializer {
......
package com.dookay.cihai.wechat.config;
import com.dookay.cihai.wechat.interceptor.WechatMsgInterceptor;
import com.jfinal.weixin.sdk.api.ApiConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* Web config
*
* @author houkun
*/
@Configuration
public class JspMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private WechatConfig wechatConfig;
@Override
public void addInterceptors(InterceptorRegistry registry) {
WechatMsgInterceptor interceptor = new WechatMsgInterceptor();
interceptor.setApiConfig(new ApiConfig(wechatConfig.getToken(), wechatConfig.getAppId(), wechatConfig.getAppSecret()));
registry.addInterceptor(interceptor).addPathPatterns("/wechat/*");
super.addInterceptors(registry);
}
}
package com.dookay.cihai.wechat.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties("coral.wechat.WechatConfig")
@Data
@Component
public class WechatConfig {
private String token = null;
private String appId = null;
private String appSecret = null;
private String encodingAesKey = null;
private boolean messageEncrypt = false; // 消息加密与否
}
...@@ -14,7 +14,9 @@ ...@@ -14,7 +14,9 @@
package com.dookay.cihai.wechat.controller; package com.dookay.cihai.wechat.controller;
import com.dookay.cihai.core.word.service.IWordService;
import com.dookay.coral.common.web.controller.BaseController; import com.dookay.coral.common.web.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
...@@ -28,6 +30,9 @@ import org.springframework.web.servlet.ModelAndView; ...@@ -28,6 +30,9 @@ import org.springframework.web.servlet.ModelAndView;
@RequestMapping(value = "/") @RequestMapping(value = "/")
public class HomeController extends BaseController { public class HomeController extends BaseController {
@Autowired
private IWordService wordService;
/** /**
* @author 石磊 * @author 石磊
* @date 2017/12/6 * @date 2017/12/6
...@@ -38,4 +43,16 @@ public class HomeController extends BaseController { ...@@ -38,4 +43,16 @@ public class HomeController extends BaseController {
ModelAndView mv = new ModelAndView("portal/home/index"); ModelAndView mv = new ModelAndView("portal/home/index");
return mv; return mv;
} }
/**
* @author 石磊
* @date 2017/12/6
* @description 搜索
*/
@RequestMapping(value="/serach",method = RequestMethod.GET)
public ModelAndView search(String keyword) {
ModelAndView mv = new ModelAndView("");
return mv;
}
} }
/*****************************************
* *
* @dookay.com Internet make it happen *
* ----------- ----------------------- *
* dddd ddddd Internet make it happen *
* o o o Internet make it happen *
* k k k Internet make it happen *
* a a a Internet make it happen *
* yyyy yyyyy Internet make it happen *
* ----------- ----------------------- *
* NO BUG ENJOY LIFE *
* *
****************************************/
package com.dookay.cihai.wechat.controller;
import com.dookay.coral.common.web.controller.BaseController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
/**
* @author 石磊
* @date 2017/12/6
*/
@Controller
@RequestMapping("/wechat")
public class WechatController extends BaseController{
@RequestMapping(value = "/jsConfig", method = RequestMethod.GET)
public ModelAndView jsConfig() {
ModelAndView view = new ModelAndView("include/js_sdk");
return view;
}
}
package com.dookay.cihai.wechat.interceptor;
import com.jfinal.kit.StrKit;
import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.weixin.sdk.kit.SignatureCheckKit;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 微信 Msg 拦截器
* 1:通过 WeChatMsgController.getApiConfig() 得到 ApiConfig
* 对象,并将其绑定到当前线程之上(利用了 ApiConfigKit 中的 ThreadLocal 对象)
* 2:响应开发者中心服务器配置 URL 与 Token 请求
* 3:签名检测
* @author : kezhan
* @since : 2017年1月4日
* @version : v0.0.1
*/
public class WechatMsgInterceptor implements HandlerInterceptor {
private static Logger log = Logger.getLogger(WechatMsgInterceptor.class);
private ApiConfig apiConfig;
public ApiConfig getApiConfig() {
return apiConfig;
}
public void setApiConfig(ApiConfig apiConfig) {
this.apiConfig = apiConfig;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.setHeader("Content-type", "text/html;charset=UTF-8");
ApiConfigKit.setThreadLocalApiConfig(apiConfig);
if (isConfigServerRequest(request)) { // 如果是服务器配置请求,则配置服务器并返回
if (configServer(request, response)) {
ApiConfigKit.removeThreadLocalApiConfig();
return false;
}
if (checkSignature(request, response)) { // 签名检测
return true;
} else {
log.info("签名验证失败,请确定是微信服务器在发送消息过来...");
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
ApiConfigKit.removeThreadLocalApiConfig();// 结束后删除当前线程
}
/**
* **********************以下为签名验证工具包,占位私有不分割**********************
*/
/**
* 是否为开发者中心保存服务器配置的请求
* @param request
* @return
* @author : kezhan
* @since : 2017年1月4日
*/
private boolean isConfigServerRequest(HttpServletRequest request) {
return StrKit.notBlank(request.getParameter("echostr"));
}
/**
* 配置开发者中心微信服务器所需的 url 与 token
* @param request
* @param response
* @return true 为config server 请求,false 正式消息交互请求
* @author : kezhan
* @since : 2017年1月4日
*/
public boolean configServer(HttpServletRequest request, HttpServletResponse response) {
try {
// 通过 echostr 判断请求是否为配置微信服务器回调所需的 url 与 token
String echostr = request.getParameter("echostr");
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
if (SignatureCheckKit.me.checkSignature(signature, timestamp, nonce)) {
response.getWriter().print(echostr);
return true;
} else {
log.error("验证失败:configServer");
return false;
}
} catch (Exception e) {
log.error("验证异常:configServer" + e.getMessage());
return false;
}
}
/**
* 检测签名
* @param request
* @param response
* @return
* @throws Exception
* @author : kezhan
* @since : 2017年1月4日
*/
private boolean checkSignature(HttpServletRequest request, HttpServletResponse response)
throws Exception {
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
if (StrKit.isBlank(signature) || StrKit.isBlank(timestamp) || StrKit.isBlank(nonce)) {
return false;
}
if (SignatureCheckKit.me.checkSignature(signature, timestamp, nonce)) {
return true;
} else {
log.error(
"check signature failure: " + " signature = "
+ request.getParameter("signature") + " timestamp = "
+ request.getParameter("timestamp") + " nonce = "
+ request.getParameter("nonce"));
return false;
}
}
}
...@@ -15,3 +15,16 @@ spring.redis.password=lyd123456 ...@@ -15,3 +15,16 @@ spring.redis.password=lyd123456
# 文件存储 # 文件存储
coral.web.resource.mapping.uploads-inner=/uploads/* coral.web.resource.mapping.uploads-inner=/uploads/*
coral.web.resource.mapping.uploads-mapping=/data/www/uploads/cihai coral.web.resource.mapping.uploads-mapping=/data/www/uploads/cihai
#wechat config
#AppID
coral.wechat.WechatConfig.appId=wx319ed3575ffe9ff8
#AppSecret
coral.wechat.WechatConfig.appSecret=eed9c0728fb20521bb61be4ac6e4e67d
#Token(令牌)
coral.wechat.WechatConfig.token=eGgg3CoOihZQwCf1sr8jU8zmBfx4u5WT
#EncodingAESKey(消息加解密密钥)
coral.wechat.WechatConfig.encodingAESKey=agkC7tsPUoOtbbUyxxcCLVJZVqVOCTeJgxUCXAx87op
# 是否加密
coral.wechat.WechatConfig.messageEncrypt=false
# 微信授权回调地址
\ No newline at end of file \ No newline at end of file
...@@ -3,9 +3,10 @@ ...@@ -3,9 +3,10 @@
<%@ page trimDirectiveWhitespaces="true" %> <%@ page trimDirectiveWhitespaces="true" %>
<%--添加此行消除额外空格--%> <%--添加此行消除额外空格--%>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script src="${ctx}/static/js/vendor.js"></script>
<script src="${ctx}/static/js/routes.js"></script>
<script src="${ctx}/static/js/index.js"></script>
<script src="${ctx}/static/js/backend.js"></script> <script src="${ctx}/static/js/backend.js"></script>
<script src="${ctx}/static/js/validator/jquery.validator.min.js"></script>
<script src="${ctx}/static/js/validator/local/zh-CN.js"></script>
<script src="${ctx}/static/js/layer/layer.js"></script> <script src="${ctx}/static/js/layer/layer.js"></script>
<script> <script>
$(function () { $(function () {
......
...@@ -6,9 +6,12 @@ ...@@ -6,9 +6,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-CN"> <html lang="zh-CN">
<head> <head>
<meta charset="UTF-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="generator" content="www.dookay.com"> <meta name="generator" content="www.dookay.com">
<title>cihai ${param.pageTitle}</title> <title>辞海-${param.pageTitle}</title>
<link rel="stylesheet" href="${ctx}/static/css/vendor.css">
</head> </head>
<body> <body>
<%--
注意:所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
使用方法:
需要调用的地方加入下面的内容
//-----------------------------------------------------------------------------//
//下面为配置的覆盖,应该考虑更优的参数覆盖方式
<script type="text/javascript">
var shareData = {
title: shareTitle,
desc: config.content,
link: shareURL,
imgUrl: shareIMG
};
</script>
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript" src="http://xxxx/js_sdk.jsp"></script>
//-----------------------------------------------------------------------------//
--%>
<%@page import="com.jfinal.kit.PropKit"%>
<%@page import="com.jfinal.weixin.sdk.api.ApiConfigKit"%>
<%@page import="com.jfinal.weixin.sdk.api.ApiConfig"%>
<%@page import="com.jfinal.kit.HashKit"%>
<%@page import="java.util.Map.Entry"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.UUID"%>
<%@page import="java.util.TreeMap"%>
<%@page import="com.jfinal.weixin.sdk.api.JsTicket"%>
<%@page import="com.jfinal.weixin.sdk.api.JsTicketApi.JsApiType"%>
<%@page import="com.jfinal.weixin.sdk.api.JsTicketApi"%>
<%@page import="com.jfinal.kit.StrKit"%>
<%@ page language="java" contentType="application/x-javascript; charset=utf-8" isELIgnored="false"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%--微信环境内展示 --%>
<%
// 1.拼接url(当前网页的URL,不包含#及其后面部分)
String _wxShareUrl = request.getHeader("Referer");
String appId="wx319ed3575ffe9ff8";
if (StrKit.notBlank(_wxShareUrl)) {
_wxShareUrl = _wxShareUrl.split("#")[0];
} else {
return;
}
// 先从参数中获取,获取不到时从配置文件中找
// 方便测试 1.9添加参数&test=true
String isTest = request.getParameter("test");
if (null == isTest || !isTest.equals("true")) {
isTest = "false";
}
String _wxJsApiTicket = "";
try {
JsTicket jsTicket = JsTicketApi.getTicket(JsApiType.jsapi);
_wxJsApiTicket = jsTicket.getTicket();
} finally {
ApiConfigKit.removeThreadLocalApiConfig();
}
Map<String, String> _wxMap = new TreeMap<String, String>();
//noncestr
String _wxNoncestr = UUID.randomUUID().toString().replace("-", "");
//timestamp
String _wxTimestamp = (System.currentTimeMillis() / 1000) + "";
//参数封装
_wxMap.put("noncestr", _wxNoncestr);
_wxMap.put("timestamp", _wxTimestamp );
_wxMap.put("jsapi_ticket", _wxJsApiTicket);
_wxMap.put("url", _wxShareUrl);
// 加密获取signature
StringBuilder _wxBaseString = new StringBuilder();
for (Entry<String, String> param : _wxMap.entrySet()) {
_wxBaseString.append(param.getKey()).append("=").append(param.getValue()).append("&");
}
String _wxSignString = _wxBaseString.substring(0, _wxBaseString.length() - 1);
// signature
String _wxSignature = HashKit.sha1(_wxSignString);
%>
<%--兼容新老版本 --%>
wx.config({
debug: <%=isTest %>,
appId: '<%=appId %>',
timestamp: '<%=_wxTimestamp %>',
nonceStr: '<%=_wxNoncestr %>',
signature: '<%=_wxSignature %>',
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'hideMenuItems',
'showMenuItems',
'hideAllNonBaseMenuItem',
'showAllNonBaseMenuItem',
'translateVoice',
'startRecord',
'stopRecord',
'onRecordEnd',
'playVoice',
'pauseVoice',
'stopVoice',
'uploadVoice',
'downloadVoice',
'chooseImage',
'previewImage',
'uploadImage',
'downloadImage',
'getNetworkType',
'openLocation',
'getLocation',
'hideOptionMenu',
'showOptionMenu',
'closeWindow',
'scanQRCode',
'chooseWXPay',
'openProductSpecificView',
'addCard',
'chooseCard',
'openCard'
]
});
<%
// 测试模式
if (isTest.equals("true")) {
%>
wx.error(function (res) {
alert(res.errMsg);
});
<%
}
%>
<%-- 默认分享数据 --%>
var shareData = typeof(shareData) === 'undefined' ? {
title: '扶妙乐科技',
desc: '扶妙乐科技是致力于打造国内领先水准的超级健身网络平台',
link: '',
imgUrl: ''
} : shareData;
<%--新版微信--%>
wx.ready(function () {
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareTimeline(shareData);
wx.onMenuShareWeibo(shareData);
wx.onMenuShareQQ(shareData);
});
...@@ -2,10 +2,71 @@ ...@@ -2,10 +2,71 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:include page="/WEB-INF/jsp/include/header.jsp"> <jsp:include page="/WEB-INF/jsp/include/header.jsp">
<jsp:param name="pageTitle" value="coral-list"/> <jsp:param name="pageTitle" value="首页"/>
</jsp:include> </jsp:include>
<div class="loading" id="loading">
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="64px" height="64px" viewBox="0 0 128 128" xml:space="preserve">
<g>
<path d="M78.75 16.18V1.56a64.1 64.1 0 0 1 47.7 47.7H111.8a49.98 49.98 0 0 0-33.07-33.08zM16.43 49.25H1.8a64.1 64.1 0 0 1 47.7-47.7V16.2a49.98 49.98 0 0 0-33.07 33.07zm33.07 62.32v14.62A64.1 64.1 0 0 1 1.8 78.5h14.63a49.98 49.98 0 0 0 33.07 33.07zm62.32-33.07h14.62a64.1 64.1 0 0 1-47.7 47.7v-14.63a49.98 49.98 0 0 0 33.08-33.07z"
fill="#494949" fill-opacity="1" />
<animateTransform attributeName="transform" type="rotate" from="0 64 64" to="-90 64 64" dur="400ms" repeatCount="indefinite"></animateTransform>
</g>
</svg>
</div>
<div id="app">
<div class="statusbar"></div>
<div class="view view-main view-init ios-edges" data-url="/">
<div class="page bg-blank">
<div class="toolbar tabbar tabbar-labels toolbar-index">
<div class="toolbar-inner">
<a class="tab-link notiy-circle" href="#">
<span class="icon icon-word"></span>
</a>
<a class="tab-link" href="#">
<span class="icon icon-class"></span>
</a>
<a class="tab-link" href="#">
<span class="icon icon-my"></span>
</a>
</div>
</div>
<div class="page-content">
<h1 class="brand-index">辞海</h1>
<div class="search-area search-index">
<div class="search-area-brand">
<img src="${ctx}/static/images/logo-zhiyun.png">
</div>
<form class="search-area-inner">
<input class="form-control" type="text" placeholder="1,786,069 个语词">
<a class="search-area-voice" type="button">
<span class="icon icon-microphone"></span>
</a>
<button class="search-area-image" type="button">
<span class="icon icon-camera"></span>
</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script src="/wechat/jsConfig"></script>
<jsp:include page="/WEB-INF/jsp/include/footer.jsp"/>
<script>
$(function () {
<h1>index</h1>
<jsp:include page="/WEB-INF/jsp/include/footer.jsp"/> function touchstart(){
alert('d');
e.preventDefault();
}
$('#voice').click(function (e) {
e.preventDefault();
})
})
</script>
\ No newline at end of file \ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title>index</title>
<link rel="stylesheet" href="css/vendor.css">
</head>
<body>
<div class="loading" id="loading">
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="64px" height="64px" viewBox="0 0 128 128" xml:space="preserve">
<g>
<path d="M78.75 16.18V1.56a64.1 64.1 0 0 1 47.7 47.7H111.8a49.98 49.98 0 0 0-33.07-33.08zM16.43 49.25H1.8a64.1 64.1 0 0 1 47.7-47.7V16.2a49.98 49.98 0 0 0-33.07 33.07zm33.07 62.32v14.62A64.1 64.1 0 0 1 1.8 78.5h14.63a49.98 49.98 0 0 0 33.07 33.07zm62.32-33.07h14.62a64.1 64.1 0 0 1-47.7 47.7v-14.63a49.98 49.98 0 0 0 33.08-33.07z"
fill="#494949" fill-opacity="1" />
<animateTransform attributeName="transform" type="rotate" from="0 64 64" to="-90 64 64" dur="400ms" repeatCount="indefinite"></animateTransform>
</g>
</svg>
</div>
<div id="app">
<div class="statusbar"></div>
<div class="view view-main view-init ios-edges" data-url="/">
<div class="page bg-blank">
<div class="toolbar tabbar tabbar-labels toolbar-index">
<div class="toolbar-inner">
<a class="tab-link notiy-circle" href="#">
<span class="icon icon-word"></span>
</a>
<a class="tab-link" href="#">
<span class="icon icon-class"></span>
</a>
<a class="tab-link" href="#">
<span class="icon icon-my"></span>
</a>
</div>
</div>
<div class="page-content">
<h1 class="brand-index">辞海</h1>
<div class="search-area search-index">
<div class="search-area-brand">
<img src="images/logo-zhiyun.png">
</div>
<form class="search-area-inner">
<input class="form-control" type="text" placeholder="1,786,069 个语词">
<a class="search-area-voice" type="button">
<span class="icon icon-microphone"></span>
</a>
<button class="search-area-image" type="button">
<span class="icon icon-camera"></span>
</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="js/vendor.js"></script>
<script src="js/routes.js"></script>
<script src="js/index.js"></script>
</body>
</html>
\ No newline at end of file \ No newline at end of file
var $ = Dom7;
var myApp = new Framework7({
root: '#app',
theme: 'ios',
routes: routes,
});
var $loading = $('#loading');
$loading.addClass('fade-out');
setTimeout(function () {
$loading.remove();
},300);
$('.search-area-inner').on('click', function () {
wx.startRecord();
myApp.dialog.create({
title: '正在录音...',
buttons: [
{
text: '完成',
onClick:function () {
wx.stopRecord({
success: function (res) {
var localId = res.localId;
wx.translateVoice({
localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
myApp.view.main.router.load({
url:'/home/search?keyword='+res.translateResult
});
}
});
}
});
}
}
]
}).open();
});
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
var routes = [
// 首页
{
path: '/',
url: './index.html',
name: 'index'
},
// 2-1字语词义
{
path: '/word/',
url: './2-1字语词义.html',
name: 'word-home'
},
// 2-2字百科义
{
path: '/word-wiki/',
url: './2-2字百科义.html',
name: 'word-wiki'
},
// 专题
{
path: '/special/',
url: './专题.html',
name: 'special'
}
];
\ No newline at end of file \ No newline at end of file
var $ = Dom7;
var app = new Framework7({
root: '#app',
theme: 'ios',
routes: routes
});
var numSwiper = new Swiper('.num-swiper', {
loop: false,
slidesPerView: 4,
slidesPerGroup: 1,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
}
});
var numContentSwiper = new Swiper('.num-content-swiper', {
loop: false,
});
numContentSwiper.on('slideChange', function (swiper) {
numSwiper.slideTo(numContentSwiper.realIndex);
$('.num-swiper .swiper-slide').eq(numContentSwiper.realIndex).addClass('active').siblings().removeClass('active');
});
$('.num-swiper .swiper-slide').click(function () {
$(this).addClass("active").siblings().removeClass("active");
numContentSwiper.slideTo($(this).index());
});
var picSwiper = new Swiper('.pic-swiper', {
loop: false,
slidesPerView : 1.5,
spaceBetween : 15
});
var topicSwiper = new Swiper('.topic-swiper', {
loop: false,
pagination: {
el: '.swiper-pagination',
type: 'bullets',
clickable: true
}
});
//关系图
var DIR = 'img/soft-scraps-icons/';
var nodes = null;
var edges = null;
var network = null;
// Called when the Visualization API is loaded.
function draw() {
// create people.
// value corresponds with the age of the person
var DIR = 'images/special-pic-0';
nodes = [
{id: 1, shape: 'circularImage', image: DIR + '1.png'},
{id: 2, shape: 'circularImage', image: DIR + '2.png'},
{id: 3, shape: 'circularImage', image: DIR + '1.png'},
{id: 4, shape: 'circularImage', image: DIR + '2.png', label: "pictures by this guy!"},
{id: 5, shape: 'circularImage', image: DIR + '1.png'},
{id: 6, shape: 'circularImage', image: DIR + '2.png'},
{id: 7, shape: 'circularImage', image: DIR + '1.png'},
{id: 8, shape: 'circularImage', image: DIR + '2.png'},
{id: 9, shape: 'circularImage', image: DIR + '1.png'},
{id: 10, shape: 'circularImage', image: DIR + '2.png'},
{id: 11, shape: 'circularImage', image: DIR + '1.png'},
{id: 12, shape: 'circularImage', image: DIR + '2.png'},
{id: 13, shape: 'circularImage', image: DIR + '1.png'},
{id: 14, shape: 'circularImage', image: DIR + '2.png'},
{
id: 15,
shape: 'circularImage',
image: DIR + 'missing.png',
brokenImage: DIR + 'missingBrokenImage.png',
label: "when images\nfail\nto load"
},
{
id: 16,
shape: 'circularImage',
image: DIR + 'anotherMissing.png',
brokenImage: DIR + '9.png',
label: "fallback image in action"
}
];
// create connections between people
// value corresponds with the amount of contact between two people
edges = [
{from: 1, to: 2},
{from: 2, to: 3},
{from: 2, to: 4},
{from: 4, to: 5},
{from: 4, to: 10},
{from: 4, to: 6},
{from: 6, to: 7},
{from: 7, to: 8},
{from: 8, to: 9},
{from: 8, to: 10},
{from: 10, to: 11},
{from: 11, to: 12},
{from: 12, to: 13},
{from: 13, to: 14},
{from: 9, to: 16}
];
// create a network
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var options = {
nodes: {
borderWidth: 4,
size: 30,
color: {
border: '#222222',
background: '#666666'
},
font: {color: '#eeeeee'}
},
edges: {
color: 'lightgray'
}
};
network = new vis.Network(container, data, options);
}
draw();
$('.js-read-more').click(function () {
if($(this).hasClass('active')){
$('.special-content .txt-content').css('height','190px');
$(this).removeClass('active')
}else{
$('.special-content .txt-content').css('height','auto');
$(this).addClass('active')
}
});
\ No newline at end of file \ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
var $ = Dom7;
var app = new Framework7({
root: '#app',
theme: 'ios',
routes: routes
});
var swiper = new Swiper('.swiper-container', {
loop: true,
pagination: {
el: '.swiper-pagination',
clickable: true,
},
});
$(".js-word-tab li").click(function () {
$(this).addClass("active").siblings().removeClass("active");
$(".js-tab-con .tab-panel").eq($(this).index()).addClass("active").siblings().removeClass("active");
});
\ No newline at end of file \ No newline at end of file
/*
* bootstrap-tagsinput v0.8.0
*
*/
.bootstrap-tagsinput {
background-color: #fff;
border: 1px solid #ccc;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
display: inline-block;
padding: 4px 6px;
color: #555;
vertical-align: middle;
border-radius: 4px;
max-width: 100%;
line-height: 22px;
cursor: text;
}
.bootstrap-tagsinput input {
border: none;
box-shadow: none;
outline: none;
background-color: transparent;
padding: 0 6px;
margin: 0;
width: auto;
max-width: inherit;
}
.bootstrap-tagsinput.form-control input::-moz-placeholder {
color: #777;
opacity: 1;
}
.bootstrap-tagsinput.form-control input:-ms-input-placeholder {
color: #777;
}
.bootstrap-tagsinput.form-control input::-webkit-input-placeholder {
color: #777;
}
.bootstrap-tagsinput input:focus {
border: none;
box-shadow: none;
}
.bootstrap-tagsinput .tag {
margin-right: 2px;
color: white;
}
.bootstrap-tagsinput .tag [data-role="remove"] {
margin-left: 8px;
cursor: pointer;
}
.bootstrap-tagsinput .tag [data-role="remove"]:after {
content: "x";
padding: 0px 2px;
}
.bootstrap-tagsinput .tag [data-role="remove"]:hover {
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
}
.bootstrap-tagsinput .tag [data-role="remove"]:hover:active {
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.webuploader-container {
position: relative;
}
.webuploader-element-invisible {
position: absolute !important;
clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
clip: rect(1px,1px,1px,1px);
}
.webuploader-pick {
position: relative;
display: inline-block;
cursor: pointer;
background: #00b7ee;
padding: 10px 15px;
color: #fff;
text-align: center;
border-radius: 3px;
overflow: hidden;
}
.webuploader-pick-hover {
background: #00a2d4;
}
.webuploader-pick-disable {
opacity: 0.6;
pointer-events:none;
}
<!-- 稻壳智能编辑器dom -->
<% var tabData = [{"title":"素材中心","type":"remote","categoryUrl":remoteCategoryUrl,"sourceUrl":remoteSourceUrl},{"title":"我的模板","type":"local","categoryUrl":localCategoryUrl,"sourceUrl":localSourceUrl}];%>
<div class="<%=plugName%>-left">
<ul class="nav nav-tabs <%=plugName%>-left-nav" role="tablist">
<% for(var ti in tabData){ if(!tabData[ti].categoryUrl) continue;%>
<li role="presentation"<%=ti==0?' class="active"':''%>><a href="<%=tabData[ti].categoryUrl%>" data-target="#<%=plugName%>-tab-<%=tabData[ti].type%>" data-type="<%=tabData[ti].type%>"><%=tabData[ti].title%></a></li>
<% } %>
</ul>
<div class="tab-content <%=plugName%>-left-content">
<% for(var ti in tabData){ if(!tabData[ti].categoryUrl) continue;%>
<div class="tab-pane fade in<%=ti==0?' active':''%>" id="<%=plugName%>-tab-<%=tabData[ti].type%>" data-type="<%=tabData[ti].type%>">
<form class="<%=plugName%>-filter <%=plugName%>-filter-disabled" action="<%=tabData[ti].sourceUrl%>" method="get">
<div class="btn-group <%=plugName%>-filter-color clearfix" data-toggle="buttons">
<% for(var i in colors){ %>
<% if(colors[i] !== 'multicolour'){%>
<label class="btn btn-primary<%=colors[i] == '#ffffff'?' '+plugName+'-color-fff':'' %>" style="background-color: <%=colors[i]%>;"><input type="radio" name="data[color]" autocomplete="off" value="<%=colors[i]%>"><%=colors[i]%></label>
<% }else{ %>
<label class="btn btn-primary <%=plugName%>-color-multicolour" title="其他"><input type="radio" name="data[color]" autocomplete="off" value="<%=colors[i]%>"><%=colors[i]%></label>
<% }} %>
</div>
<input type="hidden" name="data[category_id]" class="<%=plugName%>-filter-category-input">
<ul class="nav nav-pills nav-justified <%=plugName%>-filter-category">
<li class="<%=plugName%>-filter-category-loading"></li>
</ul>
<div class="<%=plugName%>-filter-search clearfix">
<input type="text" class="form-control" name="data[title]" placeholder="请输入关键字">
<button class="btn btn-default" type="submit">搜索</button>
<button class="btn btn-link" type="reset">取消搜索</button>
</div>
</form>
<div class="<%=plugName%>-filter-content scroll-bar">
<ul class="<%=plugName%>-filter-content-main"></ul>
<div class="<%=plugName%>-filter-pager">
<span>数据加载中...</span>
<a href="javascript:;">点击加载更多</a>
</div>
</div>
</div>
<% } %>
</div>
</div>
<div class="<%=plugName%>-right">
<div class="<%=plugName%>-header">
<div class="pull-left <%=plugName%>-header-title" id="<%=plugName%>-content-width">
<span>正文宽度</span>
<% for(var i=0;i<contentWidth.length;i++){ %>
<a<%=i==0?' class=active':''%> href="javascript:;" data-width="<%=contentWidth[i]%>"><%=contentWidth[i]=='100%'?'自适应':contentWidth[i]%></a>
<% } %>
</div>
<div class="pull-right">
<span class="<%=plugName%>-header-line"></span>
<% if(localSourceBatch && localSourceBatch.url && localCategoryUrl) { %><button class="btn btn-default btn-sm" id="js-<%=plugName%>-save-tpl" type="button">存储为模板</button><% } %>
<button class="btn btn-default btn-sm" id="js-<%=plugName%>-close" type="button">关闭</button>
<button class="btn btn-primary btn-sm" id="js-<%=plugName%>-confirm" type="button">确定</button>
</div>
</div>
<div class="<%=plugName%>-main">
<div class="<%=plugName%>-main-inner" id="<%=plugName%>-main-inner">
<script id="<%=plugName%>-main-content" class="<%=plugName%>-main-content" name="<%=plugName%>-main-content" type="text/plain"></script>
</div>
</div>
</div>
\ No newline at end of file \ No newline at end of file
/**
* @copyright Copyright (c) 2017 上海稻壳网络科技有限公司
* @link http://www.dookay.com/
* @create Created on 2017/10/22
*/
'use strict';
/**
* editorAreaTool
*
* @author xiaopig <xiaopig123456@qq.com>
* @since 1.0
*/
(function () {
var plugName = function (name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var url = document.currentScript.src.split('?');
var r = url[1].match(reg);
if (r != null) return unescape(r[2]); return null;
}('plugName');
var cssRules = '.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}' +
'.clearfix{display:inline-block;}' +
'* html .clearfix{height:1%;}' +
'.clearfix{display:block;}' +
'.coralueditor{position: relative;}' +
'.coralueditor p{margin-bottom:0;}' +
'.coralueditor-selected {z-index: 100;}' +
'.coralueditor-selected section{position: absolute;border-color: #ff8c00;border-style: dashed;border-width:0;z-index:100;}' +
'.coralueditor-selected .coralueditor-selected-top{border-top-width:1px; width: 100%; top: 0; }' +
'.coralueditor-selected .coralueditor-selected-bottom{border-top-width:1px; width: 100%; bottom: 0; }' +
'.coralueditor-selected .coralueditor-selected-top-left{border-top-width:1px; width: 5px; top: 0; left: 0; }' +
'.coralueditor-selected .coralueditor-selected-top-right{border-top-width:1px; width: 5px; top: 0; right: 0; }' +
'.coralueditor-selected .coralueditor-selected-bottom-left{border-top-width:1px; width: 5px; bottom: 0; left: 0; }' +
'.coralueditor-selected .coralueditor-selected-bottom-right{border-top-width:1px; width: 5px; bottom: 0; right: 0; }' +
'.coralueditor-selected .coralueditor-selected-left{border-left-width:1px; height: 100%; left: 0; }' +
'.coralueditor-selected .coralueditor-selected-right{border-right-width:1px;height: 100%; right: 0; }' +
'.coralueditor-selected .coralueditor-selected-left-bottom{border-left-width:1px; height: 5px; bottom: 0; left: 0; }' +
'.coralueditor-selected .coralueditor-selected-left-top{border-left-width:1px; height: 5px; top: 0; left: 0; }' +
'.coralueditor-selected .coralueditor-selected-right-bottom{border-left-width:1px; height: 5px; bottom: 0; right: 0; }' +
'.coralueditor-selected .coralueditor-selected-right-top{border-left-width:1px; height: 5px; top: 0; right: 0; }';
cssRules = cssRules.replace('coralueditor',plugName);
var nod = document.createElement('style');
nod.type='text/css';
if (nod.styleSheet) { //ie下
nod.styleSheet.cssText = cssRules;
} else {
nod.appendChild(document.createTextNode(cssRules))
}
document.getElementsByTagName('head')[0].appendChild(nod);
})();
\ No newline at end of file \ No newline at end of file
/*!
* Bootstrap Colorpicker v2.5.1
* https://itsjavi.com/bootstrap-colorpicker/
*
* Originally written by (c) 2012 Stefan Petre
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
*/.colorpicker-saturation{width:100px;height:100px;background-image:url(../img/bootstrap-colorpicker/saturation.png);cursor:crosshair;float:left}.colorpicker-saturation i{display:block;height:5px;width:5px;border:1px solid #000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;position:absolute;top:0;left:0;margin:-4px 0 0 -4px}.colorpicker-saturation i b{display:block;height:5px;width:5px;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-alpha,.colorpicker-hue{width:15px;height:100px;float:left;cursor:row-resize;margin-left:4px;margin-bottom:4px}.colorpicker-alpha i,.colorpicker-hue i{display:block;height:1px;background:#000;border-top:1px solid #fff;position:absolute;top:0;left:0;width:100%;margin-top:-1px}.colorpicker-hue{background-image:url(../img/bootstrap-colorpicker/hue.png)}.colorpicker-alpha{background-image:url(../img/bootstrap-colorpicker/alpha.png);display:none}.colorpicker-alpha,.colorpicker-hue,.colorpicker-saturation{background-size:contain}.colorpicker{padding:4px;min-width:130px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;z-index:2500}.colorpicker:after,.colorpicker:before{display:table;content:"";line-height:0}.colorpicker:after{clear:both}.colorpicker:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:6px}.colorpicker:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.colorpicker div{position:relative}.colorpicker.colorpicker-with-alpha{min-width:140px}.colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block}.colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url(../img/bootstrap-colorpicker/alpha.png);background-position:0 100%}.colorpicker-color div{height:10px}.colorpicker-selectors{display:none;height:10px;margin-top:5px;clear:both}.colorpicker-selectors i{cursor:pointer;float:left;height:10px;width:10px}.colorpicker-selectors i+i{margin-left:3px}.colorpicker-element .add-on i,.colorpicker-element .input-group-addon i{display:inline-block;cursor:pointer;height:16px;vertical-align:text-top;width:16px}.colorpicker.colorpicker-inline{position:relative;display:inline-block;float:none;z-index:auto}.colorpicker.colorpicker-horizontal{width:110px;min-width:110px;height:auto}.colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-color{width:100px}.colorpicker.colorpicker-horizontal .colorpicker-alpha,.colorpicker.colorpicker-horizontal .colorpicker-hue{width:100px;height:15px;float:left;cursor:col-resize;margin-left:0;margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-alpha i,.colorpicker.colorpicker-horizontal .colorpicker-hue i{display:block;height:15px;background:#fff;position:absolute;top:0;left:0;width:1px;border:none;margin-top:0}.colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url(../img/bootstrap-colorpicker/hue-horizontal.png)}.colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url(../img/bootstrap-colorpicker/alpha-horizontal.png)}.colorpicker-right:before{left:auto;right:6px}.colorpicker-right:after{left:auto;right:7px}.colorpicker-no-arrow:before{border-right:0;border-left:0}.colorpicker-no-arrow:after{border-right:0;border-left:0}.colorpicker-alpha.colorpicker-visible,.colorpicker-hue.colorpicker-visible,.colorpicker-saturation.colorpicker-visible,.colorpicker-selectors.colorpicker-visible,.colorpicker.colorpicker-visible{display:block}.colorpicker-alpha.colorpicker-hidden,.colorpicker-hue.colorpicker-hidden,.colorpicker-saturation.colorpicker-hidden,.colorpicker-selectors.colorpicker-hidden,.colorpicker.colorpicker-hidden{display:none}.colorpicker-inline.colorpicker-visible{display:inline-block}
/*# sourceMappingURL=bootstrap-colorpicker.min.css.map */
\ No newline at end of file \ No newline at end of file
/*! =======================================================
VERSION 9.9.0
========================================================= */
/*! =========================================================
* bootstrap-slider.js
*
* Maintainers:
* Kyle Kemp
* - Twitter: @seiyria
* - Github: seiyria
* Rohit Kalkur
* - Twitter: @Rovolutionary
* - Github: rovolution
*
* =========================================================
*
* bootstrap-slider is released under the MIT License
* Copyright (c) 2017 Kyle Kemp, Rohit Kalkur, and contributors
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* ========================================================= */.slider{display:inline-block;vertical-align:middle;position:relative}.slider.slider-horizontal{width:210px;height:20px}.slider.slider-horizontal .slider-track{height:10px;width:100%;margin-top:-5px;top:50%;left:0}.slider.slider-horizontal .slider-selection,.slider.slider-horizontal .slider-track-low,.slider.slider-horizontal .slider-track-high{height:100%;top:0;bottom:0}.slider.slider-horizontal .slider-tick,.slider.slider-horizontal .slider-handle{margin-left:-10px}.slider.slider-horizontal .slider-tick.triangle,.slider.slider-horizontal .slider-handle.triangle{position:relative;top:50%;transform:translateY(-50%);border-width:0 10px 10px 10px;width:0;height:0;border-bottom-color:#2e6da4;margin-top:0}.slider.slider-horizontal .slider-tick-container{white-space:nowrap;position:absolute;top:0;left:0;width:100%}.slider.slider-horizontal .slider-tick-label-container{white-space:nowrap;margin-top:20px}.slider.slider-horizontal .slider-tick-label-container .slider-tick-label{padding-top:4px;display:inline-block;text-align:center}.slider.slider-horizontal.slider-rtl .slider-track{left:initial;right:0}.slider.slider-horizontal.slider-rtl .slider-tick,.slider.slider-horizontal.slider-rtl .slider-handle{margin-left:initial;margin-right:-10px}.slider.slider-horizontal.slider-rtl .slider-tick-container{left:initial;right:0}.slider.slider-vertical{height:210px;width:20px}.slider.slider-vertical .slider-track{width:10px;height:100%;left:25%;top:0}.slider.slider-vertical .slider-selection{width:100%;left:0;top:0;bottom:0}.slider.slider-vertical .slider-track-low,.slider.slider-vertical .slider-track-high{width:100%;left:0;right:0}.slider.slider-vertical .slider-tick,.slider.slider-vertical .slider-handle{margin-top:-10px}.slider.slider-vertical .slider-tick.triangle,.slider.slider-vertical .slider-handle.triangle{border-width:10px 0 10px 10px;width:1px;height:1px;border-left-color:#2e6da4;border-right-color:#2e6da4;margin-left:0;margin-right:0}.slider.slider-vertical .slider-tick-label-container{white-space:nowrap}.slider.slider-vertical .slider-tick-label-container .slider-tick-label{padding-left:4px}.slider.slider-vertical.slider-rtl .slider-track{left:initial;right:25%}.slider.slider-vertical.slider-rtl .slider-selection{left:initial;right:0}.slider.slider-vertical.slider-rtl .slider-tick.triangle,.slider.slider-vertical.slider-rtl .slider-handle.triangle{border-width:10px 10px 10px 0}.slider.slider-vertical.slider-rtl .slider-tick-label-container .slider-tick-label{padding-left:initial;padding-right:4px}.slider.slider-disabled .slider-handle{background-image:-webkit-linear-gradient(top,#dfdfdf 0,#bebebe 100%);background-image:-o-linear-gradient(top,#dfdfdf 0,#bebebe 100%);background-image:linear-gradient(to bottom,#dfdfdf 0,#bebebe 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdfdfdf',endColorstr='#ffbebebe',GradientType=0)}.slider.slider-disabled .slider-track{background-image:-webkit-linear-gradient(top,#e5e5e5 0,#e9e9e9 100%);background-image:-o-linear-gradient(top,#e5e5e5 0,#e9e9e9 100%);background-image:linear-gradient(to bottom,#e5e5e5 0,#e9e9e9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe5e5e5',endColorstr='#ffe9e9e9',GradientType=0);cursor:not-allowed}.slider input{display:none}.slider .tooltip.top{margin-top:-36px}.slider .tooltip-inner{white-space:nowrap;max-width:none}.slider .hide{display:none}.slider-track{position:absolute;cursor:pointer;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#f9f9f9 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#f9f9f9 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#f9f9f9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);border-radius:4px}.slider-selection{position:absolute;background-image:-webkit-linear-gradient(top,#f9f9f9 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#f9f9f9 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#f9f9f9 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.slider-selection.tick-slider-selection{background-image:-webkit-linear-gradient(top,#8ac1ef 0,#82b3de 100%);background-image:-o-linear-gradient(top,#8ac1ef 0,#82b3de 100%);background-image:linear-gradient(to bottom,#8ac1ef 0,#82b3de 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8ac1ef',endColorstr='#ff82b3de',GradientType=0)}.slider-track-low,.slider-track-high{position:absolute;background:transparent;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.slider-handle{position:absolute;top:0;width:20px;height:20px;background-color:#337ab7;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',endColorstr='#ff2e6da4',GradientType=0);filter:none;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);border:0 solid transparent}.slider-handle.round{border-radius:50%}.slider-handle.triangle{background:transparent none}.slider-handle.custom{background:transparent none}.slider-handle.custom::before{line-height:20px;font-size:20px;content:'\2605';color:#726204}.slider-tick{position:absolute;width:20px;height:20px;background-image:-webkit-linear-gradient(top,#f9f9f9 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#f9f9f9 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#f9f9f9 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;filter:none;opacity:.8;border:0 solid transparent}.slider-tick.round{border-radius:50%}.slider-tick.triangle{background:transparent none}.slider-tick.custom{background:transparent none}.slider-tick.custom::before{line-height:20px;font-size:20px;content:'\2605';color:#726204}.slider-tick.in-selection{background-image:-webkit-linear-gradient(top,#8ac1ef 0,#82b3de 100%);background-image:-o-linear-gradient(top,#8ac1ef 0,#82b3de 100%);background-image:linear-gradient(to bottom,#8ac1ef 0,#82b3de 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8ac1ef',endColorstr='#ff82b3de',GradientType=0);opacity:1}
\ No newline at end of file \ No newline at end of file
bootstrap-tagsinput.css/*
* bootstrap-tagsinput v0.8.0
*
*/
!function(a){"use strict";function b(b,c){this.isInit=!0,this.itemsArray=[],this.$element=a(b),this.$element.hide(),this.isSelect="SELECT"===b.tagName,this.multiple=this.isSelect&&b.hasAttribute("multiple"),this.objectItems=c&&c.itemValue,this.placeholderText=b.hasAttribute("placeholder")?this.$element.attr("placeholder"):"",this.inputSize=Math.max(1,this.placeholderText.length),this.$container=a('<div class="bootstrap-tagsinput"></div>'),this.$input=a('<input type="text" placeholder="'+this.placeholderText+'"/>').appendTo(this.$container),this.$element.before(this.$container),this.build(c),this.isInit=!1}function c(a,b){if("function"!=typeof a[b]){var c=a[b];a[b]=function(a){return a[c]}}}function d(a,b){if("function"!=typeof a[b]){var c=a[b];a[b]=function(){return c}}}function e(a){return a?i.text(a).html():""}function f(a){var b=0;if(document.selection){a.focus();var c=document.selection.createRange();c.moveStart("character",-a.value.length),b=c.text.length}else(a.selectionStart||"0"==a.selectionStart)&&(b=a.selectionStart);return b}function g(b,c){var d=!1;return a.each(c,function(a,c){if("number"==typeof c&&b.which===c)return d=!0,!1;if(b.which===c.which){var e=!c.hasOwnProperty("altKey")||b.altKey===c.altKey,f=!c.hasOwnProperty("shiftKey")||b.shiftKey===c.shiftKey,g=!c.hasOwnProperty("ctrlKey")||b.ctrlKey===c.ctrlKey;if(e&&f&&g)return d=!0,!1}}),d}var h={tagClass:function(a){return"label label-info"},focusClass:"focus",itemValue:function(a){return a?a.toString():a},itemText:function(a){return this.itemValue(a)},itemTitle:function(a){return null},freeInput:!0,addOnBlur:!0,maxTags:void 0,maxChars:void 0,confirmKeys:[13,44],delimiter:",",delimiterRegex:null,cancelConfirmKeysOnEmpty:!1,onTagExists:function(a,b){b.hide().fadeIn()},trimValue:!1,allowDuplicates:!1,triggerChange:!0};b.prototype={constructor:b,add:function(b,c,d){var f=this;if(!(f.options.maxTags&&f.itemsArray.length>=f.options.maxTags)&&(b===!1||b)){if("string"==typeof b&&f.options.trimValue&&(b=a.trim(b)),"object"==typeof b&&!f.objectItems)throw"Can't add objects when itemValue option is not set";if(!b.toString().match(/^\s*$/)){if(f.isSelect&&!f.multiple&&f.itemsArray.length>0&&f.remove(f.itemsArray[0]),"string"==typeof b&&"INPUT"===this.$element[0].tagName){var g=f.options.delimiterRegex?f.options.delimiterRegex:f.options.delimiter,h=b.split(g);if(h.length>1){for(var i=0;i<h.length;i++)this.add(h[i],!0);return void(c||f.pushVal(f.options.triggerChange))}}var j=f.options.itemValue(b),k=f.options.itemText(b),l=f.options.tagClass(b),m=f.options.itemTitle(b),n=a.grep(f.itemsArray,function(a){return f.options.itemValue(a)===j})[0];if(!n||f.options.allowDuplicates){if(!(f.items().toString().length+b.length+1>f.options.maxInputLength)){var o=a.Event("beforeItemAdd",{item:b,cancel:!1,options:d});if(f.$element.trigger(o),!o.cancel){f.itemsArray.push(b);var p=a('<span class="tag '+e(l)+(null!==m?'" title="'+m:"")+'">'+e(k)+'<span data-role="remove"></span></span>');p.data("item",b),f.findInputWrapper().before(p),p.after(" ");var q=a('option[value="'+encodeURIComponent(j)+'"]',f.$element).length||a('option[value="'+e(j)+'"]',f.$element).length;if(f.isSelect&&!q){var r=a("<option selected>"+e(k)+"</option>");r.data("item",b),r.attr("value",j),f.$element.append(r)}c||f.pushVal(f.options.triggerChange),(f.options.maxTags===f.itemsArray.length||f.items().toString().length===f.options.maxInputLength)&&f.$container.addClass("bootstrap-tagsinput-max"),a(".typeahead, .twitter-typeahead",f.$container).length&&f.$input.typeahead("val",""),this.isInit?f.$element.trigger(a.Event("itemAddedOnInit",{item:b,options:d})):f.$element.trigger(a.Event("itemAdded",{item:b,options:d}))}}}else if(f.options.onTagExists){var s=a(".tag",f.$container).filter(function(){return a(this).data("item")===n});f.options.onTagExists(b,s)}}}},remove:function(b,c,d){var e=this;if(e.objectItems&&(b="object"==typeof b?a.grep(e.itemsArray,function(a){return e.options.itemValue(a)==e.options.itemValue(b)}):a.grep(e.itemsArray,function(a){return e.options.itemValue(a)==b}),b=b[b.length-1]),b){var f=a.Event("beforeItemRemove",{item:b,cancel:!1,options:d});if(e.$element.trigger(f),f.cancel)return;a(".tag",e.$container).filter(function(){return a(this).data("item")===b}).remove(),a("option",e.$element).filter(function(){return a(this).data("item")===b}).remove(),-1!==a.inArray(b,e.itemsArray)&&e.itemsArray.splice(a.inArray(b,e.itemsArray),1)}c||e.pushVal(e.options.triggerChange),e.options.maxTags>e.itemsArray.length&&e.$container.removeClass("bootstrap-tagsinput-max"),e.$element.trigger(a.Event("itemRemoved",{item:b,options:d}))},removeAll:function(){var b=this;for(a(".tag",b.$container).remove(),a("option",b.$element).remove();b.itemsArray.length>0;)b.itemsArray.pop();b.pushVal(b.options.triggerChange)},refresh:function(){var b=this;a(".tag",b.$container).each(function(){var c=a(this),d=c.data("item"),f=b.options.itemValue(d),g=b.options.itemText(d),h=b.options.tagClass(d);if(c.attr("class",null),c.addClass("tag "+e(h)),c.contents().filter(function(){return 3==this.nodeType})[0].nodeValue=e(g),b.isSelect){var i=a("option",b.$element).filter(function(){return a(this).data("item")===d});i.attr("value",f)}})},items:function(){return this.itemsArray},pushVal:function(){var b=this,c=a.map(b.items(),function(a){return b.options.itemValue(a).toString()});b.$element.val(c,!0),b.options.triggerChange&&b.$element.trigger("change")},build:function(b){var e=this;if(e.options=a.extend({},h,b),e.objectItems&&(e.options.freeInput=!1),c(e.options,"itemValue"),c(e.options,"itemText"),d(e.options,"tagClass"),e.options.typeahead){var i=e.options.typeahead||{};d(i,"source"),e.$input.typeahead(a.extend({},i,{source:function(b,c){function d(a){for(var b=[],d=0;d<a.length;d++){var g=e.options.itemText(a[d]);f[g]=a[d],b.push(g)}c(b)}this.map={};var f=this.map,g=i.source(b);a.isFunction(g.success)?g.success(d):a.isFunction(g.then)?g.then(d):a.when(g).then(d)},updater:function(a){return e.add(this.map[a]),this.map[a]},matcher:function(a){return-1!==a.toLowerCase().indexOf(this.query.trim().toLowerCase())},sorter:function(a){return a.sort()},highlighter:function(a){var b=new RegExp("("+this.query+")","gi");return a.replace(b,"<strong>$1</strong>")}}))}if(e.options.typeaheadjs){var j=null,k={},l=e.options.typeaheadjs;a.isArray(l)?(j=l[0],k=l[1]):k=l,e.$input.typeahead(j,k).on("typeahead:selected",a.proxy(function(a,b){k.valueKey?e.add(b[k.valueKey]):e.add(b),e.$input.typeahead("val","")},e))}e.$container.on("click",a.proxy(function(a){e.$element.attr("disabled")||e.$input.removeAttr("disabled"),e.$input.focus()},e)),e.options.addOnBlur&&e.options.freeInput&&e.$input.on("focusout",a.proxy(function(b){0===a(".typeahead, .twitter-typeahead",e.$container).length&&(e.add(e.$input.val()),e.$input.val(""))},e)),e.$container.on({focusin:function(){e.$container.addClass(e.options.focusClass)},focusout:function(){e.$container.removeClass(e.options.focusClass)}}),e.$container.on("keydown","input",a.proxy(function(b){var c=a(b.target),d=e.findInputWrapper();if(e.$element.attr("disabled"))return void e.$input.attr("disabled","disabled");switch(b.which){case 8:if(0===f(c[0])){var g=d.prev();g.length&&e.remove(g.data("item"))}break;case 46:if(0===f(c[0])){var h=d.next();h.length&&e.remove(h.data("item"))}break;case 37:var i=d.prev();0===c.val().length&&i[0]&&(i.before(d),c.focus());break;case 39:var j=d.next();0===c.val().length&&j[0]&&(j.after(d),c.focus())}var k=c.val().length;Math.ceil(k/5);c.attr("size",Math.max(this.inputSize,c.val().length))},e)),e.$container.on("keypress","input",a.proxy(function(b){var c=a(b.target);if(e.$element.attr("disabled"))return void e.$input.attr("disabled","disabled");var d=c.val(),f=e.options.maxChars&&d.length>=e.options.maxChars;e.options.freeInput&&(g(b,e.options.confirmKeys)||f)&&(0!==d.length&&(e.add(f?d.substr(0,e.options.maxChars):d),c.val("")),e.options.cancelConfirmKeysOnEmpty===!1&&b.preventDefault());var h=c.val().length;Math.ceil(h/5);c.attr("size",Math.max(this.inputSize,c.val().length))},e)),e.$container.on("click","[data-role=remove]",a.proxy(function(b){e.$element.attr("disabled")||e.remove(a(b.target).closest(".tag").data("item"))},e)),e.options.itemValue===h.itemValue&&("INPUT"===e.$element[0].tagName?e.add(e.$element.val()):a("option",e.$element).each(function(){e.add(a(this).attr("value"),!0)}))},destroy:function(){var a=this;a.$container.off("keypress","input"),a.$container.off("click","[role=remove]"),a.$container.remove(),a.$element.removeData("tagsinput"),a.$element.show()},focus:function(){this.$input.focus()},input:function(){return this.$input},findInputWrapper:function(){for(var b=this.$input[0],c=this.$container[0];b&&b.parentNode!==c;)b=b.parentNode;return a(b)}},a.fn.tagsinput=function(c,d,e){var f=[];return this.each(function(){var g=a(this).data("tagsinput");if(g)if(c||d){if(void 0!==g[c]){if(3===g[c].length&&void 0!==e)var h=g[c](d,null,e);else var h=g[c](d);void 0!==h&&f.push(h)}}else f.push(g);else g=new b(this,c),a(this).data("tagsinput",g),f.push(g),"SELECT"===this.tagName&&a("option",a(this)).attr("selected","selected"),a(this).val(a(this).val())}),"string"==typeof c?f.length>1?f:f[0]:f},a.fn.tagsinput.Constructor=b;var i=a("<div />");a(function(){a("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput()})}(window.jQuery);
//# sourceMappingURL=bootstrap-tagsinput.min.js.map
\ No newline at end of file \ No newline at end of file
/* ========================================================================
* Bootstrap: button.js v3.3.7
* http://getbootstrap.com/javascript/#buttons
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// BUTTON PUBLIC CLASS DEFINITION
// ==============================
var Button = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Button.DEFAULTS, options)
this.isLoading = false
}
Button.VERSION = '3.3.7'
Button.DEFAULTS = {
loadingText: 'loading...'
}
Button.prototype.setState = function (state) {
var d = 'disabled'
var $el = this.$element
var val = $el.is('input') ? 'val' : 'html'
var data = $el.data()
state += 'Text'
if (data.resetText == null) $el.data('resetText', $el[val]())
// push to event loop to allow forms to submit
setTimeout($.proxy(function () {
$el[val](data[state] == null ? this.options[state] : data[state])
if (state == 'loadingText') {
this.isLoading = true
$el.addClass(d).attr(d, d).prop(d, true)
} else if (this.isLoading) {
this.isLoading = false
$el.removeClass(d).removeAttr(d).prop(d, false)
}
}, this), 0)
}
Button.prototype.toggle = function () {
var changed = true
var $parent = this.$element.closest('[data-toggle="buttons"]')
if ($parent.length) {
var $input = this.$element.find('input')
if ($input.prop('type') == 'radio') {
if ($input.prop('checked')) changed = false
$parent.find('.active').removeClass('active')
this.$element.addClass('active')
} else if ($input.prop('type') == 'checkbox') {
if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
this.$element.toggleClass('active')
}
$input.prop('checked', this.$element.hasClass('active'))
if (changed) $input.trigger('change')
} else {
this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
this.$element.toggleClass('active')
}
}
// BUTTON PLUGIN DEFINITION
// ========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.button')
var options = typeof option == 'object' && option
if (!data) $this.data('bs.button', (data = new Button(this, options)))
if (option == 'toggle') data.toggle()
else if (option) data.setState(option)
})
}
var old = $.fn.button
$.fn.button = Plugin
$.fn.button.Constructor = Button
// BUTTON NO CONFLICT
// ==================
$.fn.button.noConflict = function () {
$.fn.button = old
return this
}
// BUTTON DATA-API
// ===============
$(document)
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
var $btn = $(e.target).closest('.btn')
Plugin.call($btn, 'toggle')
if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
// Prevent double click on radios, and the double selections (so cancellation) on checkboxes
e.preventDefault()
// The target component still receive the focus
if ($btn.is('input,button')) $btn.trigger('focus')
else $btn.find('input:visible,button:visible').first().trigger('focus')
}
})
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
})
}(jQuery);
/*!
* Lazy Load - jQuery plugin for lazy loading images
*
* Copyright (c) 2007-2015 Mika Tuupola
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Project home:
* http://www.appelsiini.net/projects/lazyload
*
* Version: 1.9.7
*
*/
(function($, window, document, undefined) {
var $window = $(window);
$.fn.lazyload = function(options) {
var elements = this;
var $container;
var settings = {
threshold : 0,
failure_limit : 0,
event : "scroll",
effect : "show",
container : window,
data_attribute : "original",
skip_invisible : false,
appear : null,
load : null,
placeholder : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"
};
function update() {
var counter = 0;
elements.each(function() {
var $this = $(this);
if (settings.skip_invisible && !$this.is(":visible")) {
return;
}
if ($.abovethetop(this, settings) ||
$.leftofbegin(this, settings)) {
/* Nothing. */
} else if (!$.belowthefold(this, settings) &&
!$.rightoffold(this, settings)) {
$this.trigger("appear");
/* if we found an image we'll load, reset the counter */
counter = 0;
} else {
if (++counter > settings.failure_limit) {
return false;
}
}
});
}
if(options) {
/* Maintain BC for a couple of versions. */
if (undefined !== options.failurelimit) {
options.failure_limit = options.failurelimit;
delete options.failurelimit;
}
if (undefined !== options.effectspeed) {
options.effect_speed = options.effectspeed;
delete options.effectspeed;
}
$.extend(settings, options);
}
/* Cache container as jQuery as object. */
$container = (settings.container === undefined ||
settings.container === window) ? $window : $(settings.container);
/* Fire one scroll event per scroll. Not one scroll event per image. */
if (0 === settings.event.indexOf("scroll")) {
$container.bind(settings.event, function() {
return update();
});
}
this.each(function() {
var self = this;
var $self = $(self);
self.loaded = false;
/* If no src attribute given use data:uri. */
if ($self.attr("src") === undefined || $self.attr("src") === false) {
if ($self.is("img")) {
$self.attr("src", settings.placeholder);
}
}
/* When appear is triggered load original image. */
$self.one("appear", function() {
if (!this.loaded) {
if (settings.appear) {
var elements_left = elements.length;
settings.appear.call(self, elements_left, settings);
}
$("<img />")
.bind("load", function() {
var original = $self.attr("data-" + settings.data_attribute);
$self.hide();
if ($self.is("img")) {
$self.attr("src", original);
} else {
$self.css("background-image", "url('" + original + "')");
}
$self[settings.effect](settings.effect_speed);
self.loaded = true;
/* Remove image from array so it is not looped next time. */
var temp = $.grep(elements, function(element) {
return !element.loaded;
});
elements = $(temp);
if (settings.load) {
var elements_left = elements.length;
settings.load.call(self, elements_left, settings);
}
})
.attr("src", $self.attr("data-" + settings.data_attribute));
}
});
/* When wanted event is triggered load original image */
/* by triggering appear. */
if (0 !== settings.event.indexOf("scroll")) {
$self.bind(settings.event, function() {
if (!self.loaded) {
$self.trigger("appear");
}
});
}
});
/* Check if something appears when window is resized. */
$window.bind("resize", function() {
update();
});
/* With IOS5 force loading images when navigating with back button. */
/* Non optimal workaround. */
if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {
$window.bind("pageshow", function(event) {
if (event.originalEvent && event.originalEvent.persisted) {
elements.each(function() {
$(this).trigger("appear");
});
}
});
}
/* Force initial check if images should appear. */
$(document).ready(function() {
update();
});
return this;
};
/* Convenience methods in jQuery namespace. */
/* Use as $.belowthefold(element, {threshold : 100, container : window}) */
$.belowthefold = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();
} else {
fold = $(settings.container).offset().top + $(settings.container).height();
}
return fold <= $(element).offset().top - settings.threshold;
};
$.rightoffold = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.width() + $window.scrollLeft();
} else {
fold = $(settings.container).offset().left + $(settings.container).width();
}
return fold <= $(element).offset().left - settings.threshold;
};
$.abovethetop = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.scrollTop();
} else {
fold = $(settings.container).offset().top;
}
return fold >= $(element).offset().top + settings.threshold + $(element).height();
};
$.leftofbegin = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.scrollLeft();
} else {
fold = $(settings.container).offset().left;
}
return fold >= $(element).offset().left + settings.threshold + $(element).width();
};
$.inviewport = function(element, settings) {
return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&
!$.belowthefold(element, settings) && !$.abovethetop(element, settings);
};
/* Custom selectors for your convenience. */
/* Use as $("img:below-the-fold").something() or */
/* $("img").filter(":below-the-fold").something() which is faster */
$.extend($.expr[":"], {
"below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); },
"above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
"right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); },
"left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); },
"in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); },
/* Maintain BC for couple of versions. */
"above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
"right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); },
"left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); }
});
})(jQuery, window, document);
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
*{color: #838383;margin: 0;padding: 0}
html,body {font-size: 12px;overflow: hidden; }
.content{padding:5px 0 0 15px;}
input{width:210px;height:21px;line-height:21px;margin-left: 4px;}
</style>
</head>
<body>
<div class="content">
<span><var id="lang_input_anchorName"></var></span><input id="anchorName" value="" />
</div>
<script type="text/javascript" src="../internal.js"></script>
<script type="text/javascript">
var anchorInput = $G('anchorName'),
node = editor.selection.getRange().getClosedNode();
if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){
anchorInput.value = node;
}
anchorInput.onkeydown = function(evt){
evt = evt || window.event;
if(evt.keyCode == 13){
editor.execCommand('anchor', anchorInput.value);
dialog.close();
domUtils.preventDefault(evt)
}
};
dialog.onok = function (){
editor.execCommand('anchor', anchorInput.value);
dialog.close();
};
$focus(anchorInput);
</script>
</body>
</html>
\ No newline at end of file \ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ueditor图片对话框</title>
<script type="text/javascript" src="../internal.js"></script>
<!-- jquery -->
<script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
<!-- webuploader -->
<script src="../../third-party/webuploader/webuploader.min.js"></script>
<link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
<script src="../../third-party/jquery.lazyload.js"></script>
<link rel="stylesheet" href="../../third-party/ztree/css/zTreeStyle/zTreeStyle.css">
<script src="../../third-party/ztree/jquery.ztree.all.min.js"></script>
<script src="../../third-party/layer/layer.js"></script>
<!-- attachment dialog -->
<link rel="stylesheet" href="attachment.css" type="text/css" />
</head>
<body>
<div class="wrapper">
<div id="tabhead" class="tabhead">
<span class="tab" data-content-id="remote"><var id="lang_tab_remote"></var></span>
<span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
<span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span>
</div>
<div id="tabbody" class="tabbody">
<!-- 远程图片 -->
<div id="remote" class="panel">
<div class="remote-wrapper clearfix">
<div class="top">
<div class="row">
<label for="url"><var id="lang_input_url"></var></label>
<input class="text" id="url">
</div>
</div>
</div>
</div>
<!-- 上传图片 -->
<div id="upload" class="panel focus">
<form id="upload-setting" class="upload-setting clearfix" action="javascript:;">
<div class="static-txt">单个文件大小不超过<span id="upload-maxsize"></span>M</div>
<div class="form-group">
<label>上传到:</label>
<select name="data[category_id]" id="upload-setting-category">
<option value="">选择分组</option>
</select>
</div>
</form>
<div id="queueList" class="queueList">
<div class="statusBar element-invisible">
<div class="progress">
<span class="text">0%</span>
<span class="percentage"></span>
</div><div class="info"></div>
<div class="btns" id="upload-btns">
<div id="filePickerBtn"></div>
<div class="uploadBtn"><var id="lang_start_upload"></var></div>
</div>
</div>
<div id="dndArea" class="placeholder">
<div class="filePickerContainer">
<div id="filePickerReady"></div>
</div>
</div>
<ul class="filelist element-invisible scroll-bar">
<li id="filePickerBlock" class="filePickerBlock"></li>
</ul>
</div>
</div>
<!-- 在线图片 -->
<div id="online" class="panel">
<div class="left">
<ul class="ztree scroll-bar" id="js-ztree"></ul>
</div>
<div class="right">
<p class="f-r">右键可进行图片和分组管理</p>
<form action="javascript:;" method="get" id="search-form">
<input class="category-id" type="hidden" name="data[category_id]" value="all">
<input class="text" name="data[title]" type="text">
<button class="btn" type="submit">搜索</button>
<button class="btn btn-reset" type="button">清空</button>
</form>
<div id="fileList" class="scroll-bar"><var id="lang_imgLoading"></var></div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="attachment.js"></script>
</body>
</html>
\ No newline at end of file \ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!