├── 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 | 7 | Order Allow,Deny 8 | Deny from all 9 | 10 | 11 | 12 | SetOutputFilter DEFLATE 13 | 14 | # Mozilla4系などの古いブラウザで無効、しかしMSIEは除外 15 | BrowserMatch ^Mozilla/4\.0[678] no-gzip 16 | BrowserMatch ^Mozilla/4 gzip-only-text/html 17 | BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 18 | 19 | # gifやjpgなど圧縮済みのコンテンツは再圧縮しない 20 | SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary 21 | SetEnvIfNoCase Request_URI _\.utxt$ no-gzip 22 | 23 | # htmlやcssなどは圧縮 24 | AddOutputFilterByType DEFLATE text/plain 25 | AddOutputFilterByType DEFLATE text/html 26 | AddOutputFilterByType DEFLATE text/xml 27 | AddOutputFilterByType DEFLATE text/css 28 | AddOutputFilterByType DEFLATE application/xhtml+xml 29 | AddOutputFilterByType DEFLATE application/xml 30 | AddOutputFilterByType DEFLATE application/rss+xml 31 | AddOutputFilterByType DEFLATE application/atom_xml 32 | AddOutputFilterByType DEFLATE application/x-javascript 33 | AddOutputFilterByType DEFLATE application/x-httpd-php 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | php-simple-kanban 2 | ==== 3 | 4 | 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($('
New
'))});$(document).on("click","#card-edit .modal-dialog .modal-footer button#save-btn",function(){var f=$("#card_title_text").val();var d=$("#card_label_color").val();var c=$("#contents").val();var a=$("#card-edit").attr("data-id");var e=$("#board_title").attr("data-id");var b=$("#card-edit").attr("card_panel_id");if((typeof a==="undefined")||(a==="")){a="new"}exePost("cards","save",a,f,b,d,c).done(function(h){var g=$.parseJSON(h);var i=g.label_color;if(i==null){i=""}if($("#panel_area .panel h2[data-id='"+b+"']").parent().parent().find(".panel-body .card[cardId='new']").length>0){$("#panel_area .panel h2[data-id='"+b+"']").parent().parent().find(".panel-body .card[cardId='new']:last-child").html(g.title);$("#panel_area .panel h2[data-id='"+b+"']").parent().parent().find(".panel-body .card[cardId='new']:last-child").attr("style","border-top: 12px solid "+i);$("#panel_area .panel h2[data-id='"+b+"']").parent().parent().find(".panel-body .card[cardId='new']:last-child").attr("cardID",g.id)}else{$(".card[cardId='"+g.id+"']").html(g.title);$(".card[cardId='"+g.id+"']").attr("style","border-top: 12px solid "+i)}$("#card_title_text").val("");$("#card_label_color").val("");$("#contents").val("");$("#card-edit").modal("hide")}).fail(function(g){alert("system Error")})});$(document).on("click","#card-edit .modal-dialog .modal-footer button#delete-btn",function(){if(window.confirm("このカードを削除します。よろしいですか?")){var a=$("#card-edit").attr("data-id");var b=$("#card-edit").attr("card_panel_id");exePost("cards","del",a,"","","","").done(function(){$("#panel_area .panel h2[data-id='"+b+"']").parent().parent().find(".panel-body .card[cardId='"+a+"']").remove();$("#card-edit").modal("hide")}).fail(function(){alert("system Error")})}});$(document).on("click","#card-edit .modal-dialog .modal-footer button#move-btn",function(){$("#card-move-modal").modal("show");$("#board_select").html("");$("#panel_select").html("");exePost("boards","list","","","").done(function(b){var c=$.parseJSON(b);var a="";$.each(c,function(d,e){a+=""});$("#board_select").append(a)}).fail(function(a){alert("system Error")});$(document).on("change","#board_select",function(){exePost("panels","list",$(this).val(),"","").done(function(b){if(b!==false){var c=$.parseJSON(b);var a="";$.each(c,function(d,e){a+=""})}$("#panel_select").html("");$("#panel_select").append(a)}).fail(function(a){alert("system Error")})});$(document).on("click","#card-move-modal .modal-dialog .modal-footer button#save-panel-btn",function(){var a=$("#board_select").val();var d=$("#panel_select").val();var c=$("#card-move-modal").attr("data-id");var b=$("input[name='q']:radio:checked").val();exePost("cards",b,c,d,"","","").done(function(){$("#panel_area").html("");exePost("boards","first","","","").done(function(f){if(f){var e=$.parseJSON(f);$("#board_title h1").html(e.title);$("#board_title").attr("data-id",e.id);$("body").css("background-color",e.board_color);$("input#board_title_text").val(e.title);$("input#board_color").val(e.board_color);$("input#board_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"]]});getPanels(e.id);$("#card-move-modal").modal("hide")}}).fail(function(e){alert("system Error")})}).fail(function(){alert("system Error")})})})}); -------------------------------------------------------------------------------- /css/remodal-default-theme.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 default mobile first theme 12 | ========================================================================== */ 13 | 14 | /* Default theme styles for the background */ 15 | 16 | .remodal-bg.remodal-is-opening, 17 | .remodal-bg.remodal-is-opened { 18 | -webkit-filter: blur(3px); 19 | filter: blur(3px); 20 | } 21 | 22 | /* Default theme styles of the overlay */ 23 | 24 | .remodal-overlay { 25 | background: rgba(43, 46, 56, 0.9); 26 | } 27 | 28 | .remodal-overlay.remodal-is-opening, 29 | .remodal-overlay.remodal-is-closing { 30 | -webkit-animation-duration: 0.3s; 31 | animation-duration: 0.3s; 32 | -webkit-animation-fill-mode: forwards; 33 | animation-fill-mode: forwards; 34 | } 35 | 36 | .remodal-overlay.remodal-is-opening { 37 | -webkit-animation-name: remodal-overlay-opening-keyframes; 38 | animation-name: remodal-overlay-opening-keyframes; 39 | } 40 | 41 | .remodal-overlay.remodal-is-closing { 42 | -webkit-animation-name: remodal-overlay-closing-keyframes; 43 | animation-name: remodal-overlay-closing-keyframes; 44 | } 45 | 46 | /* Default theme styles of the wrapper */ 47 | 48 | .remodal-wrapper { 49 | padding: 10px 10px 0; 50 | } 51 | 52 | /* Default theme styles of the modal dialog */ 53 | 54 | .remodal { 55 | box-sizing: border-box; 56 | width: 100%; 57 | margin-bottom: 10px; 58 | padding: 35px; 59 | 60 | -webkit-transform: translate3d(0, 0, 0); 61 | transform: translate3d(0, 0, 0); 62 | 63 | color: #2b2e38; 64 | background: #fff; 65 | } 66 | 67 | .remodal.remodal-is-opening, 68 | .remodal.remodal-is-closing { 69 | -webkit-animation-duration: 0.3s; 70 | animation-duration: 0.3s; 71 | -webkit-animation-fill-mode: forwards; 72 | animation-fill-mode: forwards; 73 | } 74 | 75 | .remodal.remodal-is-opening { 76 | -webkit-animation-name: remodal-opening-keyframes; 77 | animation-name: remodal-opening-keyframes; 78 | } 79 | 80 | .remodal.remodal-is-closing { 81 | -webkit-animation-name: remodal-closing-keyframes; 82 | animation-name: remodal-closing-keyframes; 83 | } 84 | 85 | /* Vertical align of the modal dialog */ 86 | 87 | .remodal, 88 | .remodal-wrapper:after { 89 | vertical-align: middle; 90 | } 91 | 92 | /* Close button */ 93 | 94 | .remodal-close { 95 | position: absolute; 96 | top: 0; 97 | left: 0; 98 | 99 | display: block; 100 | overflow: visible; 101 | 102 | width: 35px; 103 | height: 35px; 104 | margin: 0; 105 | padding: 0; 106 | 107 | cursor: pointer; 108 | -webkit-transition: color 0.2s; 109 | transition: color 0.2s; 110 | text-decoration: none; 111 | 112 | color: #95979c; 113 | border: 0; 114 | outline: 0; 115 | background: transparent; 116 | } 117 | 118 | .remodal-close:hover, 119 | .remodal-close:focus { 120 | color: #2b2e38; 121 | } 122 | 123 | .remodal-close:before { 124 | font-family: Arial, "Helvetica CY", "Nimbus Sans L", sans-serif !important; 125 | font-size: 25px; 126 | line-height: 35px; 127 | 128 | position: absolute; 129 | top: 0; 130 | left: 0; 131 | 132 | display: block; 133 | 134 | width: 35px; 135 | 136 | content: "\00d7"; 137 | text-align: center; 138 | } 139 | 140 | /* Dialog buttons */ 141 | 142 | .remodal-confirm, 143 | .remodal-cancel { 144 | font: inherit; 145 | 146 | display: inline-block; 147 | overflow: visible; 148 | 149 | min-width: 110px; 150 | margin: 0; 151 | padding: 12px 0; 152 | 153 | cursor: pointer; 154 | -webkit-transition: background 0.2s; 155 | transition: background 0.2s; 156 | text-align: center; 157 | vertical-align: middle; 158 | text-decoration: none; 159 | 160 | border: 0; 161 | outline: 0; 162 | } 163 | 164 | .remodal-confirm { 165 | color: #fff; 166 | background: #81c784; 167 | } 168 | 169 | .remodal-confirm:hover, 170 | .remodal-confirm:focus { 171 | background: #66bb6a; 172 | } 173 | 174 | .remodal-cancel { 175 | color: #fff; 176 | background: #e57373; 177 | } 178 | 179 | .remodal-cancel:hover, 180 | .remodal-cancel:focus { 181 | background: #ef5350; 182 | } 183 | 184 | /* Remove inner padding and border in Firefox 4+ for the button tag. */ 185 | 186 | .remodal-confirm::-moz-focus-inner, 187 | .remodal-cancel::-moz-focus-inner, 188 | .remodal-close::-moz-focus-inner { 189 | padding: 0; 190 | 191 | border: 0; 192 | } 193 | 194 | /* Keyframes 195 | ========================================================================== */ 196 | 197 | @-webkit-keyframes remodal-opening-keyframes { 198 | from { 199 | -webkit-transform: scale(1.05); 200 | transform: scale(1.05); 201 | 202 | opacity: 0; 203 | } 204 | to { 205 | -webkit-transform: none; 206 | transform: none; 207 | 208 | opacity: 1; 209 | 210 | -webkit-filter: blur(0); 211 | filter: blur(0); 212 | } 213 | } 214 | 215 | @keyframes remodal-opening-keyframes { 216 | from { 217 | -webkit-transform: scale(1.05); 218 | transform: scale(1.05); 219 | 220 | opacity: 0; 221 | } 222 | to { 223 | -webkit-transform: none; 224 | transform: none; 225 | 226 | opacity: 1; 227 | 228 | -webkit-filter: blur(0); 229 | filter: blur(0); 230 | } 231 | } 232 | 233 | @-webkit-keyframes remodal-closing-keyframes { 234 | from { 235 | -webkit-transform: scale(1); 236 | transform: scale(1); 237 | 238 | opacity: 1; 239 | } 240 | to { 241 | -webkit-transform: scale(0.95); 242 | transform: scale(0.95); 243 | 244 | opacity: 0; 245 | 246 | -webkit-filter: blur(0); 247 | filter: blur(0); 248 | } 249 | } 250 | 251 | @keyframes remodal-closing-keyframes { 252 | from { 253 | -webkit-transform: scale(1); 254 | transform: scale(1); 255 | 256 | opacity: 1; 257 | } 258 | to { 259 | -webkit-transform: scale(0.95); 260 | transform: scale(0.95); 261 | 262 | opacity: 0; 263 | 264 | -webkit-filter: blur(0); 265 | filter: blur(0); 266 | } 267 | } 268 | 269 | @-webkit-keyframes remodal-overlay-opening-keyframes { 270 | from { 271 | opacity: 0; 272 | } 273 | to { 274 | opacity: 1; 275 | } 276 | } 277 | 278 | @keyframes remodal-overlay-opening-keyframes { 279 | from { 280 | opacity: 0; 281 | } 282 | to { 283 | opacity: 1; 284 | } 285 | } 286 | 287 | @-webkit-keyframes remodal-overlay-closing-keyframes { 288 | from { 289 | opacity: 1; 290 | } 291 | to { 292 | opacity: 0; 293 | } 294 | } 295 | 296 | @keyframes remodal-overlay-closing-keyframes { 297 | from { 298 | opacity: 1; 299 | } 300 | to { 301 | opacity: 0; 302 | } 303 | } 304 | 305 | /* Media queries 306 | ========================================================================== */ 307 | 308 | @media only screen and (min-width: 641px) { 309 | .remodal { 310 | max-width: 700px; 311 | } 312 | } 313 | 314 | /* IE8 315 | ========================================================================== */ 316 | 317 | .lt-ie9 .remodal-overlay { 318 | background: #2b2e38; 319 | } 320 | 321 | .lt-ie9 .remodal { 322 | width: 700px; 323 | } 324 | -------------------------------------------------------------------------------- /js/remodal.min.js: -------------------------------------------------------------------------------- 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 | !function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof exports?b(a,require("jquery")):b(a,a.jQuery||a.Zepto)}(this,function(a,b){"use strict";function c(a){if(w&&"none"===a.css("animation-name")&&"none"===a.css("-webkit-animation-name")&&"none"===a.css("-moz-animation-name")&&"none"===a.css("-o-animation-name")&&"none"===a.css("-ms-animation-name"))return 0;var b,c,d,e,f=a.css("animation-duration")||a.css("-webkit-animation-duration")||a.css("-moz-animation-duration")||a.css("-o-animation-duration")||a.css("-ms-animation-duration")||"0s",g=a.css("animation-delay")||a.css("-webkit-animation-delay")||a.css("-moz-animation-delay")||a.css("-o-animation-delay")||a.css("-ms-animation-delay")||"0s",h=a.css("animation-iteration-count")||a.css("-webkit-animation-iteration-count")||a.css("-moz-animation-iteration-count")||a.css("-o-animation-iteration-count")||a.css("-ms-animation-iteration-count")||"1";for(f=f.split(", "),g=g.split(", "),h=h.split(", "),e=0,c=f.length,b=Number.NEGATIVE_INFINITY;eb&&(b=d);return b}function d(){if(b(document).height()<=b(window).height())return 0;var a,c,d=document.createElement("div"),e=document.createElement("div");return d.style.visibility="hidden",d.style.width="100px",document.body.appendChild(d),a=d.offsetWidth,d.style.overflow="scroll",e.style.width="100%",d.appendChild(e),c=e.offsetWidth,d.parentNode.removeChild(d),a-c}function e(){if(!x){var a,c,e=b("html"),f=k("is-locked");e.hasClass(f)||(c=b(document.body),a=parseInt(c.css("padding-right"),10)+d(),c.css("padding-right",a+"px"),e.addClass(f))}}function f(){if(!x){var a,c,e=b("html"),f=k("is-locked");e.hasClass(f)&&(c=b(document.body),a=parseInt(c.css("padding-right"),10)-d(),c.css("padding-right",a+"px"),e.removeClass(f))}}function g(a,b,c,d){var e=k("is",b),f=[k("is",u.CLOSING),k("is",u.OPENING),k("is",u.CLOSED),k("is",u.OPENED)].join(" ");a.$bg.removeClass(f).addClass(e),a.$overlay.removeClass(f).addClass(e),a.$wrapper.removeClass(f).addClass(e),a.$modal.removeClass(f).addClass(e),a.state=b,!c&&a.$modal.trigger({type:b,reason:d},[{reason:d}])}function h(a,d,e){var f=0,g=function(a){a.target===this&&f++},h=function(a){a.target===this&&0===--f&&(b.each(["$bg","$overlay","$wrapper","$modal"],function(a,b){e[b].off(r+" "+s)}),d())};b.each(["$bg","$overlay","$wrapper","$modal"],function(a,b){e[b].on(r,g).on(s,h)}),a(),0===c(e.$bg)&&0===c(e.$overlay)&&0===c(e.$wrapper)&&0===c(e.$modal)&&(b.each(["$bg","$overlay","$wrapper","$modal"],function(a,b){e[b].off(r+" "+s)}),d())}function i(a){a.state!==u.CLOSED&&(b.each(["$bg","$overlay","$wrapper","$modal"],function(b,c){a[c].off(r+" "+s)}),a.$bg.removeClass(a.settings.modifier),a.$overlay.removeClass(a.settings.modifier).hide(),a.$wrapper.hide(),f(),g(a,u.CLOSED,!0))}function j(a){var b,c,d,e,f={};for(a=a.replace(/\s*:\s*/g,":").replace(/\s*,\s*/g,","),b=a.split(","),e=0,c=b.length;e").addClass(k("overlay")+" "+k("is",u.CLOSED)).hide(),e.append(f.$overlay)),f.$bg=b("."+k("bg")).addClass(k("is",u.CLOSED)),f.$modal=a.addClass(q+" "+k("is-initialized")+" "+f.settings.modifier+" "+k("is",u.CLOSED)).attr("tabindex","-1"),f.$wrapper=b("
").addClass(k("wrapper")+" "+f.settings.modifier+" "+k("is",u.CLOSED)).hide().append(f.$modal),e.append(f.$wrapper),f.$wrapper.on("click."+q,'[data-remodal-action="close"]',function(a){a.preventDefault(),f.close()}),f.$wrapper.on("click."+q,'[data-remodal-action="cancel"]',function(a){a.preventDefault(),f.$modal.trigger(v.CANCELLATION),f.settings.closeOnCancel&&f.close(v.CANCELLATION)}),f.$wrapper.on("click."+q,'[data-remodal-action="confirm"]',function(a){a.preventDefault(),f.$modal.trigger(v.CONFIRMATION),f.settings.closeOnConfirm&&f.close(v.CONFIRMATION)}),f.$wrapper.on("click."+q,function(a){var c=b(a.target);c.hasClass(k("wrapper"))&&f.settings.closeOnOutsideClick&&f.close()})}var n,o,p="remodal",q=a.REMODAL_GLOBALS&&a.REMODAL_GLOBALS.NAMESPACE||p,r=b.map(["animationstart","webkitAnimationStart","MSAnimationStart","oAnimationStart"],function(a){return a+"."+q}).join(" "),s=b.map(["animationend","webkitAnimationEnd","MSAnimationEnd","oAnimationEnd"],function(a){return a+"."+q}).join(" "),t=b.extend({hashTracking:!0,closeOnConfirm:!0,closeOnCancel:!0,closeOnEscape:!0,closeOnOutsideClick:!0,modifier:"",appendTo:null},a.REMODAL_GLOBALS&&a.REMODAL_GLOBALS.DEFAULTS),u={CLOSING:"closing",CLOSED:"closed",OPENING:"opening",OPENED:"opened"},v={CONFIRMATION:"confirmation",CANCELLATION:"cancellation"},w=function(){var a=document.createElement("div").style;return void 0!==a.animationName||void 0!==a.WebkitAnimationName||void 0!==a.MozAnimationName||void 0!==a.msAnimationName||void 0!==a.OAnimationName}(),x=/iPad|iPhone|iPod/.test(navigator.platform);m.prototype.open=function(){var a,c=this;c.state!==u.OPENING&&c.state!==u.CLOSING&&(a=c.$modal.attr("data-remodal-id"),a&&c.settings.hashTracking&&(o=b(window).scrollTop(),location.hash=a),n&&n!==c&&i(n),n=c,e(),c.$bg.addClass(c.settings.modifier),c.$overlay.addClass(c.settings.modifier).show(),c.$wrapper.show().scrollTop(0),c.$modal.focus(),h(function(){g(c,u.OPENING)},function(){g(c,u.OPENED)},c))},m.prototype.close=function(a){var c=this;c.state!==u.OPENING&&c.state!==u.CLOSING&&c.state!==u.CLOSED&&(c.settings.hashTracking&&c.$modal.attr("data-remodal-id")===location.hash.substr(1)&&(location.hash="",b(window).scrollTop(o)),h(function(){g(c,u.CLOSING,!1,a)},function(){c.$bg.removeClass(c.settings.modifier),c.$overlay.removeClass(c.settings.modifier).hide(),c.$wrapper.hide(),f(),g(c,u.CLOSED,!1,a)},c))},m.prototype.getState=function(){return this.state},m.prototype.destroy=function(){var a,c=b[p].lookup;i(this),this.$wrapper.remove(),delete c[this.index],a=b.grep(c,function(a){return!!a}).length,0===a&&(this.$overlay.remove(),this.$bg.removeClass(k("is",u.CLOSING)+" "+k("is",u.OPENING)+" "+k("is",u.CLOSED)+" "+k("is",u.OPENED)))},b[p]={lookup:[]},b.fn[p]=function(a){var c,d;return this.each(function(e,f){d=b(f),null==d.data(p)?(c=new m(d,a),d.data(p,c.index),c.settings.hashTracking&&d.attr("data-remodal-id")===location.hash.substr(1)&&c.open()):c=b[p].lookup[d.data(p)]}),c},b(document).ready(function(){b(document).on("click","[data-remodal-target]",function(a){a.preventDefault();var c=a.currentTarget,d=c.getAttribute("data-remodal-target"),e=b('[data-remodal-id="'+d+'"]');b[p].lookup[e.data(p)].open()}),b(document).find("."+q).each(function(a,c){var d=b(c),e=d.data("remodal-options");e?("string"==typeof e||e instanceof String)&&(e=j(e)):e={},d[p](e)}),b(document).on("keydown."+q,function(a){n&&n.settings.closeOnEscape&&n.state===u.OPENED&&27===a.keyCode&&n.close()}),b(window).on("hashchange."+q,l)})}); -------------------------------------------------------------------------------- /pdo.php: -------------------------------------------------------------------------------- 1 | id); 32 | // var_dump($v->title); 33 | // // echo "

"; 34 | // } 35 | 36 | // var_dump(ORM::get_query_log()); 37 | 38 | if ($apiFunc->is_ajax() ){ 39 | 40 | // 返り値を初期化 41 | $return = []; 42 | $articleDetail = []; 43 | $articleList = []; 44 | 45 | // エスケープするパラメータを設定 46 | $arrays = ['mode', 'action', 'id', 'title', 'contents', 'label', 'etc1']; 47 | foreach ($arrays as $value) { 48 | ${$value} = filter_input(INPUT_POST, $value); 49 | } 50 | 51 | /** 52 | * ボード 53 | */ 54 | if($mode === "boards") { 55 | 56 | // 最初の1件を取得 57 | if($action === "first") { 58 | $val = boards::findFirst(); 59 | if ($val) { 60 | $return = ["id" => $val->id, "title" => $val->title, "board_color" => $val->board_color]; 61 | echo json_encode($return); 62 | } else { 63 | return false; 64 | } 65 | } 66 | // 指定したIDの情報を取得 67 | if($action === "find"){ 68 | $val = boards::find($id); 69 | $return = ["id" => $val->id, "title"=>$val->title, "board_color"=>$val->board_color]; 70 | echo json_encode($return); 71 | } 72 | // 指定したIDで論理削除 73 | if($action === "del"){ 74 | boards::del($id); 75 | } 76 | if($action === "save"){ 77 | // id が new だったら新規登録 78 | if($id === 'new'){ 79 | $id = boards::create(["title"=>$title, 'board_color'=>$contents]); 80 | if($id){ 81 | $val = boards::find($id); 82 | } 83 | }else{ 84 | boards::edit($id, ["title"=>$title, 'board_color'=>$contents]); 85 | $val = boards::find($id); 86 | } 87 | 88 | $return = ["id" => $val->id, "title"=>$val->title, "board_color"=>$val->board_color]; 89 | echo json_encode($return); 90 | } 91 | if($action === "list"){ 92 | $result = boards::findAll(); 93 | foreach( (array)$result as $values){ 94 | $articleList[] = ["id" => $values->id, "title"=>$values->title, "board_color"=>$values->board_color]; 95 | } 96 | echo json_encode($articleList); 97 | } 98 | /* 99 | if($action ==="add"){ 100 | return boards::create(["name"=>$label]); 101 | } 102 | */ 103 | } 104 | 105 | /** 106 | * パネル 107 | */ 108 | if($mode === "panels"){ 109 | if($action === "save"){ 110 | if($id === 'new'){ 111 | $id = panels::create(["title"=>$title, "boards_id"=>$contents]); 112 | if($id){ 113 | $val = panels::find($id); 114 | } 115 | }else{ 116 | panels::edit($id, ["title"=>$title]); 117 | $val = panels::find($id); 118 | } 119 | $return = ["id" => $val->id, "title"=>$val->title]; 120 | echo json_encode($return); 121 | } 122 | 123 | // 指定したIDで論理削除 124 | if($action === "del"){ 125 | panels::del($id); 126 | } 127 | 128 | if($action === "list"){ 129 | $result = panels::findAll($id); 130 | if($result){ 131 | foreach( (array)$result as $values){ 132 | $articleList[] = ["id" => $values->id, "title"=>$values->title]; 133 | } 134 | }else{ 135 | $articleList = false; 136 | } 137 | 138 | echo json_encode($articleList); 139 | } 140 | 141 | // 並び替え 142 | if($action === "sort"){ 143 | $n = 1; 144 | $arrays = json_decode($title, true); 145 | foreach ((array)$arrays as $val) { 146 | panels::edit($val, ["order_key"=>$n]); 147 | $n++; 148 | } 149 | } 150 | } 151 | 152 | /** 153 | * カード 154 | */ 155 | if($mode === "cards"){ 156 | if($action === "list"){ 157 | $result = cards::findAll($id); 158 | if($result){ 159 | foreach( (array)$result as $values){ 160 | $articleList[] = ["id" => $values->id, "title"=>$values->title, "label_color"=>$values->label_color]; 161 | } 162 | }else{ 163 | $articleList = false; 164 | } 165 | 166 | echo json_encode($articleList); 167 | } 168 | 169 | if($action === "search"){ 170 | $result = cards::search($id); 171 | if($result){ 172 | foreach( (array)$result as $values){ 173 | $articleList[] = ["id" => $values->id, "title"=>$values->title, "panels_id" => $values->panels_id, "boards_id" => $values->boards_id]; 174 | } 175 | }else{ 176 | $articleList = false; 177 | } 178 | 179 | echo json_encode($articleList); 180 | } 181 | 182 | // 指定したIDの情報を取得 183 | if($action === "find"){ 184 | $val = cards::find($id); 185 | if ($val) { 186 | $return = ["id" => $val->id, "panels_id" => $val->panels_id, "title" => $val->title, "label_color" => $val->label_color, "contents" => $val->contents]; 187 | echo json_encode($return); 188 | } else { 189 | return false; 190 | } 191 | } 192 | 193 | // 指定したIDで論理削除 194 | if($action === "del"){ 195 | cards::del($id); 196 | } 197 | 198 | // 移動 199 | if($action === "move"){ 200 | cards::edit($id, ["panels_id"=>$title]); 201 | } 202 | 203 | // 複製 204 | if($action === "copy"){ 205 | $val = cards::find($id); 206 | $id = cards::create(["title"=>$val->title, "panels_id"=>$title ,"label_color"=>$val->label_color, "contents"=>$val->contents]); 207 | } 208 | 209 | if($action === "save"){ 210 | if($id === 'new'){ 211 | $id = cards::create(["title"=>$title, "panels_id"=>$contents ,"label_color"=>$label, "contents"=>$etc1]); 212 | if($id){ 213 | $val = cards::find($id); 214 | } 215 | }else{ 216 | cards::edit($id, ["title"=>$title, "panels_id"=>$contents ,"label_color"=>$label, "contents"=>$etc1]); 217 | $val = cards::find($id); 218 | } 219 | $return = ["id" => $val->id, "panels_id"=>$val->panels_id, "title"=>$val->title, "label_color"=>$val->label_color, "contents"=>$val->contents]; 220 | echo json_encode($return); 221 | } 222 | 223 | // 並び替え 224 | if($action === "sort"){ 225 | $n = 1; 226 | $arrays = json_decode($title, true); 227 | foreach ((array)$arrays as $val) { 228 | cards::edit($val, ["panels_id"=>$id, "order_key"=>$n]); 229 | $n++; 230 | } 231 | } 232 | } 233 | 234 | }else{ 235 | echo "system Error"; 236 | } -------------------------------------------------------------------------------- /js/io_card.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | // カードをクリックしたら編集モーダルを開く 4 | $(document).on('click', '.panel-body .card', function() { 5 | $("#card_title_text").val($(this).html()); 6 | $('#card-edit').attr('data-id', $(this).attr("cardId")); 7 | $('#card-edit').attr('card_panel_id', $(this).parent().parent().find('.panel-heading h2').attr("data-id")); 8 | $("#card_label_color").val($(this).attr("label_color")); 9 | // 複製/移動のモーダルのIDを更新する 10 | $("#card-move-modal").attr('data-id', $(this).attr("cardId")); 11 | 12 | if ($(this).attr("cardId") === 'new') { 13 | $("#card_title_text").val(''); 14 | $("#contents").val(''); 15 | $("#contents_view").html(''); 16 | $("#card_label_color").val("#cccccc"); 17 | $("#card_label_color").spectrum({ 18 | showSelectionPalette: true, 19 | preferredFormat: "hex", 20 | showInput: true, 21 | showInitial: true, 22 | showPaletteOnly: true, // 外観をパレットのみにする 23 | palette: [// パレットで使う色を指定 24 | ["#ffffff", "#cccccc", "#999999", "#666666", "#333333", "#000000"], 25 | ["#f44336", "#ff9800", "#ffeb3b", "#8bc34a", "#4caf50", "#03a9f4", "#2196f3"] 26 | ] 27 | }); 28 | } else { 29 | // コンテンツの内容を取得して反映する 30 | exePost("cards", "find", $(this).attr("cardId"), "", "", "", "").done(function (data) { 31 | if (data) { 32 | var detail = $.parseJSON(data); 33 | $("#contents").val(detail['contents']); 34 | $("#contents_view").html(nl2br(detail['contents'])).linkify({ 35 | target: "_blank" // カード内のURLをリンクに置換 36 | }); 37 | 38 | $("#card_label_color").val(detail['label_color']); 39 | $("#card_label_color").spectrum({ 40 | showSelectionPalette: true, 41 | preferredFormat: "hex", 42 | showInput: true, 43 | showInitial: true, 44 | showPaletteOnly: true, // 外観をパレットのみにする 45 | palette: [// パレットで使う色を指定 46 | ["#ffffff", "#cccccc", "#999999", "#666666", "#333333", "#000000"], 47 | ["#f44336", "#ff9800", "#ffeb3b", "#8bc34a", "#4caf50", "#03a9f4", "#2196f3"] 48 | ] 49 | }); 50 | 51 | } 52 | }).fail(function (data) { 53 | alert("system Error"); 54 | }); 55 | 56 | // 初期表示は、編集モードをオフにする 57 | $("#contents").css('display', 'none'); 58 | $("#contents_view").css('display', 'block'); 59 | } 60 | $('#card-edit').modal('show'); 61 | }); 62 | 63 | // カードの「編集」をクリックしたら、コンテンツのビューを切り替える 64 | $(document).on('click', '#contents_toggle', function () { 65 | $("#contents_view").toggle(); 66 | $("#contents").toggle(); 67 | if($("#contents_toggle").html() === "編集"){ 68 | $("#contents_toggle").html("表示"); 69 | }else{ 70 | $("#contents_toggle").html("編集"); 71 | } 72 | }); 73 | 74 | 75 | // カードを増やす 76 | $(document).on('click', '.pannel .panel-footer .card_add', function () { 77 | $(this).parent().parent().children('.panel .panel-body').append($('
New
')); 78 | }); 79 | 80 | 81 | // カード・モーダルの保存ボタンをクリックしたら保存処理を行う 82 | $(document).on("click", "#card-edit .modal-dialog .modal-footer button#save-btn", function () { 83 | var card_title_text = $('#card_title_text').val(); 84 | var card_label_color = $("#card_label_color").val(); 85 | var contents = $("#contents").val(); 86 | var card_id = $('#card-edit').attr('data-id'); 87 | var board_id = $('#board_title').attr("data-id"); 88 | var panel_id = $('#card-edit').attr('card_panel_id'); 89 | 90 | // IDが取得できない場合は新規分 91 | if ( (typeof card_id === "undefined") || ( card_id === "") ) { 92 | card_id = 'new'; 93 | } 94 | exePost("cards", "save", card_id, card_title_text, panel_id, card_label_color, contents).done(function(data) { 95 | var detail = $.parseJSON(data); 96 | var label_color = detail["label_color"]; 97 | if(label_color == null){ 98 | label_color = ""; 99 | } 100 | // 同パネル内に card_id = new が1つ以上あれば、一番最初の要素を更新する 101 | // new がなければ、id があるはずなので、idを元に要素を探して更新する 102 | // タイトルとラベルを保存したデータで更新する 103 | if( $("#panel_area .panel h2[data-id='"+panel_id+"']").parent().parent().find(".panel-body .card[cardId='new']").length > 0) { 104 | $("#panel_area .panel h2[data-id='"+panel_id+"']").parent().parent().find(".panel-body .card[cardId='new']:last-child").html(detail["title"]); 105 | $("#panel_area .panel h2[data-id='"+panel_id+"']").parent().parent().find(".panel-body .card[cardId='new']:last-child").attr("style", "border-top: 12px solid "+label_color); 106 | // 最後にIDをnewから取得したIDに変更する 107 | $("#panel_area .panel h2[data-id='"+panel_id+"']").parent().parent().find(".panel-body .card[cardId='new']:last-child").attr("cardID", detail["id"]); 108 | }else{ 109 | $(".card[cardId='"+detail["id"]+"']").html(detail["title"]); 110 | $(".card[cardId='"+detail["id"]+"']").attr("style", "border-top: 12px solid "+label_color); 111 | } 112 | 113 | // モーダルの中をリセットしてからモーダルを閉じる 114 | $('#card_title_text').val(''); 115 | $("#card_label_color").val(''); 116 | $("#contents").val(''); 117 | $('#card-edit').modal('hide'); 118 | }).fail(function(data) { 119 | alert("system Error"); 120 | }); 121 | }); 122 | 123 | // カード・モーダルの削除ボタン押下で削除確認を表示 124 | $(document).on("click", "#card-edit .modal-dialog .modal-footer button#delete-btn", function () { 125 | if (window.confirm('このカードを削除します。よろしいですか?')) { 126 | var card_id = $('#card-edit').attr('data-id'); 127 | var panel_id = $('#card-edit').attr('card_panel_id'); 128 | exePost("cards", "del", card_id, "", "", "", "").done(function () { 129 | $("#panel_area .panel h2[data-id='" + panel_id + "']").parent().parent().find(".panel-body .card[cardId='" + card_id + "']").remove(); 130 | $('#card-edit').modal('hide'); 131 | }).fail(function () { 132 | alert("system Error"); 133 | }); 134 | } 135 | }); 136 | 137 | 138 | // カード・モーダルの移動/複製ボタン押下で専用モーダルを開く 139 | $(document).on("click", "#card-edit .modal-dialog .modal-footer button#move-btn", function () { 140 | $('#card-move-modal').modal('show'); 141 | // ボードリストを取得し、モーダルに反映する 142 | $("#board_select").html(''); 143 | $("#panel_select").html(''); 144 | exePost("boards", "list", "", "", "").done(function(data) { 145 | var obj = $.parseJSON(data); 146 | var lists = ""; 147 | $.each(obj, function(index, value) { 148 | lists += ""; 149 | }); 150 | $("#board_select").append(lists); 151 | }).fail(function(data) { 152 | alert("system Error"); 153 | }); 154 | // ボードリストが選択されたら、パネルリストを更新する 155 | $(document).on("change", "#board_select", function () { 156 | exePost("panels", "list", $(this).val(), "", "").done(function(data) { 157 | if(data !==false){ 158 | var obj = $.parseJSON(data); 159 | var lists = ""; 160 | $.each(obj, function(index, value) { 161 | lists += ""; 162 | }); 163 | } 164 | $("#panel_select").html(''); 165 | $("#panel_select").append(lists); 166 | }).fail(function(data) { 167 | alert("system Error"); 168 | }); 169 | }); 170 | 171 | // 実行ボタンが押下されたら、フォームの値を取得して処理する 172 | $(document).on("click", "#card-move-modal .modal-dialog .modal-footer button#save-panel-btn", function () { 173 | var boards_id = $("#board_select").val(); 174 | var panels_id = $("#panel_select").val(); 175 | var id = $("#card-move-modal").attr('data-id'); 176 | var mode = $("input[name='q']:radio:checked").val(); 177 | exePost("cards", mode, id, panels_id, "", "", "").done(function () { 178 | $("#panel_area").html(''); 179 | // ボードは削除フラグが0で最小のidを抽出し、タイトルと背景色を取り出す 180 | exePost("boards", "first", "", "", "").done(function (data) { 181 | if (data) { 182 | var detail = $.parseJSON(data); 183 | $('#board_title h1').html(detail['title']); 184 | $('#board_title').attr('data-id', detail['id']); 185 | $('body').css('background-color', detail['board_color']) 186 | $("input#board_title_text").val(detail['title']); 187 | $("input#board_color").val(detail['board_color']); 188 | $("input#board_color").spectrum({ 189 | showSelectionPalette: true, 190 | preferredFormat: "hex", 191 | showInput: true, 192 | showInitial: true, 193 | showPaletteOnly: true, // 外観をパレットのみにする 194 | palette: [// パレットで使う色を指定 195 | ["#ffffff", "#cccccc", "#999999", "#666666", "#333333", "#000000"], 196 | ["#f44336", "#ff9800", "#ffeb3b", "#8bc34a", "#4caf50", "#03a9f4", "#2196f3"] 197 | ] 198 | }); 199 | // ボードに関連するパネルを表示する 200 | getPanels(detail['id']); 201 | $('#card-move-modal').modal('hide'); 202 | } 203 | }).fail(function (data) { 204 | alert("system Error"); 205 | }); 206 | 207 | }).fail(function () { 208 | alert("system Error"); 209 | }); 210 | }); 211 | }); 212 | }); 213 | -------------------------------------------------------------------------------- /css/spectrum.min.css: -------------------------------------------------------------------------------- 1 | .sp-container{position:absolute;top:0;left:0;display:inline-block;*display:inline;*zoom:1;z-index:9999994;overflow:hidden}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20%}.sp-hue{position:absolute;top:0;right:0;bottom:0;left:84%;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-4px;bottom:-4px;width:6px;left:50%;cursor:pointer;border:1px solid black;background:white;opacity:.8}.sp-alpha{display:none;position:absolute;bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:solid 1px #333}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-container,.sp-replacer,.sp-preview,.sp-dragger,.sp-slider,.sp-alpha,.sp-clear,.sp-alpha-handle,.sp-container.sp-dragging .sp-input,.sp-container button{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-input-disabled .sp-input-container{display:none}.sp-container.sp-buttons-disabled .sp-button-container{display:none}.sp-container.sp-palette-buttons-disabled .sp-palette-button-container{display:none}.sp-palette-only .sp-picker-container{display:none}.sp-palette-disabled .sp-palette-container{display:none}.sp-initial-disabled .sp-initial{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#FFF),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#FFF,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType = 1,startColorstr='#FFFFFFFF',endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81',endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);background:-ms-linear-gradient(top,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);background:-o-linear-gradient(top,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);background:-webkit-gradient(linear,left top,left bottom,from(#f00),color-stop(0.17,#ff0),color-stop(0.33,#0f0),color-stop(0.5,#0ff),color-stop(0.67,#00f),color-stop(0.83,#f0f),to(#f00));background:-webkit-linear-gradient(top,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);background:linear-gradient(to bottom,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000',endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00',endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00',endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff',endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff',endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff',endColorstr='#ff0000')}.sp-hidden{display:none !important}.sp-cf:before,.sp-cf:after{content:"";display:table}.sp-cf:after{clear:both}.sp-cf{*zoom:1}@media(max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;background:#000;cursor:pointer;position:absolute;top:0;left:0}.sp-slider{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:white;opacity:.8}.sp-container{border-radius:0;background-color:#ececec;border:solid 1px #f0c49b;padding:0}.sp-container,.sp-container button,.sp-container input,.sp-color,.sp-hue,.sp-clear{font:normal 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-color,.sp-hue,.sp-clear{border:solid 1px #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{font-size:12px !important;border:1px inset;padding:4px 5px;margin:0;width:100%;background:transparent;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-picker-container,.sp-palette-container{float:left;position:relative;padding:10px;padding-bottom:300px;margin-bottom:-290px}.sp-picker-container{width:172px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;width:24px;height:15px;margin:3px;cursor:pointer;border:solid 2px transparent}.sp-palette .sp-thumb-el:hover,.sp-palette .sp-thumb-el.sp-thumb-active{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:solid 1px #333}.sp-initial span{width:30px;height:25px;border:0;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-palette-button-container,.sp-button-container{float:right}.sp-replacer{margin:0;overflow:hidden;cursor:pointer;padding:4px;display:inline-block;*zoom:1;*display:inline;border:solid 1px #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer:hover,.sp-replacer.sp-active{border-color:#f0c49b;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{position:relative;width:25px;height:20px;border:solid 1px #222;margin-right:5px;float:left;z-index:0}.sp-palette{*width:220px;max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:solid 1px #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#ccc);background-image:-moz-linear-gradient(top,#eee,#ccc);background-image:-ms-linear-gradient(top,#eee,#ccc);background-image:-o-linear-gradient(top,#eee,#ccc);background-image:linear-gradient(to bottom,#eee,#ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;color:#333;font-size:14px;line-height:1;padding:5px 4px;text-align:center;text-shadow:0 1px 0 #eee;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#ddd,#bbb);background-image:-moz-linear-gradient(top,#ddd,#bbb);background-image:-ms-linear-gradient(top,#ddd,#bbb);background-image:-o-linear-gradient(top,#ddd,#bbb);background-image:linear-gradient(to bottom,#ddd,#bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer;text-shadow:0 1px 0 #ddd}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee}.sp-cancel{font-size:11px;color:#d93f3f !important;margin:0;padding:2px;margin-right:5px;vertical-align:middle;text-decoration:none}.sp-cancel:hover{color:#d93f3f !important;text-decoration:underline}.sp-palette span:hover,.sp-palette span.sp-thumb-active{border-color:#000}.sp-preview,.sp-alpha,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-preview-inner,.sp-alpha-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)} -------------------------------------------------------------------------------- /js/linkify.min.js: -------------------------------------------------------------------------------- 1 | !function(){"use strict";var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};!function(e){function n(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=Object.create(t.prototype);for(var a in n)o[a]=n[a];return o.constructor=e,e.prototype=o,e}function o(t){t=t||{},this.defaultProtocol=t.defaultProtocol||h.defaultProtocol,this.events=t.events||h.events,this.format=t.format||h.format,this.formatHref=t.formatHref||h.formatHref,this.nl2br=t.nl2br||h.nl2br,this.tagName=t.tagName||h.tagName,this.target=t.target||h.target,this.validate=t.validate||h.validate,this.ignoreTags=[],this.attributes=t.attributes||t.linkAttributes||h.attributes,this.className=t.className||t.linkClass||h.className;for(var e=t.ignoreTags||h.ignoreTags,n=0;n=r)return[];for(;a1&&void 0!==arguments[1]?arguments[1]:null,n=this.next(new t(""));return n===this.defaultTransition?(n=new this.constructor(e),this.on(t,n)):e&&(n.T=e),n},test:function(t,e){return t instanceof e}}),b=l();b.prototype={toString:function(){return this.v+""}};var v=u(),y=u("@"),k=u(":"),w=u("."),j=u(),x=u(),z=u("\n"),O=u(),S=u("+"),N=u("#"),T=u(),A=u("mailto:"),L=u("?"),E=u("/"),C=u("_"),P=u(),R=u(),q=u(),H=u("{"),B=u("["),U=u("<"),M=u("("),D=u("}"),I=u("]"),K=u(">"),_=u(")"),G=u("&"),Y=Object.freeze({Base:b,DOMAIN:v,AT:y,COLON:k,DOT:w,PUNCTUATION:j,LOCALHOST:x,NL:z,NUM:O,PLUS:S,POUND:N,QUERY:L,PROTOCOL:T,MAILTO:A,SLASH:E,UNDERSCORE:C,SYM:P,TLD:R,WS:q,OPENBRACE:H,OPENBRACKET:B,OPENANGLEBRACKET:U,OPENPAREN:M,CLOSEBRACE:D,CLOSEBRACKET:I,CLOSEANGLEBRACKET:K,CLOSEPAREN:_,AMPERSAND:G}),Q="aaa|aarp|abb|abbott|abogado|ac|academy|accenture|accountant|accountants|aco|active|actor|ad|adac|ads|adult|ae|aeg|aero|af|afl|ag|agency|ai|aig|airforce|airtel|al|alibaba|alipay|allfinanz|alsace|am|amica|amsterdam|an|analytics|android|ao|apartments|app|apple|aq|aquarelle|ar|aramco|archi|army|arpa|arte|as|asia|associates|at|attorney|au|auction|audi|audio|author|auto|autos|avianca|aw|ax|axa|az|azure|ba|baidu|band|bank|bar|barcelona|barclaycard|barclays|bargains|bauhaus|bayern|bb|bbc|bbva|bcg|bcn|bd|be|beats|beer|bentley|berlin|best|bet|bf|bg|bh|bharti|bi|bible|bid|bike|bing|bingo|bio|biz|bj|black|blackfriday|bloomberg|blue|bm|bms|bmw|bn|bnl|bnpparibas|bo|boats|boehringer|bom|bond|boo|book|boots|bosch|bostik|bot|boutique|br|bradesco|bridgestone|broadway|broker|brother|brussels|bs|bt|budapest|bugatti|build|builders|business|buy|buzz|bv|bw|by|bz|bzh|ca|cab|cafe|cal|call|camera|camp|cancerresearch|canon|capetown|capital|car|caravan|cards|care|career|careers|cars|cartier|casa|cash|casino|cat|catering|cba|cbn|cc|cd|ceb|center|ceo|cern|cf|cfa|cfd|cg|ch|chanel|channel|chase|chat|cheap|chloe|christmas|chrome|church|ci|cipriani|circle|cisco|citic|city|cityeats|ck|cl|claims|cleaning|click|clinic|clinique|clothing|cloud|club|clubmed|cm|cn|co|coach|codes|coffee|college|cologne|com|commbank|community|company|compare|computer|comsec|condos|construction|consulting|contact|contractors|cooking|cool|coop|corsica|country|coupon|coupons|courses|cr|credit|creditcard|creditunion|cricket|crown|crs|cruises|csc|cu|cuisinella|cv|cw|cx|cy|cymru|cyou|cz|dabur|dad|dance|date|dating|datsun|day|dclk|de|dealer|deals|degree|delivery|dell|deloitte|delta|democrat|dental|dentist|desi|design|dev|diamonds|diet|digital|direct|directory|discount|dj|dk|dm|dnp|do|docs|dog|doha|domains|download|drive|dubai|durban|dvag|dz|earth|eat|ec|edeka|edu|education|ee|eg|email|emerck|energy|engineer|engineering|enterprises|epson|equipment|er|erni|es|esq|estate|et|eu|eurovision|eus|events|everbank|exchange|expert|exposed|express|fage|fail|fairwinds|faith|family|fan|fans|farm|fashion|fast|feedback|ferrero|fi|film|final|finance|financial|firestone|firmdale|fish|fishing|fit|fitness|fj|fk|flickr|flights|florist|flowers|flsmidth|fly|fm|fo|foo|football|ford|forex|forsale|forum|foundation|fox|fr|fresenius|frl|frogans|frontier|fund|furniture|futbol|fyi|ga|gal|gallery|gallup|game|garden|gb|gbiz|gd|gdn|ge|gea|gent|genting|gf|gg|ggee|gh|gi|gift|gifts|gives|giving|gl|glass|gle|global|globo|gm|gmail|gmbh|gmo|gmx|gn|gold|goldpoint|golf|goo|goog|google|gop|got|gov|gp|gq|gr|grainger|graphics|gratis|green|gripe|group|gs|gt|gu|gucci|guge|guide|guitars|guru|gw|gy|hamburg|hangout|haus|hdfcbank|health|healthcare|help|helsinki|here|hermes|hiphop|hitachi|hiv|hk|hm|hn|hockey|holdings|holiday|homedepot|homes|honda|horse|host|hosting|hoteles|hotmail|house|how|hr|hsbc|ht|hu|hyundai|ibm|icbc|ice|icu|id|ie|ifm|iinet|il|im|immo|immobilien|in|industries|infiniti|info|ing|ink|institute|insurance|insure|int|international|investments|io|ipiranga|iq|ir|irish|is|iselect|ist|istanbul|it|itau|iwc|jaguar|java|jcb|je|jetzt|jewelry|jlc|jll|jm|jmp|jo|jobs|joburg|jot|joy|jp|jpmorgan|jprs|juegos|kaufen|kddi|ke|kerryhotels|kerrylogistics|kerryproperties|kfh|kg|kh|ki|kia|kim|kinder|kitchen|kiwi|km|kn|koeln|komatsu|kp|kpn|kr|krd|kred|kuokgroup|kw|ky|kyoto|kz|la|lacaixa|lamborghini|lamer|lancaster|land|landrover|lanxess|lasalle|lat|latrobe|law|lawyer|lb|lc|lds|lease|leclerc|legal|lexus|lgbt|li|liaison|lidl|life|lifeinsurance|lifestyle|lighting|like|limited|limo|lincoln|linde|link|live|living|lixil|lk|loan|loans|local|locus|lol|london|lotte|lotto|love|lr|ls|lt|ltd|ltda|lu|lupin|luxe|luxury|lv|ly|ma|madrid|maif|maison|makeup|man|management|mango|market|marketing|markets|marriott|mba|mc|md|me|med|media|meet|melbourne|meme|memorial|men|menu|meo|mg|mh|miami|microsoft|mil|mini|mk|ml|mm|mma|mn|mo|mobi|mobily|moda|moe|moi|mom|monash|money|montblanc|mormon|mortgage|moscow|motorcycles|mov|movie|movistar|mp|mq|mr|ms|mt|mtn|mtpc|mtr|mu|museum|mutuelle|mv|mw|mx|my|mz|na|nadex|nagoya|name|natura|navy|nc|ne|nec|net|netbank|network|neustar|new|news|nexus|nf|ng|ngo|nhk|ni|nico|nikon|ninja|nissan|nl|no|nokia|norton|nowruz|np|nr|nra|nrw|ntt|nu|nyc|nz|obi|office|okinawa|om|omega|one|ong|onl|online|ooo|oracle|orange|org|organic|origins|osaka|otsuka|ovh|pa|page|pamperedchef|panerai|paris|pars|partners|parts|party|passagens|pe|pet|pf|pg|ph|pharmacy|philips|photo|photography|photos|physio|piaget|pics|pictet|pictures|pid|pin|ping|pink|pizza|pk|pl|place|play|playstation|plumbing|plus|pm|pn|pohl|poker|porn|post|pr|praxi|press|pro|prod|productions|prof|promo|properties|property|protection|ps|pt|pub|pw|pwc|py|qa|qpon|quebec|quest|racing|re|read|realtor|realty|recipes|red|redstone|redumbrella|rehab|reise|reisen|reit|ren|rent|rentals|repair|report|republican|rest|restaurant|review|reviews|rexroth|rich|ricoh|rio|rip|ro|rocher|rocks|rodeo|room|rs|rsvp|ru|ruhr|run|rw|rwe|ryukyu|sa|saarland|safe|safety|sakura|sale|salon|samsung|sandvik|sandvikcoromant|sanofi|sap|sapo|sarl|sas|saxo|sb|sbs|sc|sca|scb|schaeffler|schmidt|scholarships|school|schule|schwarz|science|scor|scot|sd|se|seat|security|seek|select|sener|services|seven|sew|sex|sexy|sfr|sg|sh|sharp|shell|shia|shiksha|shoes|show|shriram|si|singles|site|sj|sk|ski|skin|sky|skype|sl|sm|smile|sn|sncf|so|soccer|social|softbank|software|sohu|solar|solutions|song|sony|soy|space|spiegel|spot|spreadbetting|sr|srl|st|stada|star|starhub|statefarm|statoil|stc|stcgroup|stockholm|storage|store|studio|study|style|su|sucks|supplies|supply|support|surf|surgery|suzuki|sv|swatch|swiss|sx|sy|sydney|symantec|systems|sz|tab|taipei|taobao|tatamotors|tatar|tattoo|tax|taxi|tc|tci|td|team|tech|technology|tel|telecity|telefonica|temasek|tennis|tf|tg|th|thd|theater|theatre|tickets|tienda|tiffany|tips|tires|tirol|tj|tk|tl|tm|tmall|tn|to|today|tokyo|tools|top|toray|toshiba|total|tours|town|toyota|toys|tp|tr|trade|trading|training|travel|travelers|travelersinsurance|trust|trv|tt|tube|tui|tunes|tushu|tv|tvs|tw|tz|ua|ubs|ug|uk|unicom|university|uno|uol|us|uy|uz|va|vacations|vana|vc|ve|vegas|ventures|verisign|versicherung|vet|vg|vi|viajes|video|viking|villas|vin|vip|virgin|vision|vista|vistaprint|viva|vlaanderen|vn|vodka|volkswagen|vote|voting|voto|voyage|vu|vuelos|wales|walter|wang|wanggou|watch|watches|weather|weatherchannel|webcam|weber|website|wed|wedding|weir|wf|whoswho|wien|wiki|williamhill|win|windows|wine|wme|wolterskluwer|work|works|world|ws|wtc|wtf|xbox|xerox|xin|xperia|xxx|xyz|yachts|yahoo|yamaxun|yandex|ye|yodobashi|yoga|yokohama|youtube|yt|za|zara|zero|zip|zm|zone|zuerich|zw".split("|"),W="0123456789".split(""),X="0123456789abcdefghijklmnopqrstuvwxyz".split(""),Z=[" ","\f","\r","\t","\x0B"," "," ","᠎"],F=[],J=function(t){return new m(t)},V=J(),$=J(O),tt=J(v),et=J(),nt=J(q);V.on("@",J(y)).on(".",J(w)).on("+",J(S)).on("#",J(N)).on("?",J(L)).on("/",J(E)).on("_",J(C)).on(":",J(k)).on("{",J(H)).on("[",J(B)).on("<",J(U)).on("(",J(M)).on("}",J(D)).on("]",J(I)).on(">",J(K)).on(")",J(_)).on("&",J(G)).on([",",";","!",'"',"'"],J(j)),V.on("\n",J(z)).on(Z,nt),nt.on(Z,nt);for(var ot=0;ot=0&&u++,c++,a++;if(!(u<0)){a-=u,c-=u;var p=l.emit();o.push(new p(t.substr(a-c,c)))}}return o},yt=V,kt=Object.freeze({State:m,TOKENS:Y,run:vt,start:yt}),wt=l();wt.prototype={type:"token",isLink:!1,toString:function(){for(var t=[],e=0;e0&&void 0!==arguments[0]?arguments[0]:"http";return{type:this.type,value:this.toString(),href:this.toHref(t)}}};var jt=n(wt,l(),{type:"email",isLink:!0}),xt=n(wt,l(),{type:"email",isLink:!0,toHref:function(){this.v;return"mailto:"+this.toString()}}),zt=n(wt,l(),{type:"text"}),Ot=n(wt,l(),{type:"nl"}),St=n(wt,l(),{type:"url",isLink:!0,toHref:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"http",e=!1,n=!1,o=this.v,a=[],r=0;o[r]instanceof T;)e=!0,a.push(o[r].toString().toLowerCase()),r++;for(;o[r]instanceof E;)n=!0,a.push(o[r].toString()),r++;for(;p(o[r]);)a.push(o[r].toString().toLowerCase()),r++;for(;r=0&&u++,n++,c++;if(u<0)for(var p=n-c;p0&&(o.push(new zt(a)),a=[]),n-=u,c-=u;var h=l.emit();o.push(new h(t.slice(n-c,n)))}}return a.length>0&&o.push(new zt(a)),o},fe=Object.freeze({State:d,TOKENS:Nt,run:ge,start:At});Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)});var me=function(t){return ge(vt(t))},de=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=me(t),o=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:null,n=me(t);return 1===n.length&&n[0].isLink&&(!e||n[0].type===e)};e.find=de,e.inherits=n,e.options=g,e.parser=fe,e.scanner=kt,e.test=be,e.tokenize=me}(self.linkify=self.linkify||{})}(); -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | "; 6 | echo "Setup is not comleted."; 7 | exit(); 8 | } 9 | 10 | 11 | if (extension_loaded('zlib')) { 12 | // ライブラリが存在していたら圧縮する 13 | ob_start('ob_gzhandler'); 14 | } 15 | require_once("class/apiFunc.php"); 16 | require_once("config/define.php"); 17 | require_once("config/lang.php"); 18 | $apiFunc = new apiFunc(); 19 | $_SESSION["active"] = ''; 20 | 21 | // Cookie に値がセット済みならPOSTに値を代入する 22 | if (isset($_COOKIE['pass_word'])) { 23 | $pass = $_COOKIE['pass_word']; 24 | } else { 25 | $pass = ''; 26 | $_POST['pass'] = ''; 27 | $_POST['save'] = ''; 28 | } 29 | 30 | // POSTされたらエスケープ処理をする 31 | if ($apiFunc->is_post()) { 32 | $pass = filter_input(INPUT_POST, 'pass'); 33 | $save = filter_input(INPUT_POST, 'save'); 34 | // 「ログイン情報を記録する」にチェックが入っていたらクッキーを書き込む 35 | if ($save === 'on') { 36 | setcookie('pass_word', $pass, time() + 60 * 60 * 24 * 14); 37 | } 38 | } 39 | 40 | // パスワードが一致したらログイン処理を行う 41 | if ($pass === APP_PASS) { 42 | session_name(SESSION_NAME); 43 | ini_set('session.hash_function', 'sha512'); 44 | ini_set('session.hash_bits_per_character', 6); 45 | ini_set('session.use_strict_mode', 1); 46 | session_start(); 47 | // ログイン済みの情報をセッションにセットする 48 | $_SESSION["active"] = "on"; 49 | } 50 | ?> 51 | 52 | 53 | 54 | 55 | 56 | php-simple-kanban 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | '; 70 | echo '
'; 71 | echo '
'; 72 | echo '
'; 73 | echo ' '; 74 | echo '
'; 75 | echo ' '.LOGIN_COOKIE_MSG.'
'; 76 | echo ''; 77 | echo '
'; 78 | echo '
'; 79 | echo '
'; 80 | echo '
'; 81 | return; 82 | } 83 | ?> 84 |
85 |
86 | 93 |
 
94 |
 
95 | 101 |
 
102 |
103 | 104 |
105 | 106 |
107 | 108 |

109 |
110 | 111 |
112 |
113 |
114 |
115 | 116 | 117 |
118 | 119 |
120 |
121 |
122 |

New

123 |
124 |
125 | 126 |
127 | 130 |
131 |
132 |
133 | 134 | 135 | 136 | 137 | 176 | 177 | 178 | 215 | 216 | 217 | 252 | 253 | 254 | 288 | 289 | 290 | 319 | 320 | 321 |
322 | 323 |

324 |

325 | 326 |
327 | 328 | 329 |
330 | 331 |

332 |

333 |
334 |
335 | 336 | 337 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | ","
","
",""].join(""),markup=function(){var gradientFix="";if(IE){for(var i=1;i<=6;i++){gradientFix+="
"}}return["
","
","
","
","","
","
","
","
","
","
","
","
","
","
","
","
","
","
","
","
","
",gradientFix,"
","
","
","
","
","","
","
","
","","","
","
","
"].join("")}();function paletteTemplate(p,color,className,opts){var html=[];for(var i=0;i')}else{var cls="sp-clear-display";html.push($("
").append($('').attr("title",opts.noColorSelectedText)).html())}}return"
"+html.join("")+"
"}function hideAll(){for(var i=0;iMath.abs(dragY-oldDragY);shiftMovementDirection=furtherFromX?"x":"y"}var setSaturation=!shiftMovementDirection||shiftMovementDirection==="x";var setValue=!shiftMovementDirection||shiftMovementDirection==="y";if(setSaturation){currentSaturation=parseFloat(dragX/dragWidth)}if(setValue){currentValue=parseFloat((dragHeight-dragY)/dragHeight)}isEmpty=false;if(!opts.showAlpha){currentAlpha=1}move()},dragStart,dragStop);if(!!initialColor){set(initialColor);updateUI();currentPreferredFormat=opts.preferredFormat||tinycolor(initialColor).format;addColorToSelectionPalette(initialColor)}else{updateUI()}if(flat){show()}function paletteElementClick(e){if(e.data&&e.data.ignore){set($(e.target).closest(".sp-thumb-el").data("color"));move()}else{set($(e.target).closest(".sp-thumb-el").data("color"));move();updateOriginalInput(true);if(opts.hideAfterPaletteSelect){hide()}}return false}var paletteEvent=IE?"mousedown.spectrum":"click.spectrum touchstart.spectrum";paletteContainer.delegate(".sp-thumb-el",paletteEvent,paletteElementClick);initialColorContainer.delegate(".sp-thumb-el:nth-child(1)",paletteEvent,{ignore:true},paletteElementClick)}function updateSelectionPaletteFromStorage(){if(localStorageKey&&window.localStorage){try{var oldPalette=window.localStorage[localStorageKey].split(",#");if(oldPalette.length>1){delete window.localStorage[localStorageKey];$.each(oldPalette,function(i,c){addColorToSelectionPalette(c)})}}catch(e){}try{selectionPalette=window.localStorage[localStorageKey].split(";")}catch(e){}}}function addColorToSelectionPalette(color){if(showSelectionPalette){var rgb=tinycolor(color).toRgbString();if(!paletteLookup[rgb]&&$.inArray(rgb,selectionPalette)===-1){selectionPalette.push(rgb);while(selectionPalette.length>maxSelectionSize){selectionPalette.shift()}}if(localStorageKey&&window.localStorage){try{window.localStorage[localStorageKey]=selectionPalette.join(";")}catch(e){}}}}function getUniqueSelectionPalette(){var unique=[];if(opts.showPalette){for(var i=0;iviewWidth&&viewWidth>dpWidth?Math.abs(offset.left+dpWidth-viewWidth):0);offset.top-=Math.min(offset.top,offset.top+dpHeight>viewHeight&&viewHeight>dpHeight?Math.abs(dpHeight+inputHeight-extraY):extraY);return offset}function noop(){}function stopPropagation(e){e.stopPropagation()}function bind(func,obj){var slice=Array.prototype.slice;var args=slice.call(arguments,2);return function(){return func.apply(obj,args.concat(slice.call(arguments)))}}function draggable(element,onmove,onstart,onstop){onmove=onmove||function(){};onstart=onstart||function(){};onstop=onstop||function(){};var doc=document;var dragging=false;var offset={};var maxHeight=0;var maxWidth=0;var hasTouch="ontouchstart"in window;var duringDragEvents={};duringDragEvents["selectstart"]=prevent;duringDragEvents["dragstart"]=prevent;duringDragEvents["touchmove mousemove"]=move;duringDragEvents["touchend mouseup"]=stop;function prevent(e){if(e.stopPropagation){e.stopPropagation()}if(e.preventDefault){e.preventDefault()}e.returnValue=false}function move(e){if(dragging){if(IE&&doc.documentMode<9&&!e.button){return stop()}var t0=e.originalEvent&&e.originalEvent.touches&&e.originalEvent.touches[0];var pageX=t0&&t0.pageX||e.pageX;var pageY=t0&&t0.pageY||e.pageY;var dragX=Math.max(0,Math.min(pageX-offset.left,maxWidth));var dragY=Math.max(0,Math.min(pageY-offset.top,maxHeight));if(hasTouch){prevent(e)}onmove.apply(element,[dragX,dragY,e])}}function start(e){var rightclick=e.which?e.which==3:e.button==2;if(!rightclick&&!dragging){if(onstart.apply(element,arguments)!==false){dragging=true;maxHeight=$(element).height();maxWidth=$(element).width();offset=$(element).offset();$(doc).bind(duringDragEvents);$(doc.body).addClass("sp-dragging");move(e);prevent(e)}}}function stop(){if(dragging){$(doc).unbind(duringDragEvents);$(doc.body).removeClass("sp-dragging");setTimeout(function(){onstop.apply(element,arguments)},0)}dragging=false}$(element).bind("touchstart mousedown",start)}function throttle(func,wait,debounce){var timeout;return function(){var context=this,args=arguments;var throttler=function(){timeout=null;func.apply(context,args)};if(debounce)clearTimeout(timeout);if(debounce||!timeout)timeout=setTimeout(throttler,wait)}}function inputTypeColorSupport(){return $.fn.spectrum.inputTypeColorSupport()}var dataID="spectrum.id";$.fn.spectrum=function(opts,extra){if(typeof opts=="string"){var returnValue=this;var args=Array.prototype.slice.call(arguments,1);this.each(function(){var spect=spectrums[$(this).data(dataID)];if(spect){var method=spect[opts];if(!method){throw new Error("Spectrum: no such method: '"+opts+"'")}if(opts=="get"){returnValue=spect.get()}else if(opts=="container"){returnValue=spect.container}else if(opts=="option"){returnValue=spect.option.apply(spect,args)}else if(opts=="destroy"){spect.destroy();$(this).removeData(dataID)}else{method.apply(spect,args)}}});return returnValue}return this.spectrum("destroy").each(function(){var options=$.extend({},opts,$(this).data());var spect=spectrum(this,options);$(this).data(dataID,spect.id)})};$.fn.spectrum.load=true;$.fn.spectrum.loadOpts={};$.fn.spectrum.draggable=draggable;$.fn.spectrum.defaults=defaultOpts;$.fn.spectrum.inputTypeColorSupport=function inputTypeColorSupport(){if(typeof inputTypeColorSupport._cachedResult==="undefined"){var colorInput=$("")[0];inputTypeColorSupport._cachedResult=colorInput.type==="color"&&colorInput.value!==""}return inputTypeColorSupport._cachedResult};$.spectrum={};$.spectrum.localization={};$.spectrum.palettes={};$.fn.spectrum.processNativeColorInputs=function(){var colorInputs=$("input[type=color]");if(colorInputs.length&&!inputTypeColorSupport()){colorInputs.spectrum({preferredFormat:"hex6"})}};(function(){var trimLeft=/^[\s,#]+/,trimRight=/\s+$/,tinyCounter=0,math=Math,mathRound=math.round,mathMin=math.min,mathMax=math.max,mathRandom=math.random;var tinycolor=function(color,opts){color=color?color:"";opts=opts||{};if(color instanceof tinycolor){return color}if(!(this instanceof tinycolor)){return new tinycolor(color,opts)}var rgb=inputToRGB(color);this._originalInput=color,this._r=rgb.r,this._g=rgb.g,this._b=rgb.b,this._a=rgb.a,this._roundA=mathRound(100*this._a)/100,this._format=opts.format||rgb.format;this._gradientType=opts.gradientType;if(this._r<1){this._r=mathRound(this._r)}if(this._g<1){this._g=mathRound(this._g)}if(this._b<1){this._b=mathRound(this._b)}this._ok=rgb.ok;this._tc_id=tinyCounter++};tinycolor.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var rgb=this.toRgb();return(rgb.r*299+rgb.g*587+rgb.b*114)/1e3},setAlpha:function(value){this._a=boundAlpha(value);this._roundA=mathRound(100*this._a)/100;return this},toHsv:function(){var hsv=rgbToHsv(this._r,this._g,this._b);return{h:hsv.h*360,s:hsv.s,v:hsv.v,a:this._a}},toHsvString:function(){var hsv=rgbToHsv(this._r,this._g,this._b);var h=mathRound(hsv.h*360),s=mathRound(hsv.s*100),v=mathRound(hsv.v*100);return this._a==1?"hsv("+h+", "+s+"%, "+v+"%)":"hsva("+h+", "+s+"%, "+v+"%, "+this._roundA+")"},toHsl:function(){var hsl=rgbToHsl(this._r,this._g,this._b);return{h:hsl.h*360,s:hsl.s,l:hsl.l,a:this._a}},toHslString:function(){var hsl=rgbToHsl(this._r,this._g,this._b);var h=mathRound(hsl.h*360),s=mathRound(hsl.s*100),l=mathRound(hsl.l*100);return this._a==1?"hsl("+h+", "+s+"%, "+l+"%)":"hsla("+h+", "+s+"%, "+l+"%, "+this._roundA+")"},toHex:function(allow3Char){return rgbToHex(this._r,this._g,this._b,allow3Char)},toHexString:function(allow3Char){return"#"+this.toHex(allow3Char)},toHex8:function(){return rgbaToHex(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:mathRound(this._r),g:mathRound(this._g),b:mathRound(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+mathRound(this._r)+", "+mathRound(this._g)+", "+mathRound(this._b)+")":"rgba("+mathRound(this._r)+", "+mathRound(this._g)+", "+mathRound(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:mathRound(bound01(this._r,255)*100)+"%",g:mathRound(bound01(this._g,255)*100)+"%",b:mathRound(bound01(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+mathRound(bound01(this._r,255)*100)+"%, "+mathRound(bound01(this._g,255)*100)+"%, "+mathRound(bound01(this._b,255)*100)+"%)":"rgba("+mathRound(bound01(this._r,255)*100)+"%, "+mathRound(bound01(this._g,255)*100)+"%, "+mathRound(bound01(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){if(this._a===0){return"transparent"}if(this._a<1){return false}return hexNames[rgbToHex(this._r,this._g,this._b,true)]||false},toFilter:function(secondColor){var hex8String="#"+rgbaToHex(this._r,this._g,this._b,this._a);var secondHex8String=hex8String;var gradientType=this._gradientType?"GradientType = 1, ":"";if(secondColor){var s=tinycolor(secondColor);secondHex8String=s.toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"},toString:function(format){var formatSet=!!format;format=format||this._format;var formattedString=false;var hasAlpha=this._a<1&&this._a>=0;var needsAlphaFormat=!formatSet&&hasAlpha&&(format==="hex"||format==="hex6"||format==="hex3"||format==="name");if(needsAlphaFormat){if(format==="name"&&this._a===0){return this.toName()}return this.toRgbString()}if(format==="rgb"){formattedString=this.toRgbString()}if(format==="prgb"){formattedString=this.toPercentageRgbString()}if(format==="hex"||format==="hex6"){formattedString=this.toHexString()}if(format==="hex3"){formattedString=this.toHexString(true)}if(format==="hex8"){formattedString=this.toHex8String()}if(format==="name"){formattedString=this.toName()}if(format==="hsl"){formattedString=this.toHslString()}if(format==="hsv"){formattedString=this.toHsvString()}return formattedString||this.toHexString()},_applyModification:function(fn,args){var color=fn.apply(null,[this].concat([].slice.call(args)));this._r=color._r;this._g=color._g;this._b=color._b;this.setAlpha(color._a);return this},lighten:function(){return this._applyModification(lighten,arguments)},brighten:function(){return this._applyModification(brighten,arguments)},darken:function(){return this._applyModification(darken,arguments)},desaturate:function(){return this._applyModification(desaturate,arguments)},saturate:function(){return this._applyModification(saturate,arguments)},greyscale:function(){return this._applyModification(greyscale,arguments)},spin:function(){return this._applyModification(spin,arguments)},_applyCombination:function(fn,args){return fn.apply(null,[this].concat([].slice.call(args)))},analogous:function(){return this._applyCombination(analogous,arguments)},complement:function(){return this._applyCombination(complement,arguments)},monochromatic:function(){return this._applyCombination(monochromatic,arguments)},splitcomplement:function(){return this._applyCombination(splitcomplement,arguments)},triad:function(){return this._applyCombination(triad,arguments)},tetrad:function(){return this._applyCombination(tetrad,arguments)}};tinycolor.fromRatio=function(color,opts){if(typeof color=="object"){var newColor={};for(var i in color){if(color.hasOwnProperty(i)){if(i==="a"){newColor[i]=color[i]}else{newColor[i]=convertToPercentage(color[i])}}}color=newColor}return tinycolor(color,opts)};function inputToRGB(color){var rgb={r:0,g:0,b:0};var a=1;var ok=false;var format=false;if(typeof color=="string"){color=stringInputToObject(color)}if(typeof color=="object"){if(color.hasOwnProperty("r")&&color.hasOwnProperty("g")&&color.hasOwnProperty("b")){rgb=rgbToRgb(color.r,color.g,color.b);ok=true;format=String(color.r).substr(-1)==="%"?"prgb":"rgb"}else if(color.hasOwnProperty("h")&&color.hasOwnProperty("s")&&color.hasOwnProperty("v")){color.s=convertToPercentage(color.s);color.v=convertToPercentage(color.v);rgb=hsvToRgb(color.h,color.s,color.v);ok=true;format="hsv"}else if(color.hasOwnProperty("h")&&color.hasOwnProperty("s")&&color.hasOwnProperty("l")){color.s=convertToPercentage(color.s);color.l=convertToPercentage(color.l);rgb=hslToRgb(color.h,color.s,color.l);ok=true;format="hsl"}if(color.hasOwnProperty("a")){a=color.a}}a=boundAlpha(a);return{ok:ok,format:color.format||format,r:mathMin(255,mathMax(rgb.r,0)),g:mathMin(255,mathMax(rgb.g,0)),b:mathMin(255,mathMax(rgb.b,0)),a:a}}function rgbToRgb(r,g,b){return{r:bound01(r,255)*255,g:bound01(g,255)*255,b:bound01(b,255)*255}}function rgbToHsl(r,g,b){r=bound01(r,255);g=bound01(g,255);b=bound01(b,255);var max=mathMax(r,g,b),min=mathMin(r,g,b);var h,s,l=(max+min)/2;if(max==min){h=s=0}else{var d=max-min;s=l>.5?d/(2-max-min):d/(max+min);switch(max){case r:h=(g-b)/d+(g1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p}if(s===0){r=g=b=l}else{var q=l<.5?l*(1+s):l+s-l*s;var p=2*l-q;r=hue2rgb(p,q,h+1/3);g=hue2rgb(p,q,h);b=hue2rgb(p,q,h-1/3)}return{r:r*255,g:g*255,b:b*255}}function rgbToHsv(r,g,b){r=bound01(r,255);g=bound01(g,255);b=bound01(b,255);var max=mathMax(r,g,b),min=mathMin(r,g,b);var h,s,v=max;var d=max-min;s=max===0?0:d/max;if(max==min){h=0}else{switch(max){case r:h=(g-b)/d+(g>1)+720)%360;--results;){hsl.h=(hsl.h+part)%360;ret.push(tinycolor(hsl))}return ret}function monochromatic(color,results){results=results||6;var hsv=tinycolor(color).toHsv();var h=hsv.h,s=hsv.s,v=hsv.v;var ret=[];var modification=1/results;while(results--){ret.push(tinycolor({h:h,s:s,v:v}));v=(v+modification)%1}return ret}tinycolor.mix=function(color1,color2,amount){amount=amount===0?0:amount||50;var rgb1=tinycolor(color1).toRgb();var rgb2=tinycolor(color2).toRgb();var p=amount/100;var w=p*2-1;var a=rgb2.a-rgb1.a;var w1;if(w*a==-1){w1=w}else{w1=(w+a)/(1+w*a)}w1=(w1+1)/2;var w2=1-w1;var rgba={r:rgb2.r*w1+rgb1.r*w2,g:rgb2.g*w1+rgb1.g*w2,b:rgb2.b*w1+rgb1.b*w2,a:rgb2.a*p+rgb1.a*(1-p)};return tinycolor(rgba)};tinycolor.readability=function(color1,color2){var c1=tinycolor(color1);var c2=tinycolor(color2);var rgb1=c1.toRgb();var rgb2=c2.toRgb();var brightnessA=c1.getBrightness();var brightnessB=c2.getBrightness();var colorDiff=Math.max(rgb1.r,rgb2.r)-Math.min(rgb1.r,rgb2.r)+Math.max(rgb1.g,rgb2.g)-Math.min(rgb1.g,rgb2.g)+Math.max(rgb1.b,rgb2.b)-Math.min(rgb1.b,rgb2.b);return{brightness:Math.abs(brightnessA-brightnessB),color:colorDiff}};tinycolor.isReadable=function(color1,color2){var readability=tinycolor.readability(color1,color2);return readability.brightness>125&&readability.color>500};tinycolor.mostReadable=function(baseColor,colorList){var bestColor=null;var bestScore=0;var bestIsReadable=false;for(var i=0;i125&&readability.color>500;var score=3*(readability.brightness/125)+readability.color/500;if(readable&&!bestIsReadable||readable&&bestIsReadable&&score>bestScore||!readable&&!bestIsReadable&&score>bestScore){bestIsReadable=readable;bestScore=score;bestColor=tinycolor(colorList[i])}}return bestColor};var names=tinycolor.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"};var hexNames=tinycolor.hexNames=flip(names);function flip(o){var flipped={};for(var i in o){if(o.hasOwnProperty(i)){flipped[o[i]]=i}}return flipped}function boundAlpha(a){a=parseFloat(a);if(isNaN(a)||a<0||a>1){a=1}return a}function bound01(n,max){if(isOnePointZero(n)){n="100%"}var processPercent=isPercentage(n);n=mathMin(max,mathMax(0,parseFloat(n)));if(processPercent){n=parseInt(n*max,10)/100}if(math.abs(n-max)<1e-6){return 1}return n%max/parseFloat(max)}function clamp01(val){return mathMin(1,mathMax(0,val))}function parseIntFromHex(val){return parseInt(val,16)}function isOnePointZero(n){return typeof n=="string"&&n.indexOf(".")!=-1&&parseFloat(n)===1}function isPercentage(n){return typeof n==="string"&&n.indexOf("%")!=-1}function pad2(c){return c.length==1?"0"+c:""+c}function convertToPercentage(n){if(n<=1){n=n*100+"%"}return n}function convertDecimalToHex(d){return Math.round(parseFloat(d)*255).toString(16)}function convertHexToDecimal(h){return parseIntFromHex(h)/255}var matchers=function(){var CSS_INTEGER="[-\\+]?\\d+%?";var CSS_NUMBER="[-\\+]?\\d*\\.\\d+%?";var CSS_UNIT="(?:"+CSS_NUMBER+")|(?:"+CSS_INTEGER+")";var PERMISSIVE_MATCH3="[\\s|\\(]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")\\s*\\)?";var PERMISSIVE_MATCH4="[\\s|\\(]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")\\s*\\)?";return{rgb:new RegExp("rgb"+PERMISSIVE_MATCH3),rgba:new RegExp("rgba"+PERMISSIVE_MATCH4),hsl:new RegExp("hsl"+PERMISSIVE_MATCH3),hsla:new RegExp("hsla"+PERMISSIVE_MATCH4),hsv:new RegExp("hsv"+PERMISSIVE_MATCH3),hsva:new RegExp("hsva"+PERMISSIVE_MATCH4),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function stringInputToObject(color){color=color.replace(trimLeft,"").replace(trimRight,"").toLowerCase();var named=false;if(names[color]){color=names[color];named=true}else if(color=="transparent"){return{r:0,g:0,b:0,a:0,format:"name"}}var match;if(match=matchers.rgb.exec(color)){return{r:match[1],g:match[2],b:match[3]}}if(match=matchers.rgba.exec(color)){return{r:match[1],g:match[2],b:match[3],a:match[4]}}if(match=matchers.hsl.exec(color)){return{h:match[1],s:match[2],l:match[3]}}if(match=matchers.hsla.exec(color)){return{h:match[1],s:match[2],l:match[3],a:match[4]}}if(match=matchers.hsv.exec(color)){return{h:match[1],s:match[2],v:match[3]}}if(match=matchers.hsva.exec(color)){return{h:match[1],s:match[2],v:match[3],a:match[4]}}if(match=matchers.hex8.exec(color)){return{a:convertHexToDecimal(match[1]),r:parseIntFromHex(match[2]),g:parseIntFromHex(match[3]),b:parseIntFromHex(match[4]),format:named?"name":"hex8"}}if(match=matchers.hex6.exec(color)){return{r:parseIntFromHex(match[1]),g:parseIntFromHex(match[2]),b:parseIntFromHex(match[3]),format:named?"name":"hex"}}if(match=matchers.hex3.exec(color)){return{r:parseIntFromHex(match[1]+""+match[1]),g:parseIntFromHex(match[2]+""+match[2]),b:parseIntFromHex(match[3]+""+match[3]),format:named?"name":"hex"}}return false}window.tinycolor=tinycolor})();$(function(){if($.fn.spectrum.load){$.fn.spectrum.processNativeColorInputs()}})}); --------------------------------------------------------------------------------