PluginProbe ʕ •ᴥ•ʔ
SiteOrigin CSS / 1.0
SiteOrigin CSS v1.0
1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.10 1.5.11 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 trunk 1.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.2.0
so-css / lib / codemirror / addon / hint / sql-hint.min.js
so-css / lib / codemirror / addon / hint Last commit date
anyword-hint.js 11 years ago anyword-hint.min.js 11 years ago css-hint.js 11 years ago css-hint.min.js 11 years ago html-hint.js 11 years ago html-hint.min.js 11 years ago javascript-hint.js 11 years ago javascript-hint.min.js 11 years ago show-hint.css 11 years ago show-hint.js 11 years ago show-hint.min.js 11 years ago sql-hint.js 11 years ago sql-hint.min.js 11 years ago xml-hint.js 11 years ago xml-hint.min.js 11 years ago
sql-hint.min.js
38 lines
1
2 (function(mod){if(typeof exports=="object"&&typeof module=="object")
3 mod(require("../../lib/codemirror"),require("../../mode/sql/sql"));else if(typeof define=="function"&&define.amd)
4 define(["../../lib/codemirror","../../mode/sql/sql"],mod);else
5 mod(CodeMirror);})(function(CodeMirror){"use strict";var tables;var defaultTable;var keywords;var CONS={QUERY_DIV:";",ALIAS_KEYWORD:"AS"};var Pos=CodeMirror.Pos;function getKeywords(editor){var mode=editor.doc.modeOption;if(mode==="sql")mode="text/x-sql";return CodeMirror.resolveMode(mode).keywords;}
6 function getText(item){return typeof item=="string"?item:item.text;}
7 function getItem(list,item){if(!list.slice)return list[item];for(var i=list.length-1;i>=0;i--)if(getText(list[i])==item)
8 return list[i];}
9 function shallowClone(object){var result={};for(var key in object)if(object.hasOwnProperty(key))
10 result[key]=object[key];return result;}
11 function match(string,word){var len=string.length;var sub=getText(word).substr(0,len);return string.toUpperCase()===sub.toUpperCase();}
12 function addMatches(result,search,wordlist,formatter){for(var word in wordlist){if(!wordlist.hasOwnProperty(word))continue;if(wordlist.slice)word=wordlist[word];if(match(search,word))result.push(formatter(word));}}
13 function cleanName(name){if(name.charAt(0)=="."){name=name.substr(1);}
14 return name.replace(/`/g,"");}
15 function insertBackticks(name){var nameParts=getText(name).split(".");for(var i=0;i<nameParts.length;i++)
16 nameParts[i]="`"+nameParts[i]+"`";var escaped=nameParts.join(".");if(typeof name=="string")return escaped;name=shallowClone(name);name.text=escaped;return name;}
17 function nameCompletion(cur,token,result,editor){var useBacktick=false;var nameParts=[];var start=token.start;var cont=true;while(cont){cont=(token.string.charAt(0)==".");useBacktick=useBacktick||(token.string.charAt(0)=="`");start=token.start;nameParts.unshift(cleanName(token.string));token=editor.getTokenAt(Pos(cur.line,token.start));if(token.string=="."){cont=true;token=editor.getTokenAt(Pos(cur.line,token.start));}}
18 var string=nameParts.join(".");addMatches(result,string,tables,function(w){return useBacktick?insertBackticks(w):w;});addMatches(result,string,defaultTable,function(w){return useBacktick?insertBackticks(w):w;});string=nameParts.pop();var table=nameParts.join(".");if(!getItem(tables,table))
19 table=findTableByAlias(table,editor);var columns=getItem(tables,table);if(columns&&columns.columns)
20 columns=columns.columns;if(columns){addMatches(result,string,columns,function(w){if(typeof w=="string"){w=table+"."+w;}else{w=shallowClone(w);w.text=table+"."+w.text;}
21 return useBacktick?insertBackticks(w):w;});}
22 return start;}
23 function eachWord(lineText,f){if(!lineText)return;var excepted=/[,;]/g;var words=lineText.split(" ");for(var i=0;i<words.length;i++){f(words[i]?words[i].replace(excepted,''):'');}}
24 function convertCurToNumber(cur){return cur.line+cur.ch/Math.pow(10,6);}
25 function convertNumberToCur(num){return Pos(Math.floor(num),+num.toString().split('.').pop());}
26 function findTableByAlias(alias,editor){var doc=editor.doc;var fullQuery=doc.getValue();var aliasUpperCase=alias.toUpperCase();var previousWord="";var table="";var separator=[];var validRange={start:Pos(0,0),end:Pos(editor.lastLine(),editor.getLineHandle(editor.lastLine()).length)};var indexOfSeparator=fullQuery.indexOf(CONS.QUERY_DIV);while(indexOfSeparator!=-1){separator.push(doc.posFromIndex(indexOfSeparator));indexOfSeparator=fullQuery.indexOf(CONS.QUERY_DIV,indexOfSeparator+1);}
27 separator.unshift(Pos(0,0));separator.push(Pos(editor.lastLine(),editor.getLineHandle(editor.lastLine()).text.length));var prevItem=0;var current=convertCurToNumber(editor.getCursor());for(var i=0;i<separator.length;i++){var _v=convertCurToNumber(separator[i]);if(current>prevItem&&current<=_v){validRange={start:convertNumberToCur(prevItem),end:convertNumberToCur(_v)};break;}
28 prevItem=_v;}
29 var query=doc.getRange(validRange.start,validRange.end,false);for(var i=0;i<query.length;i++){var lineText=query[i];eachWord(lineText,function(word){var wordUpperCase=word.toUpperCase();if(wordUpperCase===aliasUpperCase&&getItem(tables,previousWord))
30 table=previousWord;if(wordUpperCase!==CONS.ALIAS_KEYWORD)
31 previousWord=word;});if(table)break;}
32 return table;}
33 CodeMirror.registerHelper("hint","sql",function(editor,options){tables=(options&&options.tables)||{};var defaultTableName=options&&options.defaultTable;defaultTable=defaultTableName&&getItem(tables,defaultTableName);keywords=keywords||getKeywords(editor);if(defaultTableName&&!defaultTable)
34 defaultTable=findTableByAlias(defaultTableName,editor);defaultTable=defaultTable||[];if(defaultTable.columns)
35 defaultTable=defaultTable.columns;var cur=editor.getCursor();var result=[];var token=editor.getTokenAt(cur),start,end,search;if(token.end>cur.ch){token.end=cur.ch;token.string=token.string.slice(0,cur.ch-token.start);}
36 if(token.string.match(/^[.`\w@]\w*$/)){search=token.string;start=token.start;end=token.end;}else{start=end=cur.ch;search="";}
37 if(search.charAt(0)=="."||search.charAt(0)=="`"){start=nameCompletion(cur,token,result,editor);}else{addMatches(result,search,tables,function(w){return w;});addMatches(result,search,defaultTable,function(w){return w;});addMatches(result,search,keywords,function(w){return w.toUpperCase();});}
38 return{list:result,from:Pos(cur.line,start),to:Pos(cur.line,end)};});});