summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo Chatzimichos <tampakrap@gentoo.org>2013-10-12 13:39:14 +0200
committerTheo Chatzimichos <tampakrap@gentoo.org>2013-10-12 13:39:44 +0200
commit27f763976598769d7aac498090057ea8ca1d6b9f (patch)
tree3d6bf2ea7c9ef316a780d1cc00b22d991265733e /plugins
parentAdd public-post-preview plugin (diff)
downloadblogs-gentoo-27f763976598769d7aac498090057ea8ca1d6b9f.tar.gz
blogs-gentoo-27f763976598769d7aac498090057ea8ca1d6b9f.tar.bz2
blogs-gentoo-27f763976598769d7aac498090057ea8ca1d6b9f.zip
Add easy-table plugin, requested by hwoarang
Diffstat (limited to 'plugins')
-rw-r--r--plugins/easy-table/css/admin-style.css126
-rw-r--r--plugins/easy-table/css/easy-table.css16
-rw-r--r--plugins/easy-table/css/index.html0
-rw-r--r--plugins/easy-table/easy-table.php1245
-rw-r--r--plugins/easy-table/images/asc.gifbin0 -> 54 bytes
-rw-r--r--plugins/easy-table/images/bg.gifbin0 -> 64 bytes
-rw-r--r--plugins/easy-table/images/desc.gifbin0 -> 54 bytes
-rw-r--r--plugins/easy-table/images/icon-table.pngbin0 -> 1239 bytes
-rw-r--r--plugins/easy-table/images/index.html0
-rw-r--r--plugins/easy-table/inc/Encoding.php263
-rw-r--r--plugins/easy-table/inc/index.html0
-rw-r--r--plugins/easy-table/index.html0
-rw-r--r--plugins/easy-table/js/easy-table-script.js39
-rw-r--r--plugins/easy-table/js/index.html0
-rw-r--r--plugins/easy-table/js/ttooltip/script/index.html0
-rw-r--r--plugins/easy-table/js/ttooltip/script/jquery-ttooltip.js250
-rw-r--r--plugins/easy-table/js/ttooltip/script/jquery-ttooltip.min.js12
-rw-r--r--plugins/easy-table/js/ttooltip/style/index.html0
-rw-r--r--plugins/easy-table/js/ttooltip/style/jquery-ttooltip.css109
-rw-r--r--plugins/easy-table/languages/easy-table-id_ID.mobin0 -> 5127 bytes
-rw-r--r--plugins/easy-table/languages/easy-table-id_ID.po496
-rw-r--r--plugins/easy-table/languages/english.mobin0 -> 528 bytes
-rw-r--r--plugins/easy-table/languages/english.po464
-rw-r--r--plugins/easy-table/languages/index.html0
-rw-r--r--plugins/easy-table/readme.txt355
-rw-r--r--plugins/easy-table/themes/cuscosky/style.css64
-rw-r--r--plugins/easy-table/themes/default/style.css38
-rw-r--r--plugins/easy-table/themes/index.html0
-rw-r--r--plugins/easy-table/themes/minimal/style.css6
29 files changed, 3483 insertions, 0 deletions
diff --git a/plugins/easy-table/css/admin-style.css b/plugins/easy-table/css/admin-style.css
new file mode 100644
index 00000000..ff62219e
--- /dev/null
+++ b/plugins/easy-table/css/admin-style.css
@@ -0,0 +1,126 @@
+/*
+* always include base css to get basic styling for header etc.
+*/
+@import url(easy-table.css);
+
+/* Use foundation zurb
+ * Requires: normalize.css */
+/* Global Reset & Standards ---------------------- */
+.easy-table-wrap *,.easy-table-wrap *:before,.easy-table-wrap *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
+
+/* The Grid ---------------------- */
+.row { width: 100%; max-width: 100%; min-width: 768px; margin: 0 auto; }
+.row .row { width: auto; max-width: none; min-width: 0; margin: 0 -15px; }
+.row.collapse .column, .row.collapse .columns { padding: 0; }
+.row .row { width: auto; max-width: none; min-width: 0; margin: 0 -15px; }
+.row .row.collapse { margin: 0; }
+
+.column, .columns { float: left; min-height: 1px; padding: 0 15px; position: relative; }
+.column.centered, .columns.centered { float: none; margin: 0 auto; }
+
+[class*="column"] + [class*="column"]:last-child { float: right; }
+
+[class*="column"] + [class*="column"].end { float: left; }
+
+.one, .row .one { width: 8.33333%; }
+.two, .row .two { width: 16.66667%; }
+.three, .row .three { width: 25%; }
+.four, .row .four { width: 33.33333%; }
+.five, .row .five { width: 41.66667%; }
+.six, .row .six { width: 50%; }
+.seven, .row .seven { width: 58.33333%; }
+.eight, .row .eight { width: 66.66667%; }
+.nine, .row .nine { width: 75%; }
+.ten, .row .ten { width: 83.33333%; }
+.eleven, .row .eleven { width: 91.66667%; }
+.twelve, .row .twelve { width: 100%; }
+
+/* Nicolas Gallagher's micro clearfix */
+.row { *zoom: 1; }
+.row:before, .row:after { content: " "; display: table; }
+.row:after { clear: both; }
+
+
+.toggledesc{
+ float:right;
+ margin-right:20px;
+}
+.help-btn {
+ text-decoration:none;
+ display:inline-block;
+ width:20px;
+ height:20px;
+ color:#666;
+ text-align:center;
+ border:1px solid #ccc;
+}
+.action-button{
+ margin-bottom:20px
+}
+.action-button a{
+ padding:10px;
+ border:1px solid #cccccc;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ color:#fff;
+ font-weight:bold;
+ font-size:1.3em;
+ display: inline-block;
+ text-shadow: 0 -1px 1px rgba(19,65,88,.8);
+ text-decoration:none;
+}
+.action-button a.green{
+ background:#48b826;
+ border-color:#1d7003;
+ background: #b4e391;
+ background: -moz-linear-gradient(top, #b4e391 0%, #61c419 50%, #b4e391 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b4e391), color-stop(50%,#61c419), color-stop(100%,#b4e391));
+ background: -webkit-linear-gradient(top, #b4e391 0%,#61c419 50%,#b4e391 100%);
+ background: -o-linear-gradient(top, #b4e391 0%,#61c419 50%,#b4e391 100%);
+ background: -ms-linear-gradient(top, #b4e391 0%,#61c419 50%,#b4e391 100%);
+ background: linear-gradient(top, #b4e391 0%,#61c419 50%,#b4e391 100%);
+}
+.action-button a.red{
+ background: #f85032;
+ background: -moz-linear-gradient(top, #f85032 0%, #f16f5c 35%, #f02f17 71%, #e73827 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f85032), color-stop(35%,#f16f5c), color-stop(71%,#f02f17), color-stop(100%,#e73827));
+ background: -webkit-linear-gradient(top, #f85032 0%,#f16f5c 35%,#f02f17 71%,#e73827 100%);
+ background: -o-linear-gradient(top, #f85032 0%,#f16f5c 35%,#f02f17 71%,#e73827 100%);
+ background: -ms-linear-gradient(top, #f85032 0%,#f16f5c 35%,#f02f17 71%,#e73827 100%);
+ background: linear-gradient(top, #f85032 0%,#f16f5c 35%,#f02f17 71%,#e73827 100%);
+ border-color:#cf3100;
+}
+/*since 1.0
+
+*/
+.wrap .form-table tr.new label,
+.wrap .form-table tr.new .description,
+.wrap .form-table tr.new p,
+.wrap .new
+ {
+ /* color:green !important */
+}
+#easy-table-theme-editor {
+ width:100%;
+ min-height:400px;
+ font-family: Consolas,Monaco,monospace;
+ font-size: 12px;
+ background: none repeat scroll 0% 0% rgb(249, 249, 249);
+ outline: 0px none;
+}
+
+
+
+@media (min-width:1024px) {
+ .left,
+ .right{
+ float:left;
+ width:49%
+ }
+}
+@media (max-width:800px) {
+ span.description {
+ display:block;
+ }
+} \ No newline at end of file
diff --git a/plugins/easy-table/css/easy-table.css b/plugins/easy-table/css/easy-table.css
new file mode 100644
index 00000000..cdf83439
--- /dev/null
+++ b/plugins/easy-table/css/easy-table.css
@@ -0,0 +1,16 @@
+table.tablesorter thead tr .easy-table-header {
+ cursor: pointer;
+ background-repeat: no-repeat;
+ background-position: center right;
+}
+table.tablesorter thead tr .easy-table-header:hover{
+ background-image: url(../images/bg.gif);
+}
+table.tablesorter thead tr .headerSortUp,
+table.tablesorter thead tr .headerSortDown:hover{
+ background-image: url(../images/asc.gif);
+}
+table.tablesorter thead tr .headerSortDown,
+table.tablesorter thead tr .headerSortUp:hover {
+ background-image: url(../images/desc.gif);
+} \ No newline at end of file
diff --git a/plugins/easy-table/css/index.html b/plugins/easy-table/css/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/css/index.html
diff --git a/plugins/easy-table/easy-table.php b/plugins/easy-table/easy-table.php
new file mode 100644
index 00000000..231135aa
--- /dev/null
+++ b/plugins/easy-table/easy-table.php
@@ -0,0 +1,1245 @@
+<?php
+/*
+Plugin Name: Easy Table
+Plugin URI: http://takien.com/
+Description: Create table in post, page, or widget in easy way.
+Author: Takien
+Version: 1.4
+Author URI: http://takien.com/
+*/
+
+/* Copyright 2013 takien.com
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+*/
+
+if(!defined('ABSPATH')) die();
+
+if (!class_exists('EasyTable')) {
+class EasyTable {
+
+
+/**
+* Default settings
+* Plugin will use this setting if user not made custom setting via settings page or tag.
+*/
+var $settings = Array(
+ 'shortcodetag' => 'table',
+ 'attrtag' => 'attr',
+ 'tablewidget' => false,
+ 'scriptloadin' => Array('is_single','is_page'),
+ 'class' => '',
+ 'caption' => false,
+ 'width' => '100%',
+ 'align' => 'left',
+ 'th' => true,
+ 'tf' => false,
+ 'border' => 0,
+ 'id' => false,
+ 'theme' => 'default',
+ 'tablesorter' => false,
+ 'loadcss' => true,
+ 'scriptinfooter'=> false,
+ 'delimiter' => ',',
+ 'file' => false,
+ 'trim' => false, /*trim, since 1.0*/
+ 'enclosure' => '&quot;',
+ 'escape' => '\\',
+ 'nl' => '~~',
+ 'csvfile' => false,
+ 'terminator' => '\n', /*row terminator, since 1.0*/
+ 'limit' => 0, /*max row to be included to table, 0 = unlimited, since 1.0*/
+ 'fixlinebreak' => false
+);
+
+
+function EasyTable(){
+ $this->__construct();
+}
+
+function __construct(){
+ $plugin = plugin_basename(__FILE__);
+ add_filter("plugin_action_links_$plugin", array(&$this,'easy_table_settings_link' ));
+
+ load_plugin_textdomain('easy-table', false, basename( dirname( __FILE__ ) ) . '/languages' );
+
+ add_action('admin_init', array(&$this,'easy_table_register_setting'));
+ add_action('admin_head', array(&$this,'easy_table_admin_script'));
+ add_action('wp_enqueue_scripts', array(&$this,'easy_table_script'));
+ add_action('wp_enqueue_scripts', array(&$this,'easy_table_style'));
+ add_action('admin_menu', array(&$this,'easy_table_add_page'));
+ add_action('contextual_help', array(&$this,'easy_table_help'));
+ add_shortcode($this->option('shortcodetag'), array(&$this,'easy_table_short_code'));
+ add_shortcode($this->option('attrtag'), array(&$this,'easy_table_short_code_attr'));
+ if($this->option('tablewidget')){
+ add_filter('widget_text', 'do_shortcode');
+ }
+}
+
+private function easy_table_base($return){
+ $easy_table_base = Array(
+ 'name' => 'Easy Table',
+ 'version' => '1.4',
+ 'plugin-domain' => 'easy-table'
+ );
+ return $easy_table_base[$return];
+}
+
+function easy_table_short_code($atts, $content="") {
+ $shortcode_atts = shortcode_atts(array(
+ 'class' => $this->option('class'),
+ 'caption' => $this->option('caption'),
+ 'width' => $this->option('width'),
+ 'th' => $this->option('th'),
+ 'tf' => $this->option('tf'),
+ 'border' => $this->option('border'),
+ 'id' => $this->option('id'),
+ 'theme' => $this->option('theme'),
+ 'tablesorter' => $this->option('tablesorter'),
+ 'delimiter' => $this->option('delimiter'),
+ 'enclosure' => $this->option('enclosure'),
+ 'escape' => $this->option('escape'),
+ 'file' => $this->option('file'),
+ 'trim' => $this->option('trim'),
+ 'sort' => '',
+ 'nl' => $this->option('nl'),
+ 'ai' => false,
+ 'terminator' => $this->option('terminator'),
+ 'limit' => $this->option('limit'),
+ 'align' => $this->option('align'),
+ 'style' => '', /*table inline style, since 1.0*/
+ 'colalign' => '', /*column align, ex: [table colalign="left|right|center"], @since 1.0*/
+ 'colwidth' => '', /*column width, ex: [table colwidth="100|200|300"], @since 1.0*/
+ 'fixlinebreak' => $this->option('fixlinebreak') /* fix linebreak on cell if terminator is not \n or \r @since 1.1.4 */
+ ), $atts);
+ /**
+ * because clean_pre is deprecated since WordPress 3.4, then replace it manually
+ $content = clean_pre($content);*/
+
+ $content = str_replace(array('<br />', '<br/>', '<br>'), array('', '', ''), $content);
+ $content = str_replace('<p>', "\n", $content);
+ $content = str_replace('</p>', '', $content);
+
+ $content = str_replace('&nbsp;','',$content);
+ $char_codes = array( '&#8216;', '&#8217;', '&#8220;', '&#8221;', '&#8242;', '&#8243;' );
+ $replacements = array( "'", "'", '"', '"', "'", '"' );
+ $content = str_replace( $char_codes, $replacements, $content );
+
+ return $this->csv_to_table($content,$shortcode_atts);
+}
+
+/**
+* Just return to strip attr shortcode for table cell, since we use custom regex for attr shortcode.
+* @since 0.5
+*/
+function easy_table_short_code_attr($atts){
+ return;
+}
+
+/**
+* Convert CSV to table
+* @param array|string $data could be CSV string or array
+* @param array @args
+* @return string
+*/
+private function csv_to_table($data,$args){
+ extract($args);
+ if( $this->option('csvfile') AND $file ){
+ /*$data = @file_get_contents($file);*/
+ /** use wp_remote_get
+ * @since 0.8
+ */
+ $data = '';
+ $response = wp_remote_get($file);
+ /**
+ notify if error reading file.
+ @since 0.9
+ */
+ if( is_wp_error( $response ) ) {
+ return '<div style="color:red">Error reading file/URL.</div>';
+ } else if( $response['response']['code'] == 200 ) {
+ $data = $response['body'];
+ }
+ }
+
+ if(!is_array($data)){
+ /**
+ normalize nl, since it may contains new line.
+ @since 0.9
+ */
+ $data = preg_replace('/'.preg_quote($nl).'([\s\r\n\t]+)?/i',$nl,$data);
+
+ /*
+ Fix encoding?
+ @since: 1.0 beta
+ */
+ require_once (dirname(__FILE__).'/inc/Encoding.php');
+ //$data = ForceEncode::fixUTF8($data);
+ $data = ForceEncode::toUTF8($data);
+
+ /*
+ convert csv to array.
+ */
+ $data = $this->csv_to_array(trim($data), $delimiter, $enclosure, $escape, $terminator, $limit);
+ }
+
+ if(empty($data)) return false;
+
+ $max_cols = count(max($data));
+
+ $r=0;
+
+ /**
+ * initialize inline sort,
+ * extract header sort if any, and equalize with max column number
+ * @since 0.8
+ */
+ if( $tablesorter ) {
+ $inline_sort = Array();
+ $header_sort = explode(',',$sort);
+ $header_sort = array_pad($header_sort,$max_cols,NULL);
+ }
+
+ /**
+ * tfoot position
+ * @since 0.4
+ */
+ $tfpos = ($tf == 'last') ? count($data) : ($th?2:1);
+
+ /**
+ * add auto width
+ * @since 1.1.3
+ */
+
+ if ( 'auto' !== $width ) {
+ $width = (stripos($width,'%') === false) ? (int)$width.'px' : (int)$width.'%';
+ }
+
+ /*colalign & colwidth
+ @since 1.0
+ */
+ if($colalign) {
+ $c_align = explode('|',$colalign);
+ }
+ if($colwidth) {
+ $c_width = explode('|',$colwidth);
+ }
+
+ /* added back $align, with new way of implementation,
+ * @since 1.4
+ */
+ $style = rtrim($style, ';');
+ switch ($align) :
+ case 'center':
+ $alignstyle = '; margin-left:auto;margin-right:auto';
+ break;
+ case 'right':
+ $alignstyle = '; margin-left:auto;margin-right:0';
+ break;
+ default:
+ $alignstyle = '';
+ break;
+ endswitch;
+
+ $style = $style.$alignstyle;
+
+ $output = '<table '.($id ? 'id="'.$id.'"':'');
+
+ //$output .= ' width="'.$width.'" '; width attr not used, use style instead (see below) - since 1.1.3
+ $output .= ' style="'.((stripos($style,'width') === false) ? ('width:'.$width.';') : '').' '.ltrim($style,';').'" ';
+ $output .= ' class="easy-table easy-table-'.$theme.' '.($tablesorter ? 'tablesorter __sortlist__ ':'').$class.'" '.
+ (($border !=='0') ? 'border="'.$border.'"' : '').
+ '>'."\n";
+
+ $output .= $caption ? '<caption>'.$caption.'</caption>'."\n" : '';
+ $output .= $th ? '<thead>' : (($tf !== 'last') ? '' : '<tbody>');
+ $output .= (!$th AND !$tf) ? '<tbody>':'';
+
+ foreach($data as $k=>$cols){ $r++;
+ //$cols = array_pad($cols,$max_cols,'');
+
+ $output .= (($r==$tfpos) AND $tf) ? (($tf=='last')?'</tbody>':'').'<tfoot>': '';
+ $output .= "\r\n".'<tr>';
+
+ $thtd = ((($r==1) AND $th) OR (($r==$tfpos) AND $tf)) ? 'th' : 'td';
+/**
+ai is auto index
+@since 0.9
+add auto numbering in the begining of each row
+ai="true" or ai="1" number will start from 1,
+ai="n", n = any number, number will start from that.
+
+Another possible value.
+ai="n/head/width"
+n = index start
+head = head text, default is No.
+width = column width, in pixel. Default is 20px
+ai head, text to shown in the table head row, default is No.
+
+*/
+ $index = explode('/',$ai);
+ $indexnum = ((int)$index[0])+$r;
+ $indexnum = $th ? $indexnum-2 : $indexnum-1;
+ $indexnum = ($tf AND ($tf !== 'last')) ? $indexnum-1 : $indexnum;
+ $indexhead = isset($index[1]) ? $index[1] : 'No.';
+ $indexwidth = isset($index[2]) ? (int)$index[2] : 30;
+ $output .= ($ai AND ($thtd == 'td')) ? '<'.$thtd.' style="width:'.$indexwidth.'px">'.$indexnum."</$thtd>" : ($ai ? "<$thtd>".$indexhead."</$thtd>" : '');
+
+ foreach($cols as $c=>$cell){
+ /**
+ * Add attribute for each cell
+ * @since 0.5
+ */
+ preg_match('/\['.$this->option('attrtag').' ([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)/',$cell,$matchattr);
+ $attr = isset($matchattr[1]) ? $matchattr[1] : '';
+ /**
+ * extract $attr value
+ * @since 0.8
+ * this is for inline sorting option,
+ * eg [attr sort="desc"],[attr sort="asc"] or [attr sort="none"]
+ * only affect if it's TH and $tablesorter enabled
+ * extract sort value and insert appropriate class value.
+ */
+
+ if( ('th' == $thtd) AND $tablesorter ) {
+ $attrs = $attr ? shortcode_parse_atts($attr) : Array();
+ $attrs['sort'] = isset($attrs['sort']) ? $attrs['sort'] : $header_sort[$c];
+ $attrs['class'] = isset($attrs['class']) ? $attrs['class'] : '';
+
+ $inline_sort[$c] = $attrs['sort'];
+
+ $attr = '';
+ $sorter = in_array(strtolower($attrs['sort']),array('desc','asc')) ? '' : (!empty($attrs['sort']) ? 'false' : '');
+ foreach($attrs as $katr => $vatr){
+ if($katr == 'sort') {
+ }
+ else if(($katr == 'class')){
+ $attr .= "$katr='$vatr ";
+ $attr .= $sorter ? "{sorter: $sorter}":'';
+ $attr .= "' ";
+ }
+ else {
+ $attr .= "$katr='$vatr' ";
+ }
+ }
+ }
+ /**
+ nl, replace nl with new line
+ @since 0.9
+ */
+ $cell = str_replace($nl,'<br />',$cell);
+ /*trim cell content?
+ @since 1.0
+ */
+ $cell = $trim ? trim(str_replace('&nbsp;','',$cell)) : $cell;
+
+ /*nl2br? only if terminator is not \n or \r*/
+ /* optionally, if $fixlinebreak is set. @since 1.1.4 */
+
+ if ( $fixlinebreak ) {
+ if(( '\n' !== $terminator ) OR ( '\r' !== $terminator )) {
+ $cell = nl2br($cell);
+ }
+ }
+ /*colalign
+ @since 1.0
+ */
+ if (isset($c_align[$c]) AND (stripos($attr,'text-align') === false)) {
+ if(stripos($attr,'style') === false) {
+ $attr = $attr. ' style="text-align:'.$c_align[$c].'" ';
+ }
+ else {
+ $attr = preg_replace('/style(\s+)?=(\s+)?("|\')(\s+)?/i','style=${3}text-align:'.$c_align[$c].';',$attr);
+ }
+ }
+ /*colwidth
+ @since 1.0
+ */
+ if (isset($c_width[$c]) AND (stripos($attr,'width') === false) AND ($r == 1)) {
+ $c_width[$c] = (stripos($c_width[$c],'%') === false) ? (int)$c_width[$c].'px' : (int)$c_width[$c].'%';
+
+ if(stripos($attr,'style') === false) {
+ $attr = $attr. ' style="width:'.$c_width[$c].'" ';
+ }
+ else {
+ $attr = preg_replace('/style(\s+)?=(\s+)?("|\')(\s+)?/i','style=${3}width:'.$c_width[$c].';',$attr);
+ }
+ }
+
+ $output .= "<$thtd $attr>".do_shortcode($cell)."</$thtd>\n";
+ }
+
+ $output .= '</tr>'."\n";
+ $output .= (($r==1) AND $th) ? '</thead>'."\n".'<tbody>' : '';
+ $output .= (($r==$tfpos) AND $tf) ? '</tfoot>'.((($tf==1) AND !$th) ? '<tbody>':''): '';
+
+ }
+ $output .= (($tf!=='last')?'</tbody>':'').'</table>';
+
+ /**
+ * Build sortlist metadata and append it to the table class
+ * @since 0.8
+ * This intended to $tablesorter,
+ * so don't bother if $tablesorter is false/disabled
+ */
+
+
+ if( $tablesorter ) {
+ $sortlist = '';
+ $all_sort = array_replace($header_sort,$inline_sort);
+
+ if(implode('',$all_sort)) {
+ $sortlist = '{sortlist: [';
+ foreach($all_sort as $k=>$v){
+ $v = (($v == 'desc') ? 1 : (($v == 'asc') ? 0 : '' ));
+ if($v !=='') {
+ $sortlist .= '['.$k.','.$v.'], ';
+ }
+ }
+ $sortlist .= ']}';
+ }
+ $output = str_replace('__sortlist__',$sortlist,$output);
+ }
+ return $output;
+}
+
+/**
+* Convert CSV to array
+*/
+private function csv_to_array($csv, $delimiter = ',', $enclosure = '"', $escape = '\\', $terminator = "\n", $limit = 0 ) {
+$r = array();
+
+$terminator = ($terminator == '\n') ? "\n" : $terminator;
+$terminator = ($terminator == '\r') ? "\r" : $terminator;
+$terminator = ($terminator == '\t') ? "\t" : $terminator;
+
+$rows = easy_table_str_getcsv($csv, $terminator,$enclosure,$escape);
+$rows = array_diff($rows,Array(''));
+/*
+* limit how many rows will be included?
+* default 0, means ulimited.
+* @since 1.0
+*/
+if($limit > 0) {
+ $rows = array_slice($rows, 0, $limit);
+}
+
+foreach($rows as &$row) {
+ $r[] = easy_table_str_getcsv($row,$delimiter);
+}
+return $r;
+}
+
+/**
+* Retrieve options from database if any, or use default options instead.
+*/
+function option($key=''){
+ $option = get_option('easy_table_plugin_option') ? get_option('easy_table_plugin_option') : Array();
+ $option = array_merge($this->settings,$option);
+ if($key){
+ $return = $option[$key];
+ }
+ else{
+ $return = $option;
+ }
+ return $return;
+
+}
+
+/**
+* Retrieve themes directory
+* @since: 0.8
+*/
+
+function themes(){
+ /**
+ * delete theme cache on setting updated.
+ */
+ if( ( 'easy-table' == $_GET['page']) AND isset($_GET['settings-updated']) ) {
+ delete_transient('easy_table_themes');
+ }
+
+ if(!function_exists('scandir')){
+ return Array('default');
+ }
+ if ( false === ( $themes = get_transient( 'easy_table_themes' ) )) {
+
+ $dir = plugin_dir_path(__FILE__).'themes/';
+ $dirs = scandir($dir);
+ foreach($dirs as $d){
+ if( (substr($d,0,1) !=='.') AND (is_dir($dir.$d)) ) {
+ $themes[] = $d;
+ }
+ }
+ set_transient( 'easy_table_themes', $themes , 86400 );
+ }
+ return $themes;
+}
+function theme_content() {
+ if(!isset($_GET['edit'])) {
+ return false;
+ }
+ $theme = $_GET['edit'];
+ $dir = plugin_dir_path(__FILE__).'themes/';
+ if(is_writable($dir.$theme.'/style.css')) {
+ return file_get_contents($dir.$theme.'/style.css');
+ }
+}
+/**
+* Register plugin setting
+*/
+function easy_table_register_setting() {
+ register_setting('easy_table_option_field', 'easy_table_plugin_option');
+}
+
+/**
+* Render form
+* @param array
+*/
+function render_form($fields){
+ $output ='<table class="form-table">';
+ foreach($fields as $field){
+ $field['rowclass'] = isset($field['rowclass']) ? $field['rowclass'] : false;
+ $field['label'] = isset($field['label']) ? $field['label'] : '';
+
+ if($field['type']=='text'){
+ $output .= '<tr '.($field['rowclass'] ? 'class="'.$field['rowclass'].'"': '').'><th><label for="'.$field['name'].'">'.$field['label'].'</label></th>';
+ $output .= '<td><input type="text" id="'.$field['name'].'" name="'.$field['name'].'" value="'.$field['value'].'" />';
+ $output .= ' <a href="#" class="help-btn ttt" data-title="'.$field['label'].'" data-content="'.$field['description'].'">?</a></td></tr>';
+ }
+ if($field['type']=='checkbox'){
+ $output .= '<tr '.($field['rowclass'] ? 'class="'.$field['rowclass'].'"': '').'><th><label for="'.$field['name'].'">'.$field['label'].'</label></th>';
+ $output .= '<td><input type="hidden" name="'.$field['name'].'" value="" /><input type="checkbox" id="'.$field['name'].'" name="'.$field['name'].'" value="'.$field['value'].'" '.$field['attr'].' />';
+ $output .= ' <a href="#" class="help-btn ttt" data-title="'.$field['label'].'" data-content="'.$field['description'].'">?</a></td></tr>';
+ }
+ if($field['type']=='checkboxgroup'){
+ $output .= '<tr '.($field['rowclass'] ? 'class="'.$field['rowclass'].'"': '').'><th><label>'.$field['grouplabel'].'</label></th>';
+ $output .= '<td>';
+ foreach($field['groupitem'] as $key=>$item){
+ $output .= '<input type="hidden" name="'.$item['name'].'" value="" /><input type="checkbox" id="'.$item['name'].'" name="'.$item['name'].'" value="'.$item['value'].'" '.$item['attr'].' /> <label for="'.$item['name'].'">'.$item['label'].'</label><br />';
+ }
+ $output .= ' <a href="#" class="help-btn ttt" data-title="'.$field['label'].'" data-content="'.$field['description'].'">?</a></td></tr>';
+ }
+ if($field['type'] == 'select'){
+ $output .= '<tr '.($field['rowclass'] ? 'class="'.$field['rowclass'].'"': '').'><th><label>'.$field['label'].'</label></th>';
+ $output .= '<td>';
+ $output .= '<select name="'.$field['name'].'">';
+ foreach( (array)$field['values'] as $val=>$name ) {
+ $output .= '<option '.(($val==$field['value']) ? 'selected="selected"' : '' ).' value="'.$val.'">'.$name.'</option>';
+ }
+ $output .= '</select>';
+ $output .= ' <a href="#" class="help-btn ttt" data-title="'.$field['label'].'" data-content="'.$field['description'].'">?</a></td></tr>';
+ }
+ }
+ $output .= '</table>';
+ return $output;
+}
+
+/**
+* Register javascript
+*/
+function easy_table_script() {
+ if( is_single() AND in_array('is_single',$this->option('scriptloadin')) OR
+ is_page() AND in_array('is_page',$this->option('scriptloadin')) OR
+ is_home() AND in_array('is_home',$this->option('scriptloadin')) OR
+ is_archive() AND in_array('is_archive',$this->option('scriptloadin')) OR
+ is_search() AND in_array('is_search',$this->option('scriptloadin'))
+ )
+ {
+ if($this->option('tablesorter')) {
+ wp_enqueue_script('easy_table_script',plugins_url( 'js/easy-table-script.js' , __FILE__ ),array('jquery'),$this->easy_table_base('version'),$this->option('scriptinfooter'));
+ }
+ }
+}
+
+/**
+* Register stylesheet
+*/
+function easy_table_style() {
+ if( is_single() AND in_array('is_single',$this->option('scriptloadin')) OR
+ is_page() AND in_array('is_page',$this->option('scriptloadin')) OR
+ is_home() AND in_array('is_home',$this->option('scriptloadin')) OR
+ is_archive() AND in_array('is_archive',$this->option('scriptloadin')) OR
+ is_search() AND in_array('is_search',$this->option('scriptloadin'))
+ )
+ {
+ if($this->option('loadcss')) {
+ wp_enqueue_style('easy_table_style', plugins_url('themes/'.$this->option('theme').'/style.css', __FILE__),false,$this->easy_table_base('version'));
+ }
+ }
+}
+
+function easy_table_admin_script(){
+$page = isset($_GET['page']) ? $_GET['page'] : '';
+if($page == $this->easy_table_base('plugin-domain')) {
+if($this->option('tablesorter')) { ?>
+<script src="<?php echo plugins_url( 'js/easy-table-script.js' , __FILE__);?>"></script>
+<?php }
+if($this->option('loadcss')) { ?>
+<link rel="stylesheet" href="<?php echo plugins_url('themes/'.$this->option('theme').'/style.css?ver='.$this->easy_table_base('version'), __FILE__);?>" />
+<?php } ?>
+
+<link rel="stylesheet" href="<?php echo plugins_url( 'css/admin-style.css?ver='.$this->easy_table_base('version') , __FILE__);?>" />
+<script src="<?php echo plugins_url( 'js/ttooltip/script/jquery-ttooltip.min.js' , __FILE__);?>"></script>
+<link rel="stylesheet" href="<?php echo plugins_url( 'js/ttooltip/style/jquery-ttooltip.css?ver='.$this->easy_table_base('version') , __FILE__);?>" />
+
+<script type="text/javascript">
+//<![CDATA[
+ jQuery(document).ready(function($){
+ $('.ttt').ttooltip({
+ maxwidth:300,
+ timeout:500,
+ template:'<div class="ttooltip-wrap"><div class="ttooltip-arrow ttooltip-arrow-border"></div><div class="ttooltip-arrow"></div><div class="ttooltip-inner"><h3 class="ttooltip-title"></h3><div class="ttooltip-content"><p></p></div><div class="ttooltip-footer"></div></div></div>'
+ });
+ $('.togglethis a').click(function(e){
+ var target = $(this).attr('data-target');
+ $(target).toggle();
+ e.preventDefault();
+ });
+ });
+//]]>
+ </script>
+<?php
+}
+} /* end easy_table_admin_script*/
+
+/**
+* Add action link to plugins page
+* from plugins listing.
+*/
+function easy_table_settings_link($links) {
+ $settings_link = '<a href="options-general.php?page='.$this->easy_table_base('plugin-domain').'">'.__('Settings','easy-table').'</a>';
+ array_unshift($links, $settings_link);
+ return $links;
+}
+
+/**
+* Contextual help
+*/
+function easy_table_help($help) {
+ $page = isset($_GET['page']) ? $_GET['page'] : '';
+ if($page == $this->easy_table_base('plugin-domain')) {
+ $help = '<h2>'.$this->easy_table_base('name').' '.$this->easy_table_base('version').'</h2>';
+ $help .= '<h5>'.__('Instruction','easy-table').':</h5>
+ <ol><li>'.__('Once plugin installed, go to plugin options page to configure some options','easy-table').'</li>';
+ $help .= '<li>'.__('You are ready to write a table in post or page.','easy-table').'</li>';
+ $help .= '<li>'.__('To be able write table in widget you have to check <em>Enable render table in widget</em> option in the option page.','easy-table').'</li></ol>';
+ return $help;
+ }
+}
+
+/**
+* Add plugin page
+*/
+function easy_table_add_page() {
+ add_options_page($this->easy_table_base('name'), $this->easy_table_base('name'), 'administrator', $this->easy_table_base('plugin-domain'), array(&$this,'easy_table_page'));
+}
+
+/**
+* Plugin option page
+*/
+function easy_table_page() { ?>
+<div class="wrap easy-table-wrap">
+<div class="icon32"><img src="<?php echo plugins_url('/images/icon-table.png', __FILE__);?>" /></div>
+<h2 class="nav-tab-wrapper">
+ <a href="options-general.php?page=<?php echo $this->easy_table_base('plugin-domain');?>" class="nav-tab <?php echo !isset($_GET['gettab']) ? 'nav-tab-active' : '';?>"><?php printf(__('%s Option','easy-table'), $this->easy_table_base('name'));?></a>
+ <?php
+ /** currently not available
+ <a href="options-general.php?page=<?php echo $this->easy_table_base('plugin-domain');?>&gettab=themes" class="nav-tab <?php echo (isset($_GET['gettab']) AND ($_GET['gettab'] == 'themes')) ? 'nav-tab-active' : '';?>"><?php _e('Themes','easy-table');?></a>
+ */?>
+ <a href="options-general.php?page=<?php echo $this->easy_table_base('plugin-domain');?>&gettab=support" class="nav-tab <?php echo (isset($_GET['gettab']) AND ($_GET['gettab'] == 'support')) ? 'nav-tab-active' : '';?>"><?php _e('Support','easy-table');?></a>
+ <a href="options-general.php?page=<?php echo $this->easy_table_base('plugin-domain');?>&gettab=about" class="nav-tab <?php echo (isset($_GET['gettab']) AND ($_GET['gettab'] == 'about')) ? 'nav-tab-active' : '';?>"><?php _e('About','easy-table');?></a>
+</h2>
+<?php if(!isset($_GET['gettab'])) : ?>
+<div class="left">
+<form method="post" action="options.php">
+<?php
+wp_nonce_field('update-options');
+settings_fields('easy_table_option_field');
+
+?>
+ <span class="togglethis toggledesc"><em><a href="#" data-target=".help-btn"><?php _e('Show/hide help button');?></a></em></span>
+ <h3><?php _e('General options','easy-table');?></h3>
+ <?php
+ $fields = Array(
+ Array(
+ 'name' => 'easy_table_plugin_option[shortcodetag]',
+ 'label' => __('Short code tag','easy-table'),
+ 'type' => 'text',
+ 'description' => __('Shortcode tag, type \'table\' if you want to use [table] short tag.','easy-table'),
+ 'value' => $this->option('shortcodetag')
+ )
+ ,
+ Array(
+ 'name' => 'easy_table_plugin_option[attrtag]',
+ 'label' => __('Cell attribute tag','easy-table'),
+ 'type' => 'text',
+ 'description' => __('Cell attribute tag, default is attr.','easy-table'),
+ 'value' => $this->option('attrtag')
+ )
+ ,Array(
+ 'name' => 'easy_table_plugin_option[tablewidget]',
+ 'label' => __('Also render table in widget?','easy-table'),
+ 'type' => 'checkbox',
+ 'description' => __('Check this if you want the table could be rendered in widget.','easy-table'),
+ 'value' => 1,
+ 'attr' => $this->option('tablewidget') ? 'checked="checked"' : '')
+ ,Array(
+ 'type' => 'checkboxgroup',
+ 'grouplabel' => __('Only load JS/CSS when in this condition','easy-table'),
+ 'description' => __('Please check in where JavaScript and CSS should be loaded','easy-table'),
+ 'groupitem' => Array(
+ Array(
+ 'name' => 'easy_table_plugin_option[scriptloadin][]',
+ 'label' => __('Single','easy-table'),
+ 'value' => 'is_single',
+ 'attr' => in_array('is_single',$this->option('scriptloadin')) ? 'checked="checked"' : ''
+ ),
+ Array(
+ 'name' => 'easy_table_plugin_option[scriptloadin][]',
+ 'label' => __('Page','easy-table'),
+ 'value' => 'is_page',
+ 'attr' => in_array('is_page',$this->option('scriptloadin')) ? 'checked="checked"' : ''
+ ),
+ Array(
+ 'name' => 'easy_table_plugin_option[scriptloadin][]',
+ 'label' => __('Front page','easy-table'),
+ 'value' => 'is_home',
+ 'attr' => in_array('is_home',$this->option('scriptloadin')) ? 'checked="checked"' : ''
+ ),
+ Array(
+ 'name' => 'easy_table_plugin_option[scriptloadin][]',
+ 'label' => __('Archive page','easy-table'),
+ 'value' => 'is_archive',
+ 'attr' => in_array('is_archive',$this->option('scriptloadin')) ? 'checked="checked"' : ''
+ ),
+ Array(
+ 'name' => 'easy_table_plugin_option[scriptloadin][]',
+ 'label' => __('Search page','easy-table'),
+ 'value' => 'is_search',
+ 'attr' => in_array('is_search',$this->option('scriptloadin')) ? 'checked="checked"' : ''
+ )
+ )
+ )
+ ,Array(
+ 'name' => 'easy_table_plugin_option[scriptinfooter]',
+ 'label' => __('Load script on footer?','easy-table'),
+ 'type' => 'checkbox',
+ 'description' => __('Check this if you want the script to be rendered in footer. Try to check or uncheck this if you experienced conflict with another JavaScript library (not guaranteed though).','easy-table'),
+ 'value' => 1,
+ 'attr' => $this->option('scriptinfooter') ? 'checked="checked"' : ''
+ )
+
+ );
+ echo $this->render_form($fields);
+
+ $fields = Array(
+ Array(
+ 'name' => 'easy_table_plugin_option[tablesorter]',
+ 'label' => __('Use tablesorter?','easy-table'),
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'description' => __('Check this to use tablesorter jQuery plugin','easy-table'),
+ 'attr' => $this->option('tablesorter') ? 'checked="checked"':'')
+ ,Array(
+ 'name' => 'easy_table_plugin_option[th]',
+ 'label' => __('Use TH for the first row?','easy-table'),
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'description' => __('Check this if you want to use first row as table head (required by tablesorter)','easy-table'),
+ 'attr' => $this->option('th') ? 'checked="checked"' : '')
+ ,Array(
+ 'name' => 'easy_table_plugin_option[loadcss]',
+ 'label' => __('Load CSS?','easy-table'),
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'description' => __('Check this to use CSS included in this plugin to styling table, you may unceck if you want to write your own style.','easy-table'),
+ 'attr' => $this->option('loadcss') ? 'checked="checked"':'')
+ ,Array(
+ 'name' => 'easy_table_plugin_option[class]',
+ 'label' => __('Table class','easy-table'),
+ 'type' => 'text',
+ 'description' => __('Additional table class attribute.','easy-table'),
+ 'value' => $this->option('class'))
+ ,Array(
+ 'name' => 'easy_table_plugin_option[width]',
+ 'label' => __('Table width','easy-table'),
+ 'type' => 'text',
+ 'description' => __('Table width, in pixel or percent (may be overriden by CSS)','easy-table'),
+ 'value' => $this->option('width'))
+ ,Array(
+ 'name' =>'easy_table_plugin_option[border]',
+ 'label' => __('Table border','easy-table'),
+ 'type' => 'text',
+ 'description' => __('Table border (may be overriden by CSS)','easy-table'),
+ 'value' => $this->option('border'))
+ ,Array(
+ 'name' =>'easy_table_plugin_option[align]',
+ 'label' => __('Table align','easy-table'),
+ 'type' => 'text',
+ 'description' => __('Table align (left, center, right)','easy-table'),
+ 'value' => $this->option('align'))
+ );
+ ?>
+
+ <h3><?php _e('Table options','easy-table');?></h3>
+ <?php
+ echo $this->render_form($fields);
+ ?>
+ <h3><?php _e('Theme selector','easy-table');?></h3>
+ <?php
+ $fields = Array(
+ Array(
+ 'name' => 'easy_table_plugin_option[theme]',
+ 'label' => __('Default theme','easy-table'),
+ 'type' => 'select',
+ 'value' => $this->option('theme'),
+ 'values' => array_combine($this->themes(),$this->themes()),
+ 'description' => __('Select default theme of the table','easy-table')
+ )
+ );
+ echo $this->render_form($fields);
+ ?>
+
+ <h3><?php _e('Data options','easy-table');?></h3>
+ <?php
+ $fields = Array(
+ Array(
+ 'name' => 'easy_table_plugin_option[limit]',
+ 'label' => __('Row limit','easy-table'),
+ 'type' => 'text',
+ 'value' => $this->option('limit'),
+ 'rowclass' => 'new',
+ 'description' =>__('Max row to convert to table, default 0 (unlimited)','easy-table')
+ ),
+ Array(
+ 'name' => 'easy_table_plugin_option[trim]',
+ 'label' => __('Trim cell data?','easy-table'),
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'attr' => $this->option('trim') ? 'checked="checked"':'',
+ 'rowclass' => 'new',
+ 'description' =>__('Trim empty character around cell data','easy-table')
+ ),
+ );
+ echo $this->render_form($fields);
+ ?>
+
+ <h3><?php _e('Parser options','easy-table');?></h3>
+ <p><em><?php _e('Do not change this unless you know what you\'re doing','easy-table');?></em>
+ </p>
+ <?php
+ $fields = Array(
+ Array(
+ 'name' => 'easy_table_plugin_option[nl]',
+ 'label' => __('New line replacement','easy-table'),
+ 'type' => 'text',
+ 'value' => $this->option('nl'),
+ 'description' => __('Since new line is used by parser, you need specify character as a replacement.','easy-table'))
+ ,Array(
+ 'name' => 'easy_table_plugin_option[terminator]',
+ 'label' => __('Row terminator','easy-table'),
+ 'type' => 'text',
+ 'value' => $this->option('terminator'),
+ 'rowclass' => 'new',
+ 'description' => __('This caharacter will converted into new row. Default value \n (this is invisible character when you press Enter). If your new line not converted as new row in the table, try use \r instead.','easy-table'))
+ ,Array(
+ 'name' => 'easy_table_plugin_option[delimiter]',
+ 'label' => __('Delimiter','easy-table'),
+ 'type' => 'text',
+ 'value' => $this->option('delimiter'),
+ 'description' => __('CSV delimiter (default is comma)','easy-table'))
+ ,Array(
+ 'name' => 'easy_table_plugin_option[enclosure]',
+ 'label' => __('Enclosure','easy-table'),
+ 'type' => 'text',
+ 'value' => htmlentities($this->option('enclosure')),
+ 'description' => __('CSV enclosure (default is double quote)','easy-table'))
+ ,Array(
+ 'name' => 'easy_table_plugin_option[escape]',
+ 'label' => __('Escape','easy-table'),
+ 'type' => 'text',
+ 'value' => $this->option('escape'),
+ 'description' =>__('CSV escape (default is backslash)','easy-table'))
+ ,Array(
+ 'name' => 'easy_table_plugin_option[fixlinebreak]',
+ 'label' => __('Fix linebreak','easy-table'),
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'description' => __('If terminator is not default (linebreak), you may encounter some issue with linebreak inside cell, try to check or uncheck this to resolve','easy-table'),
+ 'attr' => $this->option('fixlinebreak') ? 'checked="checked"' : '')
+ ,Array(
+ 'name' => 'easy_table_plugin_option[csvfile]',
+ 'label' => __('Allow read CSV from file?','easy-table'),
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'description' => __('Check this if you also want to convert CSV file to table','easy-table'),
+ 'attr' => $this->option('csvfile') ? 'checked="checked"' : '')
+ );
+ echo $this->render_form($fields);
+ ?>
+
+<input type="hidden" name="action" value="update" />
+<input type="hidden" name="easy_table_option_field" value="easy_table_plugin_option" />
+<p><input type="submit" class="button-primary" value="<?php _e('Save','easy-table');?>" /> </p>
+</form>
+</div>
+<div class="right">
+<?php
+
+$defaulttableexample = '
+[table caption="Just test table" width="500" colwidth="20|100|50" colalign="left|left|center|left|right"]
+no,head1,head2,head3,head4
+1,row1col1,row1col2,row1col3,100
+2,row2col1,row2col2,row2col3,20000
+3,row3col1,,row3col3,1405
+4,row4col1,row4col2,row4col3,23023
+[/table] ';
+$tableexample = $defaulttableexample;
+if(isset($_POST['test-easy-table'])){
+ $tableexample = $_POST['easy-table-test-area'];
+}
+
+if(isset($_POST['test-easy-table-reset'])){
+ $tableexample = $defaulttableexample;
+}
+
+?>
+<h3><?php _e('Possible parameter','easy-table');?></h3>
+<p><?php _e('These parameters commonly can override global options in the left side of this page. Example usage:','easy-table');?></p>
+<p> <code>[table param1="param-value1" param2="param-value2"]table data[/table]</code></p>
+<ol>
+<li><strong>class</strong>, <?php _e('default value','easy-table');?> <em>'table-striped'</em>, <?php _e('another value','easy-table');?> <em>table-bordered, table-striped, table-condensed</em></li>
+<li><strong>caption</strong>,<?php _e('default value','easy-table');?> <em>''</em></li>
+<li><strong>width</strong>, <?php _e('default value','easy-table');?> <em>'100%'</em></li>
+<li><strong>align</strong>, <?php _e('default value','easy-table');?> <em>'left'</em></li>
+<li><strong>th</strong>, <?php _e('default value','easy-table');?> <em>'true'</em></li>
+<li><strong>tf</strong>, <?php _e('default value','easy-table');?> <em>'false'</em></li>
+<li><strong>border</strong>, <?php _e('default value','easy-table');?> <em>'0'</em></li>
+<li><strong>id</strong>, <?php _e('default value','easy-table');?> <em>'false'</em></li>
+<li><strong>tablesorter</strong>, <?php _e('default value','easy-table');?> <em>'false'</em></li>
+<li><strong>file</strong>, <?php _e('default value','easy-table');?> <em>'false'</em></li>
+<li><strong>sort</strong>, <?php _e('default value','easy-table');?> <em>''</em></li>
+<li class="new"><strong>trim</strong>, <?php _e('default value','easy-table');?> <em>false</em></li>
+<li class="new"><strong>style</strong>, <?php _e('default value','easy-table');?> <em>''</em></li>
+<li class="new"><strong>limit</strong>, <?php _e('default value','easy-table');?> <em>0</em></li>
+<li class="new"><strong>terminator</strong>, <?php _e('default value','easy-table');?> <em>\n</em></li>
+<li class="new"><strong>colalign</strong>, <?php _e('default value','easy-table');?> <em>''</em>, see example on the test area</li>
+<li class="new"><strong>colwidth</strong>, <?php _e('default value','easy-table');?> <em>''</em>, see example on the test area</li>
+</ol>
+<h3><?php printf('Example usage of %s parameter','sort','easy-table');?></h3>
+<p><em>sort</em> <?php _e('parameter is for initial sorting order. Value for each column separated by comma. See example below:','easy-table');?></p>
+<ol>
+<li><?php _e('Set initial order of first column descending and second column ascending:','easy-table');?>
+<pre><code>[table sort="desc,asc"]
+col1,col2,col3
+col4,col5,col6
+[/table]</code></pre>
+</li>
+<li><?php _e('Set initial order of second column descending:','easy-table');?>
+<pre><code>[table sort=",desc,asc"]
+col1,col2,col3
+col4,col5,col6
+[/table]</code></pre>
+</li>
+<li><?php _e('Additionaly, sort option also can be set via sort attr in a cell. See example below','easy-table');?></li>
+</ol>
+<h3><?php _e('Cell attribute tag','easy-table');?></h3>
+<ol>
+<li><p><strong>attr</strong>, <?php _e('To set attribute for cell eg. class, colspan, rowspan, etc','easy-table');?></p>
+ <p><?php _e('Example','easy-table');?>: </p>
+
+<pre><code>[table]
+col1,col2[attr style="width:200px" class="someclass"],col3
+col4,col5,col6
+[/table]
+</code></pre>
+</li>
+
+<li><p><strong>attr sort</strong>, <?php _e('To set initial sort order, this is intended to TH (first row) only.','easy-table');?></p>
+ <p><?php _e('Example: sort second column descending ','easy-table');?> </p>
+
+<pre><code>[table]
+col1,col2[attr sort="desc"],col3
+col4,col5,col6
+[/table]
+</code></pre>
+<p><?php printf('To disable sort, use "%s". In the example below first column is not sortable','false','easy-table');?> </p>
+
+<pre><code>[table]
+col1[attr sort="false"],col2,col3
+col4,col5,col6
+[/table]
+</code></pre>
+</li>
+</ol>
+
+<h3><?php _e('Test area:','easy-table');?></h3>
+ <form action="" method="post">
+ <textarea name="easy-table-test-area" style="width:500px;height:200px;border:1px solid #ccc"><?php echo trim(htmlentities(stripslashes($tableexample)));?>
+ </textarea>
+ <input type="hidden" name="test-easy-table" value="1" />
+ <p><input class="button" type="submit" name="test-easy-table-reset" value="<?php _e('Reset','easy-table');?>" />
+ <input class="button-primary" type="submit" value="<?php _e('Update preview','easy-table');?> &raquo;" /></p></form>
+ <div>
+ <h3><?php _e('Preview','easy-table');?></h3>
+ <?php echo do_shortcode(stripslashes($tableexample));?>
+ </div>
+
+</div>
+<div class="clear"></div>
+<?php elseif($_GET['gettab'] == 'themes') : ?>
+ <h3><?php _e('Easy Table theme editor');?></h3>
+
+ <div class="row">
+ <div class="columns nine">
+ <textarea name="" id="easy-table-theme-editor"><?php echo esc_textarea($this->theme_content());?></textarea>
+ <input type="submit" class="button primary" value="Save"/>
+ </div>
+ <div class="columns three">
+ <ul>
+ <?php
+ foreach($this->themes() as $theme) {
+ echo '
+ <li><a href="#">'.$theme.'</a>
+ <a href="options-general.php?page=easy-table&gettab=themes&edit='.$theme.'">edit</a>
+ <a href="&edit-theme=1&clone=1#">clone</a>
+ <a href="#">delete</a>
+ <a href="#">preview</a>
+ </li>';
+ }
+ ?>
+ </ul>
+ <form action="">
+ New theme: <br/>
+ <input type="text" value="" placeholder="Theme name" name="themename"/>
+ <input type="submit" value="Create"/>
+ </form>
+ </div>
+ </div>
+
+<?php elseif($_GET['gettab'] == 'support') : ?>
+<p><?php _e('I have tried to make this plugin can be used as easy as possible and documentation as complete as possible. However it is also possible that you are still confused. Therefore feel free to ask. I would be happy to answer.','easy-table');?></p>
+<p><?php _e('You can use this discussion to get support, request feature or reporting bug.','easy-table');?></p>
+<p><a target="_blank" href="http://takien.com/plugins/easy-table"><?php _e('Before you ask something, make sure you have read documentation here!','easy-table');?></a></p>
+
+<div id="disqus_thread"></div>
+<script type="text/javascript">
+/* <![CDATA[ */
+ var disqus_url = 'http://takien.com/1126/easy-table-is-the-easiest-way-to-create-table-in-wordpress.php';
+ var disqus_identifier = '1126 http://takien.com/?p=1126';
+ var disqus_container_id = 'disqus_thread';
+ var disqus_domain = 'disqus.com';
+ var disqus_shortname = 'takien';
+ var disqus_title = "Easy Table is The Easiest Way to Create Table in WordPress";
+ var disqus_config = function () {
+ var config = this;
+ config.callbacks.preData.push(function() {
+ // clear out the container (its filled for SEO/legacy purposes)
+ document.getElementById(disqus_container_id).innerHTML = '';
+ });
+ config.callbacks.onReady.push(function() {
+ // sync comments in the background so we don't block the page
+ DISQUS.request.get('?cf_action=sync_comments&post_id=1126');
+ });
+ };
+ var facebookXdReceiverPath = 'http://takien.com/wp-content/plugins/disqus-comment-system/xd_receiver.htm';
+/* ]]> */
+</script>
+
+<script type="text/javascript">
+/* <![CDATA[ */
+ var DsqLocal = {
+ 'trackbacks': [
+ ],
+ 'trackback_url': "http:\/\/takien.com\/1126\/easy-table-is-the-easiest-way-to-create-table-in-wordpress.php\/trackback" };
+/* ]]> */
+</script>
+
+<script type="text/javascript">
+/* <![CDATA[ */
+(function() {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript';
+ dsq.async = true;
+ dsq.src = 'http' + '://' + disqus_shortname + '.' + disqus_domain + '/embed.js?pname=wordpress&pver=2.72';
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+})();
+/* ]]> */
+</script>
+<?php elseif ($_GET['gettab'] == 'about') : ?>
+<?php
+require_once(ABSPATH.'wp-admin/includes/plugin-install.php');
+$api = plugins_api('plugin_information', array('slug' => 'easy-table' ));
+?>
+ <div>
+ <h2 class="mainheader"><?php echo $this->easy_table_base('name') .' ' . $this->easy_table_base('version'); ?></h2>
+ <?php if ( ! empty($api->download_link) && ( current_user_can('install_plugins') || current_user_can('update_plugins') ) ) : ?>
+ <p class="action-button">
+ <?php
+ $status = install_plugin_install_status($api);
+ switch ( $status['status'] ) {
+ case 'install':
+ if ( $status['url'] )
+ echo '<a href="' . $status['url'] . '" target="_parent">' . __('Install Now') . '</a>';
+ break;
+ case 'update_available':
+ if ( $status['url'] )
+ echo '<a class="red" href="' . $status['url'] . '" target="_parent">' . __('Install Update Now') .'</a>';
+ break;
+ case 'newer_installed':
+ echo '<a class="green">' . sprintf(__('Newer Version (%s) Installed'), $status['version']) . '</a>';
+ break;
+ case 'latest_installed':
+ echo '<a class="green">' . __('Latest Version Installed') . '</a>';
+ break;
+ }
+ ?>
+ </p>
+ <?php endif; ?>
+
+ <ul>
+<?php if ( ! empty($api->version) ) : ?>
+ <li><strong><?php _e('Latest Version:','easy-table') ?></strong> <?php echo $api->version ?></li>
+<?php endif; if ( ! empty($api->author) ) : ?>
+ <li><strong><?php _e('Author:') ?></strong> <?php echo links_add_target($api->author, '_blank') ?></li>
+<?php endif; if ( ! empty($api->last_updated) ) : ?>
+ <li><strong><?php _e('Last Updated:') ?></strong> <span title="<?php echo $api->last_updated ?>"><?php
+ printf( __('%s ago'), human_time_diff(strtotime($api->last_updated)) ) ?></span></li>
+<?php endif; if ( ! empty($api->requires) ) : ?>
+ <li><strong><?php _e('Requires WordPress Version:') ?></strong> <?php printf(__('%s or higher'), $api->requires) ?></li>
+<?php endif; if ( ! empty($api->tested) ) : ?>
+ <li><strong><?php _e('Compatible up to:') ?></strong> <?php echo $api->tested ?></li>
+<?php endif; if ( ! empty($api->downloaded) ) : ?>
+ <li><strong><?php _e('Downloaded:') ?></strong> <?php printf(_n('%s time', '%s times', $api->downloaded), number_format_i18n($api->downloaded)) ?></li>
+<?php endif; if ( ! empty($api->slug) && empty($api->external) ) : ?>
+ <li><a target="_blank" href="http://wordpress.org/extend/plugins/<?php echo $api->slug ?>/"><?php _e('WordPress.org Plugin Page &#187;') ?></a></li>
+<?php endif; if ( ! empty($api->homepage) ) : ?>
+ <li><a target="_blank" href="<?php echo $api->homepage ?>"><?php _e('Plugin Homepage &#187;') ?></a></li>
+<?php endif; ?>
+ </ul>
+ <?php if ( ! empty($api->rating) ) : ?>
+ <h3><?php _e('Average Rating') ?></h3>
+ <div class="star-holder" title="<?php printf(_n('(based on %s rating)', '(based on %s ratings)', $api->num_ratings), number_format_i18n($api->num_ratings)); ?>">
+ <?php if ( version_compare( $GLOBALS['wp_version'], 3.4, '<') ) { ?>
+ <div class="star star-rating" style="width: <?php echo esc_attr($api->rating) ?>px"></div>
+ <div class="star star5"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('5 stars') ?>" /></div>
+ <div class="star star4"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('4 stars') ?>" /></div>
+ <div class="star star3"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('3 stars') ?>" /></div>
+ <div class="star star2"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('2 stars') ?>" /></div>
+ <div class="star star1"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('1 star') ?>" /></div>
+ <?php
+ }
+ else { ?>
+ <div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $api->rating ) ); ?>px"></div>
+ <?php } ?>
+ </div>
+ <small><?php printf(_n('(based on %s rating)', '(based on %s ratings)', $api->num_ratings), number_format_i18n($api->num_ratings)); ?></small>
+
+
+ <h3><?php _e('Support my work with donation','easy-table');?>:</h3>
+
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+<input type="hidden" name="cmd" value="_s-xclick">
+<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHdwYJKoZIhvcNAQcEoIIHaDCCB2QCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBiuJYBc1lBF7rbfQavcpZgzT8RvZGjID2Js94j7ju/SRNVtn+UPciq7Bi5fEWsM9WwVx52bndEV+WvBdQe3t2bV3EAXY8I3J2bAWczePAlZEcLy0umSnQGnRPIAZ9mk/JUKRAJmvd43rBkNqjzlhNXTSprXT0n2Vyqmq76WG6hJjELMAkGBSsOAwIaBQAwgfQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIC8jF6f82My+AgdAjf0SuFu46mt7lttlZYr5Z5U2CJIFyi51ihjPnZsxpoL0ekeLCAP8tFmo2cQM5ne/qx9oE9lE5Jfnxl+uoK1F2HOlxKl+x+jv7dsuMHUCJpULyq8/UsrJ3FXr8bZNAfKhJwtyswKpEiSyhBndkVj9vbeoH0V1+EoRmsyCcKs2qZKnVQQ/saz86aftIMYJ2r4yMBt10U8SUHC4Eq1JMWvAPNAPLoR6JQSYcF5z1HjhOHtnoFgfSOfP32CojuP9sRBOPUfvS20k9GWMxKEiD0u9RoIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTIwNzAxMDM0ODUwWjAjBgkqhkiG9w0BCQQxFgQU7GSbNXKovs7xPIkMognrn2q5DgwwDQYJKoZIhvcNAQEBBQAEgYB+x+XRIPErAHovudsWOwNV/9LJWlBTkRTfR1zNnO1I4pYrzAJ6MR4I0vsmvZSmvwIfcyNPLxc3ouRK2esTFVfKv/ICHYrTCXSGusyROWOlQRiQJvoQ65IUiW6HvBz81/JjRp5TNgAAbgEY9GlddvdVsjsVbqfroqI2GIvdTNY+6w==-----END PKCS7-----
+">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
+</form>
+<p><?php _e('Don\'t have money? No problem, you can rate my plugin instead.','easy-table');?>
+<a target="_blank" href="http://wordpress.org/extend/plugins/easy-table/"><?php _e('Click here to rate','easy-table');?></a></p>
+
+<h3><?php _e('Thanks to','easy-table');?>:</h3>
+
+<ul>
+<li><a target="_blank" href="<?php echo site_url();?>">You</a></li>
+<li><a target="_blank" href="http://php.net">PHP</a></li>
+<li><a target="_blank" href="http://wordpress.org">WordPress</a></li>
+<li>Tablesorter <?php _e('by','easy-table');?> <a target="_blank" href="http://tablesorter.com">Christian Bach</a></li>
+<li>CSS <?php _e('by','easy-table');?> <a target="_blank" href="http://twitter.github.com/bootstrap">Twitter Bootstrap</a></li>
+<li>jQuery metadata <?php _e('by','easy-table');?> <a target="_blank" href="https://github.com/jquery/jquery-metadata/">John Resig</a></li>
+<li>CuscoSky table styles <?php _e('by','easy-table');?> <a target="_blank" href="http://www.buayacorp.com">Braulio Soncco</a></li>
+<li>Tablesorter updated version <?php _e('by','easy-table');?> <a target="_blank" href="https://github.com/Mottie/tablesorter">Rob Garrison</a></li>
+
+</ul>
+ <?php endif; ?>
+ </div>
+<?php endif; ?>
+</div><!--wrap-->
+
+<?php
+ }
+
+} /* end class */
+}
+add_action('init', 'easy_table_init');
+function easy_table_init() {
+ if (class_exists('EasyTable')) {
+ new EasyTable();
+ }
+}
+
+/**
+* Create function str_getcsv if not exists in server
+* @since version 0.2
+* Use dedicated str_getcsv since 1.1
+*/
+if (!function_exists('easy_table_str_getcsv')) {
+ function easy_table_str_getcsv($input, $delimiter = ",", $enclosure = '"', $escape = '\\'){
+
+ /**
+ * Bug fix, custom terminator wont work
+ * @since version 1.1.1
+ */
+ if( ("\r" === $delimiter) OR ("\n" === $delimiter) ) {
+ }
+ else {
+ $input = str_replace("\n",'NLINEBREAK',$input);
+ $input = str_replace("\r",'RLINEBREAK',$input);
+ }
+ $input = str_ireplace( $escape.$delimiter,'_ESCAPED_SEPATATOR_',$input );
+
+ $fiveMBs = 5 * 1024 * 1024;
+ if (($handle = fopen("php://temp/maxmemory:$fiveMBs", 'r+')) !== FALSE) {
+ fputs($handle, $input);
+ rewind($handle);
+ $line = -1;
+ $return = Array();
+ /* add dynamic row limit,
+ * @since: 1.0
+ */
+
+ $option = get_option('easy_table_plugin_option');
+ $limit = !empty($option['limit']) ? (int)$option['limit'] : 2000;
+ while (($data = @fgetcsv( $handle, $limit, $delimiter, $enclosure )) !== FALSE) {
+ $num = count($data);
+ for ($c=0; $c < $num; $c++) {
+ $line++;
+ $data[$c] = str_replace('NLINEBREAK',"\n",$data[$c]);
+ $data[$c] = str_replace('RLINEBREAK',"\r",$data[$c]);
+ $data[$c] = str_replace('_ESCAPED_SEPATATOR_',$delimiter,$data[$c]);
+ $return[$line] = $data[$c];
+ }
+ }
+ fclose($handle);
+ return $return;
+ }
+ }
+}
+if(!function_exists('array_replace')) {
+ function array_replace(){
+ $array=array();
+ $n=func_num_args();
+ while ($n-- >0) {
+ $array+=func_get_arg($n);
+ }
+ return $array;
+ }
+} \ No newline at end of file
diff --git a/plugins/easy-table/images/asc.gif b/plugins/easy-table/images/asc.gif
new file mode 100644
index 00000000..74157867
--- /dev/null
+++ b/plugins/easy-table/images/asc.gif
Binary files differ
diff --git a/plugins/easy-table/images/bg.gif b/plugins/easy-table/images/bg.gif
new file mode 100644
index 00000000..fac668fc
--- /dev/null
+++ b/plugins/easy-table/images/bg.gif
Binary files differ
diff --git a/plugins/easy-table/images/desc.gif b/plugins/easy-table/images/desc.gif
new file mode 100644
index 00000000..3b30b3c5
--- /dev/null
+++ b/plugins/easy-table/images/desc.gif
Binary files differ
diff --git a/plugins/easy-table/images/icon-table.png b/plugins/easy-table/images/icon-table.png
new file mode 100644
index 00000000..c2f3a87d
--- /dev/null
+++ b/plugins/easy-table/images/icon-table.png
Binary files differ
diff --git a/plugins/easy-table/images/index.html b/plugins/easy-table/images/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/images/index.html
diff --git a/plugins/easy-table/inc/Encoding.php b/plugins/easy-table/inc/Encoding.php
new file mode 100644
index 00000000..9305afe0
--- /dev/null
+++ b/plugins/easy-table/inc/Encoding.php
@@ -0,0 +1,263 @@
+<?php
+/**
+ * @author "Sebastián Grignoli" <grignoli@framework2.com.ar>
+ * @package Encoding
+ * @version 1.1
+ * @link http://www.framework2.com.ar/dzone/forceUTF8-es/
+ * @example http://www.framework2.com.ar/dzone/forceUTF8-es/
+ * Class renamed to ForceEncode by "takien" <contact@takien.com>
+ */
+
+class ForceEncode {
+
+ protected static $win1252ToUtf8 = array(
+ 128 => "\xe2\x82\xac",
+
+ 130 => "\xe2\x80\x9a",
+ 131 => "\xc6\x92",
+ 132 => "\xe2\x80\x9e",
+ 133 => "\xe2\x80\xa6",
+ 134 => "\xe2\x80\xa0",
+ 135 => "\xe2\x80\xa1",
+ 136 => "\xcb\x86",
+ 137 => "\xe2\x80\xb0",
+ 138 => "\xc5\xa0",
+ 139 => "\xe2\x80\xb9",
+ 140 => "\xc5\x92",
+
+ 142 => "\xc5\xbd",
+
+
+ 145 => "\xe2\x80\x98",
+ 146 => "\xe2\x80\x99",
+ 147 => "\xe2\x80\x9c",
+ 148 => "\xe2\x80\x9d",
+ 149 => "\xe2\x80\xa2",
+ 150 => "\xe2\x80\x93",
+ 151 => "\xe2\x80\x94",
+ 152 => "\xcb\x9c",
+ 153 => "\xe2\x84\xa2",
+ 154 => "\xc5\xa1",
+ 155 => "\xe2\x80\xba",
+ 156 => "\xc5\x93",
+
+ 158 => "\xc5\xbe",
+ 159 => "\xc5\xb8"
+ );
+
+ protected static $brokenUtf8ToUtf8 = array(
+ "\xc2\x80" => "\xe2\x82\xac",
+
+ "\xc2\x82" => "\xe2\x80\x9a",
+ "\xc2\x83" => "\xc6\x92",
+ "\xc2\x84" => "\xe2\x80\x9e",
+ "\xc2\x85" => "\xe2\x80\xa6",
+ "\xc2\x86" => "\xe2\x80\xa0",
+ "\xc2\x87" => "\xe2\x80\xa1",
+ "\xc2\x88" => "\xcb\x86",
+ "\xc2\x89" => "\xe2\x80\xb0",
+ "\xc2\x8a" => "\xc5\xa0",
+ "\xc2\x8b" => "\xe2\x80\xb9",
+ "\xc2\x8c" => "\xc5\x92",
+
+ "\xc2\x8e" => "\xc5\xbd",
+
+
+ "\xc2\x91" => "\xe2\x80\x98",
+ "\xc2\x92" => "\xe2\x80\x99",
+ "\xc2\x93" => "\xe2\x80\x9c",
+ "\xc2\x94" => "\xe2\x80\x9d",
+ "\xc2\x95" => "\xe2\x80\xa2",
+ "\xc2\x96" => "\xe2\x80\x93",
+ "\xc2\x97" => "\xe2\x80\x94",
+ "\xc2\x98" => "\xcb\x9c",
+ "\xc2\x99" => "\xe2\x84\xa2",
+ "\xc2\x9a" => "\xc5\xa1",
+ "\xc2\x9b" => "\xe2\x80\xba",
+ "\xc2\x9c" => "\xc5\x93",
+
+ "\xc2\x9e" => "\xc5\xbe",
+ "\xc2\x9f" => "\xc5\xb8"
+ );
+
+ protected static $utf8ToWin1252 = array(
+ "\xe2\x82\xac" => "\x80",
+
+ "\xe2\x80\x9a" => "\x82",
+ "\xc6\x92" => "\x83",
+ "\xe2\x80\x9e" => "\x84",
+ "\xe2\x80\xa6" => "\x85",
+ "\xe2\x80\xa0" => "\x86",
+ "\xe2\x80\xa1" => "\x87",
+ "\xcb\x86" => "\x88",
+ "\xe2\x80\xb0" => "\x89",
+ "\xc5\xa0" => "\x8a",
+ "\xe2\x80\xb9" => "\x8b",
+ "\xc5\x92" => "\x8c",
+
+ "\xc5\xbd" => "\x8e",
+
+
+ "\xe2\x80\x98" => "\x91",
+ "\xe2\x80\x99" => "\x92",
+ "\xe2\x80\x9c" => "\x93",
+ "\xe2\x80\x9d" => "\x94",
+ "\xe2\x80\xa2" => "\x95",
+ "\xe2\x80\x93" => "\x96",
+ "\xe2\x80\x94" => "\x97",
+ "\xcb\x9c" => "\x98",
+ "\xe2\x84\xa2" => "\x99",
+ "\xc5\xa1" => "\x9a",
+ "\xe2\x80\xba" => "\x9b",
+ "\xc5\x93" => "\x9c",
+
+ "\xc5\xbe" => "\x9e",
+ "\xc5\xb8" => "\x9f"
+ );
+
+ static function toUTF8($text){
+ /**
+ * Function Encoding::toUTF8
+ *
+ * This function leaves UTF8 characters alone, while converting almost all non-UTF8 to UTF8.
+ *
+ * It assumes that the encoding of the original string is either Windows-1252 or ISO 8859-1.
+ *
+ * It may fail to convert characters to UTF-8 if they fall into one of these scenarios:
+ *
+ * 1) when any of these characters: ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞß
+ * are followed by any of these: ("group B")
+ * ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶•¸¹º»¼½¾¿
+ * For example: %ABREPRESENT%C9%BB. «REPRESENTÉ»
+ * The "«" (%AB) character will be converted, but the "É" followed by "»" (%C9%BB)
+ * is also a valid unicode character, and will be left unchanged.
+ *
+ * 2) when any of these: àáâãäåæçèéêëìíîï are followed by TWO chars from group B,
+ * 3) when any of these: ðñòó are followed by THREE chars from group B.
+ *
+ * @name toUTF8
+ * @param string $text Any string.
+ * @return string The same string, UTF8 encoded
+ *
+ */
+
+ if(is_array($text))
+ {
+ foreach($text as $k => $v)
+ {
+ $text[$k] = self::toUTF8($v);
+ }
+ return $text;
+ } elseif(is_string($text)) {
+
+ $max = strlen($text);
+ $buf = "";
+ for($i = 0; $i < $max; $i++){
+ $c1 = $text{$i};
+ if($c1>="\xc0"){ //Should be converted to UTF8, if it's not UTF8 already
+ $c2 = $i+1 >= $max? "\x00" : $text{$i+1};
+ $c3 = $i+2 >= $max? "\x00" : $text{$i+2};
+ $c4 = $i+3 >= $max? "\x00" : $text{$i+3};
+ if($c1 >= "\xc0" & $c1 <= "\xdf"){ //looks like 2 bytes UTF8
+ if($c2 >= "\x80" && $c2 <= "\xbf"){ //yeah, almost sure it's UTF8 already
+ $buf .= $c1 . $c2;
+ $i++;
+ } else { //not valid UTF8. Convert it.
+ $cc1 = (chr(ord($c1) / 64) | "\xc0");
+ $cc2 = ($c1 & "\x3f") | "\x80";
+ $buf .= $cc1 . $cc2;
+ }
+ } elseif($c1 >= "\xe0" & $c1 <= "\xef"){ //looks like 3 bytes UTF8
+ if($c2 >= "\x80" && $c2 <= "\xbf" && $c3 >= "\x80" && $c3 <= "\xbf"){ //yeah, almost sure it's UTF8 already
+ $buf .= $c1 . $c2 . $c3;
+ $i = $i + 2;
+ } else { //not valid UTF8. Convert it.
+ $cc1 = (chr(ord($c1) / 64) | "\xc0");
+ $cc2 = ($c1 & "\x3f") | "\x80";
+ $buf .= $cc1 . $cc2;
+ }
+ } elseif($c1 >= "\xf0" & $c1 <= "\xf7"){ //looks like 4 bytes UTF8
+ if($c2 >= "\x80" && $c2 <= "\xbf" && $c3 >= "\x80" && $c3 <= "\xbf" && $c4 >= "\x80" && $c4 <= "\xbf"){ //yeah, almost sure it's UTF8 already
+ $buf .= $c1 . $c2 . $c3;
+ $i = $i + 2;
+ } else { //not valid UTF8. Convert it.
+ $cc1 = (chr(ord($c1) / 64) | "\xc0");
+ $cc2 = ($c1 & "\x3f") | "\x80";
+ $buf .= $cc1 . $cc2;
+ }
+ } else { //doesn't look like UTF8, but should be converted
+ $cc1 = (chr(ord($c1) / 64) | "\xc0");
+ $cc2 = (($c1 & "\x3f") | "\x80");
+ $buf .= $cc1 . $cc2;
+ }
+ } elseif(($c1 & "\xc0") == "\x80"){ // needs conversion
+ if(isset(self::$win1252ToUtf8[ord($c1)])) { //found in Windows-1252 special cases
+ $buf .= self::$win1252ToUtf8[ord($c1)];
+ } else {
+ $cc1 = (chr(ord($c1) / 64) | "\xc0");
+ $cc2 = (($c1 & "\x3f") | "\x80");
+ $buf .= $cc1 . $cc2;
+ }
+ } else { // it doesn't need convesion
+ $buf .= $c1;
+ }
+ }
+ return $buf;
+ } else {
+ return $text;
+ }
+ }
+
+ static function toWin1252($text) {
+ if(is_array($text)) {
+ foreach($text as $k => $v) {
+ $text[$k] = self::toWin1252($v);
+ }
+ return $text;
+ } elseif(is_string($text)) {
+ return utf8_decode(str_replace(array_keys(self::$utf8ToWin1252), array_values(self::$utf8ToWin1252), self::toUTF8($text)));
+ } else {
+ return $text;
+ }
+ }
+
+ static function toISO8859($text) {
+ return self::toWin1252($text);
+ }
+
+ static function toLatin1($text) {
+ return self::toWin1252($text);
+ }
+
+ static function fixUTF8($text){
+ if(is_array($text)) {
+ foreach($text as $k => $v) {
+ $text[$k] = self::fixUTF8($v);
+ }
+ return $text;
+ }
+
+ $last = "";
+ while($last <> $text){
+ $last = $text;
+ $text = self::toUTF8(utf8_decode(str_replace(array_keys(self::$utf8ToWin1252), array_values(self::$utf8ToWin1252), $text)));
+ }
+ $text = self::toUTF8(utf8_decode(str_replace(array_keys(self::$utf8ToWin1252), array_values(self::$utf8ToWin1252), $text)));
+ return $text;
+ }
+
+ static function UTF8FixWin1252Chars($text){
+ // If you received an UTF-8 string that was converted from Windows-1252 as it was ISO8859-1
+ // (ignoring Windows-1252 chars from 80 to 9F) use this function to fix it.
+ // See: http://en.wikipedia.org/wiki/Windows-1252
+
+ return str_replace(array_keys(self::$brokenUtf8ToUtf8), array_values(self::$brokenUtf8ToUtf8), $text);
+ }
+
+ static function removeBOM($str=""){
+ if(substr($str, 0,3) == pack("CCC",0xef,0xbb,0xbf)) {
+ $str=substr($str, 3);
+ }
+ return $str;
+ }
+} \ No newline at end of file
diff --git a/plugins/easy-table/inc/index.html b/plugins/easy-table/inc/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/inc/index.html
diff --git a/plugins/easy-table/index.html b/plugins/easy-table/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/index.html
diff --git a/plugins/easy-table/js/easy-table-script.js b/plugins/easy-table/js/easy-table-script.js
new file mode 100644
index 00000000..8df48a66
--- /dev/null
+++ b/plugins/easy-table/js/easy-table-script.js
@@ -0,0 +1,39 @@
+/*
+ * Metadata - jQuery plugin for parsing metadata from elements
+ *
+ * Copyright (c) 2006 John Resig, Yehuda Katz, J?örn Zaefferer, Paul McLanahan
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Version: 2.1
+ *
+ */
+(function($,window,undefined){$.extend({metadata:{defaults:{type:"class",name:"metadata",cre:/({.*})/,single:"metadata"},setType:function(a,b){this.defaults.type=a;this.defaults.name=b},get:function(elem,opts){function getData(data){if("string"!==typeof data){return data}if(data.indexOf("{")<0){data=eval("("+data+")")}}function getObject(data){if("string"===typeof data){data=eval("("+data+")")}return data}var settings=$.extend({},this.defaults,opts),object={},data,match,attr;if(!settings.single.length){settings.single="metadata"}data=$.data(elem,settings.single);if(data){return data}data="{}";if(settings.type=="html5"){$(elem.attributes).each(function(){var a=this.nodeName;if(a.match(/^data-/)){a=a.replace(/^data-/,"");object[a]=getObject(this.nodeValue)}})}else{if(settings.type=="class"){match=settings.cre.exec(elem.className);if(match){data=match[1]}}else if(settings.type=="elem"){if(!elem.getElementsByTagName){return}match=elem.getElementsByTagName(settings.name);if(match.length){data=$.trim(match[0].innerHTML)}}else if(undefined!==elem.getAttribute){attr=elem.getAttribute(settings.name);if(attr){data=attr}}object=getObject(data.indexOf("{")<0?"{"+data+"}":data)}if(data!=="{}"){$.data(elem,settings.single,object)}return object}}});$.fn.metadata=function(a){return $.metadata.get(this[0],a)}})(jQuery,this);
+
+/*!
+* TableSorter 2.10.8 - Client-side table sorting with ease!
+* @requires jQuery v1.2.6+
+*
+* Copyright (c) 2007 Christian Bach
+* Examples and docs at: http://tablesorter.com
+* Dual licensed under the MIT and GPL licenses:
+* http://www.opensource.org/licenses/mit-license.php
+* http://www.gnu.org/licenses/gpl.html
+*
+* @type jQuery
+* @name tablesorter
+* @cat Plugins/Tablesorter
+* @author Christian Bach/christian.bach@polyester.se
+* @contributor Rob Garrison/https://github.com/Mottie/tablesorter
+*/
+
+!function(e){"use strict";e.extend({tablesorter:new function(){function n(e){if(typeof console!=="undefined"&&typeof console.log!=="undefined"){console.log(e)}else{alert(e)}}function r(e,t){n(e+" ("+((new Date).getTime()-t.getTime())+"ms)")}function i(t,n,r){if(!n){return""}var i=t.config,s=i.textExtraction,o="";if(s==="simple"){if(i.supportsTextContent){o=n.textContent}else{o=e(n).text()}}else{if(typeof s==="function"){o=s(n,t,r)}else if(typeof s==="object"&&s.hasOwnProperty(r)){o=s[r](n,t,r)}else{o=i.supportsTextContent?n.textContent:e(n).text()}}return e.trim(o)}function s(e,r,s,o){var u,a=t.parsers.length,f=false,l="",c=true;while(l===""&&c){s++;if(r[s]){f=r[s].cells[o];l=i(e,f,o);if(e.config.debug){n("Checking if value was empty on row "+s+", column: "+o+': "'+l+'"')}}else{c=false}}while(--a>=0){u=t.parsers[a];if(u&&u.id!=="text"&&u.is&&u.is(l,e,f)){return u}}return t.getParserById("text")}function o(e){var r=e.config,i=r.$tbodies=r.$table.children("tbody:not(."+r.cssInfoBlock+")"),o,u,a,f,l,c,h,p="";if(i.length===0){return r.debug?n("*Empty table!* Not building a parser cache"):""}o=i[0].rows;if(o[0]){u=[];a=o[0].cells.length;for(f=0;f<a;f++){l=r.$headers.filter(":not([colspan])");l=l.add(r.$headers.filter('[colspan="1"]')).filter('[data-column="'+f+'"]:last');c=r.headers[f];h=t.getParserById(t.getData(l,c,"sorter"));r.empties[f]=t.getData(l,c,"empty")||r.emptyTo||(r.emptyToBottom?"bottom":"top");r.strings[f]=t.getData(l,c,"string")||r.stringTo||"max";if(!h){h=s(e,o,-1,f)}if(r.debug){p+="column:"+f+"; parser:"+h.id+"; string:"+r.strings[f]+"; empty: "+r.empties[f]+"\n"}u.push(h)}}if(r.debug){n(p)}r.parsers=u}function u(s){var o=s.tBodies,u=s.config,a,f,l=u.parsers,c,h,p,d,v,m,g,y,b=[];u.cache={};if(!l){return u.debug?n("*Empty table!* Not building a cache"):""}if(u.debug){y=new Date}if(u.showProcessing){t.isProcessing(s,true)}for(v=0;v<o.length;v++){u.cache[v]={row:[],normalized:[]};if(!e(o[v]).hasClass(u.cssInfoBlock)){a=o[v]&&o[v].rows.length||0;f=o[v].rows[0]&&o[v].rows[0].cells.length||0;for(p=0;p<a;++p){m=e(o[v].rows[p]);g=[];if(m.hasClass(u.cssChildRow)){u.cache[v].row[u.cache[v].row.length-1]=u.cache[v].row[u.cache[v].row.length-1].add(m);continue}u.cache[v].row.push(m);for(d=0;d<f;++d){c=i(s,m[0].cells[d],d);h=l[d].format(c,s,m[0].cells[d],d);g.push(h);if((l[d].type||"").toLowerCase()==="numeric"){b[d]=Math.max(Math.abs(h)||0,b[d]||0)}}g.push(u.cache[v].normalized.length);u.cache[v].normalized.push(g)}u.cache[v].colMax=b}}if(u.showProcessing){t.isProcessing(s)}if(u.debug){r("Building cache for "+a+" rows",y)}}function a(n,i){var s=n.config,o=n.tBodies,u=[],a=s.cache,f,l,c,h,p,d,v,m,g,y,b,w;if(!a[0]){return}if(s.debug){w=new Date}for(g=0;g<o.length;g++){p=e(o[g]);if(p.length&&!p.hasClass(s.cssInfoBlock)){d=t.processTbody(n,p,true);f=a[g].row;l=a[g].normalized;c=l.length;h=c?l[0].length-1:0;for(v=0;v<c;v++){b=l[v][h];u.push(f[b]);if(!s.appender||!s.removeRows){y=f[b].length;for(m=0;m<y;m++){d.append(f[b][m])}}}t.processTbody(n,d,false)}}if(s.appender){s.appender(n,u)}if(s.debug){r("Rebuilt table",w)}if(!i){t.applyWidget(n)}e(n).trigger("sortEnd",n)}function f(t){var n=[],r={},i=0,s=e(t).find("thead:eq(0), tfoot").children("tr"),o,u,a,f,l,c,h,p,d,v,m,g;for(o=0;o<s.length;o++){c=s[o].cells;for(u=0;u<c.length;u++){l=c[u];h=l.parentNode.rowIndex;p=h+"-"+l.cellIndex;d=l.rowSpan||1;v=l.colSpan||1;if(typeof n[h]==="undefined"){n[h]=[]}for(a=0;a<n[h].length+1;a++){if(typeof n[h][a]==="undefined"){m=a;break}}r[p]=m;i=Math.max(m,i);e(l).attr({"data-column":m});for(a=h;a<h+d;a++){if(typeof n[a]==="undefined"){n[a]=[]}g=n[a];for(f=m;f<m+v;f++){g[f]="x"}}}}t.config.columns=i;return r}function l(e){return/^d/i.test(e)||e===1}function c(i){var s=f(i),o,u,a,c,h,d,v,m=i.config;m.headerList=[];m.headerContent=[];if(m.debug){v=new Date}c=m.cssIcon?'<i class="'+m.cssIcon+'"></i>':"";m.$headers=e(i).find(m.selectorHeaders).each(function(n){u=e(this);o=m.headers[n];m.headerContent[n]=this.innerHTML;h=m.headerTemplate.replace(/\{content\}/g,this.innerHTML).replace(/\{icon\}/g,c);if(m.onRenderTemplate){a=m.onRenderTemplate.apply(u,[n,h]);if(a&&typeof a==="string"){h=a}}this.innerHTML='<div class="tablesorter-header-inner">'+h+"</div>";if(m.onRenderHeader){m.onRenderHeader.apply(u,[n])}this.column=s[this.parentNode.rowIndex+"-"+this.cellIndex];this.order=l(t.getData(u,o,"sortInitialOrder")||m.sortInitialOrder)?[1,0,2]:[0,1,2];this.count=-1;this.lockedOrder=false;d=t.getData(u,o,"lockedOrder")||false;if(typeof d!=="undefined"&&d!==false){this.order=this.lockedOrder=l(d)?[1,1,1]:[0,0,0]}u.addClass(m.cssHeader);m.headerList[n]=this;u.parent().addClass(m.cssHeaderRow);u.attr("tabindex",0)});p(i);if(m.debug){r("Built headers:",v);n(m.$headers)}}function h(e,t,n){var r=e.config;r.$table.find(r.selectorRemove).remove();o(e);u(e);E(r.$table,t,n)}function p(n){var r,i=n.config;i.$headers.each(function(n,s){r=t.getData(s,i.headers[n],"sorter")==="false";s.sortDisabled=r;e(s)[r?"addClass":"removeClass"]("sorter-false")})}function d(t){var n,r,i,s,o=t.config,u=o.sortList,a=[o.cssAsc,o.cssDesc],f=e(t).find("tfoot tr").children().removeClass(a.join(" "));o.$headers.removeClass(a.join(" "));s=u.length;for(r=0;r<s;r++){if(u[r][1]!==2){n=o.$headers.not(".sorter-false").filter('[data-column="'+u[r][0]+'"]'+(s===1?":last":""));if(n.length){for(i=0;i<n.length;i++){if(!n[i].sortDisabled){n.eq(i).addClass(a[u[r][1]]);if(f.length){f.filter('[data-column="'+u[r][0]+'"]').eq(i).addClass(a[u[r][1]])}}}}}}}function v(t){if(t.config.widthFixed&&e(t).find("colgroup").length===0){var n=e("<colgroup>"),r=e(t).width();e(t.tBodies[0]).find("tr:first").children("td").each(function(){n.append(e("<col>").css("width",parseInt(e(this).width()/r*1e3,10)/10+"%"))});e(t).prepend(n)}}function m(t,n){var r,i,s,o=t.config,u=n||o.sortList;o.sortList=[];e.each(u,function(t,n){r=[parseInt(n[0],10),parseInt(n[1],10)];s=o.headerList[r[0]];if(s){o.sortList.push(r);i=e.inArray(r[1],s.order);s.count=i>=0?i:r[1]%(o.sortReset?3:2)}})}function g(e,t){return e&&e[t]?e[t].type||"":""}function y(n,r,i){var s,o,u,f,l,c=n.config,h=!i[c.sortMultiSortKey],p=e(n);p.trigger("sortStart",n);r.count=i[c.sortResetKey]?2:(r.count+1)%(c.sortReset?3:2);if(c.sortRestart){o=r;c.$headers.each(function(){if(this!==o&&(h||!e(this).is("."+c.cssDesc+",."+c.cssAsc))){this.count=-1}})}o=r.column;if(h){c.sortList=[];if(c.sortForce!==null){s=c.sortForce;for(u=0;u<s.length;u++){if(s[u][0]!==o){c.sortList.push(s[u])}}}f=r.order[r.count];if(f<2){c.sortList.push([o,f]);if(r.colSpan>1){for(u=1;u<r.colSpan;u++){c.sortList.push([o+u,f])}}}}else{if(c.sortAppend&&c.sortList.length>1){if(t.isValueInArray(c.sortAppend[0][0],c.sortList)){c.sortList.pop()}}if(t.isValueInArray(o,c.sortList)){for(u=0;u<c.sortList.length;u++){l=c.sortList[u];f=c.headerList[l[0]];if(l[0]===o){l[1]=f.order[f.count];if(l[1]===2){c.sortList.splice(u,1);f.count=-1}}}}else{f=r.order[r.count];if(f<2){c.sortList.push([o,f]);if(r.colSpan>1){for(u=1;u<r.colSpan;u++){c.sortList.push([o+u,f])}}}}}if(c.sortAppend!==null){s=c.sortAppend;for(u=0;u<s.length;u++){if(s[u][0]!==o){c.sortList.push(s[u])}}}p.trigger("sortBegin",n);setTimeout(function(){d(n);b(n);a(n)},1)}function b(t){var n=0,i=t.config,s=i.sortList,o=s.length,u=t.tBodies.length,a,f,l,c,h,p,d,v,m,y;if(i.serverSideSorting||!i.cache[0]){return}if(i.debug){a=new Date}for(l=0;l<u;l++){h=i.cache[l].colMax;p=i.cache[l].normalized;d=p.length;y=p&&p[0]?p[0].length-1:0;p.sort(function(r,u){for(f=0;f<o;f++){c=s[f][0];m=s[f][1];v=/n/i.test(g(i.parsers,c))?"Numeric":"Text";v+=m===0?"":"Desc";if(/Numeric/.test(v)&&i.strings[c]){if(typeof i.string[i.strings[c]]==="boolean"){n=(m===0?1:-1)*(i.string[i.strings[c]]?-1:1)}else{n=i.strings[c]?i.string[i.strings[c]]||0:0}}var a=e.tablesorter["sort"+v](t,r[c],u[c],c,h[c],n);if(a){return a}}return r[y]-u[y]})}if(i.debug){r("Sorting on "+s.toString()+" and dir "+m+" time",a)}}function w(e,t){e.trigger("updateComplete");if(typeof t==="function"){t(e[0])}}function E(e,t,n){if(t!==false&&!e[0].isProcessing){e.trigger("sorton",[e[0].config.sortList,function(){w(e,n)}])}else{w(e,n)}}function S(n){var r=n.config,s=r.$table,f,l;r.$headers.find(r.selectorSort).add(r.$headers.filter(r.selectorSort)).unbind("mousedown.tablesorter mouseup.tablesorter sort.tablesorter keypress.tablesorter").bind("mousedown.tablesorter mouseup.tablesorter sort.tablesorter keypress.tablesorter",function(t,i){if((t.which||t.button)!==1&&!/sort|keypress/.test(t.type)||t.type==="keypress"&&t.which!==13){return false}if(t.type==="mouseup"&&i!==true&&(new Date).getTime()-l>250){return false}if(t.type==="mousedown"){l=(new Date).getTime();return t.target.tagName==="INPUT"?"":!r.cancelSelection}if(r.delayInit&&!r.cache){u(n)}var s=/TH|TD/.test(this.tagName)?e(this):e(this).parents("th, td").filter(":first"),o=s[0];if(!o.sortDisabled){y(n,o,t)}});if(r.cancelSelection){r.$headers.attr("unselectable","on").bind("selectstart",false).css({"user-select":"none",MozUserSelect:"none"})}s.unbind("sortReset update updateRows updateCell updateAll addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(".tablesorter ")).bind("sortReset.tablesorter",function(e){e.stopPropagation();r.sortList=[];d(n);b(n);a(n)}).bind("updateAll.tablesorter",function(e,r,i){e.stopPropagation();t.refreshWidgets(n,true,true);t.restoreHeaders(n);c(n);S(n);h(n,r,i)}).bind("update.tablesorter updateRows.tablesorter",function(e,t,r){e.stopPropagation();p(n);h(n,t,r)}).bind("updateCell.tablesorter",function(t,o,u,a){t.stopPropagation();s.find(r.selectorRemove).remove();var f,l,c,h=s.find("tbody"),p=h.index(e(o).parents("tbody").filter(":first")),d=e(o).parents("tr").filter(":first");o=e(o)[0];if(h.length&&p>=0){l=h.eq(p).find("tr").index(d);c=o.cellIndex;f=r.cache[p].normalized[l].length-1;r.cache[p].row[n.config.cache[p].normalized[l][f]]=d;r.cache[p].normalized[l][c]=r.parsers[c].format(i(n,o,c),n,o,c);E(s,u,a)}}).bind("addRows.tablesorter",function(e,t,u,a){e.stopPropagation();var l,c=t.filter("tr").length,h=[],p=t[0].cells.length,d=s.find("tbody").index(t.parents("tbody").filter(":first"));if(!r.parsers){o(n)}for(l=0;l<c;l++){for(f=0;f<p;f++){h[f]=r.parsers[f].format(i(n,t[l].cells[f],f),n,t[l].cells[f],f)}h.push(r.cache[d].row.length);r.cache[d].row.push([t[l]]);r.cache[d].normalized.push(h);h=[]}E(s,u,a)}).bind("sorton.tablesorter",function(e,t,r,i){e.stopPropagation();s.trigger("sortStart",this);m(n,t);d(n);s.trigger("sortBegin",this);b(n);a(n,i);if(typeof r==="function"){r(n)}}).bind("appendCache.tablesorter",function(e,t,r){e.stopPropagation();a(n,r);if(typeof t==="function"){t(n)}}).bind("applyWidgetId.tablesorter",function(e,i){e.stopPropagation();t.getWidgetById(i).format(n,r,r.widgetOptions)}).bind("applyWidgets.tablesorter",function(e,r){e.stopPropagation();t.applyWidget(n,r)}).bind("refreshWidgets.tablesorter",function(e,r,i){e.stopPropagation();t.refreshWidgets(n,r,i)}).bind("destroy.tablesorter",function(e,r,i){e.stopPropagation();t.destroy(n,r,i)})}var t=this;t.version="2.10.8";t.parsers=[];t.widgets=[];t.defaults={theme:"default",widthFixed:false,showProcessing:false,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:true,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:true,delayInit:false,serverSideSorting:false,headers:{},ignoreCase:true,sortForce:null,sortList:[],sortAppend:null,sortInitialOrder:"asc",sortLocaleCompare:false,sortReset:false,sortRestart:false,emptyTo:"bottom",stringTo:"max",textExtraction:"simple",textSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:true,initialized:null,tableClass:"tablesorter",cssAsc:"tablesorter-headerAsc",cssChildRow:"tablesorter-childRow",cssDesc:"tablesorter-headerDesc",cssHeader:"tablesorter-header",cssHeaderRow:"tablesorter-headerRow",cssIcon:"tablesorter-icon",cssInfoBlock:"tablesorter-infoOnly",cssProcessing:"tablesorter-processing",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:false,headerList:[],empties:{},strings:{},parsers:[]};t.log=n;t.benchmark=r;t.construct=function(r){return this.each(function(){if(!this.tHead||this.tBodies.length===0||this.hasInitialized===true){return this.config&&this.config.debug?n("stopping initialization! No thead, tbody or tablesorter has already been initialized"):""}var i=e(this),s=this,a,f="",l=e.metadata;s.hasInitialized=false;s.isProcessing=true;s.config={};a=e.extend(true,s.config,t.defaults,r);e.data(s,"tablesorter",a);if(a.debug){e.data(s,"startoveralltimer",new Date)}a.supportsTextContent=e("<span>x</span>")[0].textContent==="x";a.supportsDataObject=parseFloat(e.fn.jquery)>=1.4;a.string={max:1,min:-1,"max+":1,"max-":-1,zero:0,none:0,"null":0,top:true,bottom:false};if(!/tablesorter\-/.test(i.attr("class"))){f=a.theme!==""?" tablesorter-"+a.theme:""}a.$table=i.addClass(a.tableClass+f);a.$tbodies=i.children("tbody:not(."+a.cssInfoBlock+")");c(s);v(s);o(s);if(!a.delayInit){u(s)}S(s);if(a.supportsDataObject&&typeof i.data().sortlist!=="undefined"){a.sortList=i.data().sortlist}else if(l&&i.metadata()&&i.metadata().sortlist){a.sortList=i.metadata().sortlist}t.applyWidget(s,true);if(a.sortList.length>0){i.trigger("sorton",[a.sortList,{},!a.initWidgets])}else if(a.initWidgets){t.applyWidget(s)}if(a.showProcessing){i.unbind("sortBegin.tablesorter sortEnd.tablesorter").bind("sortBegin.tablesorter sortEnd.tablesorter",function(e){t.isProcessing(s,e.type==="sortBegin")})}s.hasInitialized=true;s.isProcessing=false;if(a.debug){t.benchmark("Overall initialization time",e.data(s,"startoveralltimer"))}i.trigger("tablesorter-initialized",s);if(typeof a.initialized==="function"){a.initialized(s)}})};t.isProcessing=function(n,r,i){n=e(n);var s=n[0].config,o=i||n.find("."+s.cssHeader);if(r){if(s.sortList.length>0){o=o.filter(function(){return this.sortDisabled?false:t.isValueInArray(parseFloat(e(this).attr("data-column")),s.sortList)})}o.addClass(s.cssProcessing)}else{o.removeClass(s.cssProcessing)}};t.processTbody=function(t,n,r){var i;if(r){t.isProcessing=true;n.before('<span class="tablesorter-savemyplace"/>');i=e.fn.detach?n.detach():n.remove();return i}i=e(t).find("span.tablesorter-savemyplace");n.insertAfter(i);i.remove();t.isProcessing=false};t.clearTableBody=function(t){e(t)[0].config.$tbodies.empty()};t.restoreHeaders=function(t){var n=t.config;n.$table.find(n.selectorHeaders).each(function(t){if(e(this).find(".tablesorter-header-inner").length){e(this).html(n.headerContent[t])}})};t.destroy=function(n,r,i){n=e(n)[0];if(!n.hasInitialized){return}t.refreshWidgets(n,true,true);var s=e(n),o=n.config,u=s.find("thead:first"),a=u.find("tr."+o.cssHeaderRow).removeClass(o.cssHeaderRow),f=s.find("tfoot:first > tr").children("th, td");u.find("tr").not(a).remove();s.removeData("tablesorter").unbind("sortReset update updateAll updateRows updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd ".split(" ").join(".tablesorter "));o.$headers.add(f).removeClass(o.cssHeader+" "+o.cssAsc+" "+o.cssDesc).removeAttr("data-column");a.find(o.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter keypress.tablesorter");t.restoreHeaders(n);if(r!==false){s.removeClass(o.tableClass+" tablesorter-"+o.theme)}n.hasInitialized=false;if(typeof i==="function"){i(n)}};t.regex=[/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,/^0x[0-9a-f]+$/i];t.sortText=function(e,n,r,i){if(n===r){return 0}var s=e.config,o=s.string[s.empties[i]||s.emptyTo],u=t.regex,a,f,l,c,h,p,d,v;if(n===""&&o!==0){return typeof o==="boolean"?o?-1:1:-o||-1}if(r===""&&o!==0){return typeof o==="boolean"?o?1:-1:o||1}if(typeof s.textSorter==="function"){return s.textSorter(n,r,e,i)}a=n.replace(u[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");l=r.replace(u[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");f=parseInt(n.match(u[2]),16)||a.length!==1&&n.match(u[1])&&Date.parse(n);c=parseInt(r.match(u[2]),16)||f&&r.match(u[1])&&Date.parse(r)||null;if(c){if(f<c){return-1}if(f>c){return 1}}v=Math.max(a.length,l.length);for(d=0;d<v;d++){h=isNaN(a[d])?a[d]||0:parseFloat(a[d])||0;p=isNaN(l[d])?l[d]||0:parseFloat(l[d])||0;if(isNaN(h)!==isNaN(p)){return isNaN(h)?1:-1}if(typeof h!==typeof p){h+="";p+=""}if(h<p){return-1}if(h>p){return 1}}return 0};t.sortTextDesc=function(e,n,r,i){if(n===r){return 0}var s=e.config,o=s.string[s.empties[i]||s.emptyTo];if(n===""&&o!==0){return typeof o==="boolean"?o?-1:1:o||1}if(r===""&&o!==0){return typeof o==="boolean"?o?1:-1:-o||-1}if(typeof s.textSorter==="function"){return s.textSorter(r,n,e,i)}return t.sortText(e,r,n)};t.getTextValue=function(e,t,n){if(t){var r,i=e?e.length:0,s=t+n;for(r=0;r<i;r++){s+=e.charCodeAt(r)}return n*s}return 0};t.sortNumeric=function(e,n,r,i,s,o){if(n===r){return 0}var u=e.config,a=u.string[u.empties[i]||u.emptyTo];if(n===""&&a!==0){return typeof a==="boolean"?a?-1:1:-a||-1}if(r===""&&a!==0){return typeof a==="boolean"?a?1:-1:a||1}if(isNaN(n)){n=t.getTextValue(n,s,o)}if(isNaN(r)){r=t.getTextValue(r,s,o)}return n-r};t.sortNumericDesc=function(e,n,r,i,s,o){if(n===r){return 0}var u=e.config,a=u.string[u.empties[i]||u.emptyTo];if(n===""&&a!==0){return typeof a==="boolean"?a?-1:1:a||1}if(r===""&&a!==0){return typeof a==="boolean"?a?1:-1:-a||-1}if(isNaN(n)){n=t.getTextValue(n,s,o)}if(isNaN(r)){r=t.getTextValue(r,s,o)}return r-n};t.characterEquivalents={a:"áàâãäąå",A:"ÃÀÂÃÄĄÅ",c:"çćÄ",C:"ÇĆČ",e:"éèêëěę",E:"ÉÈÊËĚĘ",i:"íìİîïı",I:"ÃÌİÎÃ",o:"óòôõö",O:"ÓÒÔÕÖ",ss:"ß",SS:"ẞ",u:"úùûüů",U:"ÚÙÛÜŮ"};t.replaceAccents=function(e){var n,r="[",i=t.characterEquivalents;if(!t.characterRegex){t.characterRegexArray={};for(n in i){if(typeof n==="string"){r+=i[n];t.characterRegexArray[n]=new RegExp("["+i[n]+"]","g")}}t.characterRegex=new RegExp(r+"]")}if(t.characterRegex.test(e)){for(n in i){if(typeof n==="string"){e=e.replace(t.characterRegexArray[n],n)}}}return e};t.isValueInArray=function(e,t){var n,r=t.length;for(n=0;n<r;n++){if(t[n][0]===e){return true}}return false};t.addParser=function(e){var n,r=t.parsers.length,i=true;for(n=0;n<r;n++){if(t.parsers[n].id.toLowerCase()===e.id.toLowerCase()){i=false}}if(i){t.parsers.push(e)}};t.getParserById=function(e){var n,r=t.parsers.length;for(n=0;n<r;n++){if(t.parsers[n].id.toLowerCase()===e.toString().toLowerCase()){return t.parsers[n]}}return false};t.addWidget=function(e){t.widgets.push(e)};t.getWidgetById=function(e){var n,r,i=t.widgets.length;for(n=0;n<i;n++){r=t.widgets[n];if(r&&r.hasOwnProperty("id")&&r.id.toLowerCase()===e.toLowerCase()){return r}}};t.applyWidget=function(n,i){n=e(n)[0];var s=n.config,o=s.widgetOptions,u=[],a,f,l,c;if(s.debug){a=new Date}if(s.widgets.length){s.widgets=e.grep(s.widgets,function(t,n){return e.inArray(t,s.widgets)===n});e.each(s.widgets||[],function(e,n){c=t.getWidgetById(n);if(c&&c.id){if(!c.priority){c.priority=10}u[e]=c}});u.sort(function(e,t){return e.priority<t.priority?-1:e.priority===t.priority?0:1});e.each(u,function(t,r){if(r){if(i){if(r.hasOwnProperty("options")){o=n.config.widgetOptions=e.extend(true,{},r.options,o)}if(r.hasOwnProperty("init")){r.init(n,r,s,o)}}else if(!i&&r.hasOwnProperty("format")){r.format(n,s,o,false)}}})}if(s.debug){l=s.widgets.length;r("Completed "+(i===true?"initializing ":"applying ")+l+" widget"+(l!==1?"s":""),a)}};t.refreshWidgets=function(r,i,s){r=e(r)[0];var o,u=r.config,a=u.widgets,f=t.widgets,l=f.length;for(o=0;o<l;o++){if(f[o]&&f[o].id&&(i||e.inArray(f[o].id,a)<0)){if(u.debug){n("Refeshing widgets: Removing "+f[o].id)}if(f[o].hasOwnProperty("remove")){f[o].remove(r,u,u.widgetOptions)}}}if(s!==true){t.applyWidget(r,i)}};t.getData=function(t,n,r){var i="",s=e(t),o,u;if(!s.length){return""}o=e.metadata?s.metadata():false;u=" "+(s.attr("class")||"");if(typeof s.data(r)!=="undefined"||typeof s.data(r.toLowerCase())!=="undefined"){i+=s.data(r)||s.data(r.toLowerCase())}else if(o&&typeof o[r]!=="undefined"){i+=o[r]}else if(n&&typeof n[r]!=="undefined"){i+=n[r]}else if(u!==" "&&u.match(" "+r+"-")){i=u.match(new RegExp("\\s"+r+"-([\\w-]+)"))[1]||""}return e.trim(i)};t.formatFloat=function(t,n){if(typeof t!=="string"||t===""){return t}var r,i=n&&n.config?n.config.usNumberFormat!==false:typeof n!=="undefined"?n:true;if(i){t=t.replace(/,/g,"")}else{t=t.replace(/[\s|\.]/g,"").replace(/,/g,".")}if(/^\s*\([.\d]+\)/.test(t)){t=t.replace(/^\s*\(/,"-").replace(/\)/,"")}r=parseFloat(t);return isNaN(r)?e.trim(t):r};t.isDigit=function(e){return isNaN(e)?/^[\-+(]?\d+[)]?$/.test(e.toString().replace(/[,.'"\s]/g,"")):true}}});var t=e.tablesorter;e.fn.extend({tablesorter:t.construct});t.addParser({id:"text",is:function(){return true},format:function(n,r){var i=r.config;if(n){n=e.trim(i.ignoreCase?n.toLocaleLowerCase():n);n=i.sortLocaleCompare?t.replaceAccents(n):n}return n},type:"text"});t.addParser({id:"digit",is:function(e){return t.isDigit(e)},format:function(n,r){var i=t.formatFloat((n||"").replace(/[^\w,. \-()]/g,""),r);return n&&typeof i==="number"?i:n?e.trim(n&&r.config.ignoreCase?n.toLocaleLowerCase():n):n},type:"numeric"});t.addParser({id:"currency",is:function(e){return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((e||"").replace(/[,. ]/g,""))},format:function(n,r){var i=t.formatFloat((n||"").replace(/[^\w,. \-()]/g,""),r);return n&&typeof i==="number"?i:n?e.trim(n&&r.config.ignoreCase?n.toLocaleLowerCase():n):n},type:"numeric"});t.addParser({id:"ipAddress",is:function(e){return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(e)},format:function(e,n){var r,i=e?e.split("."):"",s="",o=i.length;for(r=0;r<o;r++){s+=("00"+i[r]).slice(-3)}return e?t.formatFloat(s,n):e},type:"numeric"});t.addParser({id:"url",is:function(e){return/^(https?|ftp|file):\/\//.test(e)},format:function(t){return t?e.trim(t.replace(/(https?|ftp|file):\/\//,"")):t},type:"text"});t.addParser({id:"isoDate",is:function(e){return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(e)},format:function(e,n){return e?t.formatFloat(e!==""?(new Date(e.replace(/-/g,"/"))).getTime()||"":"",n):e},type:"numeric"});t.addParser({id:"percent",is:function(e){return/(\d\s*?%|%\s*?\d)/.test(e)&&e.length<15},format:function(e,n){return e?t.formatFloat(e.replace(/%/g,""),n):e},type:"numeric"});t.addParser({id:"usLongDate",is:function(e){return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(e)||/^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(e)},format:function(e,n){return e?t.formatFloat((new Date(e.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",n):e},type:"numeric"});t.addParser({id:"shortDate",is:function(e){return/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/.test((e||"").replace(/\s+/g," ").replace(/[\-.,]/g,"/"))},format:function(e,n,r,i){if(e){var s=n.config,o=s.headerList[i],u=o.dateFormat||t.getData(o,s.headers[i],"dateFormat")||s.dateFormat;e=e.replace(/\s+/g," ").replace(/[\-.,]/g,"/");if(u==="mmddyyyy"){e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2")}else if(u==="ddmmyyyy"){e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1")}else if(u==="yyyymmdd"){e=e.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3")}}return e?t.formatFloat((new Date(e)).getTime()||"",n):e},type:"numeric"});t.addParser({id:"time",is:function(e){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(e)},format:function(e,n){return e?t.formatFloat((new Date("2000/01/01 "+e.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",n):e},type:"numeric"});t.addParser({id:"metadata",is:function(){return false},format:function(t,n,r){var i=n.config,s=!i.parserMetadataName?"sortValue":i.parserMetadataName;return e(r).metadata()[s]},type:"numeric"});t.addWidget({id:"zebra",priority:90,format:function(n,r,i){var s,o,u,a,f,l,c,h,p=new RegExp(r.cssChildRow,"i"),d=r.$tbodies;if(r.debug){l=new Date}for(c=0;c<d.length;c++){s=d.eq(c);h=s.children("tr").length;if(h>1){a=0;o=s.children("tr:visible");o.each(function(){u=e(this);if(!p.test(this.className)){a++}f=a%2===0;u.removeClass(i.zebra[f?1:0]).addClass(i.zebra[f?0:1])})}}if(r.debug){t.benchmark("Applying Zebra widget",l)}},remove:function(t,n,r){var i,s,o=n.$tbodies,u=(r.zebra||["even","odd"]).join(" ");for(i=0;i<o.length;i++){s=e.tablesorter.processTbody(t,o.eq(i),true);s.children().removeClass(u);e.tablesorter.processTbody(t,s,false)}}})}(jQuery)
+
+/*easy table*/
+jQuery(document).ready(function($) {
+ $("table.tablesorter").tablesorter({
+ cssHeader:'easy-table-header'
+ })
+}); \ No newline at end of file
diff --git a/plugins/easy-table/js/index.html b/plugins/easy-table/js/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/js/index.html
diff --git a/plugins/easy-table/js/ttooltip/script/index.html b/plugins/easy-table/js/ttooltip/script/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/js/ttooltip/script/index.html
diff --git a/plugins/easy-table/js/ttooltip/script/jquery-ttooltip.js b/plugins/easy-table/js/ttooltip/script/jquery-ttooltip.js
new file mode 100644
index 00000000..6b9ccf1e
--- /dev/null
+++ b/plugins/easy-table/js/ttooltip/script/jquery-ttooltip.js
@@ -0,0 +1,250 @@
+/*!
+ * tTooltip v0.1
+ *
+ * Copyright 2012 Takien, No Inc
+ * http://takien.com
+ *
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * follow @cektkp and @perdanaweb
+ */
+(function($) {
+ function arrow_pos(el){
+ var pos = el.position();
+ var top = pos.top-$(window).scrollTop();
+ var left = pos.left-$(window).scrollLeft();
+ var right = $(window).width()-(left+el.width());
+ var bottom = $(window).height()-(top+el.height());
+ var ret = 'topleft';
+ if(top > bottom){
+ ret = 'bottom';
+ } else {
+ ret = 'top';
+ }
+
+ if(left > right){
+ ret += 'right';
+ }
+ else{
+ ret += 'left';
+ }
+
+ return ret;
+ }
+
+ $.fn.ttooltip = function(customOptions) {
+ var o = $.extend({}, $.fn.ttooltip.defaultOptions, customOptions);
+ var tp = $(o.template);
+ var c = tp.find('.ttooltip-content');
+ var t = tp.find('.ttooltip-title');
+ var f = tp.find('.ttooltip-footer');
+ var timeout = 0;
+ var times = 0;
+ var tooltip;
+ var source;
+
+ tp.css({
+ 'position':'absolute',
+ 'max-width':o.maxwidth
+ });
+
+ return this.each(function(index) {
+ var tt = $(this);
+ tt.bind(o.trigger,function(e){
+
+
+ clearInterval(timeout);
+
+ /* append template to body*/
+ tp.appendTo(document.body);
+
+ /* update tp object to the newest dom */
+ tp = $('.ttooltip-wrap');
+
+ c = tp.find('.ttooltip-content');
+ t = tp.find('.ttooltip-title');
+ f = tp.find('.ttooltip-footer');
+
+ /* collect data from data attribute */
+ source = tt.data();
+ if(source.href==undefined){
+ source.href=tt.attr('href');
+ }
+
+ /* if no content, nothing to do here */
+ if(source.content == undefined){
+ return false;
+ }
+ /* set the content */
+ /* if content is ajax, get data from data-href if any or from href attribute */
+
+ if(source.content == 'ajax'){
+ $.get(source.href,function(data){
+ tp.find('.ttooltip-inner').html(data);
+ o.onload(tp,tt);
+ });
+ }
+ else {
+ t.show().html(source.title);
+ c.show().html(source.content);
+ f.show().html(source.footer);
+
+ o.onload(tp,tt);
+
+ /* hide footer if empty */
+ if(source.footer==undefined){
+ f.empty().hide();
+ }
+ /* hide title if empty */
+ if(source.title==undefined){
+ t.empty().hide();
+ }
+ }
+
+
+
+ /* add clearfix to the footer */
+ c.addClass('clearfix');
+ f.addClass('clearfix');
+
+ /* remove any position class, then update with new position class */
+ tp
+ .removeClass()
+ .addClass('ttooltip-wrap ttooltip-'+arrow_pos(tt))
+ .fadeIn();
+
+
+
+ var arrow = tp.find('.ttooltip-arrow');
+ var mouseleft = (e.pageX-((arrow.outerWidth()*0.5)+arrow.position().left));
+ var distance = 25;
+ var mousetop;
+ /* do not overlap mouse cursor with arrow */
+ mouseleft = mouseleft - distance;
+
+ arrow.removeClass('tooltip-arrow-gray');
+
+ /* update top position */
+ /* mousetop = tt.position().top+tt.outerHeight()+arrow.outerHeight();
+ if((arrow_pos(tt) == 'bottomright') || (arrow_pos(tt) == 'bottomleft')){
+ mousetop = tt.position().top-tp.outerHeight()-arrow.outerHeight();
+ mouseleft = mouseleft - distance;
+ distance = 0;
+
+ if(tp.find('.ttooltip-footer').html() !=''){
+ arrow.addClass('tooltip-arrow-gray');
+ }
+ } */
+ mousetop = tt.offset().top+tt.outerHeight()+arrow.outerHeight();
+ if((arrow_pos(tt) == 'bottomright') || (arrow_pos(tt) == 'bottomleft')){
+ mousetop = tt.offset().top-tp.outerHeight()-arrow.outerHeight();
+ mouseleft = mouseleft - distance;
+ distance = 0;
+
+ if(tp.find('.ttooltip-footer').html() !=''){
+ arrow.addClass('tooltip-arrow-gray');
+ }
+ }
+
+ tp
+ .css({
+ 'top' : mousetop,
+ 'left' : mouseleft,
+ 'width': source.width?source.width:'auto',
+ 'opacity':1
+ })
+ .fadeIn();
+
+
+
+
+ /* follow mouse movement, horizontal only */
+ if(o.followmouse) {
+ $(this).mousemove(function(x){
+ tp.css({
+ 'top':mousetop,
+ 'left':x.pageX-arrow.position().left-distance
+ })
+ });
+ }
+
+ /* close on mouseleave*/
+
+ if(o.autohide){
+ /* define times, to prevent event triggered twice*/
+ closewhat($(this));
+ closewhat(tp);
+ }
+
+
+ function closewhat(what){
+ what.bind(o.close,function(){
+ times++;
+ if(times==1){
+ timeout = setTimeout(function(){
+ close(tp);
+ },o.timeout);
+
+ tp.bind('mouseenter',function(){
+ times=0;
+ clearTimeout(timeout);
+ });
+ /*updated 30/09/2012*/
+ tt.bind('mouseenter',function(){
+ times=0;
+ clearTimeout(timeout);
+ });
+ }
+ });
+ }
+
+ /* close on esc */
+ if(o.closeonesc){
+ document.onkeydown = function(evt) {
+ evt = evt || window.event;
+ if (evt.keyCode == 27) {
+ close(tp);
+ }
+ };
+ }
+ /*updated 30/09/2012*/
+ tp.find('.close').click(function(e){
+ close(tp);
+ e.preventDefault();
+ });
+
+ function close(what){
+ what.fadeOut(o.fadeoutspeed,function(){
+ what.remove();
+ /*call onclose callback*/
+ o.onclose(what,tt);
+ });
+ clearTimeout(timeout);
+ times=0;
+ }
+
+ e.preventDefault();
+
+ });
+
+ }); /* end loop*/
+
+ };
+
+ $.fn.ttooltip.defaultOptions = {
+ autohide : true,
+ followmouse : true,
+ closeonesc : true,
+ content : '',
+ title : '',
+ trigger : 'mouseenter',
+ close : 'mouseleave',
+ maxwidth : 300,
+ timeout : 500,
+ fadeoutspeed: 'fast',
+ onload : function(){},
+ onclose : function(){},/*updated 30/09/2012*/
+ template : '<div class="ttooltip-wrap"><div class="ttooltip-arrow ttooltip-arrow-border"></div><div class="ttooltip-arrow"></div><div class="ttooltip-inner"><button type="button" class="close">&times;</button><h3 class="ttooltip-title"></h3><div class="ttooltip-content"><p></p></div><div class="ttooltip-footer"></div></div></div>'
+ };/*updated 30/09/2012*/
+})(jQuery); \ No newline at end of file
diff --git a/plugins/easy-table/js/ttooltip/script/jquery-ttooltip.min.js b/plugins/easy-table/js/ttooltip/script/jquery-ttooltip.min.js
new file mode 100644
index 00000000..f87cfd45
--- /dev/null
+++ b/plugins/easy-table/js/ttooltip/script/jquery-ttooltip.min.js
@@ -0,0 +1,12 @@
+/*!
+ * tTooltip v0.1
+ *
+ * Copyright 2012 Takien, No Inc
+ * http://takien.com
+ *
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * follow @cektkp and @perdanaweb
+ */
+(function(e){function t(t){var n=t.position();var r=n.top-e(window).scrollTop();var i=n.left-e(window).scrollLeft();var s=e(window).width()-(i+t.width());var o=e(window).height()-(r+t.height());var u="topleft";if(r>o){u="bottom"}else{u="top"}if(i>s){u+="right"}else{u+="left"}return u}e.fn.ttooltip=function(n){var r=e.extend({},e.fn.ttooltip.defaultOptions,n);var i=e(r.template);var s=i.find(".ttooltip-content");var o=i.find(".ttooltip-title");var u=i.find(".ttooltip-footer");var a=0;var f=0;var l;var c;i.css({position:"absolute","max-width":r.maxwidth});return this.each(function(n){var l=e(this);l.bind(r.trigger,function(n){function m(e){e.bind(r.close,function(){f++;if(f==1){a=setTimeout(function(){g(i)},r.timeout);i.bind("mouseenter",function(){f=0;clearTimeout(a)});l.bind("mouseenter",function(){f=0;clearTimeout(a)})}})}function g(e){e.fadeOut(r.fadeoutspeed,function(){e.remove();r.onclose(e,l)});clearTimeout(a);f=0}clearInterval(a);i.appendTo(document.body);i=e(".ttooltip-wrap");s=i.find(".ttooltip-content");o=i.find(".ttooltip-title");u=i.find(".ttooltip-footer");c=l.data();if(c.href==undefined){c.href=l.attr("href")}if(c.content==undefined){return false}if(c.content=="ajax"){e.get(c.href,function(e){i.find(".ttooltip-inner").html(e);r.onload(i,l)})}else{o.show().html(c.title);s.show().html(c.content);u.show().html(c.footer);r.onload(i,l);if(c.footer==undefined){u.empty().hide()}if(c.title==undefined){o.empty().hide()}}s.addClass("clearfix");u.addClass("clearfix");i.removeClass().addClass("ttooltip-wrap ttooltip-"+t(l)).fadeIn();var h=i.find(".ttooltip-arrow");var p=n.pageX-(h.outerWidth()*.5+h.position().left);var d=25;var v;p=p-d;h.removeClass("tooltip-arrow-gray");v=l.offset().top+l.outerHeight()+h.outerHeight();if(t(l)=="bottomright"||t(l)=="bottomleft"){v=l.offset().top-i.outerHeight()-h.outerHeight();p=p-d;d=0;if(i.find(".ttooltip-footer").html()!=""){h.addClass("tooltip-arrow-gray")}}i.css({top:v,left:p,width:c.width?c.width:"auto",opacity:1}).fadeIn();if(r.followmouse){e(this).mousemove(function(e){i.css({top:v,left:e.pageX-h.position().left-d})})}if(r.autohide){m(e(this));m(i)}if(r.closeonesc){document.onkeydown=function(e){e=e||window.event;if(e.keyCode==27){g(i)}}}i.find(".close").click(function(e){g(i);e.preventDefault()});n.preventDefault()})})};e.fn.ttooltip.defaultOptions={autohide:true,followmouse:true,closeonesc:true,content:"",title:"",trigger:"mouseenter",close:"mouseleave",maxwidth:300,timeout:500,fadeoutspeed:"fast",onload:function(){},onclose:function(){},template:'<div class="ttooltip-wrap"><div class="ttooltip-arrow ttooltip-arrow-border"></div><div class="ttooltip-arrow"></div><div class="ttooltip-inner"><button type="button" class="close">×</button><h3 class="ttooltip-title"></h3><div class="ttooltip-content"><p></p></div><div class="ttooltip-footer"></div></div></div>'}})(jQuery); \ No newline at end of file
diff --git a/plugins/easy-table/js/ttooltip/style/index.html b/plugins/easy-table/js/ttooltip/style/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/js/ttooltip/style/index.html
diff --git a/plugins/easy-table/js/ttooltip/style/jquery-ttooltip.css b/plugins/easy-table/js/ttooltip/style/jquery-ttooltip.css
new file mode 100644
index 00000000..58e52f95
--- /dev/null
+++ b/plugins/easy-table/js/ttooltip/style/jquery-ttooltip.css
@@ -0,0 +1,109 @@
+/*!
+ * tTooltip v0.1
+ *
+ * Copyright 2012 Takien, No Inc
+ * http://takien.com
+ *
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * follow @cektkp and @perdanaweb
+ */
+.clearfix {
+ *zoom: 1;
+}
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ content: "";
+}
+.clearfix:after {
+ clear: both;
+}
+a.ttooltip{
+ text-decoration:none;
+ border-bottom:1px dotted #0079be;
+ color:#0079be
+}
+.ttooltip-wrap{
+ background:#f5f5f5;
+ border:1px solid #b3b3b3;
+ z-index:2000;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+ box-shadow: 0pt 2px 4px rgba(0, 0, 0, 0.2);
+}
+.ttooltip-inner{
+ position:relative;
+}
+.ttooltip-title{
+ font-size:1.1em;
+ font-weight:bold;
+ padding:10px;
+ background:#fff;
+ color:#333333;
+ margin:0;
+}
+.ttooltip-content{
+ padding:5px 10px;
+ background:#fff;
+ box-shadow: 0pt 2px 4px rgba(0, 0, 0, 0.12);
+}
+.ttooltip-content p{
+ margin:0 0 10px;
+}
+.ttooltip-arrow{
+ position:absolute;
+ background:transparent;
+ width:0;
+ height:0;
+ z-index:2001
+}
+.ttooltip-topleft .ttooltip-arrow{
+ left:20px;
+ top: -10px;
+ border-left: 10px solid transparent;
+ border-right: 10px solid transparent;
+ border-bottom: 10px solid #fff;
+}
+.ttooltip-topright .ttooltip-arrow{
+ right:20px;
+ top: -10px;
+ border-left: 10px solid transparent;
+ border-right: 10px solid transparent;
+ border-bottom: 10px solid #fff;
+}
+.ttooltip-topright .ttooltip-arrow-border,
+.ttooltip-topleft .ttooltip-arrow-border{
+ top:-11px;
+ border-bottom-color:#b3b3b3
+}
+.ttooltip-bottomleft .ttooltip-arrow{
+ left:20px;
+ bottom: -10px;
+ border-left: 10px solid transparent;
+ border-right: 10px solid transparent;
+ border-top: 10px solid #fff;
+}
+.ttooltip-bottomright .ttooltip-arrow{
+ right:20px;
+ bottom: -10px;
+ border-left: 10px solid transparent;
+ border-right: 10px solid transparent;
+ border-top: 10px solid #fff;
+}
+.ttooltip-bottomleft .ttooltip-arrow.tooltip-arrow-gray,
+.ttooltip-bottomright .ttooltip-arrow.tooltip-arrow-gray{
+ border-top-color:#f5f5f5
+}
+
+.ttooltip-bottomleft .ttooltip-arrow-border,
+.ttooltip-bottomright .ttooltip-arrow-border{
+ bottom:-11px;
+ border-top-color:#b3b3b3
+}
+
+.ttooltip-footer{
+ padding:10px;
+}
diff --git a/plugins/easy-table/languages/easy-table-id_ID.mo b/plugins/easy-table/languages/easy-table-id_ID.mo
new file mode 100644
index 00000000..ec98455f
--- /dev/null
+++ b/plugins/easy-table/languages/easy-table-id_ID.mo
Binary files differ
diff --git a/plugins/easy-table/languages/easy-table-id_ID.po b/plugins/easy-table/languages/easy-table-id_ID.po
new file mode 100644
index 00000000..90bba4c9
--- /dev/null
+++ b/plugins/easy-table/languages/easy-table-id_ID.po
@@ -0,0 +1,496 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: easy-table 1.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-05-13 04:14+0700\n"
+"PO-Revision-Date: 2013-08-30 01:29+0700\n"
+"Last-Translator: takien <contact@takien.com>\n"
+"Language-Team: takien.com <contact@takien.com>\n"
+"Language: id_ID\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: ../\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.5.7\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: easy-table.php:588
+msgid "Settings"
+msgstr "Pengaturan"
+
+#: easy-table.php:600
+msgid "Instruction"
+msgstr "Petunjuk"
+
+#: easy-table.php:601
+msgid ""
+"Once plugin installed, go to plugin options page to configure some options"
+msgstr "Setelah plugin terpasang, kemudian buka halaman penyetelan plugin"
+
+#: easy-table.php:602
+msgid "You are ready to write a table in post or page."
+msgstr "Anda telah siap untuk membuat tabel di post atau halaman."
+
+#: easy-table.php:603
+msgid ""
+"To be able write table in widget you have to check <em>Enable render table "
+"in widget</em> option in the option page."
+msgstr ""
+
+#: easy-table.php:622
+#, php-format
+msgid "%s Option"
+msgstr "Pengaturan %s"
+
+#: easy-table.php:627
+msgid "Support"
+msgstr "Dukungan"
+
+#: easy-table.php:628
+msgid "About"
+msgstr "Tentang"
+
+#: easy-table.php:638
+msgid "Show/hide help button"
+msgstr "Tampilkan/Sembunyikan tombol bantuan"
+
+#: easy-table.php:639
+msgid "General options"
+msgstr "Pengaturan umum"
+
+#: easy-table.php:644
+msgid "Short code tag"
+msgstr ""
+
+#: easy-table.php:646
+msgid "Shortcode tag, type 'table' if you want to use [table] short tag."
+msgstr ""
+
+#: easy-table.php:652 easy-table.php:917
+msgid "Cell attribute tag"
+msgstr ""
+
+#: easy-table.php:654
+msgid "Cell attribute tag, default is attr."
+msgstr ""
+
+#: easy-table.php:659
+msgid "Also render table in widget?"
+msgstr "Tampilkan tabel di widget?"
+
+#: easy-table.php:661
+msgid "Check this if you want the table could be rendered in widget."
+msgstr ""
+
+#: easy-table.php:666
+msgid "Only load JS/CSS when in this condition"
+msgstr ""
+
+#: easy-table.php:667
+msgid "Please check in where JavaScript and CSS should be loaded"
+msgstr ""
+
+#: easy-table.php:671
+msgid "Single"
+msgstr ""
+
+#: easy-table.php:677
+msgid "Page"
+msgstr ""
+
+#: easy-table.php:683
+msgid "Front page"
+msgstr ""
+
+#: easy-table.php:689
+msgid "Archive page"
+msgstr ""
+
+#: easy-table.php:695
+msgid "Search page"
+msgstr ""
+
+#: easy-table.php:703
+msgid "Load script on footer?"
+msgstr "Muat script di footer?"
+
+#: easy-table.php:705
+msgid ""
+"Check this if you want the script to be rendered in footer. Try to check or "
+"uncheck this if you experienced conflict with another JavaScript library "
+"(not guaranteed though)."
+msgstr ""
+
+#: easy-table.php:716
+msgid "Use tablesorter?"
+msgstr "Gunakan tablesorter?"
+
+#: easy-table.php:719
+msgid "Check this to use tablesorter jQuery plugin"
+msgstr "Ceklist ini jika ingin menggunakan jQuery plugin tablesorter"
+
+#: easy-table.php:723
+msgid "Use TH for the first row?"
+msgstr "Gunakan TH untuk baris pertama?"
+
+#: easy-table.php:726
+msgid ""
+"Check this if you want to use first row as table head (required by "
+"tablesorter)"
+msgstr ""
+
+#: easy-table.php:730
+msgid "Load CSS?"
+msgstr "Muat CSS?"
+
+#: easy-table.php:733
+msgid ""
+"Check this to use CSS included in this plugin to styling table, you may "
+"unceck if you want to write your own style."
+msgstr "Ceklist ini untuk menyertakan CSS untuk penataan tampilan tabel."
+
+#: easy-table.php:737
+msgid "Table class"
+msgstr "Class tabel"
+
+#: easy-table.php:739
+msgid "Additional table class attribute."
+msgstr ""
+
+#: easy-table.php:743
+msgid "Table width"
+msgstr "Lebar tabel"
+
+#: easy-table.php:745
+msgid "Table width, in pixel or percent (may be overriden by CSS)"
+msgstr "Lebar tabel, dalam pixel atau persen (kemungkinan ditimpa oleh CSS)"
+
+#: easy-table.php:749
+msgid "Table align"
+msgstr "Perataan tabel"
+
+#: easy-table.php:751
+msgid "Table align, left/right/center (may be overriden by CSS)"
+msgstr "Perataan tabel, left/right/center (kemungkinan ditimpa oleh CSS)"
+
+#: easy-table.php:755
+msgid "Table border"
+msgstr "Garis tabel"
+
+#: easy-table.php:757
+msgid "Table border (may be overriden by CSS)"
+msgstr "Garis tabel (kemungkinan ditimpa oleh CSS)"
+
+#: easy-table.php:762
+msgid "Table options"
+msgstr "Pengaturan tabel"
+
+#: easy-table.php:766
+msgid "Theme selector"
+msgstr "Pemilihan tema"
+
+#: easy-table.php:771
+msgid "Default theme"
+msgstr "Tema bawaan"
+
+#: easy-table.php:775
+msgid "Select default theme of the table"
+msgstr "Pilih tema untuk tabel"
+
+#: easy-table.php:781
+#, fuzzy
+msgid "Data options"
+msgstr "Pengaturan tabel"
+
+#: easy-table.php:786
+msgid "Row limit"
+msgstr "Batas baris"
+
+#: easy-table.php:790
+msgid "Max row to convert to table, default 0 (unlimited)"
+msgstr ""
+
+#: easy-table.php:794
+msgid "Trim cell data?"
+msgstr ""
+
+#: easy-table.php:799
+msgid "Trim empty character around cell data"
+msgstr ""
+
+#: easy-table.php:805
+#, fuzzy
+msgid "Parser options"
+msgstr "Pengaturan parser"
+
+#: easy-table.php:806
+msgid "Do not change this unless you know what you're doing"
+msgstr "Jangan ganti bagian ini kecuali Anda mengetahuinya"
+
+#: easy-table.php:812
+msgid "New line replacement"
+msgstr "Pengganti baris baru"
+
+#: easy-table.php:815
+msgid ""
+"Since new line is used by parser, you need specify character as a "
+"replacement."
+msgstr ""
+
+#: easy-table.php:818
+msgid "Row terminator"
+msgstr "Pembatas baris"
+
+#: easy-table.php:822
+msgid ""
+"This caharacter will converted into new row. Default value \\n (this is "
+"invisible character when you press Enter). If your new line not converted as "
+"new row in the table, try use \\r instead."
+msgstr ""
+
+#: easy-table.php:825
+msgid "Delimiter"
+msgstr "Pemisah"
+
+#: easy-table.php:828
+msgid "CSV delimiter (default is comma)"
+msgstr ""
+
+#: easy-table.php:831
+msgid "Enclosure"
+msgstr ""
+
+#: easy-table.php:834
+msgid "CSV enclosure (default is double quote)"
+msgstr ""
+
+#: easy-table.php:837
+msgid "Escape"
+msgstr ""
+
+#: easy-table.php:840
+msgid "CSV escape (default is backslash)"
+msgstr ""
+
+#: easy-table.php:843
+msgid "Allow read CSV from file?"
+msgstr "Bolehkan membaca CSV dari file?"
+
+#: easy-table.php:846
+msgid "Check this if you also want to convert CSV file to table"
+msgstr "Ceklist ini jika Anda juga ingin merubah file CSV ke tabel"
+
+#: easy-table.php:854
+msgid "Save"
+msgstr "Simpan"
+
+#: easy-table.php:878
+msgid "Possible parameter"
+msgstr "Parameter yang dimungkinkan"
+
+#: easy-table.php:879
+msgid ""
+"These parameters commonly can override global options in the left side of "
+"this page. Example usage:"
+msgstr ""
+"Parameter berikut ini secara umum dapat menggantikan setingan global yang "
+"ada di sebelah kiri halaman ini. Contoh penggunaan:"
+
+#: easy-table.php:882 easy-table.php:883 easy-table.php:884 easy-table.php:885
+#: easy-table.php:886 easy-table.php:887 easy-table.php:888 easy-table.php:889
+#: easy-table.php:890 easy-table.php:891 easy-table.php:892 easy-table.php:893
+#: easy-table.php:894 easy-table.php:895 easy-table.php:896 easy-table.php:897
+#: easy-table.php:898
+msgid "default value"
+msgstr "nilai bawaan"
+
+#: easy-table.php:882
+msgid "another value"
+msgstr "nilai lainnya"
+
+#: easy-table.php:901
+msgid ""
+"parameter is for initial sorting order. Value for each column separated by "
+"comma. See example below:"
+msgstr ""
+"parameter untuk penyortiran bawaan. Nilai dari masing masih kolom dipisahkan "
+"dengan koma. Lihat contoh berikut:"
+
+#: easy-table.php:903
+msgid ""
+"Set initial order of first column descending and second column ascending:"
+msgstr ""
+
+#: easy-table.php:909
+msgid "Set initial order of second column descending:"
+msgstr ""
+
+#: easy-table.php:915
+msgid ""
+"Additionaly, sort option also can be set via sort attr in a cell. See "
+"example below"
+msgstr ""
+
+#: easy-table.php:919
+msgid "To set attribute for cell eg. class, colspan, rowspan, etc"
+msgstr ""
+
+#: easy-table.php:920
+msgid "Example"
+msgstr "Contoh"
+
+#: easy-table.php:929
+msgid "To set initial sort order, this is intended to TH (first row) only."
+msgstr ""
+
+#: easy-table.php:930
+msgid "Example: sort second column descending "
+msgstr ""
+
+#: easy-table.php:947
+msgid "Test area:"
+msgstr "Area test:"
+
+#: easy-table.php:952
+msgid "Reset"
+msgstr "Reset"
+
+#: easy-table.php:953
+msgid "Update preview"
+msgstr "Perbaharui pratinjau"
+
+#: easy-table.php:955
+msgid "Preview"
+msgstr "Pratinjau"
+
+#: easy-table.php:962
+msgid "Easy Table theme editor"
+msgstr ""
+
+#: easy-table.php:992
+msgid ""
+"I have tried to make this plugin can be used as easy as possible and "
+"documentation as complete as possible. However it is also possible that you "
+"are still confused. Therefore feel free to ask. I would be happy to answer."
+msgstr ""
+"Saya telah membuat plugin ini semudah mungkin digunakan dan juga dokumentasi "
+"yang selengkap mungkin. Meskipun begitu mungkin Anda masih bingung. Untuk "
+"itu jangan sungkan-sungkan untuk bertanya. Saya akan senang menjawabnya."
+
+#: easy-table.php:993
+msgid ""
+"You can use this discussion to get support, request feature or reporting bug."
+msgstr ""
+
+#: easy-table.php:994
+msgid "Before you ask something, make sure you have read documentation here!"
+msgstr ""
+"Sebelum bertanya sesuatu, pastikan Anda telah membaca dokumentasi di sini!"
+
+#: easy-table.php:1053
+msgid "Install Now"
+msgstr ""
+
+#: easy-table.php:1057
+msgid "Install Update Now"
+msgstr ""
+
+#: easy-table.php:1060
+#, php-format
+msgid "Newer Version (%s) Installed"
+msgstr ""
+
+#: easy-table.php:1063
+msgid "Latest Version Installed"
+msgstr ""
+
+#: easy-table.php:1072
+msgid "Latest Version:"
+msgstr ""
+
+#: easy-table.php:1074
+msgid "Author:"
+msgstr ""
+
+#: easy-table.php:1076
+msgid "Last Updated:"
+msgstr ""
+
+#: easy-table.php:1077
+#, php-format
+msgid "%s ago"
+msgstr ""
+
+#: easy-table.php:1079
+msgid "Requires WordPress Version:"
+msgstr ""
+
+#: easy-table.php:1079
+#, php-format
+msgid "%s or higher"
+msgstr ""
+
+#: easy-table.php:1081
+msgid "Compatible up to:"
+msgstr ""
+
+#: easy-table.php:1083
+msgid "Downloaded:"
+msgstr ""
+
+#: easy-table.php:1085
+msgid "WordPress.org Plugin Page &#187;"
+msgstr ""
+
+#: easy-table.php:1087
+msgid "Plugin Homepage &#187;"
+msgstr ""
+
+#: easy-table.php:1091
+msgid "Average Rating"
+msgstr "Penilaian rata-rata"
+
+#: easy-table.php:1109
+msgid "Support my work with donation"
+msgstr "Dukung karya saya dengan sumbangan"
+
+#: easy-table.php:1118
+msgid "Don't have money? No problem, you can rate my plugin instead."
+msgstr "Tidak punya uang? Tidak masalah, Anda cukup memberi rating plugin ini."
+
+#: easy-table.php:1119
+msgid "Click here to rate"
+msgstr "Klik di sini untuk memberi nilai"
+
+#: easy-table.php:1121
+msgid "Thanks to"
+msgstr "Terimakasih kepada"
+
+#: easy-table.php:1127 easy-table.php:1128 easy-table.php:1129
+#: easy-table.php:1130
+msgid "by"
+msgstr "oleh"
+
+#~ msgid ""
+#~ "Table class attribute, if you use bootstrap CSS, you should add at least "
+#~ "\"table\" class."
+#~ msgstr ""
+#~ "Atribut class pada tabel, jika Anda menggunakan CSS bootstrap, setidaknya "
+#~ "harus menambahkan class \"table\""
+
+#~ msgid "Credit"
+#~ msgstr "Kredit"
+
+#~ msgid "Tablesorter by"
+#~ msgstr "Tablesorter oleh"
+
+#~ msgid "CSS by"
+#~ msgstr "CSS oleh"
+
+#~ msgid "Any question or suggestion? Click here!"
+#~ msgstr "Ada pertanyaan atau saran? Klik disini!"
+
+#~ msgid "Use CSS bootstrap?"
+#~ msgstr "Gunakan CSS bootstrap?"
diff --git a/plugins/easy-table/languages/english.mo b/plugins/easy-table/languages/english.mo
new file mode 100644
index 00000000..745d8c2a
--- /dev/null
+++ b/plugins/easy-table/languages/english.mo
Binary files differ
diff --git a/plugins/easy-table/languages/english.po b/plugins/easy-table/languages/english.po
new file mode 100644
index 00000000..762e03a2
--- /dev/null
+++ b/plugins/easy-table/languages/english.po
@@ -0,0 +1,464 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: easy-table 1.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-05-13 04:13+0700\n"
+"PO-Revision-Date: 2013-08-30 01:28+0700\n"
+"Last-Translator: takien <contact@takien.com>\n"
+"Language-Team: takien.com <contact@takien.com>\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: ../\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.5.7\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: easy-table.php:588
+msgid "Settings"
+msgstr ""
+
+#: easy-table.php:600
+msgid "Instruction"
+msgstr ""
+
+#: easy-table.php:601
+msgid ""
+"Once plugin installed, go to plugin options page to configure some options"
+msgstr ""
+
+#: easy-table.php:602
+msgid "You are ready to write a table in post or page."
+msgstr ""
+
+#: easy-table.php:603
+msgid ""
+"To be able write table in widget you have to check <em>Enable render table "
+"in widget</em> option in the option page."
+msgstr ""
+
+#: easy-table.php:622
+#, php-format
+msgid "%s Option"
+msgstr ""
+
+#: easy-table.php:627
+msgid "Support"
+msgstr ""
+
+#: easy-table.php:628
+msgid "About"
+msgstr ""
+
+#: easy-table.php:638
+msgid "Show/hide help button"
+msgstr ""
+
+#: easy-table.php:639
+msgid "General options"
+msgstr ""
+
+#: easy-table.php:644
+msgid "Short code tag"
+msgstr ""
+
+#: easy-table.php:646
+msgid "Shortcode tag, type 'table' if you want to use [table] short tag."
+msgstr ""
+
+#: easy-table.php:652 easy-table.php:917
+msgid "Cell attribute tag"
+msgstr ""
+
+#: easy-table.php:654
+msgid "Cell attribute tag, default is attr."
+msgstr ""
+
+#: easy-table.php:659
+msgid "Also render table in widget?"
+msgstr ""
+
+#: easy-table.php:661
+msgid "Check this if you want the table could be rendered in widget."
+msgstr ""
+
+#: easy-table.php:666
+msgid "Only load JS/CSS when in this condition"
+msgstr ""
+
+#: easy-table.php:667
+msgid "Please check in where JavaScript and CSS should be loaded"
+msgstr ""
+
+#: easy-table.php:671
+msgid "Single"
+msgstr ""
+
+#: easy-table.php:677
+msgid "Page"
+msgstr ""
+
+#: easy-table.php:683
+msgid "Front page"
+msgstr ""
+
+#: easy-table.php:689
+msgid "Archive page"
+msgstr ""
+
+#: easy-table.php:695
+msgid "Search page"
+msgstr ""
+
+#: easy-table.php:703
+msgid "Load script on footer?"
+msgstr ""
+
+#: easy-table.php:705
+msgid ""
+"Check this if you want the script to be rendered in footer. Try to check or "
+"uncheck this if you experienced conflict with another JavaScript library "
+"(not guaranteed though)."
+msgstr ""
+
+#: easy-table.php:716
+msgid "Use tablesorter?"
+msgstr ""
+
+#: easy-table.php:719
+msgid "Check this to use tablesorter jQuery plugin"
+msgstr ""
+
+#: easy-table.php:723
+msgid "Use TH for the first row?"
+msgstr ""
+
+#: easy-table.php:726
+msgid ""
+"Check this if you want to use first row as table head (required by "
+"tablesorter)"
+msgstr ""
+
+#: easy-table.php:730
+msgid "Load CSS?"
+msgstr ""
+
+#: easy-table.php:733
+msgid ""
+"Check this to use CSS included in this plugin to styling table, you may "
+"unceck if you want to write your own style."
+msgstr ""
+
+#: easy-table.php:737
+msgid "Table class"
+msgstr ""
+
+#: easy-table.php:739
+msgid "Additional table class attribute."
+msgstr ""
+
+#: easy-table.php:743
+msgid "Table width"
+msgstr ""
+
+#: easy-table.php:745
+msgid "Table width, in pixel or percent (may be overriden by CSS)"
+msgstr ""
+
+#: easy-table.php:749
+msgid "Table align"
+msgstr ""
+
+#: easy-table.php:751
+msgid "Table align, left/right/center (may be overriden by CSS)"
+msgstr ""
+
+#: easy-table.php:755
+msgid "Table border"
+msgstr ""
+
+#: easy-table.php:757
+msgid "Table border (may be overriden by CSS)"
+msgstr ""
+
+#: easy-table.php:762
+msgid "Table options"
+msgstr ""
+
+#: easy-table.php:766
+msgid "Theme selector"
+msgstr ""
+
+#: easy-table.php:771
+msgid "Default theme"
+msgstr ""
+
+#: easy-table.php:775
+msgid "Select default theme of the table"
+msgstr ""
+
+#: easy-table.php:781
+msgid "Data options"
+msgstr ""
+
+#: easy-table.php:786
+msgid "Row limit"
+msgstr ""
+
+#: easy-table.php:790
+msgid "Max row to convert to table, default 0 (unlimited)"
+msgstr ""
+
+#: easy-table.php:794
+msgid "Trim cell data?"
+msgstr ""
+
+#: easy-table.php:799
+msgid "Trim empty character around cell data"
+msgstr ""
+
+#: easy-table.php:805
+msgid "Parser options"
+msgstr ""
+
+#: easy-table.php:806
+msgid "Do not change this unless you know what you're doing"
+msgstr ""
+
+#: easy-table.php:812
+msgid "New line replacement"
+msgstr ""
+
+#: easy-table.php:815
+msgid ""
+"Since new line is used by parser, you need specify character as a "
+"replacement."
+msgstr ""
+
+#: easy-table.php:818
+msgid "Row terminator"
+msgstr ""
+
+#: easy-table.php:822
+msgid ""
+"This caharacter will converted into new row. Default value \\n (this is "
+"invisible character when you press Enter). If your new line not converted as "
+"new row in the table, try use \\r instead."
+msgstr ""
+
+#: easy-table.php:825
+msgid "Delimiter"
+msgstr ""
+
+#: easy-table.php:828
+msgid "CSV delimiter (default is comma)"
+msgstr ""
+
+#: easy-table.php:831
+msgid "Enclosure"
+msgstr ""
+
+#: easy-table.php:834
+msgid "CSV enclosure (default is double quote)"
+msgstr ""
+
+#: easy-table.php:837
+msgid "Escape"
+msgstr ""
+
+#: easy-table.php:840
+msgid "CSV escape (default is backslash)"
+msgstr ""
+
+#: easy-table.php:843
+msgid "Allow read CSV from file?"
+msgstr ""
+
+#: easy-table.php:846
+msgid "Check this if you also want to convert CSV file to table"
+msgstr ""
+
+#: easy-table.php:854
+msgid "Save"
+msgstr ""
+
+#: easy-table.php:878
+msgid "Possible parameter"
+msgstr ""
+
+#: easy-table.php:879
+msgid ""
+"These parameters commonly can override global options in the left side of "
+"this page. Example usage:"
+msgstr ""
+
+#: easy-table.php:882 easy-table.php:883 easy-table.php:884 easy-table.php:885
+#: easy-table.php:886 easy-table.php:887 easy-table.php:888 easy-table.php:889
+#: easy-table.php:890 easy-table.php:891 easy-table.php:892 easy-table.php:893
+#: easy-table.php:894 easy-table.php:895 easy-table.php:896 easy-table.php:897
+#: easy-table.php:898
+msgid "default value"
+msgstr ""
+
+#: easy-table.php:882
+msgid "another value"
+msgstr ""
+
+#: easy-table.php:901
+msgid ""
+"parameter is for initial sorting order. Value for each column separated by "
+"comma. See example below:"
+msgstr ""
+
+#: easy-table.php:903
+msgid ""
+"Set initial order of first column descending and second column ascending:"
+msgstr ""
+
+#: easy-table.php:909
+msgid "Set initial order of second column descending:"
+msgstr ""
+
+#: easy-table.php:915
+msgid ""
+"Additionaly, sort option also can be set via sort attr in a cell. See "
+"example below"
+msgstr ""
+
+#: easy-table.php:919
+msgid "To set attribute for cell eg. class, colspan, rowspan, etc"
+msgstr ""
+
+#: easy-table.php:920
+msgid "Example"
+msgstr ""
+
+#: easy-table.php:929
+msgid "To set initial sort order, this is intended to TH (first row) only."
+msgstr ""
+
+#: easy-table.php:930
+msgid "Example: sort second column descending "
+msgstr ""
+
+#: easy-table.php:947
+msgid "Test area:"
+msgstr ""
+
+#: easy-table.php:952
+msgid "Reset"
+msgstr ""
+
+#: easy-table.php:953
+msgid "Update preview"
+msgstr ""
+
+#: easy-table.php:955
+msgid "Preview"
+msgstr ""
+
+#: easy-table.php:962
+msgid "Easy Table theme editor"
+msgstr ""
+
+#: easy-table.php:992
+msgid ""
+"I have tried to make this plugin can be used as easy as possible and "
+"documentation as complete as possible. However it is also possible that you "
+"are still confused. Therefore feel free to ask. I would be happy to answer."
+msgstr ""
+
+#: easy-table.php:993
+msgid ""
+"You can use this discussion to get support, request feature or reporting bug."
+msgstr ""
+
+#: easy-table.php:994
+msgid "Before you ask something, make sure you have read documentation here!"
+msgstr ""
+
+#: easy-table.php:1053
+msgid "Install Now"
+msgstr ""
+
+#: easy-table.php:1057
+msgid "Install Update Now"
+msgstr ""
+
+#: easy-table.php:1060
+#, php-format
+msgid "Newer Version (%s) Installed"
+msgstr ""
+
+#: easy-table.php:1063
+msgid "Latest Version Installed"
+msgstr ""
+
+#: easy-table.php:1072
+msgid "Latest Version:"
+msgstr ""
+
+#: easy-table.php:1074
+msgid "Author:"
+msgstr ""
+
+#: easy-table.php:1076
+msgid "Last Updated:"
+msgstr ""
+
+#: easy-table.php:1077
+#, php-format
+msgid "%s ago"
+msgstr ""
+
+#: easy-table.php:1079
+msgid "Requires WordPress Version:"
+msgstr ""
+
+#: easy-table.php:1079
+#, php-format
+msgid "%s or higher"
+msgstr ""
+
+#: easy-table.php:1081
+msgid "Compatible up to:"
+msgstr ""
+
+#: easy-table.php:1083
+msgid "Downloaded:"
+msgstr ""
+
+#: easy-table.php:1085
+msgid "WordPress.org Plugin Page &#187;"
+msgstr ""
+
+#: easy-table.php:1087
+msgid "Plugin Homepage &#187;"
+msgstr ""
+
+#: easy-table.php:1091
+msgid "Average Rating"
+msgstr ""
+
+#: easy-table.php:1109
+msgid "Support my work with donation"
+msgstr ""
+
+#: easy-table.php:1118
+msgid "Don't have money? No problem, you can rate my plugin instead."
+msgstr ""
+
+#: easy-table.php:1119
+msgid "Click here to rate"
+msgstr ""
+
+#: easy-table.php:1121
+msgid "Thanks to"
+msgstr ""
+
+#: easy-table.php:1127 easy-table.php:1128 easy-table.php:1129
+#: easy-table.php:1130
+msgid "by"
+msgstr ""
diff --git a/plugins/easy-table/languages/index.html b/plugins/easy-table/languages/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/languages/index.html
diff --git a/plugins/easy-table/readme.txt b/plugins/easy-table/readme.txt
new file mode 100644
index 00000000..3b5ffe0b
--- /dev/null
+++ b/plugins/easy-table/readme.txt
@@ -0,0 +1,355 @@
+=== Easy Table ===
+Contributors: takien
+Donate link: http://takien.com/donate
+Tags: table,csv,csv-to-table,post,excel,csv file,widget,tablesorter
+Requires at least: 3.0
+Tested up to: 3.6
+Stable tag: 1.4
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+Easy Table is WordPress plugin to create table in post, page, or widget in easy way using CSV format. This can also display table from CSV file.
+
+== Description ==
+
+Easy Table is a WordPress plugin that allow you to insert table in easy way. Why it's easy? Because you don't need to write any complicated HTML syntax. Note that this plugin is not a graphical user interface table generator, so you can simply type your table data directly in your post while you writing. No need to switch to another window nor click any toolbar button.
+
+Easy Table using standard CSV format to generate table data, it's easiest way to build a table.
+
+= Some Features =
+* Easy to use, no advanced skill required
+* Display table in post, page or even in widget
+* Read data from CSV file and display the data in table
+* Sortable table column (using tablesorter jQuery plugin)
+* Fancy table design (using Twitter CSS bootstrap)
+* WYSIWYG safe, I mean you can switch HTML/View tab in WordPress editor without breaking the table data.
+
+= Known bugs and limitation =
+* Enclosure will not work on first cell of a row
+* Chinese characters (and others?) usually stripped down on first cell of a row
+* Unable to create nested table
+
+= Example usage =
+
+* Basic table
+`[table]
+Year,Make,Model,Length
+1997,Ford,E350,2.34
+2000,Mercury,Cougar,2.38
+[/table]`
+
+* Table with additional parameter
+`[table tablesorter="1" id="someid"]
+Year,Make,Model,Length
+1997,Ford,E350,2.34
+2000,Mercury,Cougar,2.38
+[/table]`
+
+* Table with specific width
+`[table width="500px"]
+Year,Make,Model,Length
+1997,Ford,E350,2.34
+2000,Mercury,Cougar,2.38
+[/table]`
+
+Valid width value : auto, any number followed by % or px.
+If width not set, it will use default width value ( can be changed via Plugin option )
+
+* Table with colspan and other attribute in some cells
+`[table]
+no[attr style="width:20px"],head1,head2,head3
+1,row1col1,row1col2,row1col3[attr class="someclass"]
+2,row2col1,row2col2,row2col3
+3,row3col1[attr colspan="2"],row3col3
+4,row4col1,row4col2,row4col3
+[/table]`
+
+* Table with initial sort order using table parameter, sort by first column descending
+`[table sort="desc"]
+no,head1,head2,head3
+1,row1col1,row1col2,row1col3
+2,row2col1,row2col2,row2col3
+3,row3col1,row3col2,row3col3
+4,row4col1,row4col2,row4col3
+[/table]`
+
+* Table with initial sort order using table parameter, sort by first column descending, and second column ascending
+`[table sort="desc,asc"]
+no,head1,head2,head3
+1,row1col1,row1col2,row1col3
+2,row2col1,row2col2,row2col3
+3,row3col1,row3col2,row3col3
+4,row4col1,row4col2,row4col3
+[/table]`
+
+* Table with initial sort order using cell attr, sort by second column descending
+`[table]
+no,head1[attr sort="desc"],head2,head3
+1,row1col1,row1col2,row1col3
+2,row2col1,row2col2,row2col3
+3,row3col1,row3col2,row3col3
+4,row4col1,row4col2,row4col3
+[/table]`
+
+* Disable sort for third column using cell attr
+`[table]
+no,head1,head2[attr sort="false"],head3
+1,row1col1,row1col2,row1col3
+2,row2col1,row2col2,row2col3
+3,row3col1,row3col2,row3col3
+4,row4col1,row4col2,row4col3
+[/table]`
+
+* Disable sort for third column using table parameter
+`[table sort=",,false"]
+no,head1,head2,head3
+1,row1col1,row1col2,row1col3
+2,row2col1,row2col2,row2col3
+3,row3col1,row3col2,row3col3
+4,row4col1,row4col2,row4col3
+[/table]`
+
+* Table with auto index, start from number 1 (since 0.9)
+`[table ai="1"]
+head1,head2,head3
+row1col1,row1col2,row1col3
+row2col1,row2col2,row2col3
+row3col1,row3col2,row3col3
+row4col1,row4col2,row4col3
+[/table]`
+
+* Table with auto index, start from number 2 (since 0.9)
+`[table ai="2"]
+head1,head2,head3
+row1col1,row1col2,row1col3
+row2col1,row2col2,row2col3
+row3col1,row3col2,row3col3
+row4col1,row4col2,row4col3
+[/table]`
+
+* Table with auto index, start from number 1, and titled No. (since 0.9)
+`[table ai="1/No."]
+head1,head2,head3
+row1col1,row1col2,row1col3
+row2col1,row2col2,row2col3
+row3col1,row3col2,row3col3
+row4col1,row4col2,row4col3
+[/table]`
+
+* Table with auto index, start from number 1, titled No., and column width 50px (since 0.9)
+`[table ai="1/No./50"]
+head1,head2,head3
+row1col1,row1col2,row1col3
+row2col1,row2col2,row2col3
+row3col1,row3col2,row3col3
+row4col1,row4col2,row4col3
+[/table]`
+
+* Table with new line in a cell (since 0.9)
+any nl value would be replaced with new line while rendered.
+nl could be one character or more. Be wise to use character here, make sure it's not very common character that may used in your data.
+
+`[table nl="~~"]
+head1,head2,head3
+row1col1,row1col2,this~~should~~be~~in~~one cell
+row2col1,row2col2,this~~
+also~~
+should~~
+be~~
+in~~
+one~~
+cell
+row3col1,row3col2,row3col3
+row4col1,row4col2,row4col3
+[/table]`
+
+* Table with custom row terminator (since 1.0)
+Now you can use another character as new row, not only linebreak (\n or \n), eg. you want to use | as row terminator.
+
+`[table terminator="|"]
+head1,head2,head3|
+row1col1,row1col2,this
+should
+be
+in
+one cell|
+row2col1,row2col2,this
+also
+should
+be
+in
+one
+cell|
+row3col1,row3col2,row3col3|
+row4col1,row4col2,row4col3|
+[/table]`
+
+* Table with comma in cell using enclosure
+`[table]
+head1,head2,head3
+row1col1,row1col2,"this, should, in, one cell, because, enclosured, with, doublequote"
+row2col1,row2col2,row2col3
+row3col1,row3col2,row3col3
+row4col1,row4col2,row4col3
+[/table]`
+
+* Table with comma in cell using escape (since 1.3)
+`[table]
+head1,head2,head3
+row1col1,row1col2,this\, should\, in\, one cell\, because\, commas \,escaped \,with \,backslash
+row2col1,row2col2,row2col3
+row3col1,row3col2,row3col3
+row4col1,row4col2,row4col3
+[/table]`
+
+* Table with no heading
+`[table th="0"]some data here[/table]`
+
+* Table with no heading
+`[table th="0"]some data here[/table]`
+
+* Table with footer/tfoot, by default tfoot automatically picked up from second row.
+`[table tf="1"]some data here[/table]`
+
+* Table with picked up from last row.
+`[table tf="last"]some data here[/table]`
+
+* Table from CSV file
+`[table file="example.com/blog/wp-content/uploads/pricelist.csv"][/table]`
+
+[Look confusing? Please click here](http://takien.com/plugins/easy-table).
+Or check out our video tutorial here http://www.youtube.com/watch?v=Th0_qSleyDI
+
+= Other notes =
+* If read from file, the file URL must not contain space.
+
+== Installation ==
+
+There are many ways to install this plugin, e.g:
+
+1. Upload compressed (zip) plugin using WordPress plugin uploader.
+2. Directly install from WordPress.org directory
+3. Upload manually uncompressed plugin file using FTP.
+
+== Frequently Asked Questions ==
+
+[See official plugin support here](http://takien.com/plugins/easy-table).
+
+== Screenshots ==
+
+1. Various table in a post
+2. Easy Table options page
+3. It's easy to display your uploaded CSV file as HTML table.
+4. Easy Table in text widget
+
+== Upgrade Notice ==
+
+No
+
+== Changelog ==
+
+= 1.4 =
+* Updated: TableSorter JavaScript library now updated to 2.10.8 from 2.0.5b ( hope it will solve many sorting problems )
+
+= 1.3.1 =
+* Fixed: Bug on version 1.3, fatal error on PHP prior to 5.3.0
+
+= 1.3 =
+* Fixed: `escape` is now working, you can use escape to skip `delimiter`s (also `terminator`s if they're not \r or \n) using escape (default escape character is backslash)
+
+= 1.2 =
+* Added: `align` parameter is now back. (Previously removed on version 1.1)
+
+= 1.1.4 =
+* Added new parameter 'fixlinebreak' to optionally convert newline to &lt;br /&gt; if terminator is not \r or \n
+
+= 1.1.3 =
+* Added: now you can use 'auto' for table width
+* Table width now use inline style ( internally, not affected to the plugin usage )
+
+= 1.1.2 =
+* Fixed bug limit param doesn't work on version 1.1.1
+
+= 1.1.1 =
+* Fixed bug custom terminator doesn't work on version 1.1
+* Removed align field on Option page
+
+= 1.1 =
+* Removed: .htaccess from plugin directory (Fixed unloaded script on some servers)
+* Use dedicated str_getcsv for Easy Table (Fixed incompatibility issue with AIOSP version 2.0)
+* Removed: align attribute on table (Fixed text wrap issue)
+* Added: new theme "minimal"
+
+= 1.0 =
++ Encoding fix
+* Added colalign param
+* Added colwidth param
+* Added style param
+* Added limit param
+* Added trim param
+* Added terminator param
+* Added nl2br if terminator is not \n nor \r
+* Added is_search conditional option to load CSS/JS
+* Improved admin UI, field description is now using tTooltip
+
+= 0.9 =
+* Fixed: Allow empty cell (was stripped on PHP prior to 5.3)
+* Fixed: wp_remote_get() error if file URL was not found.
+* Fixed: wrong application of wp_enqueue_script()
+* Added: Allow script to be loaded in footer
+* Removed: Redundant line on wp_enqueue_style
+* Added: CSS for tfoot on cuscosky theme
+* Added: New table parameter "nl", new line. eg. [table nl="~~"] See example here http://wordpress.org/extend/plugins/easy-table/
+* Added: New table parameter "ai", auto index. add auto numbering in the begining of each row. See example here http://wordpress.org/extend/plugins/easy-table/
+
+= 0.8 =
+* Fixed: Csvfile option
+* Fixed: Broken caption in Responsive theme
+* Removed: Clearfix class from the table
+* Changed: Now use wp_remote_get() instead of file_get_contents();
+* Changed: Method name from get_easy_table_option() to option(), not affected to the usability
+* Changed: .header class for thead changed to .easy-table-header to minimize conflict possibility with other CSS.
+* Changed: path to jquery.tablesorter to /js and combined with jquery metadata
+* Added: jquery.metadata.js to set additional sorting option
+* Added: themes selector
+* Added: css/easy-table.css for general basic styling
+* Added: New sort parameter on table eg. [table sort="desc,asc"]
+* Added: New sort attr on cell for default sorting, attr sort="desc", attr sort="desc", attr sort="false"
+* Added: htaccess file to prevent directory listing on plugin path.
+* Added: Compatibility with WordPress 3.4.1
+* Improved: CSS for arrow up/down, arrow now only visible on mouseover or if column is sorted.
+
+= 0.7 =
+* Fixed: Enclosure in the first column does not work.
+* Added: Compatibility with WordPress 3.4
+* Fixed: Missing enclosure parameter in PHP < 5.3.0
+
+= 0.6.1 =
+* Fixed: Accidentally add unused character to the table
+
+= 0.6 =
+* Fixed: Missing tbody opening tag on some condition
+* Fixed: Duplicate unit of width attribute
+
+= 0.5 =
+* Added: Ability to set attribute for each cell.
+* Added: Support and About tab in plugin options page.
+* Fixed: Table width attribute not work.
+* Removed: Equalize the number of columns in each row.
+
+= 0.4 =
+* Fixed: Option value can't override default value if option value is empty (if checkbox is unchecked).
+* Added: Optionally, tfoot now can be taken from last row. Example usage: [table tf="last"]somedata[/table]
+
+= 0.3 =
+* Improved: Option form now filled out with default value if there are no options saved in database and you don't need to save option to get the plugin to works.
+* Added: Option to select where script and style should be loaded, eg. if only in single page.
+* Added: tf parameter for tfoot, now you can set up tfoot for your table, tfoot picked up from 2nd row of the data, usage example [table tf="1"]data[/table]
+* Added: Credit link to Twitter Bootstrap and tablesorter jQuery plugin.
+
+= 0.2 =
+* Fixed: Backward compatibility of str_getcsv that just not work in the version 0.1, now plugin should runs on PHP 5.2
+* Fixed: Table now has 'table' class even when 'tablesorter' is not enabled.
+
+= 0.1 =
+* First release \ No newline at end of file
diff --git a/plugins/easy-table/themes/cuscosky/style.css b/plugins/easy-table/themes/cuscosky/style.css
new file mode 100644
index 00000000..6b480cf9
--- /dev/null
+++ b/plugins/easy-table/themes/cuscosky/style.css
@@ -0,0 +1,64 @@
+/*
+* always include base css to get basic styling for header etc.
+*/
+@import url(../../css/easy-table.css);
+/*
+ Cusco Sky table styles
+ written by Braulio Soncco http://www.buayacorp.com
+*/
+
+table.easy-table-cuscosky, .easy-table-cuscosky th, .easy-table-cuscosky td {
+ border: 1px solid #D4E0EE;
+ border-collapse: collapse;
+ font-family: "Trebuchet MS", Arial, sans-serif;
+ color: #555;
+}
+
+.easy-table-cuscosky caption {
+ font-size: 150%;
+ font-weight: bold;
+ margin: 5px;
+ padding-bottom:5px;
+}
+
+.easy-table-cuscosky td, .easy-table-cuscosky th {
+ padding: 4px;
+}
+
+.easy-table-cuscosky thead th,
+.easy-table-cuscosky tfoot th {
+ text-align: center;
+ background: #E6EDF5;
+ color: #4F76A3;
+ font-size: 100% !important;
+}
+
+.easy-table-cuscosky tbody th {
+ font-weight: bold;
+}
+
+.easy-table-cuscosky tbody tr { background: #FCFDFE; }
+
+.easy-table-cuscosky tbody tr:nth-child(2n+1) td,
+.easy-table-cuscosky tbody tr:nth-child(2n+1) th {
+ background: #F7F9FC;
+}
+
+.easy-table-cuscosky table a:link {
+ color: #718ABE;
+ text-decoration: none;
+}
+
+.easy-table-cuscosky table a:visited {
+ color: #718ABE;
+ text-decoration: none;
+}
+
+.easy-table-cuscosky table a:hover {
+ color: #718ABE;
+ text-decoration: underline !important;
+}
+
+.easy-table-cuscosky tfoot th, .easy-table-cuscosky tfoot td {
+ font-size: 85%;
+} \ No newline at end of file
diff --git a/plugins/easy-table/themes/default/style.css b/plugins/easy-table/themes/default/style.css
new file mode 100644
index 00000000..41e7ff1f
--- /dev/null
+++ b/plugins/easy-table/themes/default/style.css
@@ -0,0 +1,38 @@
+/*
+* always include base css to get basic styling for header etc.
+*/
+@import url(../../css/easy-table.css);
+
+
+/*
+ use bootstrap css for default theme.
+*/
+/*!
+ * Bootstrap v2.0.3
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+table.easy-table {max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;}
+.easy-table{width:100%;margin-bottom:18px;}.easy-table th,.easy-table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;}
+.easy-table th{font-weight:bold;}
+.easy-table thead th{vertical-align:bottom;}
+.easy-table caption+thead tr:first-child th,.easy-table caption+thead tr:first-child td,.easy-table colgroup+thead tr:first-child th,.easy-table colgroup+thead tr:first-child td,.easy-table thead:first-child tr:first-child th,.easy-table thead:first-child tr:first-child td{border-top:0;}
+.easy-table tbody+tbody{border-top:2px solid #dddddd;}
+.table-condensed th,.table-condensed td{padding:4px 5px;}
+.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapsed;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;}
+.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;}
+.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px;}
+.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px;}
+.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;}
+.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;}
+.table-striped tbody tr:nth-child(odd) td,
+.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;}
+.easy-table tbody tr:hover td,.easy-table tbody tr:hover th{background-color:#f5f5f5;}
+table.easy-table caption{
+ font-weight:bold;
+} \ No newline at end of file
diff --git a/plugins/easy-table/themes/index.html b/plugins/easy-table/themes/index.html
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/plugins/easy-table/themes/index.html
diff --git a/plugins/easy-table/themes/minimal/style.css b/plugins/easy-table/themes/minimal/style.css
new file mode 100644
index 00000000..4aa04739
--- /dev/null
+++ b/plugins/easy-table/themes/minimal/style.css
@@ -0,0 +1,6 @@
+/*
+* always include base css to get basic styling for header etc.
+*/
+@import url(../../css/easy-table.css);
+
+table.easy-table {max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} \ No newline at end of file