/* ================================================================================
* dever.js v1.0
* http://git.shemic.com/dever/script
* ================================================================================
* Copyright 2017-2018 Dever(dever.cc)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ================================================================================
*/
//
$(function()
{
Dever.Init();
});
//公共类库
var Dever =
{
Init : function()
{
this.Import();
this.Page().Init();
this.User().Init();
this.Editor().Init();
this.Change();
this.Upload();
this.LoadPage();
this.Extend();
//this.Target();
//this.Pjax();
}
,Pjax : function()
{
$(document).pjax('a', '.container');
//$.pjax.reload('.container');
}
,Page : function()
{
return _Dever_Page;
}
,Template : function()
{
return _Dever_Template;
}
,Editor : function()
{
return _Dever_Editor;
}
,User : function()
{
return _Dever_User;
}
,Modal : function()
{
return _Dever_Modal;
}
,Proxy : function(uri)
{
return config.proxy + 'proxy_method=' + encodeURIComponent(uri);
}
,Jump : function(url)
{
location.href = url;
}
,BackRun : function(url)
{
$.post(url);
}
,Reload : function(e)
{
e.attr('src', e.attr('src'));
}
,Target : function()
{
var link = config.host;
$("a").each(function() {
if (!$(this).attr('onclick')) {
var url = $(this).attr('href');
if (url && url.indexOf(link) == -1) {
//$(this).attr('target', '_blank');
}
}
})
}
,Import : function()
{
var self = this;
var include = $("include");
var count = include.length-1;
if (include.length) {
include.each(function(i){
var dom = $(this);
var system = dom.attr('system');
var path = dom.attr('path');
var name = dom.attr('file');
var file = '';
if(path) file = path;
if(system) file = file + '/' + system;
file += name + '.html';
dom.load(file, function(){
dom.get(0).outerHTML = dom.html();
if (i == count) {
self.Template().Init();
}
});
})
} else {
self.Template().Init();
}
}
,LoadPage : function()
{
if ($('.dever-loadpage').length) {
$('.dever-loadpage').each(function() {
var url = $(this).attr('dever-url');
var self = $(this);
$.getJSON(Dever.CallUrl(url), function(t) {
self.html(t.msg);
_Dever_Page.Ajax(self);
});
});
}
}
,CallUrl : function(url)
{
if (url.indexOf('callback') == -1) {
if (url.indexOf('=') != -1) {
url += '&json=1&callback=?';
} else {
url += '?json=1&callback=?';
}
}
return url;
}
,Change : function()
{
if ($('.dever-change').length) {
$('.dever-change').change(function() {
Dever.Jump($(this).attr('dever-change')+$(this).val());
});
//$('.dever-change').val($('.dever-change').attr('dever-value'));
}
}
,Host : function(host, uri)
{
var result = '';
uri = uri ? uri : '';
if (config.type == '?') {
result = config.host.replace('?', host + '?');
} else {
result = config.host.replace('www', host);
}
result = result.replace('main', host);
result = result + config.type;
result = result.replace('??', '?');
if (config.proxy) {
return this.Proxy(host + '/' + uri);
}
return result + uri;
}
// 输出数据,提示框
,Out : function(content, callback, ele, title)
{
if (content && content.indexOf('登录') != -1 && $("#login_url").length) {
var href = $("#login_url").val();
location.href = href;
return;
} else {
alert(content);
if (ele && callback) {
ele.unbind('click').bind('click', callback);
} else if (callback) {
callback();
}
}
}
// 将数据解析,并进行下一步操作
,Msg : function(result, error_callback, success_callback)
{
if (result.status == 2) {
if (error_callback) {
return error_callback(result.msg);
}
this.Out(result.msg);
} else {
if (result.data) {
result.msg = result.data;
}
if (success_callback) {
return success_callback(result.msg);
}
if (result.msg.indexOf('http://') != -1) {
this.Jump(result.msg);
} else if (parseInt(result.msg) > 0) {
this.Out('操作成功', function() {
location.reload();
});
} else {
this.Out(result.msg);
}
}
}
,Confirm : function(callback)
{
if (confirm('确定进行此项操作吗?')) {
callback();
}
}
//上传组件加载
,Upload : function()
{
if ($(".dever-upload-drag").length) {
$(".dever-upload-drag").each(function() {
var key = $(this).attr('key');
if (config.proxy) {
var url = Dever.Proxy('upload/save.drag') + '&key=' + key;
} else {
var url = config.upload + '.drag?key='+ key;
}
$(this).inlineattachment({
uploadUrl: url,
progressText: '![文件上传中...]()',
urlText: "![文件描述]({filename})\n",
errorText: '上传失败'
});
});
}
if ($(".dever-upload").length) {
$(".dever-upload").each(function(i) {
loadUpload(i,$(this),$(this).attr('key'),config.upload + '.start', config.assets + 'image/');//三个参数说明1:第几个上传框2:文件对象3:图片的基本配置标题
})
}
}
,Load : function(filename,filetype)
{
if (filetype == "js") {
var fileref = document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src",filename + '.' + filetype);
} else if (filetype == "css") {
var fileref = document.createElement('link');
fileref.setAttribute("rel","stylesheet");
fileref.setAttribute("type","text/css");
fileref.setAttribute("href",filename + '.' + filetype);
}
if (typeof fileref != "undefined") {
document.getElementsByTagName("head")[0].appendChild(fileref);
}
}
,Extend : function()
{
Array.prototype.indexIn = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
};
Array.prototype.remove = function(val) {
var index = this.indexIn(val);
if (index > -1) {
this.splice(index, 1);
}
};
$("select option").each(function() {
if ($(this).attr('select') && $(this).attr('select') == 'true') {
$(this).attr('selected', 'true');
} else {
$(this).removeAttr('selected');
}
});
}
,Ucfirst : function(str)
{
var str = str.toLowerCase();
var strarr = str.split(' ');
var result = '';
for (var i in strarr){
result += strarr[i].substring(0,1).toUpperCase()+strarr[i].substring(1)+' ';
}
return result;
}
};
//瀑布流分页
var _Dever_Page =
{
name : '',
Init : function()
{
if ($(this.name).length) {
var self = this;
$(window).scroll(function() {
if ($(window).scrollTop() >= $(document).height() - $(window).height()) {
self.Start(self.name);
}
});
}
}
,Start : function(page)
{
page = page ? page : this.name;
if ($(page).length) {
$(page).hide();
var url = $(page).attr('link');
if (url) {
var key = $(page).attr('dever-list');
$.get(url, function(t) {
t = '
' + t + '
';
var c = $(t).find(key).html();
if (c) {
$(key).append(c);
var l = $(t).find(page).attr('link');
$(page).attr('link', l);
}
});
}
}
}
,Ajax : function(e)
{
var self = this;
e.find('a').each(function() {
var url = $(this).attr('href');
$(this).attr('href', 'javascript:;');
$(this).unbind('click').bind('click', function() {
$.get(url.replace('callback', ''), function(t) {
e.html(t);
self.Ajax(e);
});
});
});
}
}
//模态框
var _Dever_Modal =
{
state : false,
html : '',
box : '',
title : '',
content : '',
yes : '',
no : '',
setting : '',
confirm : '',
Init : function()
{
this.state = false;
if (this.html) {
$('body').append(this.html);
if(this.box) this.box = $(this.box);
if(this.title) this.title = $(this.title);
if(this.content) this.content = $(this.content);
if(this.yes) this.yes = $(this.yes);
if(this.no) this.no = $(this.no);
if(this.setting) this.setting = $(this.setting);
if(this.confirm) this.confirm = $(this.confirm);
this.state = true;
}
}
,Alert : function(content, callback)
{
if (this.state == false) {
alert(content);
return;
} else {
if (this.setting.length && this.setting.html()) {
this.confirm.hide();
this.setting.show();
} else {
this.setting.hide();
this.confirm.show();
}
this.title.html(content);
this.box.show();
if (callback) {
this.Bind(callback);
}
}
}
,Confirm : function(content, callback)
{
if (this.state == false) {
alert(content);
return;
} else {
this.confirm.show();
this.setting.hide();
this.title.html(content);
this.box.show();
if(callback)
{
this.Bind(callback);
}
}
}
,Bind : function(callback)
{
if (this.yes.length && callback.yes) {
this.yes.unbind('click').bind('click', callback.yes);
}
if (this.no.length) {
if (callback.no) {
this.no.unbind('click').bind('click', callback.no);
} else {
var self = this;
this.no.unbind('click').bind('click', function()
{
self.Close();
});
}
}
}
,Close : function()
{
this.box.hide();
}
}
//用户相关
var _Dever_User =
{
config : [],
uid : -1,
name : '匿名用户',
Init : function()
{
var self = this;
if (this.config.click) {
for (var i in this.config.click) {
var e = self.config.click[i];
var c = 1;
if (e.indexOf('|') != -1) {
var t = e.split('|');
e = t[0];
c = 2;
}
if ($(e).length) {
$(e).attr('data-i', i);
$(e).attr('data-c', c);
$(e).unbind('click').bind('click', function() {
if ($(this).attr('data-c') == 2) {
var t1 = $(this);
Dever.Confirm(function() {
self.Save($(this).attr('data-i'), t1, config);
});
} else {
self.Save($(this).attr('data-i'), $(this), config);
}
});
}
}
}
}
//通用的保存数据功能
,Save : function(key, e, setting)
{
var self = this;
var config = self.config[key];
if (config.start) {
config.start.call();
}
var send = {};
var callback = function(msg,state) {
if (config.status && $(config.status).length) {
//$(config.status).html(msg).css('visibility','initial');
state ? $(config.status).html(msg).hide() : $(config.status).html(msg).show();
} else if(!state) {
Dever.Out(msg);
}
}
if (typeof(config.input) != 'undefined') {
if (typeof(config.input) == 'string' && config.input == 'parent') {
if (e.attr('dever-send')) {
send[e.attr('dever-send')] = e.attr('dever-' + e.attr('dever-send'));
}
send.id = e.attr('dever-id');
send.value = e.parent().find('input').val();
if (!send.id || !send.value) {
callback(config.error);
return;
}
} else if (typeof(config.input) == 'string' && config.input == 'click') {
if (e.attr('dever-send')) {
var a = e.attr('dever-send').split('&');
for (var i in a) {
if (typeof(a[i]) == 'string') {
var b = a[i].split('=');
send[b[0]] = b[1];
}
}
}
} else if (typeof(config.input) == 'object') {
for (var i in config.input) {
var option = false;
var input = config.input[i];
if (input.indexOf('|') != -1) {
var t = input.split('|');
input = t[0];
option = true;
}
var m = true;
var el = $(input);
//e.get(0).tagName == 'TEXTAREA'
send[i] = el.val();
if (option == false) {
if (send[i] && el.attr('dever-match')) {
var r = new RegExp(el.attr('dever-match'));
m = r.test(send[i]);
}
if (send[i] && el.attr('dever-value')) {
m = $(el.attr('dever-value')).val() == send[i];
}
if (!send[i] || m != true) {
var error = el.attr('dever-error') ? el.attr('dever-error') : config.error;
callback(error);
return;
}
}
}
}
}
if (!send) {
callback(config.error);
return;
}
if (!config.url) {
config.url = e.attr('dever-send');
}
callback(1,1);
config.url = Dever.CallUrl(config.url);
if (setting.proxy) {
$.post(config.url, send, function(t) {
t = eval('(' + t + ')');
Dever.Msg(t, callback, (config.callback ? function(msg){config.callback(e,msg,t)} : false));
});
} else {
$.getJSON(config.url, send, function(t) {
Dever.Msg(t, callback, (config.callback ? function(msg){config.callback(e,msg,t)} : false));
});
}
}
};
//编辑器相关
var _Dever_Editor =
{
state : false,
editors : [],
Init : function()
{
if (typeof marked == 'function') {
this.state = true;
} else {
this.state = false;
}
this.SetMark();
var self = this;
if ($('.dever-note').length) {
$('.dever-note').each(function() {
self.InitEditor($(this));
})
}
}
,InitEditor : function(e)
{
var id = e.attr('id');
var key = e.attr('key');
if (config.uid && config.uid > 0) {
var toolbar = [
'title'
,'bold'
,'italic'
,'underline'
,'strikethrough'
,'fontScale'
,'color'
,'ol'
,'ul'
,'blockquote'
,'code'
,'table'
,'link'
,'image'
,'hr'
,'indent'
,'outdent'
,'alignment'
//,'emoji'
];
} else {
var toolbar = [
'title'
,'bold'
,'fontScale'
,'color'
,'ol'
,'ul'
,'blockquote'
,'indent'
,'outdent'
,'alignment'
];
}
if (typeof(this.editors[id]) == "undefined") {
this.editors[id] = new Simditor({
textarea: e,
upload:
{
url: config.upload + '.simditor',
params: {key:key},
fileKey: 'file',
connectionCount: 10,
leaveConfirm: 'Uploading is in progress, are you sure to leave this page?'
},
toolbar : toolbar
/*
,emoji:
{
imagePath: config.lib + 'simditor/plugins/emoji/images/emoji/'
}
*/
});
}
}
,SetMark : function()
{
return;
}
,GetMark : function(content)
{
if (this.state == true) {
return marked(content);
}
return content;
}
};
//模板
var _Dever_Template =
{
state : false,
method : '',
element : '',
data : '',
param : '',
attr : '',
Init : function()
{
if (this.Check()) {
var url = config.proxyTemplateUrl;
var send = {};
var parsing = [];
$("dever").each(function(){
parsing.push($(this).html());
$(this).remove();
});
send.url = location.href;
send.parsing = parsing.join('');
send.html = $("html").html();
//$("html").html('dever template loading...');
$.ajax({
type: "POST",
url: url,
data: send,
dataType: "json",
success: function(result){
$("html").html(result.data);
}
});
}
}
,Check : function()
{
if ($("dever").length) {
this.state = true;
} else {
this.state = false;
}
return this.state;
}
}