Added Scrollview.
This commit is contained in:
		
							parent
							
								
									fada4f9a9d
								
							
						
					
					
						commit
						275a5d0b04
					
				
							
								
								
									
										8447
									
								
								dist/iwmlib.3rdparty.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8447
									
								
								dist/iwmlib.3rdparty.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/iwmlib.3rdparty.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/iwmlib.3rdparty.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										890
									
								
								dist/iwmlib.3rdparty.preload.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										890
									
								
								dist/iwmlib.3rdparty.preload.js
									
									
									
									
										vendored
									
									
								
							| @ -1,893 +1,3 @@ | |||||||
| /* |  | ||||||
| Syntax highlighting with language autodetection. |  | ||||||
| https://highlightjs.org/
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| (function(factory) { |  | ||||||
| 
 |  | ||||||
|   // Find the global object for export to both the browser and web workers.
 |  | ||||||
|   var globalObject = typeof window === 'object' && window || |  | ||||||
|                      typeof self === 'object' && self; |  | ||||||
| 
 |  | ||||||
|   // Setup highlight.js for different environments. First is Node.js or
 |  | ||||||
|   // CommonJS.
 |  | ||||||
|   if(typeof exports !== 'undefined') { |  | ||||||
|     factory(exports); |  | ||||||
|   } else if(globalObject) { |  | ||||||
|     // Export hljs globally even when using AMD for cases when this script
 |  | ||||||
|     // is loaded with others that may still expect a global hljs.
 |  | ||||||
|     globalObject.hljs = factory({}); |  | ||||||
| 
 |  | ||||||
|     // Finally register the global hljs with AMD.
 |  | ||||||
|     if(typeof define === 'function' && define.amd) { |  | ||||||
|       define([], function() { |  | ||||||
|         return globalObject.hljs; |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
| }(function(hljs) { |  | ||||||
|   // Convenience variables for build-in objects
 |  | ||||||
|   var ArrayProto = [], |  | ||||||
|       objectKeys = Object.keys; |  | ||||||
| 
 |  | ||||||
|   // Global internal variables used within the highlight.js library.
 |  | ||||||
|   var languages = {}, |  | ||||||
|       aliases   = {}; |  | ||||||
| 
 |  | ||||||
|   // Regular expressions used throughout the highlight.js library.
 |  | ||||||
|   var noHighlightRe    = /^(no-?highlight|plain|text)$/i, |  | ||||||
|       languagePrefixRe = /\blang(?:uage)?-([\w-]+)\b/i, |  | ||||||
|       fixMarkupRe      = /((^(<[^>]+>|\t|)+|(?:\n)))/gm; |  | ||||||
| 
 |  | ||||||
|   // The object will be assigned by the build tool. It used to synchronize API 
 |  | ||||||
|   // of external language files with minified version of the highlight.js library.
 |  | ||||||
|   var API_REPLACES; |  | ||||||
| 
 |  | ||||||
|   var spanEndTag = '</span>'; |  | ||||||
| 
 |  | ||||||
|   // Global options used when within external APIs. This is modified when
 |  | ||||||
|   // calling the `hljs.configure` function.
 |  | ||||||
|   var options = { |  | ||||||
|     classPrefix: 'hljs-', |  | ||||||
|     tabReplace: null, |  | ||||||
|     useBR: false, |  | ||||||
|     languages: undefined |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   /* Utility functions */ |  | ||||||
| 
 |  | ||||||
|   function escape(value) { |  | ||||||
|     return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function tag(node) { |  | ||||||
|     return node.nodeName.toLowerCase(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function testRe(re, lexeme) { |  | ||||||
|     var match = re && re.exec(lexeme); |  | ||||||
|     return match && match.index === 0; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function isNotHighlighted(language) { |  | ||||||
|     return noHighlightRe.test(language); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function blockLanguage(block) { |  | ||||||
|     var i, match, length, _class; |  | ||||||
|     var classes = block.className + ' '; |  | ||||||
| 
 |  | ||||||
|     classes += block.parentNode ? block.parentNode.className : ''; |  | ||||||
| 
 |  | ||||||
|     // language-* takes precedence over non-prefixed class names.
 |  | ||||||
|     match = languagePrefixRe.exec(classes); |  | ||||||
|     if (match) { |  | ||||||
|       return getLanguage(match[1]) ? match[1] : 'no-highlight'; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     classes = classes.split(/\s+/); |  | ||||||
| 
 |  | ||||||
|     for (i = 0, length = classes.length; i < length; i++) { |  | ||||||
|       _class = classes[i]; |  | ||||||
| 
 |  | ||||||
|       if (isNotHighlighted(_class) || getLanguage(_class)) { |  | ||||||
|         return _class; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function inherit(parent) {  // inherit(parent, override_obj, override_obj, ...)
 |  | ||||||
|     var key; |  | ||||||
|     var result = {}; |  | ||||||
|     var objects = Array.prototype.slice.call(arguments, 1); |  | ||||||
| 
 |  | ||||||
|     for (key in parent) |  | ||||||
|       result[key] = parent[key]; |  | ||||||
|     objects.forEach(function(obj) { |  | ||||||
|       for (key in obj) |  | ||||||
|         result[key] = obj[key]; |  | ||||||
|     }); |  | ||||||
|     return result; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* Stream merging */ |  | ||||||
| 
 |  | ||||||
|   function nodeStream(node) { |  | ||||||
|     var result = []; |  | ||||||
|     (function _nodeStream(node, offset) { |  | ||||||
|       for (var child = node.firstChild; child; child = child.nextSibling) { |  | ||||||
|         if (child.nodeType === 3) |  | ||||||
|           offset += child.nodeValue.length; |  | ||||||
|         else if (child.nodeType === 1) { |  | ||||||
|           result.push({ |  | ||||||
|             event: 'start', |  | ||||||
|             offset: offset, |  | ||||||
|             node: child |  | ||||||
|           }); |  | ||||||
|           offset = _nodeStream(child, offset); |  | ||||||
|           // Prevent void elements from having an end tag that would actually
 |  | ||||||
|           // double them in the output. There are more void elements in HTML
 |  | ||||||
|           // but we list only those realistically expected in code display.
 |  | ||||||
|           if (!tag(child).match(/br|hr|img|input/)) { |  | ||||||
|             result.push({ |  | ||||||
|               event: 'stop', |  | ||||||
|               offset: offset, |  | ||||||
|               node: child |  | ||||||
|             }); |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       return offset; |  | ||||||
|     })(node, 0); |  | ||||||
|     return result; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function mergeStreams(original, highlighted, value) { |  | ||||||
|     var processed = 0; |  | ||||||
|     var result = ''; |  | ||||||
|     var nodeStack = []; |  | ||||||
| 
 |  | ||||||
|     function selectStream() { |  | ||||||
|       if (!original.length || !highlighted.length) { |  | ||||||
|         return original.length ? original : highlighted; |  | ||||||
|       } |  | ||||||
|       if (original[0].offset !== highlighted[0].offset) { |  | ||||||
|         return (original[0].offset < highlighted[0].offset) ? original : highlighted; |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       /* |  | ||||||
|       To avoid starting the stream just before it should stop the order is |  | ||||||
|       ensured that original always starts first and closes last: |  | ||||||
| 
 |  | ||||||
|       if (event1 == 'start' && event2 == 'start') |  | ||||||
|         return original; |  | ||||||
|       if (event1 == 'start' && event2 == 'stop') |  | ||||||
|         return highlighted; |  | ||||||
|       if (event1 == 'stop' && event2 == 'start') |  | ||||||
|         return original; |  | ||||||
|       if (event1 == 'stop' && event2 == 'stop') |  | ||||||
|         return highlighted; |  | ||||||
| 
 |  | ||||||
|       ... which is collapsed to: |  | ||||||
|       */ |  | ||||||
|       return highlighted[0].event === 'start' ? original : highlighted; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function open(node) { |  | ||||||
|       function attr_str(a) {return ' ' + a.nodeName + '="' + escape(a.value).replace('"', '"') + '"';} |  | ||||||
|       result += '<' + tag(node) + ArrayProto.map.call(node.attributes, attr_str).join('') + '>'; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function close(node) { |  | ||||||
|       result += '</' + tag(node) + '>'; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function render(event) { |  | ||||||
|       (event.event === 'start' ? open : close)(event.node); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     while (original.length || highlighted.length) { |  | ||||||
|       var stream = selectStream(); |  | ||||||
|       result += escape(value.substring(processed, stream[0].offset)); |  | ||||||
|       processed = stream[0].offset; |  | ||||||
|       if (stream === original) { |  | ||||||
|         /* |  | ||||||
|         On any opening or closing tag of the original markup we first close |  | ||||||
|         the entire highlighted node stack, then render the original tag along |  | ||||||
|         with all the following original tags at the same offset and then |  | ||||||
|         reopen all the tags on the highlighted stack. |  | ||||||
|         */ |  | ||||||
|         nodeStack.reverse().forEach(close); |  | ||||||
|         do { |  | ||||||
|           render(stream.splice(0, 1)[0]); |  | ||||||
|           stream = selectStream(); |  | ||||||
|         } while (stream === original && stream.length && stream[0].offset === processed); |  | ||||||
|         nodeStack.reverse().forEach(open); |  | ||||||
|       } else { |  | ||||||
|         if (stream[0].event === 'start') { |  | ||||||
|           nodeStack.push(stream[0].node); |  | ||||||
|         } else { |  | ||||||
|           nodeStack.pop(); |  | ||||||
|         } |  | ||||||
|         render(stream.splice(0, 1)[0]); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     return result + escape(value.substr(processed)); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* Initialization */ |  | ||||||
| 
 |  | ||||||
|   function expand_mode(mode) { |  | ||||||
|     if (mode.variants && !mode.cached_variants) { |  | ||||||
|       mode.cached_variants = mode.variants.map(function(variant) { |  | ||||||
|         return inherit(mode, {variants: null}, variant); |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
|     return mode.cached_variants || (mode.endsWithParent && [inherit(mode)]) || [mode]; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function restoreLanguageApi(obj) { |  | ||||||
|     if(API_REPLACES && !obj.langApiRestored) { |  | ||||||
|       obj.langApiRestored = true; |  | ||||||
|       for(var key in API_REPLACES) |  | ||||||
|         obj[key] && (obj[API_REPLACES[key]] = obj[key]); |  | ||||||
|       (obj.contains || []).concat(obj.variants || []).forEach(restoreLanguageApi); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function compileLanguage(language) { |  | ||||||
| 
 |  | ||||||
|     function reStr(re) { |  | ||||||
|         return (re && re.source) || re; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function langRe(value, global) { |  | ||||||
|       return new RegExp( |  | ||||||
|         reStr(value), |  | ||||||
|         'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '') |  | ||||||
|       ); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // joinRe logically computes regexps.join(separator), but fixes the
 |  | ||||||
|     // backreferences so they continue to match.
 |  | ||||||
|     function joinRe(regexps, separator) { |  | ||||||
|       // backreferenceRe matches an open parenthesis or backreference. To avoid
 |  | ||||||
|       // an incorrect parse, it additionally matches the following:
 |  | ||||||
|       // - [...] elements, where the meaning of parentheses and escapes change
 |  | ||||||
|       // - other escape sequences, so we do not misparse escape sequences as
 |  | ||||||
|       //   interesting elements
 |  | ||||||
|       // - non-matching or lookahead parentheses, which do not capture. These
 |  | ||||||
|       //   follow the '(' with a '?'.
 |  | ||||||
|       var backreferenceRe = /\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./; |  | ||||||
|       var numCaptures = 0; |  | ||||||
|       var ret = ''; |  | ||||||
|       for (var i = 0; i < regexps.length; i++) { |  | ||||||
|         var offset = numCaptures; |  | ||||||
|         var re = reStr(regexps[i]); |  | ||||||
|         if (i > 0) { |  | ||||||
|           ret += separator; |  | ||||||
|         } |  | ||||||
|         while (re.length > 0) { |  | ||||||
|           var match = backreferenceRe.exec(re); |  | ||||||
|           if (match == null) { |  | ||||||
|             ret += re; |  | ||||||
|             break; |  | ||||||
|           } |  | ||||||
|           ret += re.substring(0, match.index); |  | ||||||
|           re = re.substring(match.index + match[0].length); |  | ||||||
|           if (match[0][0] == '\\' && match[1]) { |  | ||||||
|             // Adjust the backreference.
 |  | ||||||
|             ret += '\\' + String(Number(match[1]) + offset); |  | ||||||
|           } else { |  | ||||||
|             ret += match[0]; |  | ||||||
|             if (match[0] == '(') { |  | ||||||
|               numCaptures++; |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       return ret; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function compileMode(mode, parent) { |  | ||||||
|       if (mode.compiled) |  | ||||||
|         return; |  | ||||||
|       mode.compiled = true; |  | ||||||
| 
 |  | ||||||
|       mode.keywords = mode.keywords || mode.beginKeywords; |  | ||||||
|       if (mode.keywords) { |  | ||||||
|         var compiled_keywords = {}; |  | ||||||
| 
 |  | ||||||
|         var flatten = function(className, str) { |  | ||||||
|           if (language.case_insensitive) { |  | ||||||
|             str = str.toLowerCase(); |  | ||||||
|           } |  | ||||||
|           str.split(' ').forEach(function(kw) { |  | ||||||
|             var pair = kw.split('|'); |  | ||||||
|             compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1]; |  | ||||||
|           }); |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         if (typeof mode.keywords === 'string') { // string
 |  | ||||||
|           flatten('keyword', mode.keywords); |  | ||||||
|         } else { |  | ||||||
|           objectKeys(mode.keywords).forEach(function (className) { |  | ||||||
|             flatten(className, mode.keywords[className]); |  | ||||||
|           }); |  | ||||||
|         } |  | ||||||
|         mode.keywords = compiled_keywords; |  | ||||||
|       } |  | ||||||
|       mode.lexemesRe = langRe(mode.lexemes || /\w+/, true); |  | ||||||
| 
 |  | ||||||
|       if (parent) { |  | ||||||
|         if (mode.beginKeywords) { |  | ||||||
|           mode.begin = '\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\b'; |  | ||||||
|         } |  | ||||||
|         if (!mode.begin) |  | ||||||
|           mode.begin = /\B|\b/; |  | ||||||
|         mode.beginRe = langRe(mode.begin); |  | ||||||
|         if (mode.endSameAsBegin) |  | ||||||
|           mode.end = mode.begin; |  | ||||||
|         if (!mode.end && !mode.endsWithParent) |  | ||||||
|           mode.end = /\B|\b/; |  | ||||||
|         if (mode.end) |  | ||||||
|           mode.endRe = langRe(mode.end); |  | ||||||
|         mode.terminator_end = reStr(mode.end) || ''; |  | ||||||
|         if (mode.endsWithParent && parent.terminator_end) |  | ||||||
|           mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end; |  | ||||||
|       } |  | ||||||
|       if (mode.illegal) |  | ||||||
|         mode.illegalRe = langRe(mode.illegal); |  | ||||||
|       if (mode.relevance == null) |  | ||||||
|         mode.relevance = 1; |  | ||||||
|       if (!mode.contains) { |  | ||||||
|         mode.contains = []; |  | ||||||
|       } |  | ||||||
|       mode.contains = Array.prototype.concat.apply([], mode.contains.map(function(c) { |  | ||||||
|         return expand_mode(c === 'self' ? mode : c); |  | ||||||
|       })); |  | ||||||
|       mode.contains.forEach(function(c) {compileMode(c, mode);}); |  | ||||||
| 
 |  | ||||||
|       if (mode.starts) { |  | ||||||
|         compileMode(mode.starts, parent); |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       var terminators = |  | ||||||
|         mode.contains.map(function(c) { |  | ||||||
|           return c.beginKeywords ? '\\.?(?:' + c.begin + ')\\.?' : c.begin; |  | ||||||
|         }) |  | ||||||
|         .concat([mode.terminator_end, mode.illegal]) |  | ||||||
|         .map(reStr) |  | ||||||
|         .filter(Boolean); |  | ||||||
|       mode.terminators = terminators.length ? langRe(joinRe(terminators, '|'), true) : {exec: function(/*s*/) {return null;}}; |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     compileMode(language); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* |  | ||||||
|   Core highlighting function. Accepts a language name, or an alias, and a |  | ||||||
|   string with the code to highlight. Returns an object with the following |  | ||||||
|   properties: |  | ||||||
| 
 |  | ||||||
|   - relevance (int) |  | ||||||
|   - value (an HTML string with highlighting markup) |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   function highlight(name, value, ignore_illegals, continuation) { |  | ||||||
| 
 |  | ||||||
|     function escapeRe(value) { |  | ||||||
|       return new RegExp(value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'm'); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function subMode(lexeme, mode) { |  | ||||||
|       var i, length; |  | ||||||
| 
 |  | ||||||
|       for (i = 0, length = mode.contains.length; i < length; i++) { |  | ||||||
|         if (testRe(mode.contains[i].beginRe, lexeme)) { |  | ||||||
|           if (mode.contains[i].endSameAsBegin) { |  | ||||||
|             mode.contains[i].endRe = escapeRe( mode.contains[i].beginRe.exec(lexeme)[0] ); |  | ||||||
|           } |  | ||||||
|           return mode.contains[i]; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function endOfMode(mode, lexeme) { |  | ||||||
|       if (testRe(mode.endRe, lexeme)) { |  | ||||||
|         while (mode.endsParent && mode.parent) { |  | ||||||
|           mode = mode.parent; |  | ||||||
|         } |  | ||||||
|         return mode; |  | ||||||
|       } |  | ||||||
|       if (mode.endsWithParent) { |  | ||||||
|         return endOfMode(mode.parent, lexeme); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function isIllegal(lexeme, mode) { |  | ||||||
|       return !ignore_illegals && testRe(mode.illegalRe, lexeme); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function keywordMatch(mode, match) { |  | ||||||
|       var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0]; |  | ||||||
|       return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function buildSpan(classname, insideSpan, leaveOpen, noPrefix) { |  | ||||||
|       var classPrefix = noPrefix ? '' : options.classPrefix, |  | ||||||
|           openSpan    = '<span class="' + classPrefix, |  | ||||||
|           closeSpan   = leaveOpen ? '' : spanEndTag; |  | ||||||
| 
 |  | ||||||
|       openSpan += classname + '">'; |  | ||||||
| 
 |  | ||||||
|       return openSpan + insideSpan + closeSpan; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function processKeywords() { |  | ||||||
|       var keyword_match, last_index, match, result; |  | ||||||
| 
 |  | ||||||
|       if (!top.keywords) |  | ||||||
|         return escape(mode_buffer); |  | ||||||
| 
 |  | ||||||
|       result = ''; |  | ||||||
|       last_index = 0; |  | ||||||
|       top.lexemesRe.lastIndex = 0; |  | ||||||
|       match = top.lexemesRe.exec(mode_buffer); |  | ||||||
| 
 |  | ||||||
|       while (match) { |  | ||||||
|         result += escape(mode_buffer.substring(last_index, match.index)); |  | ||||||
|         keyword_match = keywordMatch(top, match); |  | ||||||
|         if (keyword_match) { |  | ||||||
|           relevance += keyword_match[1]; |  | ||||||
|           result += buildSpan(keyword_match[0], escape(match[0])); |  | ||||||
|         } else { |  | ||||||
|           result += escape(match[0]); |  | ||||||
|         } |  | ||||||
|         last_index = top.lexemesRe.lastIndex; |  | ||||||
|         match = top.lexemesRe.exec(mode_buffer); |  | ||||||
|       } |  | ||||||
|       return result + escape(mode_buffer.substr(last_index)); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function processSubLanguage() { |  | ||||||
|       var explicit = typeof top.subLanguage === 'string'; |  | ||||||
|       if (explicit && !languages[top.subLanguage]) { |  | ||||||
|         return escape(mode_buffer); |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       var result = explicit ? |  | ||||||
|                    highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) : |  | ||||||
|                    highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined); |  | ||||||
| 
 |  | ||||||
|       // Counting embedded language score towards the host language may be disabled
 |  | ||||||
|       // with zeroing the containing mode relevance. Usecase in point is Markdown that
 |  | ||||||
|       // allows XML everywhere and makes every XML snippet to have a much larger Markdown
 |  | ||||||
|       // score.
 |  | ||||||
|       if (top.relevance > 0) { |  | ||||||
|         relevance += result.relevance; |  | ||||||
|       } |  | ||||||
|       if (explicit) { |  | ||||||
|         continuations[top.subLanguage] = result.top; |  | ||||||
|       } |  | ||||||
|       return buildSpan(result.language, result.value, false, true); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function processBuffer() { |  | ||||||
|       result += (top.subLanguage != null ? processSubLanguage() : processKeywords()); |  | ||||||
|       mode_buffer = ''; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function startNewMode(mode) { |  | ||||||
|       result += mode.className? buildSpan(mode.className, '', true): ''; |  | ||||||
|       top = Object.create(mode, {parent: {value: top}}); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function processLexeme(buffer, lexeme) { |  | ||||||
| 
 |  | ||||||
|       mode_buffer += buffer; |  | ||||||
| 
 |  | ||||||
|       if (lexeme == null) { |  | ||||||
|         processBuffer(); |  | ||||||
|         return 0; |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       var new_mode = subMode(lexeme, top); |  | ||||||
|       if (new_mode) { |  | ||||||
|         if (new_mode.skip) { |  | ||||||
|           mode_buffer += lexeme; |  | ||||||
|         } else { |  | ||||||
|           if (new_mode.excludeBegin) { |  | ||||||
|             mode_buffer += lexeme; |  | ||||||
|           } |  | ||||||
|           processBuffer(); |  | ||||||
|           if (!new_mode.returnBegin && !new_mode.excludeBegin) { |  | ||||||
|             mode_buffer = lexeme; |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|         startNewMode(new_mode, lexeme); |  | ||||||
|         return new_mode.returnBegin ? 0 : lexeme.length; |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       var end_mode = endOfMode(top, lexeme); |  | ||||||
|       if (end_mode) { |  | ||||||
|         var origin = top; |  | ||||||
|         if (origin.skip) { |  | ||||||
|           mode_buffer += lexeme; |  | ||||||
|         } else { |  | ||||||
|           if (!(origin.returnEnd || origin.excludeEnd)) { |  | ||||||
|             mode_buffer += lexeme; |  | ||||||
|           } |  | ||||||
|           processBuffer(); |  | ||||||
|           if (origin.excludeEnd) { |  | ||||||
|             mode_buffer = lexeme; |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|         do { |  | ||||||
|           if (top.className) { |  | ||||||
|             result += spanEndTag; |  | ||||||
|           } |  | ||||||
|           if (!top.skip && !top.subLanguage) { |  | ||||||
|             relevance += top.relevance; |  | ||||||
|           } |  | ||||||
|           top = top.parent; |  | ||||||
|         } while (top !== end_mode.parent); |  | ||||||
|         if (end_mode.starts) { |  | ||||||
|           if (end_mode.endSameAsBegin) { |  | ||||||
|             end_mode.starts.endRe = end_mode.endRe; |  | ||||||
|           } |  | ||||||
|           startNewMode(end_mode.starts, ''); |  | ||||||
|         } |  | ||||||
|         return origin.returnEnd ? 0 : lexeme.length; |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       if (isIllegal(lexeme, top)) |  | ||||||
|         throw new Error('Illegal lexeme "' + lexeme + '" for mode "' + (top.className || '<unnamed>') + '"'); |  | ||||||
| 
 |  | ||||||
|       /* |  | ||||||
|       Parser should not reach this point as all types of lexemes should be caught |  | ||||||
|       earlier, but if it does due to some bug make sure it advances at least one |  | ||||||
|       character forward to prevent infinite looping. |  | ||||||
|       */ |  | ||||||
|       mode_buffer += lexeme; |  | ||||||
|       return lexeme.length || 1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     var language = getLanguage(name); |  | ||||||
|     if (!language) { |  | ||||||
|       throw new Error('Unknown language: "' + name + '"'); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     compileLanguage(language); |  | ||||||
|     var top = continuation || language; |  | ||||||
|     var continuations = {}; // keep continuations for sub-languages
 |  | ||||||
|     var result = '', current; |  | ||||||
|     for(current = top; current !== language; current = current.parent) { |  | ||||||
|       if (current.className) { |  | ||||||
|         result = buildSpan(current.className, '', true) + result; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     var mode_buffer = ''; |  | ||||||
|     var relevance = 0; |  | ||||||
|     try { |  | ||||||
|       var match, count, index = 0; |  | ||||||
|       while (true) { |  | ||||||
|         top.terminators.lastIndex = index; |  | ||||||
|         match = top.terminators.exec(value); |  | ||||||
|         if (!match) |  | ||||||
|           break; |  | ||||||
|         count = processLexeme(value.substring(index, match.index), match[0]); |  | ||||||
|         index = match.index + count; |  | ||||||
|       } |  | ||||||
|       processLexeme(value.substr(index)); |  | ||||||
|       for(current = top; current.parent; current = current.parent) { // close dangling modes
 |  | ||||||
|         if (current.className) { |  | ||||||
|           result += spanEndTag; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       return { |  | ||||||
|         relevance: relevance, |  | ||||||
|         value: result, |  | ||||||
|         language: name, |  | ||||||
|         top: top |  | ||||||
|       }; |  | ||||||
|     } catch (e) { |  | ||||||
|       if (e.message && e.message.indexOf('Illegal') !== -1) { |  | ||||||
|         return { |  | ||||||
|           relevance: 0, |  | ||||||
|           value: escape(value) |  | ||||||
|         }; |  | ||||||
|       } else { |  | ||||||
|         throw e; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* |  | ||||||
|   Highlighting with language detection. Accepts a string with the code to |  | ||||||
|   highlight. Returns an object with the following properties: |  | ||||||
| 
 |  | ||||||
|   - language (detected language) |  | ||||||
|   - relevance (int) |  | ||||||
|   - value (an HTML string with highlighting markup) |  | ||||||
|   - second_best (object with the same structure for second-best heuristically |  | ||||||
|     detected language, may be absent) |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   function highlightAuto(text, languageSubset) { |  | ||||||
|     languageSubset = languageSubset || options.languages || objectKeys(languages); |  | ||||||
|     var result = { |  | ||||||
|       relevance: 0, |  | ||||||
|       value: escape(text) |  | ||||||
|     }; |  | ||||||
|     var second_best = result; |  | ||||||
|     languageSubset.filter(getLanguage).filter(autoDetection).forEach(function(name) { |  | ||||||
|       var current = highlight(name, text, false); |  | ||||||
|       current.language = name; |  | ||||||
|       if (current.relevance > second_best.relevance) { |  | ||||||
|         second_best = current; |  | ||||||
|       } |  | ||||||
|       if (current.relevance > result.relevance) { |  | ||||||
|         second_best = result; |  | ||||||
|         result = current; |  | ||||||
|       } |  | ||||||
|     }); |  | ||||||
|     if (second_best.language) { |  | ||||||
|       result.second_best = second_best; |  | ||||||
|     } |  | ||||||
|     return result; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* |  | ||||||
|   Post-processing of the highlighted markup: |  | ||||||
| 
 |  | ||||||
|   - replace TABs with something more useful |  | ||||||
|   - replace real line-breaks with '<br>' for non-pre containers |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   function fixMarkup(value) { |  | ||||||
|     return !(options.tabReplace || options.useBR) |  | ||||||
|       ? value |  | ||||||
|       : value.replace(fixMarkupRe, function(match, p1) { |  | ||||||
|           if (options.useBR && match === '\n') { |  | ||||||
|             return '<br>'; |  | ||||||
|           } else if (options.tabReplace) { |  | ||||||
|             return p1.replace(/\t/g, options.tabReplace); |  | ||||||
|           } |  | ||||||
|           return ''; |  | ||||||
|       }); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function buildClassName(prevClassName, currentLang, resultLang) { |  | ||||||
|     var language = currentLang ? aliases[currentLang] : resultLang, |  | ||||||
|         result   = [prevClassName.trim()]; |  | ||||||
| 
 |  | ||||||
|     if (!prevClassName.match(/\bhljs\b/)) { |  | ||||||
|       result.push('hljs'); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (prevClassName.indexOf(language) === -1) { |  | ||||||
|       result.push(language); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return result.join(' ').trim(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* |  | ||||||
|   Applies highlighting to a DOM node containing code. Accepts a DOM node and |  | ||||||
|   two optional parameters for fixMarkup. |  | ||||||
|   */ |  | ||||||
|   function highlightBlock(block) { |  | ||||||
|     var node, originalStream, result, resultNode, text; |  | ||||||
|     var language = blockLanguage(block); |  | ||||||
| 
 |  | ||||||
|     if (isNotHighlighted(language)) |  | ||||||
|         return; |  | ||||||
| 
 |  | ||||||
|     if (options.useBR) { |  | ||||||
|       node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div'); |  | ||||||
|       node.innerHTML = block.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n'); |  | ||||||
|     } else { |  | ||||||
|       node = block; |  | ||||||
|     } |  | ||||||
|     text = node.textContent; |  | ||||||
|     result = language ? highlight(language, text, true) : highlightAuto(text); |  | ||||||
| 
 |  | ||||||
|     originalStream = nodeStream(node); |  | ||||||
|     if (originalStream.length) { |  | ||||||
|       resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div'); |  | ||||||
|       resultNode.innerHTML = result.value; |  | ||||||
|       result.value = mergeStreams(originalStream, nodeStream(resultNode), text); |  | ||||||
|     } |  | ||||||
|     result.value = fixMarkup(result.value); |  | ||||||
| 
 |  | ||||||
|     block.innerHTML = result.value; |  | ||||||
|     block.className = buildClassName(block.className, language, result.language); |  | ||||||
|     block.result = { |  | ||||||
|       language: result.language, |  | ||||||
|       re: result.relevance |  | ||||||
|     }; |  | ||||||
|     if (result.second_best) { |  | ||||||
|       block.second_best = { |  | ||||||
|         language: result.second_best.language, |  | ||||||
|         re: result.second_best.relevance |  | ||||||
|       }; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* |  | ||||||
|   Updates highlight.js global options with values passed in the form of an object. |  | ||||||
|   */ |  | ||||||
|   function configure(user_options) { |  | ||||||
|     options = inherit(options, user_options); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* |  | ||||||
|   Applies highlighting to all <pre><code>..</code></pre> blocks on a page. |  | ||||||
|   */ |  | ||||||
|   function initHighlighting() { |  | ||||||
|     if (initHighlighting.called) |  | ||||||
|       return; |  | ||||||
|     initHighlighting.called = true; |  | ||||||
| 
 |  | ||||||
|     var blocks = document.querySelectorAll('pre code'); |  | ||||||
|     ArrayProto.forEach.call(blocks, highlightBlock); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* |  | ||||||
|   Attaches highlighting to the page load event. |  | ||||||
|   */ |  | ||||||
|   function initHighlightingOnLoad() { |  | ||||||
|     addEventListener('DOMContentLoaded', initHighlighting, false); |  | ||||||
|     addEventListener('load', initHighlighting, false); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function registerLanguage(name, language) { |  | ||||||
|     var lang = languages[name] = language(hljs); |  | ||||||
|     restoreLanguageApi(lang); |  | ||||||
|     if (lang.aliases) { |  | ||||||
|       lang.aliases.forEach(function(alias) {aliases[alias] = name;}); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function listLanguages() { |  | ||||||
|     return objectKeys(languages); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function getLanguage(name) { |  | ||||||
|     name = (name || '').toLowerCase(); |  | ||||||
|     return languages[name] || languages[aliases[name]]; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function autoDetection(name) { |  | ||||||
|     var lang = getLanguage(name); |  | ||||||
|     return lang && !lang.disableAutodetect; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* Interface definition */ |  | ||||||
| 
 |  | ||||||
|   hljs.highlight = highlight; |  | ||||||
|   hljs.highlightAuto = highlightAuto; |  | ||||||
|   hljs.fixMarkup = fixMarkup; |  | ||||||
|   hljs.highlightBlock = highlightBlock; |  | ||||||
|   hljs.configure = configure; |  | ||||||
|   hljs.initHighlighting = initHighlighting; |  | ||||||
|   hljs.initHighlightingOnLoad = initHighlightingOnLoad; |  | ||||||
|   hljs.registerLanguage = registerLanguage; |  | ||||||
|   hljs.listLanguages = listLanguages; |  | ||||||
|   hljs.getLanguage = getLanguage; |  | ||||||
|   hljs.autoDetection = autoDetection; |  | ||||||
|   hljs.inherit = inherit; |  | ||||||
| 
 |  | ||||||
|   // Common regexps
 |  | ||||||
|   hljs.IDENT_RE = '[a-zA-Z]\\w*'; |  | ||||||
|   hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*'; |  | ||||||
|   hljs.NUMBER_RE = '\\b\\d+(\\.\\d+)?'; |  | ||||||
|   hljs.C_NUMBER_RE = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float
 |  | ||||||
|   hljs.BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b...
 |  | ||||||
|   hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~'; |  | ||||||
| 
 |  | ||||||
|   // Common modes
 |  | ||||||
|   hljs.BACKSLASH_ESCAPE = { |  | ||||||
|     begin: '\\\\[\\s\\S]', relevance: 0 |  | ||||||
|   }; |  | ||||||
|   hljs.APOS_STRING_MODE = { |  | ||||||
|     className: 'string', |  | ||||||
|     begin: '\'', end: '\'', |  | ||||||
|     illegal: '\\n', |  | ||||||
|     contains: [hljs.BACKSLASH_ESCAPE] |  | ||||||
|   }; |  | ||||||
|   hljs.QUOTE_STRING_MODE = { |  | ||||||
|     className: 'string', |  | ||||||
|     begin: '"', end: '"', |  | ||||||
|     illegal: '\\n', |  | ||||||
|     contains: [hljs.BACKSLASH_ESCAPE] |  | ||||||
|   }; |  | ||||||
|   hljs.PHRASAL_WORDS_MODE = { |  | ||||||
|     begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ |  | ||||||
|   }; |  | ||||||
|   hljs.COMMENT = function (begin, end, inherits) { |  | ||||||
|     var mode = hljs.inherit( |  | ||||||
|       { |  | ||||||
|         className: 'comment', |  | ||||||
|         begin: begin, end: end, |  | ||||||
|         contains: [] |  | ||||||
|       }, |  | ||||||
|       inherits || {} |  | ||||||
|     ); |  | ||||||
|     mode.contains.push(hljs.PHRASAL_WORDS_MODE); |  | ||||||
|     mode.contains.push({ |  | ||||||
|       className: 'doctag', |  | ||||||
|       begin: '(?:TODO|FIXME|NOTE|BUG|XXX):', |  | ||||||
|       relevance: 0 |  | ||||||
|     }); |  | ||||||
|     return mode; |  | ||||||
|   }; |  | ||||||
|   hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$'); |  | ||||||
|   hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\*', '\\*/'); |  | ||||||
|   hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$'); |  | ||||||
|   hljs.NUMBER_MODE = { |  | ||||||
|     className: 'number', |  | ||||||
|     begin: hljs.NUMBER_RE, |  | ||||||
|     relevance: 0 |  | ||||||
|   }; |  | ||||||
|   hljs.C_NUMBER_MODE = { |  | ||||||
|     className: 'number', |  | ||||||
|     begin: hljs.C_NUMBER_RE, |  | ||||||
|     relevance: 0 |  | ||||||
|   }; |  | ||||||
|   hljs.BINARY_NUMBER_MODE = { |  | ||||||
|     className: 'number', |  | ||||||
|     begin: hljs.BINARY_NUMBER_RE, |  | ||||||
|     relevance: 0 |  | ||||||
|   }; |  | ||||||
|   hljs.CSS_NUMBER_MODE = { |  | ||||||
|     className: 'number', |  | ||||||
|     begin: hljs.NUMBER_RE + '(' + |  | ||||||
|       '%|em|ex|ch|rem'  + |  | ||||||
|       '|vw|vh|vmin|vmax' + |  | ||||||
|       '|cm|mm|in|pt|pc|px' + |  | ||||||
|       '|deg|grad|rad|turn' + |  | ||||||
|       '|s|ms' + |  | ||||||
|       '|Hz|kHz' + |  | ||||||
|       '|dpi|dpcm|dppx' + |  | ||||||
|       ')?', |  | ||||||
|     relevance: 0 |  | ||||||
|   }; |  | ||||||
|   hljs.REGEXP_MODE = { |  | ||||||
|     className: 'regexp', |  | ||||||
|     begin: /\//, end: /\/[gimuy]*/, |  | ||||||
|     illegal: /\n/, |  | ||||||
|     contains: [ |  | ||||||
|       hljs.BACKSLASH_ESCAPE, |  | ||||||
|       { |  | ||||||
|         begin: /\[/, end: /\]/, |  | ||||||
|         relevance: 0, |  | ||||||
|         contains: [hljs.BACKSLASH_ESCAPE] |  | ||||||
|       } |  | ||||||
|     ] |  | ||||||
|   }; |  | ||||||
|   hljs.TITLE_MODE = { |  | ||||||
|     className: 'title', |  | ||||||
|     begin: hljs.IDENT_RE, |  | ||||||
|     relevance: 0 |  | ||||||
|   }; |  | ||||||
|   hljs.UNDERSCORE_TITLE_MODE = { |  | ||||||
|     className: 'title', |  | ||||||
|     begin: hljs.UNDERSCORE_IDENT_RE, |  | ||||||
|     relevance: 0 |  | ||||||
|   }; |  | ||||||
|   hljs.METHOD_GUARD = { |  | ||||||
|     // excludes method names from keyword processing
 |  | ||||||
|     begin: '\\.\\s*' + hljs.UNDERSCORE_IDENT_RE, |  | ||||||
|     relevance: 0 |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   return hljs; |  | ||||||
| })); |  | ||||||
| 
 |  | ||||||
| /*! | /*! | ||||||
|  * VERSION: 2.1.2 |  * VERSION: 2.1.2 | ||||||
|  * DATE: 2019-03-01 |  * DATE: 2019-03-01 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								dist/iwmlib.3rdparty.preload.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/iwmlib.3rdparty.preload.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										691
									
								
								dist/iwmlib.pixi.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										691
									
								
								dist/iwmlib.pixi.js
									
									
									
									
										vendored
									
									
								
							| @ -11972,7 +11972,7 @@ | |||||||
|     class Timeline extends BitmapLabeledGraphics { |     class Timeline extends BitmapLabeledGraphics { | ||||||
| 
 | 
 | ||||||
|         constructor(width, height, { ticks = null, |         constructor(width, height, { ticks = null, | ||||||
|             baseLine = 0.5, showRange = true } = {}) { |             baseLine = 0.5, showRange = true, throwDamping = 0.95 } = {}) { | ||||||
|             super(); |             super(); | ||||||
|             this.wantedWidth = width; |             this.wantedWidth = width; | ||||||
|             this.wantedHeight = height; |             this.wantedHeight = height; | ||||||
| @ -12003,6 +12003,7 @@ | |||||||
|             this.selection = null; |             this.selection = null; | ||||||
|             this.autoScroll = false; |             this.autoScroll = false; | ||||||
|             this.direction = -1; |             this.direction = -1; | ||||||
|  |             this.throwDamping = throwDamping; | ||||||
|             this.timeticks = ticks || new TimeTicks(new DecadeTicks(), |             this.timeticks = ticks || new TimeTicks(new DecadeTicks(), | ||||||
|                 new YearTicks(), |                 new YearTicks(), | ||||||
|                 new MonthTicks(), |                 new MonthTicks(), | ||||||
| @ -12380,7 +12381,7 @@ | |||||||
|                 return |                 return | ||||||
|             } |             } | ||||||
|             this.scroll += delta; |             this.scroll += delta; | ||||||
|             delta *= 0.985; |             delta *= this.throwDamping; | ||||||
|             this.redraw(); |             this.redraw(); | ||||||
|             if (Math.abs(delta) > 1 && this.autoScroll) { |             if (Math.abs(delta) > 1 && this.autoScroll) { | ||||||
|                 setTimeout(() => this.keepInBounds(delta, anchor), 1000 / 100); |                 setTimeout(() => this.keepInBounds(delta, anchor), 1000 / 100); | ||||||
| @ -12410,6 +12411,691 @@ | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * pixi.js scrollbox: a masked content box that can scroll vertically or horizontally with scrollbars | ||||||
|  |      */ | ||||||
|  |     class Scrollbox extends PIXI.Container { | ||||||
|  |         /** | ||||||
|  |          * create a scrollbox | ||||||
|  |          * @param {object} options | ||||||
|  |          * @param {boolean} [options.dragScroll=true] user may drag the content area to scroll content | ||||||
|  |          * @param {string} [options.overflowX=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown | ||||||
|  |          * @param {string} [options.overflowY=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown | ||||||
|  |          * @param {string} [options.overflow] (none, scroll, hidden, auto) sets overflowX and overflowY to this value | ||||||
|  |          * @param {number} [options.boxWidth=100] width of scrollbox including scrollbar (in pixels) | ||||||
|  |          * @param {number} [options.boxHeight=100] height of scrollbox including scrollbar (in pixels) | ||||||
|  |          * @param {number} [options.scrollbarSize=10] size of scrollbar (in pixels) | ||||||
|  |          * @param {number} [options.scrollbarOffsetHorizontal=0] offset of horizontal scrollbar (in pixels) | ||||||
|  |          * @param {number} [options.scrollbarOffsetVertical=0] offset of vertical scrollbar (in pixels) | ||||||
|  |          * @param {boolean} [options.stopPropagation=true] call stopPropagation on any events that impact scrollbox | ||||||
|  |          * @param {number} [options.scrollbarBackground=0xdddddd] background color of scrollbar | ||||||
|  |          * @param {number} [options.scrollbarBackgroundAlpha=1] alpha of background of scrollbar | ||||||
|  |          * @param {number} [options.scrollbarForeground=0x888888] foreground color of scrollbar | ||||||
|  |          * @param {number} [options.scrollbarForegroundAlpha=1] alpha of foreground of scrollbar | ||||||
|  |          * @param {string} [options.underflow=top-left] what to do when content underflows the scrollbox size: none: do nothing; (left/right/center AND top/bottom/center); OR center (e.g., 'top-left', 'center', 'none', 'bottomright') | ||||||
|  |          * @param {(boolean|number)} [options.fade] fade the scrollbar when not in use (true = 1000ms) | ||||||
|  |          * @param {number} [options.fadeWait=3000] time to wait before fading the scrollbar if options.fade is set | ||||||
|  |          * @param {(string|function)} [options.fadeEase=easeInOutSine] easing function to use for fading | ||||||
|  |          */ | ||||||
|  |         constructor(options) | ||||||
|  |         { | ||||||
|  |             super(); | ||||||
|  |             this.options = Object.assign({}, { | ||||||
|  |                 "boxWidth": 100, | ||||||
|  |                 "boxHeight": 100, | ||||||
|  |                 "scrollbarSize": 10, | ||||||
|  |                 "scrollbarBackground": 14540253, | ||||||
|  |                 "scrollbarBackgroundAlpha": 1, | ||||||
|  |                 "scrollbarForeground": 8947848, | ||||||
|  |                 "scrollbarForegroundAlpha": 1, | ||||||
|  |                 "dragScroll": true, | ||||||
|  |                 "stopPropagation": true, | ||||||
|  |                 "scrollbarOffsetHorizontal": 0, | ||||||
|  |                 "scrollbarOffsetVertical": 0, | ||||||
|  |                 "underflow": "top-left", | ||||||
|  |                 "fadeScrollbar": false, | ||||||
|  |                 "fadeWait": 3000, | ||||||
|  |                 "fadeEase": "easeInOutSine" | ||||||
|  |             }, options); | ||||||
|  |             this.ease = new PIXI.extras.Ease.list(); | ||||||
|  | 
 | ||||||
|  |             /** | ||||||
|  |              * content in placed in here | ||||||
|  |              * you can use any function from pixi-viewport on content to manually move the content (see https://davidfig.github.io/pixi-viewport/jsdoc/)
 | ||||||
|  |              * @type {PIXI.extras.Viewport} | ||||||
|  |              */ | ||||||
|  |             this.content = this.addChild(new PIXI.extras.Viewport({ passiveWheel: this.options.stopPropagation, stopPropagation: this.options.stopPropagation, screenWidth: this.options.boxWidth, screenHeight: this.options.boxHeight })); | ||||||
|  |             this.content | ||||||
|  |                 .decelerate() | ||||||
|  |                 .on('moved', () => this._drawScrollbars()); | ||||||
|  | 
 | ||||||
|  |             /** | ||||||
|  |              * graphics element for drawing the scrollbars | ||||||
|  |              * @type {PIXI.Graphics} | ||||||
|  |              */ | ||||||
|  |             this.scrollbar = this.addChild(new PIXI.Graphics()); | ||||||
|  |             this.scrollbar.interactive = true; | ||||||
|  |             this.scrollbar.on('pointerdown', this.scrollbarDown, this); | ||||||
|  |             this.interactive = true; | ||||||
|  |             this.on('pointermove', this.scrollbarMove, this); | ||||||
|  |             this.on('pointerup', this.scrollbarUp, this); | ||||||
|  |             this.on('pointercancel', this.scrollbarUp, this); | ||||||
|  |             this.on('pointerupoutside', this.scrollbarUp, this); | ||||||
|  |             this._maskContent = this.addChild(new PIXI.Graphics()); | ||||||
|  |             this.update(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * offset of horizontal scrollbar (in pixels) | ||||||
|  |          * @type {number} | ||||||
|  |          */ | ||||||
|  |         get scrollbarOffsetHorizontal() | ||||||
|  |         { | ||||||
|  |             return this.options.scrollbarOffsetHorizontal | ||||||
|  |         } | ||||||
|  |         set scrollbarOffsetHorizontal(value) | ||||||
|  |         { | ||||||
|  |             this.options.scrollbarOffsetHorizontal = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * offset of vertical scrollbar (in pixels) | ||||||
|  |          * @type {number} | ||||||
|  |          */ | ||||||
|  |         get scrollbarOffsetVertical() | ||||||
|  |         { | ||||||
|  |             return this.options.scrollbarOffsetVertical | ||||||
|  |         } | ||||||
|  |         set scrollbarOffsetVertical(value) | ||||||
|  |         { | ||||||
|  |             this.options.scrollbarOffsetVertical = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * disable the scrollbox (if set to true this will also remove the mask) | ||||||
|  |          * @type {boolean} | ||||||
|  |          */ | ||||||
|  |         get disable() | ||||||
|  |         { | ||||||
|  |             return this._disabled | ||||||
|  |         } | ||||||
|  |         set disable(value) | ||||||
|  |         { | ||||||
|  |             if (this._disabled !== value) | ||||||
|  |             { | ||||||
|  |                 this._disabled = value; | ||||||
|  |                 this.update(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * call stopPropagation on any events that impact scrollbox | ||||||
|  |          * @type {boolean} | ||||||
|  |          */ | ||||||
|  |         get stopPropagation() | ||||||
|  |         { | ||||||
|  |             return this.options.stopPropagation | ||||||
|  |         } | ||||||
|  |         set stopPropagation(value) | ||||||
|  |         { | ||||||
|  |             this.options.stopPropagation = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * user may drag the content area to scroll content | ||||||
|  |          * @type {boolean} | ||||||
|  |          */ | ||||||
|  |         get dragScroll() | ||||||
|  |         { | ||||||
|  |             return this.options.dragScroll | ||||||
|  |         } | ||||||
|  |         set dragScroll(value) | ||||||
|  |         { | ||||||
|  |             this.options.dragScroll = value; | ||||||
|  |             if (value) | ||||||
|  |             { | ||||||
|  |                 this.content.drag(); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 this.content.removePlugin('drag'); | ||||||
|  |             } | ||||||
|  |             this.update(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * width of scrollbox including the scrollbar (if visible)- this changes the size and not the scale of the box | ||||||
|  |          * @type {number} | ||||||
|  |          */ | ||||||
|  |         get boxWidth() | ||||||
|  |         { | ||||||
|  |             return this.options.boxWidth | ||||||
|  |         } | ||||||
|  |         set boxWidth(value) | ||||||
|  |         { | ||||||
|  |             this.options.boxWidth = value; | ||||||
|  |             this.content.screenWidth = value; | ||||||
|  |             this.update(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * sets overflowX and overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown | ||||||
|  |          * scroll = always show scrollbar | ||||||
|  |          * hidden = hide overflow and do not show scrollbar | ||||||
|  |          * auto = if content is larger than box size, then show scrollbar | ||||||
|  |          * @type {string} | ||||||
|  |          */ | ||||||
|  |         get overflow() | ||||||
|  |         { | ||||||
|  |             return this.options.overflow | ||||||
|  |         } | ||||||
|  |         set overflow(value) | ||||||
|  |         { | ||||||
|  |             this.options.overflow = value; | ||||||
|  |             this.options.overflowX = value; | ||||||
|  |             this.options.overflowY = value; | ||||||
|  |             this.update(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * sets overflowX to (scroll, hidden, auto) changing whether the scrollbar is shown | ||||||
|  |          * scroll = always show scrollbar | ||||||
|  |          * hidden = hide overflow and do not show scrollbar | ||||||
|  |          * auto = if content is larger than box size, then show scrollbar | ||||||
|  |          * @type {string} | ||||||
|  |          */ | ||||||
|  |         get overflowX() | ||||||
|  |         { | ||||||
|  |             return this.options.overflowX | ||||||
|  |         } | ||||||
|  |         set overflowX(value) | ||||||
|  |         { | ||||||
|  |             this.options.overflowX = value; | ||||||
|  |             this.update(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * sets overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown | ||||||
|  |          * scroll = always show scrollbar | ||||||
|  |          * hidden = hide overflow and do not show scrollbar | ||||||
|  |          * auto = if content is larger than box size, then show scrollbar | ||||||
|  |          * @type {string} | ||||||
|  |          */ | ||||||
|  |         get overflowY() | ||||||
|  |         { | ||||||
|  |             return this.options.overflowY | ||||||
|  |         } | ||||||
|  |         set overflowY(value) | ||||||
|  |         { | ||||||
|  |             this.options.overflowY = value; | ||||||
|  |             this.update(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * height of scrollbox including the scrollbar (if visible) - this changes the size and not the scale of the box | ||||||
|  |          * @type {number} | ||||||
|  |          */ | ||||||
|  |         get boxHeight() | ||||||
|  |         { | ||||||
|  |             return this.options.boxHeight | ||||||
|  |         } | ||||||
|  |         set boxHeight(value) | ||||||
|  |         { | ||||||
|  |             this.options.boxHeight = value; | ||||||
|  |             this.content.screenHeight = value; | ||||||
|  |             this.update(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * scrollbar size in pixels | ||||||
|  |          * @type {number} | ||||||
|  |          */ | ||||||
|  |         get scrollbarSize() | ||||||
|  |         { | ||||||
|  |             return this.options.scrollbarSize | ||||||
|  |         } | ||||||
|  |         set scrollbarSize(value) | ||||||
|  |         { | ||||||
|  |             this.options.scrollbarSize = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * width of scrollbox less the scrollbar (if visible) | ||||||
|  |          * @type {number} | ||||||
|  |          * @readonly | ||||||
|  |          */ | ||||||
|  |         get contentWidth() | ||||||
|  |         { | ||||||
|  |             return this.options.boxWidth - (this.isScrollbarVertical ? this.options.scrollbarSize : 0) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * height of scrollbox less the scrollbar (if visible) | ||||||
|  |          * @type {number} | ||||||
|  |          * @readonly | ||||||
|  |          */ | ||||||
|  |         get contentHeight() | ||||||
|  |         { | ||||||
|  |             return this.options.boxHeight - (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * is the vertical scrollbar visible | ||||||
|  |          * @type {boolean} | ||||||
|  |          * @readonly | ||||||
|  |          */ | ||||||
|  |         get isScrollbarVertical() | ||||||
|  |         { | ||||||
|  |             return this._isScrollbarVertical | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * is the horizontal scrollbar visible | ||||||
|  |          * @type {boolean} | ||||||
|  |          * @readonly | ||||||
|  |          */ | ||||||
|  |         get isScrollbarHorizontal() | ||||||
|  |         { | ||||||
|  |             return this._isScrollbarHorizontal | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * top coordinate of scrollbar | ||||||
|  |          */ | ||||||
|  |         get scrollTop() | ||||||
|  |         { | ||||||
|  |             return this.content.top | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * left coordinate of scrollbar | ||||||
|  |          */ | ||||||
|  |         get scrollLeft() | ||||||
|  |         { | ||||||
|  |             return this.content.left | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * width of content area | ||||||
|  |          * if not set then it uses content.width to calculate width | ||||||
|  |          */ | ||||||
|  |         get scrollWidth() | ||||||
|  |         { | ||||||
|  |             return this._scrollWidth || this.content.width | ||||||
|  |         } | ||||||
|  |         set scrollWidth(value) | ||||||
|  |         { | ||||||
|  |             this._scrollWidth = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * height of content area | ||||||
|  |          * if not set then it uses content.height to calculate height | ||||||
|  |          */ | ||||||
|  |         get scrollHeight() | ||||||
|  |         { | ||||||
|  |             return this._scrollHeight || this.content.height | ||||||
|  |         } | ||||||
|  |         set scrollHeight(value) | ||||||
|  |         { | ||||||
|  |             this._scrollHeight = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * draws scrollbars | ||||||
|  |          * @private | ||||||
|  |          */ | ||||||
|  |         _drawScrollbars() | ||||||
|  |         { | ||||||
|  |             this._isScrollbarHorizontal = this.overflowX === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowX) !== -1 ? false : this.scrollWidth > this.options.boxWidth; | ||||||
|  |             this._isScrollbarVertical = this.overflowY === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowY) !== -1 ? false : this.scrollHeight > this.options.boxHeight; | ||||||
|  |             this.scrollbar.clear(); | ||||||
|  |             let options = {}; | ||||||
|  |             options.left = 0; | ||||||
|  |             options.right = this.scrollWidth + (this._isScrollbarVertical ? this.options.scrollbarSize : 0); | ||||||
|  |             options.top = 0; | ||||||
|  |             options.bottom = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0); | ||||||
|  |             const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0); | ||||||
|  |             const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0); | ||||||
|  |             this.scrollbarTop = (this.content.top / height) * this.boxHeight; | ||||||
|  |             this.scrollbarTop = this.scrollbarTop < 0 ? 0 : this.scrollbarTop; | ||||||
|  |             this.scrollbarHeight = (this.boxHeight / height) * this.boxHeight; | ||||||
|  |             this.scrollbarHeight = this.scrollbarTop + this.scrollbarHeight > this.boxHeight ? this.boxHeight - this.scrollbarTop : this.scrollbarHeight; | ||||||
|  |             this.scrollbarLeft = (this.content.left / width) * this.boxWidth; | ||||||
|  |             this.scrollbarLeft = this.scrollbarLeft < 0 ? 0 : this.scrollbarLeft; | ||||||
|  |             this.scrollbarWidth = (this.boxWidth / width) * this.boxWidth; | ||||||
|  |             this.scrollbarWidth = this.scrollbarWidth + this.scrollbarLeft > this.boxWidth ? this.boxWidth - this.scrollbarLeft : this.scrollbarWidth; | ||||||
|  |             if (this.isScrollbarVertical) | ||||||
|  |             { | ||||||
|  |                 this.scrollbar | ||||||
|  |                     .beginFill(this.options.scrollbarBackground, this.options.scrollbarBackgroundAlpha) | ||||||
|  |                     .drawRect(this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical, 0, this.scrollbarSize, this.boxHeight) | ||||||
|  |                     .endFill(); | ||||||
|  |             } | ||||||
|  |             if (this.isScrollbarHorizontal) | ||||||
|  |             { | ||||||
|  |                 this.scrollbar | ||||||
|  |                     .beginFill(this.options.scrollbarBackground, this.options.scrollbarBackgroundAlpha) | ||||||
|  |                     .drawRect(0, this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal, this.boxWidth, this.scrollbarSize) | ||||||
|  |                     .endFill(); | ||||||
|  |             } | ||||||
|  |             if (this.isScrollbarVertical) | ||||||
|  |             { | ||||||
|  |                 this.scrollbar | ||||||
|  |                     .beginFill(this.options.scrollbarForeground, this.options.scrollbarForegroundAlpha) | ||||||
|  |                     .drawRect(this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical, this.scrollbarTop, this.scrollbarSize, this.scrollbarHeight) | ||||||
|  |                     .endFill(); | ||||||
|  |             } | ||||||
|  |             if (this.isScrollbarHorizontal) | ||||||
|  |             { | ||||||
|  |                 this.scrollbar | ||||||
|  |                     .beginFill(this.options.scrollbarForeground, this.options.scrollbarForegroundAlpha) | ||||||
|  |                     .drawRect(this.scrollbarLeft, this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal, this.scrollbarWidth, this.scrollbarSize) | ||||||
|  |                     .endFill(); | ||||||
|  |             } | ||||||
|  |             // this.content.forceHitArea = new PIXI.Rectangle(0, 0 , this.boxWidth, this.boxHeight)
 | ||||||
|  |             this.activateFade(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * draws mask layer | ||||||
|  |          * @private | ||||||
|  |          */ | ||||||
|  |         _drawMask() | ||||||
|  |         { | ||||||
|  |             this._maskContent | ||||||
|  |                 .beginFill(0) | ||||||
|  |                 .drawRect(0, 0, this.boxWidth, this.boxHeight) | ||||||
|  |                 .endFill(); | ||||||
|  |             this.content.mask = this._maskContent; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * call when scrollbox content changes | ||||||
|  |          */ | ||||||
|  |         update() | ||||||
|  |         { | ||||||
|  |             this.content.mask = null; | ||||||
|  |             this._maskContent.clear(); | ||||||
|  |             if (!this._disabled) | ||||||
|  |             { | ||||||
|  |                 this._drawScrollbars(); | ||||||
|  |                 this._drawMask(); | ||||||
|  |                 if (this.options.dragScroll) | ||||||
|  |                 { | ||||||
|  |                     const direction = this.isScrollbarHorizontal && this.isScrollbarVertical ? 'all' : this.isScrollbarHorizontal ? 'x' : 'y'; | ||||||
|  |                     if (direction !== null) | ||||||
|  |                     { | ||||||
|  |                         this.content | ||||||
|  |                             .drag({ clampWheel: true, direction }) | ||||||
|  |                             .clamp({ direction, underflow: this.options.underflow }); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * show the scrollbar and restart the timer for fade if options.fade is set | ||||||
|  |          */ | ||||||
|  |         activateFade() | ||||||
|  |         { | ||||||
|  |             if (this.options.fade) | ||||||
|  |             { | ||||||
|  |                 if (this.fade) | ||||||
|  |                 { | ||||||
|  |                     this.ease.remove(this.fade); | ||||||
|  |                 } | ||||||
|  |                 this.scrollbar.alpha = 1; | ||||||
|  |                 const time = this.options.fade === true ? 1000 : this.options.fade; | ||||||
|  |                 this.fade = this.ease.to(this.scrollbar, { alpha: 0 }, time, { wait: this.options.fadeWait, ease: this.options.fadeEase }); | ||||||
|  |                 this.fade.on('each', () => this.content.dirty = true); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * handle pointer down on scrollbar | ||||||
|  |          * @param {PIXI.interaction.InteractionEvent} e | ||||||
|  |          * @private | ||||||
|  |          */ | ||||||
|  |         scrollbarDown(e) | ||||||
|  |         { | ||||||
|  |             const local = this.toLocal(e.data.global); | ||||||
|  |             if (this.isScrollbarHorizontal) | ||||||
|  |             { | ||||||
|  |                 if (local.y > this.boxHeight - this.scrollbarSize) | ||||||
|  |                 { | ||||||
|  |                     if (local.x >= this.scrollbarLeft && local.x <= this.scrollbarLeft + this.scrollbarWidth) | ||||||
|  |                     { | ||||||
|  |                         this.pointerDown = { type: 'horizontal', last: local }; | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         if (local.x > this.scrollbarLeft) | ||||||
|  |                         { | ||||||
|  |                             this.content.left += this.content.worldScreenWidth; | ||||||
|  |                             this.update(); | ||||||
|  |                         } | ||||||
|  |                         else | ||||||
|  |                         { | ||||||
|  |                             this.content.left -= this.content.worldScreenWidth; | ||||||
|  |                             this.update(); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     if (this.options.stopPropagation) | ||||||
|  |                     { | ||||||
|  |                         e.stopPropagation(); | ||||||
|  |                     } | ||||||
|  |                     return | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             if (this.isScrollbarVertical) | ||||||
|  |             { | ||||||
|  |                 if (local.x > this.boxWidth - this.scrollbarSize) | ||||||
|  |                 { | ||||||
|  |                     if (local.y >= this.scrollbarTop && local.y <= this.scrollbarTop + this.scrollbarWidth) | ||||||
|  |                     { | ||||||
|  |                         this.pointerDown = { type: 'vertical', last: local }; | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         if (local.y > this.scrollbarTop) | ||||||
|  |                         { | ||||||
|  |                             this.content.top += this.content.worldScreenHeight; | ||||||
|  |                             this.update(); | ||||||
|  |                         } | ||||||
|  |                         else | ||||||
|  |                         { | ||||||
|  |                             this.content.top -= this.content.worldScreenHeight; | ||||||
|  |                             this.update(); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     if (this.options.stopPropagation) | ||||||
|  |                     { | ||||||
|  |                         e.stopPropagation(); | ||||||
|  |                     } | ||||||
|  |                     return | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * handle pointer move on scrollbar | ||||||
|  |          * @param {PIXI.interaction.InteractionEvent} e | ||||||
|  |          * @private | ||||||
|  |          */ | ||||||
|  |         scrollbarMove(e) | ||||||
|  |         { | ||||||
|  |             if (this.pointerDown) | ||||||
|  |             { | ||||||
|  |                 if (this.pointerDown.type === 'horizontal') | ||||||
|  |                 { | ||||||
|  |                     const local = this.toLocal(e.data.global); | ||||||
|  |                     this.content.left += local.x - this.pointerDown.last.x; | ||||||
|  |                     this.pointerDown.last = local; | ||||||
|  |                     this.update(); | ||||||
|  |                 } | ||||||
|  |                 else if (this.pointerDown.type === 'vertical') | ||||||
|  |                 { | ||||||
|  |                     const local = this.toLocal(e.data.global); | ||||||
|  |                     this.content.top += local.y - this.pointerDown.last.y; | ||||||
|  |                     this.pointerDown.last = local; | ||||||
|  |                     this.update(); | ||||||
|  |                 } | ||||||
|  |                 if (this.options.stopPropagation) | ||||||
|  |                 { | ||||||
|  |                     e.stopPropagation(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * handle pointer down on scrollbar | ||||||
|  |          * @private | ||||||
|  |          */ | ||||||
|  |         scrollbarUp() | ||||||
|  |         { | ||||||
|  |             this.pointerDown = null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * resize the mask for the container | ||||||
|  |          * @param {object} options | ||||||
|  |          * @param {number} [options.boxWidth] width of scrollbox including scrollbar (in pixels) | ||||||
|  |          * @param {number} [options.boxHeight] height of scrollbox including scrollbar (in pixels) | ||||||
|  |          * @param {number} [options.scrollWidth] set the width of the inside of the scrollbox (leave null to use content.width) | ||||||
|  |          * @param {number} [options.scrollHeight] set the height of the inside of the scrollbox (leave null to use content.height) | ||||||
|  |          */ | ||||||
|  |         resize(options) | ||||||
|  |         { | ||||||
|  |             this.options.boxWidth = typeof options.boxWidth !== 'undefined' ? options.boxWidth : this.options.boxWidth; | ||||||
|  |             this.options.boxHeight = typeof options.boxHeight !== 'undefined' ? options.boxHeight : this.options.boxHeight; | ||||||
|  |             if (options.scrollWidth) | ||||||
|  |             { | ||||||
|  |                 this.scrollWidth = options.scrollWidth; | ||||||
|  |             } | ||||||
|  |             if (options.scrollHeight) | ||||||
|  |             { | ||||||
|  |                 this.scrollHeight = options.scrollHeight; | ||||||
|  |             } | ||||||
|  |             this.content.resize(this.options.boxWidth, this.options.boxHeight, this.scrollWidth, this.scrollHeight); | ||||||
|  |             this.update(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * ensure that the bounding box is visible | ||||||
|  |          * @param {number} x - relative to content's coordinate system | ||||||
|  |          * @param {number} y | ||||||
|  |          * @param {number} width | ||||||
|  |          * @param {number} height | ||||||
|  |          */ | ||||||
|  |         ensureVisible(x, y, width, height) | ||||||
|  |         { | ||||||
|  |             this.content.ensureVisible(x, y, width, height); | ||||||
|  |             this._drawScrollbars(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Callback for the switch action. | ||||||
|  |      * | ||||||
|  |      * @callback actionCallback | ||||||
|  |      * @param {object} event - The event object. | ||||||
|  |      * @param {Switch} switch - A reference to the switch (also this refers to the switch). | ||||||
|  |      */ | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Callback for the switch action. | ||||||
|  |      * | ||||||
|  |      * @callback actionActiveCallback | ||||||
|  |      * @param {object} event - The event object. | ||||||
|  |      * @param {Switch} switch - A reference to the switch (also this refers to the switch). | ||||||
|  |      */ | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Callback for the switch beforeAction. | ||||||
|  |      * | ||||||
|  |      * @callback beforeActionCallback | ||||||
|  |      * @param {object} event - The event object. | ||||||
|  |      * @param {Switch} switch - A reference to the switch (also this refers to the switch). | ||||||
|  |      */ | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Callback for the switch afterAction. | ||||||
|  |      * | ||||||
|  |      * @callback afterActionCallback | ||||||
|  |      * @param {object} event - The event object. | ||||||
|  |      * @param {Switch} switch - A reference to the switch (also this refers to the switch). | ||||||
|  |      */ | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Class that represents a PixiJS Switch. | ||||||
|  |      *  | ||||||
|  |      * @example | ||||||
|  |      * // Create the app
 | ||||||
|  |      * const app = new PIXIApp({ | ||||||
|  |      *     view: canvas, | ||||||
|  |      *     width: 900, | ||||||
|  |      *     height: 250 | ||||||
|  |      * }).setup().run() | ||||||
|  |      *  | ||||||
|  |      * // Create the switch
 | ||||||
|  |      * const switch1 = new Switch({ | ||||||
|  |      *     x: 10, | ||||||
|  |      *     y: 20 | ||||||
|  |      * }) | ||||||
|  |      * | ||||||
|  |      * // Add the switch to a DisplayObject
 | ||||||
|  |      * app.scene.addChild(switch1) | ||||||
|  |      * | ||||||
|  |      * @class | ||||||
|  |      * @extends PIXI.extras.Scrollbox | ||||||
|  |      * @see {@link https://davidfig.github.io/pixi-scrollbox/jsdoc/Scrollbox.html|Scrollbox}
 | ||||||
|  |      * @see {@link https://davidfig.github.io/pixi-viewport/jsdoc/Viewport.html|Viewport}
 | ||||||
|  |      */ | ||||||
|  |     class Scrollview extends Scrollbox { | ||||||
|  |          | ||||||
|  |         /** | ||||||
|  |          * Creates an instance of a Switch. | ||||||
|  |          *  | ||||||
|  |          * @constructor | ||||||
|  |          */ | ||||||
|  |         constructor(opts = {}) { | ||||||
|  | 
 | ||||||
|  |             super(opts); | ||||||
|  | 
 | ||||||
|  |             this.opts = opts; | ||||||
|  | 
 | ||||||
|  |             // setup
 | ||||||
|  |             //-----------------
 | ||||||
|  |             this.setup(); | ||||||
|  | 
 | ||||||
|  |             // layout
 | ||||||
|  |             //-----------------
 | ||||||
|  |             this.layout(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /** | ||||||
|  |          * Creates children and instantiates everything. | ||||||
|  |          *  | ||||||
|  |          * @private | ||||||
|  |          * @return {Scrollview} A reference to the Scrollview for chaining. | ||||||
|  |          */ | ||||||
|  |         setup() { | ||||||
|  | 
 | ||||||
|  |             return this | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /** | ||||||
|  |          * Should be called to refresh the layout of the Scrollview. Can be used after resizing. | ||||||
|  |          *  | ||||||
|  |          * @return {Scrollview} A reference to the Scrollview for chaining. | ||||||
|  |          */ | ||||||
|  |         layout() { | ||||||
|  | 
 | ||||||
|  |             return this | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Callback for the slider action onStart. |      * Callback for the slider action onStart. | ||||||
|      * |      * | ||||||
| @ -14055,6 +14741,7 @@ | |||||||
|     window.Theme = Theme; |     window.Theme = Theme; | ||||||
|     window.Button = Button; |     window.Button = Button; | ||||||
|     window.ButtonGroup = ButtonGroup; |     window.ButtonGroup = ButtonGroup; | ||||||
|  |     window.Scrollview = Scrollview; | ||||||
|     window.Slider = Slider; |     window.Slider = Slider; | ||||||
|     window.Switch = Switch; |     window.Switch = Switch; | ||||||
|     window.Popup = Popup; |     window.Popup = Popup; | ||||||
|  | |||||||
| @ -9,7 +9,6 @@ function vendors() { | |||||||
|         './node_modules/optimal-select/dist/optimal-select.js', |         './node_modules/optimal-select/dist/optimal-select.js', | ||||||
|         './node_modules/hammerjs/hammer.js', |         './node_modules/hammerjs/hammer.js', | ||||||
|         './node_modules/propagating-hammerjs/propagating.js', |         './node_modules/propagating-hammerjs/propagating.js', | ||||||
|         './node_modules/highlight.js/lib/highlight.js', |  | ||||||
|         './node_modules/pixi.js/dist/pixi.js', |         './node_modules/pixi.js/dist/pixi.js', | ||||||
|         './node_modules/pixi-compressed-textures/lib/crn_decomp.js', |         './node_modules/pixi-compressed-textures/lib/crn_decomp.js', | ||||||
|         './node_modules/pixi-compressed-textures/bin/pixi-compressed-textures.js', |         './node_modules/pixi-compressed-textures/bin/pixi-compressed-textures.js', | ||||||
| @ -17,7 +16,9 @@ function vendors() { | |||||||
|         './node_modules/pixi-particles/dist/pixi-particles.js', |         './node_modules/pixi-particles/dist/pixi-particles.js', | ||||||
|         './node_modules/pixi-projection/dist/pixi-projection.js', |         './node_modules/pixi-projection/dist/pixi-projection.js', | ||||||
|         './node_modules/gsap/src/uncompressed/TweenLite.js', |         './node_modules/gsap/src/uncompressed/TweenLite.js', | ||||||
|         './lib/3rdparty/convertPointFromPageToNode.js', |         './lib/3rdparty/pixi-ease.js', | ||||||
|  |         './lib/3rdparty/pixi-viewport.js', | ||||||
|  |         './lib/3rdparty/convertPointFromPageToNode.js' | ||||||
|     ], {sourcemaps: false}) |     ], {sourcemaps: false}) | ||||||
|         .pipe(concat('iwmlib.3rdparty.js')) |         .pipe(concat('iwmlib.3rdparty.js')) | ||||||
|         .pipe(replace(/^\/\/# sourceMappingURL=.*$/gmi, '')) |         .pipe(replace(/^\/\/# sourceMappingURL=.*$/gmi, '')) | ||||||
| @ -29,7 +30,6 @@ function vendors() { | |||||||
| 
 | 
 | ||||||
| function preload() { | function preload() { | ||||||
|     return src([ |     return src([ | ||||||
|         './node_modules/highlight.js/lib/highlight.js', |  | ||||||
|         './node_modules/gsap/src/uncompressed/TweenLite.js', |         './node_modules/gsap/src/uncompressed/TweenLite.js', | ||||||
|         './lib/3rdparty/convertPointFromPageToNode.js', |         './lib/3rdparty/convertPointFromPageToNode.js', | ||||||
|     ], {sourcemaps: false}) |     ], {sourcemaps: false}) | ||||||
|  | |||||||
							
								
								
									
										314
									
								
								lib/3rdparty/highlight/CHANGES.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										314
									
								
								lib/3rdparty/highlight/CHANGES.md
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +1,317 @@ | |||||||
|  | ## Master | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  | 
 | ||||||
|  | New styles: | ||||||
|  | 
 | ||||||
|  | Improvements: | ||||||
|  | 
 | ||||||
|  | ## Version 9.15.6 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | Improvements: | ||||||
|  |  - Move dependencies to be devDependencies. | ||||||
|  |  - Fixed security issues in dev dependencies. | ||||||
|  | 
 | ||||||
|  | ## Version 9.15.5 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | Improvements: | ||||||
|  |   🔥 Hot fix: updated build tool. | ||||||
|  | 
 | ||||||
|  | ## Version 9.15.4 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | Improvements: | ||||||
|  |   🔥 Hot fix: reverted hljs cli build tool, as it was causing issues with install. | ||||||
|  | 
 | ||||||
|  | ## Version 9.15.3 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | Improvements: | ||||||
|  |   🔥 Hot fix: reverted hljs cli build tool, as it was causing issues with install. | ||||||
|  | 
 | ||||||
|  | ## Version 9.15.2 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | Improvements: | ||||||
|  |   🔥 Hot fix that was preventing highlight.js from installing. | ||||||
|  | 
 | ||||||
|  | ## Version 9.15.1 | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | 
 | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | 
 | ||||||
|  | Improvements: | ||||||
|  | 
 | ||||||
|  | - Pony: Fixed keywords without spaces at line ends, highlighting of `iso` in class definitions, and function heads without bodies in traits and interfaces. Removed FUNCTION and CLASS modes until they are found to be needed and to provide some of the fixes. | ||||||
|  |  - Support external language files in minified version of highlight.js (#1888) | ||||||
|  | 
 | ||||||
|  | ## Version 9.15 | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | 
 | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | 
 | ||||||
|  | Improvements: | ||||||
|  |  - new cli tool `hljs` - allows easier [building from command line](docs/building-testing.rst#building-a-bundle-from-the-command-line). | ||||||
|  |  - cpp: Fully support C++11 raw strings. (#1897) | ||||||
|  |  - Python: Treat False None and True as literals (#1920) | ||||||
|  | 
 | ||||||
|  | ## Version 9.14.2 | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  |   none. | ||||||
|  | New styles: | ||||||
|  |   none. | ||||||
|  | Improvements: | ||||||
|  | - *Gauss* fixed to stop global namespace pollution [Scott Hyndman][]. | ||||||
|  | - fix(Tcl): removed apostrophe string delimiters (don't exist) | ||||||
|  | 
 | ||||||
|  | [Scott Hyndman]: https://github.com/shyndman | ||||||
|  | 
 | ||||||
|  | ## Version 9.14.1 | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | Improvements: | ||||||
|  | - Pony: language improvements (#1958) | ||||||
|  | 
 | ||||||
|  | ## Version 9.14.0 | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  |     none. | ||||||
|  | New styles: | ||||||
|  |     none. | ||||||
|  | Improvements: | ||||||
|  | - Pony: add missing "object" highlighting (#1932) | ||||||
|  | - Added *XQuery* built-in functions, prolog declarations, as well as parsing of function bodies, computed and direct constructors, by [Duncan Paterson][] | ||||||
|  | - fix(dart): Corrects highlighting with string interpolation. (#1946) | ||||||
|  | - fix(swift): be eager on optional-using types (!/?) (#1919) | ||||||
|  | - fix(tex): Changed cyrillic to unicode (IE11 throw SCRIPT5021) (#1601) | ||||||
|  | - fix(JavaScript): Recognize get/set accessor keywords (#1940) | ||||||
|  | - Fixed Dockerfile definition when using highlight continuation parameter, by [Laurent Voullemier][] | ||||||
|  | - Added tests & new `annotation` and `verbatim` keywords to *Crystal*, by [Benoit de Chezelles][] | ||||||
|  | - Added missing dockerfile markup tests, by [Laurent Voullemier][] | ||||||
|  |   Allow empty prompt text in clojure-repl, by [Egor Rogov][] | ||||||
|  | - Fixed several issues with *Crystal* language definition, by [Johannes Müller][] | ||||||
|  | - Added `C#` as an alias for *CSharp* language, by [Ahmed Atito][] | ||||||
|  | - Added generic user-defined proc support, new compiler define, refactor to re-use rules, and add tests to *GAUSS*, by [Matthew Evans][] | ||||||
|  | - Improve *Crystal* language to highlight regexes after some keywords, by [Tsuyusato Kitsune][] | ||||||
|  | - Fix filterByQualifiers: fileInfo can be null | ||||||
|  | - Fixed String interpolation in Dart, by [Scott Hyndman][]. | ||||||
|  | 
 | ||||||
|  | [Laurent Voullemier]: https://github.com/l-vo | ||||||
|  | [Benoit de Chezelles]: https://github.com/bew | ||||||
|  | [Johannes Müller]: https://github.com/straight-shoota | ||||||
|  | [Ahmed Atito]: https://github.com/atitoa93 | ||||||
|  | [Matthew Evans]: https://github.com/matthewevans | ||||||
|  | [Tsuyusato Kitsune]: https://github.com/MakeNowJust | ||||||
|  | [Scott Hyndman]: https://github.com/shyndman | ||||||
|  | [Duncan Paterson]: https://github.com/duncdrum | ||||||
|  | 
 | ||||||
|  | ## Version 9.13.1 | ||||||
|  | 
 | ||||||
|  | Improvements: | ||||||
|  | 
 | ||||||
|  | - *C#* function declarations no longer include trailing whitespace, by [JeremyTCD][] | ||||||
|  | - Added new and missing keywords to *AngelScript*, by [Melissa Geels][] | ||||||
|  | - *TypeScript* decorator factories highlighting fix, by [Antoine Boisier-Michaud][] | ||||||
|  | - Added support for multiline strings to *Swift*, by [Alejandro Isaza][] | ||||||
|  | - Fixed issue that was causing some minifiers to fail. | ||||||
|  | - Fixed `autoDetection` to accept language aliases. | ||||||
|  | 
 | ||||||
|  | [JeremyTCD]: https://github.com/JeremyTCD | ||||||
|  | [Melissa Geels]: https://github.com/codecat | ||||||
|  | [Antoine Boisier-Michaud]: https://github.com/Aboisier | ||||||
|  | [Alejandro Isaza]: https://github.com/alejandro-isaza | ||||||
|  | 
 | ||||||
|  | ## Version 9.13.0 | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  | 
 | ||||||
|  | - *ArcGIS Arcade* by [John Foster][] | ||||||
|  | - *AngelScript* by [Melissa Geels][] | ||||||
|  | - *GML* by [meseta][] | ||||||
|  | - *isbl* built-in language DIRECTUM and Conterra by [Dmitriy Tarasov][]. | ||||||
|  | - *PostgreSQL* SQL dialect and PL/pgSQL language by [Egor Rogov][]. | ||||||
|  | - *ReasonML* by [Gidi Meir Morris][] | ||||||
|  | - *SAS* by [Mauricio Caceres Bravo][] | ||||||
|  | - *Plaintext* by [Egor Rogov][] | ||||||
|  | - *.properties* by [bostko][] and [Egor Rogov][] | ||||||
|  | 
 | ||||||
|  | New styles: | ||||||
|  | 
 | ||||||
|  | - *a11y-dark theme* by [Eric Bailey][] | ||||||
|  | - *a11y-light theme* by [Eric Bailey][] | ||||||
|  | - *An Old Hope* by [Gustavo Costa][] | ||||||
|  | - *Atom One Dark Reasonable* by [Gidi Meir Morris][] | ||||||
|  | - *isbl editor dark* by [Dmitriy Tarasov][] | ||||||
|  | - *isbl editor light* by [Dmitriy Tarasov][] | ||||||
|  | - *Lightfair* by [Tristian Kelly][] | ||||||
|  | - [*Nord*][nord-highlightjs] by [Arctic Ice Studio][] | ||||||
|  | - *[🦄 Shades of Purple](https://github.com/ahmadawais/Shades-of-Purple-HighlightJS)* by [Ahmad Awais][] | ||||||
|  | 
 | ||||||
|  | Improvements: | ||||||
|  | 
 | ||||||
|  | - New attribute `endSameAsBegin` for nested constructs with variable names | ||||||
|  |   by [Egor Rogov][]. | ||||||
|  | - *Python* highlighting of escaped quotes fixed by [Harmon][] | ||||||
|  | - *PHP*: Added alias for php7, by [Vijaya Chandran Mani][] | ||||||
|  | - *C++* string handling, by [David Benjamin][] | ||||||
|  | - *Swift* Add `@objcMembers` to `@attributes`, by [Berk Çebi][] | ||||||
|  | - Infrastructural changes by [Marcos Cáceres][] | ||||||
|  | - Fixed metachars highighting for *NSIS* by [Jan T. Sott][] | ||||||
|  | - *Yaml* highlight local tags as types by [Léo Lam][] | ||||||
|  | - Improved highlighting for *Elixir* by [Piotr Kaminski][] | ||||||
|  | - New attribute `disableAutodetect` for preventing autodetection by [Egor Rogov][] | ||||||
|  | - *Matlab*: transpose operators and double quote strings, by [JohnC32][] and [Egor Rogov][] | ||||||
|  | - Various documentation typos and improvemets by [Jimmy Wärting][], [Lutz Büch][], [bcleland][] | ||||||
|  | - *Cmake* updated with new keywords and commands by [Deniz Bahadir][] | ||||||
|  | 
 | ||||||
|  | [Ahmad Awais]: https://github.com/ahmadawais | ||||||
|  | [Arctic Ice Studio]: https://github.com/arcticicestudio | ||||||
|  | [Dmitriy Tarasov]: https://github.com/MedvedTMN | ||||||
|  | [Egor Rogov]: https://github.com/egor-rogov | ||||||
|  | [Eric Bailey]: https://github.com/ericwbailey | ||||||
|  | [Gidi Meir Morris]: https://github.com/gmmorris | ||||||
|  | [Gustavo Costa]: https://github.com/gusbemacbe | ||||||
|  | [Harmon]: https://github.com/Harmon758 | ||||||
|  | [Melissa Geels]: https://github.com/codecat | ||||||
|  | [meseta]: https://github.com/meseta | ||||||
|  | [nord-highlightjs]: https://github.com/arcticicestudio/nord-highlightjs | ||||||
|  | [Tristian Kelly]: https://github.com/TristianK3604 | ||||||
|  | [Vijaya Chandran Mani]: https://github.com/vijaycs85 | ||||||
|  | [John Foster]: https://github.com/jf990 | ||||||
|  | [David Benjamin]: https://github.com/davidben | ||||||
|  | [Berk Çebi]: https://github.com/berkcebi | ||||||
|  | [Mauricio Caceres Bravo]: https://github.com/mcaceresb | ||||||
|  | [bostko]: https://github.com/bostko | ||||||
|  | [Deniz Bahadir]: https://github.com/Bagira80 | ||||||
|  | [bcleland]: https://github.com/bcleland | ||||||
|  | [JohnC32]: https://github.com/JohnC32 | ||||||
|  | [Lutz Büch]: https://github.com/lutz-100worte | ||||||
|  | [Piotr Kaminski]: https://github.com/pkaminski | ||||||
|  | [Léo Lam]: https://github.com/leoetlino | ||||||
|  | [Jan T. Sott]: https://github.com/idleberg | ||||||
|  | [Jimmy Wärting]: https://github.com/jimmywarting | ||||||
|  | [Marcos Cáceres]: https://github.com/marcoscaceres | ||||||
|  | 
 | ||||||
|  | ## Version 9.12.0 | ||||||
|  | 
 | ||||||
|  | New language: | ||||||
|  | 
 | ||||||
|  | - *MikroTik* RouterOS Scripting language by [Ivan Dementev][]. | ||||||
|  | 
 | ||||||
|  | New style: | ||||||
|  | 
 | ||||||
|  | - *VisualStudio 2015 Dark* by [Nicolas LLOBERA][] | ||||||
|  | 
 | ||||||
|  | Improvements: | ||||||
|  | - *Crystal* updated with new keywords and syntaxes by [Tsuyusato Kitsune][]. | ||||||
|  | - *Julia* updated to the modern definitions by [Alex Arslan][]. | ||||||
|  | - *julia-repl* added by [Morten Piibeleht][]. | ||||||
|  | - [Stanislav Belov][] wrote a new definition for *1C*, replacing the one that | ||||||
|  |   has not been updated for more than 8 years. The new version supports syntax | ||||||
|  |   for versions 7.7 and 8. | ||||||
|  | - [Nicolas LLOBERA][] improved C# definition fixing edge cases with function | ||||||
|  |   titles detection and added highlighting of `[Attributes]`. | ||||||
|  | - [nnnik][] provided a few correctness fixes for *Autohotkey*. | ||||||
|  | - [Martin Clausen][] made annotation collections in *Clojure* to look | ||||||
|  |   consistently with other kinds. | ||||||
|  | - [Alejandro Alonso][] updated *Swift* keywords. | ||||||
|  | 
 | ||||||
|  | [Tsuyusato Kitsune]: https://github.com/MakeNowJust | ||||||
|  | [Alex Arslan]: https://github.com/ararslan | ||||||
|  | [Morten Piibeleht]: https://github.com/mortenpi | ||||||
|  | [Stanislav Belov]: https://github.com/4ppl | ||||||
|  | [Ivan Dementev]: https://github.com/DiVAN1x | ||||||
|  | [Nicolas LLOBERA]: https://github.com/Nicolas01 | ||||||
|  | [nnnik]: https://github.com/nnnik | ||||||
|  | [Martin Clausen]: https://github.com/maacl | ||||||
|  | [Alejandro Alonso]: https://github.com/Azoy | ||||||
|  | 
 | ||||||
|  | ## Version 9.11.0 | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  | 
 | ||||||
|  | - *Shell* by [Tsuyusato Kitsune][] | ||||||
|  | - *jboss-cli* by [Raphaël Parrëe][] | ||||||
|  | 
 | ||||||
|  | Improvements: | ||||||
|  | 
 | ||||||
|  | - [Joël Porquet] has [greatly improved the definition of *makefile*][5b3e0e6]. | ||||||
|  | - *C++* class titles are now highlighted as in other languages with classes. | ||||||
|  | - [Jordi Petit][] added rarely used `or`, `and` and `not` keywords to *C++*. | ||||||
|  | - [Pieter Vantorre][] fixed highlighting of negative floating point values. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [Tsuyusato Kitsune]: https://github.com/MakeNowJust | ||||||
|  | [Jordi Petit]: https://github.com/jordi-petit | ||||||
|  | [Raphaël Parrëe]: https://github.com/rparree | ||||||
|  | [Pieter Vantorre]: https://github.com/NuclearCookie | ||||||
|  | [5b3e0e6]: https://github.com/isagalaev/highlight.js/commit/5b3e0e68bfaae282faff6697d6a490567fa9d44b | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Version 9.10.0 | ||||||
|  | 
 | ||||||
|  | Apologies for missing the previous release cycle. Some thing just can't be | ||||||
|  | automated… Anyway, we're back! | ||||||
|  | 
 | ||||||
|  | New languages: | ||||||
|  | 
 | ||||||
|  | - *Hy* by [Sergey Sobko][] | ||||||
|  | - *Leaf* by [Hale Chan][] | ||||||
|  | - *N1QL* by [Andres Täht][] and [Rene Saarsoo][] | ||||||
|  | 
 | ||||||
|  | Improvements: | ||||||
|  | 
 | ||||||
|  | - *Rust* got updated with new keywords by [Kasper Andersen][] and then | ||||||
|  |   significantly modernized even more by [Eduard-Mihai Burtescu][] (yes, @eddyb, | ||||||
|  |   Rust core team member!) | ||||||
|  | - *Python* updated with f-literals by [Philipp A][]. | ||||||
|  | - *YAML* updated with unquoted strings support. | ||||||
|  | - *Gauss* updated with new keywords by [Matt Evans][]. | ||||||
|  | - *Lua* updated with new keywords by [Joe Blow][]. | ||||||
|  | - *Kotlin* updated with new keywords by [Philipp Hauer][]. | ||||||
|  | - *TypeScript* got highlighting of function params and updated keywords by | ||||||
|  |   [Ike Ku][]. | ||||||
|  | - *Scheme* now correctly handles \`-quoted lists thanks to [Guannan Wei]. | ||||||
|  | - [Sam Wu][] fixed handling of `<<` in *C++* defines. | ||||||
|  | 
 | ||||||
|  | [Philipp A]: https://github.com/flying-sheep | ||||||
|  | [Philipp Hauer]: https://github.com/phauer | ||||||
|  | [Sergey Sobko]: https://github.com/profitware | ||||||
|  | [Hale Chan]: https://github.com/halechan | ||||||
|  | [Matt Evans]: https://github.com/matthewevans | ||||||
|  | [Joe Blow]: https://github.com/mossarelli | ||||||
|  | [Kasper Andersen]: https://github.com/kasma1990 | ||||||
|  | [Eduard-Mihai Burtescu]: https://github.com/eddyb | ||||||
|  | [Andres Täht]: https://github.com/andrestaht | ||||||
|  | [Rene Saarsoo]: https://github.com/nene | ||||||
|  | [Philipp Hauer]: https://github.com/phauer | ||||||
|  | [Ike Ku]: https://github.com/dempfi | ||||||
|  | [Guannan Wei]: https://github.com/Kraks | ||||||
|  | [Sam Wu]: https://github.com/samsam2310 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ## Version 9.9.0 | ## Version 9.9.0 | ||||||
| 
 | 
 | ||||||
| New languages | New languages | ||||||
|  | |||||||
							
								
								
									
										84
									
								
								lib/3rdparty/highlight/README.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										84
									
								
								lib/3rdparty/highlight/README.md
									
									
									
									
										vendored
									
									
								
							| @ -1,10 +1,10 @@ | |||||||
| # Highlight.js | # Highlight.js | ||||||
| 
 | 
 | ||||||
| [](https://travis-ci.org/isagalaev/highlight.js) | [](https://travis-ci.org/highlightjs/highlight.js) [](https://greenkeeper.io/) | ||||||
| 
 | 
 | ||||||
| Highlight.js is a syntax highlighter written in JavaScript. It works in | Highlight.js is a syntax highlighter written in JavaScript. It works in | ||||||
| the browser as well as on the server. It works with pretty much any | the browser as well as on the server. It works with pretty much any | ||||||
| markup, doesn’t depend on any framework and has automatic language | markup, doesn’t depend on any framework, and has automatic language | ||||||
| detection. | detection. | ||||||
| 
 | 
 | ||||||
| ## Getting Started | ## Getting Started | ||||||
| @ -31,6 +31,13 @@ The list of supported language classes is available in the [class | |||||||
| reference][2].  Classes can also be prefixed with either `language-` or | reference][2].  Classes can also be prefixed with either `language-` or | ||||||
| `lang-`. | `lang-`. | ||||||
| 
 | 
 | ||||||
|  | To make arbitrary text look like code, but without highlighting, use the | ||||||
|  | `plaintext` class: | ||||||
|  | 
 | ||||||
|  | ```html | ||||||
|  | <pre><code class="plaintext">...</code></pre> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
| To disable highlighting altogether use the `nohighlight` class: | To disable highlighting altogether use the `nohighlight` class: | ||||||
| 
 | 
 | ||||||
| ```html | ```html | ||||||
| @ -44,24 +51,24 @@ highlight.js, you can use the [`highlightBlock`][3] and [`configure`][4] | |||||||
| functions. This allows you to control *what* to highlight and *when*. | functions. This allows you to control *what* to highlight and *when*. | ||||||
| 
 | 
 | ||||||
| Here’s an equivalent way to calling [`initHighlightingOnLoad`][1] using | Here’s an equivalent way to calling [`initHighlightingOnLoad`][1] using | ||||||
| jQuery: | vanilla JS: | ||||||
| 
 | 
 | ||||||
| ```javascript | ```js | ||||||
| $(document).ready(function() { | document.addEventListener('DOMContentLoaded', (event) => { | ||||||
|   $('pre code').each(function(i, block) { |   document.querySelectorAll('pre code').forEach((block) => { | ||||||
|     hljs.highlightBlock(block); |     hljs.highlightBlock(block); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| You can use any tags instead of `<pre><code>` to mark up your code. If | You can use any tags instead of `<pre><code>` to mark up your code. If | ||||||
| you don't use a container that preserve line breaks you will need to | you don't use a container that preserves line breaks you will need to | ||||||
| configure highlight.js to use the `<br>` tag: | configure highlight.js to use the `<br>` tag: | ||||||
| 
 | 
 | ||||||
| ```javascript | ```js | ||||||
| hljs.configure({useBR: true}); | hljs.configure({useBR: true}); | ||||||
| 
 | 
 | ||||||
| $('div.code').each(function(i, block) { | document.querySelectorAll('div.code').forEach((block) => { | ||||||
|   hljs.highlightBlock(block); |   hljs.highlightBlock(block); | ||||||
| }); | }); | ||||||
| ``` | ``` | ||||||
| @ -76,23 +83,23 @@ window while dealing with very big chunks of code. | |||||||
| 
 | 
 | ||||||
| In your main script: | In your main script: | ||||||
| 
 | 
 | ||||||
| ```javascript | ```js | ||||||
| addEventListener('load', function() { | addEventListener('load', () => { | ||||||
|   var code = document.querySelector('#code'); |   const code = document.querySelector('#code'); | ||||||
|   var worker = new Worker('worker.js'); |   const worker = new Worker('worker.js'); | ||||||
|   worker.onmessage = function(event) { code.innerHTML = event.data; } |   worker.onmessage = (event) => { code.innerHTML = event.data; } | ||||||
|   worker.postMessage(code.textContent); |   worker.postMessage(code.textContent); | ||||||
| }) | }); | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| In worker.js: | In worker.js: | ||||||
| 
 | 
 | ||||||
| ```javascript | ```js | ||||||
| onmessage = function(event) { | onmessage = (event) => { | ||||||
|   importScripts('<path>/highlight.pack.js'); |   importScripts('<path>/highlight.pack.js'); | ||||||
|   var result = self.hljs.highlightAuto(event.data); |   const result = self.hljs.highlightAuto(event.data); | ||||||
|   postMessage(result.value); |   postMessage(result.value); | ||||||
| } | }; | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -115,17 +122,48 @@ too big. If you don't see the language you need in the ["Common" section][5], | |||||||
| it can be added manually: | it can be added manually: | ||||||
| 
 | 
 | ||||||
| ```html | ```html | ||||||
| <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.4.0/languages/go.min.js"></script> | <script | ||||||
|  |  charset="UTF-8" | ||||||
|  |  src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/go.min.js"></script> | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| **On Almond.** You need to use the optimizer to give the module a name. For | **On Almond.** You need to use the optimizer to give the module a name. For | ||||||
| example: | example: | ||||||
| 
 | 
 | ||||||
| ``` | ```bash | ||||||
| r.js -o name=hljs paths.hljs=/path/to/highlight out=highlight.js | r.js -o name=hljs paths.hljs=/path/to/highlight out=highlight.js | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | ### CommonJS | ||||||
|  | 
 | ||||||
|  | You can import Highlight.js as a CommonJS-module: | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | npm install highlight.js --save | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | In your application: | ||||||
|  | 
 | ||||||
|  | ```js | ||||||
|  | import hljs from 'highlight.js'; | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | The default import imports all languages! Therefore it is likely to be more efficient to import only the library and the languages you need: | ||||||
|  | 
 | ||||||
|  | ```js | ||||||
|  | import hljs from 'highlight.js/lib/highlight'; | ||||||
|  | import javascript from 'highlight.js/lib/languages/javascript'; | ||||||
|  | hljs.registerLanguage('javascript', javascript); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | To set the syntax highlighting style, if your build tool processes CSS from your JavaScript entry point, you can import the stylesheet directly into your CommonJS-module: | ||||||
|  | 
 | ||||||
|  | ```js | ||||||
|  | import hljs from 'highlight.js/lib/highlight'; | ||||||
|  | import 'highlight.js/styles/github.css'; | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
| ## License | ## License | ||||||
| 
 | 
 | ||||||
| Highlight.js is released under the BSD License. See [LICENSE][7] file | Highlight.js is released under the BSD License. See [LICENSE][7] file | ||||||
| @ -146,5 +184,5 @@ Authors and contributors are listed in the [AUTHORS.en.txt][8] file. | |||||||
| [4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options | [4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options | ||||||
| [5]: https://highlightjs.org/download/ | [5]: https://highlightjs.org/download/ | ||||||
| [6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html | [6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html | ||||||
| [7]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE | [7]: https://github.com/highlightjs/highlight.js/blob/master/LICENSE | ||||||
| [8]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.en.txt | [8]: https://github.com/highlightjs/highlight.js/blob/master/AUTHORS.en.txt | ||||||
|  | |||||||
							
								
								
									
										36
									
								
								lib/3rdparty/highlight/README.ru.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								lib/3rdparty/highlight/README.ru.md
									
									
									
									
										vendored
									
									
								
							| @ -40,11 +40,11 @@ Highlight.js — это инструмент для подсветки синт | |||||||
| можно управлять тем, *что* и *когда* подсвечивать. | можно управлять тем, *что* и *когда* подсвечивать. | ||||||
| 
 | 
 | ||||||
| Вот пример инициализации, эквивалентной вызову [`initHighlightingOnLoad`][1], но | Вот пример инициализации, эквивалентной вызову [`initHighlightingOnLoad`][1], но | ||||||
| с использованием jQuery: | с использованием `document.addEventListener`: | ||||||
| 
 | 
 | ||||||
| ```javascript | ```js | ||||||
| $(document).ready(function() { | document.addEventListener('DOMContentLoaded', (event) => { | ||||||
|   $('pre code').each(function(i, block) { |   document.querySelectorAll('pre code').forEach((block) => { | ||||||
|     hljs.highlightBlock(block); |     hljs.highlightBlock(block); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
| @ -54,10 +54,10 @@ $(document).ready(function() { | |||||||
| используете контейнер, не сохраняющий переводы строк, вам нужно сказать | используете контейнер, не сохраняющий переводы строк, вам нужно сказать | ||||||
| highlight.js использовать для них тег `<br>`: | highlight.js использовать для них тег `<br>`: | ||||||
| 
 | 
 | ||||||
| ```javascript | ```js | ||||||
| hljs.configure({useBR: true}); | hljs.configure({useBR: true}); | ||||||
| 
 | 
 | ||||||
| $('div.code').each(function(i, block) { | document.querySelectorAll('div.code').forEach((block) => { | ||||||
|   hljs.highlightBlock(block); |   hljs.highlightBlock(block); | ||||||
| }); | }); | ||||||
| ``` | ``` | ||||||
| @ -72,23 +72,23 @@ $('div.code').each(function(i, block) { | |||||||
| 
 | 
 | ||||||
| В основном скрипте: | В основном скрипте: | ||||||
| 
 | 
 | ||||||
| ```javascript | ```js | ||||||
| addEventListener('load', function() { | addEventListener('load', () => { | ||||||
|   var code = document.querySelector('#code'); |   const code = document.querySelector('#code'); | ||||||
|   var worker = new Worker('worker.js'); |   const worker = new Worker('worker.js'); | ||||||
|   worker.onmessage = function(event) { code.innerHTML = event.data; } |   worker.onmessage = (event) => { code.innerHTML = event.data; } | ||||||
|   worker.postMessage(code.textContent); |   worker.postMessage(code.textContent); | ||||||
| }) | }); | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| В worker.js: | В worker.js: | ||||||
| 
 | 
 | ||||||
| ```javascript | ```js | ||||||
| onmessage = function(event) { | onmessage = (event) => { | ||||||
|   importScripts('<path>/highlight.pack.js'); |   importScripts('<path>/highlight.pack.js'); | ||||||
|   var result = self.hljs.highlightAuto(event.data); |   const result = self.hljs.highlightAuto(event.data); | ||||||
|   postMessage(result.value); |   postMessage(result.value); | ||||||
| } | }; | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -138,5 +138,5 @@ Highlight.js распространяется под лицензией BSD. П | |||||||
| [4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options | [4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options | ||||||
| [5]: https://highlightjs.org/download/ | [5]: https://highlightjs.org/download/ | ||||||
| [6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html | [6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html | ||||||
| [7]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE | [7]: https://github.com/highlightjs/highlight.js/blob/master/LICENSE | ||||||
| [8]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.ru.txt | [8]: https://github.com/highlightjs/highlight.js/blob/master/AUTHORS.ru.txt | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								lib/3rdparty/highlight/highlight.pack.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								lib/3rdparty/highlight/highlight.pack.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										99
									
								
								lib/3rdparty/highlight/styles/a11y-dark.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								lib/3rdparty/highlight/styles/a11y-dark.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | |||||||
|  | /* a11y-dark theme */ | ||||||
|  | /* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ | ||||||
|  | /* @author: ericwbailey */ | ||||||
|  | 
 | ||||||
|  | /* Comment */ | ||||||
|  | .hljs-comment, | ||||||
|  | .hljs-quote { | ||||||
|  |   color: #d4d0ab; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Red */ | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable, | ||||||
|  | .hljs-tag, | ||||||
|  | .hljs-name, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-deletion { | ||||||
|  |   color: #ffa07a; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Orange */ | ||||||
|  | .hljs-number, | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-builtin-name, | ||||||
|  | .hljs-literal, | ||||||
|  | .hljs-type, | ||||||
|  | .hljs-params, | ||||||
|  | .hljs-meta, | ||||||
|  | .hljs-link { | ||||||
|  |   color: #f5ab35; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Yellow */ | ||||||
|  | .hljs-attribute { | ||||||
|  |   color: #ffd700; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Green */ | ||||||
|  | .hljs-string, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-addition { | ||||||
|  |   color: #abe338; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Blue */ | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-section { | ||||||
|  |   color: #00e0e0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Purple */ | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-selector-tag { | ||||||
|  |   color: #dcc6e0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   background: #2b2b2b; | ||||||
|  |   color: #f8f8f2; | ||||||
|  |   padding: 0.5em; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media screen and (-ms-high-contrast: active) { | ||||||
|  |   .hljs-addition, | ||||||
|  |   .hljs-attribute, | ||||||
|  |   .hljs-built_in, | ||||||
|  |   .hljs-builtin-name, | ||||||
|  |   .hljs-bullet, | ||||||
|  |   .hljs-comment, | ||||||
|  |   .hljs-link, | ||||||
|  |   .hljs-literal, | ||||||
|  |   .hljs-meta, | ||||||
|  |   .hljs-number, | ||||||
|  |   .hljs-params, | ||||||
|  |   .hljs-string, | ||||||
|  |   .hljs-symbol, | ||||||
|  |   .hljs-type, | ||||||
|  |   .hljs-quote { | ||||||
|  |         color: highlight; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     .hljs-keyword, | ||||||
|  |     .hljs-selector-tag { | ||||||
|  |         font-weight: bold; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										99
									
								
								lib/3rdparty/highlight/styles/a11y-light.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								lib/3rdparty/highlight/styles/a11y-light.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | |||||||
|  | /* a11y-light theme */ | ||||||
|  | /* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ | ||||||
|  | /* @author: ericwbailey */ | ||||||
|  | 
 | ||||||
|  | /* Comment */ | ||||||
|  | .hljs-comment, | ||||||
|  | .hljs-quote { | ||||||
|  |   color: #696969; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Red */ | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable, | ||||||
|  | .hljs-tag, | ||||||
|  | .hljs-name, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-deletion { | ||||||
|  |   color: #d91e18; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Orange */ | ||||||
|  | .hljs-number, | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-builtin-name, | ||||||
|  | .hljs-literal, | ||||||
|  | .hljs-type, | ||||||
|  | .hljs-params, | ||||||
|  | .hljs-meta, | ||||||
|  | .hljs-link { | ||||||
|  |   color: #aa5d00; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Yellow */ | ||||||
|  | .hljs-attribute { | ||||||
|  |   color: #aa5d00; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Green */ | ||||||
|  | .hljs-string, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-addition { | ||||||
|  |   color: #008000; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Blue */ | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-section { | ||||||
|  |   color: #007faa; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Purple */ | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-selector-tag { | ||||||
|  |   color: #7928a1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   background: #fefefe; | ||||||
|  |   color: #545454; | ||||||
|  |   padding: 0.5em; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media screen and (-ms-high-contrast: active) { | ||||||
|  |   .hljs-addition, | ||||||
|  |   .hljs-attribute, | ||||||
|  |   .hljs-built_in, | ||||||
|  |   .hljs-builtin-name, | ||||||
|  |   .hljs-bullet, | ||||||
|  |   .hljs-comment, | ||||||
|  |   .hljs-link, | ||||||
|  |   .hljs-literal, | ||||||
|  |   .hljs-meta, | ||||||
|  |   .hljs-number, | ||||||
|  |   .hljs-params, | ||||||
|  |   .hljs-string, | ||||||
|  |   .hljs-symbol, | ||||||
|  |   .hljs-type, | ||||||
|  |   .hljs-quote { | ||||||
|  |         color: highlight; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     .hljs-keyword, | ||||||
|  |     .hljs-selector-tag { | ||||||
|  |         font-weight: bold; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										89
									
								
								lib/3rdparty/highlight/styles/an-old-hope.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								lib/3rdparty/highlight/styles/an-old-hope.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | |||||||
|  | /*  | ||||||
|  | 
 | ||||||
|  | An Old Hope – Star Wars Syntax (c) Gustavo Costa <gusbemacbe@gmail.com> | ||||||
|  | Original theme - Ocean Dark Theme – by https://github.com/gavsiu | ||||||
|  | Based on Jesse Leite's Atom syntax theme 'An Old Hope' – https://github.com/JesseLeite/an-old-hope-syntax-atom | ||||||
|  | 
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | /* Death Star Comment */ | ||||||
|  | .hljs-comment, | ||||||
|  | .hljs-quote  | ||||||
|  | { | ||||||
|  |   color: #B6B18B; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Darth Vader */ | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable, | ||||||
|  | .hljs-tag, | ||||||
|  | .hljs-name, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-deletion  | ||||||
|  | { | ||||||
|  |   color: #EB3C54; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Threepio */ | ||||||
|  | .hljs-number, | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-builtin-name, | ||||||
|  | .hljs-literal, | ||||||
|  | .hljs-type, | ||||||
|  | .hljs-params, | ||||||
|  | .hljs-meta, | ||||||
|  | .hljs-link  | ||||||
|  | { | ||||||
|  |   color: #E7CE56; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Luke Skywalker */ | ||||||
|  | .hljs-attribute  | ||||||
|  | { | ||||||
|  |   color: #EE7C2B; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Obi Wan Kenobi */ | ||||||
|  | .hljs-string, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-addition  | ||||||
|  | { | ||||||
|  |   color: #4FB4D7; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Yoda */ | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-section  | ||||||
|  | { | ||||||
|  |   color: #78BB65; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Mace Windu */ | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-selector-tag  | ||||||
|  | { | ||||||
|  |   color: #B45EA4; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Millenium Falcon */ | ||||||
|  | .hljs  | ||||||
|  | { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   background: #1C1D21; | ||||||
|  |   color: #c0c5ce; | ||||||
|  |   padding: 0.5em; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis  | ||||||
|  | { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong  | ||||||
|  | { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
							
								
								
									
										77
									
								
								lib/3rdparty/highlight/styles/atom-one-dark-reasonable.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								lib/3rdparty/highlight/styles/atom-one-dark-reasonable.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | |||||||
|  | /* | ||||||
|  | 
 | ||||||
|  | Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage | ||||||
|  | 
 | ||||||
|  | Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax | ||||||
|  | 
 | ||||||
|  | */ | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   line-height: 1.3em; | ||||||
|  |   color: #abb2bf; | ||||||
|  |   background: #282c34; | ||||||
|  |   border-radius: 5px; | ||||||
|  | } | ||||||
|  | .hljs-keyword, .hljs-operator { | ||||||
|  |   color: #F92672; | ||||||
|  | } | ||||||
|  | .hljs-pattern-match { | ||||||
|  |   color: #F92672; | ||||||
|  | } | ||||||
|  | .hljs-pattern-match .hljs-constructor { | ||||||
|  |   color: #61aeee; | ||||||
|  | } | ||||||
|  | .hljs-function { | ||||||
|  |   color: #61aeee; | ||||||
|  | } | ||||||
|  | .hljs-function .hljs-params { | ||||||
|  |   color: #A6E22E; | ||||||
|  | } | ||||||
|  | .hljs-function .hljs-params .hljs-typing { | ||||||
|  |   color: #FD971F; | ||||||
|  | } | ||||||
|  | .hljs-module-access .hljs-module { | ||||||
|  |   color: #7e57c2; | ||||||
|  | } | ||||||
|  | .hljs-constructor { | ||||||
|  |   color: #e2b93d; | ||||||
|  | } | ||||||
|  | .hljs-constructor .hljs-string { | ||||||
|  |   color: #9CCC65; | ||||||
|  | } | ||||||
|  | .hljs-comment, .hljs-quote { | ||||||
|  |   color: #b18eb1; | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | .hljs-doctag, .hljs-formula { | ||||||
|  |   color: #c678dd; | ||||||
|  | } | ||||||
|  | .hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst { | ||||||
|  |   color: #e06c75; | ||||||
|  | } | ||||||
|  | .hljs-literal { | ||||||
|  |   color: #56b6c2; | ||||||
|  | } | ||||||
|  | .hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string { | ||||||
|  |   color: #98c379; | ||||||
|  | } | ||||||
|  | .hljs-built_in, .hljs-class .hljs-title { | ||||||
|  |   color: #e6c07b; | ||||||
|  | } | ||||||
|  | .hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number { | ||||||
|  |   color: #d19a66; | ||||||
|  | } | ||||||
|  | .hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title { | ||||||
|  |   color: #61aeee; | ||||||
|  | } | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | .hljs-link { | ||||||
|  |   text-decoration: underline; | ||||||
|  | } | ||||||
							
								
								
									
										78
									
								
								lib/3rdparty/highlight/styles/gml.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								lib/3rdparty/highlight/styles/gml.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,78 @@ | |||||||
|  | /* | ||||||
|  | 
 | ||||||
|  | GML Theme - Meseta <meseta@gmail.com> | ||||||
|  | 
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   background: #222222; | ||||||
|  |   color: #C0C0C0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keywords { | ||||||
|  |   color: #FFB871; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-built_in { | ||||||
|  |   color: #FFB871; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-literal { | ||||||
|  |   color: #FF8080; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-symbol { | ||||||
|  |   color: #58E55A; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-comment { | ||||||
|  |   color: #5B995B; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-string { | ||||||
|  |   color: #FFFF00; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-number { | ||||||
|  |   color: #FF8080; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-attribute, | ||||||
|  | .hljs-selector-tag, | ||||||
|  | .hljs-doctag, | ||||||
|  | .hljs-name, | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-code, | ||||||
|  | .hljs-addition, | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable, | ||||||
|  | .hljs-link, | ||||||
|  | .hljs-selector-attr, | ||||||
|  | .hljs-selector-pseudo, | ||||||
|  | .hljs-type, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-quote, | ||||||
|  | .hljs-template-tag, | ||||||
|  | .hljs-deletion, | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-section, | ||||||
|  | .hljs-function, | ||||||
|  | .hljs-meta-keyword, | ||||||
|  | .hljs-meta, | ||||||
|  | .hljs-subst { | ||||||
|  |   color: #C0C0C0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
							
								
								
									
										112
									
								
								lib/3rdparty/highlight/styles/isbl-editor-dark.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								lib/3rdparty/highlight/styles/isbl-editor-dark.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,112 @@ | |||||||
|  | /* | ||||||
|  | 
 | ||||||
|  | ISBL Editor style dark color scheme (c) Dmitriy Tarasov <dimatar@gmail.com> | ||||||
|  | 
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   background: #404040; | ||||||
|  |   color: #f0f0f0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Base color: saturation 0; */ | ||||||
|  | 
 | ||||||
|  | .hljs, | ||||||
|  | .hljs-subst { | ||||||
|  |   color: #f0f0f0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-comment { | ||||||
|  |   color: #b5b5b5; | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-attribute, | ||||||
|  | .hljs-selector-tag, | ||||||
|  | .hljs-meta-keyword, | ||||||
|  | .hljs-doctag, | ||||||
|  | .hljs-name { | ||||||
|  |   color: #f0f0f0; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* User color: hue: 0 */ | ||||||
|  | 
 | ||||||
|  | .hljs-string { | ||||||
|  |   color: #97bf0d; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-type, | ||||||
|  | .hljs-number, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-quote, | ||||||
|  | .hljs-template-tag, | ||||||
|  | .hljs-deletion { | ||||||
|  |   color: #f0f0f0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-section { | ||||||
|  |   color: #df471e; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-title>.hljs-built_in { | ||||||
|  |   color: #81bce9; | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable, | ||||||
|  | .hljs-link, | ||||||
|  | .hljs-selector-attr, | ||||||
|  | .hljs-selector-pseudo { | ||||||
|  |   color: #e2c696; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Language color: hue: 90; */ | ||||||
|  | 
 | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-literal { | ||||||
|  |   color: #97bf0d; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-code, | ||||||
|  | .hljs-addition { | ||||||
|  |   color: #397300; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-class  { | ||||||
|  |   color: #ce9d4d; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Meta color: hue: 200 */ | ||||||
|  | 
 | ||||||
|  | .hljs-meta { | ||||||
|  |   color: #1f7199; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-meta-string { | ||||||
|  |   color: #4d99bf; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Misc effects */ | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
							
								
								
									
										112
									
								
								lib/3rdparty/highlight/styles/isbl-editor-light.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								lib/3rdparty/highlight/styles/isbl-editor-light.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,112 @@ | |||||||
|  | /* | ||||||
|  | 
 | ||||||
|  | ISBL Editor style light color schemec (c) Dmitriy Tarasov <dimatar@gmail.com> | ||||||
|  | 
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   background: white; | ||||||
|  |   color: black; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Base color: saturation 0; */ | ||||||
|  | 
 | ||||||
|  | .hljs, | ||||||
|  | .hljs-subst { | ||||||
|  |   color: #000000; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-comment { | ||||||
|  |   color: #555555; | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-attribute, | ||||||
|  | .hljs-selector-tag, | ||||||
|  | .hljs-meta-keyword, | ||||||
|  | .hljs-doctag, | ||||||
|  | .hljs-name { | ||||||
|  |   color: #000000; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* User color: hue: 0 */ | ||||||
|  | 
 | ||||||
|  | .hljs-string { | ||||||
|  |   color: #000080; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-type, | ||||||
|  | .hljs-number, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-quote, | ||||||
|  | .hljs-template-tag, | ||||||
|  | .hljs-deletion { | ||||||
|  |   color: #000000; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-section { | ||||||
|  |   color: #fb2c00; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-title>.hljs-built_in { | ||||||
|  |   color: #008080; | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable, | ||||||
|  | .hljs-link, | ||||||
|  | .hljs-selector-attr, | ||||||
|  | .hljs-selector-pseudo { | ||||||
|  |   color: #5e1700; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Language color: hue: 90; */ | ||||||
|  | 
 | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-literal { | ||||||
|  |   color: #000080; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-code, | ||||||
|  | .hljs-addition { | ||||||
|  |   color: #397300; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-class  { | ||||||
|  |   color: #6f1C00; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Meta color: hue: 200 */ | ||||||
|  | 
 | ||||||
|  | .hljs-meta { | ||||||
|  |   color: #1f7199; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-meta-string { | ||||||
|  |   color: #4d99bf; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Misc effects */ | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
							
								
								
									
										87
									
								
								lib/3rdparty/highlight/styles/lightfair.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								lib/3rdparty/highlight/styles/lightfair.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,87 @@ | |||||||
|  | /* | ||||||
|  | 
 | ||||||
|  | Lightfair style (c) Tristian Kelly <tristian.kelly560@gmail.com> | ||||||
|  | 
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   padding: 0.5em; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-name { | ||||||
|  |     color:#01a3a3; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-tag,.hljs-meta { | ||||||
|  |     color:#778899; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs, | ||||||
|  | .hljs-subst { | ||||||
|  |     color: #444 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-comment { | ||||||
|  |     color: #888888 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-attribute, | ||||||
|  | .hljs-selector-tag, | ||||||
|  | .hljs-meta-keyword, | ||||||
|  | .hljs-doctag, | ||||||
|  | .hljs-name { | ||||||
|  |     font-weight: bold | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-type, | ||||||
|  | .hljs-string, | ||||||
|  | .hljs-number, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-quote, | ||||||
|  | .hljs-template-tag, | ||||||
|  | .hljs-deletion { | ||||||
|  |     color: #4286f4 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-section { | ||||||
|  |     color: #4286f4; | ||||||
|  |     font-weight: bold | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable, | ||||||
|  | .hljs-link, | ||||||
|  | .hljs-selector-attr, | ||||||
|  | .hljs-selector-pseudo { | ||||||
|  |     color: #BC6060 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-literal { | ||||||
|  |     color: #62bcbc | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-code, | ||||||
|  | .hljs-addition { | ||||||
|  |     color: #25c6c6 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-meta-string { | ||||||
|  |     color: #4d99bf | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |     font-style: italic | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |     font-weight: bold | ||||||
|  | } | ||||||
							
								
								
									
										309
									
								
								lib/3rdparty/highlight/styles/nord.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										309
									
								
								lib/3rdparty/highlight/styles/nord.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,309 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2017-present Arctic Ice Studio <development@arcticicestudio.com> | ||||||
|  |  * Copyright (c) 2017-present Sven Greb <development@svengreb.de> | ||||||
|  |  * | ||||||
|  |  * Project:    Nord highlight.js | ||||||
|  |  * Version:    0.1.0 | ||||||
|  |  * Repository: https://github.com/arcticicestudio/nord-highlightjs | ||||||
|  |  * License:    MIT | ||||||
|  |  * References: | ||||||
|  |  *   https://github.com/arcticicestudio/nord | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   background: #2E3440; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs, | ||||||
|  | .hljs-subst { | ||||||
|  |   color: #D8DEE9; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-selector-tag { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-selector-id { | ||||||
|  |   color: #8FBCBB; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-selector-class { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-selector-attr { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-selector-pseudo { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-addition { | ||||||
|  |   background-color: rgba(163, 190, 140, 0.5); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-deletion { | ||||||
|  |   background-color: rgba(191, 97, 106, 0.5); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-type { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-class { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-function { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-function > .hljs-title { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-literal, | ||||||
|  | .hljs-symbol { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-number { | ||||||
|  |   color: #B48EAD; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-regexp { | ||||||
|  |   color: #EBCB8B; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-string { | ||||||
|  |   color: #A3BE8C; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-title { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-params { | ||||||
|  |   color: #D8DEE9; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-bullet { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-code { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-formula { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-link:hover { | ||||||
|  |   text-decoration: underline; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-quote { | ||||||
|  |   color: #4C566A; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-comment { | ||||||
|  |   color: #4C566A; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-doctag { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-meta, | ||||||
|  | .hljs-meta-keyword { | ||||||
|  |   color: #5E81AC; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-meta-string { | ||||||
|  |   color: #A3BE8C; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-attr { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-attribute { | ||||||
|  |   color: #D8DEE9; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-builtin-name { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-name { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-section { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-tag { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-variable { | ||||||
|  |   color: #D8DEE9; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-template-variable { | ||||||
|  |   color: #D8DEE9; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-template-tag { | ||||||
|  |   color: #5E81AC; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .abnf .hljs-attribute { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .abnf .hljs-symbol { | ||||||
|  |   color: #EBCB8B; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .apache .hljs-attribute { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .apache .hljs-section { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .arduino .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .aspectj .hljs-meta { | ||||||
|  |   color: #D08770; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .aspectj > .hljs-title { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .bnf .hljs-attribute { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .clojure .hljs-name { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .clojure .hljs-symbol { | ||||||
|  |   color: #EBCB8B; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .coq .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .cpp .hljs-meta-string { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .css .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .css .hljs-keyword { | ||||||
|  |   color: #D08770; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .diff .hljs-meta { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .ebnf .hljs-attribute { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .glsl .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .groovy .hljs-meta:not(:first-child) { | ||||||
|  |   color: #D08770; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .haxe .hljs-meta { | ||||||
|  |   color: #D08770; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .java .hljs-meta { | ||||||
|  |   color: #D08770; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .ldif .hljs-attribute { | ||||||
|  |   color: #8FBCBB; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .lisp .hljs-name { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .lua .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .moonscript .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .nginx .hljs-attribute { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .nginx .hljs-section { | ||||||
|  |   color: #5E81AC; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .pf .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .processing .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .scss .hljs-keyword { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .stylus .hljs-keyword { | ||||||
|  |   color: #81A1C1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .swift .hljs-meta { | ||||||
|  |   color: #D08770; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .vim .hljs-built_in { | ||||||
|  |   color: #88C0D0; | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .yaml .hljs-meta { | ||||||
|  |   color: #D08770; | ||||||
|  | } | ||||||
							
								
								
									
										108
									
								
								lib/3rdparty/highlight/styles/routeros.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								lib/3rdparty/highlight/styles/routeros.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,108 @@ | |||||||
|  | /* | ||||||
|  | 
 | ||||||
|  |  highlight.js style for Microtik RouterOS script | ||||||
|  | 
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   background: #F0F0F0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Base color: saturation 0; */ | ||||||
|  | 
 | ||||||
|  | .hljs, | ||||||
|  | .hljs-subst { | ||||||
|  |   color: #444; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-comment { | ||||||
|  |   color: #888888; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-selector-tag, | ||||||
|  | .hljs-meta-keyword, | ||||||
|  | .hljs-doctag, | ||||||
|  | .hljs-name { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-attribute { | ||||||
|  |   color: #0E9A00; | ||||||
|  | }     | ||||||
|  | 
 | ||||||
|  | .hljs-function { | ||||||
|  |   color: #99069A; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-builtin-name { | ||||||
|  |   color: #99069A; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* User color: hue: 0 */ | ||||||
|  | 
 | ||||||
|  | .hljs-type, | ||||||
|  | .hljs-string, | ||||||
|  | .hljs-number, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-quote, | ||||||
|  | .hljs-template-tag, | ||||||
|  | .hljs-deletion { | ||||||
|  |   color: #880000; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-section { | ||||||
|  |   color: #880000; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable, | ||||||
|  | .hljs-link, | ||||||
|  | .hljs-selector-attr, | ||||||
|  | .hljs-selector-pseudo { | ||||||
|  |   color: #BC6060; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Language color: hue: 90; */ | ||||||
|  | 
 | ||||||
|  | .hljs-literal { | ||||||
|  |   color: #78A960; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-code, | ||||||
|  | .hljs-addition { | ||||||
|  |   color: #0C9A9A; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Meta color: hue: 200 */ | ||||||
|  | 
 | ||||||
|  | .hljs-meta { | ||||||
|  |   color: #1f7199; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-meta-string { | ||||||
|  |   color: #4d99bf; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Misc effects */ | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
							
								
								
									
										97
									
								
								lib/3rdparty/highlight/styles/shades-of-purple.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								lib/3rdparty/highlight/styles/shades-of-purple.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,97 @@ | |||||||
|  | /** | ||||||
|  |  * Shades of Purple Theme — for Highlightjs. | ||||||
|  |  * | ||||||
|  |  * @author (c) Ahmad Awais <https://twitter.com/mrahmadawais/> | ||||||
|  |  * @link GitHub Repo → https://github.com/ahmadawais/Shades-of-Purple-HighlightJS | ||||||
|  |  * @version 1.5.0 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   /* Custom font is optional */ | ||||||
|  |   /* font-family: 'Operator Mono', 'Fira Code', 'Menlo', 'Monaco', 'Courier New', 'monospace';  */ | ||||||
|  |   line-height: 1.45; | ||||||
|  |   padding: 2rem; | ||||||
|  |   background: #2d2b57; | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-title { | ||||||
|  |   color: #fad000; | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-name { | ||||||
|  |   color: #a1feff; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-tag { | ||||||
|  |   color: #ffffff; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-attr { | ||||||
|  |   color: #f8d000; | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-selector-tag, | ||||||
|  | .hljs-section { | ||||||
|  |   color: #fb9e00; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keyword { | ||||||
|  |   color: #fb9e00; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs, | ||||||
|  | .hljs-subst { | ||||||
|  |   color: #e3dfff; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-string, | ||||||
|  | .hljs-attribute, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-addition, | ||||||
|  | .hljs-code, | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-selector-attr, | ||||||
|  | .hljs-selector-pseudo, | ||||||
|  | .hljs-template-tag, | ||||||
|  | .hljs-quote, | ||||||
|  | .hljs-deletion { | ||||||
|  |   color: #4cd213; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-meta, | ||||||
|  | .hljs-meta-string { | ||||||
|  |   color: #fb9e00; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-comment { | ||||||
|  |   color: #ac65ff; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-selector-tag, | ||||||
|  | .hljs-literal, | ||||||
|  | .hljs-name, | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-literal, | ||||||
|  | .hljs-number { | ||||||
|  |   color: #fa658d; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
							
								
								
									
										115
									
								
								lib/3rdparty/highlight/styles/vs2015.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								lib/3rdparty/highlight/styles/vs2015.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,115 @@ | |||||||
|  | /* | ||||||
|  |  * Visual Studio 2015 dark style | ||||||
|  |  * Author: Nicolas LLOBERA <nllobera@gmail.com> | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | .hljs { | ||||||
|  |   display: block; | ||||||
|  |   overflow-x: auto; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   background: #1E1E1E; | ||||||
|  |   color: #DCDCDC; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-keyword, | ||||||
|  | .hljs-literal, | ||||||
|  | .hljs-symbol, | ||||||
|  | .hljs-name { | ||||||
|  |   color: #569CD6; | ||||||
|  | } | ||||||
|  | .hljs-link { | ||||||
|  |   color: #569CD6; | ||||||
|  |   text-decoration: underline; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-built_in, | ||||||
|  | .hljs-type { | ||||||
|  |   color: #4EC9B0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-number, | ||||||
|  | .hljs-class { | ||||||
|  |   color: #B8D7A3; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-string, | ||||||
|  | .hljs-meta-string { | ||||||
|  |   color: #D69D85; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-regexp, | ||||||
|  | .hljs-template-tag { | ||||||
|  |   color: #9A5334; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-subst, | ||||||
|  | .hljs-function, | ||||||
|  | .hljs-title, | ||||||
|  | .hljs-params, | ||||||
|  | .hljs-formula { | ||||||
|  |   color: #DCDCDC; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-comment, | ||||||
|  | .hljs-quote { | ||||||
|  |   color: #57A64A; | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-doctag { | ||||||
|  |   color: #608B4E; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-meta, | ||||||
|  | .hljs-meta-keyword, | ||||||
|  | .hljs-tag { | ||||||
|  |   color: #9B9B9B; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-variable, | ||||||
|  | .hljs-template-variable { | ||||||
|  |   color: #BD63C5; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-attr, | ||||||
|  | .hljs-attribute, | ||||||
|  | .hljs-builtin-name { | ||||||
|  |   color: #9CDCFE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-section { | ||||||
|  |   color: gold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-emphasis { | ||||||
|  |   font-style: italic; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-strong { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*.hljs-code { | ||||||
|  |   font-family:'Monospace'; | ||||||
|  | }*/ | ||||||
|  | 
 | ||||||
|  | .hljs-bullet, | ||||||
|  | .hljs-selector-tag, | ||||||
|  | .hljs-selector-id, | ||||||
|  | .hljs-selector-class, | ||||||
|  | .hljs-selector-attr, | ||||||
|  | .hljs-selector-pseudo { | ||||||
|  |   color: #D7BA7D; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-addition { | ||||||
|  |   background-color: #144212; | ||||||
|  |   display: inline-block; | ||||||
|  |   width: 100%; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .hljs-deletion { | ||||||
|  |   background-color: #600; | ||||||
|  |   display: inline-block; | ||||||
|  |   width: 100%; | ||||||
|  | } | ||||||
							
								
								
									
										39
									
								
								lib/3rdparty/highlight/styles/xcode.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								lib/3rdparty/highlight/styles/xcode.css
									
									
									
									
										vendored
									
									
								
							| @ -12,55 +12,66 @@ XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com> | |||||||
|   color: black; |   color: black; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /* Gray DOCTYPE selectors like WebKit */ | ||||||
|  | .xml .hljs-meta { | ||||||
|  |   color: #c0c0c0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .hljs-comment, | .hljs-comment, | ||||||
| .hljs-quote { | .hljs-quote { | ||||||
|   color: #006a00; |   color: #007400; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .hljs-tag, | ||||||
|  | .hljs-attribute, | ||||||
| .hljs-keyword, | .hljs-keyword, | ||||||
| .hljs-selector-tag, | .hljs-selector-tag, | ||||||
| .hljs-literal { | .hljs-literal, | ||||||
|   color: #aa0d91; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .hljs-name { | .hljs-name { | ||||||
|   color: #008; |   color: #aa0d91; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .hljs-variable, | .hljs-variable, | ||||||
| .hljs-template-variable { | .hljs-template-variable { | ||||||
|   color: #660; |   color: #3F6E74; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .hljs-string { | .hljs-code, | ||||||
|  | .hljs-string, | ||||||
|  | .hljs-meta-string { | ||||||
|   color: #c41a16; |   color: #c41a16; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .hljs-regexp, | .hljs-regexp, | ||||||
| .hljs-link { | .hljs-link { | ||||||
|   color: #080; |   color: #0E0EFF; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .hljs-title, | .hljs-title, | ||||||
| .hljs-tag, |  | ||||||
| .hljs-symbol, | .hljs-symbol, | ||||||
| .hljs-bullet, | .hljs-bullet, | ||||||
| .hljs-number, | .hljs-number { | ||||||
| .hljs-meta { |  | ||||||
|   color: #1c00cf; |   color: #1c00cf; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .hljs-section, | .hljs-section, | ||||||
|  | .hljs-meta { | ||||||
|  |   color: #643820; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| .hljs-class .hljs-title, | .hljs-class .hljs-title, | ||||||
| .hljs-type, | .hljs-type, | ||||||
| .hljs-attr, |  | ||||||
| .hljs-built_in, | .hljs-built_in, | ||||||
| .hljs-builtin-name, | .hljs-builtin-name, | ||||||
| .hljs-params { | .hljs-params { | ||||||
|   color: #5c2699; |   color: #5c2699; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .hljs-attribute, | .hljs-attr { | ||||||
|  |   color: #836C28; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .hljs-subst { | .hljs-subst { | ||||||
|   color: #000; |   color: #000; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								lib/3rdparty/highlight/styles/xt256.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								lib/3rdparty/highlight/styles/xt256.css
									
									
									
									
										vendored
									
									
								
							| @ -11,7 +11,7 @@ | |||||||
|   overflow-x: auto; |   overflow-x: auto; | ||||||
|   color: #eaeaea; |   color: #eaeaea; | ||||||
|   background: #000; |   background: #000; | ||||||
|   padding: 0.5; |   padding: 0.5em; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .hljs-subst { | .hljs-subst { | ||||||
|  | |||||||
							
								
								
									
										4090
									
								
								lib/3rdparty/pixi-ease.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4090
									
								
								lib/3rdparty/pixi-ease.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3465
									
								
								lib/3rdparty/pixi-viewport.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3465
									
								
								lib/3rdparty/pixi-viewport.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -10,6 +10,7 @@ import Timeline from './timeline.js' | |||||||
| import Theme from './theme.js' | import Theme from './theme.js' | ||||||
| import Button from './button.js' | import Button from './button.js' | ||||||
| import ButtonGroup from './buttongroup.js' | import ButtonGroup from './buttongroup.js' | ||||||
|  | import Scrollview from './scrollview.js' | ||||||
| import Slider from './slider.js' | import Slider from './slider.js' | ||||||
| import Switch from './switch.js' | import Switch from './switch.js' | ||||||
| import Popup from './popup.js' | import Popup from './popup.js' | ||||||
| @ -41,6 +42,7 @@ window.AppTest = AppTest | |||||||
| window.Theme = Theme | window.Theme = Theme | ||||||
| window.Button = Button | window.Button = Button | ||||||
| window.ButtonGroup = ButtonGroup | window.ButtonGroup = ButtonGroup | ||||||
|  | window.Scrollview = Scrollview | ||||||
| window.Slider = Slider | window.Slider = Slider | ||||||
| window.Switch = Switch | window.Switch = Switch | ||||||
| window.Popup = Popup | window.Popup = Popup | ||||||
|  | |||||||
							
								
								
									
										585
									
								
								lib/pixi/scrollbox.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										585
									
								
								lib/pixi/scrollbox.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,585 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * pixi.js scrollbox: a masked content box that can scroll vertically or horizontally with scrollbars | ||||||
|  |  */ | ||||||
|  | export default class Scrollbox extends PIXI.Container { | ||||||
|  |     /** | ||||||
|  |      * create a scrollbox | ||||||
|  |      * @param {object} options | ||||||
|  |      * @param {boolean} [options.dragScroll=true] user may drag the content area to scroll content | ||||||
|  |      * @param {string} [options.overflowX=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown | ||||||
|  |      * @param {string} [options.overflowY=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown | ||||||
|  |      * @param {string} [options.overflow] (none, scroll, hidden, auto) sets overflowX and overflowY to this value | ||||||
|  |      * @param {number} [options.boxWidth=100] width of scrollbox including scrollbar (in pixels) | ||||||
|  |      * @param {number} [options.boxHeight=100] height of scrollbox including scrollbar (in pixels) | ||||||
|  |      * @param {number} [options.scrollbarSize=10] size of scrollbar (in pixels) | ||||||
|  |      * @param {number} [options.scrollbarOffsetHorizontal=0] offset of horizontal scrollbar (in pixels) | ||||||
|  |      * @param {number} [options.scrollbarOffsetVertical=0] offset of vertical scrollbar (in pixels) | ||||||
|  |      * @param {boolean} [options.stopPropagation=true] call stopPropagation on any events that impact scrollbox | ||||||
|  |      * @param {number} [options.scrollbarBackground=0xdddddd] background color of scrollbar | ||||||
|  |      * @param {number} [options.scrollbarBackgroundAlpha=1] alpha of background of scrollbar | ||||||
|  |      * @param {number} [options.scrollbarForeground=0x888888] foreground color of scrollbar | ||||||
|  |      * @param {number} [options.scrollbarForegroundAlpha=1] alpha of foreground of scrollbar | ||||||
|  |      * @param {string} [options.underflow=top-left] what to do when content underflows the scrollbox size: none: do nothing; (left/right/center AND top/bottom/center); OR center (e.g., 'top-left', 'center', 'none', 'bottomright') | ||||||
|  |      * @param {(boolean|number)} [options.fade] fade the scrollbar when not in use (true = 1000ms) | ||||||
|  |      * @param {number} [options.fadeWait=3000] time to wait before fading the scrollbar if options.fade is set | ||||||
|  |      * @param {(string|function)} [options.fadeEase=easeInOutSine] easing function to use for fading | ||||||
|  |      */ | ||||||
|  |     constructor(options) | ||||||
|  |     { | ||||||
|  |         super() | ||||||
|  |         this.options = Object.assign({}, { | ||||||
|  |             "boxWidth": 100, | ||||||
|  |             "boxHeight": 100, | ||||||
|  |             "scrollbarSize": 10, | ||||||
|  |             "scrollbarBackground": 14540253, | ||||||
|  |             "scrollbarBackgroundAlpha": 1, | ||||||
|  |             "scrollbarForeground": 8947848, | ||||||
|  |             "scrollbarForegroundAlpha": 1, | ||||||
|  |             "dragScroll": true, | ||||||
|  |             "stopPropagation": true, | ||||||
|  |             "scrollbarOffsetHorizontal": 0, | ||||||
|  |             "scrollbarOffsetVertical": 0, | ||||||
|  |             "underflow": "top-left", | ||||||
|  |             "fadeScrollbar": false, | ||||||
|  |             "fadeWait": 3000, | ||||||
|  |             "fadeEase": "easeInOutSine" | ||||||
|  |         }, options) | ||||||
|  |         this.ease = new PIXI.extras.Ease.list() | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * content in placed in here | ||||||
|  |          * you can use any function from pixi-viewport on content to manually move the content (see https://davidfig.github.io/pixi-viewport/jsdoc/)
 | ||||||
|  |          * @type {PIXI.extras.Viewport} | ||||||
|  |          */ | ||||||
|  |         this.content = this.addChild(new PIXI.extras.Viewport({ passiveWheel: this.options.stopPropagation, stopPropagation: this.options.stopPropagation, screenWidth: this.options.boxWidth, screenHeight: this.options.boxHeight })) | ||||||
|  |         this.content | ||||||
|  |             .decelerate() | ||||||
|  |             .on('moved', () => this._drawScrollbars()) | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * graphics element for drawing the scrollbars | ||||||
|  |          * @type {PIXI.Graphics} | ||||||
|  |          */ | ||||||
|  |         this.scrollbar = this.addChild(new PIXI.Graphics()) | ||||||
|  |         this.scrollbar.interactive = true | ||||||
|  |         this.scrollbar.on('pointerdown', this.scrollbarDown, this) | ||||||
|  |         this.interactive = true | ||||||
|  |         this.on('pointermove', this.scrollbarMove, this) | ||||||
|  |         this.on('pointerup', this.scrollbarUp, this) | ||||||
|  |         this.on('pointercancel', this.scrollbarUp, this) | ||||||
|  |         this.on('pointerupoutside', this.scrollbarUp, this) | ||||||
|  |         this._maskContent = this.addChild(new PIXI.Graphics()) | ||||||
|  |         this.update() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * offset of horizontal scrollbar (in pixels) | ||||||
|  |      * @type {number} | ||||||
|  |      */ | ||||||
|  |     get scrollbarOffsetHorizontal() | ||||||
|  |     { | ||||||
|  |         return this.options.scrollbarOffsetHorizontal | ||||||
|  |     } | ||||||
|  |     set scrollbarOffsetHorizontal(value) | ||||||
|  |     { | ||||||
|  |         this.options.scrollbarOffsetHorizontal = value | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * offset of vertical scrollbar (in pixels) | ||||||
|  |      * @type {number} | ||||||
|  |      */ | ||||||
|  |     get scrollbarOffsetVertical() | ||||||
|  |     { | ||||||
|  |         return this.options.scrollbarOffsetVertical | ||||||
|  |     } | ||||||
|  |     set scrollbarOffsetVertical(value) | ||||||
|  |     { | ||||||
|  |         this.options.scrollbarOffsetVertical = value | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * disable the scrollbox (if set to true this will also remove the mask) | ||||||
|  |      * @type {boolean} | ||||||
|  |      */ | ||||||
|  |     get disable() | ||||||
|  |     { | ||||||
|  |         return this._disabled | ||||||
|  |     } | ||||||
|  |     set disable(value) | ||||||
|  |     { | ||||||
|  |         if (this._disabled !== value) | ||||||
|  |         { | ||||||
|  |             this._disabled = value | ||||||
|  |             this.update() | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * call stopPropagation on any events that impact scrollbox | ||||||
|  |      * @type {boolean} | ||||||
|  |      */ | ||||||
|  |     get stopPropagation() | ||||||
|  |     { | ||||||
|  |         return this.options.stopPropagation | ||||||
|  |     } | ||||||
|  |     set stopPropagation(value) | ||||||
|  |     { | ||||||
|  |         this.options.stopPropagation = value | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * user may drag the content area to scroll content | ||||||
|  |      * @type {boolean} | ||||||
|  |      */ | ||||||
|  |     get dragScroll() | ||||||
|  |     { | ||||||
|  |         return this.options.dragScroll | ||||||
|  |     } | ||||||
|  |     set dragScroll(value) | ||||||
|  |     { | ||||||
|  |         this.options.dragScroll = value | ||||||
|  |         if (value) | ||||||
|  |         { | ||||||
|  |             this.content.drag() | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             this.content.removePlugin('drag') | ||||||
|  |         } | ||||||
|  |         this.update() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * width of scrollbox including the scrollbar (if visible)- this changes the size and not the scale of the box | ||||||
|  |      * @type {number} | ||||||
|  |      */ | ||||||
|  |     get boxWidth() | ||||||
|  |     { | ||||||
|  |         return this.options.boxWidth | ||||||
|  |     } | ||||||
|  |     set boxWidth(value) | ||||||
|  |     { | ||||||
|  |         this.options.boxWidth = value | ||||||
|  |         this.content.screenWidth = value | ||||||
|  |         this.update() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * sets overflowX and overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown | ||||||
|  |      * scroll = always show scrollbar | ||||||
|  |      * hidden = hide overflow and do not show scrollbar | ||||||
|  |      * auto = if content is larger than box size, then show scrollbar | ||||||
|  |      * @type {string} | ||||||
|  |      */ | ||||||
|  |     get overflow() | ||||||
|  |     { | ||||||
|  |         return this.options.overflow | ||||||
|  |     } | ||||||
|  |     set overflow(value) | ||||||
|  |     { | ||||||
|  |         this.options.overflow = value | ||||||
|  |         this.options.overflowX = value | ||||||
|  |         this.options.overflowY = value | ||||||
|  |         this.update() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * sets overflowX to (scroll, hidden, auto) changing whether the scrollbar is shown | ||||||
|  |      * scroll = always show scrollbar | ||||||
|  |      * hidden = hide overflow and do not show scrollbar | ||||||
|  |      * auto = if content is larger than box size, then show scrollbar | ||||||
|  |      * @type {string} | ||||||
|  |      */ | ||||||
|  |     get overflowX() | ||||||
|  |     { | ||||||
|  |         return this.options.overflowX | ||||||
|  |     } | ||||||
|  |     set overflowX(value) | ||||||
|  |     { | ||||||
|  |         this.options.overflowX = value | ||||||
|  |         this.update() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * sets overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown | ||||||
|  |      * scroll = always show scrollbar | ||||||
|  |      * hidden = hide overflow and do not show scrollbar | ||||||
|  |      * auto = if content is larger than box size, then show scrollbar | ||||||
|  |      * @type {string} | ||||||
|  |      */ | ||||||
|  |     get overflowY() | ||||||
|  |     { | ||||||
|  |         return this.options.overflowY | ||||||
|  |     } | ||||||
|  |     set overflowY(value) | ||||||
|  |     { | ||||||
|  |         this.options.overflowY = value | ||||||
|  |         this.update() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * height of scrollbox including the scrollbar (if visible) - this changes the size and not the scale of the box | ||||||
|  |      * @type {number} | ||||||
|  |      */ | ||||||
|  |     get boxHeight() | ||||||
|  |     { | ||||||
|  |         return this.options.boxHeight | ||||||
|  |     } | ||||||
|  |     set boxHeight(value) | ||||||
|  |     { | ||||||
|  |         this.options.boxHeight = value | ||||||
|  |         this.content.screenHeight = value | ||||||
|  |         this.update() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * scrollbar size in pixels | ||||||
|  |      * @type {number} | ||||||
|  |      */ | ||||||
|  |     get scrollbarSize() | ||||||
|  |     { | ||||||
|  |         return this.options.scrollbarSize | ||||||
|  |     } | ||||||
|  |     set scrollbarSize(value) | ||||||
|  |     { | ||||||
|  |         this.options.scrollbarSize = value | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * width of scrollbox less the scrollbar (if visible) | ||||||
|  |      * @type {number} | ||||||
|  |      * @readonly | ||||||
|  |      */ | ||||||
|  |     get contentWidth() | ||||||
|  |     { | ||||||
|  |         return this.options.boxWidth - (this.isScrollbarVertical ? this.options.scrollbarSize : 0) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * height of scrollbox less the scrollbar (if visible) | ||||||
|  |      * @type {number} | ||||||
|  |      * @readonly | ||||||
|  |      */ | ||||||
|  |     get contentHeight() | ||||||
|  |     { | ||||||
|  |         return this.options.boxHeight - (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * is the vertical scrollbar visible | ||||||
|  |      * @type {boolean} | ||||||
|  |      * @readonly | ||||||
|  |      */ | ||||||
|  |     get isScrollbarVertical() | ||||||
|  |     { | ||||||
|  |         return this._isScrollbarVertical | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * is the horizontal scrollbar visible | ||||||
|  |      * @type {boolean} | ||||||
|  |      * @readonly | ||||||
|  |      */ | ||||||
|  |     get isScrollbarHorizontal() | ||||||
|  |     { | ||||||
|  |         return this._isScrollbarHorizontal | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * top coordinate of scrollbar | ||||||
|  |      */ | ||||||
|  |     get scrollTop() | ||||||
|  |     { | ||||||
|  |         return this.content.top | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * left coordinate of scrollbar | ||||||
|  |      */ | ||||||
|  |     get scrollLeft() | ||||||
|  |     { | ||||||
|  |         return this.content.left | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * width of content area | ||||||
|  |      * if not set then it uses content.width to calculate width | ||||||
|  |      */ | ||||||
|  |     get scrollWidth() | ||||||
|  |     { | ||||||
|  |         return this._scrollWidth || this.content.width | ||||||
|  |     } | ||||||
|  |     set scrollWidth(value) | ||||||
|  |     { | ||||||
|  |         this._scrollWidth = value | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * height of content area | ||||||
|  |      * if not set then it uses content.height to calculate height | ||||||
|  |      */ | ||||||
|  |     get scrollHeight() | ||||||
|  |     { | ||||||
|  |         return this._scrollHeight || this.content.height | ||||||
|  |     } | ||||||
|  |     set scrollHeight(value) | ||||||
|  |     { | ||||||
|  |         this._scrollHeight = value | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * draws scrollbars | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     _drawScrollbars() | ||||||
|  |     { | ||||||
|  |         this._isScrollbarHorizontal = this.overflowX === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowX) !== -1 ? false : this.scrollWidth > this.options.boxWidth | ||||||
|  |         this._isScrollbarVertical = this.overflowY === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowY) !== -1 ? false : this.scrollHeight > this.options.boxHeight | ||||||
|  |         this.scrollbar.clear() | ||||||
|  |         let options = {} | ||||||
|  |         options.left = 0 | ||||||
|  |         options.right = this.scrollWidth + (this._isScrollbarVertical ? this.options.scrollbarSize : 0) | ||||||
|  |         options.top = 0 | ||||||
|  |         options.bottom = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0) | ||||||
|  |         const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0) | ||||||
|  |         const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0) | ||||||
|  |         this.scrollbarTop = (this.content.top / height) * this.boxHeight | ||||||
|  |         this.scrollbarTop = this.scrollbarTop < 0 ? 0 : this.scrollbarTop | ||||||
|  |         this.scrollbarHeight = (this.boxHeight / height) * this.boxHeight | ||||||
|  |         this.scrollbarHeight = this.scrollbarTop + this.scrollbarHeight > this.boxHeight ? this.boxHeight - this.scrollbarTop : this.scrollbarHeight | ||||||
|  |         this.scrollbarLeft = (this.content.left / width) * this.boxWidth | ||||||
|  |         this.scrollbarLeft = this.scrollbarLeft < 0 ? 0 : this.scrollbarLeft | ||||||
|  |         this.scrollbarWidth = (this.boxWidth / width) * this.boxWidth | ||||||
|  |         this.scrollbarWidth = this.scrollbarWidth + this.scrollbarLeft > this.boxWidth ? this.boxWidth - this.scrollbarLeft : this.scrollbarWidth | ||||||
|  |         if (this.isScrollbarVertical) | ||||||
|  |         { | ||||||
|  |             this.scrollbar | ||||||
|  |                 .beginFill(this.options.scrollbarBackground, this.options.scrollbarBackgroundAlpha) | ||||||
|  |                 .drawRect(this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical, 0, this.scrollbarSize, this.boxHeight) | ||||||
|  |                 .endFill() | ||||||
|  |         } | ||||||
|  |         if (this.isScrollbarHorizontal) | ||||||
|  |         { | ||||||
|  |             this.scrollbar | ||||||
|  |                 .beginFill(this.options.scrollbarBackground, this.options.scrollbarBackgroundAlpha) | ||||||
|  |                 .drawRect(0, this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal, this.boxWidth, this.scrollbarSize) | ||||||
|  |                 .endFill() | ||||||
|  |         } | ||||||
|  |         if (this.isScrollbarVertical) | ||||||
|  |         { | ||||||
|  |             this.scrollbar | ||||||
|  |                 .beginFill(this.options.scrollbarForeground, this.options.scrollbarForegroundAlpha) | ||||||
|  |                 .drawRect(this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical, this.scrollbarTop, this.scrollbarSize, this.scrollbarHeight) | ||||||
|  |                 .endFill() | ||||||
|  |         } | ||||||
|  |         if (this.isScrollbarHorizontal) | ||||||
|  |         { | ||||||
|  |             this.scrollbar | ||||||
|  |                 .beginFill(this.options.scrollbarForeground, this.options.scrollbarForegroundAlpha) | ||||||
|  |                 .drawRect(this.scrollbarLeft, this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal, this.scrollbarWidth, this.scrollbarSize) | ||||||
|  |                 .endFill() | ||||||
|  |         } | ||||||
|  |         // this.content.forceHitArea = new PIXI.Rectangle(0, 0 , this.boxWidth, this.boxHeight)
 | ||||||
|  |         this.activateFade() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * draws mask layer | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     _drawMask() | ||||||
|  |     { | ||||||
|  |         this._maskContent | ||||||
|  |             .beginFill(0) | ||||||
|  |             .drawRect(0, 0, this.boxWidth, this.boxHeight) | ||||||
|  |             .endFill() | ||||||
|  |         this.content.mask = this._maskContent | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * call when scrollbox content changes | ||||||
|  |      */ | ||||||
|  |     update() | ||||||
|  |     { | ||||||
|  |         this.content.mask = null | ||||||
|  |         this._maskContent.clear() | ||||||
|  |         if (!this._disabled) | ||||||
|  |         { | ||||||
|  |             this._drawScrollbars() | ||||||
|  |             this._drawMask() | ||||||
|  |             if (this.options.dragScroll) | ||||||
|  |             { | ||||||
|  |                 const direction = this.isScrollbarHorizontal && this.isScrollbarVertical ? 'all' : this.isScrollbarHorizontal ? 'x' : 'y' | ||||||
|  |                 if (direction !== null) | ||||||
|  |                 { | ||||||
|  |                     this.content | ||||||
|  |                         .drag({ clampWheel: true, direction }) | ||||||
|  |                         .clamp({ direction, underflow: this.options.underflow }) | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * show the scrollbar and restart the timer for fade if options.fade is set | ||||||
|  |      */ | ||||||
|  |     activateFade() | ||||||
|  |     { | ||||||
|  |         if (this.options.fade) | ||||||
|  |         { | ||||||
|  |             if (this.fade) | ||||||
|  |             { | ||||||
|  |                 this.ease.remove(this.fade) | ||||||
|  |             } | ||||||
|  |             this.scrollbar.alpha = 1 | ||||||
|  |             const time = this.options.fade === true ? 1000 : this.options.fade | ||||||
|  |             this.fade = this.ease.to(this.scrollbar, { alpha: 0 }, time, { wait: this.options.fadeWait, ease: this.options.fadeEase }) | ||||||
|  |             this.fade.on('each', () => this.content.dirty = true) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * handle pointer down on scrollbar | ||||||
|  |      * @param {PIXI.interaction.InteractionEvent} e | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     scrollbarDown(e) | ||||||
|  |     { | ||||||
|  |         const local = this.toLocal(e.data.global) | ||||||
|  |         if (this.isScrollbarHorizontal) | ||||||
|  |         { | ||||||
|  |             if (local.y > this.boxHeight - this.scrollbarSize) | ||||||
|  |             { | ||||||
|  |                 if (local.x >= this.scrollbarLeft && local.x <= this.scrollbarLeft + this.scrollbarWidth) | ||||||
|  |                 { | ||||||
|  |                     this.pointerDown = { type: 'horizontal', last: local } | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     if (local.x > this.scrollbarLeft) | ||||||
|  |                     { | ||||||
|  |                         this.content.left += this.content.worldScreenWidth | ||||||
|  |                         this.update() | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         this.content.left -= this.content.worldScreenWidth | ||||||
|  |                         this.update() | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 if (this.options.stopPropagation) | ||||||
|  |                 { | ||||||
|  |                     e.stopPropagation() | ||||||
|  |                 } | ||||||
|  |                 return | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (this.isScrollbarVertical) | ||||||
|  |         { | ||||||
|  |             if (local.x > this.boxWidth - this.scrollbarSize) | ||||||
|  |             { | ||||||
|  |                 if (local.y >= this.scrollbarTop && local.y <= this.scrollbarTop + this.scrollbarWidth) | ||||||
|  |                 { | ||||||
|  |                     this.pointerDown = { type: 'vertical', last: local } | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     if (local.y > this.scrollbarTop) | ||||||
|  |                     { | ||||||
|  |                         this.content.top += this.content.worldScreenHeight | ||||||
|  |                         this.update() | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         this.content.top -= this.content.worldScreenHeight | ||||||
|  |                         this.update() | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 if (this.options.stopPropagation) | ||||||
|  |                 { | ||||||
|  |                     e.stopPropagation() | ||||||
|  |                 } | ||||||
|  |                 return | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * handle pointer move on scrollbar | ||||||
|  |      * @param {PIXI.interaction.InteractionEvent} e | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     scrollbarMove(e) | ||||||
|  |     { | ||||||
|  |         if (this.pointerDown) | ||||||
|  |         { | ||||||
|  |             if (this.pointerDown.type === 'horizontal') | ||||||
|  |             { | ||||||
|  |                 const local = this.toLocal(e.data.global) | ||||||
|  |                 this.content.left += local.x - this.pointerDown.last.x | ||||||
|  |                 this.pointerDown.last = local | ||||||
|  |                 this.update() | ||||||
|  |             } | ||||||
|  |             else if (this.pointerDown.type === 'vertical') | ||||||
|  |             { | ||||||
|  |                 const local = this.toLocal(e.data.global) | ||||||
|  |                 this.content.top += local.y - this.pointerDown.last.y | ||||||
|  |                 this.pointerDown.last = local | ||||||
|  |                 this.update() | ||||||
|  |             } | ||||||
|  |             if (this.options.stopPropagation) | ||||||
|  |             { | ||||||
|  |                 e.stopPropagation() | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * handle pointer down on scrollbar | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     scrollbarUp() | ||||||
|  |     { | ||||||
|  |         this.pointerDown = null | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * resize the mask for the container | ||||||
|  |      * @param {object} options | ||||||
|  |      * @param {number} [options.boxWidth] width of scrollbox including scrollbar (in pixels) | ||||||
|  |      * @param {number} [options.boxHeight] height of scrollbox including scrollbar (in pixels) | ||||||
|  |      * @param {number} [options.scrollWidth] set the width of the inside of the scrollbox (leave null to use content.width) | ||||||
|  |      * @param {number} [options.scrollHeight] set the height of the inside of the scrollbox (leave null to use content.height) | ||||||
|  |      */ | ||||||
|  |     resize(options) | ||||||
|  |     { | ||||||
|  |         this.options.boxWidth = typeof options.boxWidth !== 'undefined' ? options.boxWidth : this.options.boxWidth | ||||||
|  |         this.options.boxHeight = typeof options.boxHeight !== 'undefined' ? options.boxHeight : this.options.boxHeight | ||||||
|  |         if (options.scrollWidth) | ||||||
|  |         { | ||||||
|  |             this.scrollWidth = options.scrollWidth | ||||||
|  |         } | ||||||
|  |         if (options.scrollHeight) | ||||||
|  |         { | ||||||
|  |             this.scrollHeight = options.scrollHeight | ||||||
|  |         } | ||||||
|  |         this.content.resize(this.options.boxWidth, this.options.boxHeight, this.scrollWidth, this.scrollHeight) | ||||||
|  |         this.update() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * ensure that the bounding box is visible | ||||||
|  |      * @param {number} x - relative to content's coordinate system | ||||||
|  |      * @param {number} y | ||||||
|  |      * @param {number} width | ||||||
|  |      * @param {number} height | ||||||
|  |      */ | ||||||
|  |     ensureVisible(x, y, width, height) | ||||||
|  |     { | ||||||
|  |         this.content.ensureVisible(x, y, width, height) | ||||||
|  |         this._drawScrollbars() | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								lib/pixi/scrollbox.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								lib/pixi/scrollbox.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -13,7 +13,6 @@ | |||||||
|     <script src="../../dist/iwmlib.3rdparty.js"></script> |     <script src="../../dist/iwmlib.3rdparty.js"></script> | ||||||
|     <script src="../../dist/iwmlib.js"></script> |     <script src="../../dist/iwmlib.js"></script> | ||||||
|     <script src="../../dist/iwmlib.pixi.js"></script> |     <script src="../../dist/iwmlib.pixi.js"></script> | ||||||
|     <!-- <script src="./scrollbox.min.js"></script> --> |  | ||||||
| </head> | </head> | ||||||
| <body onload="Doctest.run()"> | <body onload="Doctest.run()"> | ||||||
|     <h1>Scrollview</h1> |     <h1>Scrollview</h1> | ||||||
| @ -37,38 +36,35 @@ | |||||||
| const app = new PIXIApp({ | const app = new PIXIApp({ | ||||||
|     view: canvas, |     view: canvas, | ||||||
|     width: 900, |     width: 900, | ||||||
|     height: 250, |     height: 400, | ||||||
|     transparent: false |     transparent: false | ||||||
| }).setup().run() | }).setup().run() | ||||||
| 
 | 
 | ||||||
| // let scrollview1 = new Scrollview({ | app.loader | ||||||
| //     x: 10, |     .add('elephant1', './assets/elephant-1.jpg') | ||||||
| //     y: 20 |     .add('elephant2', './assets/elephant-2.jpg') | ||||||
| // }) |     .add('elephant3', './assets/elephant-3.jpg') | ||||||
|  |     .load((loader, resources) => { | ||||||
|  |         const sprite1 = new PIXI.Sprite(resources.elephant1.texture) | ||||||
|  |         const sprite2 = new PIXI.Sprite(resources.elephant2.texture) | ||||||
|  |         const sprite3 = new PIXI.Sprite(resources.elephant3.texture) | ||||||
| 
 | 
 | ||||||
| // let scrollview2 = new Scrollview({ |         const scrollview1 = new Scrollview({boxWidth: 300, boxHeight: 180}) | ||||||
| //     x: 90, |         scrollview1.content.addChild(sprite1) | ||||||
| //     y: 20, |         app.scene.addChild(scrollview1) | ||||||
| //     fill: 0xfd355a, |  | ||||||
| //     fillActive: 0x5954d3, |  | ||||||
| //     controlFill: 0xfecd2d, |  | ||||||
| //     controlFillActive: 0xfd413b, |  | ||||||
| //     strokeActiveWidth: 4, |  | ||||||
| //     controlStrokeActive: 0x50d968, |  | ||||||
| //     controlStrokeActiveWidth: 12, |  | ||||||
| //     controlStrokeActiveAlpha: .8, |  | ||||||
| //     tooltip: 'Dies ist ein Switch' |  | ||||||
| // }) |  | ||||||
| 
 | 
 | ||||||
| // const scrollbox = new PIXI.extras.Scrollbox({boxWidth: 500, boxHeight: 200}) |         const scrollview2 = new Scrollview({boxWidth: 300, boxHeight: 300}) | ||||||
| //                 scrollbox.x = 70 |         scrollview2.x = 500 | ||||||
| //                 scrollbox.y = 30 |         scrollview2.y = 30 | ||||||
| 
 |         sprite2.x = 40 | ||||||
| //                 const sprite = new PIXI.Sprite(resources.fulda.texture) |         sprite2.y = 40 | ||||||
| //                 sprite.scale.set(.5, .5) |         sprite2.scale.set(.3, .3) | ||||||
| //                 scrollbox.content.addChild(sprite) |         sprite3.x = 60 | ||||||
| //                 app.stage.addChild(scrollbox) |         sprite3.y = 100 | ||||||
| 
 |         sprite3.alpha = .6 | ||||||
| // app.scene.addChild(switch1, switch2) |         sprite3.scale.set(.5, .5) | ||||||
|  |         scrollview2.content.addChild(sprite2, sprite3) | ||||||
|  |         app.scene.addChild(scrollview2) | ||||||
|  |     }) | ||||||
|     </script> |     </script> | ||||||
| </body> | </body> | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| import Theme from './theme.js' | import Scrollbox from './scrollbox.js' | ||||||
| import Tooltip from './tooltip.js' |  | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Callback for the switch action. |  * Callback for the switch action. | ||||||
| @ -54,140 +53,22 @@ import Tooltip from './tooltip.js' | |||||||
|  * app.scene.addChild(switch1) |  * app.scene.addChild(switch1) | ||||||
|  * |  * | ||||||
|  * @class |  * @class | ||||||
|  * @extends PIXI.Container |  * @extends PIXI.extras.Scrollbox | ||||||
|  * @see {@link http://pixijs.download/dev/docs/PIXI.Container.html|PIXI.Container}
 |  * @see {@link https://davidfig.github.io/pixi-scrollbox/jsdoc/Scrollbox.html|Scrollbox}
 | ||||||
|  * @see {@link https://www.iwm-tuebingen.de/iwmbrowser/lib/pixi/switch.html|DocTest}
 |  * @see {@link https://davidfig.github.io/pixi-viewport/jsdoc/Viewport.html|Viewport}
 | ||||||
|  */ |  */ | ||||||
| export default class Switch extends PIXI.Container { | export default class Scrollview extends Scrollbox { | ||||||
|      |      | ||||||
|     /** |     /** | ||||||
|      * Creates an instance of a Switch. |      * Creates an instance of a Switch. | ||||||
|      *  |      *  | ||||||
|      * @constructor |      * @constructor | ||||||
|      * @param {object} [opts] - An options object to specify to style and behaviour of the switch. |  | ||||||
|      * @param {number} [opts.id=auto generated] - The id of the switch. |  | ||||||
|      * @param {number} [opts.x=0] - The x position of the switch. Can be also set after creation with switch.x = 0. |  | ||||||
|      * @param {number} [opts.y=0] - The y position of the switch. Can be also set after creation with switch.y = 0. |  | ||||||
|      * @param {string|Theme} [opts.theme=dark] - The theme to use for this switch. Possible values are dark, light, red |  | ||||||
|      *     or a Theme object. |  | ||||||
|      * @param {number} [opts.width=44] - The width of the switch. |  | ||||||
|      * @param {number} [opts.height=28] - The height of the switch. |  | ||||||
|      * @param {number} [opts.fill=Theme.fill] - The color of the switch background as a hex value. |  | ||||||
|      * @param {number} [opts.fillAlpha=Theme.fillAlpha] - The alpha value of the background. |  | ||||||
|      * @param {number} [opts.fillActive=Theme.fillActive] - The color of the switch background when activated. |  | ||||||
|      * @param {number} [opts.fillActiveAlpha=Theme.fillActiveAlpha] - The alpha value of the background when activated. |  | ||||||
|      * @param {number} [opts.stroke=Theme.stroke] - The color of the border as a hex value. |  | ||||||
|      * @param {number} [opts.strokeWidth=Theme.strokeWidth] - The width of the border in pixel. |  | ||||||
|      * @param {number} [opts.strokeAlpha=Theme.strokeAlpha] - The alpha value of the border. |  | ||||||
|      * @param {number} [opts.strokeActive=Theme.strokeActive] - The color of the border when activated. |  | ||||||
|      * @param {number} [opts.strokeActiveWidth=Theme.strokeActiveWidth] - The width of the border in pixel when activated. |  | ||||||
|      * @param {number} [opts.strokeActiveAlpha=Theme.strokeActiveAlpha] - The alpha value of the border when activated. |  | ||||||
|      * @param {number} [opts.controlFill=Theme.stroke] - The color of the switch control background as a hex value. |  | ||||||
|      * @param {number} [opts.controlFillAlpha=Theme.strokeAlpha] - The alpha value of the background. |  | ||||||
|      * @param {number} [opts.controlFillActive=Theme.stroke] - The color of the switch control background when activated. |  | ||||||
|      * @param {number} [opts.controlFillActiveAlpha=Theme.strokeAlpha] - The alpha value of the background when activated. |  | ||||||
|      * @param {number} [opts.controlStroke=Theme.stroke] - The color of the border as a hex value. |  | ||||||
|      * @param {number} [opts.controlStrokeWidth=Theme.strokeWidth * 0.8] - The width of the border in pixel. |  | ||||||
|      * @param {number} [opts.controlStrokeAlpha=Theme.strokeAlpha] - The alpha value of the border. |  | ||||||
|      * @param {number} [opts.controlStrokeActive=Theme.stroke] - The color of the border when activated. |  | ||||||
|      * @param {number} [opts.controlStrokeActiveWidth=Theme.strokeActiveWidth * 0.8] - The width of the border in pixel when activated. |  | ||||||
|      * @param {number} [opts.controlStrokeActiveAlpha=Theme.strokeActiveAlpha] - The alpha value of the border when activated. |  | ||||||
|      * @param {number} [opts.duration=Theme.fast] - The duration of the animation when the switch gets activated in seconds. |  | ||||||
|      * @param {number} [opts.durationActive=Theme.fast] - The duration of the animation when the switch gets deactivated in seconds. |  | ||||||
|      * @param {boolean} [opts.disabled=false] - Is the switch disabled? When disabled, the switch has a lower alpha value |  | ||||||
|      *     and cannot be clicked (interactive is set to false). |  | ||||||
|      * @param {boolean} [opts.active=false] - Is the button initially active? |  | ||||||
|      * @param {actionCallback} [opts.action] - Executed when the switch was triggered in inactive state (by pointerup). |  | ||||||
|      * @param {actionActiveCallback} [opts.actionActive] - Executed when the button was triggered in active state (by pointerup). |  | ||||||
|      * @param {beforeActionCallback} [opts.beforeAction] - Executed before an action is triggered. |  | ||||||
|      * @param {afterActionCallback} [opts.afterAction] - Executed after an action was triggered. |  | ||||||
|      * @param {string|object} [opts.tooltip] - A string for the label of the tooltip or an object to configure the tooltip |  | ||||||
|      *     to display.  |  | ||||||
|      * @param {boolean} [opts.visible=true] - Is the switch initially visible (property visible)? |  | ||||||
|      */ |      */ | ||||||
|     constructor(opts = {}) { |     constructor(opts = {}) { | ||||||
| 
 | 
 | ||||||
|         super() |         super(opts) | ||||||
|          |  | ||||||
|         const theme = Theme.fromString(opts.theme) |  | ||||||
|         this.theme = theme |  | ||||||
| 
 | 
 | ||||||
|         this.opts = Object.assign({}, { |         this.opts = opts | ||||||
|             id: PIXI.utils.uid(), |  | ||||||
|             x: 0, |  | ||||||
|             y: 0, |  | ||||||
|             width: 44, |  | ||||||
|             height: 28, |  | ||||||
|             fill: theme.fill, |  | ||||||
|             fillAlpha: theme.fillAlpha, |  | ||||||
|             fillActive: theme.primaryColor, |  | ||||||
|             fillActiveAlpha: theme.fillActiveAlpha, |  | ||||||
|             stroke: theme.stroke, |  | ||||||
|             strokeWidth: theme.strokeWidth, |  | ||||||
|             strokeAlpha: theme.strokeAlpha, |  | ||||||
|             strokeActive: theme.primaryColor, |  | ||||||
|             strokeActiveWidth: theme.strokeActiveWidth, |  | ||||||
|             strokeActiveAlpha: theme.strokeActiveAlpha, |  | ||||||
|             controlFill: theme.stroke, |  | ||||||
|             controlFillAlpha: theme.strokeAlpha, |  | ||||||
|             controlFillActive: theme.stroke, |  | ||||||
|             controlFillActiveAlpha: theme.strokeAlpha, |  | ||||||
|             controlStroke: theme.stroke, |  | ||||||
|             controlStrokeWidth: theme.strokeWidth * .8, |  | ||||||
|             controlStrokeAlpha: theme.strokeAlpha, |  | ||||||
|             controlStrokeActive: theme.stroke, |  | ||||||
|             controlStrokeActiveWidth: theme.strokeActiveWidth * .8, |  | ||||||
|             controlStrokeActiveAlpha: theme.strokeActiveAlpha, |  | ||||||
|             duration: theme.fast, |  | ||||||
|             durationActive: theme.fast, |  | ||||||
|             disabled: false, |  | ||||||
|             active: false, |  | ||||||
|             action: null, |  | ||||||
|             actionActive: null, |  | ||||||
|             beforeAction: null, |  | ||||||
|             afterAction: null, |  | ||||||
|             tooltip: null, |  | ||||||
|             visible: true |  | ||||||
|         }, opts) |  | ||||||
| 
 |  | ||||||
|         this.opts.controlRadius = this.opts.controlRadius || (this.opts.height / 2) |  | ||||||
|         this.opts.controlRadiusActive = this.opts.controlRadiusActive || this.opts.controlRadius |  | ||||||
| 
 |  | ||||||
|         // Validation
 |  | ||||||
|         //-----------------
 |  | ||||||
|         if (this.opts.height > this.opts.width) { |  | ||||||
|             this.opts.height = this.opts.width |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // Properties
 |  | ||||||
|         //-----------------
 |  | ||||||
|         this.id = this.opts.id |  | ||||||
|         this.radius = this.opts.height / 2 |  | ||||||
| 
 |  | ||||||
|         this._active = null |  | ||||||
|         this._disabled = null |  | ||||||
| 
 |  | ||||||
|         this.switchObj = null |  | ||||||
|         this.control = null |  | ||||||
|         this.tooltip = null |  | ||||||
|          |  | ||||||
|         this.visible = this.opts.visible |  | ||||||
| 
 |  | ||||||
|         // animated
 |  | ||||||
|         //-----------------
 |  | ||||||
|         this.tempAnimated = { |  | ||||||
|             fill: this.opts.fill, |  | ||||||
|             fillAlpha: this.opts.fillAlpha, |  | ||||||
|             stroke: this.opts.stroke, |  | ||||||
|             strokeWidth: this.opts.strokeWidth, |  | ||||||
|             strokeAlpha: this.opts.strokeAlpha, |  | ||||||
|             controlFill: this.opts.controlFill, |  | ||||||
|             controlFillAlpha: this.opts.controlFillAlpha, |  | ||||||
|             controlStroke: this.opts.controlStroke, |  | ||||||
|             controlStrokeWidth: this.opts.controlStrokeWidth, |  | ||||||
|             controlStrokeAlpha: this.opts.controlStrokeAlpha, |  | ||||||
|             controlRadius: this.opts.controlRadius |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         // setup
 |         // setup
 | ||||||
|         //-----------------
 |         //-----------------
 | ||||||
| @ -202,306 +83,19 @@ export default class Switch extends PIXI.Container { | |||||||
|      * Creates children and instantiates everything. |      * Creates children and instantiates everything. | ||||||
|      *  |      *  | ||||||
|      * @private |      * @private | ||||||
|      * @return {Switch} A reference to the switch for chaining. |      * @return {Scrollview} A reference to the Scrollview for chaining. | ||||||
|      */ |      */ | ||||||
|     setup() { |     setup() { | ||||||
| 
 | 
 | ||||||
|         // Switch
 |  | ||||||
|         //-----------------
 |  | ||||||
|         let switchObj = new PIXI.Graphics() |  | ||||||
|         this.switchObj = switchObj |  | ||||||
|         this.addChild(switchObj) |  | ||||||
| 
 |  | ||||||
|         // Control
 |  | ||||||
|         //-----------------
 |  | ||||||
|         this.xInactive = this.opts.controlRadius |  | ||||||
|         this.xActive = this.opts.width - this.opts.controlRadiusActive |  | ||||||
|          |  | ||||||
|         let control = new PIXI.Graphics() |  | ||||||
|         control.x = this.opts.active ? this.xActive : this.xInactive |  | ||||||
|         control.y = this.opts.height / 2 |  | ||||||
| 
 |  | ||||||
|         this.control = control |  | ||||||
| 
 |  | ||||||
|         this.addChild(this.control) |  | ||||||
|          |  | ||||||
|         // interaction
 |  | ||||||
|         //-----------------
 |  | ||||||
|         this.switchObj.on('pointerover', e => { |  | ||||||
|             TweenLite.to(this.control, this.theme.fast, {alpha: .83}) |  | ||||||
|         }) |  | ||||||
| 
 |  | ||||||
|         this.switchObj.on('pointerout', e => { |  | ||||||
|             TweenLite.to(this.control, this.theme.fast, {alpha: 1}) |  | ||||||
|         }) |  | ||||||
| 
 |  | ||||||
|         this.switchObj.on('pointerdown', e => { |  | ||||||
|             TweenLite.to(this.control, this.theme.fast, {alpha: .7}) |  | ||||||
|         }) |  | ||||||
| 
 |  | ||||||
|         this.switchObj.on('pointerup', e => { |  | ||||||
| 
 |  | ||||||
|             if (this.opts.beforeAction) { |  | ||||||
|                 this.opts.beforeAction.call(this, e, this) |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             this.active = !this.active |  | ||||||
| 
 |  | ||||||
|             if (this.active) { |  | ||||||
|                 if (this.opts.action) { |  | ||||||
|                     this.opts.action.call(this, e, this) |  | ||||||
|                 } |  | ||||||
|             } else { |  | ||||||
|                 if (this.opts.actionActive) { |  | ||||||
|                     this.opts.actionActive.call(this, e, this) |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             TweenLite.to(this.control, this.theme.fast, {alpha: .83}) |  | ||||||
| 
 |  | ||||||
|             if (this.opts.afterAction) { |  | ||||||
|                 this.opts.afterAction.call(this, e, this) |  | ||||||
|             } |  | ||||||
|         }) |  | ||||||
| 
 |  | ||||||
|         // disabled
 |  | ||||||
|         //-----------------
 |  | ||||||
|         this.disabled = this.opts.disabled |  | ||||||
| 
 |  | ||||||
|         // active
 |  | ||||||
|         //-----------------
 |  | ||||||
|         this.active = this.opts.active |  | ||||||
|          |  | ||||||
|         // tooltip
 |  | ||||||
|         //-----------------
 |  | ||||||
|         if (this.opts.tooltip) { |  | ||||||
|             if (typeof this.opts.tooltip === 'string') { |  | ||||||
|                 this.tooltip = new Tooltip({ |  | ||||||
|                     object: this, |  | ||||||
|                     content: this.opts.tooltip |  | ||||||
|                 }) |  | ||||||
|             } else { |  | ||||||
|                 this.opts.tooltip.object = this |  | ||||||
|                 this.tooltip = new Tooltip(this.opts.tooltip) |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return this |         return this | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     /** |     /** | ||||||
|      * Should be called to refresh the layout of the switch. Can be used after resizing. |      * Should be called to refresh the layout of the Scrollview. Can be used after resizing. | ||||||
|      *  |      *  | ||||||
|      * @return {Switch} A reference to the switch for chaining. |      * @return {Scrollview} A reference to the Scrollview for chaining. | ||||||
|      */ |      */ | ||||||
|     layout() { |     layout() { | ||||||
|          |  | ||||||
|         // set position
 |  | ||||||
|         //-----------------
 |  | ||||||
|         this.position.set(this.opts.x, this.opts.y) |  | ||||||
| 
 |  | ||||||
|         // draw
 |  | ||||||
|         //-----------------
 |  | ||||||
|         this.draw() |  | ||||||
| 
 |  | ||||||
|         return this |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     /** |  | ||||||
|      * Draws the switch to the canvas. |  | ||||||
|      *  |  | ||||||
|      * @private |  | ||||||
|      * @return {Switch} A reference to the switch for chaining. |  | ||||||
|      */ |  | ||||||
|     draw() { |  | ||||||
| 
 |  | ||||||
|         this.switchObj.clear() |  | ||||||
|         if (this.active) { |  | ||||||
|             this.switchObj.lineStyle(this.opts.strokeActiveWidth, this.opts.strokeActive, this.opts.strokeActiveAlpha) |  | ||||||
|             this.switchObj.beginFill(this.opts.fillActive, this.opts.fillActiveAlpha) |  | ||||||
|         } else { |  | ||||||
|             this.switchObj.lineStyle(this.opts.strokeWidth, this.opts.stroke, this.opts.strokeAlpha) |  | ||||||
|             this.switchObj.beginFill(this.opts.fill, this.opts.fillAlpha) |  | ||||||
|         } |  | ||||||
|         this.switchObj.moveTo(this.radius, 0) |  | ||||||
|         this.switchObj.lineTo(this.opts.width - this.radius, 0) |  | ||||||
|         this.switchObj.arcTo(this.opts.width, 0, this.opts.width, this.radius, this.radius) |  | ||||||
|         this.switchObj.lineTo(this.opts.width, this.radius + 1)                                   // BUGFIX: If not specified, there is a small area without a stroke.
 |  | ||||||
|         this.switchObj.arcTo(this.opts.width, this.opts.height, this.opts.width - this.radius, this.opts.height, this.radius) |  | ||||||
|         this.switchObj.lineTo(this.radius, this.opts.height) |  | ||||||
|         this.switchObj.arcTo(0, this.opts.height, 0, this.radius, this.radius) |  | ||||||
|         this.switchObj.arcTo(0, 0, this.radius, 0, this.radius) |  | ||||||
|         this.switchObj.endFill() |  | ||||||
| 
 |  | ||||||
|         // Draw control
 |  | ||||||
|         this.control.clear() |  | ||||||
|         if (this.active) { |  | ||||||
|             this.control.lineStyle(this.opts.controlStrokeActiveWidth, this.opts.controlStrokeActive, this.opts.controlStrokeActiveAlpha) |  | ||||||
|             this.control.beginFill(this.opts.controlFillActive, this.opts.controlFillActiveAlpha) |  | ||||||
|             this.control.drawCircle(0, 0, this.opts.controlRadiusActive - 1) |  | ||||||
|         } else { |  | ||||||
|             this.control.lineStyle(this.opts.controlStrokeWidth, this.opts.controlStroke, this.opts.controlStrokeAlpha) |  | ||||||
|             this.control.beginFill(this.opts.controlFill, this.opts.controlFillAlpha) |  | ||||||
|             this.control.drawCircle(0, 0, this.opts.controlRadius - 1) |  | ||||||
|         } |  | ||||||
|         this.control.endFill() |  | ||||||
| 
 |  | ||||||
|         return this |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     /** |  | ||||||
|      * Draws the animation. |  | ||||||
|      *  |  | ||||||
|      * @private |  | ||||||
|      * @return {Switch} A reference to the switch for chaining. |  | ||||||
|      */ |  | ||||||
|     drawAnimated() { |  | ||||||
| 
 |  | ||||||
|         this.switchObj.clear() |  | ||||||
|         this.switchObj.lineStyle(this.tempAnimated.strokeWidth, this.tempAnimated.stroke, this.tempAnimated.strokeAlpha) |  | ||||||
|         this.switchObj.beginFill(this.tempAnimated.fill, this.tempAnimated.fillAlpha) |  | ||||||
|         this.switchObj.moveTo(this.radius, 0) |  | ||||||
|         this.switchObj.lineTo(this.opts.width - this.radius, 0) |  | ||||||
|         this.switchObj.arcTo(this.opts.width, 0, this.opts.width, this.radius, this.radius) |  | ||||||
|         this.switchObj.lineTo(this.opts.width, this.radius + 1)                                   // BUGFIX: If not specified, there is a small area without a stroke.
 |  | ||||||
|         this.switchObj.arcTo(this.opts.width, this.opts.height, this.opts.width - this.radius, this.opts.height, this.radius) |  | ||||||
|         this.switchObj.lineTo(this.radius, this.opts.height) |  | ||||||
|         this.switchObj.arcTo(0, this.opts.height, 0, this.radius, this.radius) |  | ||||||
|         this.switchObj.arcTo(0, 0, this.radius, 0, this.radius) |  | ||||||
|         this.switchObj.endFill() |  | ||||||
| 
 |  | ||||||
|         this.control.clear() |  | ||||||
|         this.control.lineStyle(this.tempAnimated.controlStrokeWidth, this.tempAnimated.controlStroke, this.tempAnimated.controlStrokeAlpha) |  | ||||||
|         this.control.beginFill(this.tempAnimated.controlFill, this.tempAnimated.controlFillAlpha) |  | ||||||
|         this.control.drawCircle(0, 0, this.tempAnimated.controlRadius - 1) |  | ||||||
|         this.control.endFill() |  | ||||||
| 
 |  | ||||||
|         return this |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     /** |  | ||||||
|      * Gets or sets the active state. |  | ||||||
|      *  |  | ||||||
|      * @member {boolean} |  | ||||||
|      */ |  | ||||||
|     get active() { |  | ||||||
|         return this._active |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     set active(value) { |  | ||||||
| 
 |  | ||||||
|         this._active = value |  | ||||||
| 
 |  | ||||||
|         if (this._active) { |  | ||||||
| 
 |  | ||||||
|             TweenLite.to(this.control, this.opts.duration, {x: this.xActive}) |  | ||||||
|             TweenLite.to(this.tempAnimated, this.opts.duration, { |  | ||||||
|                 colorProps: { |  | ||||||
|                     fill: this.opts.fillActive, |  | ||||||
|                     stroke: this.opts.strokeActive, |  | ||||||
|                     controlFill: this.opts.controlFillActive, |  | ||||||
|                     controlStroke: this.opts.controlStrokeActive, |  | ||||||
|                     format: 'number' |  | ||||||
|                 }, |  | ||||||
|                 fillAlpha: this.opts.fillActiveAlpha, |  | ||||||
|                 strokeWidth: this.opts.strokeActiveWidth, |  | ||||||
|                 strokeAlpha: this.opts.strokeActiveAlpha, |  | ||||||
|                 controlFillAlpha: this.opts.controlFillActiveAlpha, |  | ||||||
|                 controlStrokeWidth: this.opts.controlStrokeActiveWidth, |  | ||||||
|                 controlStrokeAlpha: this.opts.controlStrokeActiveAlpha, |  | ||||||
|                 controlRadius: this.opts.controlRadiusActive, |  | ||||||
|                 onUpdate: () => this.drawAnimated(), |  | ||||||
|                 onComplete: () => this.draw() |  | ||||||
|             }) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         } else { |  | ||||||
|             TweenLite.to(this.control, this.opts.durationActive, {x: this.xInactive}) |  | ||||||
|             TweenLite.to(this.tempAnimated, this.opts.durationActive, { |  | ||||||
|                 colorProps: { |  | ||||||
|                     fill: this.opts.fill, |  | ||||||
|                     stroke: this.opts.stroke, |  | ||||||
|                     controlFill: this.opts.controlFill, |  | ||||||
|                     controlStroke: this.opts.controlStroke, |  | ||||||
|                     format: 'number' |  | ||||||
|                 }, |  | ||||||
|                 fillAlpha: this.opts.fillAlpha, |  | ||||||
|                 strokeWidth: this.opts.strokeWidth, |  | ||||||
|                 strokeAlpha: this.opts.strokeAlpha, |  | ||||||
|                 controlFillAlpha: this.opts.controlFillAlpha, |  | ||||||
|                 controlStrokeWidth: this.opts.controlStrokeWidth, |  | ||||||
|                 controlStrokeAlpha: this.opts.controlStrokeAlpha, |  | ||||||
|                 controlRadius: this.opts.controlRadius, |  | ||||||
|                 onUpdate: () => this.drawAnimated(), |  | ||||||
|                 onComplete: () => this.draw() |  | ||||||
|             }) |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     /** |  | ||||||
|      * Gets or sets the disabled state. When disabled, the switch cannot be clicked. |  | ||||||
|      *  |  | ||||||
|      * @member {boolean} |  | ||||||
|      */ |  | ||||||
|     get disabled() { |  | ||||||
|         return this._disabled |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     set disabled(value) { |  | ||||||
| 
 |  | ||||||
|         this._disabled = value |  | ||||||
|          |  | ||||||
|         if (this._disabled) { |  | ||||||
|             this.switchObj.interactive = false |  | ||||||
|             this.switchObj.buttonMode = false |  | ||||||
|             this.switchObj.alpha = .5 |  | ||||||
|             this.control.alpha = .5 |  | ||||||
|         } else { |  | ||||||
|             this.switchObj.interactive = true |  | ||||||
|             this.switchObj.buttonMode = true |  | ||||||
|             this.switchObj.alpha = 1 |  | ||||||
|             this.control.alpha = 1 |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Shows the switch (sets his alpha values to 1). |  | ||||||
|      *  |  | ||||||
|      * @return {Switch} A reference to the switch for chaining. |  | ||||||
|      */ |  | ||||||
|     show() { |  | ||||||
| 
 |  | ||||||
|         this.opts.strokeAlpha = 1 |  | ||||||
|         this.opts.strokeActiveAlpha = 1 |  | ||||||
|         this.opts.fillAlpha = 1 |  | ||||||
|         this.opts.fillActiveAlpha = 1 |  | ||||||
|         this.opts.controlStrokeAlpha = 1 |  | ||||||
|         this.opts.controlStrokeActiveAlpha = 1 |  | ||||||
|         this.opts.controlFillAlpha = 1 |  | ||||||
|         this.opts.controlFillActiveAlpha = 1 |  | ||||||
| 
 |  | ||||||
|         this.layout() |  | ||||||
| 
 |  | ||||||
|         return this |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     /** |  | ||||||
|      * Hides the switch (sets his alpha values to 1). |  | ||||||
|      *  |  | ||||||
|      * @return {Switch} A reference to the switch for chaining. |  | ||||||
|      */ |  | ||||||
|     hide() { |  | ||||||
| 
 |  | ||||||
|         this.opts.strokeAlpha = 0 |  | ||||||
|         this.opts.strokeActiveAlpha = 0 |  | ||||||
|         this.opts.fillAlpha = 0 |  | ||||||
|         this.opts.fillActiveAlpha = 0 |  | ||||||
|         this.opts.controlStrokeAlpha = 0 |  | ||||||
|         this.opts.controlStrokeActiveAlpha = 0 |  | ||||||
|         this.opts.controlFillAlpha = 0 |  | ||||||
|         this.opts.controlFillActiveAlpha = 0 |  | ||||||
| 
 |  | ||||||
|         this.layout() |  | ||||||
| 
 | 
 | ||||||
|         return this |         return this | ||||||
|     } |     } | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -2439,11 +2439,6 @@ | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "highlight.js": { |  | ||||||
|             "version": "9.15.6", |  | ||||||
|             "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", |  | ||||||
|             "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==" |  | ||||||
|         }, |  | ||||||
|         "homedir-polyfill": { |         "homedir-polyfill": { | ||||||
|             "version": "1.0.3", |             "version": "1.0.3", | ||||||
|             "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", |             "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", | ||||||
|  | |||||||
| @ -30,7 +30,6 @@ | |||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "gsap": "^2.1.2", |         "gsap": "^2.1.2", | ||||||
|         "hammerjs": "^2.0.8", |         "hammerjs": "^2.0.8", | ||||||
|         "highlight.js": "^9.15.6", |  | ||||||
|         "material-design-icons": "^3.0.1", |         "material-design-icons": "^3.0.1", | ||||||
|         "optimal-select": "^4.0.1", |         "optimal-select": "^4.0.1", | ||||||
|         "pixi-compressed-textures": "^1.1.8", |         "pixi-compressed-textures": "^1.1.8", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user