|(<\/a>)|<[^>]+>|([^<]+)/g;
while ((match = re.exec(s))) {
if (match[1]) {
href = match[1];
} else if (match[2]) {
if (pos == column) { // last character of link
break;
}
href = '';
} else if (match[3]) {
pos += match[3].length;
if (pos > column) {
break;
}
}
}
openUrl(href ? href : 'https://www.google.com/search?q=' + encodeURIComponent(args.length > 4 ? args[4] : (match ? match[3] : '')));
vrana-jush-d490483/jush.css 0000664 0000000 0000000 00000006166 15237625165 0015561 0 ustar 00root root 0000000 0000000 .jush {
--text-color: #000;
--bg-color: #fff;
--border-color: #ccc;
--php-color: #003;
--string-color: green;
--string-plain-color: #009F00;
--keyword-color: navy;
--identifier-color: red;
--value-color: purple;
--number-color: #007F7F;
--attribute-color: teal;
--js-bg-color: #f0f0ff;
--css-bg-color: #ffffe0;
--php-bg-color: #fff0f0;
--php-sql-bg-color: #ffbbb0;
}
.jush { color: var(--text-color); white-space: pre; }
[contenteditable].jush { border: 1px solid var(--border-color); } /* the editable created by jush.textarea() */
.jush-htm_com, .jush-com, .jush-com_code, .jush-one, .jush-php_doc, .jush-php_com, .jush-php_one, .jush-js_one, .jush-js_doc { color: gray; }
.jush-php, .jush-php_new, .jush-php_fun { color: var(--php-color); background-color: var(--php-bg-color); }
.jush-php_quo, .jush-php_eot, .jush-js_bac { color: var(--string-color); }
.jush-php_apo, .jush-quo, .jush-quo_one, .jush-apo, .jush-sql_apo, .jush-sqlite_apo, .jush-sql_quo, .jush-sql_eot { color: var(--string-plain-color); }
.jush-php_quo_var, .jush-php_var, .jush-sql_var, .jush-js_bac .jush-js { font-style: italic; }
.jush-php_apo .jush-php_quo_var, .jush-php_apo .jush-php_var { font-style: normal; }
.jush-php_halt2 { background-color: var(--bg-color); color: var(--text-color); }
.jush-tag_css, .jush-att_css .jush-att_quo, .jush-att_css .jush-att_apo, .jush-att_css .jush-att_val { color: var(--text-color); background-color: var(--css-bg-color); }
.jush-tag_js, .jush-att_js .jush-att_quo, .jush-att_js .jush-att_apo, .jush-att_js .jush-att_val, .jush-css_js { color: var(--text-color); background-color: var(--js-bg-color); }
.jush-tag, .jush-xml_tag { color: var(--keyword-color); }
.jush-att, .jush-xml_att, .jush-att_js, .jush-att_css, .jush-att_http { color: var(--attribute-color); }
.jush-att_quo, .jush-att_apo, .jush-att_val { color: var(--value-color); }
.jush-ent { color: var(--value-color); }
.jush-js_key, .jush-js_key .jush-quo, .jush-js_key .jush-apo, .jush-json_key, .jush-json_key .jush-quo { color: var(--value-color); }
.jush-js_reg { color: var(--keyword-color); }
.jush-php_sql .jush-php_quo, .jush-php_sql .jush-php_apo,
.jush-php_sqlite .jush-php_quo, .jush-php_sqlite .jush-php_apo,
.jush-php_pgsql .jush-php_quo, .jush-php_pgsql .jush-php_apo,
.jush-php_mssql .jush-php_quo, .jush-php_mssql .jush-php_apo,
.jush-php_oracle .jush-php_quo, .jush-php_oracle .jush-php_apo { background-color: var(--php-sql-bg-color); }
.jush-bac, .jush-php_bac, .jush-bra, .jush-mssql_bra, .jush-sqlite_quo { color: var(--identifier-color); }
.jush-num, .jush-clr { color: var(--number-color); }
.jush a { color: var(--keyword-color); }
.jush a.jush-help { cursor: help; }
.jush-sql a, .jush-sql_code a, .jush-sqlite a, .jush-pgsql a, .jush-mssql a, .jush-oracle a, .jush-simpledb a, .jush-igdb a, .jush-redis a, .jush-elastic a { font-weight: bold; }
.jush-php_sql .jush-php_quo a, .jush-php_sql .jush-php_apo a { font-weight: normal; }
.jush-tag a, .jush-att a, .jush-apo a, .jush-quo a, .jush-php_apo a, .jush-php_quo a, .jush-php_eot2 a { color: inherit; }
a.jush-custom:link, a.jush-custom:visited { font-weight: normal; color: inherit; }
.jush p { margin: 0; }
vrana-jush-d490483/modules/ 0000775 0000000 0000000 00000000000 15237625165 0015535 5 ustar 00root root 0000000 0000000 vrana-jush-d490483/modules/jush-autocomplete-sql.js 0000664 0000000 0000000 00000015753 15237625165 0022353 0 ustar 00root root 0000000 0000000 /** Get callback for autocompletition
* @param {string} esc escaped empty identifier, e.g. `` for MySQL or [] for MS SQL
* @param {Object>} tablesColumns keys are table names, values are lists of columns
* @param {Array} [statements] statements offered at the beginning of a query, all by default
* @return {Function} see autocomplete()
*/
jush.autocompleteSql = function (esc, tablesColumns, statements) {
const mysql = (esc == '``'); // the escaping is the only hint about the database
/**
* key: regular expression; ' ' will be expanded to '\\s+', '\\w' to esc[0]+'?\\w'+esc[1]+'?', '$' will be appended
* value: list of autocomplete words; '?' means to not use the word if it's already in the current query
*/
const keywordsDefault = {
'^': statements || ['SELECT', 'INSERT INTO', 'UPDATE', 'DELETE FROM', 'TRUNCATE', 'EXPLAIN'],
'^EXPLAIN ': ['SELECT'],
'^INSERT ': (mysql ? ['IGNORE'] : []),
'^INSERT [^]+\\) ': ['?VALUES'].concat(mysql ? ['ON DUPLICATE KEY UPDATE'] : []),
'^UPDATE \\w+ ': ['SET'],
'^UPDATE \\w+ SET [^]+ ': ['?WHERE'],
'^DELETE FROM \\w+ ': ['WHERE'],
' JOIN \\w+(( AS)? (?!(ON|USING|AS) )\\w+)? ': ['ON', 'USING'],
'\\bSELECT ': ['*', 'DISTINCT'],
'\\bSELECT [^]*[^,] ': ['?FROM'],
'\\bSELECT (?![^]* (WHERE|GROUP BY|HAVING|ORDER BY|LIMIT) )[^]+ FROM [^]+ ': ['INNER JOIN', 'LEFT JOIN', '?WHERE'],
'\\bSELECT (?![^]* (HAVING|ORDER BY|LIMIT|OFFSET) )[^]+ FROM [^]+ ': ['?GROUP BY'],
'\\bSELECT (?![^]* (ORDER BY|LIMIT|OFFSET) )[^]+ FROM [^]+ ': ['?HAVING'],
'\\bSELECT (?![^]* (LIMIT|OFFSET) )[^]+ FROM [^]+ ': ['?ORDER BY'], // this matches prefixes without LIMIT|OFFSET and offers ORDER BY if it's not already used in prefix or suffix
'\\bSELECT (?![^]* (OFFSET) )[^]+ FROM [^]+ ': (esc != '[]' ? ['?LIMIT', '?OFFSET'] : []), // MS SQL uses TOP
' ORDER BY (?![^]* (LIMIT|OFFSET) )[^]+ ': ['DESC'],
};
// strings and comments must be found in a single pass, otherwise a delimiter inside the other construct would be honored
const literals = new RegExp(
'\'(?:[^\']|\'\')*\'?' // string, possibly unterminated
+ '|/\\*[^]*?(?:\\*/|$)' // block comment
+ '|(?:^|\\s)--' + (mysql ? ' ' : '') + '[^\\n]*' // line comment
+ (mysql ? '|#[^\\n]*' : '') // # is a comment only in MySQL
, 'g');
let forceEscape = false;
/** Replace a string by a placeholder and a comment by whitespace
* @param {string} literal
* @return {string}
*/
function replaceLiteral(literal) {
return (literal[0] == '\'' ? '0' : ' ');
}
/** Get list of strings for autocompletion
* @param {string} state
* @param {string} before
* @param {string} after
* @return {Object} keys are words, values are offsets
*/
function autocomplete(state, before, after) {
// bac, bra, mssql_bra and sqlite_quo are identifiers so they are completed
if (/^(one|com|com_nest|sql_apo|sqlite_apo|sql_quo)$/.test(state)) {
return {};
}
before = before
.replace(literals, replaceLiteral)
.replace(/[^]*;/, '') // strip previous query
.replace(/^\s+/, '')
;
after = after
.replace(literals, replaceLiteral)
.replace(/;[^]*/, '') // strip next query
;
const query = before + after;
const allTables = Object.keys(tablesColumns);
const usedTables = findTables(query); // tables used by the current query
const uniqueColumns = {};
for (const alias in usedTables) {
for (const column of tablesColumns[usedTables[alias]]) {
uniqueColumns[column] = 0;
}
}
const columns = Object.keys(uniqueColumns);
if (columns.length > 50) {
columns.length = 0;
}
if (Object.keys(usedTables).length > 1) {
for (const alias in usedTables) {
columns.push(alias + '.');
}
}
const preferred = {
'\\b(FROM|INTO|^UPDATE|JOIN|^TRUNCATE) ': allTables, // all tables including the current ones (self-join)
'\\b(^INSERT|USING) [^(]*\\(([^)]+, )?': columns, // offer columns right after '(' or after ','
'\\b(?!(IN|VALUES)\\()[a-z_]\\w*\\(([^)]+, )?': columns, // function call; IN() and VALUES() contain values
'(^UPDATE [^]+ SET| DUPLICATE KEY UPDATE| BY) ([^]+, )?': columns,
' (WHERE|HAVING|AND|OR|ON|=) (\\(\\s*)*': columns, // the condition can be parenthesized
};
keywordsDefault['\\bSELECT( DISTINCT)? (?![^]* FROM )([^]+, )?'] = columns; // this is not in preferred because we prefer '*'
const context = before.replace(escRe('[\\w`]+$'), ''); // in 'UPDATE tab.`co', context is 'UPDATE tab.'
before = before.replace(escRe('[^]*[^\\w`]'), ''); // in 'UPDATE tab.`co', before is '`co'
const thisColumns = []; // columns in the current table ('table.')
const match = context.match(escRe('`?(\\w+)`?\\.$'));
if (match) {
let table = match[1];
if (!tablesColumns[table]) {
table = usedTables[table];
}
if (tablesColumns[table]) {
thisColumns.push(...tablesColumns[table]);
preferred['\\.'] = thisColumns;
}
}
forceEscape = query.includes(esc[0]) && !/^\w/.test(before); // if there's any ` in the query, use ` everywhere unless the user starts typing letters
allTables.forEach(addEsc);
columns.forEach(addEsc);
thisColumns.forEach(addEsc);
const ac = {};
for (const keywords of [preferred, keywordsDefault]) {
for (const re in keywords) {
if (context.match(escRe(re.replace(/ /g, '\\s+').replace(/\\w\+/g, '`?\\w+`?') + '$', 'i'))) {
for (let keyword of keywords[re]) {
if (keyword[0] == '?') {
keyword = keyword.substring(1);
if (query.match(new RegExp('\\s+' + keyword.replace(/ /g, '\\s+') + '\\s+', 'i'))) {
continue;
}
}
if (keyword.length > before.length && keyword.toUpperCase().startsWith(before.toUpperCase())) {
const isCol = (keywords[re] == columns || keywords[re] == thisColumns);
ac[keyword + (isCol ? '' : ' ')] = before.length;
}
}
}
}
}
return ac;
}
function addEsc(val, key, array) {
if (forceEscape || !/^[a-z_]\w*\.?$/i.test(val)) {
array[key] = esc[0] + val.replace(/\.?$/, esc[1] + '$&');
}
}
/** Change odd ` to esc[0], even to esc[1] */
function escRe(re, flags) {
let i = 0;
return new RegExp(re.replace(/`/g, () => (esc[0] == '[' ? '\\' : '') + esc[i++ % 2]), flags);
}
/** @return {Object} key is alias, value is actual table */
function findTables(query) {
const re = escRe('\\b(FROM|JOIN|INTO|UPDATE)\\s+(\\w+|`.+?`)((\\s+AS)?\\s+((?!(LEFT|INNER|JOIN|ON|USING|WHERE|GROUP|HAVING|ORDER|LIMIT)\\b)\\w+|`.+?`))?', 'gi'); //! handle `abc``def`
const result = {};
let match;
while ((match = re.exec(query))) {
const table = match[2].replace(escRe('^`|`$', 'g'), '');
const alias = (match[5] ? match[5].replace(escRe('^`|`$', 'g'), '') : table);
if (tablesColumns[table]) {
result[alias] = table;
}
}
if (!Object.keys(result).length) {
for (const table in tablesColumns) {
result[table] = table;
}
}
return result;
}
// we open the autocomplete on word character, space, '(', '.' and '`'; textarea also triggers it on Backspace and Ctrl+Space
autocomplete.openBy = escRe('^[\\w`(. ]$'); //! ignore . in 1.23
return autocomplete;
};
vrana-jush-d490483/modules/jush-cnf.js 0000664 0000000 0000000 00000020465 15237625165 0017617 0 ustar 00root root 0000000 0000000 jush.tr.cnf = { quo_one: /"/, one: /#/, cnf_http: /((?:^|\n)\s*)(RequestHeader|Header|CacheIgnoreHeaders)([ \t]+|$)/i, cnf_php: /((?:^|\n)\s*)(PHPIniDir)([ \t]+|$)/i, cnf_phpini: /((?:^|\n)\s*)(php_value|php_flag|php_admin_value|php_admin_flag)([ \t]+|$)/i };
jush.tr.quo_one = { esc: /\\/, _1: /"|(?=\n)/ };
jush.tr.cnf_http = { apo: /'/, quo: /"/, _1: /(?=\n)/ };
jush.tr.cnf_php = { _1: /()/ };
jush.tr.cnf_phpini = { cnf_phpini_val: /[ \t]/ };
jush.tr.cnf_phpini_val = { apo: /'/, quo: /"/, _2: /(?=\n)/ };
jush.urls.cnf_http = 'https://httpd.apache.org/docs/current/mod/$key.html#$val';
jush.urls.cnf_php = 'https://www.php.net/$key';
jush.urls.cnf_phpini = 'https://www.php.net/configuration.changes#$key';
jush.slugs.cnf = name => name.toLowerCase();
jush.links.cnf_http = { 'mod_cache': /CacheIgnoreHeaders/i, 'mod_headers': /.+/ };
jush.links.cnf_php = { 'configuration.file': /.+/ };
jush.links.cnf_phpini = { 'configuration.changes.apache': /.+/ };
jush.build_links2('cnf', 'https://httpd.apache.org/docs/current/mod/$key.html#$1', /((?:^|\n)\s*(?:<)?)/, /(\b)/gi, {
'beos': /(MaxRequestsPerThread)/,
'core': /(AcceptFilter|AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|Directory|DirectoryMatch|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|Files|FilesMatch|ForceType|HostnameLookups|IfDefine|IfModule|Include|KeepAlive|KeepAliveTimeout|Limit|LimitExcept|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|Location|LocationMatch|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName|UseCanonicalPhysicalPort|VirtualHost)/,
'mod_actions': /(Action|Script)/,
'mod_alias': /(Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)/,
'mod_auth_basic': /(AuthBasicAuthoritative|AuthBasicProvider)/,
'mod_auth_digest': /(AuthDigestAlgorithm|AuthDigestDomain|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestProvider|AuthDigestQop|AuthDigestShmemSize)/,
'mod_authn_alias': /(AuthnProviderAlias)/,
'mod_authn_anon': /(Anonymous|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)/,
'mod_authn_dbd': /(AuthDBDUserPWQuery|AuthDBDUserRealmQuery)/,
'mod_authn_dbm': /(AuthDBMType|AuthDBMUserFile)/,
'mod_authn_default': /(AuthDefaultAuthoritative)/,
'mod_authn_file': /(AuthUserFile)/,
'mod_authnz_ldap': /(AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserAttribute|AuthLDAPRemoteUserIsDN|AuthLDAPUrl|AuthzLDAPAuthoritative)/,
'mod_authz_dbm': /(AuthDBMGroupFile|AuthzDBMAuthoritative|AuthzDBMType)/,
'mod_authz_default': /(AuthzDefaultAuthoritative)/,
'mod_authz_groupfile': /(AuthGroupFile|AuthzGroupFileAuthoritative)/,
'mod_authz_host': /(Allow|Deny|Order)/,
'mod_authz_owner': /(AuthzOwnerAuthoritative)/,
'mod_authz_user': /(AuthzUserAuthoritative)/,
'mod_autoindex': /(AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexHeadInsert|IndexIgnore|IndexOptions|IndexOrderDefault|IndexStyleSheet|ReadmeName)/,
'mod_cache': /(CacheDefaultExpire|CacheDisable|CacheEnable|CacheIgnoreCacheControl|CacheIgnoreNoLastMod|CacheIgnoreQueryString|CacheLastModifiedFactor|CacheMaxExpire|CacheStoreNoStore|CacheStorePrivate)/,
'mod_cern_meta': /(MetaDir|MetaFiles|MetaSuffix)/,
'mod_cgi': /(ScriptLog|ScriptLogBuffer|ScriptLogLength)/,
'mod_cgid': /(ScriptSock)/,
'mod_dav': /(Dav|DavDepthInfinity|DavMinTimeout)/,
'mod_dav_fs': /(DavLockDB)/,
'mod_dav_lock': /(DavGenericLockDB)/,
'mod_dbd': /(DBDExptime|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver)/,
'mod_deflate': /(DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)/,
'mod_dir': /(DirectoryIndex|DirectorySlash)/,
'mod_disk_cache': /(CacheDirLength|CacheDirLevels|CacheMaxFileSize|CacheMinFileSize|CacheRoot)/,
'mod_dumpio': /(DumpIOInput|DumpIOLogLevel|DumpIOOutput)/,
'mod_echo': /(ProtocolEcho)/,
'mod_env': /(PassEnv|SetEnv|UnsetEnv)/,
'mod_example': /(Example)/,
'mod_expires': /(ExpiresActive|ExpiresByType|ExpiresDefault)/,
'mod_ext_filter': /(ExtFilterDefine|ExtFilterOptions)/,
'mod_file_cache': /(CacheFile|MMapFile)/,
'mod_filter': /(FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace)/,
'mod_charset_lite': /(CharsetDefault|CharsetOptions|CharsetSourceEnc)/,
'mod_ident': /(IdentityCheck|IdentityCheckTimeout)/,
'mod_imagemap': /(ImapBase|ImapDefault|ImapMenu)/,
'mod_include': /(SSIEnableAccess|SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)/,
'mod_info': /(AddModuleInfo)/,
'mod_isapi': /(ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)/,
'mod_ldap': /(LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedClientCert|LDAPTrustedGlobalCert|LDAPTrustedMode|LDAPVerifyServerCert)/,
'mod_log_config': /(BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog)/,
'mod_log_forensic': /(ForensicLog)/,
'mod_mem_cache': /(MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)/,
'mod_mime': /(AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)/,
'mod_mime_magic': /(MimeMagicFile)/,
'mod_negotiation': /(CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)/,
'mod_nw_ssl': /(NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)/,
'mod_proxy': /(AllowCONNECT|BalancerMember|NoProxy|Proxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMatch|ProxyMaxForwards|ProxyPass|ProxyPassInterpolateEnv|ProxyPassMatch|ProxyPassReverse|ProxyPassReverseCookieDomain|ProxyPassReverseCookiePath|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxySet|ProxyStatus|ProxyTimeout|ProxyVia)/,
'mod_rewrite': /(RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)/,
'mod_setenvif': /(BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)/,
'mod_so': /(LoadFile|LoadModule)/,
'mod_speling': /(CheckCaseOnly|CheckSpelling)/,
'mod_ssl': /(SSLCACertificateFile|SSLCACertificatePath|SSLCADNRequestFile|SSLCADNRequestPath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLCryptoDevice|SSLEngine|SSLHonorCipherOrder|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)/,
'mod_status': /(ExtendedStatus|SeeRequestTail)/,
'mod_substitute': /(Substitute)/,
'mod_suexec': /(SuexecUserGroup)/,
'mod_userdir': /(UserDir)/,
'mod_usertrack': /(CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)/,
'mod_version': /(IfVersion)/,
'mod_vhost_alias': /(VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)/,
'mpm_common': /(AcceptMutex|ChrootDir|CoreDumpDirectory|EnableExceptionHook|GracefulShutdownTimeout|Group|Listen|ListenBackLog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxSpareThreads|MinSpareThreads|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User)/,
'mpm_netware': /(MaxThreads)/,
'mpm_winnt': /(Win32DisableAcceptEx)/,
'prefork': /(MaxSpareServers|MinSpareServers)/,
});
vrana-jush-d490483/modules/jush-css.js 0000664 0000000 0000000 00000027666 15237625165 0017653 0 ustar 00root root 0000000 0000000 jush.tr.css = { php: jush.php, quo: /"/, apo: /'/, com: /\/\*/, css_at: /(@)([^;\s{]+)/, css_pro: /\{/, _2: /(<)(\/style)(>)/i };
jush.tr.css_at = { php: jush.php, quo: /"/, apo: /'/, com: /\/\*/, css_at2: /\{/, _1: /;/ };
jush.tr.css_at2 = { php: jush.php, quo: /"/, apo: /'/, com: /\/\*/, css_at: /@/, css_pro: /\{/, _2: /}/ };
jush.tr.css_pro = { php: jush.php, com: /\/\*/, css_val: /(\s*)([-\w]+)(\s*:)/, _1: /}/ }; //! misses e.g. margin/*-left*/:
jush.tr.css_val = { php: jush.php, quo: /"/, apo: /'/, css_js: /expression\s*\(/i, com: /\/\*/, clr: /#/, num: /[-+]?[0-9]*\.?[0-9]+(?:em|ex|px|in|cm|mm|pt|pc|%)?/, _2: /}/, _1: /;|$/ };
jush.tr.css_js = { php: jush.php, css_js: /\(/, _1: /\)/ };
jush.tr.clr = { _1: /(?=[^a-fA-F0-9])/ };
jush.urls.css_at = 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/$key';
jush.urls.css_val = 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/$key';
jush.links.css_at = {
'@$val': /^(charset|color-profile|container|counter-style|custom-media|document|font-face|font-feature-values|font-palette-values|function|import|keyframes|layer|media|namespace|page|position-try|property|scope|starting-style|supports|view-transition)$/i
};
jush.links.css_val = {
'$val': /^(-moz-float-edge|-moz-force-broken-image-icon|-moz-orient|-moz-user-focus|-moz-user-input|-webkit-border-before|-webkit-box-reflect|-webkit-mask-box-image|-webkit-mask-composite|-webkit-mask-position-x|-webkit-mask-position-y|-webkit-mask-repeat-x|-webkit-mask-repeat-y|-webkit-tap-highlight-color|-webkit-text-fill-color|-webkit-text-security|-webkit-text-stroke|-webkit-text-stroke-color|-webkit-text-stroke-width|-webkit-touch-callout|accent-color|align-content|align-items|align-self|alignment-baseline|all|anchor-name|anchor-scope|animation|animation-composition|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-range|animation-range-end|animation-range-start|animation-timeline|animation-timing-function|appearance|aspect-ratio|backdrop-filter|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-position-x|background-position-y|background-repeat|background-repeat-x|background-repeat-y|background-size|baseline-shift|baseline-source|block-size|border|border-block|border-block-color|border-block-end|border-block-end-color|border-block-end-style|border-block-end-width|border-block-start|border-block-start-color|border-block-start-style|border-block-start-width|border-block-style|border-block-width|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-end-end-radius|border-end-start-radius|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-inline|border-inline-color|border-inline-end|border-inline-end-color|border-inline-end-style|border-inline-end-width|border-inline-start|border-inline-start-color|border-inline-start-style|border-inline-start-width|border-inline-style|border-inline-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-shape|border-spacing|border-start-end-radius|border-start-start-radius|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-align|box-decoration-break|box-direction|box-flex|box-flex-group|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|caret|caret-animation|caret-color|caret-shape|clear|clip|clip-path|clip-rule|color|color-interpolation|color-interpolation-filters|color-scheme|column-count|column-fill|column-gap|column-height|column-rule|column-rule-color|column-rule-style|column-rule-visibility-items|column-rule-width|column-span|column-width|column-wrap|columns|contain|contain-intrinsic-block-size|contain-intrinsic-height|contain-intrinsic-inline-size|contain-intrinsic-size|contain-intrinsic-width|container|container-name|container-type|content|content-visibility|corner-block-end-shape|corner-block-start-shape|corner-bottom-left-shape|corner-bottom-right-shape|corner-bottom-shape|corner-end-end-shape|corner-end-start-shape|corner-inline-end-shape|corner-inline-start-shape|corner-left-shape|corner-right-shape|corner-shape|corner-start-end-shape|corner-start-start-shape|corner-top-left-shape|corner-top-right-shape|corner-top-shape|counter-increment|counter-reset|counter-set|cursor|cx|cy|d|direction|display|dominant-baseline|dynamic-range-limit|empty-cells|field-sizing|fill|fill-opacity|fill-rule|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|flood-color|flood-opacity|font|font-family|font-feature-settings|font-kerning|font-language-override|font-optical-sizing|font-palette|font-size|font-size-adjust|font-smooth|font-stretch|font-style|font-synthesis|font-synthesis-position|font-synthesis-small-caps|font-synthesis-style|font-synthesis-weight|font-variant|font-variant-alternates|font-variant-caps|font-variant-east-asian|font-variant-emoji|font-variant-ligatures|font-variant-numeric|font-variant-position|font-variation-settings|font-weight|font-width|forced-color-adjust|frame-sizing|gap|grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-start|grid-row|grid-row-end|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows|hanging-punctuation|height|hyphenate-character|hyphenate-limit-chars|hyphens|image-orientation|image-rendering|image-resolution|initial-letter|inline-size|inset|inset-block|inset-block-end|inset-block-start|inset-inline|inset-inline-end|inset-inline-start|interactivity|interest-delay|interest-delay-end|interest-delay-start|interpolate-size|isolation|justify-content|justify-items|justify-self|left|letter-spacing|lighting-color|line-break|line-clamp|line-height|line-height-step|link-parameters|list-style|list-style-image|list-style-position|list-style-type|margin|margin-block|margin-block-end|margin-block-start|margin-bottom|margin-inline|margin-inline-end|margin-inline-start|margin-left|margin-right|margin-top|margin-trim|marker|marker-end|marker-mid|marker-start|mask|mask-border|mask-border-mode|mask-border-outset|mask-border-repeat|mask-border-slice|mask-border-source|mask-border-width|mask-clip|mask-composite|mask-image|mask-mode|mask-origin|mask-position|mask-repeat|mask-size|mask-type|math-depth|math-shift|math-style|max-block-size|max-height|max-inline-size|max-width|min-block-size|min-height|min-inline-size|min-width|mix-blend-mode|object-fit|object-position|object-view-box|offset|offset-anchor|offset-distance|offset-path|offset-position|offset-rotate|opacity|order|orphans|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-anchor|overflow-block|overflow-clip-margin|overflow-inline|overflow-wrap|overflow-x|overflow-y|overlay|overscroll-behavior|overscroll-behavior-block|overscroll-behavior-inline|overscroll-behavior-x|overscroll-behavior-y|padding|padding-block|padding-block-end|padding-block-start|padding-bottom|padding-inline|padding-inline-end|padding-inline-start|padding-left|padding-right|padding-top|page|page-break-after|page-break-before|page-break-inside|paint-order|path-length|perspective|perspective-origin|place-content|place-items|place-self|pointer-events|position|position-anchor|position-area|position-try|position-try-fallbacks|position-try-order|position-visibility|print-color-adjust|quotes|r|reading-flow|reading-order|resize|right|rotate|row-gap|row-rule|row-rule-color|row-rule-style|row-rule-visibility-items|row-rule-width|ruby-align|ruby-overhang|ruby-position|rule|rule-visibility-items|rx|ry|scale|scroll-behavior|scroll-initial-target|scroll-margin|scroll-margin-block|scroll-margin-block-end|scroll-margin-block-start|scroll-margin-bottom|scroll-margin-inline|scroll-margin-inline-end|scroll-margin-inline-start|scroll-margin-left|scroll-margin-right|scroll-margin-top|scroll-marker-group|scroll-padding|scroll-padding-block|scroll-padding-block-end|scroll-padding-block-start|scroll-padding-bottom|scroll-padding-inline|scroll-padding-inline-end|scroll-padding-inline-start|scroll-padding-left|scroll-padding-right|scroll-padding-top|scroll-snap-align|scroll-snap-stop|scroll-snap-type|scroll-target-group|scroll-timeline|scroll-timeline-axis|scroll-timeline-name|scrollbar-color|scrollbar-gutter|scrollbar-width|shape-image-threshold|shape-margin|shape-outside|shape-rendering|speak-as|stop-color|stop-opacity|stroke|stroke-dasharray|stroke-dashoffset|stroke-linecap|stroke-linejoin|stroke-miterlimit|stroke-opacity|stroke-width|tab-size|table-layout|text-align|text-align-last|text-anchor|text-autospace|text-box|text-box-edge|text-box-trim|text-combine-upright|text-decoration|text-decoration-color|text-decoration-inset|text-decoration-line|text-decoration-skip|text-decoration-skip-ink|text-decoration-style|text-decoration-thickness|text-emphasis|text-emphasis-color|text-emphasis-position|text-emphasis-style|text-indent|text-justify|text-orientation|text-overflow|text-rendering|text-shadow|text-size-adjust|text-spacing-trim|text-transform|text-underline-offset|text-underline-position|text-wrap|text-wrap-mode|text-wrap-style|timeline-scope|top|touch-action|transform|transform-box|transform-origin|transform-style|transition|transition-behavior|transition-delay|transition-duration|transition-property|transition-timing-function|translate|unicode-bidi|user-modify|user-select|vector-effect|vertical-align|view-timeline|view-timeline-axis|view-timeline-inset|view-timeline-name|view-transition-class|view-transition-name|view-transition-scope|visibility|white-space|white-space-collapse|widows|width|will-change|word-break|word-spacing|writing-mode|x|y|z-index|zoom)$/i
};
jush.build_links2('css', 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/$key', /(:)/, /((?![-\w]))/gi, {
':$1': /(-moz-broken|-moz-drag-over|-moz-first-node|-moz-handler-blocked|-moz-handler-crashed|-moz-handler-disabled|-moz-last-node|-moz-loading|-moz-only-whitespace|-moz-submit-invalid|-moz-suppressed|-moz-user-disabled|-moz-window-inactive|active|active-view-transition|active-view-transition-type|any-link|autofill|blank|buffering|checked|current|default|defined|dir|disabled|empty|enabled|first|first-child|first-of-type|focus|focus-visible|focus-within|fullscreen|future|has|has-slotted|heading|host|host-context|hover|in-range|indeterminate|interest-source|interest-target|invalid|is|lang|last-child|last-of-type|left|link|local-link|modal|muted|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|open|optional|out-of-range|past|paused|picture-in-picture|placeholder-shown|playing|popover-open|read-only|read-write|required|right|root|scope|seeking|stalled|state|target|target-after|target-before|target-current|user-invalid|user-valid|valid|visited|volume-locked|where|xr-overlay)/,
'::$1': /(:)(-moz-color-swatch|-moz-focus-inner|-moz-list-bullet|-moz-list-number|-moz-meter-bar|-moz-progress-bar|-moz-range-progress|-moz-range-thumb|-moz-range-track|-webkit-inner-spin-button|-webkit-meter-bar|-webkit-meter-even-less-good-value|-webkit-meter-inner-element|-webkit-meter-optimum-value|-webkit-meter-suboptimum-value|-webkit-progress-bar|-webkit-progress-inner-element|-webkit-progress-value|-webkit-scrollbar|-webkit-search-cancel-button|-webkit-search-results-button|-webkit-slider-runnable-track|-webkit-slider-thumb|after|backdrop|before|checkmark|column|cue|details-content|file-selector-button|first-letter|first-line|grammar-error|highlight|marker|part|picker|picker-icon|placeholder|scroll-button|scroll-marker|scroll-marker-group|search-text|selection|slotted|spelling-error|target-text|view-transition|view-transition-group|view-transition-image-pair|view-transition-new|view-transition-old)/,
});
vrana-jush-d490483/modules/jush-elastic.js 0000664 0000000 0000000 00000001200 15237625165 0020457 0 ustar 00root root 0000000 0000000 jush.tr.elastic = { json: /:(?= )/ }; // Adminer prints the queries as ": "
jush.build_links2('elastic', 'https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-$key', /(\b)/, /(\b)/g, {
'https://www.elastic.co/docs/api/doc/elasticsearch/': /(GET|POST|PUT|DELETE|HEAD)/, // no page explains the methods, the reference prints them by every operation
'search': /(_search)/,
'count': /(_count)/,
'index': /(_doc)/,
'update': /(_update)/,
'indices-put-mapping': /(_mapping)/,
'indices-update-aliases': /(_aliases)/, // must be before _alias
'indices-get-alias': /(_alias)/,
'indices-stats': /(_stats)/,
});
vrana-jush-d490483/modules/jush-htm.js 0000664 0000000 0000000 00000013147 15237625165 0017640 0 ustar 00root root 0000000 0000000 jush.tr.htm = { php: jush.php, tag_css: /(<)(style)\b/i, tag_js: /(<)(script)\b/i, htm_com: // };
jush.tr.ent = { php: jush.php, _1: /[;\s]/ };
jush.tr.tag = { php: jush.php, att_css: /(\s*)(style)(\s*=\s*|$)/i, att_js: /(\s*)(on[-\w]+)(\s*=\s*|$)/i, att_http: /(\s*)(http-equiv)(\s*=\s*|$)/i, att: /(\s*)([-\w]+)()/, _1: />/ };
jush.tr.tag_css = { php: jush.php, att: /(\s*)([-\w]+)()/, css: />/ };
jush.tr.tag_js = { php: jush.php, att: /(\s*)([-\w]+)()/, js: />/ };
jush.tr.att = { php: jush.php, att_quo: /\s*=\s*"/, att_apo: /\s*=\s*'/, att_val: /\s*=\s*/, _1: /()/ };
jush.tr.att_css = { php: jush.php, att_quo: /"/, att_apo: /'/, att_val: /\s*/ };
jush.tr.att_js = { php: jush.php, att_quo: /"/, att_apo: /'/, att_val: /\s*/ };
jush.tr.att_http = { php: jush.php, att_quo: /"/, att_apo: /'/, att_val: /\s*/ };
jush.tr.att_quo = { php: jush.php, _2: /"/ };
jush.tr.att_apo = { php: jush.php, _2: /'/ };
jush.tr.att_val = { php: jush.php, _2: /(?=>|\s)/ };
jush.tr.xml = { php: jush.php, htm_com: / &', '<a href="">HTML</a> <!-- comment --> &'],
['htm', '', '<a href="" onclick="alert(\'\');">'],
['htm', '', '<a href="" style="color: red;">'],
['htm', ' SCRIPT', '<script type="text/javascript">alert("");</script> SCRIPT'],
['htm', ' STYLE', '<style type="text/css">a { color: red; }</style> STYLE'],
['htm', '', '<a href=index.php title=\'Quoting\'>'],
['htm', '', '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'],
['tag', 'title=""', 'title=""'],
['xml', '', '<rss version="0.91">'],
['css', 'a { color: red } /* comment */ b { font-weight: bold; color: black; }', 'a { color: red } /* </style> comment */ b { font-weight: bold; color: black; }'],
['css', 'a:hover::after, p:first-child::first-line { color: red }', 'a:hover::after, p:first-child::first-line { color: red }'], // pseudo-classes and pseudo-elements are distinguished by the number of colons
['css', '@media print { a { color: red } }', '@media print { a { color: red } }'],
['js', 'if (/.+@.+/.test(email)) { /* */ alert(email); }', 'if (/.+@.+/.test(email)) { /* </script> */ alert(email); }'],
['js', '/[/\\]]/.test("/");', '/[/\\]]/.test("/");'],
['js', 'var s = `a ${x} b`; // comment', 'var s = `a ${x} b`; // comment'],
['js', 'x.name = a.at(1);', 'x.name = a.at(1);'], // a member is linked only after a dot, .name prefers the first DOM interface declaring it
['js', 'xhr.getResponseHeader("Content-Type");', 'xhr.getResponseHeader("Content-Type");'],
['js', '{ a: [ 1, { "b": "c" }, 3 ], \'d\': true, e: [null]}', '{ a: [ 1, { "b": "c" }, 3 ], \'d\': true, e: [null]}'],
['js', '/** @param {string} s */', '/** @param {string} s */'],
['js_doc', '@return {@link Foo}', '@return {@link Foo}'],
['json', '{"a": [1, {"b": "c"}, -2.5e3], "d": true, "e": null}', '{"a": [1, {"b": "c"}, -2.5e3], "d": true, "e": null}'],
['json', '{"esc": "a\\"b", "empty": {}, "arr": []}', '{"esc": "a\\"b", "empty": {}, "arr": []}'],
['json', '"param": {"a": 1}', '"param": {"a": 1}'],
['json', 'function({"a":1, "b":"c"})', 'function({"a":1, "b":"c"})'],
['json', '[}', '[}'], // invalid JSON must not loop
['htm', '";', '<?php echo "<a href=\'$href\'>";'],
['htm', '="";log()?>', '<?="<a>";log()?><b>'],
['php', 'echo "Test" . $_SERVER["PHP_SELF"]; /* ?> comment */ mysql_free_result($result);', 'echo "Test" . $_SERVER["PHP_SELF"]; /* ?> comment */ mysql_free_result($result);'],
['php', 'mysql_query("SELECT 1");', 'mysql_query("SELECT 1");'],
['php', 'mssql_query("SELECT TOP 1 * FROM t");', 'mssql_query("SELECT TOP 1 * FROM t");'],
['php', '/** @return bool */ ini_set("display_errors", true);', '/** @return bool */ ini_set("display_errors", true);'],
['php', 'header("HTTP/1.1 404 Not Found");', 'header("HTTP/1.1 404 Not Found");'],
['php', 'header("Content-Type: text/html; charset=utf-8");', 'header("Content-Type: text/html; charset=utf-8");'],
['php', 'mail("", "", "", "From: info@example.com\\nMIME-Version: 1.0");', 'mail("", "", "", "From: info@example.com\\nMIME-Version: 1.0");'],
['php', 'echo <<echo <<<EOT\ntext $x\nEOT\n. <<<\'EOT\'\ntext $x\nEOT;\necho 1;