├── .gitignore ├── README.md ├── pom.xml └── src └── main ├── java ├── core │ ├── Application.scala │ ├── MixQuery.scala │ ├── QueryParam.java │ └── SqlParser.java ├── logic │ └── QueryLogic.java └── service │ ├── Application.java │ └── controller │ ├── IndexController.java │ └── QueryController.java └── resources ├── public ├── css │ └── common.css ├── images │ └── mix-query.png ├── index.html ├── js │ └── common.js └── vender │ ├── bootstrap-3.3.7-dist │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap-theme.min.css.map │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.css.map │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ └── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ └── npm.js │ ├── bootstrap3-typeahead.js │ ├── chart │ ├── Chart.bundle.js │ ├── Chart.bundle.min.js │ ├── Chart.js │ ├── Chart.min.js │ └── utils.js │ ├── datatables │ ├── dataTables.bootstrap.css │ ├── dataTables.bootstrap.js │ ├── dataTables.bootstrap.min.js │ ├── extensions │ │ ├── AutoFill │ │ │ ├── Readme.txt │ │ │ ├── css │ │ │ │ ├── dataTables.autoFill.css │ │ │ │ └── dataTables.autoFill.min.css │ │ │ ├── examples │ │ │ │ ├── columns.html │ │ │ │ ├── complete-callback.html │ │ │ │ ├── fill-both.html │ │ │ │ ├── fill-horizontal.html │ │ │ │ ├── index.html │ │ │ │ ├── scrolling.html │ │ │ │ ├── simple.html │ │ │ │ └── step-callback.html │ │ │ ├── images │ │ │ │ └── filler.png │ │ │ └── js │ │ │ │ ├── dataTables.autoFill.js │ │ │ │ └── dataTables.autoFill.min.js │ │ ├── ColReorder │ │ │ ├── License.txt │ │ │ ├── Readme.md │ │ │ ├── css │ │ │ │ ├── dataTables.colReorder.css │ │ │ │ └── dataTables.colReorder.min.css │ │ │ ├── examples │ │ │ │ ├── alt_insert.html │ │ │ │ ├── col_filter.html │ │ │ │ ├── colvis.html │ │ │ │ ├── fixedcolumns.html │ │ │ │ ├── fixedheader.html │ │ │ │ ├── index.html │ │ │ │ ├── jqueryui.html │ │ │ │ ├── new_init.html │ │ │ │ ├── predefined.html │ │ │ │ ├── realtime.html │ │ │ │ ├── reset.html │ │ │ │ ├── scrolling.html │ │ │ │ ├── server_side.html │ │ │ │ ├── simple.html │ │ │ │ └── state_save.html │ │ │ ├── images │ │ │ │ └── insert.png │ │ │ └── js │ │ │ │ ├── dataTables.colReorder.js │ │ │ │ └── dataTables.colReorder.min.js │ │ ├── ColVis │ │ │ ├── License.txt │ │ │ ├── Readme.md │ │ │ ├── css │ │ │ │ ├── dataTables.colVis.css │ │ │ │ ├── dataTables.colVis.min.css │ │ │ │ └── dataTables.colvis.jqueryui.css │ │ │ ├── examples │ │ │ │ ├── button_order.html │ │ │ │ ├── exclude_columns.html │ │ │ │ ├── group_columns.html │ │ │ │ ├── index.html │ │ │ │ ├── jqueryui.html │ │ │ │ ├── mouseover.html │ │ │ │ ├── new_init.html │ │ │ │ ├── restore.html │ │ │ │ ├── simple.html │ │ │ │ ├── text.html │ │ │ │ ├── title_callback.html │ │ │ │ ├── two_tables.html │ │ │ │ └── two_tables_identical.html │ │ │ └── js │ │ │ │ ├── dataTables.colVis.js │ │ │ │ └── dataTables.colVis.min.js │ │ ├── FixedColumns │ │ │ ├── License.txt │ │ │ ├── Readme.md │ │ │ ├── css │ │ │ │ ├── dataTables.fixedColumns.css │ │ │ │ └── dataTables.fixedColumns.min.css │ │ │ ├── examples │ │ │ │ ├── bootstrap.html │ │ │ │ ├── col_filter.html │ │ │ │ ├── colvis.html │ │ │ │ ├── css_size.html │ │ │ │ ├── index.html │ │ │ │ ├── index_column.html │ │ │ │ ├── left_right_columns.html │ │ │ │ ├── right_column.html │ │ │ │ ├── rowspan.html │ │ │ │ ├── server-side-processing.html │ │ │ │ ├── simple.html │ │ │ │ ├── size_fixed.html │ │ │ │ ├── size_fluid.html │ │ │ │ └── two_columns.html │ │ │ └── js │ │ │ │ ├── dataTables.fixedColumns.js │ │ │ │ └── dataTables.fixedColumns.min.js │ │ ├── FixedHeader │ │ │ ├── Readme.txt │ │ │ ├── css │ │ │ │ ├── dataTables.fixedHeader.css │ │ │ │ └── dataTables.fixedHeader.min.css │ │ │ ├── examples │ │ │ │ ├── header_footer.html │ │ │ │ ├── index.html │ │ │ │ ├── simple.html │ │ │ │ ├── top_left_right.html │ │ │ │ ├── two_tables.html │ │ │ │ └── zIndexes.html │ │ │ └── js │ │ │ │ ├── dataTables.fixedHeader.js │ │ │ │ └── dataTables.fixedHeader.min.js │ │ ├── KeyTable │ │ │ ├── Readme.txt │ │ │ ├── css │ │ │ │ ├── dataTables.keyTable.css │ │ │ │ └── dataTables.keyTable.min.css │ │ │ ├── examples │ │ │ │ ├── events.html │ │ │ │ ├── html.html │ │ │ │ ├── index.html │ │ │ │ ├── scrolling.html │ │ │ │ └── simple.html │ │ │ └── js │ │ │ │ ├── dataTables.keyTable.js │ │ │ │ └── dataTables.keyTable.min.js │ │ ├── Responsive │ │ │ ├── License.txt │ │ │ ├── Readme.md │ │ │ ├── css │ │ │ │ ├── dataTables.responsive.css │ │ │ │ └── dataTables.responsive.scss │ │ │ ├── examples │ │ │ │ ├── child-rows │ │ │ │ │ ├── column-control.html │ │ │ │ │ ├── custom-renderer.html │ │ │ │ │ ├── disable-child-rows.html │ │ │ │ │ ├── index.html │ │ │ │ │ ├── right-column.html │ │ │ │ │ └── whole-row-control.html │ │ │ │ ├── display-control │ │ │ │ │ ├── auto.html │ │ │ │ │ ├── classes.html │ │ │ │ │ ├── complexHeader.html │ │ │ │ │ ├── fixedHeader.html │ │ │ │ │ ├── index.html │ │ │ │ │ └── init-classes.html │ │ │ │ ├── index.html │ │ │ │ ├── initialisation │ │ │ │ │ ├── ajax.html │ │ │ │ │ ├── className.html │ │ │ │ │ ├── default.html │ │ │ │ │ ├── index.html │ │ │ │ │ ├── new.html │ │ │ │ │ └── option.html │ │ │ │ └── styling │ │ │ │ │ ├── bootstrap.html │ │ │ │ │ ├── compact.html │ │ │ │ │ ├── foundation.html │ │ │ │ │ ├── index.html │ │ │ │ │ └── scrolling.html │ │ │ └── js │ │ │ │ ├── dataTables.responsive.js │ │ │ │ └── dataTables.responsive.min.js │ │ ├── Scroller │ │ │ ├── Readme.txt │ │ │ ├── css │ │ │ │ ├── dataTables.scroller.css │ │ │ │ └── dataTables.scroller.min.css │ │ │ ├── examples │ │ │ │ ├── api_scrolling.html │ │ │ │ ├── data │ │ │ │ │ ├── 2500.txt │ │ │ │ │ └── ssp.php │ │ │ │ ├── index.html │ │ │ │ ├── large_js_source.html │ │ │ │ ├── server-side_processing.html │ │ │ │ ├── simple.html │ │ │ │ └── state_saving.html │ │ │ ├── images │ │ │ │ └── loading-background.png │ │ │ └── js │ │ │ │ ├── dataTables.scroller.js │ │ │ │ └── dataTables.scroller.min.js │ │ └── TableTools │ │ │ ├── Readme.md │ │ │ ├── css │ │ │ ├── dataTables.tableTools.css │ │ │ └── dataTables.tableTools.min.css │ │ │ ├── examples │ │ │ ├── ajax.html │ │ │ ├── alter_buttons.html │ │ │ ├── bootstrap.html │ │ │ ├── button_text.html │ │ │ ├── collection.html │ │ │ ├── defaults.html │ │ │ ├── index.html │ │ │ ├── jqueryui.html │ │ │ ├── multi_instance.html │ │ │ ├── multiple_tables.html │ │ │ ├── new_init.html │ │ │ ├── pdf_message.html │ │ │ ├── plug-in.html │ │ │ ├── select_column.html │ │ │ ├── select_multi.html │ │ │ ├── select_os.html │ │ │ ├── select_single.html │ │ │ ├── simple.html │ │ │ └── swf_path.html │ │ │ ├── images │ │ │ ├── collection.png │ │ │ ├── collection_hover.png │ │ │ ├── copy.png │ │ │ ├── copy_hover.png │ │ │ ├── csv.png │ │ │ ├── csv_hover.png │ │ │ ├── pdf.png │ │ │ ├── pdf_hover.png │ │ │ ├── print.png │ │ │ ├── print_hover.png │ │ │ ├── psd │ │ │ │ ├── collection.psd │ │ │ │ ├── copy document.psd │ │ │ │ ├── file_types.psd │ │ │ │ └── printer.psd │ │ │ ├── xls.png │ │ │ └── xls_hover.png │ │ │ ├── js │ │ │ ├── dataTables.tableTools.js │ │ │ └── dataTables.tableTools.min.js │ │ │ └── swf │ │ │ ├── copy_csv_xls.swf │ │ │ └── copy_csv_xls_pdf.swf │ ├── images │ │ ├── sort_asc.png │ │ ├── sort_asc_disabled.png │ │ ├── sort_both.png │ │ ├── sort_desc.png │ │ └── sort_desc_disabled.png │ ├── jquery.dataTables.css │ ├── jquery.dataTables.js │ ├── jquery.dataTables.min.css │ ├── jquery.dataTables.min.js │ └── jquery.dataTables_themeroller.css │ ├── jQuery │ └── jquery-2.2.3.min.js │ ├── jquery-highlighttextarea │ ├── .gitignore │ ├── Gruntfile.js │ ├── README.md │ ├── bower.json │ ├── jquery-ui.css │ ├── jquery.highlighttextarea.css │ ├── jquery.highlighttextarea.js │ ├── jquery.highlighttextarea.min.css │ ├── jquery.highlighttextarea.min.js │ ├── package.json │ └── tests │ │ └── index.html │ └── layer │ ├── extend │ └── layer.ext.js │ ├── layer.js │ ├── mobile │ ├── README.md │ ├── layer.m.js │ └── need │ │ └── layer.css │ └── skin │ ├── default │ ├── icon-ext.png │ ├── icon.png │ ├── loading-0.gif │ ├── loading-1.gif │ └── loading-2.gif │ ├── layer.css │ ├── layer.ext.css │ └── moon │ ├── default.png │ └── style.css └── templates └── add_sql.html /.gitignore: -------------------------------------------------------------------------------- 1 | out/* 2 | src/main/java/META-INF/* 3 | .idea/* 4 | mix-query.iml 5 | target/* 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # mix-query 2 | ``` 3 | jdbc:mysql://192.168.1.101:3306/test 4 | jdbc:mysql://192.168.1.101:3306/finebi 5 | 6 | //this.sql = "insert overwrite db1.user select id, real_name from (select id as id1 from db1.user2) as t1 left join db3.user as t2 on t1.id1=t2.id where id1 >= 2"; 7 | //this.sql = "insert into db1.user select age, real_name from (select * from db1.user2) as t1 left join (select * from db3.user) as t2 on t1.id=t2.id where age >= 2"; 8 | this.sql = "select * from (select id as id1, real_name from db1.user where id > 0) as t1 join db1.user2 as t2 right join (select * from db3.user) as t3 on t1.id1=t2.id and t2.id=t3.id and t3.id>32 where age > 1"; 9 | // 子查询里面不能有链接,因为我们建立 rdd 是根据表的,所以没法搞,如果要链接可以改成写在外链接 10 | //this.sql = "select * from (select * from db1.user left join db1.user2 on user.id=user2.id) as t1 join db1.user2 as t2 on t1.id=t2.id"; 11 | //this.sql = "select * from (select * from db1.user) as t1 left join db2.user as t3 join db1.user2 as t2 on t1.id=t3.id and t3.id=t2.id"; 12 | // 目前不支持但表的 insert 操作 this.sql = "insert into db1.user select * from db1.user"; 13 | //this.sql = "select * from db1.user as t1 left join db1.user as t2 on t1.id=t2.id"; 14 | // 参数格式转化 15 | ``` 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.lzz 8 | mix-query 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.springframework.boot 14 | spring-boot-starter-parent 15 | 1.5.2.RELEASE 16 | 17 | 18 | 19 | 20 | org.springframework.boot 21 | spring-boot-starter-web 22 | 23 | 24 | org.springframework.boot 25 | spring-boot-starter-test 26 | test 27 | 28 | 29 | org.springframework.boot 30 | spring-boot-starter-thymeleaf 31 | 32 | 33 | org.springframework.boot 34 | spring-boot-devtools 35 | true 36 | 37 | 38 | net.sf.json-lib 39 | json-lib 40 | 2.4 41 | jdk15 42 | 43 | 44 | com.jayway.jsonpath 45 | json-path 46 | test 47 | 48 | 49 | org.scala-lang 50 | scala-library 51 | 2.10.2 52 | 53 | 54 | org.apache.spark 55 | spark-core_2.10 56 | 1.5.2 57 | 58 | 59 | org.apache.spark 60 | spark-sql_2.10 61 | 1.5.2 62 | 63 | 64 | mysql 65 | mysql-connector-java 66 | 5.1.17 67 | 68 | 69 | 70 | 71 | 1.8 72 | 73 | 74 | 75 | 76 | 77 | 78 | org.springframework.boot 79 | spring-boot-maven-plugin 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /src/main/java/core/Application.scala: -------------------------------------------------------------------------------- 1 | package core 2 | 3 | /** 4 | * Created by lzz on 17/5/1. 5 | */ 6 | object Application extends App{ 7 | val mixQuery = new MixQuery 8 | val queryParam: QueryParam = new QueryParam 9 | val df = mixQuery.startJob(queryParam) 10 | df.show() 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/core/MixQuery.scala: -------------------------------------------------------------------------------- 1 | package core 2 | 3 | import java.util 4 | 5 | import org.apache.spark.sql.{Column, DataFrame, DataFrameWriter, SQLContext} 6 | import org.apache.spark.{SparkConf, SparkContext} 7 | 8 | 9 | /** 10 | * Created by lzz on 17/4/30. 11 | */ 12 | class MixQuery { 13 | var queryParam = null: QueryParam 14 | val sparkConf = new SparkConf().setMaster("local") 15 | .setAppName("clean app") 16 | .set("spark.driver.allowMultipleContexts", "true") 17 | val sc = new SparkContext(sparkConf) 18 | val sqlContext = new SQLContext(sc) 19 | 20 | def startJob(queryParam: QueryParam): DataFrame ={ 21 | this.queryParam = queryParam 22 | val sqlList = queryParam.getSqlList 23 | val size = sqlList.size() - 1 24 | var rdd:DataFrame = null 25 | for( i <- 1 to size ){ 26 | var schema = sqlList.get(i).get("schema") 27 | var table = sqlList.get(i).get("table") 28 | var join = sqlList.get(i).get("join") 29 | var sql = sqlList.get(i).get("sql") 30 | var alias = sqlList.get(i).get("alias") 31 | 32 | rdd = getRdd(sqlList.get(i-1).get("schema"),sqlList.get(i-1).get("table")) 33 | if( !"".equals(sqlList.get(i-1).get("sql")) ){ 34 | rdd.registerTempTable( sqlList.get(i-1).get("table") ) 35 | rdd = rdd.sqlContext.sql( sqlList.get(i-1).get("sql") ) 36 | }else{ 37 | rdd.registerTempTable( sqlList.get(i-1).get("table") ) 38 | } 39 | rdd.show() 40 | rdd = joinRDD(rdd, getRdd(schema, table), sqlList.get(i-1).get("alias"), alias, join) 41 | rdd.show() 42 | } 43 | // 如果只有一行数据那么是但表查询 44 | if( size == 0 ){ 45 | rdd=getRdd(sqlList.get(0).get("schema"),sqlList.get(0).get("table")) 46 | } 47 | // 最外层的 slect 48 | rdd.registerTempTable( "all_table" ) 49 | rdd = rdd.sqlContext.sql( queryParam.getParentSql ) 50 | rdd.show() 51 | // 如果有插入操作 52 | insertTable(rdd) 53 | return rdd 54 | } 55 | 56 | // 插入操作 57 | def insertTable(rdd: DataFrame): Unit ={ 58 | var insertHm: util.HashMap[String, String] = queryParam.getInsertHm 59 | if( !insertHm.isEmpty && ""!=insertHm.get("mode") && ""!=insertHm.get("schema") && ""!=insertHm.get("table") ){ 60 | var mode = insertHm.get("mode") 61 | var schema = insertHm.get("schema") 62 | var table = insertHm.get("table") 63 | // 插入操作 64 | var dfWriter:DataFrameWriter = null 65 | if( "into".equals( mode ) ){ 66 | dfWriter = rdd.write.mode("append") 67 | }else { 68 | dfWriter = rdd.write.mode("overwrite") 69 | } 70 | var jdbc = getJdbc( schema ) 71 | val prop = new java.util.Properties 72 | prop.put("user", jdbc.get("user") ) 73 | prop.put("password", jdbc.get("password")) 74 | dfWriter.jdbc( jdbc.get("host"), table, prop) 75 | } 76 | } 77 | 78 | /** 79 | * 根据 schema 和 table 获取 rdd 80 | * @param schema 81 | * @param table 82 | * @return 83 | */ 84 | def getRdd(schema: String, table: String): DataFrame = { 85 | var jdbcList = queryParam.getJdbcList() 86 | var jdbc = getJdbc( schema ) 87 | if( jdbc == null ){ 88 | return null 89 | } 90 | 91 | val prop = new java.util.Properties 92 | prop.put("user", jdbc.get("user")) 93 | prop.put("password", jdbc.get("password")) 94 | var host = jdbc.get("host") 95 | var rdd = sqlContext.read.jdbc( host, table, prop) 96 | return rdd 97 | } 98 | 99 | def getJdbc(schema: String): util.HashMap[String, String] = { 100 | var jdbcList = queryParam.getJdbcList() 101 | var size = jdbcList.size() -1 102 | for( i <- 0 to size ){ 103 | var jdbc = jdbcList.get(i).get( schema ) 104 | if( jdbc != null ){ 105 | return jdbc 106 | } 107 | } 108 | return null 109 | } 110 | 111 | //关联 rdd 112 | def joinRDD(rDD: DataFrame, rDD2: DataFrame, leftSchema: String, rightSchema: String, join_type: String): DataFrame = { 113 | if( rDD.rdd == null || rDD2.rdd == null ){ 114 | return null 115 | } 116 | var con:Column = getCondition( rDD, rDD2, leftSchema, rightSchema) 117 | var temRDD:DataFrame = null 118 | if( "".equals( join_type ) ){ 119 | temRDD = rDD.join(rDD2, con) 120 | }else{ 121 | temRDD = rDD.join(rDD2, con, join_type) 122 | } 123 | return temRDD 124 | } 125 | 126 | // 生成关联条件 127 | def getCondition(rDD: DataFrame, tempRDD: DataFrame, leftSchema: String, rightSchema: String) :Column ={ 128 | var keyList = List(leftSchema + "_" + rightSchema, leftSchema + "_", rightSchema + "_") 129 | var con: Column = null 130 | for( item <- keyList ){ 131 | var key = item 132 | var condition = queryParam.getCondition 133 | var size = condition.size() - 1 134 | var left = "" 135 | var right = "" 136 | var flag = true 137 | for( i <- 0 to size if flag){ 138 | var item = condition.get(i); 139 | var schema :String = item.get("schema").trim 140 | if( schema.equals( key ) ){ 141 | left = item.get("leftCol").trim 142 | right = item.get("rightCol").trim 143 | if( !"".equals(left) && !"".equals(right) ){ 144 | con = rDD(left) === tempRDD(right) 145 | }else if ( !"".equals(left) && "".equals(right)){ // 这边有很多逻辑应该抽成一个函数 146 | if( con != null ){ 147 | var tag = item.get("tag").trim 148 | var rightVal = item.get("rightVal").trim 149 | if ( "=".equals(tag) ){ 150 | con = con && rDD(left) == rightVal 151 | }else if( "<".equals(tag) ){ 152 | con = con && rDD(left) < rightVal 153 | }else if( ">".equals(tag) ){ 154 | con = con && rDD(left) > rightVal 155 | } 156 | } 157 | } 158 | flag = false 159 | } 160 | } 161 | } 162 | return con 163 | } 164 | 165 | 166 | /* 167 | def getTag(tag:String) : String ={ 168 | var result = 169 | tag match { 170 | case "<>" => "!=="; 171 | case "thisValue" => tag + " B"; 172 | } 173 | result 174 | } 175 | */ 176 | 177 | } 178 | 179 | 180 | //rdd1.join(rdd2, rdd1("id")===rdd2("id") && (rdd1("id") !== 1), "inner").show 181 | //rdd2.distinct().show() -------------------------------------------------------------------------------- /src/main/java/core/QueryParam.java: -------------------------------------------------------------------------------- 1 | package core; 2 | 3 | import net.sf.json.JSONObject; 4 | 5 | import java.util.ArrayList; 6 | import java.util.HashMap; 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | /** 11 | * Created by lzz on 17/4/30. 12 | */ 13 | public class QueryParam { 14 | // 转换前的参数 15 | private List>> jdbcList; 16 | private String sql; 17 | 18 | // 转化后的参数 19 | // 解析后的 sql 列表 20 | private List> sqlList; 21 | // 最外层 sql 22 | private String parentSql; 23 | // 链接的条件 24 | private List> condition; 25 | // insert 操作 26 | private HashMap insertHm; 27 | 28 | public QueryParam(JSONObject requestBody) { 29 | List>> jdbcList = new ArrayList<>(); 30 | List> jdbcs = requestBody.getJSONArray("jdbcs"); 31 | for( int i = 0; i < jdbcs.size(); i++ ){ 32 | Map hm = new HashMap(); 33 | String host = "jdbc:"+jdbcs.get(i).get("host"); 34 | String user = jdbcs.get(i).get("user"); 35 | String password = jdbcs.get(i).get("password"); 36 | String schema = jdbcs.get(i).get("schema"); 37 | hm.put("host", host); 38 | hm.put("user", user); 39 | hm.put("password", password); 40 | Map> itemHm = new HashMap(); 41 | itemHm.put(schema, (HashMap) hm); 42 | jdbcList.add(itemHm); 43 | } 44 | this.jdbcList = jdbcList; 45 | this.sql = requestBody.getString("sql"); 46 | // 参数格式转化 47 | adaptParam(); 48 | } 49 | 50 | public QueryParam(){ 51 | List>> jdbcList = new ArrayList<>(); 52 | HashMap hm = new HashMap(); 53 | hm.put("host", "jdbc:"+"mysql://192.168.1.101:3306/test"); 54 | hm.put("user", "root"); 55 | hm.put("password", "root"); 56 | HashMap hm2 = new HashMap(); 57 | hm2.put("db1", hm); 58 | jdbcList.add( hm2 ); 59 | HashMap hm3 = new HashMap(); 60 | hm3.put("host", "jdbc:"+"mysql://192.168.1.101:3306/test"); 61 | hm3.put("user", "root"); 62 | hm3.put("password", "root"); 63 | HashMap hm4 = new HashMap(); 64 | hm4.put("db2", hm3); 65 | jdbcList.add( hm4 ); 66 | HashMap hm5 = new HashMap(); 67 | hm5.put("host", "jdbc:"+"mysql://192.168.1.101:3306/finebi"); 68 | hm5.put("user", "root"); 69 | hm5.put("password", "root"); 70 | HashMap hm6 = new HashMap(); 71 | hm6.put("db3", hm5); 72 | jdbcList.add( hm6 ); 73 | 74 | // 设置 jdbc 75 | this.jdbcList = jdbcList; 76 | //this.sql = "insert overwrite db1.user select id, real_name from (select id as id1 from db1.user2) as t1 left join db3.user as t2 on t1.id1=t2.id where id1 >= 2"; 77 | //this.sql = "insert into db1.user select age, real_name from (select * from db1.user2) as t1 left join (select * from db3.user) as t2 on t1.id=t2.id where age >= 2"; 78 | this.sql = "select * from (select id as id1, real_name from db1.user where id > 0) as t1 join db1.user2 as t2 right join (select * from db3.user) as t3 on t1.id1=t2.id and t2.id=t3.id and t3.id>32 where age > 1"; 79 | // 子查询里面不能有链接,因为我们建立 rdd 是根据表的,所以没法搞,如果要链接可以改成写在外链接 80 | //this.sql = "select * from (select * from db1.user left join db1.user2 on user.id=user2.id) as t1 join db1.user2 as t2 on t1.id=t2.id"; 81 | //this.sql = "select * from (select * from db1.user) as t1 left join db2.user as t3 join db1.user2 as t2 on t1.id=t3.id and t3.id=t2.id"; 82 | // 目前不支持但表的 insert 操作 this.sql = "insert into db1.user select * from db1.user"; 83 | //this.sql = "select * from db1.user as t1 left join db1.user as t2 on t1.id=t2.id"; 84 | // 参数格式转化 85 | adaptParam(); 86 | } 87 | 88 | public void adaptParam(){ 89 | //String sql = "select * from (select id as id1, name from schema1.user where id > 0) as t1 join schema2.user2 as t2 right join scema3.user as t3 on t1.id1=t2.id and t2.id=t3.id and t3.id>1 where t3.id>0"; 90 | String sql = this.getSql(); 91 | SqlParser sqlParser = new SqlParser(); 92 | // 获取 insert 部分的 sql 93 | HashMap insertHm = sqlParser.insertSql( sql ); 94 | System.out.println( insertHm ); 95 | this.setInsertHm( insertHm ); 96 | 97 | // 获取 最左边 sql 98 | String parentSqlLeft = sqlParser.leftSql( sql ); 99 | 100 | // sql 预处理 101 | List sqlListTemp = sqlParser.sqlListTemp( sql ); 102 | System.out.println(sqlListTemp); 103 | // 结构化的 sql 104 | List> sqlList = sqlParser.sqlListHm( sqlListTemp ); 105 | System.out.println( sqlList ); 106 | this.setSqlList( sqlList); 107 | 108 | String str = sqlListTemp.get( sqlListTemp.size()-1 ); 109 | List> hmJoinOn = sqlParser.getHmJoinOn( str ); 110 | System.out.println(hmJoinOn); 111 | this.setCondition( hmJoinOn ); 112 | 113 | if( "".equals( SqlParser.lastSql ) || null == SqlParser.lastSql ){ 114 | this.setParentSql( parentSqlLeft + " all_table" ); 115 | }else{ 116 | this.setParentSql( parentSqlLeft + " all_table " + SqlParser.lastSql); 117 | } 118 | 119 | System.out.println( this ); 120 | } 121 | 122 | public List>> getJdbcList() { 123 | return jdbcList; 124 | } 125 | 126 | public void setJdbcList(List>> jdbcList) { 127 | this.jdbcList = jdbcList; 128 | } 129 | 130 | public String getSql() { 131 | return sql; 132 | } 133 | 134 | public void setSql(String sql) { 135 | this.sql = sql; 136 | } 137 | 138 | public List> getSqlList() { 139 | return sqlList; 140 | } 141 | 142 | public void setSqlList(List> sqlList) { 143 | this.sqlList = sqlList; 144 | } 145 | 146 | public String getParentSql() { 147 | return parentSql; 148 | } 149 | 150 | public void setParentSql(String parentSql) { 151 | this.parentSql = parentSql; 152 | } 153 | 154 | public List> getCondition() { 155 | return condition; 156 | } 157 | 158 | public void setCondition(List> condition) { 159 | this.condition = condition; 160 | } 161 | 162 | public HashMap getInsertHm() { 163 | return insertHm; 164 | } 165 | 166 | public void setInsertHm(HashMap insertHm) { 167 | this.insertHm = insertHm; 168 | } 169 | 170 | @Override 171 | public String toString() { 172 | return "core.QueryParam{" + 173 | "jdbcList=" + jdbcList + 174 | ", sql='" + sql + '\'' + 175 | ", sqlList=" + sqlList + 176 | ", parentSql='" + parentSql + '\'' + 177 | ", condition=" + condition + 178 | ", insertHm=" + insertHm + 179 | '}'; 180 | } 181 | } 182 | -------------------------------------------------------------------------------- /src/main/java/logic/QueryLogic.java: -------------------------------------------------------------------------------- 1 | package logic; 2 | 3 | import core.MixQuery; 4 | import core.QueryParam; 5 | import net.sf.json.JSONObject; 6 | import org.apache.spark.sql.DataFrame; 7 | import org.apache.spark.sql.Row; 8 | 9 | import java.util.ArrayList; 10 | import java.util.HashMap; 11 | import java.util.List; 12 | import java.util.Map; 13 | 14 | /** 15 | * Created by lzz on 17/5/1. 16 | */ 17 | public class QueryLogic { 18 | 19 | public JSONObject process(JSONObject requestBody){ 20 | MixQuery mixQuery = new MixQuery(); 21 | QueryParam queryParam = new QueryParam( requestBody ); 22 | DataFrame df = mixQuery.startJob( queryParam ); 23 | df.show(); 24 | Row[] resdf = df.take(2); 25 | JSONObject jsonObject = new JSONObject(); 26 | String[] header = df.columns(); 27 | List list = new ArrayList<>(); 28 | for( int i = 0; i < resdf.length; i++ ){ 29 | Map hm = changeRowHm(header, resdf[i]); 30 | list.add( hm ); 31 | } 32 | jsonObject.put("result", list); 33 | return jsonObject; 34 | } 35 | 36 | private Map changeRowHm(String[] header, Row row) { 37 | int size = row.length(); 38 | Map hm = new HashMap(); 39 | for( int i = 0; i < size; i++ ){ 40 | hm.put( header[i], row.get(i) ); 41 | } 42 | return hm; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/service/Application.java: -------------------------------------------------------------------------------- 1 | package service; 2 | 3 | /** 4 | * Created by lzz on 17/5/14. 5 | */ 6 | import org.springframework.boot.SpringApplication; 7 | import org.springframework.boot.autoconfigure.SpringBootApplication; 8 | 9 | @SpringBootApplication 10 | public class Application { 11 | 12 | public static void main(String[] args) { 13 | SpringApplication.run(Application.class, args); 14 | } 15 | } -------------------------------------------------------------------------------- /src/main/java/service/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package service.controller; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.ui.Model; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | 7 | /** 8 | * Created by lzz on 17/5/14. 9 | */ 10 | 11 | @Controller 12 | public class IndexController { 13 | @RequestMapping("/add/sql") 14 | public String addSql(Model model) { 15 | model.addAttribute("name", "hello world"); 16 | return "add_sql"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/service/controller/QueryController.java: -------------------------------------------------------------------------------- 1 | package service.controller; 2 | 3 | /** 4 | * Created by lzz on 17/5/14. 5 | */ 6 | 7 | import net.sf.json.JSONObject; 8 | import org.springframework.web.bind.annotation.*; 9 | import logic.QueryLogic; 10 | 11 | @RestController 12 | public class QueryController { 13 | 14 | @RequestMapping(value="/query", method = RequestMethod.POST) 15 | public JSONObject greeting(@RequestBody JSONObject requestBody) { 16 | QueryLogic queryLogic = new QueryLogic(); 17 | JSONObject jsonObject = queryLogic.process( requestBody ); 18 | return jsonObject; 19 | } 20 | 21 | @RequestMapping(value="/test", method = RequestMethod.GET) 22 | public JSONObject test() { 23 | JSONObject jsonObject = new JSONObject(); 24 | return jsonObject; 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/resources/public/css/common.css: -------------------------------------------------------------------------------- 1 | .nav-height{ 2 | height: 50px; 3 | } 4 | 5 | .thumbnail-title{ 6 | background-color: #f5f5f5; 7 | height: 30px; 8 | font-size: 18px; 9 | font-weight: bold; 10 | padding-left: 10px; 11 | padding-top: 2px; 12 | } 13 | .container-title{ 14 | height: 95px; 15 | margin-bottom: 20px; 16 | background-color: #fafbfc; 17 | border-bottom: 1px solid #e1e4e8; 18 | } 19 | .container-title-content{ 20 | margin-top: -5px; 21 | } 22 | 23 | .panel-default>.panel-heading { 24 | color: #333; 25 | background-color: #fafbfc; 26 | border-color: #e1e4e8; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/main/resources/public/images/mix-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/images/mix-query.png -------------------------------------------------------------------------------- /src/main/resources/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/main/resources/public/js/common.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by lzz on 17/5/2. 3 | */ 4 | 5 | 6 | /** 7 | * 设置 uuid 8 | */ 9 | function set_cookie(key, value) 10 | { 11 | var Days = 360; 12 | var exp = new Date(); 13 | exp.setTime(exp.getTime() + Days*24*60*60*1000); 14 | document.cookie = key+"="+ escape ( value ) + ";expires=" + exp.toGMTString() + ";path=/"; 15 | } 16 | 17 | /** 18 | * 获取 cookie 19 | * @param name 20 | * @returns {null} 21 | */ 22 | function get_cookie(name) 23 | { 24 | var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); 25 | if(arr=document.cookie.match(reg)) 26 | return unescape(arr[2]); 27 | else 28 | return null; 29 | } -------------------------------------------------------------------------------- /src/main/resources/public/vender/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/public/vender/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/public/vender/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/public/vender/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/public/vender/bootstrap-3.3.7-dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /src/main/resources/public/vender/chart/utils.js: -------------------------------------------------------------------------------- 1 | window.chartColors = { 2 | red: 'rgb(255, 99, 132)', 3 | orange: 'rgb(255, 159, 64)', 4 | yellow: 'rgb(255, 205, 86)', 5 | green: 'rgb(75, 192, 192)', 6 | blue: 'rgb(54, 162, 235)', 7 | purple: 'rgb(153, 102, 255)', 8 | grey: 'rgb(231,233,237)' 9 | }; 10 | 11 | window.randomScalingFactor = function() { 12 | return (Math.random() > 0.5 ? 1.0 : -1.0) * Math.round(Math.random() * 100); 13 | } -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/dataTables.bootstrap.js: -------------------------------------------------------------------------------- 1 | /*! DataTables Bootstrap 3 integration 2 | * ©2011-2014 SpryMedia Ltd - datatables.net/license 3 | */ 4 | 5 | /** 6 | * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and 7 | * DataTables 1.10 or newer. 8 | * 9 | * This file sets the defaults and adds options to DataTables to style its 10 | * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap 11 | * for further information. 12 | */ 13 | (function(window, document, undefined){ 14 | 15 | var factory = function( $, DataTable ) { 16 | "use strict"; 17 | 18 | 19 | /* Set the defaults for DataTables initialisation */ 20 | $.extend( true, DataTable.defaults, { 21 | dom: 22 | "<'row'<'col-sm-6'l><'col-sm-6'f>>" + 23 | "<'row'<'col-sm-12'tr>>" + 24 | "<'row'<'col-sm-5'i><'col-sm-7'p>>", 25 | renderer: 'bootstrap' 26 | } ); 27 | 28 | 29 | /* Default class modification */ 30 | $.extend( DataTable.ext.classes, { 31 | sWrapper: "dataTables_wrapper form-inline dt-bootstrap", 32 | sFilterInput: "form-control input-sm", 33 | sLengthSelect: "form-control input-sm" 34 | } ); 35 | 36 | 37 | /* Bootstrap paging button renderer */ 38 | DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { 39 | var api = new DataTable.Api( settings ); 40 | var classes = settings.oClasses; 41 | var lang = settings.oLanguage.oPaginate; 42 | var btnDisplay, btnClass, counter=0; 43 | 44 | var attach = function( container, buttons ) { 45 | var i, ien, node, button; 46 | var clickHandler = function ( e ) { 47 | e.preventDefault(); 48 | if ( !$(e.currentTarget).hasClass('disabled') ) { 49 | api.page( e.data.action ).draw( false ); 50 | } 51 | }; 52 | 53 | for ( i=0, ien=buttons.length ; i 0 ? 72 | '' : ' disabled'); 73 | break; 74 | 75 | case 'previous': 76 | btnDisplay = lang.sPrevious; 77 | btnClass = button + (page > 0 ? 78 | '' : ' disabled'); 79 | break; 80 | 81 | case 'next': 82 | btnDisplay = lang.sNext; 83 | btnClass = button + (page < pages-1 ? 84 | '' : ' disabled'); 85 | break; 86 | 87 | case 'last': 88 | btnDisplay = lang.sLast; 89 | btnClass = button + (page < pages-1 ? 90 | '' : ' disabled'); 91 | break; 92 | 93 | default: 94 | btnDisplay = button + 1; 95 | btnClass = page === button ? 96 | 'active' : ''; 97 | break; 98 | } 99 | 100 | if ( btnDisplay ) { 101 | node = $('
  • ', { 102 | 'class': classes.sPageButton+' '+btnClass, 103 | 'id': idx === 0 && typeof button === 'string' ? 104 | settings.sTableId +'_'+ button : 105 | null 106 | } ) 107 | .append( $('', { 108 | 'href': '#', 109 | 'aria-controls': settings.sTableId, 110 | 'data-dt-idx': counter, 111 | 'tabindex': settings.iTabIndex 112 | } ) 113 | .html( btnDisplay ) 114 | ) 115 | .appendTo( container ); 116 | 117 | settings.oApi._fnBindAction( 118 | node, {action: button}, clickHandler 119 | ); 120 | 121 | counter++; 122 | } 123 | } 124 | } 125 | }; 126 | 127 | // IE9 throws an 'unknown error' if document.activeElement is used 128 | // inside an iframe or frame. 129 | var activeEl; 130 | 131 | try { 132 | // Because this approach is destroying and recreating the paging 133 | // elements, focus is lost on the select button which is bad for 134 | // accessibility. So we want to restore focus once the draw has 135 | // completed 136 | activeEl = $(document.activeElement).data('dt-idx'); 137 | } 138 | catch (e) {} 139 | 140 | attach( 141 | $(host).empty().html('
      ').children('ul'), 142 | buttons 143 | ); 144 | 145 | if ( activeEl ) { 146 | $(host).find( '[data-dt-idx='+activeEl+']' ).focus(); 147 | } 148 | }; 149 | 150 | 151 | /* 152 | * TableTools Bootstrap compatibility 153 | * Required TableTools 2.1+ 154 | */ 155 | if ( DataTable.TableTools ) { 156 | // Set the classes that TableTools uses to something suitable for Bootstrap 157 | $.extend( true, DataTable.TableTools.classes, { 158 | "container": "DTTT btn-group", 159 | "buttons": { 160 | "normal": "btn btn-default", 161 | "disabled": "disabled" 162 | }, 163 | "collection": { 164 | "container": "DTTT_dropdown dropdown-menu", 165 | "buttons": { 166 | "normal": "", 167 | "disabled": "disabled" 168 | } 169 | }, 170 | "print": { 171 | "info": "DTTT_print_info" 172 | }, 173 | "select": { 174 | "row": "active" 175 | } 176 | } ); 177 | 178 | // Have the collection use a bootstrap compatible drop down 179 | $.extend( true, DataTable.TableTools.DEFAULTS.oTags, { 180 | "collection": { 181 | "container": "ul", 182 | "button": "li", 183 | "liner": "a" 184 | } 185 | } ); 186 | } 187 | 188 | }; // /factory 189 | 190 | 191 | // Define as an AMD module if possible 192 | if ( typeof define === 'function' && define.amd ) { 193 | define( ['jquery', 'datatables'], factory ); 194 | } 195 | else if ( typeof exports === 'object' ) { 196 | // Node/CommonJS 197 | factory( require('jquery'), require('datatables') ); 198 | } 199 | else if ( jQuery ) { 200 | // Otherwise simply initialise as normal, stopping multiple evaluation 201 | factory( jQuery, jQuery.fn.dataTable ); 202 | } 203 | 204 | 205 | })(window, document); 206 | 207 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/dataTables.bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | DataTables Bootstrap 3 integration 3 | ©2011-2014 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(l,q){var e=function(b,c){b.extend(!0,c.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(c.ext.classes,{sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm"});c.ext.renderer.pageButton.bootstrap=function(g,e,r,s,i,m){var t=new c.Api(g),u=g.oClasses,j=g.oLanguage.oPaginate,d,f,n=0,p=function(c,e){var k,h,o,a,l=function(a){a.preventDefault(); 6 | b(a.currentTarget).hasClass("disabled")||t.page(a.data.action).draw(!1)};k=0;for(h=e.length;k",{"class":u.sPageButton+" "+ 7 | f,id:0===r&&"string"===typeof a?g.sTableId+"_"+a:null}).append(b("",{href:"#","aria-controls":g.sTableId,"data-dt-idx":n,tabindex:g.iTabIndex}).html(d)).appendTo(c),g.oApi._fnBindAction(o,{action:a},l),n++)}},h;try{h=b(q.activeElement).data("dt-idx")}catch(l){}p(b(e).empty().html('
        ').children("ul"),s);h&&b(e).find("[data-dt-idx="+h+"]").focus()};c.TableTools&&(b.extend(!0,c.TableTools.classes,{container:"DTTT btn-group",buttons:{normal:"btn btn-default",disabled:"disabled"}, 8 | collection:{container:"DTTT_dropdown dropdown-menu",buttons:{normal:"",disabled:"disabled"}},print:{info:"DTTT_print_info"},select:{row:"active"}}),b.extend(!0,c.TableTools.DEFAULTS.oTags,{collection:{container:"ul",button:"li",liner:"a"}}))};"function"===typeof define&&define.amd?define(["jquery","datatables"],e):"object"===typeof exports?e(require("jquery"),require("datatables")):jQuery&&e(jQuery,jQuery.fn.dataTable)})(window,document); 9 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/AutoFill/Readme.txt: -------------------------------------------------------------------------------- 1 | # AutoFill 2 | 3 | AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in information over the selected cells and incrementing numbers as needed. Key features include: 4 | 5 | * Click and drag cell content insertion 6 | * Automatic incrementing of numeric information 7 | * Enable and disable on any column 8 | * Detailed callback functions for customisation 9 | * Support for both DataTables and browser window scrolling 10 | 11 | 12 | # Installation 13 | 14 | To use AutoFill, first download DataTables ( http://datatables.net/download ) and place the unzipped AutoFill package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. 15 | 16 | 17 | # Basic usage 18 | 19 | AutoFill is initialised using the `$.fn.dataTable.AutoFill` constructor. For example: 20 | 21 | ```js 22 | $(document).ready( function () { 23 | var table = $('#example').dataTable(); 24 | new $.fn.dataTable.AutoFill( table ); 25 | } ); 26 | ``` 27 | 28 | 29 | # Documentation / support 30 | 31 | * Documentation: http://datatables.net/extensions/autofill/ 32 | * DataTables support forums: http://datatables.net/forums 33 | 34 | 35 | # GitHub 36 | 37 | If you fancy getting involved with the development of AutoFill and help make it better, please refer to its GitHub repo: https://github.com/DataTables/AutoFill 38 | 39 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/AutoFill/css/dataTables.autoFill.css: -------------------------------------------------------------------------------- 1 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 2 | * AutoFill styles 3 | */ 4 | 5 | div.AutoFill_filler { 6 | display: none; 7 | position: absolute; 8 | height: 14px; 9 | width: 14px; 10 | background: url(../images/filler.png) no-repeat center center; 11 | z-index: 1002; 12 | } 13 | 14 | div.AutoFill_border { 15 | display: none; 16 | position: absolute; 17 | background-color: #0063dc; 18 | z-index: 1001; 19 | 20 | box-shadow: 0px 0px 5px #76b4ff; 21 | -moz-box-shadow: 0px 0px 5px #76b4ff; 22 | -webkit-box-shadow: 0px 0px 5px #76b4ff; 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/AutoFill/css/dataTables.autoFill.min.css: -------------------------------------------------------------------------------- 1 | div.AutoFill_filler{display:none;position:absolute;height:14px;width:14px;background:url(../images/filler.png) no-repeat center center;z-index:1002}div.AutoFill_border{display:none;position:absolute;background-color:#0063dc;z-index:1001;box-shadow:0px 0px 5px #76b4ff;-moz-box-shadow:0px 0px 5px #76b4ff;-webkit-box-shadow:0px 0px 5px #76b4ff} 2 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/AutoFill/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | AutoFill examples - AutoFill examples 14 | 15 | 16 | 17 | 30 | 31 |
        32 | 64 |
        65 | 66 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/AutoFill/images/filler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/AutoFill/images/filler.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColReorder/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2015 SpryMedia Limited 2 | http://datatables.net 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColReorder/Readme.md: -------------------------------------------------------------------------------- 1 | # ColReorder 2 | 3 | ColReorder adds the ability for the end user to click and drag column headers to reorder a table as they see fit, to DataTables. Key features include: 4 | 5 | * Very easy integration with DataTables 6 | * Tight integration with all other DataTables plug-ins 7 | * The ability to exclude the first (or more) column from being movable 8 | * Predefine a column order 9 | * Save staving integration with DataTables 10 | 11 | 12 | # Installation 13 | 14 | To use ColReorder, first download DataTables ( http://datatables.net/download ) and place the unzipped ColReorder package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. 15 | 16 | 17 | # Basic usage 18 | 19 | ColReorder is initialised using the `$.fn.dataTable.ColReorder` constructor. For example: 20 | 21 | ```js 22 | $(document).ready( function () { 23 | $('#example').DataTable(); 24 | 25 | new $.fn.dataTable.ColReorder( table ); 26 | } ); 27 | ``` 28 | 29 | 30 | # Documentation / support 31 | 32 | * Documentation: http://datatables.net/extensions/colreorder/ 33 | * DataTables support forums: http://datatables.net/forums 34 | 35 | 36 | # GitHub 37 | 38 | If you fancy getting involved with the development of ColReorder and help make it better, please refer to its GitHub repo: https://github.com/DataTables/ColReorder 39 | 40 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColReorder/css/dataTables.colReorder.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Namespace DTCR - "DataTables ColReorder" plug-in 3 | */ 4 | 5 | table.DTCR_clonedTable { 6 | background-color: rgba(255, 255, 255, 0.7); 7 | z-index: 202; 8 | } 9 | 10 | div.DTCR_pointer { 11 | width: 1px; 12 | background-color: #0259C4; 13 | z-index: 201; 14 | } -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColReorder/css/dataTables.colReorder.min.css: -------------------------------------------------------------------------------- 1 | table.DTCR_clonedTable{background-color:rgba(255,255,255,0.7);z-index:202}div.DTCR_pointer{width:1px;background-color:#0259C4;z-index:201} 2 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColReorder/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ColReorder examples - ColReorder examples 14 | 15 | 16 | 17 |
        18 |
        19 |

        ColReorder example ColReorder examples

        20 | 21 |
        22 |

        ColReorder adds the ability for the end user to click and drag column headers to reorder a table as they see fit, to DataTables. Key features include:

        23 | 24 |
          25 |
        • Very easy integration with DataTables
        • 26 |
        • Tight integration with all other DataTables plug-ins
        • 27 |
        • The ability to exclude the first (or more) column from being movable
        • 28 |
        • Predefine a column order
        • 29 |
        • Save staving integration with DataTables
        • 30 |
        31 |
        32 |
        33 |
        34 | 35 |
        36 | 72 |
        73 | 74 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColReorder/images/insert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/ColReorder/images/insert.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColVis/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2015 SpryMedia Limited 2 | http://datatables.net 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColVis/Readme.md: -------------------------------------------------------------------------------- 1 | # ColVis 2 | 3 | ColVis adds a button to the toolbars around DataTables which gives the end user of the table the ability to dynamically change the visibility of the columns in the table: 4 | 5 | * Dynamically show and hide columns in a table 6 | * Very easy integration with DataTables 7 | * Ability to exclude columns from being either hidden or shown 8 | * Save saving integration with DataTables 9 | 10 | 11 | # Installation 12 | 13 | To use ColVis, first download DataTables ( http://datatables.net/download ) and place the unzipped ColVis package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. 14 | 15 | 16 | # Basic usage 17 | 18 | ColVis is initialised using the `C` option that it adds to DataTables' `dom` option. For example: 19 | 20 | ```js 21 | $(document).ready( function () { 22 | $('#example').dataTable( { 23 | "dom": 'C<"clear">lfrtip' 24 | } ); 25 | } ); 26 | ``` 27 | 28 | 29 | # Documentation / support 30 | 31 | * Documentation: http://datatables.net/extensions/colvis/ 32 | * DataTables support forums: http://datatables.net/forums 33 | 34 | 35 | # GitHub 36 | 37 | If you fancy getting involved with the development of ColVis and help make it better, please refer to its GitHub repo: https://github.com/DataTables/ColVis 38 | 39 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColVis/css/dataTables.colVis.css: -------------------------------------------------------------------------------- 1 | 2 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3 | * ColVis styles 4 | */ 5 | div.ColVis { 6 | float: right; 7 | margin-bottom: 1em; 8 | } 9 | 10 | button.ColVis_Button, 11 | ul.ColVis_collection li { 12 | position: relative; 13 | float: left; 14 | margin-right: 3px; 15 | padding: 5px 8px; 16 | border: 1px solid #999; 17 | cursor: pointer; 18 | *cursor: hand; 19 | font-size: 0.88em; 20 | color: black !important; 21 | white-space: nowrap; 22 | 23 | -webkit-border-radius: 2px; 24 | -moz-border-radius: 2px; 25 | -ms-border-radius: 2px; 26 | -o-border-radius: 2px; 27 | border-radius: 2px; 28 | 29 | -webkit-box-shadow: 1px 1px 3px #ccc; 30 | -moz-box-shadow: 1px 1px 3px #ccc; 31 | -ms-box-shadow: 1px 1px 3px #ccc; 32 | -o-box-shadow: 1px 1px 3px #ccc; 33 | box-shadow: 1px 1px 3px #ccc; 34 | 35 | /* Generated by http://www.colorzilla.com/gradient-editor/ */ 36 | background: #ffffff; /* Old browsers */ 37 | background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */ 38 | background: -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */ 39 | background: -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */ 40 | background: -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */ 41 | background: linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */ 42 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */ 43 | } 44 | 45 | .ColVis_Button:hover, 46 | ul.ColVis_collection li:hover { 47 | border: 1px solid #666; 48 | text-decoration: none !important; 49 | 50 | -webkit-box-shadow: 1px 1px 3px #999; 51 | -moz-box-shadow: 1px 1px 3px #999; 52 | -ms-box-shadow: 1px 1px 3px #999; 53 | -o-box-shadow: 1px 1px 3px #999; 54 | box-shadow: 1px 1px 3px #999; 55 | 56 | background: #f3f3f3; /* Old browsers */ 57 | background: -webkit-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Chrome10+,Safari5.1+ */ 58 | background: -moz-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* FF3.6+ */ 59 | background: -ms-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* IE10+ */ 60 | background: -o-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Opera 11.10+ */ 61 | background: linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* W3C */ 62 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 ); /* IE6-9 */ 63 | } 64 | 65 | button.ColVis_Button { 66 | height: 30px; 67 | padding: 3px 8px; 68 | } 69 | 70 | button.ColVis_Button::-moz-focus-inner { 71 | border: none !important; 72 | padding: 0; 73 | } 74 | 75 | button.ColVis_Button:active { 76 | outline: none; 77 | } 78 | 79 | 80 | div.ColVis_collectionBackground { 81 | position: fixed; 82 | top: 0; 83 | left: 0; 84 | height: 100%; 85 | width: 100%; 86 | background-color: black; 87 | z-index: 1100; 88 | } 89 | 90 | ul.ColVis_collection { 91 | list-style: none; 92 | width: 150px; 93 | padding: 8px 8px 4px 8px; 94 | margin: 0; 95 | border: 1px solid #ccc; 96 | border: 1px solid rgba( 0, 0, 0, 0.4 ); 97 | background-color: #f3f3f3; 98 | background-color: rgba( 255, 255, 255, 0.3 ); 99 | overflow: hidden; 100 | z-index: 2002; 101 | 102 | -webkit-border-radius: 5px; 103 | -moz-border-radius: 5px; 104 | -ms-border-radius: 5px; 105 | -o-border-radius: 5px; 106 | border-radius: 5px; 107 | 108 | -webkit-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); 109 | -moz-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); 110 | -ms-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); 111 | -o-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); 112 | box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); 113 | } 114 | 115 | ul.ColVis_collection li { 116 | position: relative; 117 | height: auto; 118 | left: 0; 119 | right: 0; 120 | padding: 0.5em; 121 | 122 | display: block; 123 | float: none; 124 | margin-bottom: 4px; 125 | 126 | -webkit-box-shadow: 1px 1px 3px #999; 127 | -moz-box-shadow: 1px 1px 3px #999; 128 | -ms-box-shadow: 1px 1px 3px #999; 129 | -o-box-shadow: 1px 1px 3px #999; 130 | box-shadow: 1px 1px 3px #999; 131 | } 132 | 133 | ul.ColVis_collection li { 134 | text-align: left; 135 | } 136 | 137 | ul.ColVis_collection li.ColVis_Button:hover { 138 | border: 1px solid #999; 139 | background-color: #f0f0f0; 140 | } 141 | 142 | ul.ColVis_collection li span { 143 | display: inline-block; 144 | padding-left: 0.5em; 145 | cursor: pointer; 146 | } 147 | 148 | 149 | ul.ColVis_collection li.ColVis_Special { 150 | border-color: #555; 151 | background: rgb(237,237,237); /* Old browsers */ 152 | background: -webkit-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* Chrome10+,Safari5.1+ */ 153 | background: -moz-linear-gradient(top, rgba(237,237,237,1) 0%, rgba(214,214,214,1) 77%, rgba(232,232,232,1) 100%); /* FF3.6+ */ 154 | background: -ms-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* IE10+ */ 155 | background: -o-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* Opera 11.10+ */ 156 | background: linear-gradient(to bottom, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* W3C */ 157 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ededed', endColorstr='#e8e8e8',GradientType=0 ); /* IE6-9 */ 158 | } 159 | 160 | ul.ColVis_collection li.ColVis_Special:hover { 161 | background: #e2e2e2; /* Old browsers */ 162 | background: -webkit-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* Chrome10+,Safari5.1+ */ 163 | background: -moz-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* FF3.6+ */ 164 | background: -ms-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* IE10+ */ 165 | background: -o-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* Opera 11.10+ */ 166 | background: linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* W3C */ 167 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#e2e2e2',GradientType=0 ); /* IE6-9 */ 168 | } 169 | 170 | 171 | span.ColVis_radio { 172 | display: inline-block; 173 | width: 20px; 174 | } 175 | 176 | div.ColVis_catcher { 177 | position: absolute; 178 | z-index: 1101; 179 | } 180 | 181 | .disabled { 182 | color: #999; 183 | } 184 | 185 | 186 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColVis/css/dataTables.colVis.min.css: -------------------------------------------------------------------------------- 1 | div.ColVis{float:right;margin-bottom:1em}button.ColVis_Button,ul.ColVis_collection li{position:relative;float:left;margin-right:3px;padding:5px 8px;border:1px solid #999;cursor:pointer;*cursor:hand;font-size:0.88em;color:black !important;white-space:nowrap;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;-webkit-box-shadow:1px 1px 3px #ccc;-moz-box-shadow:1px 1px 3px #ccc;-ms-box-shadow:1px 1px 3px #ccc;-o-box-shadow:1px 1px 3px #ccc;box-shadow:1px 1px 3px #ccc;background:#ffffff;background:-webkit-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-moz-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-ms-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-o-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 )}.ColVis_Button:hover,ul.ColVis_collection li:hover{border:1px solid #666;text-decoration:none !important;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999;background:#f3f3f3;background:-webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);background:-moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);background:-ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);background:-o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);background:linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 )}button.ColVis_Button{height:30px;padding:3px 8px}button.ColVis_Button::-moz-focus-inner{border:none !important;padding:0}button.ColVis_Button:active{outline:none}div.ColVis_collectionBackground{position:fixed;top:0;left:0;height:100%;width:100%;background-color:black;z-index:1100}ul.ColVis_collection{list-style:none;width:150px;padding:8px 8px 4px 8px;margin:0;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:#f3f3f3;background-color:rgba(255,255,255,0.3);overflow:hidden;z-index:2002;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-moz-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-ms-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-o-box-shadow:3px 3px 5px rgba(0,0,0,0.3);box-shadow:3px 3px 5px rgba(0,0,0,0.3)}ul.ColVis_collection li{position:relative;height:auto;left:0;right:0;padding:0.5em;display:block;float:none;margin-bottom:4px;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999}ul.ColVis_collection li{text-align:left}ul.ColVis_collection li.ColVis_Button:hover{border:1px solid #999;background-color:#f0f0f0}ul.ColVis_collection li span{display:inline-block;padding-left:0.5em;cursor:pointer}ul.ColVis_collection li.ColVis_Special{border-color:#555;background:#ededed;background:-webkit-linear-gradient(top, #ededed 0%, #d6d6d6 77%, #e8e8e8 100%);background:-moz-linear-gradient(top, #ededed 0%, #d6d6d6 77%, #e8e8e8 100%);background:-ms-linear-gradient(top, #ededed 0%, #d6d6d6 77%, #e8e8e8 100%);background:-o-linear-gradient(top, #ededed 0%, #d6d6d6 77%, #e8e8e8 100%);background:linear-gradient(to bottom, #ededed 0%, #d6d6d6 77%, #e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#e8e8e8',GradientType=0 )}ul.ColVis_collection li.ColVis_Special:hover{background:#e2e2e2;background:-webkit-linear-gradient(top, #d0d0d0 0%, #d5d5d5 89%, #e2e2e2 100%);background:-moz-linear-gradient(top, #d0d0d0 0%, #d5d5d5 89%, #e2e2e2 100%);background:-ms-linear-gradient(top, #d0d0d0 0%, #d5d5d5 89%, #e2e2e2 100%);background:-o-linear-gradient(top, #d0d0d0 0%, #d5d5d5 89%, #e2e2e2 100%);background:linear-gradient(top, #d0d0d0 0%, #d5d5d5 89%, #e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#e2e2e2',GradientType=0 )}span.ColVis_radio{display:inline-block;width:20px}div.ColVis_catcher{position:absolute;z-index:1101}.disabled{color:#999} 2 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColVis/css/dataTables.colvis.jqueryui.css: -------------------------------------------------------------------------------- 1 | 2 | button.ColVis_Button, 3 | ul.ColVis_collection li { 4 | padding: 0.5em; 5 | } 6 | 7 | ul.ColVis_collection { 8 | margin: 0; 9 | padding: 0; 10 | overflow: hidden; 11 | z-index: 2002; 12 | } 13 | 14 | ul.ColVis_collection li { 15 | clear: both; 16 | display: block; 17 | text-align: left; 18 | margin: -1px 0 0 0; 19 | } 20 | 21 | ul.ColVis_collection li span { 22 | display: inline-block; 23 | padding-left: 0.5em; 24 | cursor: pointer; 25 | } 26 | 27 | div.ColVis_collectionBackground { 28 | position: fixed; 29 | top: 0; 30 | left: 0; 31 | height: 100%; 32 | width: 100%; 33 | background-color: black; 34 | z-index: 1100; 35 | } 36 | 37 | 38 | div.ColVis_catcher { 39 | position: absolute; 40 | z-index: 1101; 41 | } -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/ColVis/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ColVis examples - ColVis examples 14 | 15 | 16 | 17 |
        18 |
        19 |

        ColVis example ColVis examples

        20 | 21 |
        22 |

        ColVis adds a button to the toolbars around DataTables which gives the end user of the table the ability to dynamically change the visibility of the columns in 23 | the table:

        24 | 25 |
          26 |
        • Dynamically show and hide columns in a table
        • 27 |
        • Very easy integration with DataTables
        • 28 |
        • Ability to exclude columns from being either hidden or shown
        • 29 |
        • Save saving integration with DataTables
        • 30 |
        31 |
        32 |
        33 |
        34 | 35 |
        36 | 70 |
        71 | 72 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedColumns/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2015 SpryMedia Limited 2 | http://datatables.net 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedColumns/Readme.md: -------------------------------------------------------------------------------- 1 | # FixedColumns 2 | 3 | When making use of DataTables' x-axis scrolling feature (`scrollX`), you may wish to fix the left or right most columns in place. This plug-in for DataTables provides exactly this option (for non-scrolling tables, please use the FixedHeader plug-in, which can fix headers, footers and columns). Key features include: 4 | 5 | * Freezes the left most column to the side of the table 6 | * Option to freeze two or more columns 7 | * Full integration with DataTables' scrolling options 8 | 9 | 10 | # Installation 11 | 12 | To use FixedColumns, first download DataTables ( http://datatables.net/download ) and place the unzipped FixedColumns package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. 13 | 14 | 15 | # Basic usage 16 | 17 | FixedColumns is initialised using the `$.fn.dataTable.FixedColumns()` constructor. For example: 18 | 19 | ```js 20 | $(document).ready(function() { 21 | var table = $('#example').DataTable( { 22 | scrollY: "300px", 23 | scrollX: true, 24 | scrollCollapse: true, 25 | paging: false 26 | } ); 27 | 28 | new $.fn.dataTable.FixedColumns( table ); 29 | } ); 30 | ``` 31 | 32 | 33 | # Documentation / support 34 | 35 | * Documentation: http://datatables.net/extensions/FixedColumns/ 36 | * DataTables support forums: http://datatables.net/forums 37 | 38 | 39 | # GitHub 40 | 41 | If you fancy getting involved with the development of FixedColumns and help make it better, please refer to its GitHub repo: https://github.com/DataTables/FixedColumns 42 | 43 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedColumns/css/dataTables.fixedColumns.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /* Block out what is behind the fixed column's header and footer */ 4 | table.DTFC_Cloned thead, 5 | table.DTFC_Cloned tfoot { 6 | background-color: white; 7 | } 8 | 9 | /* Block out the gap above the scrollbar on the right, when there is a fixed 10 | * right column 11 | */ 12 | div.DTFC_Blocker { 13 | background-color: white; 14 | } 15 | 16 | div.DTFC_LeftWrapper table.dataTable, 17 | div.DTFC_RightWrapper table.dataTable { 18 | margin-bottom: 0; 19 | z-index: 2; 20 | } 21 | 22 | div.DTFC_LeftWrapper table.dataTable.no-footer, 23 | div.DTFC_RightWrapper table.dataTable.no-footer { 24 | border-bottom: none; 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedColumns/css/dataTables.fixedColumns.min.css: -------------------------------------------------------------------------------- 1 | table.DTFC_Cloned thead,table.DTFC_Cloned tfoot{background-color:white}div.DTFC_Blocker{background-color:white}div.DTFC_LeftWrapper table.dataTable,div.DTFC_RightWrapper table.dataTable{margin-bottom:0;z-index:2}div.DTFC_LeftWrapper table.dataTable.no-footer,div.DTFC_RightWrapper table.dataTable.no-footer{border-bottom:none} 2 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedColumns/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | FixedColumns examples - FixedColumns examples 14 | 15 | 16 | 17 |
        18 |
        19 |

        FixedColumns example FixedColumns examples

        20 | 21 |
        22 |

        When making use of DataTables' x-axis scrolling feature (scrollXDT), you may wish to fix the left or right most columns in place. This extension for DataTables 24 | provides exactly this option (for non-scrolling tables, please use the FixedHeader extension, which can fix 25 | headers, footers and columns). Key features include:

        26 | 27 |
          28 |
        • Freezes the left most column to the side of the table
        • 29 |
        • Option to freeze two or more columns
        • 30 |
        • Full integration with DataTables' scrolling options
        • 31 |
        32 |
        33 |
        34 |
        35 | 36 |
        37 | 72 |
        73 | 74 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedHeader/Readme.txt: -------------------------------------------------------------------------------- 1 | # FixedHeader 2 | 3 | At times it can be useful to ensure that column titles will remain always visible on a table, even when a user scrolls down a table. The FixedHeader plug-in for DataTables will float the 'thead' element above the table at all times to help address this issue. The column titles also remain click-able to perform sorting. Key features include: 4 | 5 | * Fix the header to the top of the window 6 | * Ability to fix the footer and left / right columns as well 7 | * z-Index ordering options 8 | 9 | 10 | # Installation 11 | 12 | To use FixedHeader, first download DataTables ( http://datatables.net/download ) and place the unzipped FixedHeader package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. 13 | 14 | 15 | # Basic usage 16 | 17 | FixedHeader is initialised using the `$.fn.dataTable.FixedHeader()` object. For example: 18 | 19 | ```js 20 | $(document).ready( function () { 21 | var table = $('#example').dataTable(); 22 | new $.fn.dataTable.FixedHeader( table ); 23 | } ); 24 | ``` 25 | 26 | 27 | # Documentation / support 28 | 29 | * Documentation: http://datatables.net/extensions/FixedHeader/ 30 | * DataTables support forums: http://datatables.net/forums 31 | 32 | 33 | # GitHub 34 | 35 | If you fancy getting involved with the development of FixedHeader and help make it better, please refer to its GitHub repo: https://github.com/DataTables/FixedHeader 36 | 37 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedHeader/css/dataTables.fixedHeader.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | div.FixedHeader_Cloned th, 4 | div.FixedHeader_Cloned td { 5 | background-color: white !important; 6 | } 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedHeader/css/dataTables.fixedHeader.min.css: -------------------------------------------------------------------------------- 1 | div.FixedHeader_Cloned th,div.FixedHeader_Cloned td{background-color:white !important} 2 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/FixedHeader/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | FixedHeader examples - FixedHeader examples 14 | 15 | 16 | 17 |
        18 |
        19 |

        FixedHeader example FixedHeader examples

        20 | 21 |
        22 |

        At times it can be useful to ensure that column titles will remain always visible on a table, even 23 | when a user scrolls down a table. The FixedHeader plug-in for DataTables will float the thead element above the table at all times to help address this issue. 25 | The column titles also remain click-able to perform sorting. Key features include:

        26 | 27 |
          28 |
        • Fix the header to the top of the window
        • 29 |
        • Ability to fix the footer and left / right columns as well
        • 30 |
        • z-Index ordering options
        • 31 |
        32 |
        33 |
        34 |
        35 | 36 |
        37 | 67 |
        68 | 69 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/KeyTable/Readme.txt: -------------------------------------------------------------------------------- 1 | # KeyTable 2 | 3 | KeyTable provides enhanced accessibility and navigation options for DataTables enhanced tables, by allowing Excel like cell navigation on any table. Events (focus, blur, action etc) can be assigned to individual cells, columns, rows or all cells to allow advanced interaction options.. Key features include: 4 | 5 | * Easy to use spreadsheet like interaction 6 | * Fully integrated with DataTables 7 | * Wide range of supported events 8 | 9 | 10 | # Installation 11 | 12 | To use KeyTable, first download DataTables ( http://datatables.net/download ) and place the unzipped KeyTable package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. 13 | 14 | 15 | # Basic usage 16 | 17 | KeyTable is initialised using the `C` option that it adds to DataTables' `dom` option. For example: 18 | 19 | ```js 20 | $(document).ready( function () { 21 | var table = $('#example').DataTable(); 22 | new $.fn.dataTable.KeyTable( table ); 23 | } ); 24 | ``` 25 | 26 | 27 | # Documentation / support 28 | 29 | * Documentation: http://datatables.net/extensions/keytable/ 30 | * DataTables support forums: http://datatables.net/forums 31 | 32 | 33 | # GitHub 34 | 35 | If you fancy getting involved with the development of KeyTable and help make it better, please refer to its GitHub repo: https://github.com/DataTables/KeyTable 36 | 37 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/KeyTable/css/dataTables.keyTable.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | table.KeyTable th.focus, 4 | table.KeyTable td.focus { 5 | outline: 3px solid #3366FF; 6 | outline-offset: -3px; 7 | } 8 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/KeyTable/css/dataTables.keyTable.min.css: -------------------------------------------------------------------------------- 1 | table.KeyTable th.focus,table.KeyTable td.focus{outline:3px solid #3366FF;outline-offset:-3px} 2 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/KeyTable/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | KeyTable examples - KeyTable examples 14 | 15 | 16 | 17 |
        18 |
        19 |

        KeyTable example KeyTable examples

        20 | 21 |
        22 |

        KeyTable provides enhanced accessibility and navigation options for DataTables enhanced tables, by 23 | allowing Excel like cell navigation on any table. Events (focus, blur, action etc) can be assigned to 24 | individual cells, columns, rows or all cells to allow advanced interaction options.. Key features 25 | include:

        26 | 27 |
          28 |
        • Easy to use spreadsheet like interaction
        • 29 |
        • Fully integrated with DataTables
        • 30 |
        • Wide range of supported events
        • 31 |
        • Works without DataTables if you just want a plain table
        • 32 |
        33 |
        34 |
        35 |
        36 | 37 |
        38 | 67 |
        68 | 69 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/KeyTable/js/dataTables.keyTable.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | KeyTable 1.2.1 3 | ©2010-2014 SpryMedia Ltd - datatables.net/license 4 | */ 5 | var KeyTable; 6 | (function(F,n,K){var A=function(d){KeyTable=function(j){function A(a){return function(e,c,p){(null===e||"number"==typeof e)&&(null===c||"number"==typeof c)&&"function"==typeof p?k[a].push({x:e,y:c,fn:p}):"object"==typeof e&&"function"==typeof c?(e=E(e),k[a].push({x:e[0],y:e[1],fn:c})):alert("Unhandable event type was added: x"+e+" y:"+c+" z:"+p)}}function L(a){return function(e,c,p){(null===e||"number"==typeof e)&&(null===c||"number"==typeof c)?"function"==typeof p?B(a,e,c,p):B(a,e,c):"object"== 7 | typeof e?(e=E(e),"function"==typeof c?B(a,e[0],e[1],c):B(a,e[0],e[1])):alert("Unhandable event type was removed: x"+e+" y:"+c+" z:"+p)}}function B(a,e,c,p){for(var h=0,b=0,d=k[a].length;b=c.fnDisplayEnd();)0<=c._iDisplayLength?c._iDisplayStart+c._iDisplayLengthc._iDisplayStart&& 9 | (c._iDisplayStart=0),i.oApi._fnCalculateEnd(c);i.oApi._fnDraw(c);o=h}b=E(a);t=a;l=b[0];g=b[1];var r,j,k,m,f;if(e){r=d(F).height();b=d(F).width();j=d(n).scrollTop();h=d(n).scrollLeft();k=a.offsetHeight;m=a.offsetWidth;f=a;var q=0,s=0;if(f.offsetParent){q=f.offsetLeft;s=f.offsetTop;for(f=f.offsetParent;f;)q+=f.offsetLeft,s+=f.offsetTop,f=f.offsetParent}f=[q,s];if(i&&"undefined"!=typeof c.oScroll&&(""!==c.oScroll.sX||""!==c.oScroll.sY))f[1]-=d(c.nTable.parentNode).scrollTop(),f[0]-=d(c.nTable.parentNode).scrollLeft(); 10 | f[1]+k>j+r?(r=f[1]+k-r,n.documentElement.scrollTop=r,n.body.scrollTop=r):f[1]h+b?(b=f[0]+m-b,n.documentElement.scrollLeft=b,n.body.scrollLeft=b):f[0]r+j?c.scrollTop= 11 | a.offsetTop+k-r:a.offsetTopb+h)?c.scrollLeft=a.offsetLeft+m-b:a.offsetLefttd:eq("+a+")",z)[0]}function E(a){return i?[d("td",a.parentNode).index(a),d("tr",a.parentNode.parentNode).index(a.parentNode)+i._iDisplayStart]:[d("td",a.parentNode).index(a),d("tr",a.parentNode.parentNode).index(a.parentNode)]}function H(a){for(var b=0,c=i.aiDisplay.length;b0){a=l-1;b=g}else if(g>0){a=b-1;b=g-1}else{if(d==-1&&D){u=true;s.focus();setTimeout(function(){u=false},0);o=false;y();return true}return false}break;case 38:if(g>0){a=l;b=g-1}else return false; 17 | break;case 36:a=l;b=0;break;case 33:a=l;b=g-10;b<0&&(b=0);break;case 9:case 39:if(lc-1&&(b=c-1);break;default:return true}q(w(a,b));return false});if(i)d(i.nTable).on("click","td",I);else d(z).on("click","td",I);d(n).click(function(a){for(var a=a.target, 18 | d=false;a;){if(a==b.table){d=true;break}a=a.parentNode}d||y()})};KeyTable.version="1.2.1";d.fn.dataTable.KeyTable=KeyTable;return d.fn.DataTable.KeyTable=KeyTable};"function"===typeof define&&define.amd?define(["jquery","datatables"],A):"object"===typeof exports?A(require("jquery"),require("datatables")):jQuery&&!jQuery.fn.dataTable.KeyTable&&A(jQuery,jQuery.fn.dataTable)})(window,document); 19 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014-2015 SpryMedia Limited 2 | http://datatables.net 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/Readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/Responsive/Readme.md -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/css/dataTables.responsive.css: -------------------------------------------------------------------------------- 1 | table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child, 2 | table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child { 3 | position: relative; 4 | padding-left: 30px; 5 | cursor: pointer; 6 | } 7 | table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before, 8 | table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before { 9 | top: 8px; 10 | left: 4px; 11 | height: 16px; 12 | width: 16px; 13 | display: block; 14 | position: absolute; 15 | color: white; 16 | border: 2px solid white; 17 | border-radius: 16px; 18 | text-align: center; 19 | line-height: 14px; 20 | box-shadow: 0 0 3px #444; 21 | box-sizing: content-box; 22 | content: '+'; 23 | background-color: #31b131; 24 | } 25 | table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child.dataTables_empty:before, 26 | table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child.dataTables_empty:before { 27 | display: none; 28 | } 29 | table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before, 30 | table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before { 31 | content: '-'; 32 | background-color: #d33333; 33 | } 34 | table.dataTable.dtr-inline.collapsed > tbody > tr.child td:before { 35 | display: none; 36 | } 37 | table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child, 38 | table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child { 39 | padding-left: 27px; 40 | } 41 | table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before, 42 | table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before { 43 | top: 5px; 44 | left: 4px; 45 | height: 14px; 46 | width: 14px; 47 | border-radius: 14px; 48 | line-height: 12px; 49 | } 50 | table.dataTable.dtr-column > tbody > tr > td.control, 51 | table.dataTable.dtr-column > tbody > tr > th.control { 52 | position: relative; 53 | cursor: pointer; 54 | } 55 | table.dataTable.dtr-column > tbody > tr > td.control:before, 56 | table.dataTable.dtr-column > tbody > tr > th.control:before { 57 | top: 50%; 58 | left: 50%; 59 | height: 16px; 60 | width: 16px; 61 | margin-top: -10px; 62 | margin-left: -10px; 63 | display: block; 64 | position: absolute; 65 | color: white; 66 | border: 2px solid white; 67 | border-radius: 16px; 68 | text-align: center; 69 | line-height: 14px; 70 | box-shadow: 0 0 3px #444; 71 | box-sizing: content-box; 72 | content: '+'; 73 | background-color: #31b131; 74 | } 75 | table.dataTable.dtr-column > tbody > tr.parent td.control:before, 76 | table.dataTable.dtr-column > tbody > tr.parent th.control:before { 77 | content: '-'; 78 | background-color: #d33333; 79 | } 80 | table.dataTable > tbody > tr.child { 81 | padding: 0.5em 1em; 82 | } 83 | table.dataTable > tbody > tr.child:hover { 84 | background: transparent !important; 85 | } 86 | table.dataTable > tbody > tr.child ul { 87 | display: inline-block; 88 | list-style-type: none; 89 | margin: 0; 90 | padding: 0; 91 | } 92 | table.dataTable > tbody > tr.child ul li { 93 | border-bottom: 1px solid #efefef; 94 | padding: 0.5em 0; 95 | } 96 | table.dataTable > tbody > tr.child ul li:first-child { 97 | padding-top: 0; 98 | } 99 | table.dataTable > tbody > tr.child ul li:last-child { 100 | border-bottom: none; 101 | } 102 | table.dataTable > tbody > tr.child span.dtr-title { 103 | display: inline-block; 104 | min-width: 75px; 105 | font-weight: bold; 106 | } 107 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/css/dataTables.responsive.scss: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // Mixins 4 | // 5 | @mixin control() { 6 | display: block; 7 | position: absolute; 8 | color: white; 9 | border: 2px solid white; 10 | border-radius: 16px; 11 | text-align: center; 12 | line-height: 14px; 13 | box-shadow: 0 0 3px #444; 14 | box-sizing: content-box; 15 | } 16 | 17 | @mixin control-open() { 18 | content: '+'; 19 | background-color: #31b131; 20 | } 21 | 22 | @mixin control-close() { 23 | content: '-'; 24 | background-color: #d33333; 25 | } 26 | 27 | 28 | // 29 | // Table styles 30 | // 31 | table.dataTable { 32 | // Styling for the `inline` type 33 | &.dtr-inline.collapsed > tbody { 34 | > tr > td:first-child, 35 | > tr > th:first-child { 36 | position: relative; 37 | padding-left: 30px; 38 | cursor: pointer; 39 | 40 | &:before { 41 | top: 8px; 42 | left: 4px; 43 | height: 16px; 44 | width: 16px; 45 | @include control; 46 | @include control-open; 47 | } 48 | 49 | &.dataTables_empty:before { 50 | display: none; 51 | } 52 | } 53 | 54 | > tr.parent { 55 | > td:first-child:before, 56 | > th:first-child:before { 57 | @include control-close; 58 | } 59 | } 60 | 61 | > tr.child td:before { 62 | display: none; 63 | } 64 | } 65 | 66 | // DataTables' `compact` styling 67 | &.dtr-inline.collapsed.compact > tbody { 68 | > tr > td:first-child, 69 | > tr > th:first-child { 70 | padding-left: 27px; 71 | 72 | &:before { 73 | top: 5px; 74 | left: 4px; 75 | height: 14px; 76 | width: 14px; 77 | border-radius: 14px; 78 | line-height: 12px; 79 | } 80 | } 81 | } 82 | 83 | 84 | // Styling for the `column` type 85 | &.dtr-column > tbody { 86 | > tr > td.control, 87 | > tr > th.control { 88 | position: relative; 89 | cursor: pointer; 90 | 91 | &:before { 92 | top: 50%; 93 | left: 50%; 94 | height: 16px; 95 | width: 16px; 96 | margin-top: -10px; 97 | margin-left: -10px; 98 | @include control; 99 | @include control-open; 100 | } 101 | } 102 | 103 | > tr.parent { 104 | td.control:before, 105 | th.control:before { 106 | @include control-close; 107 | } 108 | } 109 | } 110 | 111 | 112 | // Child row styling 113 | > tbody > tr.child { 114 | padding: 0.5em 1em; 115 | 116 | &:hover { 117 | background: transparent !important; 118 | } 119 | 120 | ul { 121 | display: inline-block; 122 | list-style-type: none; 123 | margin: 0; 124 | padding: 0; 125 | 126 | li { 127 | border-bottom: 1px solid #efefef; 128 | padding: 0.5em 0; 129 | 130 | &:first-child { 131 | padding-top: 0; 132 | } 133 | 134 | &:last-child { 135 | border-bottom: none; 136 | } 137 | } 138 | } 139 | 140 | span.dtr-title { 141 | display: inline-block; 142 | min-width: 75px; 143 | font-weight: bold; 144 | } 145 | 146 | span.dtr-data {} 147 | } 148 | } 149 | 150 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/examples/child-rows/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Responsive examples - Child row control 13 | 14 | 15 | 16 |
        17 |
        18 |

        Responsive example Child row control

        19 | 20 |
        21 |

        When a column is removed from display by Responsive, the data is still available in the table and can be displayed in a DataTables child row (see 22 | row().child()DT). By default 23 | Responsive will show child row controls in the first column when the table has been collapsed, allowing the end user to show / hide the information from the hidden 24 | columns.

        25 | 26 |

        Responsive has a number of options for display of the child rows:

        27 | 28 | 36 | 37 |

        This section shows examples of these options being used.

        38 |
        39 |
        40 |
        41 | 42 |
        43 | 70 |
        71 | 72 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/examples/display-control/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Responsive examples - Display control 13 | 14 | 15 | 16 |
        17 |
        18 |

        Responsive example Display control

        19 | 20 |
        21 |

        Responsive has two basic modes of operation for controlling the visibility of columns at different display sizes. These two modes can be using either separately 22 | or together:

        23 | 24 |
          25 |
        • Manually assigned class names for breakpoints - Assign a column a class name to tell Responsive which breakpoint(s) to show it in.
        • 26 |
        • Automatically - for columns without a breakpoint class name, it will be automatically removed if there is no room available on screen to show it. Columns 27 | are removed from the right, moving left.
        • 28 |
        29 | 30 |

        This section explores these two options.

        31 |
        32 |
        33 |
        34 | 35 |
        36 | 63 |
        64 | 65 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Responsive examples - Responsive DataTables 13 | 14 | 15 | 16 |
        17 |
        18 |

        Responsive example Responsive DataTables

        19 | 20 |
        21 |
        22 |
        23 | 24 |
        25 | 84 |
        85 | 86 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/examples/initialisation/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Responsive examples - Initialisation 13 | 14 | 15 | 16 |
        17 |
        18 |

        Responsive example Initialisation

        19 | 20 |
        21 |

        Responsive can be run on a DataTable in a number of different ways:

        22 | 23 |
          24 |
        • By adding the class responsive or dt-responsive to the table
        • 25 |
        • Using the responsiveR option in the DataTables initialisation
        • 27 |
        • Use the $.fn.dataTable.Responsive constructor.
        • 28 |
        29 | 30 |

        This set of examples demonstrates these initialisation options.

        31 |
        32 |
        33 |
        34 | 35 |
        36 | 63 |
        64 | 65 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/examples/styling/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Responsive examples - Styling 13 | 14 | 15 | 16 |
        17 |
        18 |

        Responsive example Styling

        19 | 20 |
        21 |

        Responsive requires very little styling information of its own, with styling needed only for the child row display when the table has been collapsed. As such, 22 | integrating Responsive with your application should be as simple as including the Javascript and base stylesheet! This section shows Responsive being styling using 23 | external CSS frameworks.

        24 |
        25 |
        26 |
        27 | 28 |
        29 | 55 |
        56 | 57 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Responsive/js/dataTables.responsive.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Responsive 1.0.6 3 | 2014-2015 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(n,p){var o=function(e,k){var h=function(d,a){if(!k.versionCheck||!k.versionCheck("1.10.1"))throw"DataTables Responsive requires DataTables 1.10.1 or newer";this.s={dt:new k.Api(d),columns:[]};this.s.dt.settings()[0].responsive||(a&&"string"===typeof a.details&&(a.details={type:a.details}),this.c=e.extend(!0,{},h.defaults,k.defaults.responsive,a),d.responsive=this,this._constructor())};h.prototype={_constructor:function(){var d=this,a=this.s.dt;a.settings()[0]._responsive=this;e(n).on("resize.dtr orientationchange.dtr", 6 | a.settings()[0].oApi._fnThrottle(function(){d._resize()}));a.on("destroy.dtr",function(){e(n).off("resize.dtr orientationchange.dtr draw.dtr")});this.c.breakpoints.sort(function(a,c){return a.widthc.width?-1:0});this._classLogic();this._resizeAuto();var c=this.c.details;c.type&&(d._detailsInit(),this._detailsVis(),a.on("column-visibility.dtr",function(){d._detailsVis()}),a.on("draw.dtr",function(){a.rows({page:"current"}).iterator("row",function(b,c){var f=a.row(c);if(f.child.isShown()){var i= 7 | d.c.details.renderer(a,c);f.child(i,"child").show()}})}),e(a.table().node()).addClass("dtr-"+c.type));this._resize()},_columnsVisiblity:function(d){var a=this.s.dt,c=this.s.columns,b,g,f=e.map(c,function(a){return a.auto&&null===a.minWidth?!1:!0===a.auto?"-":-1!==e.inArray(d,a.includeIn)}),i=0;b=0;for(g=f.length;ba-c[b].minWidth?(i=!0,f[b]=!1):f[b]=!0,a-=c[b].minWidth);a=!1;b=0;for(g=c.length;b=j&&b(f,a[g].name)}else{if("not-"===e){g=0;for(e=a.length;g").append(f).appendTo(b);"inline"===this.c.details.type&&e(c).addClass("dtr-inline collapsed");c=e("
        ").css({width:1,height:1,overflow:"hidden"}).append(c);c.find("th.never, td.never").remove();c.insertBefore(d.table().node());d.columns().eq(0).each(function(b){a[b].minWidth=f[b].offsetWidth||0});c.remove()}}};h.breakpoints=[{name:"desktop",width:Infinity},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}];h.defaults={breakpoints:h.breakpoints, 16 | auto:!0,details:{renderer:function(d,a){var c=d.cells(a,":hidden").eq(0).map(function(a){var c=e(d.column(a.column).header()),a=d.cell(a).index();if(c.hasClass("control")||c.hasClass("never"))return"";var f=d.settings()[0],f=f.oApi._fnGetCellData(f,a.row,a.column,"display");(c=c.text())&&(c+=":");return'
      • '+c+' '+f+"
      • "}).toArray().join("");return c?e('
          ').append(c):!1},target:0, 17 | type:"inline"}};var m=e.fn.dataTable.Api;m.register("responsive()",function(){return this});m.register("responsive.index()",function(d){d=e(d);return{column:d.data("dtr-index"),row:d.parent().data("dtr-index")}});m.register("responsive.rebuild()",function(){return this.iterator("table",function(d){d._responsive&&d._responsive._classLogic()})});m.register("responsive.recalc()",function(){return this.iterator("table",function(d){d._responsive&&(d._responsive._resizeAuto(),d._responsive._resize())})}); 18 | h.version="1.0.6";e.fn.dataTable.Responsive=h;e.fn.DataTable.Responsive=h;e(p).on("init.dt.dtr",function(d,a){if("dt"===d.namespace&&(e(a.nTable).hasClass("responsive")||e(a.nTable).hasClass("dt-responsive")||a.oInit.responsive||k.defaults.responsive)){var c=a.oInit.responsive;!1!==c&&new h(a,e.isPlainObject(c)?c:{})}});return h};"function"===typeof define&&define.amd?define(["jquery","datatables"],o):"object"===typeof exports?o(require("jquery"),require("datatables")):jQuery&&!jQuery.fn.dataTable.Responsive&& 19 | o(jQuery,jQuery.fn.dataTable)})(window,document); 20 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/Readme.txt: -------------------------------------------------------------------------------- 1 | # Scroller 2 | 3 | Scroller is a virtual rendering plug-in for DataTables which allows large datasets to be drawn on screen every quickly. What the virtual rendering means is that only the visible portion of the table (and a bit to either side to make the scrolling smooth) is drawn, while the scrolling container gives the visual impression that the whole table is visible. This is done by making use of the pagination abilities of DataTables and moving the table around in the scrolling container DataTables adds to the page. The scrolling container is forced to the height it would be for the full table display using an extra element. 4 | 5 | Key features include: 6 | 7 | * Speed! The aim of Scroller for DataTables is to make rendering large data sets fast 8 | * Full compatibility with DataTables' deferred rendering for maximum speed 9 | * Integration with state saving in DataTables (scrolling position is saved) 10 | * Support for scrolling with millions of rows 11 | * Easy to use 12 | 13 | 14 | # Installation 15 | 16 | To use Scroller, first download DataTables ( http://datatables.net/download ) and place the unzipped Scroller package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. 17 | 18 | 19 | # Basic usage 20 | 21 | Scroller is initialised by simply including the letter `dt-string S` in the `dt-init dom` for the table you want to have this feature enabled on. Note that the `dt-string S` must come after the `dt-string t` parameter in `dom`. For example: 22 | 23 | ```js 24 | $(document).ready( function () { 25 | $('#example').DataTable( { 26 | dom: 'lfrtipS' 27 | } ); 28 | } ); 29 | ``` 30 | 31 | Note that rows in the table must all be the same height. Information in a cell which expands on to multiple lines will cause some odd behaviour in the scrolling. Additionally, the table's `cellspacing` parameter must be set to 0, again to ensure the information display is correct. 32 | 33 | 34 | # Documentation / support 35 | 36 | * Documentation: http://datatables.net/extensions/scroller/ 37 | * DataTables support forums: http://datatables.net/forums 38 | 39 | 40 | # GitHub 41 | 42 | If you fancy getting involved with the development of Scroller and help make it better, please refer to its GitHub repo: https://github.com/DataTables/Scroller 43 | 44 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/css/dataTables.scroller.css: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Namespace: DTS (DataTables Scroller) 4 | */ 5 | 6 | div.DTS tbody th, 7 | div.DTS tbody td { 8 | white-space: nowrap; 9 | } 10 | 11 | div.DTS tbody tr.even { 12 | background-color: white; 13 | } 14 | 15 | div.DTS div.DTS_Loading { 16 | position: absolute; 17 | top: 50%; 18 | left: 50%; 19 | width: 200px; 20 | height: 20px; 21 | margin-top: -20px; 22 | margin-left: -100px; 23 | z-index: 1; 24 | 25 | border: 1px solid #999; 26 | padding: 20px 0; 27 | text-align: center; 28 | background-color: white; 29 | background-color: rgba(255, 255, 255, 0.5); 30 | } 31 | 32 | div.DTS div.dataTables_scrollHead, 33 | div.DTS div.dataTables_scrollFoot { 34 | background-color: white; 35 | } 36 | 37 | div.DTS div.dataTables_scrollBody { 38 | z-index: 2; 39 | } 40 | 41 | div.DTS div.dataTables_scroll { 42 | background: url('../images/loading-background.png') repeat 0 0; 43 | } 44 | 45 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/css/dataTables.scroller.min.css: -------------------------------------------------------------------------------- 1 | div.DTS tbody th,div.DTS tbody td{white-space:nowrap}div.DTS tbody tr.even{background-color:white}div.DTS div.DTS_Loading{position:absolute;top:50%;left:50%;width:200px;height:20px;margin-top:-20px;margin-left:-100px;z-index:1;border:1px solid #999;padding:20px 0;text-align:center;background-color:white;background-color:rgba(255,255,255,0.5)}div.DTS div.dataTables_scrollHead,div.DTS div.dataTables_scrollFoot{background-color:white}div.DTS div.dataTables_scrollBody{z-index:2}div.DTS div.dataTables_scroll{background:url("../images/loading-background.png") repeat 0 0} 2 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/examples/api_scrolling.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Scroller example - API 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 40 | 41 | 42 | 43 |
          44 |
          45 |

          Scroller example API

          46 | 47 |
          48 |

          This example shows a trivial use of the API methods that Scroller adds to the DataTables API to 49 | scroll to a row once the table's data has been loaded. In this case 50 | scroller().scrollToRow() is used to jump to row 1000.

          51 |
          52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
          IDFirst nameLast nameZIP / Post codeCountry
          64 | 65 |
            66 |
          • Javascript
          • 67 |
          • HTML
          • 68 |
          • CSS
          • 69 |
          • Ajax
          • 70 |
          • Server-side script
          • 71 |
          72 | 73 |
          74 |
          75 |

          The Javascript shown below is used to initialise the table shown in this 76 | example:

          $(document).ready(function() { 77 | $('#example').DataTable( { 78 | ajax: "data/2500.txt", 79 | deferRender: true, 80 | dom: "frtiS", 81 | scrollY: 200, 82 | scrollCollapse: true, 83 | initComplete: function () { 84 | var api = this.api(); 85 | api.scroller().scrollToRow( 1000 ); 86 | } 87 | } ); 88 | } ); 89 | 90 |

          In addition to the above code, the following Javascript library files are loaded for use in this 91 | example:

          92 | 93 | 99 |
          100 | 101 |
          102 |

          The HTML shown below is the raw HTML table element, before it has been enhanced by 103 | DataTables:

          104 |
          105 | 106 |
          107 |
          108 |

          This example uses a little bit of additional CSS beyond what is loaded from the library 109 | files (below), in order to correctly display the table. The additional CSS used is shown 110 | below:

          111 |
          112 | 113 |

          The following CSS library files are loaded for use in this example to provide the styling of the 114 | table:

          115 | 116 | 121 |
          122 | 123 |
          124 |

          This table loads data by Ajax. The latest data that has been loaded is shown below. This data 125 | will update automatically as any additional data is loaded.

          126 |
          127 | 128 |
          129 |

          The script used to perform the server-side processing for this table is shown below. Please note 130 | that this is just an example script using PHP. Server-side processing scripts can be written in any 131 | language, using the protocol described in the 132 | DataTables documentation.

          133 |
          134 |
          135 |
          136 |
          137 | 138 |
          139 | 172 |
          173 | 174 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/examples/data/ssp.php: -------------------------------------------------------------------------------- 1 | 'id', 'dt' => 0 ), 33 | array( 'db' => 'firstname', 'dt' => 1 ), 34 | array( 'db' => 'surname', 'dt' => 2 ), 35 | array( 'db' => 'zip', 'dt' => 3 ), 36 | array( 'db' => 'country', 'dt' => 4 ) 37 | ); 38 | 39 | // SQL server connection information 40 | $sql_details = array( 41 | 'user' => '', 42 | 'pass' => '', 43 | 'db' => '', 44 | 'host' => '' 45 | ); 46 | 47 | 48 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 49 | * If you just want to use the basic configuration for DataTables with PHP 50 | * server-side, there is no need to edit below this line. 51 | */ 52 | 53 | require( '../../../../examples/server_side/scripts/ssp.class.php' ); 54 | 55 | echo json_encode( 56 | SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns ) 57 | ); 58 | 59 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Scroller examples - Scroller examples 14 | 15 | 16 | 17 |
          18 |
          19 |

          Scroller example Scroller examples

          20 | 21 |
          22 |

          Scroller is a virtual rendering plug-in for DataTables which allows large datasets to be drawn on 23 | screen every quickly. What the virtual rendering means is that only the visible portion of the table 24 | (and a bit to either side to make the scrolling smooth) is drawn, while the scrolling container gives 25 | the visual impression that the whole table is visible. This is done by making use of the pagination 26 | abilities of DataTables and moving the table around in the scrolling container DataTables adds to the 27 | page. The scrolling container is forced to the height it would be for the full table display using an 28 | extra element.

          29 | 30 |

          Scroller is initialised by simply including the letter S in the domDT for the table you want to have this 33 | feature enabled on. Note that the S must come after the t parameter in 34 | domDT.

          36 | 37 |

          Key features include:

          38 | 39 |
            40 |
          • Speed! The aim of Scroller for DataTables is to make rendering large data sets fast
          • 41 |
          • Full compatibility with DataTables' deferred rendering for maximum speed
          • 42 |
          • Integration with state saving in DataTables (scrolling position is saved)
          • 43 |
          • Easy to use
          • 44 |
          45 |
          46 |
          47 |
          48 | 49 |
          50 | 81 |
          82 | 83 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/examples/large_js_source.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Scroller example - Client-side data source (50,000 rows) 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 41 | 42 | 43 | 44 |
          45 |
          46 |

          Scroller example Client-side data source (50,000 rows)

          47 | 48 |
          49 |

          This example is completely artificial in that the data generated is created on the client-side by 50 | just looping around a Javascript array and then passing that to DataTables. However, it does show quite 51 | nicely that DataTables and Scroller can cope with large amounts of data on the client-side quite 52 | nicely. Typically data such as this would be Ajax sourced and server-side processing should be 53 | considered.

          54 | 55 |

          Please be aware that the performance of this page will depend on your browser as the array of data 56 | is generated - for example IE6 will crawl!

          57 |
          58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |
          IDFirst nameLast nameZIP / Post codeCountry
          70 | 71 |
            72 |
          • Javascript
          • 73 |
          • HTML
          • 74 |
          • CSS
          • 75 |
          • Ajax
          • 76 |
          • Server-side script
          • 77 |
          78 | 79 |
          80 |
          81 |

          The Javascript shown below is used to initialise the table shown in this 82 | example:

          $(document).ready(function() { 83 | var data = []; 84 | for ( var i=0 ; i<50000 ; i++ ) { 85 | data.push( [ i, i, i, i, i ] ); 86 | } 87 | 88 | var oTable = $('#example').dataTable( { 89 | data: data, 90 | deferRender: true, 91 | dom: "frtiS", 92 | scrollY: 200, 93 | scrollCollapse: true 94 | } ); 95 | } ); 96 | 97 |

          In addition to the above code, the following Javascript library files are loaded for use in this 98 | example:

          99 | 100 | 106 |
          107 | 108 |
          109 |

          The HTML shown below is the raw HTML table element, before it has been enhanced by 110 | DataTables:

          111 |
          112 | 113 |
          114 |
          115 |

          This example uses a little bit of additional CSS beyond what is loaded from the library 116 | files (below), in order to correctly display the table. The additional CSS used is shown 117 | below:

          118 |
          119 | 120 |

          The following CSS library files are loaded for use in this example to provide the styling of the 121 | table:

          122 | 123 | 128 |
          129 | 130 |
          131 |

          This table loads data by Ajax. The latest data that has been loaded is shown below. This data 132 | will update automatically as any additional data is loaded.

          133 |
          134 | 135 |
          136 |

          The script used to perform the server-side processing for this table is shown below. Please note 137 | that this is just an example script using PHP. Server-side processing scripts can be written in any 138 | language, using the protocol described in the 139 | DataTables documentation.

          140 |
          141 |
          142 |
          143 |
          144 | 145 |
          146 | 180 |
          181 | 182 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/examples/simple.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Scroller example - Basic initialisation 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 36 | 37 | 38 | 39 |
          40 |
          41 |

          Scroller example Basic initialisation

          42 | 43 |
          44 |

          Scroller is a plug-in for DataTables which enhances DataTables' built-in scrolling features to allow 45 | large amounts of data to be rendered on page very quickly. This is done by Scroller through the use of 46 | a virtual rendering technique that will render only the part of the table that is actually required for 47 | the current view.

          48 | 49 |

          Note that Scroller assumes that all rows are of the same height (in order to preform the required 50 | calculations. You can use td { white-space: nowrap; } in your CSS to ensure that text in 51 | rows does not wrap.

          52 | 53 |

          This example shows how Scroller for DataTables can be initialised by simply including the character 54 | S in sDom (note that the S must come after the t in sDom). 55 | Deferred rendering an and Ajax data source are also used in this example.

          56 |
          57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 |
          IDFirst nameLast nameZIP / Post codeCountry
          69 | 70 |
            71 |
          • Javascript
          • 72 |
          • HTML
          • 73 |
          • CSS
          • 74 |
          • Ajax
          • 75 |
          • Server-side script
          • 76 |
          77 | 78 |
          79 |
          80 |

          The Javascript shown below is used to initialise the table shown in this 81 | example:

          $(document).ready(function() { 82 | $('#example').DataTable( { 83 | ajax: "data/2500.txt", 84 | deferRender: true, 85 | dom: "frtiS", 86 | scrollY: 200, 87 | scrollCollapse: true 88 | } ); 89 | } ); 90 | 91 |

          In addition to the above code, the following Javascript library files are loaded for use in this 92 | example:

          93 | 94 | 100 |
          101 | 102 |
          103 |

          The HTML shown below is the raw HTML table element, before it has been enhanced by 104 | DataTables:

          105 |
          106 | 107 |
          108 |
          109 |

          This example uses a little bit of additional CSS beyond what is loaded from the library 110 | files (below), in order to correctly display the table. The additional CSS used is shown 111 | below:

          112 |
          113 | 114 |

          The following CSS library files are loaded for use in this example to provide the styling of the 115 | table:

          116 | 117 | 122 |
          123 | 124 |
          125 |

          This table loads data by Ajax. The latest data that has been loaded is shown below. This data 126 | will update automatically as any additional data is loaded.

          127 |
          128 | 129 |
          130 |

          The script used to perform the server-side processing for this table is shown below. Please note 131 | that this is just an example script using PHP. Server-side processing scripts can be written in any 132 | language, using the protocol described in the 133 | DataTables documentation.

          134 |
          135 |
          136 |
          137 |
          138 | 139 |
          140 | 173 |
          174 | 175 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/examples/state_saving.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Scroller example - State saving 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 37 | 38 | 39 | 40 |
          41 |
          42 |

          Scroller example State saving

          43 | 44 |
          45 |

          Scroller will automatically integrate with DataTables in order to save the scrolling position of the 46 | table, if state saving is enabled in the DataTable (stateSaveDT). This example shows that in 49 | practice - to demonstrate, scroll the table and then reload the page.

          50 |
          51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
          IDFirst nameLast nameZIP / Post codeCountry
          63 | 64 |
            65 |
          • Javascript
          • 66 |
          • HTML
          • 67 |
          • CSS
          • 68 |
          • Ajax
          • 69 |
          • Server-side script
          • 70 |
          71 | 72 |
          73 |
          74 |

          The Javascript shown below is used to initialise the table shown in this 75 | example:

          $(document).ready(function() { 76 | $('#example').DataTable( { 77 | ajax: "data/2500.txt", 78 | deferRender: true, 79 | dom: "frtiS", 80 | scrollY: 200, 81 | scrollCollapse: true, 82 | stateSave: true 83 | } ); 84 | } ); 85 | 86 |

          In addition to the above code, the following Javascript library files are loaded for use in this 87 | example:

          88 | 89 | 95 |
          96 | 97 |
          98 |

          The HTML shown below is the raw HTML table element, before it has been enhanced by 99 | DataTables:

          100 |
          101 | 102 |
          103 |
          104 |

          This example uses a little bit of additional CSS beyond what is loaded from the library 105 | files (below), in order to correctly display the table. The additional CSS used is shown 106 | below:

          107 |
          108 | 109 |

          The following CSS library files are loaded for use in this example to provide the styling of the 110 | table:

          111 | 112 | 117 |
          118 | 119 |
          120 |

          This table loads data by Ajax. The latest data that has been loaded is shown below. This data 121 | will update automatically as any additional data is loaded.

          122 |
          123 | 124 |
          125 |

          The script used to perform the server-side processing for this table is shown below. Please note 126 | that this is just an example script using PHP. Server-side processing scripts can be written in any 127 | language, using the protocol described in the 128 | DataTables documentation.

          129 |
          130 |
          131 |
          132 |
          133 | 134 |
          135 | 168 |
          169 | 170 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/Scroller/images/loading-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/Scroller/images/loading-background.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/Readme.md: -------------------------------------------------------------------------------- 1 | # TableTools 2 | 3 | TableTools is a plug-in for the DataTables HTML table enhancer, which adds a highly customisable button toolbar to a DataTable. Key features include: 4 | 5 | * Copy to clipboard 6 | * Save table data as CSV, XLS or PDF files 7 | * Print view for clean printing 8 | * Row selection options 9 | * Easy use predefined buttons 10 | * Simple customisation of buttons 11 | * Well defined API for advanced control 12 | 13 | 14 | # Installation 15 | 16 | To use TableTools, first download DataTables ( http://datatables.net/download ) and place the unzipped TableTools package into a `extensions` directory in the DataTables package (in DataTables 1.9- use the `extras` directory). This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. 17 | 18 | 19 | # Basic usage 20 | 21 | TableTools is initialised using the `T` option that it adds to DataTables' `dom` option. For example: 22 | 23 | ```js 24 | $(document).ready( function () { 25 | $('#example').DataTable( { 26 | dom: 'T<"clear">lfrtip' 27 | } ); 28 | } ); 29 | ``` 30 | 31 | 32 | # Documentation / support 33 | 34 | * Documentation: http://datatables.net/extensions/tabletools/ 35 | * DataTables support forums: http://datatables.net/forums 36 | 37 | 38 | # GitHub 39 | 40 | If you fancy getting involved with the development of TableTools and help make it better, please refer to its GitHub repo: https://github.com/DataTables/TableTools 41 | 42 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/css/dataTables.tableTools.min.css: -------------------------------------------------------------------------------- 1 | div.DTTT_container{position:relative;float:right;margin-bottom:1em}@media screen and (max-width: 640px){div.DTTT_container{float:none !important;text-align:center}div.DTTT_container:after{visibility:hidden;display:block;content:"";clear:both;height:0}}button.DTTT_button,div.DTTT_button,a.DTTT_button{position:relative;display:inline-block;margin-right:3px;padding:5px 8px;border:1px solid #999;cursor:pointer;*cursor:hand;font-size:0.88em;color:black !important;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;-webkit-box-shadow:1px 1px 3px #ccc;-moz-box-shadow:1px 1px 3px #ccc;-ms-box-shadow:1px 1px 3px #ccc;-o-box-shadow:1px 1px 3px #ccc;box-shadow:1px 1px 3px #ccc;background:#ffffff;background:-webkit-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-moz-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-ms-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-o-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 )}button.DTTT_button{height:30px;padding:3px 8px}.DTTT_button embed{outline:none}button.DTTT_button:hover:not(.DTTT_disabled),div.DTTT_button:hover:not(.DTTT_disabled),a.DTTT_button:hover:not(.DTTT_disabled){border:1px solid #666;text-decoration:none !important;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999;background:#f3f3f3;background:-webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);background:-moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);background:-ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);background:-o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);background:linear-gradient(top, #f3f3f3 0%, #e2e2e2 89%, #f4f4f4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 )}button.DTTT_button:focus,div.DTTT_button:focus,a.DTTT_button:focus{border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;outline:none;background-color:#a3d0ef 100%;background-image:-webkit-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-moz-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-ms-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-o-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#a3d0ef', EndColorStr='#a3d0ef')}button.DTTT_button:active:not(.DTTT_disabled),div.DTTT_button:active:not(.DTTT_disabled),a.DTTT_button:active:not(.DTTT_disabled){-webkit-box-shadow:inset 1px 1px 3px #999999;-moz-box-shadow:inset 1px 1px 3px #999999;box-shadow:inset 1px 1px 3px #999999}button.DTTT_disabled,div.DTTT_disabled,a.DTTT_disabled{color:#999 !important;border:1px solid #d0d0d0;cursor:default;background:#ffffff;background:-webkit-linear-gradient(top, #fff 0%, #f9f9f9 89%, #fafafa 100%);background:-moz-linear-gradient(top, #fff 0%, #f9f9f9 89%, #fafafa 100%);background:-ms-linear-gradient(top, #fff 0%, #f9f9f9 89%, #fafafa 100%);background:-o-linear-gradient(top, #fff 0%, #f9f9f9 89%, #fafafa 100%);background:linear-gradient(top, #fff 0%, #f9f9f9 89%, #fafafa 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#fafafa',GradientType=0 )}button.DTTT_button_collection span{padding-right:17px;background:url(../images/collection.png) no-repeat center right}button.DTTT_button_collection:hover span{padding-right:17px;background:#f0f0f0 url(../images/collection_hover.png) no-repeat center right}table.DTTT_selectable tbody tr{cursor:pointer;*cursor:hand}table.dataTable tr.DTTT_selected.odd{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.odd td.sorting_1{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.odd td.sorting_2{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.odd td.sorting_3{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.even{background-color:#B0BED9}table.dataTable tr.DTTT_selected.even td.sorting_1{background-color:#B0BED9}table.dataTable tr.DTTT_selected.even td.sorting_2{background-color:#B0BED9}table.dataTable tr.DTTT_selected.even td.sorting_3{background-color:#B0BED9}div.DTTT_collection{width:150px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:#f3f3f3;background-color:rgba(255,255,255,0.3);overflow:hidden;z-index:2002;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-moz-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-ms-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-o-box-shadow:3px 3px 5px rgba(0,0,0,0.3);box-shadow:3px 3px 5px rgba(0,0,0,0.3)}div.DTTT_collection_background{background:black;z-index:2001}div.DTTT_collection button.DTTT_button,div.DTTT_collection div.DTTT_button,div.DTTT_collection a.DTTT_button{position:relative;left:0;right:0;display:block;float:none;margin-bottom:4px;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999}.DTTT_print_info{position:fixed;top:50%;left:50%;width:400px;height:150px;margin-left:-200px;margin-top:-75px;text-align:center;color:#333;padding:10px 30px;background:#ffffff;background:-webkit-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-moz-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-ms-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-o-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 );opacity:0.95;border:1px solid black;border:1px solid rgba(0,0,0,0.5);-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.5);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.5);-ms-box-shadow:0 3px 7px rgba(0,0,0,0.5);-o-box-shadow:0 3px 7px rgba(0,0,0,0.5);box-shadow:0 3px 7px rgba(0,0,0,0.5)}.DTTT_print_info h6{font-weight:normal;font-size:28px;line-height:28px;margin:1em}.DTTT_print_info p{font-size:14px;line-height:20px} 2 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | TableTools examples - TableTools examples 14 | 15 | 16 | 17 |
          18 |
          19 |

          TableTools example TableTools examples

          20 | 21 |
          22 |

          TableTools is a plug-in for the DataTables HTML table enhancer, which adds a highly customisable button toolbar to a DataTable. Key features include:

          23 | 24 |
            25 |
          • Copy to clipboard
          • 26 |
          • Save table data as CSV, XLS or PDF files
          • 27 |
          • Print view for clean printing
          • 28 |
          • Row selection options
          • 29 |
          • Easy use predefined buttons
          • 30 |
          • Simple customisation of buttons
          • 31 |
          • Well defined API for advanced control
          • 32 |
          33 |
          34 |
          35 |
          36 | 37 |
          38 | 78 |
          79 | 80 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/collection.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/collection_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/collection_hover.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/copy.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/copy_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/copy_hover.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/csv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/csv.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/csv_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/csv_hover.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/pdf.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/pdf_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/pdf_hover.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/print.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/print_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/print_hover.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/psd/collection.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/psd/collection.psd -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/psd/copy document.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/psd/copy document.psd -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/psd/file_types.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/psd/file_types.psd -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/psd/printer.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/psd/printer.psd -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/xls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/xls.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/images/xls_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/images/xls_hover.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/swf/copy_csv_xls.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/swf/copy_csv_xls.swf -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/extensions/TableTools/swf/copy_csv_xls_pdf.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/extensions/TableTools/swf/copy_csv_xls_pdf.swf -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/images/sort_asc.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/images/sort_both.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/images/sort_desc.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/datatables/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/datatables/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/jquery-highlighttextarea/.gitignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | node_modules -------------------------------------------------------------------------------- /src/main/resources/public/vender/jquery-highlighttextarea/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | grunt.initConfig({ 3 | pkg: grunt.file.readJSON('package.json'), 4 | 5 | banner: 6 | '/*!\n'+ 7 | ' * jQuery highlightTextarea <%= pkg.version %>\n'+ 8 | ' * Copyright 2014-<%= grunt.template.today("yyyy") %> Damien "Mistic" Sorel (http://www.strangeplanet.fr)\n'+ 9 | ' * Licensed under MIT (http://opensource.org/licenses/MIT)\n'+ 10 | ' */', 11 | 12 | // compress js 13 | uglify: { 14 | options: { 15 | banner: '<%= banner %>\n' 16 | }, 17 | dist: { 18 | files: { 19 | 'jquery.highlighttextarea.min.js': [ 20 | 'jquery.highlighttextarea.js' 21 | ] 22 | } 23 | } 24 | }, 25 | 26 | // compress css 27 | cssmin: { 28 | options: { 29 | banner: '<%= banner %>', 30 | keepSpecialComments: 0 31 | }, 32 | dist: { 33 | files: { 34 | 'jquery.highlighttextarea.min.css': [ 35 | 'jquery.highlighttextarea.css' 36 | ] 37 | } 38 | } 39 | }, 40 | 41 | // jshint tests 42 | jshint: { 43 | lib: { 44 | files: { 45 | src: [ 46 | 'jquery.highlighttextarea.js' 47 | ] 48 | } 49 | } 50 | } 51 | }); 52 | 53 | grunt.loadNpmTasks('grunt-contrib-uglify'); 54 | grunt.loadNpmTasks('grunt-contrib-cssmin'); 55 | grunt.loadNpmTasks('grunt-contrib-jshint'); 56 | 57 | grunt.registerTask('default', [ 58 | 'uglify', 59 | 'cssmin' 60 | ]); 61 | 62 | grunt.registerTask('test', [ 63 | 'jshint' 64 | ]); 65 | }; -------------------------------------------------------------------------------- /src/main/resources/public/vender/jquery-highlighttextarea/README.md: -------------------------------------------------------------------------------- 1 | # jQuery highlightTextarea 2 | 3 | [![Bower version](https://badge.fury.io/bo/jquery-highlighttextarea.svg)](http://badge.fury.io/bo/jquery-highlighttextarea) 4 | 5 | ## Overview 6 | highlightTextarea is a jQuery plugin which allows you to highlight words and sentences inside of <textarea> and <input> elements. Words are defined in a jQuery array and you can customize highlight color and case sensitivity. The highlighting updates itself when typing in the <textarea> and follows scroll and resizing (with jQuery-UI). 7 | 8 | ## Documentation 9 | http://garysieling.github.io/jquery-highlighttextarea/ 10 | 11 | ## Development status 12 | 3.1.3: Support text ranges with HTML entities 13 | 14 | 3.1.2: Added tests for jQuery versions & verify on jQuery 1.5+ 15 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/jquery-highlighttextarea/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-highlighttextarea", 3 | "version": "3.1.3", 4 | "authors": [{ 5 | "name": "Damien \"Mistic\" Sorel", 6 | "homepage": "http://www.strangeplanet.fr" 7 | }, { 8 | "name": "Gary Sieling", 9 | "homepage": "https://www.garysieling.com/blog" 10 | }], 11 | "description": "Allows highlighting words and sentences in textareas", 12 | "license": "MIT", 13 | "homepage": "http://garysieling.github.io/jquery-highlighttextarea/", 14 | "main": [ 15 | "jquery.highlighttextarea.css", 16 | "jquery.highlighttextarea.js" 17 | ], 18 | "dependencies": { 19 | "jquery": ">1.9" 20 | }, 21 | "keywords": [ 22 | "textarea", 23 | "input", 24 | "highlight" 25 | ], 26 | "repository": { 27 | "type": "git", 28 | "url": "git://github.com/garysieling/jquery-highlighttextarea.git" 29 | }, 30 | "ignore": [ 31 | "**/.*", 32 | "node_modules", 33 | "bower_components", 34 | "test", 35 | "tests" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/jquery-highlighttextarea/jquery.highlighttextarea.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery highlightTextarea 3 | * Copyright 2014-2015 Damien "Mistic" Sorel (http://www.strangeplanet.fr) 4 | * Licensed under MIT (http://opensource.org/licenses/MIT) 5 | */ 6 | 7 | .highlightTextarea { 8 | position:relative; 9 | } 10 | .highlightTextarea .highlightTextarea-container { 11 | position:absolute; 12 | margin:0; 13 | overflow:hidden; 14 | } 15 | .highlightTextarea .highlightTextarea-highlighter { 16 | position:relative; 17 | border:none; 18 | padding:0; 19 | margin:0; 20 | color:transparent; 21 | cursor:text; 22 | overflow:hidden; 23 | white-space:pre-wrap; 24 | word-wrap:break-word; 25 | } 26 | .highlightTextarea.debug .highlightTextarea-highlighter { 27 | color:#f00; 28 | border:1px solid #f00; 29 | margin:-1px; 30 | } 31 | .highlightTextarea mark { 32 | line-height:inherit; 33 | color:transparent; 34 | margin:0; 35 | padding:0; 36 | } 37 | .highlightTextarea textarea, 38 | .highlightTextarea input { 39 | position:absolute; 40 | left:0; 41 | top:0; 42 | resize:none; 43 | white-space:pre-wrap; 44 | word-wrap:break-word; 45 | } 46 | .highlightTextarea .ui-wrapper { 47 | margin:0 !important; 48 | } 49 | .highlightTextarea .ui-resizable-se { 50 | bottom:15px; 51 | right:0px; 52 | } 53 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/jquery-highlighttextarea/jquery.highlighttextarea.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery highlightTextarea 3.1.3 3 | * Copyright 2014-2016 Damien "Mistic" Sorel (http://www.strangeplanet.fr) 4 | * Licensed under MIT (http://opensource.org/licenses/MIT) 5 | */ 6 | .highlightTextarea{position:relative}.highlightTextarea .highlightTextarea-container{position:absolute;margin:0;overflow:hidden}.highlightTextarea .highlightTextarea-highlighter{position:relative;border:none;padding:0;margin:0;color:transparent;cursor:text;overflow:hidden;white-space:pre-wrap;word-wrap:break-word}.highlightTextarea.debug .highlightTextarea-highlighter{color:red;border:1px solid red;margin:-1px}.highlightTextarea mark{line-height:inherit;color:transparent;margin:0;padding:0}.highlightTextarea input,.highlightTextarea textarea{position:absolute;left:0;top:0;resize:none;white-space:pre-wrap;word-wrap:break-word}.highlightTextarea .ui-wrapper{margin:0!important}.highlightTextarea .ui-resizable-se{bottom:15px;right:0} -------------------------------------------------------------------------------- /src/main/resources/public/vender/jquery-highlighttextarea/jquery.highlighttextarea.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery highlightTextarea 3.1.3 3 | * Copyright 2014-2016 Damien "Mistic" Sorel (http://www.strangeplanet.fr) 4 | * Licensed under MIT (http://opensource.org/licenses/MIT) 5 | */ 6 | !function(a){"use strict";var b=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},c=function(b,e){this.settings=a.extend({},c.DEFAULTS),this.scrollbarWidth=d.getScrollbarWidth(),this.isInput="input"==b[0].tagName.toLowerCase(),this.active=!1,this.matches=[],this.$el=b,this.$el.wrap('
          '),this.$main=this.$el.parent(),this.$main.prepend('
          '),this.$container=this.$main.children().first(),this.$highlighter=this.$container.children(),this.setOptions(e),this.settings.id&&(this.$main[0].id=this.settings.id),this.settings.resizable&&this.applyResizable(),this.updateCss(),this.bindEvents(),this.highlight()};c.DEFAULTS={words:{},ranges:{},color:"#ffff00",caseSensitive:!0,wordsOnly:!1,resizable:!1,resizableOptions:{},id:"",debug:!1},c.prototype.highlight=function(){var b=this.$el.val(),c=this;c.spacer="",this.settings.wordsOnly&&(c.spacer="\\b");var e=[];if(a.each(this.settings.words,function(d,f){var g=new RegExp(c.spacer+"("+f.join("|")+")"+c.spacer,c.regParam),h=b.match(g);if(h){var i=[];a.each(h,function(a,c){e.push(c),-1===i.indexOf(c)&&(b=b.replace(new RegExp(c,"g"),'$&',"g"),i.push(c))})}}),a.each(this.settings.ranges,function(a,c){if(c.start");var e='",b=d.strInsert(b,c.start,e)}}),e.length!==this.matches.length){this.matches=e;var f=a.Event("matchesChanged");f.matches=this.matches,this.$el.trigger(f)}this.$highlighter.html(b),this.updateSizePosition()},c.prototype.setWords=function(a){this.setOptions({words:a,ranges:{}})},c.prototype.setRanges=function(a){this.setOptions({words:{},ranges:a})},c.prototype.enable=function(){this.bindEvents(),this.highlight()},c.prototype.disable=function(){this.unbindEvents(),this.$highlighter.empty()},c.prototype.destroy=function(){this.disable(),d.cloneCss(this.$container,this.$el,["background-image","background-color","background-position","background-repeat","background-origin","background-clip","background-size","background-attachment"]),this.$main.replaceWith(this.$el),this.$el.removeData("highlighter")},c.prototype.setOptions=function(b){"object"!=typeof b||a.isEmptyObject(b)||(a.extend(this.settings,b),this.regParam=this.settings.caseSensitive?"gm":"gim",a.isEmptyObject(this.settings.words)?a.isEmptyObject(this.settings.ranges)||(this.settings.words={},this.settings.ranges=d.cleanRanges(this.settings.ranges,this.settings.color)):(this.settings.words=d.cleanWords(this.settings.words,this.settings.color),this.settings.ranges={}),this.settings.debug?this.$main.addClass("debug"):this.$main.removeClass("debug"),this.active&&this.highlight())},c.prototype.bindEvents=function(){if(!this.active){this.active=!0;var b=this;this.$highlighter.bind({"this.highlighter":function(){b.$el.focus()}}),this.$el.bind({"input.highlightTextarea":d.throttle(function(){this.highlight()},100,this),"resize.highlightTextarea":d.throttle(function(){this.updateSizePosition(!0)},50,this),"scroll.highlightTextarea select.highlightTextarea":d.throttle(function(){this.updateSizePosition()},50,this)}),this.isInput&&this.$el.bind({"keydown.highlightTextarea keypress.highlightTextarea keyup.highlightTextarea":function(){setTimeout(a.proxy(b.updateSizePosition,b),1)},"blur.highlightTextarea":function(){this.value=this.value,this.scrollLeft=0,b.updateSizePosition.call(b)}})}},c.prototype.unbindEvents=function(){this.active&&(this.active=!1,this.$highlighter.off(".highlightTextarea"),this.$el.off(".highlightTextarea"))},c.prototype.updateCss=function(){d.cloneCss(this.$el,this.$main,["float","vertical-align"]),this.$main.css({width:this.$el.outerWidth(!0),height:this.$el.outerHeight(!0)}),d.cloneCss(this.$el,this.$container,["background-image","background-color","background-position","background-repeat","background-origin","background-clip","background-size","background-attachment","padding-top","padding-right","padding-bottom","padding-left"]),this.$container.css({top:d.toPx(this.$el.css("margin-top"))+d.toPx(this.$el.css("border-top-width")),left:d.toPx(this.$el.css("margin-left"))+d.toPx(this.$el.css("border-left-width")),width:this.$el.width(),height:this.$el.height()}),d.cloneCss(this.$el,this.$highlighter,["font-size","font-family","font-style","font-weight","font-variant","font-stretch","vertical-align","word-spacing","text-align","letter-spacing","text-rendering"]),this.$el.css({background:"none"})},c.prototype.applyResizable=function(){if(jQuery.ui){var b={handles:"se",resize:d.throttle(function(){this.updateSizePosition(!0)},50,this)},c=a.extend({},b,this.settings.resizableOptions);this.$el.resizable(c)}},c.prototype.updateSizePosition=function(a){a&&(this.$main.css({width:this.$el.outerWidth(!0),height:this.$el.outerHeight(!0)}),this.$container.css({width:this.$el.width(),height:this.$el.height()}));var b,c=0;this.isInput?b=99999:(("scroll"==this.$el.css("overflow")||"scroll"==this.$el.css("overflow-y")||"hidden"!=this.$el.css("overflow")&&"hidden"!=this.$el.css("overflow-y")&&this.$el[0].clientHeight
           
        ').appendTo("body"),c=b.children(),d=c.innerWidth()-c.height(100).innerWidth();return b.remove(),d},d.cloneCss=function(a,b,c){for(var d=0,e=c.length;e>d;d++)b.css(c[d],a.css(c[d]))},d.toPx=function(b){if(b!=b.replace("em","")){var c=a('
         
        ').appendTo("body");return b=Math.round(parseFloat(b.replace("em",""))*c.height()),c.remove(),b}return b!=b.replace("px","")?parseInt(b.replace("px","")):parseInt(b)},d.htmlEntities=function(b){return b?a("
        ").text(b).html():""},d.strInsert=function(a,b,c){return a.slice(0,b)+c+a.slice(b)},d.throttle=function(a,b,c){var d={pid:null,last:0};return function(){function e(){return d.last=(new Date).getTime(),c?a.apply(c,Array.prototype.slice.call(g)):a.apply(h,Array.prototype.slice.call(g))}var f=(new Date).getTime()-d.last,g=arguments,h=this;return f>b?e():(clearTimeout(d.pid),void(d.pid=setTimeout(e,b-f)))}},d.cleanWords=function(b,c){var e={};a.isArray(b)||(b=[b]);for(var f=0,g=b.length;g>f;f++){var h=b[f];if(a.isPlainObject(h)){e[h.color]||(e[h.color]=[]),a.isArray(h.words)||(h.words=[h.words]);for(var i=0,j=h.words.length;j>i;i++)e[h.color].push(d.htmlEntities(h.words[i]))}else e[c]||(e[c]=[]),e[c].push(d.htmlEntities(h))}return e},d.cleanRanges=function(c,d){var e=[];(a.isPlainObject(c)||b(c[0]))&&(c=[c]);for(var f=0,g=c.length;g>f;f++){var h=c[f];if(a.isArray(h))e.push({color:d,start:h[0],end:h[1]});else if(h.ranges){(a.isPlainObject(h.ranges)||b(h.ranges[0]))&&(h.ranges=[h.ranges]);for(var i=0,j=h.ranges.length;j>i;i++)a.isArray(h.ranges[i])?e.push({color:h.color,"class":h["class"],start:h.ranges[i][0],end:h.ranges[i][1]}):(h.ranges[i].length&&(h.ranges[i].end=h.ranges[i].start+h.ranges[i].length),e.push(h.ranges[i]))}else h.length&&(h.end=h.start+h.length),e.push(h)}e.sort(function(a,b){return a.start==b.start?a.end-b.end:a.start-b.start});var k=-1;return a.each(e,function(b,c){c.start>=c.end&&a.error("Invalid range end/start"),c.start'+ (titype ? config.title[0] : config.title) +'' 54 | : ''; 55 | }()); 56 | 57 | var button = (function(){ 58 | var btns = (config.btn || []).length, btndom; 59 | if(btns === 0 || !config.btn){ 60 | return ''; 61 | } 62 | btndom = ''+ config.btn[0] +'' 63 | if(btns === 2){ 64 | btndom = ''+ config.btn[1] +'' + btndom; 65 | } 66 | return '
        '+ btndom + '
        '; 67 | }()); 68 | 69 | if(!config.fixed){ 70 | config.top = config.hasOwnProperty('top') ? config.top : 100; 71 | config.style = config.style || ''; 72 | config.style += ' top:'+ ( doc.body.scrollTop + config.top) + 'px'; 73 | } 74 | 75 | if(config.type === 2){ 76 | config.content = '
        ' + (config.content||'') + '
        '; 77 | } 78 | 79 | layerbox.innerHTML = (config.shade ? '
        ' : '') 80 | +'
        ' 81 | +'
        ' 82 | +'
        ' 83 | + title 84 | +'
        '+ config.content +'
        ' 85 | + button 86 | +'
        ' 87 | +'
        ' 88 | +'
        '; 89 | 90 | if(!config.type || config.type === 2){ 91 | var dialogs = doc[claname](classs[0] + config.type), dialen = dialogs.length; 92 | if(dialen >= 1){ 93 | layer.close(dialogs[0].getAttribute('index')) 94 | } 95 | } 96 | 97 | document.body.appendChild(layerbox); 98 | var elem = that.elem = S('#'+that.id)[0]; 99 | setTimeout(function(){ 100 | try{ 101 | elem.className = elem.className + ' layermshow'; 102 | }catch(e){ 103 | return; 104 | } 105 | config.success && config.success(elem); 106 | }, 1); 107 | 108 | that.index = index++; 109 | that.action(config, elem); 110 | }; 111 | 112 | Layer.prototype.action = function(config, elem){ 113 | var that = this; 114 | 115 | //自动关闭 116 | if(config.time){ 117 | ready.timer[that.index] = setTimeout(function(){ 118 | layer.close(that.index); 119 | }, config.time*1000); 120 | } 121 | 122 | //关闭按钮 123 | if(config.title){ 124 | elem[claname]('layermend')[0].onclick = function(){ 125 | config.cancel && config.cancel(); 126 | layer.close(that.index); 127 | }; 128 | } 129 | 130 | //确认取消 131 | if(config.btn){ 132 | var btns = elem[claname]('layermbtn')[0].children, btnlen = btns.length; 133 | for(var ii = 0; ii < btnlen; ii++){ 134 | btns[ii].onclick = function(){ 135 | var type = this.getAttribute('type'); 136 | if(type == 0){ 137 | config.no && config.no(); 138 | layer.close(that.index); 139 | } else { 140 | config.yes ? config.yes(that.index) : layer.close(that.index); 141 | } 142 | }; 143 | } 144 | } 145 | 146 | //点遮罩关闭 147 | //在安卓三星中,型号Grand2(未测试其他,不过不支持多点触控的手机 这个问题应该普遍存在);初始化时设置config中type:1 并且style中width小于clientWidth 148 | //该情况下 安卓三星touch点击 会导致同页面其他layer无法显示 原因就是遮罩层的影响。 149 | //解决方式 或者验证Android处理ShadeClose:false (或者提示用户自己处理); 150 | if(config.shade && config.shadeClose){ 151 | var shade = elem[claname]('laymshade')[0]; 152 | shade.onclick = function(){ 153 | layer.close(that.index, config.end); 154 | }; 155 | shade.ontouchmove = function(){ 156 | layer.close(that.index, config.end); 157 | }; 158 | } 159 | 160 | config.end && (ready.end[that.index] = config.end); 161 | }; 162 | 163 | var layer = { 164 | v: '1.5', 165 | index: index, 166 | 167 | //核心方法 168 | open: function(options){ 169 | var o = new Layer(options || {}); 170 | return o.index; 171 | }, 172 | 173 | close: function(index){ 174 | var ibox = S('#'+classs[0]+index)[0]; 175 | if(!ibox) return; 176 | ibox.innerHTML = ''; 177 | doc.body.removeChild(ibox); 178 | clearTimeout(ready.timer[index]); 179 | delete ready.timer[index]; 180 | typeof ready.end[index] === 'function' && ready.end[index](); 181 | delete ready.end[index]; 182 | }, 183 | 184 | //关闭所有layer层 185 | closeAll: function(){ 186 | var boxs = doc[claname](classs[0]); 187 | for(var i = 0, len = boxs.length; i < len; i++){ 188 | layer.close((boxs[0].getAttribute('index')|0)); 189 | } 190 | } 191 | }; -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/mobile/need/layer.css: -------------------------------------------------------------------------------- 1 | /* layer弹层移动版样式 */ 2 | 3 | .layermbox{position:absolute; left:0; top:0; width:100%; z-index:19891014;} 4 | /*.layermbox *{margin:0; bottom:0;}*/ 5 | .layermanim{transition: all .18s; -webkit-transition: all .18s;} 6 | .laymshade, 7 | .layermmain{position:fixed; left:0; top:0; width:100%; height:100%;} 8 | .laymshade{background-color:rgba(0,0,0, .5); pointer-events:auto;} 9 | .layermmain{display:table; font-family: Helvetica, arial, sans-serif; pointer-events: none;} 10 | .layermmain .section{display:table-cell; vertical-align:middle; text-align:center;} 11 | .layermchild{position:relative; display:inline-block; text-align:left; background-color:#fff; font-size:14px; border-radius:6px; box-shadow:0 0 8px rgba(0, 0, 0, 0.1); opacity: 0; transform: scale(0); -webkit-transform: scale(0); pointer-events:auto;} 12 | .layermborder{border:1px solid #999;} 13 | .layermshow .layermchild{opacity: 1; transform:scale(1); -webkit-transform: scale(1);} 14 | .layermbox0 .layermchild{max-width:260px; min-width:150px;} 15 | .layermbox1 .layermchild{border:none; border-radius:0;} 16 | .layermbox2 .layermchild{width:auto; max-width:260px; min-width:40px; border:none; background-color:rgba(0,0,0,.6); color:#fff;} 17 | .layermchild h3{padding:0 45px 0 10px; height:50px; line-height:50px; border-bottom:1px solid #EBEBEB; font-size:16px; font-weight:400; border-radius:5px 5px 0 0; border-bottom:1px solid #EBEBEB;} 18 | .layermchild h3, 19 | .layermbtn span{ text-overflow:ellipsis; overflow:hidden; white-space:nowrap;} 20 | .layermcont{padding:20px 15px; line-height:22px; border-radius:5px;} 21 | .layermbox1 .layermcont{padding:0;} 22 | .layermbox2 .layermcont{text-align:center; padding:30px 30px 0; line-height: 0;} 23 | .layermbox2 .layermcont i{width:1.5rem; height:1.5rem; margin-left:8px; display:inline-block; background-color:#fff; border-radius:100%;} 24 | .layermbox2 .layermcont i{-webkit-animation: bouncedelay 1.4s infinite ease-in-out; animation: bouncedelay 1.4s infinite ease-in-out; -webkit-animation-fill-mode: both; animation-fill-mode: both;} 25 | @-webkit-keyframes bouncedelay{ 26 | 0%,80%,100%{-webkit-transform:scale(0)} 27 | 40%{-webkit-transform:scale(1)} 28 | } 29 | @keyframes bouncedelay{ 30 | 0%,80%,100%{transform:scale(0);-webkit-transform:scale(0)} 31 | 40%{transform:scale(1);-webkit-transform:scale(1)} 32 | } 33 | .layermbox2 .layermcont i:first-child{margin-left:0; -webkit-animation-delay: -.32s; animation-delay: -.32s;} 34 | .layermbox2 .layermcont i.laymloadtwo{-webkit-animation-delay: -.16s; animation-delay: -.16s;} 35 | .layermbox2 .layermcont>div{line-height:22px; padding-top:7px; margin-bottom:20px; font-size: 14px;} 36 | .layermbtn{position:relative; height:40px; line-height:40px; font-size:0; text-align:center; border-top:1px solid #EBEBEB;} 37 | .layermbtn span{position:relative; display:inline-block; width:50%; text-align:center; font-size:14px; cursor:pointer; border-radius: 0 5px 0 0;} 38 | .layermbtn span:first-child{height:39px; background-color:#fff; border-radius: 0 0 0 5px;} 39 | .layermbtn:before{content:'\20'; position:absolute; width:1px; height:39px; left:50%; top:0; background-color:#EBEBEB;} 40 | .layermend{position:absolute; right:7px; top:10px; width:30px; height:30px; border: 0; font-weight:400; background: transparent; cursor: pointer; -webkit-appearance: none; font-size:30px;} 41 | .layermend::before, .layermend::after{position:absolute; left:5px; top:13px; content:''; width:20px; height:2px; background-color:rgba(0,0,0,.3); transform:rotate(45deg); -webkit-transform:rotate(45deg); border-radius: 3px;} 42 | .layermend::after{transform:rotate(-45deg); -webkit-transform:rotate(-45deg);} 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/skin/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/layer/skin/default/icon-ext.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/skin/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/layer/skin/default/icon.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/skin/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/layer/skin/default/loading-0.gif -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/skin/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/layer/skin/default/loading-1.gif -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/skin/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/layer/skin/default/loading-2.gif -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/skin/layer.ext.css: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | @Name: layer拓展样式 4 | @Date: 2012.12.13 5 | @Author: 贤心 6 | @blog: sentsin.com 7 | 8 | */ 9 | 10 | .layui-layer-iconext{background:url(default/icon-ext.png) no-repeat;} 11 | html #layui_layer_skinlayerextcss{display:none; position: absolute; width:1989px;} 12 | 13 | /* prompt模式 */ 14 | .layui-layer-prompt .layui-layer-input{display:block; width:220px; height:30px; margin:0 auto; line-height:30px; padding: 0 5px; border: 1px solid #ccc; box-shadow: 1px 1px 5px rgba(0,0,0,.1) inset; color:#333;} 15 | .layui-layer-prompt textarea.layui-layer-input{width:300px; height:100px; line-height:20px;} 16 | 17 | /* tab模式 */ 18 | .layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4);} 19 | .layui-layer-tab .layui-layer-title{padding-left:0; border-bottom:1px solid #ccc; background-color:#eee; overflow: visible;} 20 | .layui-layer-tab .layui-layer-title span{position:relative; float:left; min-width:80px; max-width:260px; padding:0 20px; text-align:center; cursor:default; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;} 21 | .layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:36px; border-left:1px solid #ccc; border-right:1px solid #ccc; background-color:#fff; z-index:10;} 22 | .layui-layer-tab .layui-layer-title span:first-child{border-left:none;} 23 | .layui-layer-tabmain{line-height:24px; clear:both;} 24 | .layui-layer-tabmain .layui-layer-tabli{display:none;} 25 | .layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block;} 26 | .xubox_tabclose{position:absolute; right:10px; top:5px; cursor:pointer;} 27 | 28 | /* photo模式 */ 29 | .layui-layer-photos{-webkit-animation-duration:1s; animation-duration:1s; background: url(default/xubox_loading1.gif) center center no-repeat #000;} 30 | .layui-layer-photos .layui-layer-content{overflow:hidden; text-align: center;} 31 | .layui-layer-photos .layui-layer-phimg img{position: relative; width:100%; display: inline-block; *display:inline; *zoom:1; vertical-align:top;} 32 | .layui-layer-imguide,.layui-layer-imgbar{display:none;} 33 | .layui-layer-imgprev, .layui-layer-imgnext{position:absolute; top:50%; width:27px; _width:44px; height:44px; margin-top:-22px; outline:none;blr:expression(this.onFocus=this.blur());} 34 | .layui-layer-imgprev{left:10px; background-position:-5px -5px; _background-position:-70px -5px;} 35 | .layui-layer-imgprev:hover{background-position:-33px -5px; _background-position:-120px -5px;} 36 | .layui-layer-imgnext{right:10px; _right:8px; background-position:-5px -50px; _background-position:-70px -50px;} 37 | .layui-layer-imgnext:hover{background-position:-33px -50px; _background-position:-120px -50px;} 38 | .layui-layer-imgbar{position:absolute; left:0; bottom:0; width:100%; height:32px; line-height:32px; background-color:rgba(0,0,0,.8); background-color:#000\9; filter:Alpha(opacity=80); color:#fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;} 39 | .layui-layer-imgtit{/*position:absolute; left:20px;*/} 40 | .layui-layer-imgtit *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; font-size:12px;} 41 | .layui-layer-imgtit a{max-width:65%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; color:#fff;} 42 | .layui-layer-imgtit a:hover{color:#fff; text-decoration:underline;} 43 | .layui-layer-imgtit em{padding-left:10px; font-style: normal;} 44 | 45 | -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/skin/moon/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linzhouzhi/mix-query/e9d6a383a330900afe0c6bc1b79a39364bfa6b71/src/main/resources/public/vender/layer/skin/moon/default.png -------------------------------------------------------------------------------- /src/main/resources/public/vender/layer/skin/moon/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | * layer皮肤 3 | * 作者:一☆隐☆一 4 | * QQ:9073194 5 | * 请保留这里的信息 谢谢!虽然你不保留我也不能把你怎么样! 6 | */ 7 | 8 | html #layui_layer_skinmoonstylecss { 9 | display: none; 10 | position: absolute; 11 | width: 1989px; 12 | } 13 | body .layer-ext-moon[type="dialog"] { 14 | min-width: 320px; 15 | } 16 | body .layer-ext-moon-msg[type="dialog"]{min-width:200px;} 17 | body .layer-ext-moon .layui-layer-title { 18 | background: #f6f6f6; 19 | color: #212a31; 20 | font-size: 16px; 21 | font-weight: bold; 22 | height: 46px; 23 | line-height: 46px; 24 | } 25 | 26 | 27 | 28 | body .layer-ext-moon .layui-layer-content .layui-layer-ico { 29 | height: 32px; 30 | width: 32px; 31 | top:18.5px; 32 | } 33 | body .layer-ext-moon .layui-layer-ico0 { 34 | background: url(default.png) no-repeat -96px 0; 35 | ; 36 | } 37 | body .layer-ext-moon .layui-layer-ico1 { 38 | background: url(default.png) no-repeat -224px 0; 39 | ; 40 | } 41 | body .layer-ext-moon .layui-layer-ico2 { 42 | background: url(default.png) no-repeat -192px 0; 43 | } 44 | body .layer-ext-moon .layui-layer-ico3 { 45 | background: url(default.png) no-repeat -160px 0; 46 | } 47 | body .layer-ext-moon .layui-layer-ico4 { 48 | background: url(default.png) no-repeat -320px 0; 49 | } 50 | body .layer-ext-moon .layui-layer-ico5 { 51 | background: url(default.png) no-repeat -288px 0; 52 | } 53 | body .layer-ext-moon .layui-layer-ico6 { 54 | background: url(default.png) -256px 0; 55 | } 56 | body .layer-ext-moon .layui-layer-ico7 { 57 | background: url(default.png) no-repeat -128px 0; 58 | } 59 | body .layer-ext-moon .layui-layer-setwin { 60 | top: 15px; 61 | right: 15px; 62 | } 63 | body .layer-ext-moon .layui-layer-setwin a { 64 | width: 16px; 65 | height: 16px; 66 | } 67 | body .layer-ext-moon .layui-layer-setwin .layui-layer-min cite:hover { 68 | background-color: #56abe4; 69 | } 70 | body .layer-ext-moon .layui-layer-setwin .layui-layer-max { 71 | background: url(default.png) no-repeat -80px 0; 72 | } 73 | body .layer-ext-moon .layui-layer-setwin .layui-layer-max:hover { 74 | background: url(default.png) no-repeat -64px 0; 75 | } 76 | body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin { 77 | background: url(default.png) no-repeat -32px 0; 78 | } 79 | body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin:hover { 80 | background: url(default.png) no-repeat -16px 0; 81 | } 82 | body .layer-ext-moon .layui-layer-setwin .layui-layer-close1,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2 { 83 | background: url(default.png) 0 0; 84 | } 85 | body .layer-ext-moon .layui-layer-setwin .layui-layer-close1:hover,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2:hover { 86 | background: url(default.png) -48px 0; 87 | } 88 | body .layer-ext-moon .layui-layer-padding{padding-top: 24px;} 89 | body .layer-ext-moon .layui-layer-btn { 90 | padding: 15px 0; 91 | background: #f0f4f7; 92 | border-top: 1px #c7c7c7 solid; 93 | } 94 | body .layer-ext-moon .layui-layer-btn a { 95 | font-size: 12px; 96 | font-weight: normal; 97 | margin: 0 3px; 98 | margin-right: 7px; 99 | margin-left: 7px; 100 | padding: 6px 20px; 101 | color: #fff; 102 | border: 1px solid #0064b6; 103 | background: #0071ce; 104 | border-radius: 3px; 105 | display: inline-block; 106 | height: 20px; 107 | line-height: 20px; 108 | text-align: center; 109 | vertical-align: middle; 110 | background-repeat: no-repeat; 111 | text-decoration: none; 112 | outline: none; 113 | -moz-box-sizing: content-box; 114 | -webkit-box-sizing: content-box; 115 | box-sizing: content-box; 116 | } 117 | body .layer-ext-moon .layui-layer-btn .layui-layer-btn0 { 118 | background: #0071ce; 119 | } 120 | body .layer-ext-moon .layui-layer-btn .layui-layer-btn1 { 121 | background: #fff; 122 | color: #404a58; 123 | border: 1px solid #c0c4cd; 124 | border-radius: 3px; 125 | } 126 | body .layer-ext-moon .layui-layer-btn .layui-layer-btn2 { 127 | background: #f60; 128 | color: #fff; 129 | border: 1px solid #f60; 130 | border-radius: 3px; 131 | } 132 | body .layer-ext-moon .layui-layer-btn .layui-layer-btn3 { 133 | background: #f00; 134 | color: #fff; 135 | border: 1px solid #f00; 136 | border-radius: 3px; 137 | } 138 | 139 | body .layer-ext-moon .layui-layer-title span.layui-layer-tabnow{ 140 | height:47px; 141 | } 142 | --------------------------------------------------------------------------------