Merge branch 'master' of github.com:jonobr1/gui-dat

This commit is contained in:
George Michael Brower 2011-04-18 17:35:36 -07:00
commit eb9fbad6d9
3 changed files with 163 additions and 23 deletions

View File

@ -1,4 +1,5 @@
<!doctype html> <!doctype html>
<html>
<head> <head>
<title>dat.gui</title> <title>dat.gui</title>
@ -129,7 +130,7 @@
<li><a href="https://github.com/jonobr1/dat.gui/raw/versions/gui.min <li><a href="https://github.com/jonobr1/dat.gui/raw/versions/gui.min
.js"><strong>Download the minified source</strong></a> .js"><strong>Download the minified source</strong></a>
<small <small
id="buildsize">[11kb] id="buildsize">[255.9kb]
</small> </small>
</li> </li>

View File

@ -6,10 +6,6 @@ DAT.GUI = function(parameters) {
parameters = {}; parameters = {};
} }
if (parameters.height == undefined) {
parameters.height = 300;
}
var MIN_WIDTH = 240; var MIN_WIDTH = 240;
var MAX_WIDTH = 500; var MAX_WIDTH = 500;
@ -23,9 +19,11 @@ DAT.GUI = function(parameters) {
// Sum total of heights of controllers in this gui // Sum total of heights of controllers in this gui
var controllerHeight; var controllerHeight;
var curControllerContainerHeight = 0;
var _this = this; var _this = this;
var open = true; var open = false;
var width = 280; var width = 280;
// Prevents checkForOverflow bug in which loaded gui appearance // Prevents checkForOverflow bug in which loaded gui appearance
@ -47,10 +45,9 @@ DAT.GUI = function(parameters) {
this.domElement.setAttribute('class', 'guidat'); this.domElement.setAttribute('class', 'guidat');
this.domElement.style.width = width + 'px'; this.domElement.style.width = width + 'px';
var curControllerContainerHeight = parameters.height;
var controllerContainer = document.createElement('div'); var controllerContainer = document.createElement('div');
controllerContainer.setAttribute('class', 'guidat-controllers'); controllerContainer.setAttribute('class', 'guidat-controllers');
controllerContainer.style.height = curControllerContainerHeight + 'px'; controllerContainer.style.height = '0px';
// Firefox hack to prevent horizontal scrolling // Firefox hack to prevent horizontal scrolling
controllerContainer.addEventListener('DOMMouseScroll', function(e) { controllerContainer.addEventListener('DOMMouseScroll', function(e) {
@ -74,10 +71,11 @@ DAT.GUI = function(parameters) {
}, false); }, false);
var toggleButton = document.createElement('a'); var toggleButton = document.createElement('a');
toggleButton.setAttribute('class', 'guidat-toggle'); toggleButton.setAttribute('class', 'guidat-toggle');
toggleButton.setAttribute('href', '#'); toggleButton.setAttribute('href', '#');
toggleButton.innerHTML = open ? closeString : openString; toggleButton.innerHTML = openString;
var toggleDragged = false; var toggleDragged = false;
var dragDisplacementY = 0; var dragDisplacementY = 0;
@ -367,10 +365,13 @@ DAT.GUI = function(parameters) {
'function': DAT.GUI.ControllerFunction 'function': DAT.GUI.ControllerFunction
}; };
this.reset = function() { this.reset = function() {
// TODO ... Set all values back to their initials. // TODO ... Set all values back to their initials.
} }
// DAT.GUI ... DAT.GUI
this.toggle = function() { this.toggle = function() {
open ? this.close() : this.open(); open ? this.close() : this.open();
}; };
@ -380,7 +381,6 @@ DAT.GUI = function(parameters) {
resizeTo = openHeight; resizeTo = openHeight;
clearTimeout(resizeTimeout); clearTimeout(resizeTimeout);
beginResize(); beginResize();
adaptToScrollbar();
open = true; open = true;
} }
@ -389,7 +389,6 @@ DAT.GUI = function(parameters) {
resizeTo = 0; resizeTo = 0;
clearTimeout(resizeTimeout); clearTimeout(resizeTimeout);
beginResize(); beginResize();
adaptToScrollbar();
open = false; open = false;
} }
@ -405,12 +404,13 @@ DAT.GUI = function(parameters) {
var beginResize = function() { var beginResize = function() {
curControllerContainerHeight = controllerContainer.offsetHeight;
curControllerContainerHeight += (resizeTo - curControllerContainerHeight) curControllerContainerHeight += (resizeTo - curControllerContainerHeight)
* 0.6; * 0.6;
if (Math.abs(curControllerContainerHeight - resizeTo) < 1) { if (Math.abs(curControllerContainerHeight - resizeTo) < 1) {
curControllerContainerHeight = resizeTo; curControllerContainerHeight = resizeTo;
adaptToScrollbar();
} else { } else {
resizeTimeout = setTimeout(beginResize, 1000 / 30); resizeTimeout = setTimeout(beginResize, 1000 / 30);
} }
@ -421,14 +421,15 @@ DAT.GUI = function(parameters) {
} }
var adaptToScrollbar = function() { var adaptToScrollbar = function() {
// Clears lingering scrollbar column // Clears lingering slider column
_this.domElement.style.width = (width - 1) + 'px'; _this.domElement.style.width = (width + 1) + 'px';
setTimeout(function() { setTimeout(function() {
_this.domElement.style.width = width + 'px'; _this.domElement.style.width = width + 'px';
}, 1); }, 1);
}; };
// Load saved appearance: // Load saved appearance:
if (DAT.GUI.guiIndex < DAT.GUI.savedAppearanceVars.length) { if (DAT.GUI.guiIndex < DAT.GUI.savedAppearanceVars.length) {
@ -460,12 +461,10 @@ DAT.GUI = function(parameters) {
DAT.GUI.allGuis.push(this); DAT.GUI.allGuis.push(this);
// Add hide listener if this is the first DAT.GUI. // Add hide listener if this is the first DAT.GUI.
if (DAT.GUI.allGuis.length == 1) { if (DAT.GUI.allGuis.length == 1) {
window.addEventListener('keyup', function(e) { window.addEventListener('keyup', function(e) {
// Hide on 'H' // Hide on 'H'
if (!DAT.GUI.supressHotKeys && e.keyCode == 72) { if (e.keyCode == 72) {
DAT.GUI.toggleHide(); DAT.GUI.toggleHide();
} }
}, false); }, false);
@ -491,7 +490,6 @@ DAT.GUI.autoPlaceContainer = null;
DAT.GUI.allControllers = []; DAT.GUI.allControllers = [];
DAT.GUI.allGuis = []; DAT.GUI.allGuis = [];
DAT.GUI.supressHotKeys = false;
DAT.GUI.toggleHide = function() { DAT.GUI.toggleHide = function() {
if (DAT.GUI.hidden) { if (DAT.GUI.hidden) {
@ -542,7 +540,8 @@ DAT.GUI.savedAppearanceVars = [];
DAT.GUI.getSaveString = function() { DAT.GUI.getSaveString = function() {
var vals = [], i; var vals = [],
i;
vals.push(DAT.GUI.allGuis.length); vals.push(DAT.GUI.allGuis.length);
vals.push(document.body.scrollTop); vals.push(document.body.scrollTop);
@ -687,17 +686,19 @@ DAT.GUI.extendController = function(clazz) {
DAT.GUI.addClass = function(domElement, className) { DAT.GUI.addClass = function(domElement, className) {
if (DAT.GUI.hasClass(domElement, className)) return; if (DAT.GUI.hasClass(domElement, className)) return;
domElement.className += ' ' + className; domElement.className += ' ' + className;
} };
DAT.GUI.hasClass = function(domElement, className) { DAT.GUI.hasClass = function(domElement, className) {
return domElement.className.indexOf(className) != -1; return domElement.className.indexOf(className) != -1;
} };
DAT.GUI.removeClass = function(domElement, className) { DAT.GUI.removeClass = function(domElement, className) {
var reg = new RegExp(' ' + className, 'g'); var reg = new RegExp(' ' + className, 'g');
domElement.className = domElement.className.replace(reg, ''); domElement.className = domElement.className.replace(reg, '');
} };
if (DAT.GUI.getVarFromURL('saveString') != null) { if (DAT.GUI.getVarFromURL('saveString') != null) {
DAT.GUI.load(DAT.GUI.getVarFromURL('saveString')); DAT.GUI.load(DAT.GUI.getVarFromURL('saveString'));
} }
window["DAT.GUI"] = DAT.GUI;

138
utils/barnraiser.py Normal file
View File

@ -0,0 +1,138 @@
#/usr/bin/env python
from optparse import OptionParser
import httplib, urllib
import os, fnmatch, shutil, re
usage = """usage: %prog [options] command
Commands:
build build the script
debug print the header to include js files
clean remove any built files
"""
parser = OptionParser(usage=usage)
parser.add_option('-l', '--level', dest='level', default='ADVANCED_OPTIMIZATIONS',
help='Closure compilation level [WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS, \
ADVANCED_OPTIMIZATIONS]')
UTILS = os.path.dirname(os.path.abspath(__file__))
SRC_ROOT= os.path.join(UTILS,'..','src')
BUILD_ROOT = os.path.join(UTILS,'..','build')
INDEX = os.path.join(UTILS,'..','index.html')
BUILD_NAME = 'DAT.GUI'
ALL = ['DAT']
def flatten(l, ltypes=(list, tuple)):
ltype = type(l)
l = list(l)
i = 0
while i < len(l):
while isinstance(l[i], ltypes):
if not l[i]:
l.pop(i)
i -= 1
break
else:
l[i:i + 1] = l[i]
i += 1
return ltype(l)
def expand(path, globby):
matches = []
path = path.split('.')
path.insert(0,SRC_ROOT)
path = os.path.join(*path)
for root, dirnames, filenames in os.walk(path):
for filename in fnmatch.filter(filenames, globby):
matches.append(os.path.join(root, filename))
return matches
def source_list(src, globby='*.js'):
def expander(f):
return expand(f,globby)
return set(flatten(map(expander, src)))
def compile(code):
params = urllib.urlencode([
('js_code', code),
('compilation_level', options.level),
('output_format', 'text'),
('output_info', 'compiled_code'),
])
headers = { 'Content-type': 'application/x-www-form-urlencoded' }
conn = httplib.HTTPConnection('closure-compiler.appspot.com')
conn.request('POST', '/compile', params, headers)
response = conn.getresponse()
data = response.read()
conn.close()
return data
def bytes_to_kb(b,digits=1):
return round(0.0078125 * b, digits)
def clean():
if os.path.exists(BUILD_ROOT):
shutil.rmtree(BUILD_ROOT)
print('DONE. Removed %s'%(BUILD_ROOT,))
else:
print('DONE. Nothing to clean')
def build(src):
if not os.path.exists(BUILD_ROOT):
os.makedirs(BUILD_ROOT)
cssfiles = source_list(src, '*.css')
css = '\n'.join([open(f).read() for f in cssfiles])
css = re.sub(r'[ \t\n\r]+',' ',css)
jsfiles = source_list(src, '*.js')
code = '\n'.join([open(f).read() for f in jsfiles])
code += """DAT.GUI.inlineCSS = '%s';\n"""%(css,)
outpath = os.path.join(BUILD_ROOT, BUILD_NAME+'.js')
with open(outpath,'w') as f:
f.write(code)
compiled = compile(code)
outpath = os.path.join(BUILD_ROOT, BUILD_NAME+'.min.js')
with open(outpath,'w') as f:
f.write(compiled)
outpath = os.path.join(BUILD_ROOT, BUILD_NAME+'.css')
with open(outpath,'w') as f:
f.write(code)
size = bytes_to_kb(os.path.getsize(outpath))
with open(INDEX,'r') as f:
index = f.read()
with open(INDEX,'w') as f:
index = re.sub(r'\[[0-9.]+kb\]','[%skb]'%(size,),index)
f.write(index)
print('DONE. Built files in %s.'%(BUILD_ROOT,))
def debug(src):
files = source_list(src)
scripts = ""
for f in files:
scripts += '<script type="text/javascript" src="%s"></script>\n'%(f,)
print(scripts)
if __name__ == '__main__':
global options
(options, args) = parser.parse_args()
if len(args) != 1:
print(parser.usage)
exit(0)
command = args[0]
if command == 'build':
build(ALL)
elif command == 'clean':
clean()
elif command == 'debug':
debug(ALL)