From aca7d5f8ce97564f7509ed9aa61d92449df5b350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=87=E5=A4=A9?= Date: Mon, 4 Sep 2017 01:02:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=84=E9=A1=B9bug?= =?UTF-8?q?=E5=8F=8A=E4=BC=98=E5=8C=96=E7=BB=84=E4=BB=B6=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/lib/drag/drag.js | 2 +- js/lib/marked/marked.js | 4 +- js/lib/prism/{prism.js => base.js} | 7 + js/lib/prism/core.js | 793 ----------------------------- js/lib/prism/{main.js => full.js} | 9 +- js/lib/prism/highlight.css | 32 -- js/lib/prism/highlight.scss | 49 ++ js/lib/router/router.min.js | 1 + js/lib/tree/main.js | 44 +- js/yua-touch.js | 45 +- js/yua.js | 45 +- 11 files changed, 145 insertions(+), 886 deletions(-) rename js/lib/prism/{prism.js => base.js} (99%) delete mode 100644 js/lib/prism/core.js rename js/lib/prism/{main.js => full.js} (99%) create mode 100644 js/lib/prism/highlight.scss diff --git a/js/lib/drag/drag.js b/js/lib/drag/drag.js index 0f0a871..1711909 100644 --- a/js/lib/drag/drag.js +++ b/js/lib/drag/drag.js @@ -29,7 +29,7 @@ define(['yua'], function(){ //取得拖动的3种状态回调 //按下,且拖拽之前 - binding. beforedrag = getBindingCallback(binding.element, 'data-beforedrag', binding.vmodels) + binding.beforedrag = getBindingCallback(binding.element, 'data-beforedrag', binding.vmodels) //拖拽过程 binding.dragging = getBindingCallback(binding.element, 'data-dragging', binding.vmodels) // 拖拽结束,且释放鼠标 diff --git a/js/lib/marked/marked.js b/js/lib/marked/marked.js index b11e151..e2f2753 100644 --- a/js/lib/marked/marked.js +++ b/js/lib/marked/marked.js @@ -810,7 +810,7 @@ Renderer.prototype.code = function(code, lang, escaped) { // + '' } - return '
'
+    return '
'
         + output
         + '
'; }; @@ -888,7 +888,7 @@ Renderer.prototype.em = function(text) { Renderer.prototype.codespan = function(txt) { txt = txt.replace(/&/g, '&') - return '' + txt + ''; + return '' + txt + ''; }; Renderer.prototype.br = function() { diff --git a/js/lib/prism/prism.js b/js/lib/prism/base.js similarity index 99% rename from js/lib/prism/prism.js rename to js/lib/prism/base.js index 294a41f..eedc4ac 100644 --- a/js/lib/prism/prism.js +++ b/js/lib/prism/base.js @@ -1,3 +1,10 @@ +/** + * + * @authors yutent (yutent@doui.cc) + * @date 2017-08-02 21:50:34 + * @version $Id$ + */ + define(['css!./highlight'], function() { var _self = window; diff --git a/js/lib/prism/core.js b/js/lib/prism/core.js deleted file mode 100644 index a144c64..0000000 --- a/js/lib/prism/core.js +++ /dev/null @@ -1,793 +0,0 @@ -define(function() { - - var _self = window; - - var Prism = (function() { - - // Private helper vars - var lang = /\blang(?:uage)?-(\w+)\b/i; - var uniqueId = 0; - - var _ = _self.Prism = { - manual: _self.Prism && _self.Prism.manual, - util: { - encode: function(tokens) { - if (tokens instanceof Token) { - return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); - } else if (_.util.type(tokens) === 'Array') { - return tokens.map(_.util.encode); - } else { - return tokens.replace(/&/g, '&').replace(/ text.length) { - // Something went terribly wrong, ABORT, ABORT! - break tokenloop; - } - - if (str instanceof Token) { - continue; - } - - pattern.lastIndex = 0; - - var match = pattern.exec(str), - delNum = 1; - - // Greedy patterns can override/remove up to two previously matched tokens - if (!match && greedy && i != strarr.length - 1) { - pattern.lastIndex = pos; - match = pattern.exec(text); - if (!match) { - break; - } - - var from = match.index + (lookbehind ? match[1].length : 0), - to = match.index + match[0].length, - k = i, - p = pos; - - for (var len = strarr.length; k < len && p < to; ++k) { - p += strarr[k].length; - // Move the index i to the element in strarr that is closest to from - if (from >= p) { - ++i; - pos = p; - } - } - - if (strarr[i] instanceof Token || strarr[k - 1].greedy) { - continue; - } - - // Number of tokens to delete and replace with the new match - delNum = k - i; - str = text.slice(pos, p); - match.index -= pos; - } - - if (!match) { - continue; - } - - if (lookbehind) { - lookbehindLength = match[1].length; - } - - var from = match.index + lookbehindLength, - match = match[0].slice(lookbehindLength), - to = from + match.length, - before = str.slice(0, from), - after = str.slice(to); - - var args = [i, delNum]; - - if (before) { - args.push(before); - } - - var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy); - - args.push(wrapped); - - if (after) { - args.push(after); - } - - Array.prototype.splice.apply(strarr, args); - } - } - } - - return strarr; - }, - - hooks: { - all: {}, - - add: function(name, callback) { - var hooks = _.hooks.all; - - hooks[name] = hooks[name] || []; - - hooks[name].push(callback); - }, - - run: function(name, env) { - var callbacks = _.hooks.all[name]; - - if (!callbacks || !callbacks.length) { - return; - } - - for (var i = 0, callback; callback = callbacks[i++];) { - callback(env); - } - } - } - }; - - var Token = _.Token = function(type, content, alias, matchedStr, greedy) { - this.type = type; - this.content = content; - this.alias = alias; - // Copy of the full string this token was created from - this.length = (matchedStr || "").length | 0; - this.greedy = !!greedy; - }; - - Token.stringify = function(o, language, parent) { - if (typeof o == 'string') { - return o; - } - - if (_.util.type(o) === 'Array') { - return o.map(function(element) { - return Token.stringify(element, language, o); - }).join(''); - } - - var env = { - type: o.type, - content: Token.stringify(o.content, language, parent), - tag: 'span', - classes: ['c-' + o.type], - attributes: {}, - language: language, - parent: parent - }; - - if (o.alias) { - var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; - Array.prototype.push.apply(env.classes, aliases); - } - - _.hooks.run('wrap', env); - - var attributes = Object.keys(env.attributes).map(function(name) { - return name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"'; - }).join(' '); - - return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + ''; - - }; - - if (!_self.document) { - if (!_self.addEventListener) { - // in Node.js - return _self.Prism; - } - // In worker - _self.addEventListener('message', function(evt) { - var message = JSON.parse(evt.data), - lang = message.language, - code = message.code, - immediateClose = message.immediateClose; - - _self.postMessage(_.highlight(code, _.languages[lang], lang)); - if (immediateClose) { - _self.close(); - } - }, false); - - return _self.Prism; - } - - //Get current script and highlight - var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop(); - - if (script) { - _.filename = script.src; - - if (document.addEventListener && !_.manual && !script.hasAttribute('data-manual')) { - if (document.readyState !== "loading") { - if (window.requestAnimationFrame) { - window.requestAnimationFrame(_.highlightAll); - } else { - window.setTimeout(_.highlightAll, 16); - } - } else { - document.addEventListener('DOMContentLoaded', _.highlightAll); - } - } - } - - return _self.Prism; - - })(); - - - Prism.languages.markup = { - 'smartyx': //, - 'comment': //, - 'prolog': /<\?[\w\W]+?\?>/, - 'doctype': //i, - 'cdata': //i, - 'tag': { - pattern: /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i, - inside: { - 'tag': { - pattern: /^<\/?[^\s>\/]+/i, - inside: { - 'punctuation': /^<\/?/, - 'namespace': /^[^\s>\/:]+:/ - } - }, - 'attr-value': { - pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i, - inside: { - 'punctuation': /[=>"']/ - } - }, - 'punctuation': /\/?>/, - 'attr-name': { - pattern: /[^\s>\/]+/, - inside: { - 'namespace': /^[^\s>\/:]+:/ - } - } - - } - }, - 'entity': /&#?[\da-z]{1,8};/i - }; - - // Plugin to make entity title show the real entity, idea by Roman Komarov - Prism.hooks.add('wrap', function(env) { - - if (env.type === 'entity') { - env.attributes['title'] = env.content.replace(/&/, '&'); - } - }); - - Prism.languages.xml = Prism.languages.markup; - Prism.languages.html = Prism.languages.markup; - Prism.languages.mathml = Prism.languages.markup; - Prism.languages.svg = Prism.languages.markup; - - Prism.languages.css = { - 'comment': /\/\*[\w\W]*?\*\//, - 'atrule': { - pattern: /@[\w-]+?.*?(;|(?=\s*\{))/i, - inside: { - 'rule': /@[\w-]+/ - // See rest below - } - }, - 'url': /url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i, - 'selector': /[^\{\}\s][^\{\};]*?(?=\s*\{)/, - 'string': { - pattern: /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/, - greedy: true - }, - 'property': /(\b|\B)[\w-]+(?=\s*:)/i, - 'important': /\B!important\b/i, - 'function': /[-a-z0-9]+(?=\()/i, - 'punctuation': /[(){};:]/ - }; - - Prism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css); - - if (Prism.languages.markup) { - Prism.languages.insertBefore('markup', 'tag', { - 'style': { - pattern: /()[\w\W]*?(?=<\/style>)/i, - lookbehind: true, - inside: Prism.languages.css, - alias: 'language-css' - } - }); - - Prism.languages.insertBefore('inside', 'attr-value', { - 'style-attr': { - pattern: /\s*style=("|').*?\1/i, - inside: { - 'attr-name': { - pattern: /^\s*style/i, - inside: Prism.languages.markup.tag.inside - }, - 'punctuation': /^\s*=\s*['"]|['"]\s*$/, - 'attr-value': { - pattern: /.+/i, - inside: Prism.languages.css - } - }, - alias: 'language-css' - } - }, Prism.languages.markup.tag); - }; - Prism.languages.clike = { - 'comment': [{ - pattern: /(^|[^\\])\/\*[\w\W]*?\*\//, - lookbehind: true - }, { - pattern: /(^|[^\\:])\/\/.*/, - lookbehind: true - }], - 'string': { - pattern: /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, - greedy: true - }, - 'class-name': { - pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, - lookbehind: true, - inside: { - punctuation: /(\.|\\)/ - } - }, - 'keyword': /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, - 'boolean': /\b(true|false)\b/, - 'function': /[a-z0-9_]+(?=\()/i, - 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i, - 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, - 'punctuation': /[{}[\];(),.:]/ - }; - - Prism.languages.javascript = Prism.languages.extend('clike', { - 'build-in': /\b(Object|Array|console|Function|String|Global|window|Buffer|Audio|Video|Date|Math|process|EventEmitter|__dirname|__filename|module|export|exports|import|require|Promise)\b/, - 'params': /(\(.*?\)|[A-Za-z$_][0-9A-Za-z$_]*)\s*=>/, - 'keyword': /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, - 'number': /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/, - // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) - 'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i, - 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/, - - }); - - Prism.languages.insertBefore('javascript', 'keyword', { - 'regex': { - pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/, - lookbehind: true, - greedy: true - } - }); - - Prism.languages.insertBefore('javascript', 'string', { - 'template-string': { - pattern: /`(?:\\\\|\\?[^\\])*?`/, - greedy: true, - inside: { - 'interpolation': { - pattern: /\$\{[^}]+\}/, - inside: { - 'interpolation-punctuation': { - pattern: /^\$\{|\}$/, - alias: 'punctuation' - }, - rest: Prism.languages.javascript - } - }, - 'string': /[\s\S]+/ - } - } - }); - - if (Prism.languages.markup) { - Prism.languages.insertBefore('markup', 'tag', { - 'script': { - pattern: /()[\w\W]*?(?=<\/script>)/i, - lookbehind: true, - inside: Prism.languages.javascript, - alias: 'language-javascript' - } - }); - } - - Prism.languages.js = Prism.languages.javascript; - (function(Prism) { - var insideString = { - variable: [ - // Arithmetic Environment - { - pattern: /\$?\(\([\w\W]+?\)\)/, - inside: { - // If there is a $ sign at the beginning highlight $(( and )) as variable - variable: [{ - pattern: /(^\$\(\([\w\W]+)\)\)/, - lookbehind: true - }, - /^\$\(\(/, - ], - number: /\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/, - // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic - operator: /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/, - // If there is no $ sign at the beginning highlight (( and )) as punctuation - punctuation: /\(\(?|\)\)?|,|;/ - } - }, - // Command Substitution - { - pattern: /\$\([^)]+\)|`[^`]+`/, - inside: { - variable: /^\$\(|^`|\)$|`$/ - } - }, - /\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i - ], - }; - - Prism.languages.bash = { - 'important': { - pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/ - }, - 'comment': { - pattern: /(^|[^"{\\])#.*/, - lookbehind: true - }, - 'string': [ - //Support for Here-Documents https://en.wikipedia.org/wiki/Here_document - { - pattern: /((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g, - lookbehind: true, - greedy: true, - inside: insideString - }, { - pattern: /(["'])(?:\\\\|\\?[^\\])*?\1/g, - greedy: true, - inside: insideString - } - ], - 'variable': insideString.variable, - // Originally based on http://ss64.com/bash/ - 'function': { - pattern: /(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/, - lookbehind: true - }, - 'keyword': { - pattern: /(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/, - lookbehind: true - }, - 'boolean': { - pattern: /(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/, - lookbehind: true - }, - 'operator': /&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/, - 'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];]/ - }; - - var inside = insideString.variable[1].inside; - inside['function'] = Prism.languages.bash['function']; - inside.keyword = Prism.languages.bash.keyword; - inside.boolean = Prism.languages.bash.boolean; - inside.operator = Prism.languages.bash.operator; - inside.punctuation = Prism.languages.bash.punctuation; - })(Prism); - - Prism.languages.nginx = Prism.languages.extend('clike', { - 'comment': { - pattern: /(^|[^"{\\])#.*/, - lookbehind: true - }, - 'keyword': /\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|server|events|location|include|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i, - }); - - Prism.languages.insertBefore('nginx', 'keyword', { - 'variable': /\$[a-z_]+/i - }); - Prism.languages.yaml = { - 'scalar': { - pattern: /([\-:]\s*(![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\3[^\r\n]+)*)/, - lookbehind: true, - alias: 'string' - }, - 'comment': /#.*/, - 'key': { - pattern: /(\s*(?:^|[:\-,[{\r\n?])[ \t]*(![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/, - lookbehind: true, - alias: 'atrule' - }, - 'directive': { - pattern: /(^[ \t]*)%.+/m, - lookbehind: true, - alias: 'important' - }, - 'datetime': { - pattern: /([:\-,[{]\s*(![^\s]+)?[ \t]*)(\d{4}-\d\d?-\d\d?([tT]|[ \t]+)\d\d?:\d{2}:\d{2}(\.\d*)?[ \t]*(Z|[-+]\d\d?(:\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(:\d{2}(\.\d*)?)?)(?=[ \t]*($|,|]|}))/m, - lookbehind: true, - alias: 'number' - }, - 'boolean': { - pattern: /([:\-,[{]\s*(![^\s]+)?[ \t]*)(true|false)[ \t]*(?=$|,|]|})/im, - lookbehind: true, - alias: 'important' - }, - 'null': { - pattern: /([:\-,[{]\s*(![^\s]+)?[ \t]*)(null|~)[ \t]*(?=$|,|]|})/im, - lookbehind: true, - alias: 'important' - }, - 'string': { - pattern: /([:\-,[{]\s*(![^\s]+)?[ \t]*)("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?=[ \t]*($|,|]|}))/m, - lookbehind: true, - greedy: true - }, - 'number': { - pattern: /([:\-,[{]\s*(![^\s]+)?[ \t]*)[+\-]?(0x[\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im, - lookbehind: true - }, - 'tag': /![^\s]+/, - 'important': /[&*][\w]+/, - 'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./ - }; - Prism.languages.other = {} - - window.Prism = Prism - return Prism -}) \ No newline at end of file diff --git a/js/lib/prism/main.js b/js/lib/prism/full.js similarity index 99% rename from js/lib/prism/main.js rename to js/lib/prism/full.js index 955027d..9f5c80f 100644 --- a/js/lib/prism/main.js +++ b/js/lib/prism/full.js @@ -1,4 +1,11 @@ -define(['./core', 'css!./highlight'], function(Prism) { +/** + * + * @authors yutent (yutent@doui.cc) + * @date 2017-08-02 21:50:34 + * @version $Id$ + */ + +define(['./base', 'css!./highlight'], function(Prism) { Prism.languages.actionscript = Prism.languages.extend('javascript', { 'keyword': /\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/, diff --git a/js/lib/prism/highlight.css b/js/lib/prism/highlight.css index 30ea294..e69de29 100644 --- a/js/lib/prism/highlight.css +++ b/js/lib/prism/highlight.css @@ -1,32 +0,0 @@ -@charset "UTF-8"; -/** - * - * @authors yutent (yutent@doui.cc) - * @date 2017-02-13 13:53:38 - * - */ - -/*代码块*/ -.do-ui-blockcode {position:relative;border:1px solid #ddd;margin:15px 0;} -.do-ui-blockcode::before {position:relative;display:block;width:100%;height:25px;padding:0 8px;background:#eee;border-bottom:1px solid #ddd;line-height:25px;content:"代码示例";box-sizing: border-box;} -.do-ui-blockcode section {position:relative;} -.do-ui-blockcode .linenum {display:block;position:absolute;z-index:1;left:0;top:0;width:40px;height:100%;background:#eee;border-right:1px solid #ddd;text-align:center;} - -/*语法高亮*/ -.do-ui-blockcode .lang {position:relative;display:block;overflow-x:auto;z-index:0;padding:0 8px 0 50px;color:#383a42;background:#fafafa;word-wrap:break-word;white-space:pre-wrap;} -.do-ui-blockcode .lang .c-comment{color: #8e908c;font-style:italic;} -.do-ui-blockcode .lang .c-smartyx {color: #607d8b;} -.do-ui-blockcode .lang .c-important {color: #f5871f;font-style:italic;} -.do-ui-blockcode .lang .c-punctuation {color: #986756;} -.do-ui-blockcode .lang .c-regex {color: #c82829;} -.do-ui-blockcode .lang .c-boolean,.do-ui-blockcode .lang .c-number {color: #f5871f;} -.do-ui-blockcode .lang .c-function {color:#009688;} -.do-ui-blockcode .lang .c-class-name,.do-ui-blockcode .lang .c-build-in {color:#3aa9f3;} -.do-ui-blockcode .lang .c-class-name,.do-ui-blockcode .lang .c-build-in {font-style:italic;font-weight:bold;} -.do-ui-blockcode .lang .c-attr-name {color: #eab700;} -.do-ui-blockcode .lang .c-string,.do-ui-blockcode .lang .c-attr-value {color: #5ab302;} -.do-ui-blockcode .lang .c-tag,.do-ui-blockcode .lang .c-keyword,.do-ui-blockcode .lang .c-operator {color: #d81406;} -.do-ui-blockcode .lang .c-keyword {font-style:italic;} - -/*行内代码*/ -.do-ui-inlinecode {margin:0 2px;padding:0 5px;color:#d14;border:1px solid #ddd;border-radius:3px;} \ No newline at end of file diff --git a/js/lib/prism/highlight.scss b/js/lib/prism/highlight.scss new file mode 100644 index 0000000..aab39b4 --- /dev/null +++ b/js/lib/prism/highlight.scss @@ -0,0 +1,49 @@ +@charset "UTF-8"; +/** + * + * @authors yutent (yutent@doui.cc) + * @date 2017-02-13 13:53:38 + * + */ + +/*代码块*/ +.do-ui-blockcode {position: relative;border: 1px solid #ddd;margin: 15px 0;padding: 8px 0;line-height: 1.5;background: #fafafa; + + + /*语法高亮*/ + .lang {position: relative;display: block;padding: 0 8px;color: #383a42;word-wrap: break-word;white-space: pre-wrap;font-family: Courier; + + .c-comment{color: #8e908c;font-style:italic;} + .c-smartyx {color: #607d8b;} + .c-important {color: #f5871f;font-style:italic;} + .c-punctuation {color: #986756;} + .c-regex {color: #c82829;} + + .c-boolean, + .c-number {color: #f5871f;} + .c-function {color:#009688;} + + .c-class-name, + .c-build-in {color:#3aa9f3;} + + .c-class-name, + .c-build-in {font-style:italic;font-weight:bold;} + + .c-attr-name, + .c-property {color: #c79f0f;font-weight:bold;} + + .c-property {font-style:italic;} + + .c-string, + .c-attr-value {color: #5ab302;} + + .c-tag, + .c-keyword, + .c-selector, + .c-operator {color: #d81406;} + + .c-keyword {font-style:italic;} + } +} +/*行内代码*/ +.do-ui-inlinecode {margin:0 2px;padding:0 5px;color:#d14;border:1px solid #ddd;border-radius:3px;} \ No newline at end of file diff --git a/js/lib/router/router.min.js b/js/lib/router/router.min.js index e69de29..99a30c8 100644 --- a/js/lib/router/router.min.js +++ b/js/lib/router/router.min.js @@ -0,0 +1 @@ +define(["yua"],function(){function t(){this.table={get:[]},this.errorFn=null,this.history=null,this.hash="",this.started=!1,this.init={}}function e(t){return!t||t===window.name||"_self"===t||"top"===t&&window==window.top}var r={prefix:/^(#!|#)[\/]?/,historyOpen:!0,allowReload:!0},i=!0,a=/(:id)|(\{id\})|(\{id:([A-z\d\,\[\]\{\}\-\+\*\?\!:\^\$]*)\})/g;return t.prototype={error:function(t){this.errorFn=t},config:function(t){if(this.started)return console.error("Router config has been set");this.started=!0,t.allowReload||(t.historyOpen=!0),this.init=yua.mix({},r,t)},_getRegExp:function(t,e){var r=t.replace(a,function(t,e,r,i,a){var n="([\\w.-]";return e||r?n+"+)":(/^\{[\d\,]+\}$/.test(a)||(n="("),n+a+")")});return r=r.replace(/(([^\\])([\/]+))/g,"$2\\/").replace(/(([^\\])([\.]+))/g,"$2\\.").replace(/(([^\\])([\-]+))/g,"$2\\-").replace(/(\(.*)(\\[\-]+)(.*\))/g,"$1-$3"),r="^"+r+"$",e.regexp=new RegExp(r),e},_add:function(t,e,r){this.started||this.config({});var i=this.table[t.toLowerCase()];if("/"===e.charAt(0)){e=e.replace(/^[\/]+|[\/]+$|\s+/g,"");var a={};a.rule=e,a.callback=r,yua.Array.ensure(i,this._getRegExp(e,a))}else console.error('char "/" must be in front of router rule')},_route:function(t,e){var e=e.trim(),r=this.table[t],i=this.init;if(i.allowReload||e!==this.history){i.historyOpen&&(this.history=e,yua.ls&&yua.ls("lastHash",e));for(var a,n=0;a=r[n++];){var o=e.match(a.regexp);if(o)return o.shift(),a.callback.apply(a,o)}this.errorFn&&this.errorFn(e)}},on:function(t,e){var r=this;Array.isArray(t)?t.forEach(function(t){r._add("get",t,e)}):this._add("get",t,e)}},yua.bind(window,"load",function(){if(yua.router.started){var t=yua.router.init.prefix,e=location.hash;e=e.replace(t,"").trim(),yua.router._route("get",e)}}),"onhashchange"in window&&window.addEventListener("hashchange",function(t){if(i){var e=yua.router.init.prefix,r=location.hash.replace(e,"").trim();yua.router._route("get",r)}}),yua.bind(document,"mousedown",function(t){if(!(("defaultPrevented"in t?t.defaultPrevented:!1===t.returnValue)||t.ctrlKey||t.metaKey||2===t.which)){for(var r=t.target;"A"!==r.nodeName;)if(!(r=r.parentNode)||"BODY"===r.tagName)return;if(e(r.target)){if(!yua.router.started)return;var a=r.getAttribute("href")||r.getAttribute("xlink:href"),n=yua.router.init.prefix;if(null===a||!n.test(a))return;yua.router.hash=a.replace(n,"").trim(),t.preventDefault(),location.hash=a,i=!1}}}),yua.bind(document,"mouseup",function(){i||(yua.router._route("get",yua.router.hash),i=!0)}),yua.ui.router="0.0.1",yua.router=new t}); \ No newline at end of file diff --git a/js/lib/tree/main.js b/js/lib/tree/main.js index d7c4e39..dff2f63 100644 --- a/js/lib/tree/main.js +++ b/js/lib/tree/main.js @@ -10,7 +10,7 @@ define(['yua', 'css!./skin/def.css'], function(){ //储存版本信息 - yua.ui.tree = '0.0.1' + yua.ui.tree = '0.0.2' var box = '
    {li}
', ul = '
    {li}
', @@ -18,6 +18,7 @@ define(['yua', 'css!./skin/def.css'], function(){ + '' + '' + '{child}'; + var keyPath = {}; function repeat(arr, name){ @@ -44,17 +45,17 @@ define(['yua', 'css!./skin/def.css'], function(){ }) arr.forEach(function(it){ tmp[it.id] = it + keyPath[it.id] = '' var parentItem = tmp[it.pid] - delete it.pid if(!parentItem){ return farr.push(tmp[it.id]) } + keyPath[it.id] += keyPath[parentItem.id] + parentItem.id + ',' parentItem.open = !!parentItem.open parentItem.children = parentItem.children || [] parentItem.children.push(it) }) - tmp = arr = null return farr } @@ -67,12 +68,44 @@ define(['yua', 'css!./skin/def.css'], function(){ vm.$onClick(obj) } } - vm.$update = function(arr){ + vm.$reset = function(arr){ vm.treeArr.clear() + vm.treeHTML = '' + vm.treeArr.pushArray(format(arr)) vm.currItem = -1 var tpl = repeat(vm.treeArr.$model, 'treeArr') - vm.treeHTML = box.replace('{li}', tpl) + yua.nextTick(function(){ + vm.treeHTML = box.replace('{li}', tpl) + }) + + } + vm.$update = function(id, obj){ + var path = keyPath[id], + tmpid = null, + tmpobj = null + + path += id + path = path.split(',') + + while(tmpid = +path.shift()){ + if(!tmpobj){ + tmpobj = vm.treeArr + }else{ + tmpobj = tmpobj.children + } + + for(var i = 0, it; it = tmpobj[i++];){ + if(it.id === tmpid){ + tmpobj = it + break + } + } + } + for(var j in obj){ + tmpobj[j] = obj[j] + } + } }, $ready: function(vm){ @@ -84,6 +117,7 @@ define(['yua', 'css!./skin/def.css'], function(){ treeArr: [], $select: yua.noop, $update: yua.noop, + $reset: yua.noop, $onSuccess: yua.noop, $onClick: yua.noop, $toggle: function(obj){ diff --git a/js/yua-touch.js b/js/yua-touch.js index 361cec6..4c01231 100644 --- a/js/yua-touch.js +++ b/js/yua-touch.js @@ -160,10 +160,6 @@ yua.type = function (obj) { //取得目标的类型 typeof obj } -yua.isFunction = function (fn) { - return serialize.call(fn) === "[object Function]" -} - /*判定是否是一个朴素的javascript对象(Object),不是DOM对象,不是BOM对象,不是自定义类的实例*/ yua.isPlainObject = function (obj) { @@ -208,7 +204,7 @@ yua.mix = yua.fn.mix = function () { } //确保接受方为一个复杂的数据类型 - if (typeof target !== "object" && !yua.isFunction(target)) { + if (typeof target !== "object" && yua.type(target) !== 'function') { target = {} } @@ -445,7 +441,7 @@ if(!Date.prototype.format){ { value: function(str){ str = str || 'Y-m-d H:i:s' - var week = ['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun'], + var week = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], dt = { 'fullyear': this.getFullYear(), 'year': this.getYear(), @@ -3051,7 +3047,7 @@ function scanAttr(elem, vmodels, match) { uuid: "_" + (++bindingID), priority: (directives[type].priority || type.charCodeAt(0) * 10) + (Number(param.replace(/\D/g, "")) || 0) } - if (type === "html" || type === "text") { + if (type === "html" || type === "text" || type === "attr") { var filters = getToken(value).filters binding.expr = binding.expr.replace(filters, "") @@ -3661,9 +3657,10 @@ var attrDir = yua.directive("attr", { //类名定义, :class="xx:yy" :class="{xx: yy}" :class="xx" :class="{{xx}}" yua.directive("class", { init: function (binding) { + var expr = []; if(!/^\{.*\}$/.test(binding.expr)){ - var expr = binding.expr.split(':') + expr = binding.expr.split(':') expr[1] = expr[1] && expr[1].trim() || 'true' var arr = expr[0].split(/\s+/) binding.expr = '{' + arr.map(function(it){ @@ -3686,16 +3683,16 @@ yua.directive("class", { activate = "mousedown" abandon = "mouseup" var fn0 = $elem.bind("mouseleave", function () { - binding.toggleClass && $elem.removeClass(binding.newClass) + $elem.removeClass(expr[0]) }) } } var fn1 = $elem.bind(activate, function () { - binding.toggleClass && $elem.addClass(binding.newClass) + $elem.addClass(expr[0]) }) var fn2 = $elem.bind(abandon, function () { - binding.toggleClass && $elem.removeClass(binding.newClass) + $elem.removeClass(expr[0]) }) binding.rollback = function () { $elem.unbind("mouseleave", fn0) @@ -3707,6 +3704,9 @@ yua.directive("class", { }, update: function (val) { + if(this.type !== 'class'){ + return + } var obj = val if(!obj || this.param) return log('class指令语法错误 %c %s="%s"', 'color:#f00', this.name, this.expr) @@ -4993,8 +4993,8 @@ yua.directive("repeat", { elem.removeAttribute(binding.name) effectBinding(elem, binding) binding.param = binding.param || "el" - binding.sortedCallback = getBindingCallback(elem, "data-with-sorted", binding.vmodels) - var rendered = getBindingCallback(elem, "data-" + type + "-rendered", binding.vmodels) + binding.sortedCallback = getBindingCallback(elem, "data-repeat-sortby", binding.vmodels) + var rendered = getBindingCallback(elem, "data-repeat-rendered", binding.vmodels) var signature = generateID(type) var start = DOC.createComment(signature + ":start") @@ -5002,19 +5002,12 @@ yua.directive("repeat", { binding.signature = signature binding.start = start binding.template = yuaFragment.cloneNode(false) - if (type === "repeat") { - var parent = elem.parentNode - parent.replaceChild(end, elem) - parent.insertBefore(start, end) - binding.template.appendChild(elem) - } else { - while (elem.firstChild) { - binding.template.appendChild(elem.firstChild) - } - elem.appendChild(start) - elem.appendChild(end) - parent = elem - } + + var parent = elem.parentNode + parent.replaceChild(end, elem) + parent.insertBefore(start, end) + binding.template.appendChild(elem) + binding.element = end if (rendered) { diff --git a/js/yua.js b/js/yua.js index e87c334..3f2c166 100644 --- a/js/yua.js +++ b/js/yua.js @@ -160,10 +160,6 @@ yua.type = function (obj) { //取得目标的类型 typeof obj } -yua.isFunction = function (fn) { - return serialize.call(fn) === "[object Function]" -} - /*判定是否是一个朴素的javascript对象(Object),不是DOM对象,不是BOM对象,不是自定义类的实例*/ yua.isPlainObject = function (obj) { @@ -207,7 +203,7 @@ yua.mix = yua.fn.mix = function () { } //确保接受方为一个复杂的数据类型 - if (typeof target !== "object" && !yua.isFunction(target)) { + if (typeof target !== "object" && yua.type(target) !== 'function') { target = {} } @@ -444,7 +440,7 @@ if(!Date.prototype.format){ { value: function(str){ str = str || 'Y-m-d H:i:s' - var week = ['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun'], + var week = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], dt = { 'fullyear': this.getFullYear(), 'year': this.getYear(), @@ -3050,7 +3046,7 @@ function scanAttr(elem, vmodels, match) { uuid: "_" + (++bindingID), priority: (directives[type].priority || type.charCodeAt(0) * 10) + (Number(param.replace(/\D/g, "")) || 0) } - if (type === "html" || type === "text") { + if (type === "html" || type === "text" || type === "attr") { var filters = getToken(value).filters binding.expr = binding.expr.replace(filters, "") @@ -3665,9 +3661,10 @@ var attrDir = yua.directive("attr", { //类名定义, :class="xx:yy" :class="{xx: yy}" :class="xx" :class="{{xx}}" yua.directive("class", { init: function (binding) { + var expr = []; if(!/^\{.*\}$/.test(binding.expr)){ - var expr = binding.expr.split(':') + expr = binding.expr.split(':') expr[1] = expr[1] && expr[1].trim() || 'true' var arr = expr[0].split(/\s+/) binding.expr = '{' + arr.map(function(it){ @@ -3690,16 +3687,16 @@ yua.directive("class", { activate = "mousedown" abandon = "mouseup" var fn0 = $elem.bind("mouseleave", function () { - binding.toggleClass && $elem.removeClass(binding.newClass) + $elem.removeClass(expr[0]) }) } } var fn1 = $elem.bind(activate, function () { - binding.toggleClass && $elem.addClass(binding.newClass) + $elem.addClass(expr[0]) }) var fn2 = $elem.bind(abandon, function () { - binding.toggleClass && $elem.removeClass(binding.newClass) + $elem.removeClass(expr[0]) }) binding.rollback = function () { $elem.unbind("mouseleave", fn0) @@ -3711,6 +3708,9 @@ yua.directive("class", { }, update: function (val) { + if(this.type !== 'class'){ + return + } var obj = val if(!obj || this.param) return log('class指令语法错误 %c %s="%s"', 'color:#f00', this.name, this.expr) @@ -4997,8 +4997,8 @@ yua.directive("repeat", { elem.removeAttribute(binding.name) effectBinding(elem, binding) binding.param = binding.param || "el" - binding.sortedCallback = getBindingCallback(elem, "data-with-sorted", binding.vmodels) - var rendered = getBindingCallback(elem, "data-" + type + "-rendered", binding.vmodels) + binding.sortedCallback = getBindingCallback(elem, "data-repeat-sortby", binding.vmodels) + var rendered = getBindingCallback(elem, "data-repeat-rendered", binding.vmodels) var signature = generateID(type) var start = DOC.createComment(signature + ":start") @@ -5006,19 +5006,12 @@ yua.directive("repeat", { binding.signature = signature binding.start = start binding.template = yuaFragment.cloneNode(false) - if (type === "repeat") { - var parent = elem.parentNode - parent.replaceChild(end, elem) - parent.insertBefore(start, end) - binding.template.appendChild(elem) - } else { - while (elem.firstChild) { - binding.template.appendChild(elem.firstChild) - } - elem.appendChild(start) - elem.appendChild(end) - parent = elem - } + + var parent = elem.parentNode + parent.replaceChild(end, elem) + parent.insertBefore(start, end) + binding.template.appendChild(elem) + binding.element = end if (rendered) {