├── favicon.png
├── app.template.db
├── images
├── blank.gif
├── select.png
├── slider.png
├── select2.png
├── custom_hex.png
├── custom_hsb_b.png
├── custom_hsb_h.png
├── custom_hsb_s.png
├── custom_indic.gif
├── custom_rgb_b.png
├── custom_rgb_g.png
├── custom_rgb_r.png
├── custom_submit.png
├── colorpicker_hex.png
├── colorpicker_hsb_b.png
├── colorpicker_hsb_h.png
├── colorpicker_hsb_s.png
├── colorpicker_indic.gif
├── colorpicker_overlay.png
├── colorpicker_rgb_b.png
├── colorpicker_rgb_g.png
├── colorpicker_rgb_r.png
├── colorpicker_select.gif
├── colorpicker_submit.png
├── custom_background.png
└── colorpicker_background.png
├── config
├── define.php
└── lang.php
├── js
├── jquery.spectrum-ja.min.js
├── common.min.js
├── common.js
├── io_panel.min.js
├── io_board.min.js
├── linkify-jquery.min.js
├── io_panel.js
├── io_board.js
├── io_card.min.js
├── remodal.min.js
├── io_card.js
├── linkify.min.js
└── spectrum.min.js
├── logout.php
├── export.php
├── .htaccess
├── README.md
├── css
├── app.min.css
├── remodal.css
├── app.css
├── remodal-default-theme.css
└── spectrum.min.css
├── class
└── apiFunc.php
├── models
├── boards.php
├── panels.php
└── cards.php
├── pdo.php
└── index.php
/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/favicon.png
--------------------------------------------------------------------------------
/app.template.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/app.template.db
--------------------------------------------------------------------------------
/images/blank.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/blank.gif
--------------------------------------------------------------------------------
/images/select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/select.png
--------------------------------------------------------------------------------
/images/slider.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/slider.png
--------------------------------------------------------------------------------
/images/select2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/select2.png
--------------------------------------------------------------------------------
/images/custom_hex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_hex.png
--------------------------------------------------------------------------------
/images/custom_hsb_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_hsb_b.png
--------------------------------------------------------------------------------
/images/custom_hsb_h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_hsb_h.png
--------------------------------------------------------------------------------
/images/custom_hsb_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_hsb_s.png
--------------------------------------------------------------------------------
/images/custom_indic.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_indic.gif
--------------------------------------------------------------------------------
/images/custom_rgb_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_rgb_b.png
--------------------------------------------------------------------------------
/images/custom_rgb_g.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_rgb_g.png
--------------------------------------------------------------------------------
/images/custom_rgb_r.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_rgb_r.png
--------------------------------------------------------------------------------
/images/custom_submit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_submit.png
--------------------------------------------------------------------------------
/images/colorpicker_hex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_hex.png
--------------------------------------------------------------------------------
/images/colorpicker_hsb_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_hsb_b.png
--------------------------------------------------------------------------------
/images/colorpicker_hsb_h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_hsb_h.png
--------------------------------------------------------------------------------
/images/colorpicker_hsb_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_hsb_s.png
--------------------------------------------------------------------------------
/images/colorpicker_indic.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_indic.gif
--------------------------------------------------------------------------------
/images/colorpicker_overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_overlay.png
--------------------------------------------------------------------------------
/images/colorpicker_rgb_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_rgb_b.png
--------------------------------------------------------------------------------
/images/colorpicker_rgb_g.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_rgb_g.png
--------------------------------------------------------------------------------
/images/colorpicker_rgb_r.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_rgb_r.png
--------------------------------------------------------------------------------
/images/colorpicker_select.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_select.gif
--------------------------------------------------------------------------------
/images/colorpicker_submit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/colorpicker_submit.png
--------------------------------------------------------------------------------
/images/custom_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikiakira/php-simple-kanban/HEAD/images/custom_background.png
--------------------------------------------------------------------------------
/config/define.php:
--------------------------------------------------------------------------------
1 | ");a=a.replace(/(\n|\r)/g,"
")}return a};
--------------------------------------------------------------------------------
/export.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/js/common.js:
--------------------------------------------------------------------------------
1 | function exePost(mode, action, id, title, contents, label, etc1) {
2 | return $.ajax({
3 | type: "POST",
4 | url: "pdo.php",
5 | dataType: 'text',
6 | data: {
7 | mode: mode,
8 | action: action,
9 | id: id,
10 | label: label,
11 | title: title,
12 | contents: contents,
13 | etc1: etc1
14 | }
15 | })
16 | }
17 |
18 | // JS で PHP の nl2br
19 | function nl2br(str) {
20 | if(!str){
21 | }else{
22 | str = str.replace(/\r\n/g, "
");
23 | str = str.replace(/(\n|\r)/g, "
");
24 | }
25 | return str;
26 | }
--------------------------------------------------------------------------------
/.htaccess:
--------------------------------------------------------------------------------
1 | # HTML を PHP として動かす
2 | AddType application/x-httpd-php .php .html
3 |
4 | Options -Indexes
5 |
6 |
5 |
6 | ## Overview
7 | A web app that was inspired by Trello and cloned only the "Kanban" function with PHP.
8 |
9 | Since the data is managed by SQlite, after downloading,
10 | it can be started immediately by just rewriting the password with the setting file.
11 |
12 |
13 | ## Requirement
14 |
15 | * PHP 5.6+ (PDO is required)
16 | * Idirom
17 | * SQLite
18 | * Bootstrap 3.x
19 | * jQuery 2.x
20 | * jQuery UI 1.x
21 | * jQuery.spectrum
22 | * linkify-jquery
23 | * Remodal.js
24 |
25 |
26 | ## Installation
27 | * Copy app.template.db and rename it to app.db
28 | * Open config / define.php and set the password
29 | * Open config / define.php and please choose a language. Change the value of "const LANG". The default is en in English. Japanese is ja.
30 |
31 |
32 | ## BackUp
33 | (Current hidden mode) When logged in, you access export.php then download the database backup (app.db)
34 |
35 |
36 | ## Copyright and license
37 | Code copyright 2017 the Web Atelier Midori Inc. Code released under the MIT License.
38 |
39 | ## Donation
40 | You can use this software for free, but I am seeking donations.
41 | https://PayPal.Me/ateliermidori/500
42 |
43 | ## An explanation of Japanese
44 | For commentary on Japanese please see [official blog] (https://web-atelier-midori.com/blog/php/1817/)
45 | (日本語の解説は [公式ブログ](https://web-atelier-midori.com/blog/php/1817/)をご覧下さい).
46 |
--------------------------------------------------------------------------------
/js/io_panel.min.js:
--------------------------------------------------------------------------------
1 | $(function(){$("#panel_add").on("click",function(b){b.preventDefault();b.stopPropagation();var a=$(".pannel").length;if(a>7){alert("パネルを増やせるのは7個までです");return}$("#panel_area").append($("#hidden .panel").html());$("#panel_area .panel-body").sortable({connectWith:".panel-body"});return false});$(document).on("click",".panel h2",function(){var a=$(this).attr("data-id");$("#panel-modal").attr("data-id",a);if(a==="new"){$("#panel-modal #panel_title_text").val("")}else{$("#panel-modal #panel_title_text").val($(this).html())}$("#panel-modal").modal("show")});$(document).on("click","#panel-modal .modal-dialog .modal-footer button#save-panel-btn",function(){var c=$("#panel_title_text").val();var a=$("#panel-modal").attr("data-id");var b=$("#board_title").attr("data-id");if((typeof a==="undefined")||(a==="")){a="new"}exePost("panels","save",a,c,b).done(function(e){var d=$.parseJSON(e);if(a==="new"){$("#panel_area .panel").find("h2[data-id='new']").eq(0).html(d.title);$("#panel_area .panel").find("h2[data-id='new']").eq(0).attr("data-id",d.id)}else{$("#panel_area .panel h2[data-id='"+a+"']").attr("data-id",d.id);$("#panel_area .panel h2[data-id='"+a+"']").html(d.title)}$("#panel-modal").modal("hide")}).fail(function(d){alert("system Error")})});$(document).on("click","#panel-modal .modal-dialog .modal-footer button#delete-btn",function(){if(window.confirm("このパネルを削除します。よろしいですか?")){var a=$("#panel-modal").attr("data-id");exePost("panels","del",a,"","","","").done(function(){$("#panel_area .panel h2[data-id='"+a+"']").parent().parent().remove();$("#panel-modal").modal("hide")}).fail(function(){alert("system Error")})}})});
--------------------------------------------------------------------------------
/js/io_board.min.js:
--------------------------------------------------------------------------------
1 |
2 | $(function(){$(document).on("click","#board_title h1",function(){$("#board-modal").modal("show")});$(document).on("click","#board_add",function(){$("#board_new_title_text").val("");$("#board_new_color").val("#000");$("#board-add-modal").modal("show")});$(document).on("click","#board-modal #save-btn",function(){var b=$("#board_title_text").val();var a=$("#board_color").val();var c=$("#board_title").attr("data-id");exePost("boards","save",c,b,a).done(function(e){var d=$.parseJSON(e);$("#board_title h1").html(d.title);$("body").css("background-color",d.board_color);$("input#board_title_text").val(d.title);$("#board_title").attr("data-id",d.id);getBoardList();$("#board-modal").modal("hide")}).fail(function(d){alert("system Error")})});$(document).on("click","#board-add-modal #save-btn",function(){var b=$("#board_new_title_text").val();var a=$("#board_new_color").val();exePost("boards","save","new",b,a).done(function(d){var c=$.parseJSON(d);$("#board_title h1").html(c.title);$("body").css("background-color",c.board_color);$("input#board_title_text").val(c.title);$("#board_title").attr("data-id",c.id);$("#panel_area").html("");getBoardList();$("#board-add-modal").modal("hide")}).fail(function(c){alert("system Error")})});$(document).on("click","#board-modal #delete-btn",function(){if(window.confirm("このボードを削除します。よろしいですか?")){var a=$("#board_title").attr("data-id");exePost("boards","del",a,"","","","").done(function(){exePost("boards","first","","","").done(function(c){var b=$.parseJSON(c);$("#board_title h1").html(b.title);$("#board_title").attr("data-id",b.id);$("body").css("background-color",b.board_color);$("input#board_title_text").val(b.title);$("input#board_color").val(b.board_color);getPanels(b.id)}).fail(function(b){alert("system Error")});getBoardList();$("#board-modal").modal("hide")}).fail(function(){alert("system Error")})}})});
--------------------------------------------------------------------------------
/css/app.min.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";body{background-color:#00aecc;display:block;height:auto}#app_header{width:100%;height:auto;position:fixed;top:0;left:0}#board_header{width:100%;display:block;margin-top:30px;position:static}div#board_list{display:inline}#dropdownMenu1,#board_add,#panel_add,#card_search,#logout{font-size:12px;line-height:1.5;border-radius:3px}div#card_search{width:200px;text-align:left;padding:0;border:0}#card_search input.form-control.searchbox{width:200px}#contents_view{word-wrap:break-word}input#card_title_text{width:100%}textarea#contents{width:100%}#panel_area{min-width:2000px;height:auto;overflow-x:scroll;margin-top:50px}.pannel{width:240px;height:500px;overflow-y:auto;display:block;float:left;margin:8px;padding:8px}.panel-heading{padding:4px 10px}.card{width:98%;min-height:70px;margin:auto;text-align:left;display:block;margin:4px 4px 8px 4px;padding:4px}#hidden{display:none}#board_title{width:auto;min-width:200px;float:left;top:26px}#board_title h1{font-size:20px;font-weight:bold;color:#fff;padding:4px;margin:0}#board_title h1:hover{opacity:.55;cursor:pointer}h2{font-size:14px;font-weight:bold;color:#666;margin:0;line-height:1;cursor:pointer}#board_all_list{width:auto;height:auto;position:fixed;left:0;top:30px;z-index:100;margin:0;padding:0}#board_all_list ul{padding:0}.dropdown-menu{top:0}#board_all_list li{cursor:pointer;color:#fff;letter-spacing:1px}.card.panel.panel-default{cursor:pointer}.modal-body{padding:0}.modal-footer{border-top:0}input{margin-bottom:10px}#contents_toggle{font-weight:normal;text-decoration:underline;color:#444;cursor:pointer}.sp-replacer{margin-bottom:10px}#logout{float:right}#login_box{margin-top:200px}#login_box .white{color:#fff}#login_box input[type="submit"]{margin-top:10px}#login_box label{color:#fff}.btn.btn-default.card_add{color:#ccc}.btn.btn-default.card_add:hover{color:#666;text-decoration:underline}.dropdown-menu{z-index:25000 !important}div#searchResult{text-align:left;height:300px;overflow:auto}
--------------------------------------------------------------------------------
/css/remodal.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Remodal - v1.1.1
3 | * Responsive, lightweight, fast, synchronized with CSS animations, fully customizable modal window plugin with declarative configuration and hash tracking.
4 | * http://vodkabears.github.io/remodal/
5 | *
6 | * Made by Ilya Makarov
7 | * Under MIT License
8 | */
9 |
10 | /* ==========================================================================
11 | Remodal's necessary styles
12 | ========================================================================== */
13 |
14 | /* Hide scroll bar */
15 |
16 | html.remodal-is-locked {
17 | overflow: hidden;
18 |
19 | -ms-touch-action: none;
20 | touch-action: none;
21 | }
22 |
23 | /* Anti FOUC */
24 |
25 | .remodal,
26 | [data-remodal-id] {
27 | display: none;
28 | }
29 |
30 | /* Necessary styles of the overlay */
31 |
32 | .remodal-overlay {
33 | position: fixed;
34 | z-index: 9999;
35 | top: -5000px;
36 | right: -5000px;
37 | bottom: -5000px;
38 | left: -5000px;
39 |
40 | display: none;
41 | }
42 |
43 | /* Necessary styles of the wrapper */
44 |
45 | .remodal-wrapper {
46 | position: fixed;
47 | z-index: 10000;
48 | top: 0;
49 | right: 0;
50 | bottom: 0;
51 | left: 0;
52 |
53 | display: none;
54 | overflow: auto;
55 |
56 | text-align: center;
57 |
58 | -webkit-overflow-scrolling: touch;
59 | }
60 |
61 | .remodal-wrapper:after {
62 | display: inline-block;
63 |
64 | height: 100%;
65 | margin-left: -0.05em;
66 |
67 | content: "";
68 | }
69 |
70 | /* Fix iPad, iPhone glitches */
71 |
72 | .remodal-overlay,
73 | .remodal-wrapper {
74 | -webkit-backface-visibility: hidden;
75 | backface-visibility: hidden;
76 | }
77 |
78 | /* Necessary styles of the modal dialog */
79 |
80 | .remodal {
81 | position: relative;
82 |
83 | outline: none;
84 |
85 | -webkit-text-size-adjust: 100%;
86 | -ms-text-size-adjust: 100%;
87 | text-size-adjust: 100%;
88 | }
89 |
90 | .remodal-is-initialized {
91 | /* Disable Anti-FOUC */
92 | display: inline-block;
93 | }
94 |
--------------------------------------------------------------------------------
/class/apiFunc.php:
--------------------------------------------------------------------------------
1 | getMessage());
85 | }
86 | return true;
87 |
88 | }
89 |
90 | }
91 |
--------------------------------------------------------------------------------
/models/boards.php:
--------------------------------------------------------------------------------
1 | select('*')
10 | ->where('del_flg', 0)
11 | ->order_by_asc('title')
12 | ->find_many();
13 | return $searchResult;
14 | }
15 |
16 | // 最初の1件を取得
17 | public static function findFirst(){
18 | $searchResult = ORM::for_table(self::$table_name)
19 | ->select('*')
20 | ->where('del_flg', 0)
21 | ->order_by_asc('title')
22 | ->limit(1)
23 | ->find_one();
24 | return $searchResult;
25 | }
26 |
27 | // リスト(ページング用)
28 | public static function lists($page, $keyword=''){
29 | // ページの開始位置を計算
30 | $offset = 0;
31 | if($page[1] !== 1){
32 | $offset = ( ( $page[0] -1 ) * $page[1] ); // 指定されたページ * 1ページあたりの件数
33 | }
34 | $searchResult = ORM::for_table(self::$table_name)
35 | ->select('*')
36 | ->where_like('username', '%'.$keyword.'%')
37 | ->where('del_flg', 0)
38 | ->limit($page[1]) // 1ページあたりの件数
39 | ->offset($offset) // ページの開始位置
40 | ->order_by_desc('id')
41 | ->find_many();
42 | return $searchResult;
43 | }
44 |
45 | // 1件
46 | public static function find($id){
47 | $searchResult = ORM::for_table(self::$table_name)
48 | ->select('*')
49 | ->where('del_flg', 0)
50 | ->where('id', $id)
51 | ->find_one();
52 | return $searchResult;
53 | }
54 |
55 | // 論理削除
56 | public static function del($id){
57 | $delete = ORM::for_table(self::$table_name)->find_one($id);
58 | $delete->del_flg = 1;
59 | return $delete->save();
60 | }
61 |
62 | // 追加
63 | public static function create($array){
64 | $create = ORM::for_table(self::$table_name)->create();
65 | foreach ($array as $key => $value) {
66 | $create->{$key} = $value;
67 | }
68 | $create->save();
69 | return $create->id();
70 | }
71 |
72 | // 更新
73 | public static function edit($id, $array){
74 | $edit = ORM::for_table(self::$table_name)->find_one($id);
75 | foreach ($array as $key => $value) {
76 | $edit->{$key} = $value;
77 | }
78 | return $edit->save();
79 | }
80 |
81 | }
82 |
--------------------------------------------------------------------------------
/js/linkify-jquery.min.js:
--------------------------------------------------------------------------------
1 | "use strict";!function(e,t,n){var i=function(t,n){function i(e,t,n){var i=n[n.length-1];e.replaceChild(i,t);for(var r=n.length-2;r>=0;r--)e.insertBefore(n[r],i),i=n[r]}function r(e,t,n){for(var i=[],r=e,a=Array.isArray(r),o=0,r=a?r:r[Symbol.iterator]();;){var l;if(a){if(o>=r.length)break;l=r[o++]}else{if(o=r.next(),o.done)break;l=o.value}var f=l;if("nl"===f.type&&t.nl2br)i.push(n.createElement("br"));else if(f.isLink&&t.check(f)){var s=t.resolve(f),c=s.formatted,u=s.formattedHref,d=s.tagName,m=s.className,y=s.target,h=s.events,k=s.attributes,v=n.createElement(d);if(v.setAttribute("href",u),m&&v.setAttribute("class",m),y&&v.setAttribute("target",y),k)for(var g in k)v.setAttribute(g,k[g]);if(h)for(var b in h)v.addEventListener?v.addEventListener(b,h[b]):v.attachEvent&&v.attachEvent("on"+b,h[b]);v.appendChild(n.createTextNode(c)),i.push(v)}else i.push(n.createTextNode(f.toString()))}return i}function a(e,t,n){if(!e||e.nodeType!==d)throw new Error("Cannot linkify "+e+" - Invalid DOM Node type");var o=t.ignoreTags;if("A"===e.tagName||s.contains(o,e.tagName))return e;for(var l=e.firstChild;l;){switch(l.nodeType){case d:a(l,t,n);break;case m:var c=l.nodeValue,y=f(c);if(0===y.length||1===y.length&&y[0]instanceof u)break;var h=r(y,t,n);i(e,l,h),l=h[h.length-1]}l=l.nextSibling}return e}function o(t,n){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];try{i=i||document||e&&e.document||global&&global.document}catch(r){}if(!i)throw new Error("Cannot find document implementation. If you are in a non-browser environment like Node.js, pass the document implementation as the third argument to linkifyElement.");return n=new c(n),a(t,n,i)}function l(t){function n(e){return e=o.normalize(e),this.each(function(){o.helper(this,e,i)})}var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t.fn=t.fn||{};try{i=i||document||e&&e.document||global&&global.document}catch(r){}if(!i)throw new Error("Cannot find document implementation. If you are in a non-browser environment like Node.js, pass the document implementation as the second argument to linkify/jquery");"function"!=typeof t.fn.linkify&&(t.fn.linkify=n,t(i).ready(function(){t("[data-linkify]").each(function(){var e=t(this),n=e.data(),i=n.linkify,r=n.linkifyNlbr,a={attributes:n.linkifyAttributes,defaultProtocol:n.linkifyDefaultProtocol,events:n.linkifyEvents,format:n.linkifyFormat,formatHref:n.linkifyFormatHref,nl2br:!!r&&0!==r&&"false"!==r,tagName:n.linkifyTagname,target:n.linkifyTarget,className:n.linkifyClassName||n.linkifyLinkclass,validate:n.linkifyValidate,ignoreTags:n.linkifyIgnoreTags},o="this"===i?e:e.find(i);o.linkify(a)})}))}t="default"in t?t["default"]:t;var f=n.tokenize,s=n.options,c=s.Options,u=n.parser.TOKENS.TEXT,d=1,m=3;o.helper=a,o.normalize=function(e){return new c(e)};try{!define&&(e.linkifyElement=o)}catch(y){}return l}(n,t);"function"!=typeof n.fn.linkify&&i(n)}(window,linkify,jQuery);
--------------------------------------------------------------------------------
/js/io_panel.js:
--------------------------------------------------------------------------------
1 | $(function() {
2 | // パネルを増やす
3 | $("#panel_add").on("click", function (e) {
4 | e.preventDefault();
5 | e.stopPropagation();
6 | // パネルを追加したら、その時の個数を取得する
7 | var count = $(".pannel").length;
8 | if (count > 7) {
9 | alert('パネルを増やせるのは7個までです');
10 | return;
11 | }
12 | // 空のパネルを追加
13 | $("#panel_area").append($("#hidden .panel").html());
14 |
15 | // パネルの中のカードがドラッグできるように再設定
16 | $("#panel_area .panel-body").sortable({
17 | connectWith: '.panel-body'
18 | });
19 | return false;
20 | });
21 |
22 | // パネルのタイトルをクリックしたら編集モーダルを開く
23 | $(document).on("click", ".panel h2", function () {
24 | var id = $(this).attr("data-id");
25 | $("#panel-modal").attr("data-id", id);
26 | if(id ==='new'){
27 | $('#panel-modal #panel_title_text').val('');
28 | }else{
29 | $('#panel-modal #panel_title_text').val($(this).html());
30 | }
31 |
32 | $('#panel-modal').modal('show');
33 | });
34 |
35 | // パネル・モーダルの保存ボタンをクリックしたら保存処理を行う
36 | $(document).on("click", "#panel-modal .modal-dialog .modal-footer button#save-panel-btn", function () {
37 | var panel_title_text = $('#panel_title_text').val();
38 | var panel_id = $('#panel-modal').attr('data-id');
39 | var board_id = $('#board_title').attr("data-id");
40 | // IDが取得できない場合は新規分
41 | if ( (typeof panel_id === "undefined") || ( panel_id === "")) {
42 | panel_id = 'new';
43 | }
44 | exePost("panels", "save", panel_id, panel_title_text, board_id).done(function(data) {
45 | var detail = $.parseJSON(data);
46 | // タイトルを保存したデータで更新する
47 | // new の時は、data-id = new を対象に、それ以外は既存のIDで検索する
48 | if(panel_id === 'new'){
49 | $("#panel_area .panel").find("h2[data-id='new']").eq(0).html(detail['title']);
50 | $("#panel_area .panel").find("h2[data-id='new']").eq(0).attr("data-id", detail['id']);
51 | }else{
52 | $("#panel_area .panel h2[data-id='"+panel_id+"']").attr("data-id", detail['id']);
53 | $("#panel_area .panel h2[data-id='"+panel_id+"']").html(detail['title']);
54 | }
55 | $('#panel-modal').modal('hide'); // モーダルを閉じる
56 | }).fail(function(data) {
57 | alert("system Error");
58 | });
59 | });
60 |
61 | // パネル・モーダルの削除ボタンを押下したら確認する
62 | $(document).on("click", "#panel-modal .modal-dialog .modal-footer button#delete-btn", function () {
63 | if(window.confirm('このパネルを削除します。よろしいですか?')){
64 | var panel_id = $('#panel-modal').attr('data-id');
65 | exePost("panels", "del", panel_id, "", "", "", "").done(function() {
66 | $("#panel_area .panel h2[data-id='"+panel_id+"']").parent().parent().remove();
67 | $('#panel-modal').modal('hide'); // モーダルを閉じる
68 | }).fail(function() {
69 | alert("system Error");
70 | });
71 | }
72 | });
73 |
74 | });
75 |
76 |
--------------------------------------------------------------------------------
/models/panels.php:
--------------------------------------------------------------------------------
1 | select('*')
10 | ->where('del_flg', 0)
11 | ->where('boards_id', $id)
12 | ->order_by_asc('order_key')
13 | ->find_many();
14 | return $searchResult;
15 |
16 | }
17 |
18 | // 最初の1件を取得
19 | public static function findFirst(){
20 | $searchResult = ORM::for_table(self::$table_name)
21 | ->select('*')
22 | ->where('del_flg', 0)
23 | ->order_by_asc('id')
24 | ->limit(1)
25 | ->find_one();
26 | return $searchResult;
27 | }
28 |
29 |
30 | // ラベル絞込み全件
31 | public static function findLabel($labelId){
32 | $searchResult = ORM::for_table(self::$table_name)
33 | ->select('*')
34 | ->where('labelid', $labelId)
35 | ->where('del_flg', 0)
36 | ->order_by_asc('title')
37 | ->find_many();
38 | return $searchResult;
39 | }
40 |
41 | // リスト(ページング用)
42 | public static function lists($page, $keyword=''){
43 | // ページの開始位置を計算
44 | $offset = 0;
45 | if($page[1] !== 1){
46 | $offset = ( ( $page[0] -1 ) * $page[1] ); // 指定されたページ * 1ページあたりの件数
47 | }
48 | $searchResult = ORM::for_table(self::$table_name)
49 | ->select('*')
50 | ->where_like('username', '%'.$keyword.'%')
51 | ->where('del_flg', 0)
52 | ->limit($page[1]) // 1ページあたりの件数
53 | ->offset($offset) // ページの開始位置
54 | ->order_by_desc('id')
55 | ->find_many();
56 | return $searchResult;
57 | }
58 |
59 | // 1件
60 | public static function find($id){
61 | $searchResult = ORM::for_table(self::$table_name)
62 | ->select('*')
63 | ->where('del_flg', 0)
64 | ->where('id', $id)
65 | ->find_one();
66 | return $searchResult;
67 | }
68 |
69 | // 論理削除
70 | public static function del($id){
71 | $delete = ORM::for_table(self::$table_name)->find_one($id);
72 | $delete->del_flg = 1;
73 | return $delete->save();
74 | }
75 |
76 | // 追加
77 | public static function create($array) {
78 |
79 | $lastOneResult = ORM::for_table(self::$table_name)
80 | ->select('*')
81 | ->where('del_flg', 0)
82 | ->order_by_desc('id')
83 | ->find_one();
84 | $newOrderNum = $lastOneResult['id'] + 1;
85 |
86 | $create = ORM::for_table(self::$table_name)->create();
87 | foreach ($array as $key => $value) {
88 | $create->{$key} = $value;
89 | }
90 | $create->order_key = $newOrderNum; // 並び順は最後のIDに+1
91 | $create->save();
92 | return $create->id();
93 | }
94 |
95 | // 更新
96 | public static function edit($id, $array){
97 | $edit = ORM::for_table(self::$table_name)->find_one($id);
98 | foreach ($array as $key => $value) {
99 | $edit->{$key} = $value;
100 | }
101 | return $edit->save();
102 | }
103 |
104 | }
105 |
--------------------------------------------------------------------------------
/js/io_board.js:
--------------------------------------------------------------------------------
1 | $(function() {
2 |
3 | // ボードのタイトルをクリックしたら更新用モーダルを開く
4 | $(document).on("click", "#board_title h1", function () {
5 | $('#board-modal').modal('show');
6 | });
7 |
8 | // ボードの追加ボタンを押下したら編集モーダルを開く
9 | $(document).on("click", "#board_add", function () {
10 | $("#board_new_title_text").val('');
11 | $("#board_new_color").val('#000');
12 | $('#board-add-modal').modal('show');
13 | });
14 |
15 | // ボード・更新用モーダルの保存ボタンをクリックしたら保存処理を行う
16 | $(document).on("click", "#board-modal #save-btn", function () {
17 | var board_title_text = $('#board_title_text').val();
18 | var board_color = $('#board_color').val();
19 | var id = $('#board_title').attr("data-id");
20 | exePost("boards", "save", id, board_title_text, board_color).done(function(data) {
21 | var detail = $.parseJSON(data);
22 | $('#board_title h1').html(detail['title']);
23 | $('body').css('background-color', detail['board_color']);
24 | $("input#board_title_text").val(detail['title']);
25 | $('#board_title').attr("data-id", detail['id']);
26 | getBoardList(); // ボード一覧を取得しなおす
27 | $('#board-modal').modal('hide'); // モーダルを閉じる
28 | }).fail(function(data) {
29 | alert("system Error");
30 | });
31 | });
32 |
33 | // ボード・登録モーダルの保存ボタンをクリックしたら保存処理を行う
34 | $(document).on("click", "#board-add-modal #save-btn", function () {
35 | var board_title_text = $('#board_new_title_text').val();
36 | var board_color = $('#board_new_color').val();
37 | exePost("boards", "save", "new", board_title_text, board_color).done(function(data) {
38 | var detail = $.parseJSON(data);
39 | $('#board_title h1').html(detail['title']);
40 | $('body').css('background-color', detail['board_color']);
41 | $("input#board_title_text").val(detail['title']);
42 | $('#board_title').attr("data-id", detail['id']);
43 | $("#panel_area").html(''); // 新規のボードなので、パネルをクリアする
44 | getBoardList(); // ボード一覧を取得しなおす
45 | $('#board-add-modal').modal('hide'); // モーダルを閉じる
46 | }).fail(function(data) {
47 | alert("system Error");
48 | });
49 | });
50 |
51 |
52 | // ボード・モーダルの削除ボタンをクリックしたら確認する
53 | $(document).on("click", "#board-modal #delete-btn", function () {
54 | if (window.confirm('このボードを削除します。よろしいですか?')) {
55 | var id = $('#board_title').attr("data-id");
56 | exePost("boards", "del", id, "", "", "", "").done(function () {
57 | // ボードを削除したので、初期表示をやり直す
58 | exePost("boards", "first", "", "", "").done(function (data) {
59 | var detail = $.parseJSON(data);
60 | $('#board_title h1').html(detail['title']);
61 | $('#board_title').attr('data-id', detail['id']);
62 | $('body').css('background-color', detail['board_color'])
63 | $("input#board_title_text").val(detail['title']);
64 | $("input#board_color").val(detail['board_color']);
65 |
66 | // ボードに関連するパネルを表示する
67 | getPanels(detail['id']);
68 | }).fail(function (data) {
69 | alert("system Error");
70 | });
71 | getBoardList(); // ボード一覧を取得しなおす
72 | $('#board-modal').modal('hide'); // モーダルを閉じる
73 | }).fail(function () {
74 | alert("system Error");
75 | });
76 | }
77 | });
78 | });
79 |
80 |
--------------------------------------------------------------------------------
/models/cards.php:
--------------------------------------------------------------------------------
1 | select('*')
10 | ->where('del_flg', 0)
11 | ->where('panels_id', $id)
12 | ->order_by_asc('order_key')
13 | ->find_many();
14 | return $searchResult;
15 |
16 | }
17 | // 検索
18 | public static function search($keyword){
19 | $searchResult = ORM::for_table(self::$table_name)
20 | ->table_alias('c')
21 | ->select('c.id')
22 | ->select('c.title')
23 | ->select('c.panels_id')
24 | ->select('p.boards_id')
25 | ->join('panels', 'c.panels_id = p.id', 'p')
26 | ->where_raw('(c.title LIKE ? OR contents LIKE ?)', array('%'.$keyword.'%', '%'.$keyword.'%'))
27 | ->where('c.del_flg', 0)
28 | ->order_by_asc('c.order_key')
29 | ->limit(100)
30 | ->find_many();
31 | return $searchResult;
32 |
33 | }
34 |
35 | // ラベル絞込み全件
36 | public static function findLabel($labelId){
37 | $searchResult = ORM::for_table(self::$table_name)
38 | ->select('*')
39 | ->where('labelid', $labelId)
40 | ->where('del_flg', 0)
41 | ->order_by_asc('title')
42 | ->find_many();
43 | return $searchResult;
44 | }
45 |
46 | // リスト(ページング用)
47 | public static function lists($page, $keyword=''){
48 | // ページの開始位置を計算
49 | $offset = 0;
50 | if($page[1] !== 1){
51 | $offset = ( ( $page[0] -1 ) * $page[1] ); // 指定されたページ * 1ページあたりの件数
52 | }
53 | $searchResult = ORM::for_table(self::$table_name)
54 | ->select('*')
55 | ->where_like('username', '%'.$keyword.'%')
56 | ->where('del_flg', 0)
57 | ->limit($page[1]) // 1ページあたりの件数
58 | ->offset($offset) // ページの開始位置
59 | ->order_by_desc('id')
60 | ->find_many();
61 | return $searchResult;
62 | }
63 |
64 | // 1件
65 | public static function find($id){
66 | $searchResult = ORM::for_table(self::$table_name)
67 | ->select('*')
68 | ->where('del_flg', 0)
69 | ->where('id', $id)
70 | ->find_one();
71 | return $searchResult;
72 | }
73 |
74 | // 論理削除
75 | public static function del($id){
76 | $delete = ORM::for_table(self::$table_name)->find_one($id);
77 | $delete->del_flg = 1;
78 | return $delete->save();
79 | }
80 |
81 | // 追加
82 | public static function create($array) {
83 |
84 | $lastOneResult = ORM::for_table(self::$table_name)
85 | ->select('*')
86 | ->where('del_flg', 0)
87 | ->order_by_desc('id')
88 | ->find_one();
89 | $newOrderNum = $lastOneResult['id'] + 1;
90 |
91 | $create = ORM::for_table(self::$table_name)->create();
92 | foreach ($array as $key => $value) {
93 | $create->{$key} = $value;
94 | }
95 | $create->order_key = $newOrderNum; // 並び順は最後のIDに+1
96 | $create->save();
97 | return $create->id();
98 | }
99 |
100 | // 更新
101 | public static function edit($id, $array){
102 | $edit = ORM::for_table(self::$table_name)->find_one($id);
103 | foreach ($array as $key => $value) {
104 | $edit->{$key} = $value;
105 | }
106 | return $edit->save();
107 | }
108 |
109 | }
110 |
--------------------------------------------------------------------------------
/config/lang.php:
--------------------------------------------------------------------------------
1 | 'ログイン情報を記録する',
4 | 'LOGIN_BUTTON' => 'ログイン',
5 | 'BOARD' => 'ボード',
6 | 'ADD_BOARD' => 'ボード追加',
7 | 'ADD_PANEL' => 'パネル追加',
8 | 'LOGOUT' => 'ログアウト',
9 | 'ENTER_KEYWORD' => '入力して下さい...',
10 | 'BOARD_EDIT' => 'ボード編集',
11 | 'BOARD_NAME' => 'ボード名',
12 | 'BOARD_COLOR' => 'カラー',
13 | 'BOARD_DELETE' => '削除',
14 | 'BOARD_CLOSE' => '閉じる',
15 | 'BOARD_SAVE' => '保存',
16 | 'BOARD_ADD' => 'ボード追加',
17 | 'EDIT_PANNEL' => 'パネル編集',
18 | 'PANEL_NAME' => '名前',
19 | 'PANEL_DELETE' => '削除',
20 | 'PANEL_CLOSE' => '閉じる',
21 | 'PANEL_SAVE' => '保存',
22 | 'ADD_CARD' => 'カードを追加',
23 | 'EDIT_CARD' => 'カード情報編集',
24 | 'CARD_TITLE' => 'タイトル',
25 | 'COLOR_LABEL' => 'ラベル',
26 | 'CARD_CONTENTS' => '本文',
27 | 'CARD_EDIT' => '編集',
28 | 'CARD_VIEW' => '表示',
29 | 'CARD_DELETE' => '削除',
30 | 'CARD_MOVE' => '移動/複製',
31 | 'CARD_CLOSE' => '閉じる',
32 | 'CARD_SAVE' => '保存',
33 | 'CARD_MOVE_TITLE' => 'カードの移動/複製',
34 | 'CARD_MOVE_BOARD' => 'ボード',
35 | 'CARD_MOVE_PANNEL' => 'パネル',
36 | 'CARD_MOVE_MOVE' => '移動',
37 | 'CARD_MOVE_COPY' => '複製',
38 | 'CARD_MOVE_CLOSE' => '閉じる',
39 | 'CARD_MOVE_EXE' => '実行',
40 | 'TIMEOUT_TITLE' => 'タイムアウト',
41 | 'TIMEOUT_MSG' => '処理に時間がかかっています。
しばらく経ってからやり直して下さい。',
42 | 'SEARCH_RESULT' => '検索結果',
43 | 'SEARCH_COMMENT' => '最大100件まで表示します',
44 | 'DELETE_PANEL_MSG' => 'このパネルを削除します。よろしいですか?',
45 | 'DELETE_CARD_MSG' => 'このカードを削除します。よろしいですか?',
46 | 'DELETE_BOARD_MSG' => 'このボードを削除します。よろしいですか?'
47 | ];
48 |
49 | $en = [
50 | 'LOGIN_COOKIE_MSG' => 'Record login information',
51 | 'LOGIN_BUTTON' => 'Login',
52 | 'BOARD' => 'Board',
53 | 'ADD_BOARD' => 'Add Board',
54 | 'ADD_PANEL' => 'Add Panel',
55 | 'LOGOUT' => 'Logout',
56 | 'ENTER_KEYWORD' => 'Please input',
57 | 'BOARD_EDIT' => 'Board editing',
58 | 'BOARD_NAME' => 'Name',
59 | 'BOARD_COLOR' => 'Color',
60 | 'BOARD_DELETE' => 'Delete',
61 | 'BOARD_CLOSE' => 'Close',
62 | 'BOARD_SAVE' => 'Save',
63 | 'BOARD_ADD' => 'Board addition',
64 | 'EDIT_PANNEL' => 'Panel editing',
65 | 'PANEL_NAME' => 'Title',
66 | 'PANEL_DELETE' => 'Delete',
67 | 'PANEL_CLOSE' => 'Close',
68 | 'PANEL_SAVE' => 'Save',
69 | 'ADD_CARD' => 'Add Card',
70 | 'EDIT_CARD' => 'Card information editing',
71 | 'CARD_TITLE' => 'Title',
72 | 'COLOR_LABEL' => 'Label',
73 | 'CARD_CONTENTS' => 'Contents',
74 | 'CARD_EDIT' => 'Edit',
75 | 'CARD_VIEW' => 'View',
76 | 'CARD_DELETE' => 'Delete',
77 | 'CARD_MOVE' => 'Move / copy',
78 | 'CARD_CLOSE' => 'Close',
79 | 'CARD_SAVE' => 'Save',
80 | 'CARD_MOVE_TITLE' => 'Move / copy card',
81 | 'CARD_MOVE_BOARD' => 'Boards',
82 | 'CARD_MOVE_PANNEL' => 'Panels',
83 | 'CARD_MOVE_MOVE' => 'Move',
84 | 'CARD_MOVE_COPY' => 'Copy',
85 | 'CARD_MOVE_CLOSE' => 'Close',
86 | 'CARD_MOVE_EXE' => 'Exe',
87 | 'TIMEOUT_TITLE' => 'TimeOut',
88 | 'TIMEOUT_MSG' => 'Processing takes time.
Please try again after a while.',
89 | 'SEARCH_RESULT' => 'Search Results',
90 | 'SEARCH_COMMENT' => 'Up to 100 items will be displayed',
91 | 'DELETE_PANEL_MSG' => 'Delete this panel. Is it OK?',
92 | 'DELETE_CARD_MSG' => 'Delete this card. Is it OK?',
93 | 'DELETE_BOARD_MSG' => 'Delete this board. Is it OK?'
94 | ];
95 |
96 | foreach ((array)${LANG} as $key => $val) {
97 | define($key, $val);
98 | }
99 |
--------------------------------------------------------------------------------
/css/app.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | body {
4 | background-color: rgb(0, 174, 204);
5 | display: block;
6 | height: auto;
7 | }
8 |
9 | #app_header {
10 | width: 100%;
11 | height: auto;
12 | position: fixed;
13 | top: 0;
14 | left: 0;
15 | }
16 |
17 | #board_header {
18 | width: 100%;
19 | display: block;
20 | margin-top: 30px;
21 | position: static;
22 | }
23 |
24 | div#board_list {
25 | display: inline;
26 | }
27 |
28 | #dropdownMenu1,#board_add,#panel_add,#card_search,#logout {
29 | font-size: 12px;
30 | line-height: 1.5;
31 | border-radius: 3px;
32 | }
33 |
34 | div#card_search {
35 | width: 200px;
36 | text-align: left;
37 | padding: 0;
38 | border: 0;
39 | }
40 |
41 | #card_search input.form-control.searchbox {
42 | width: 200px;
43 | }
44 |
45 | #contents_view {
46 | word-wrap: break-word;
47 | }
48 |
49 | input#card_title_text {
50 | width: 100%;
51 | }
52 |
53 | textarea#contents {
54 | width: 100%;
55 | }
56 |
57 | #panel_area {
58 | min-width: 2000px;
59 | height: auto;
60 | overflow-x: scroll;
61 | margin-top: 50px;
62 | }
63 | .pannel {
64 | width: 240px;
65 | height: 500px;
66 | overflow-y: auto;
67 | display: block;
68 | float: left;
69 | margin: 8px;
70 | padding: 8px;
71 | }
72 | .panel-heading {
73 | padding: 4px 10px;
74 | }
75 | .card {
76 | width: 98%;
77 | min-height: 70px;
78 | margin: auto;
79 | text-align: left;
80 | display: block;
81 | margin: 4px 4px 8px 4px;
82 | padding: 4px;
83 | }
84 | #hidden {
85 | display: none;
86 | }
87 |
88 | #board_title {
89 | width: auto;
90 | min-width: 200px;
91 | float: left;
92 | top: 26px;
93 | }
94 | #board_title h1 {
95 | font-size:20px;
96 | font-weight: bold;
97 | color: #fff;
98 | padding: 4px;
99 | margin: 0;
100 | }
101 |
102 | #board_title h1:hover {
103 | opacity: 0.55;
104 | cursor: pointer;
105 | }
106 |
107 | h2 {
108 | font-size: 14px;
109 | font-weight: bold;
110 | color: #666;
111 | margin: 0;
112 | line-height: 1;
113 | cursor: pointer;
114 | }
115 |
116 | /* ボード一覧 */
117 | #board_all_list {
118 | width: auto;
119 | height: auto;
120 | position: fixed;
121 | left: 0;
122 | top: 30px;
123 | z-index: 100;
124 | margin: 0;
125 | padding: 0;
126 | }
127 | #board_all_list ul {
128 | padding: 0;
129 | }
130 |
131 | .dropdown-menu {
132 | top: 0;
133 | }
134 |
135 | #board_all_list li {
136 | cursor: pointer;
137 | color: #fff;
138 | letter-spacing: 1px;
139 | }
140 |
141 | .card.panel.panel-default {
142 | cursor: pointer;
143 | }
144 |
145 | .modal-body {
146 | padding: 0;
147 | }
148 |
149 | .modal-footer {
150 | border-top: none;
151 | }
152 |
153 | input {
154 | margin-bottom: 10px;
155 | }
156 |
157 | #contents_toggle {
158 | font-weight: normal;
159 | text-decoration: underline;
160 | color: #444;
161 | cursor: pointer;
162 | }
163 |
164 | .sp-replacer {
165 | margin-bottom: 10px;
166 | }
167 |
168 | #logout {
169 | float: right;
170 | }
171 |
172 | #login_box {
173 | margin-top: 200px;
174 | }
175 | #login_box .white {
176 | color: #fff;
177 | }
178 |
179 | #login_box input[type="submit"] {
180 | margin-top: 10px;
181 | }
182 |
183 | #login_box label {
184 | color: #fff;
185 | }
186 |
187 | .btn.btn-default.card_add {
188 | color: #ccc;
189 | }
190 |
191 | .btn.btn-default.card_add:hover {
192 | color: #666;
193 | text-decoration: underline;
194 | }
195 |
196 | .dropdown-menu {
197 | z-index: 25000!important;
198 | }
199 |
200 | /* 検索結果 */
201 | div#searchResult {
202 | text-align: left;
203 | height: 300px;
204 | overflow: auto;
205 | }
206 |
--------------------------------------------------------------------------------
/js/io_card.min.js:
--------------------------------------------------------------------------------
1 |
2 | $(function(){$(document).on("click",".panel-body .card",function(){$("#card_title_text").val($(this).html());$("#card-edit").attr("data-id",$(this).attr("cardId"));$("#card-edit").attr("card_panel_id",$(this).parent().parent().find(".panel-heading h2").attr("data-id"));$("#card_label_color").val($(this).attr("label_color"));$("#card-move-modal").attr("data-id",$(this).attr("cardId"));if($(this).attr("cardId")==="new"){$("#card_title_text").val("");$("#contents").val("");$("#contents_view").html("");$("#card_label_color").val("#cccccc");$("#card_label_color").spectrum({showSelectionPalette:true,preferredFormat:"hex",showInput:true,showInitial:true,showPaletteOnly:true,palette:[["#ffffff","#cccccc","#999999","#666666","#333333","#000000"],["#f44336","#ff9800","#ffeb3b","#8bc34a","#4caf50","#03a9f4","#2196f3"]]})}else{exePost("cards","find",$(this).attr("cardId"),"","","","").done(function(b){if(b){var a=$.parseJSON(b);$("#contents").val(a.contents);$("#contents_view").html(nl2br(a.contents)).linkify({target:"_blank"});$("#card_label_color").val(a.label_color);$("#card_label_color").spectrum({showSelectionPalette:true,preferredFormat:"hex",showInput:true,showInitial:true,showPaletteOnly:true,palette:[["#ffffff","#cccccc","#999999","#666666","#333333","#000000"],["#f44336","#ff9800","#ffeb3b","#8bc34a","#4caf50","#03a9f4","#2196f3"]]})}}).fail(function(a){alert("system Error")});$("#contents").css("display","none");$("#contents_view").css("display","block")}$("#card-edit").modal("show")});$(document).on("click","#contents_toggle",function(){$("#contents_view").toggle();$("#contents").toggle();if($("#contents_toggle").html()==="編集"){$("#contents_toggle").html("表示")}else{$("#contents_toggle").html("編集")}});$(document).on("click",".pannel .panel-footer .card_add",function(){$(this).parent().parent().children(".panel .panel-body").append($('
= TIMEOUT_MSG ?>
325 | 326 |= SEARCH_COMMENT ?>
333 | 334 |