suco-api.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. $.fn.ready(function(){
  2. $.initSucoJS();
  3. });
  4. $.initSucoJS = function() {
  5. //处理select选中
  6. $('[data-selected]').each(function(idx){
  7. var v = $(this).data('selected');
  8. $('option', this).each(function(){
  9. if ($(this).val()==v) {
  10. $(this).prop('selected', 1);
  11. }
  12. })
  13. });
  14. $('[data-plugin]').each(function(idx){
  15. var el = $(this);
  16. var plugin = $(this).data('plugin');
  17. switch(plugin) {
  18. case 'chk-group':
  19. $('[role=chk-all]', el).unbind('click');
  20. $('[role=chk-all]', el).bind('click', function(){
  21. var chk = $(this).is(":checked") ? true : false;
  22. $('[role=chk-item]', el).prop('checked', chk);
  23. });
  24. $('[role=chk-item]', el).unbind('click');
  25. $('[role=chk-item]', el).bind('click', function(){
  26. var chk = true;
  27. $('[role=chk-item]', el).each(function(){
  28. if (!$(this).is(":checked")) chk = false;
  29. });
  30. $('[role=chk-all]', el).prop('checked', chk);
  31. });
  32. break;
  33. case 'accordion':
  34. $('[role=toggle]', el).unbind('click');
  35. $('[role=toggle]', el).bind('click', function(){
  36. var parent = $(this).parents('li');
  37. var target = $(this).attr("href");
  38. var flag = $(parent).hasClass('active');
  39. $('.active>[role=collapse]', el).slideUp('fast');
  40. $('.active', el).removeClass('active');
  41. if (flag) {
  42. $('[role=collapse]', parent).slideUp('fast');
  43. $(parent).removeClass('active');
  44. } else {
  45. $('[role=collapse]', parent).slideDown('fast');
  46. $(parent).addClass('active');
  47. }
  48. return false;
  49. });
  50. break;
  51. case 'date-picker':
  52. seajs.use('/assets/js/datetime/datetime.sea.js', function(){
  53. $(el).datetimepicker({
  54. format: 'yyyy/mm/dd',
  55. language: 'zh-CN',
  56. weekStart: 1,
  57. todayBtn: 1,
  58. autoclose: 1,
  59. minView: 2,
  60. todayHighlight: 1,
  61. startView: 2,
  62. forceParse: 0,
  63. showMeridian: 0
  64. });
  65. })
  66. break;
  67. case 'datetime-picker':
  68. seajs.use('/assets/js/datetime/datetime.sea.js', function(){
  69. $(el).datetimepicker({
  70. format: 'yyyy/mm/dd hh:ii',
  71. language: 'zh-CN',
  72. weekStart: 1,
  73. todayBtn: 0,
  74. autoclose: 1,
  75. minView: 0,
  76. todayHighlight: 1,
  77. startView: 2,
  78. forceParse: 0,
  79. showMeridian: 0,
  80. minuteStep: 5
  81. });
  82. })
  83. break;
  84. case 'editor':
  85. var token = $(el).data('token');
  86. seajs.use('/assets/js/kindeditor/kindeditor.sea.js', function(editor){
  87. editor.create(el, {
  88. uploadJson : '/misc.php?act=upload&token='+token,
  89. filterMode : false,
  90. themeType : 'bootstrap',
  91. cssPath : '/assets/css/richtext.css',
  92. bodyClass: 'richtext',
  93. width: '100%',
  94. minWidth : 450,
  95. minHeight: 360,
  96. fontSizeTable : ['9px', '10px', '12px', '14px', '16px', '18px', '24px', '32px', '38px', '42px'],
  97. items : [
  98. 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
  99. 'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage',
  100. 'flash', 'media', 'insertfile', 'table', /*'hr', 'emoticons',*/ 'baidumap', 'pagebreak',
  101. 'anchor', 'link', 'unlink', '/',
  102. 'cut', 'copy', 'paste',
  103. 'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',
  104. 'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',
  105. 'superscript', '|', 'clearhtml', 'quickformat', /*'selectall', */'preview', 'print', 'template', 'code', 'source', 'fullscreen',
  106. ],
  107. afterBlur: function () {
  108. this.sync();
  109. }
  110. });
  111. });
  112. break;
  113. case 'code-editor':
  114. var mode = $(el).data('mode');
  115. el.hide();
  116. seajs.use('/assets/js/ace/ace.sea.js', function(ace){
  117. var domId = 'ace-'+idx;
  118. var editorDom = '<div class="form-control" style="height:350px; font-size:13px" id="'+domId+'"></div>';
  119. $(editorDom).insertAfter(el);
  120. var editor = ace.edit(domId);
  121. editor.getSession().setValue($(el).val());
  122. //editor.setTheme("ace/theme/twilight");
  123. editor.getSession().setMode('ace/mode/'+mode);
  124. editor.getSession().on('change', function(e) {
  125. var val = editor.getSession().getValue();
  126. $(el).val(val);
  127. });
  128. });
  129. case 'tab':
  130. var e = $(el).data('event') ? $(el).data('event') : 'click';
  131. $('[role=nav] a', el).unbind();
  132. $('[role=nav] a', el).bind(e, function(){
  133. //$('[role=content]', el).hide();
  134. $(this).parents('ul').siblings('[role=content]').hide();
  135. $(this).parent('li').siblings().removeClass('active');
  136. $(this).parent('li').addClass('active');
  137. var target = $(this, el).attr('href');
  138. $(target).show();
  139. return false;
  140. });
  141. break;
  142. case 'scrollspy':
  143. $('[role=nav] a', el).unbind();
  144. $('[role=nav] a', el).bind('click', function(){
  145. $('[role=nav] li', el).removeClass('active');
  146. $(this).parent('li').addClass('active');
  147. });
  148. var s = new Object();
  149. $('[role=anchor]', el).each(function(){
  150. var n = $(this).attr('name');
  151. var p = $(this).offset();
  152. $(this).data('top', p.top);
  153. //s.push({name:n, top:p.top})
  154. });
  155. break;
  156. case 'img-selector':
  157. var id = 'img-selector';
  158. var limit = $(el).data('limit');
  159. var ipt = $(el).data('ipt');
  160. var ref = $(el).data('ref')?$(el).data('ref'):0;
  161. var dom = $('[data-ipt="'+ipt+'"]>.sui-img-selector-box');
  162. var url = '/?module=admincp&controller=image&action=selector&ipt='+ipt+'&ref='+ref+'&limit='+limit+'&idx='+idx;
  163. var val = $('.sui-img-value', el).html();
  164. if (val) {
  165. if (limit>1) {
  166. $.applyImages(eval('(' + val + ')'), ipt, dom);
  167. } else {
  168. $.applyImage(val, ipt, dom);
  169. }
  170. }
  171. $('[role="btn"]', el).unbind('click');
  172. $('[role="btn"]', el).bind('click', function(){
  173. $('#'+id).remove();
  174. $('body').append('<div class="modal fade" id="'+id+'" tabindex="-1" role="dialog" aria-hidden="false"></div>');
  175. $('#'+id).modal("show");
  176. $('#'+id).load(url,function(){
  177. $('.btn-ok').click(function(){
  178. if (limit>1) {
  179. $.applyImages(images, ipt, dom);
  180. } else {
  181. $.applyImage(images[0].src, ipt, dom);
  182. }
  183. });
  184. })
  185. });
  186. break;
  187. case 'user-selector':
  188. var id = 'user-selector';
  189. var role = $(el).data('role');
  190. var url = '/?module=admincp&controller=user&action=selector&role='+role;
  191. $('[role="btn"]', el).unbind('click');
  192. $('[role="btn"]', el).bind('click', function(){
  193. $('#'+id).remove();
  194. $('body').append('<div class="modal fade" id="'+id+'" tabindex="-1" role="dialog" aria-hidden="false"></div>');
  195. $('#'+id).load(url,function(){
  196. $('#'+id).modal("show");
  197. });
  198. });
  199. break;
  200. case 'tagsinput':
  201. seajs.use(['/assets/js/tagsinput/bootstrap-tagsinput.js',
  202. '/assets/js/tagsinput/bootstrap-tagsinput.css'], function(){
  203. var remoteUrl = $(el).data('typeahead');
  204. if (remoteUrl) {
  205. $(el).tagsinput({
  206. typeaheadjs: {
  207. valueKey: 'value',
  208. source: function(query, process) {
  209. $.getJSON(remoteUrl, {q:query}, function (data) {
  210. process(data);
  211. });
  212. }
  213. }
  214. });
  215. } else {
  216. $(el).tagsinput();
  217. }
  218. });
  219. break;
  220. case 'dragsort':
  221. seajs.use('/assets/js/dragsort/jquery.dragsort-0.5.2.js', function(dragsort){
  222. $(el).dragsort({
  223. dragSelectorExclude: "input, textarea, select, a, button",
  224. dragSelector:'tr',
  225. });
  226. });
  227. break;
  228. case 'star':
  229. var tpl = '<li></li><li></li><li></li><li></li><li></li>';
  230. if (!el.html()) { el.html(tpl); }
  231. $('li', el).hover(function(){
  232. $(this).addClass('hover');
  233. $(this).prevAll().addClass('hover')
  234. $(this).nextAll().removeClass('hover');
  235. }, function(){
  236. $('li', el).removeClass('hover');
  237. });
  238. $('li', el).click(function(){
  239. $('li', el).removeClass('hover');
  240. $(this).addClass('on');
  241. $(this).prevAll().addClass('on')
  242. $(this).nextAll().removeClass('on');
  243. var n = $(el).data('name');
  244. var v = $('.on', el).length;
  245. var t = $(this).text();
  246. $('.star-val,.star-text', el).remove();
  247. $(el).append('<input class="star-val" type="hidden" name="'+n+'" value="'+v+'" />');
  248. $(el).append('<span class="star-text">'+t+'</span>');
  249. });
  250. //初始化
  251. var dv = Math.round($(el).data('val'));
  252. if (dv) {
  253. $('li:eq('+(dv-1)+')', el).trigger('click');
  254. }
  255. if (!$(el).data('name')) {
  256. $('li', el).unbind();
  257. }
  258. break;
  259. }
  260. });
  261. seajs.use('/assets/js/validator/validator.sea.js', function(validator){
  262. $('form').each(function(){
  263. validator(this);
  264. })
  265. });
  266. $('.sui-form').off('keypress');
  267. $('.sui-form').on('keypress', function(event){
  268. if (!(event.which == 115 && (event.ctrlKey||event.metaKey)) && !(event.which == 19)) return true;
  269. $('.sui-form').trigger('submit');
  270. return false;
  271. });
  272. }