diff --git a/.travis-ci.sh b/.travis-ci.sh index 5b70a673..5be69543 100644 --- a/.travis-ci.sh +++ b/.travis-ci.sh @@ -12,6 +12,8 @@ elif [[ $TASK = 'karma' ]]; then grunt --verbose unit-test elif [[ $TASK = 'js-lint' ]]; then grunt --verbose lint +elif [[ $TASK = 'closure-compiler' ]]; then + grunt --verbose closure-compiler elif [[ $TASK = 'data-check' ]]; then ./tools/make_manufacturer_data.sh > data/manufacturer_data.py && git diff --exit-code data/manufacturer_data.py elif [[ $TASK = 'spellintian' ]]; then diff --git a/.travis.yml b/.travis.yml index 60cad09f..c1d6e99c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,6 +29,7 @@ matrix: env: TASK="nosetests" - env: TASK="karma" - env: TASK="js-lint" + - env: TASK="closure-compiler" - env: TASK="data-check" addons: apt: diff --git a/BUILD b/BUILD deleted file mode 100755 index 814729f5..00000000 --- a/BUILD +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -trunk/closure/bin/build/closurebuilder.py --root=trunk/ --root=js_src \ ---namespace="app.setup" --output_mode=compiled --compiler_jar=compiler.jar \ ---compiler_flags="--compilation_level=ADVANCED_OPTIMIZATIONS" \ -> static/js/app.js diff --git a/Gruntfile.js b/Gruntfile.js index 70bab8cf..e5145312 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,5 +1,7 @@ module.exports = function(grunt) { 'use strict'; + require('google-closure-compiler').grunt(grunt); + grunt.initConfig({ bower: { libs: { @@ -94,6 +96,24 @@ module.exports = function(grunt) { atBegin: true } } + }, + 'closure-compiler': { + build: { + options: { + args: [ + '--js', 'js_src/**.js', + '--js', '!js_src/rdm.js', + '--js', 'node_modules/google-closure-library/closure/**.js', + '--js', 'node_modules/google-closure-library/third_party/**.js', + '--js', '"!**_test.js"', + '--jscomp_warning', 'lintChecks', + '--entry_point', 'app.setup', + '--js_output_file', 'static/js/app.js', + '--dependency_mode', 'STRICT', + '--compilation_level', 'ADVANCED_OPTIMIZATIONS' + ] + } + } } }); grunt.loadNpmTasks('grunt-karma'); diff --git a/README.md b/README.md index 04e82be1..7ccbbf89 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ otherwise the files won't be compressed After changing `app.js`, you have to build the compiled Google Closure script by using: ```bash -./BUILD +grunt closure-compiler ``` ### Running the App Engine locally diff --git a/js_src/app.js b/js_src/app.js index ceb9d729..20c01f69 100644 --- a/js_src/app.js +++ b/js_src/app.js @@ -17,18 +17,18 @@ * Copyright (C) 2011 Simon Newton */ +goog.provide('app.setup'); + +goog.require('app.displayCommand'); goog.require('goog.dom'); goog.require('goog.events'); goog.require('goog.ui.Component'); goog.require('goog.ui.TableSorter'); -goog.require('app.MessageStructure'); - -goog.provide('app.setup'); -var app = app || {} -// Empty list, this is populated in the page -app.SOFTWARE_VERSIONS = [] +// These are populated in the page +app.SOFTWARE_VERSIONS = []; +app.OPEN_FIXTURE_LIBRARY_MODEL_URL = null; /** * Sort hex values @@ -37,7 +37,7 @@ app.SOFTWARE_VERSIONS = [] * @return {number} Negative if a < b, 0 if a = b, and positive if a > b. */ app.hexSort = function(a, b) { - return parseInt(a) - parseInt(b); + return parseInt(a, 16) - parseInt(b, 16); }; @@ -61,45 +61,52 @@ app.toHex = function(n, padding) { /** * Hide a node. + * @param {!Element} node The HTML element to hide. */ app.hideNode = function(node) { node.style.display = 'none'; -} +}; /** * Show a block node + * @param {!Element} node The HTML element to show as a block. */ app.showBlock = function(node) { node.style.display = 'block'; -} +}; /** * Show a inline node + * @param {!Element} node The HTML element to show inline. */ app.showInline = function(node) { node.style.display = 'inline'; -} +}; /** * Show a table row + * @param {!Element} row The HTML element to show as a table row. */ app.showRow = function(row) { row.style.display = 'table-row'; -} +}; /** * Create a TD node and set the innerHTML property + * @param {!string} text Inner HTML for the new table cell. + * @return {!Element} The created TD element. */ app.newTD = function(text) { var td = goog.dom.createDom('td'); td.innerHTML = text; return td; -} +}; /** * Make the model table sortable + * @param {!string} table_id */ app.makeModelTable = function(table_id) { var table = new goog.ui.TableSorter(); @@ -114,6 +121,7 @@ goog.exportSymbol('app.makeModelTable', app.makeModelTable); /** * Set the software versions + * @param {!Array.} version_info The software versions. */ app.setSoftwareVersions = function(version_info) { app.SOFTWARE_VERSIONS = version_info; @@ -121,8 +129,20 @@ app.setSoftwareVersions = function(version_info) { goog.exportSymbol('app.setSoftwareVersions', app.setSoftwareVersions); +/** + * Set the URL of the RDM lookup page in the Open Fixture library with the RDM IDs + * of this model so we can use it to link every personality. + * @param {!string} url The URL with query parameters for RDM manufacturer ID and RDM model ID. + */ +app.setOpenFixtureLibraryModelUrl = function(url) { + app.OPEN_FIXTURE_LIBRARY_MODEL_URL = url; +}; +goog.exportSymbol('app.setOpenFixtureLibraryModelUrl', app.setOpenFixtureLibraryModelUrl); + + /** * Display info for the currently selected software version + * @param {?Element=} element */ app.changeSoftwareVersion = function(element) { // default to displaying the first version @@ -138,80 +158,89 @@ app.changeSoftwareVersion = function(element) { // DMX Personalities var personalities = software_version['personalities']; var personality_fieldset = goog.dom.$('model_personality_fieldset'); - if (personalities && personalities.length) { - var tbody = goog.dom.$('model_personality_tbody'); - goog.dom.removeChildren(tbody); - for (var i = 0; i < personalities.length; ++i) { - var personality = personalities[i]; - var tr = goog.dom.createDom('tr'); - // add the cells - goog.dom.appendChild(tr, app.newTD(personality['index'])); - if ('slot_count' in personality) { - goog.dom.appendChild(tr, app.newTD(personality['slot_count'])); - } else { - goog.dom.appendChild(tr, app.newTD('Unknown')); + if (personality_fieldset) { + if (personalities && personalities.length) { + var tbody = goog.dom.$('model_personality_tbody'); + goog.dom.removeChildren(tbody); + for (var i = 0; i < personalities.length; ++i) { + var personality = personalities[i]; + var oflLink = app.OPEN_FIXTURE_LIBRARY_MODEL_URL + '&personalityIndex=' + personality['index']; + + var tr = goog.dom.createDom('tr'); + // add the cells + goog.dom.appendChild(tr, app.newTD(personality['index'])); + if ('slot_count' in personality) { + goog.dom.appendChild(tr, app.newTD(personality['slot_count'])); + } else { + goog.dom.appendChild(tr, app.newTD('Unknown')); + } + goog.dom.appendChild(tr, app.newTD(personality['description'])); + goog.dom.appendChild(tr, app.newTD('View in Open Fixture Library')); + goog.dom.appendChild(tbody, tr); } - goog.dom.appendChild(tr, app.newTD(personality['description'])); - goog.dom.appendChild(tbody, tr); + app.showBlock(personality_fieldset); + } else { + app.hideNode(personality_fieldset); } - app.showBlock(personality_fieldset); - } else { - app.hideNode(personality_fieldset); } // Sensors var sensors = software_version['sensors']; var sensor_fieldset = goog.dom.$('model_sensor_fieldset'); - if (sensors && sensors.length) { - var tbody = goog.dom.$('model_sensor_tbody'); - goog.dom.removeChildren(tbody); - for (var i = 0; i < sensors.length; ++i) { - var sensor = sensors[i]; - var tr = goog.dom.createDom('tr'); - // add the cells - goog.dom.appendChild(tr, app.newTD(sensor['index'])); - goog.dom.appendChild(tr, app.newTD(sensor['description'])); - var type_str = sensor['type_str']; - var sensor_type = ''; - if (type_str) { - sensor_type = type_str + ' (0x' + app.toHex(sensor['type'], 2) + ')'; - } else { - sensor_type = app.toHex(sensor['type'], 2) + if (sensor_fieldset) { + if (sensors && sensors.length) { + var tbody = goog.dom.$('model_sensor_tbody'); + goog.dom.removeChildren(tbody); + for (var i = 0; i < sensors.length; ++i) { + var sensor = sensors[i]; + var tr = goog.dom.createDom('tr'); + // add the cells + goog.dom.appendChild(tr, app.newTD(sensor['index'])); + goog.dom.appendChild(tr, app.newTD(sensor['description'])); + var type_str = sensor['type_str']; + var sensor_type = ''; + if (type_str) { + sensor_type = type_str + ' (0x' + app.toHex(sensor['type'], 2) + ')'; + } else { + sensor_type = app.toHex(sensor['type'], 2); + } + goog.dom.appendChild(tr, app.newTD(sensor_type)); + goog.dom.appendChild(tr, app.newTD(sensor['supports_recording'])); + goog.dom.appendChild(tr, app.newTD(sensor['supports_min_max'])); + goog.dom.appendChild(tbody, tr); } - goog.dom.appendChild(tr, app.newTD(sensor_type)); - goog.dom.appendChild(tr, app.newTD(sensor['supports_recording'])); - goog.dom.appendChild(tr, app.newTD(sensor['supports_min_max'])); - goog.dom.appendChild(tbody, tr); + app.showBlock(sensor_fieldset); + } else { + app.hideNode(sensor_fieldset); } - app.showBlock(sensor_fieldset); - } else { - app.hideNode(sensor_fieldset); } // supported params var supported_params = software_version['supported_parameters']; var supported_params_fieldset = goog.dom.$('model_params_fieldset'); - if (supported_params && supported_params.length) { - var supported_params_list = goog.dom.$('model_params_list'); - goog.dom.removeChildren(supported_params_list); - for (var i = 0; i < supported_params.length; ++i) { - var param = supported_params[i]; - var param_name = param['name']; - var li = goog.dom.createDom('li'); - if (param_name) { - var a = goog.dom.createDom('a'); - a.innerHTML = param_name + ' (0x' + app.toHex(param['id'], 4) + ')'; - a.href = ('/pid/display?manufacturer=' + param['manufacturer_id'] + - '&pid=' + param['id']); - goog.dom.appendChild(li, a) - } else { - li.innerHTML = '0x' + app.toHex(param['id'], 4); + if (supported_params_fieldset) { + if (supported_params && supported_params.length) { + var supported_params_list = goog.dom.$('model_params_list'); + goog.dom.removeChildren(supported_params_list); + for (var i = 0; i < supported_params.length; ++i) { + var param = supported_params[i]; + var param_name = param['name']; + var li = goog.dom.createDom('li'); + if (param_name) { + var a = goog.dom.createDom('a'); + a.innerHTML = param_name + ' (0x' + app.toHex(param['id'], 4) + ')'; + a.href = ('/pid/display?manufacturer=' + param['manufacturer_id'] + + '&pid=' + param['id']); + goog.dom.appendChild(li, a); + } else { + li.innerHTML = '0x' + app.toHex(param['id'], 4); + } + goog.dom.appendChild(supported_params_list, li); } - goog.dom.appendChild(supported_params_list, li); + app.showBlock(supported_params_fieldset); + } else { + app.hideNode(supported_params_fieldset); } - app.showBlock(supported_params_fieldset); - } else { - app.hideNode(supported_params_fieldset); } }; goog.exportSymbol('app.changeSoftwareVersion', app.changeSoftwareVersion); @@ -219,6 +248,7 @@ goog.exportSymbol('app.changeSoftwareVersion', app.changeSoftwareVersion); /** * Display the latest version for the element. + * @param {!Element} element */ app.setLatestVersion = function(element) { var index = 0; @@ -232,12 +262,13 @@ app.setLatestVersion = function(element) { } element.selectedIndex = index; app.changeSoftwareVersion(element); -} +}; goog.exportSymbol('app.setLatestVersion', app.setLatestVersion); /** * Make the pid table sortable + * @param {!string} table_id */ app.makePIDTable = function(table_id) { var table = new goog.ui.TableSorter(); @@ -251,14 +282,3 @@ app.makePIDTable = function(table_id) { table.setSortFunction(5, goog.ui.TableSorter.alphaSort); }; goog.exportSymbol('app.makePIDTable', app.makePIDTable); - - -/** - * Display a pid command - */ -app.displayCommand = function(json, element_id) { - var msg_structure = new app.MessageStructure(); - msg_structure.decorate(goog.dom.$(element_id)); - msg_structure.update(json['items']); -}; -goog.exportSymbol('app.displayCommand', app.displayCommand); diff --git a/js_src/pid_display.js b/js_src/pid_display.js index bc894e3b..f2290613 100644 --- a/js_src/pid_display.js +++ b/js_src/pid_display.js @@ -17,17 +17,19 @@ * Copyright (C) 2011 Simon Newton */ +goog.provide('app.MessageStructure'); + goog.require('goog.dom'); goog.require('goog.ui.Component'); goog.require('goog.ui.Tooltip'); -goog.provide('app.MessageStructure'); - - /** * A message field, this represents a field within a RDM message. + * @param {Object} field_info + * @param {?goog.dom.DomHelper=} opt_domHelper Optional DOM helper. * @constructor + * @extends goog.ui.Component */ app.MessageField = function(field_info, opt_domHelper) { goog.ui.Component.call(this, opt_domHelper); @@ -38,12 +40,14 @@ goog.inherits(app.MessageField, goog.ui.Component); /** * Return the underlying field info + * @return {Object} */ app.MessageField.prototype.pid = function() { return this._pid; }; /** * This component can't be used to decorate + * @return {!boolean} */ app.MessageField.prototype.canDecorate = function() { return false; }; @@ -124,13 +128,17 @@ app.MessageField.prototype.enterDocument = function() { */ app.MessageField.prototype.exitDocument = function() { app.MessageField.superClass_.exitDocument.call(this); - this.tt.detach(this.getElement()); + if (this.tt) { + this.tt.detach(this.getElement()); + } }; /** * Create a RDM message structure object. + * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper. * @constructor + * @extends goog.ui.Component */ app.MessageStructure = function(opt_domHelper) { goog.ui.Component.call(this, opt_domHelper); @@ -141,13 +149,14 @@ goog.inherits(app.MessageStructure, goog.ui.Component); /** * Create the dom for the TableContainer */ -app.MessageStructure.prototype.createDom = function(container) { +app.MessageStructure.prototype.createDom = function() { this.decorateInternal(this.dom_.createElement('div')); }; /** * Decorate an existing element + * @param {Element} element */ app.MessageStructure.prototype.decorateInternal = function(element) { app.MessageStructure.superClass_.decorateInternal.call(this, element); @@ -156,13 +165,17 @@ app.MessageStructure.prototype.decorateInternal = function(element) { /** * Check if we can decorate an element. - * @param {Element} element the dom element to check. + * @param {Element} element The DOM element to check. + * @return {!boolean} True if we can decorate the element. */ app.MessageStructure.prototype.canDecorate = function(element) { return element.tagName == 'DIV'; }; +/** + * @param {!Array.} fields + */ app.MessageStructure.prototype.update = function(fields) { this.removeChildren(true); @@ -186,7 +199,9 @@ app.MessageStructure.prototype.update = function(fields) { /** * A message group, this represents a repeated group of fields within an RDM * message. + * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper. * @constructor + * @extends goog.ui.Component */ app.MessageGroup = function(opt_domHelper) { goog.ui.Component.call(this, opt_domHelper); @@ -197,6 +212,7 @@ goog.inherits(app.MessageGroup, app.MessageStructure); /** * Attach the tooltip for this group + * @param {!app.MessageField} field */ app.MessageGroup.prototype.attachTooltip = function(field) { this.tt = new goog.ui.Tooltip(this.getElement()); @@ -221,19 +237,9 @@ app.MessageGroup.prototype.attachTooltip = function(field) { /** * Decorate an existing element + * @param {Element} element */ app.MessageGroup.prototype.decorateInternal = function(element) { app.MessageStructure.superClass_.decorateInternal.call(this, element); element.className = 'message_group'; }; - - -/** - * Remove the tooltip - */ -app.MessageField.prototype.exitDocument = function() { - app.MessageField.superClass_.exitDocument.call(this); - if (this.tt) { - this.tt.detach(this.getElement()); - } -}; diff --git a/js_src/pid_utils.js b/js_src/pid_utils.js new file mode 100644 index 00000000..2a9fef14 --- /dev/null +++ b/js_src/pid_utils.js @@ -0,0 +1,34 @@ +/** + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The code to display pid information. + * Copyright (C) 2011 Simon Newton + */ + +goog.provide('app.displayCommand'); + +goog.require('app.MessageStructure'); + +/** + * Display a pid command + * @param {!Object} json + * @param {!string} element_id + */ +app.displayCommand = function(json, element_id) { + var msg_structure = new app.MessageStructure(); + msg_structure.decorate(goog.dom.$(element_id)); + msg_structure.update(json['items']); +}; +goog.exportSymbol('app.displayCommand', app.displayCommand); diff --git a/model_handler.py b/model_handler.py index 5c1ed5d2..e484f5f5 100644 --- a/model_handler.py +++ b/model_handler.py @@ -299,6 +299,11 @@ def GetTemplateData(self): sensors.sort(key=lambda x: x['index']) version_output['sensors'] = sensors + # construct link to Open Fixture Library's RDM lookup page + ofl_model_url = 'https://open-fixture-library.herokuapp.com/rdm?source=olp' + ofl_model_url += '&manufacturerId=' + str(model.manufacturer.esta_id) + ofl_model_url += '&modelId=' + str(model.device_model_id) + output = { 'description': model.model_description, 'manufacturer': model.manufacturer.name, @@ -306,6 +311,7 @@ def GetTemplateData(self): 'model_id': model.device_model_id, 'software_versions': software_versions, 'software_versions_json': json.dumps(software_versions), + 'open_fixture_library_model_url': ofl_model_url } # link and product_category are optional if model.link: diff --git a/package.json b/package.json index daedf5a9..2e8d69ad 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,12 @@ "Simon Newton", "Peter Newman", "Dave Olsthoorn", - "Sean Sill" + "Sean Sill", + "Florian Edelmann" ], "devDependencies": { + "google-closure-compiler": "^20170910.0.0", + "google-closure-library": "^20170910.0.0", "grunt": "^1.0.0", "grunt-bower-task": "~0.4.0", "grunt-contrib-clean": "~0.6.0", diff --git a/static/js/app.js b/static/js/app.js index 43d90223..db3e8a1f 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -1,82 +1,74 @@ -var g,k=this;function aa(a,b,c){a=a.split(".");c=c||k;!(a[0]in c)&&c.execScript&&c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)if(!a.length&&b!==undefined)c[d]=b;else c=c[d]?c[d]:c[d]={}}function ba(){} -function ca(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if(b=="function"&&typeof a.call=="undefined")return"object";return b}function da(a){return ca(a)=="array"}function ea(a){var b=ca(a);return b=="array"||b=="object"&&typeof a.length=="number"}function o(a){return typeof a=="string"}function fa(a){return ca(a)=="function"}function ga(a){a=ca(a);return a=="object"||a=="array"||a=="function"}function p(a){return a[ia]||(a[ia]=++ja)}var ia="closure_uid_"+Math.floor(Math.random()*2147483648).toString(36),ja=0; -function ka(a){return a.call.apply(a.ta,arguments)}function la(a,b){if(!a)throw Error();if(arguments.length>2){var c=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,c);return a.apply(b,d)}}else return function(){return a.apply(b,arguments)}}function q(){q=Function.prototype.ta&&Function.prototype.ta.toString().indexOf("native code")!=-1?ka:la;return q.apply(null,arguments)} -function ma(a){var b=Array.prototype.slice.call(arguments,1);return function(){var c=Array.prototype.slice.call(arguments);c.unshift.apply(c,b);return a.apply(this,c)}}var na=Date.now||function(){return+new Date};function u(a,b){function c(){}c.prototype=b.prototype;a.g=b.prototype;a.prototype=new c};function oa(a){for(var b=1;b")!=-1)a=a.replace(sa,">");if(a.indexOf('"')!=-1)a=a.replace(ta,""");return a}} -var qa=/&/g,ra=//g,ta=/\"/g,ua=/[&<>\"]/;function va(a,b){if(ab)return 1;return 0};var wa,xa,ya,za,Aa,Ba;function Ca(){return k.navigator?k.navigator.userAgent:null}function Da(){return k.navigator}Aa=za=ya=xa=wa=false;var Ea;if(Ea=Ca()){var Fa=Da();wa=Ea.indexOf("Opera")==0;xa=!wa&&Ea.indexOf("MSIE")!=-1;za=(ya=!wa&&Ea.indexOf("WebKit")!=-1)&&Ea.indexOf("Mobile")!=-1;Aa=!wa&&!ya&&Fa.product=="Gecko"}var Ga=wa,v=xa,w=Aa,x=ya,Ha=za,Ia=Da();Ba=(Ia&&Ia.platform||"").indexOf("Mac")!=-1;var Ja=!!Da()&&(Da().appVersion||"").indexOf("X11")!=-1,Ka; -a:{var La="",Ma;if(Ga&&k.opera){var Pa=k.opera.version;La=typeof Pa=="function"?Pa():Pa}else{if(w)Ma=/rv\:([^\);]+)(\)|;)/;else if(v)Ma=/MSIE\s+([^\);]+)(\)|;)/;else if(x)Ma=/WebKit\/(\S+)/;if(Ma){var Qa=Ma.exec(Ca());La=Qa?Qa[1]:""}}if(v){var Ra,Sa=k.document;Ra=Sa?Sa.documentMode:undefined;if(Ra>parseFloat(La)){Ka=String(Ra);break a}}Ka=La}var Ta={}; -function y(a){var b;if(!(b=Ta[a])){b=0;for(var c=String(Ka).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),d=String(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),f=Math.max(c.length,d.length),e=0;b==0&&e=0}return b}var Ua={};function Va(a){return Ua[a]||(Ua[a]=v&&document.documentMode&&document.documentMode>=a)};function Wa(a,b,c){for(var d in a)b.call(c,a[d],d,a)}function Xa(a){var b=[],c=0;for(var d in a)b[c++]=a[d];return b}function Ya(a,b,c){if(b in a)return a[b];return c}var Za=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"];function $a(a){for(var b,c,d=1;d=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom:a.x>=this.left&&a.x<=this.right&&a.y>=this.top&&a.y<=this.bottom};function bb(a){this.stack=Error().stack||"";if(a)this.message=String(a)}u(bb,Error);bb.prototype.name="CustomError";function cb(a,b){b.unshift(a);bb.call(this,oa.apply(null,b));b.shift();this.sb=a}u(cb,bb);cb.prototype.name="AssertionError";function db(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var f=c}throw new cb(""+d,f||[]);}return a};var C=Array.prototype,eb=C.indexOf?function(a,b,c){db(a.length!=null);return C.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(o(a)){if(!o(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c=0){db(a.length!=null);C.splice.call(a,c,1)}return d}function hb(){return C.concat.apply(C,arguments)}function ib(a){if(da(a))return hb(a);else{for(var b=[],c=0,d=a.length;cb?1:a=a.left+a.width&&this.top<=a.top&&this.top+this.height>=a.top+a.height:a.x>=this.left&&a.x<=this.left+this.width&&a.y>=this.top&&a.y<=this.top+this.height};var ob;function pb(a){return(a=a.className)&&typeof a.split=="function"?a.split(/\s+/):[]}function qb(a){var b=pb(a),c;c=kb(arguments,1);for(var d=0,f=0;f=0)){b.push(c[f]);d++}c=d==c.length;a.className=b.join(" ");return c}function rb(a){var b=pb(a),c;c=kb(arguments,1);for(var d=0,f=0;f=0){jb(b,f--,1);d++}c=d==c.length;a.className=b.join(" ");return c};var sb=!v||Va(9);!w&&!v||v&&Va(9)||w&&y("1.9.1");var tb=v&&!y("9");function F(a){return a?new ub(G(a)):ob||(ob=new ub)}function H(a){return o(a)?document.getElementById(a):a}function vb(a,b){Wa(b,function(c,d){if(d=="style")a.style.cssText=c;else if(d=="class")a.className=c;else if(d=="for")a.htmlFor=c;else if(d in wb)a.setAttribute(wb[d],c);else if(d.lastIndexOf("aria-",0)==0)a.setAttribute(d,c);else a[d]=c})} -var wb={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"width",usemap:"useMap",frameborder:"frameBorder",maxlength:"maxLength",type:"type"};function xb(){return yb(document,arguments)} -function yb(a,b){var c=b[0],d=b[1];if(!sb&&d&&(d.name||d.type)){c=["<",c];d.name&&c.push(' name="',pa(d.name),'"');if(d.type){c.push(' type="',pa(d.type),'"');var f={};$a(f,d);d=f;delete d.type}c.push(">");c=c.join("")}c=a.createElement(c);if(d)if(o(d))c.className=d;else da(d)?qb.apply(null,[c].concat(d)):vb(c,d);b.length>2&&Ab(a,c,b,2);return c} -function Ab(a,b,c,d){function f(h){if(h)b.appendChild(o(h)?a.createTextNode(h):h)}for(d=d;d0)?fb(Bb(e)?ib(e):e,f):f(e)}}function Cb(a){return a.compatMode=="CSS1Compat"}function Db(a){for(var b;b=a.firstChild;)a.removeChild(b)}function Eb(a){return a&&a.parentNode?a.parentNode.removeChild(a):null} -function I(a,b){if(a.contains&&b.nodeType==1)return a==b||a.contains(b);if(typeof a.compareDocumentPosition!="undefined")return a==b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a}function G(a){return a.nodeType==9?a:a.ownerDocument||a.document}var Fb={SCRIPT:1,STYLE:1,HEAD:1,IFRAME:1,OBJECT:1},Gb={IMG:" ",BR:"\n"}; -function Hb(a){if(tb&&"innerText"in a)a=a.innerText.replace(/(\r\n|\r|\n)/g,"\n");else{var b=[];Ib(a,b,true);a=b.join("")}a=a.replace(/ \xAD /g," ").replace(/\xAD/g,"");a=a.replace(/\u200B/g,"");tb||(a=a.replace(/ +/g," "));if(a!=" ")a=a.replace(/^\s*/,"");return a} -function Ib(a,b,c){if(!(a.nodeName in Fb))if(a.nodeType==3)c?b.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g,"")):b.push(a.nodeValue);else if(a.nodeName in Gb)b.push(Gb[a.nodeName]);else for(a=a.firstChild;a;){Ib(a,b,c);a=a.nextSibling}}function Bb(a){if(a&&typeof a.length=="number")if(ga(a))return typeof a.item=="function"||typeof a.item=="string";else if(fa(a))return typeof a.item=="function";return false} -function Jb(a,b,c){var d=b?b.toUpperCase():null;return Kb(a,function(f){return(!d||f.nodeName==d)&&(!c||eb(pb(f),c)>=0)},true)}function Kb(a,b,c,d){if(!c)a=a.parentNode;c=d==null;for(var f=0;a&&(c||f<=d);){if(b(a))return a;a=a.parentNode;f++}return null}function ub(a){this.d=a||k.document||document}g=ub.prototype;g.b=function(a){return o(a)?this.d.getElementById(a):a};g.B=function(){return yb(this.d,arguments)};g.createElement=function(a){return this.d.createElement(a)};g.createTextNode=function(a){return this.d.createTextNode(a)}; -function Lb(a){return Cb(a.d)}function Mb(a){var b=a.d;a=!x&&Cb(b)?b.documentElement:b.body;b=b.parentWindow||b.defaultView;return new z(b.pageXOffset||a.scrollLeft,b.pageYOffset||a.scrollTop)}g.appendChild=function(a,b){a.appendChild(b)};g.Ra=Db;g.contains=I;function J(a,b){var c=G(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return""}function K(a,b){return J(a,b)||(a.currentStyle?a.currentStyle[b]:null)||a.style[b]}function Nb(a){a=a?a.nodeType==9?a:G(a):document;if(v&&!Va(9)&&!Lb(F(a)))return a.body;return a.documentElement} -function Ob(a){var b=a.getBoundingClientRect();if(v){a=a.ownerDocument;b.left-=a.documentElement.clientLeft+a.body.clientLeft;b.top-=a.documentElement.clientTop+a.body.clientTop}return b} -function Pb(a){if(v)return a.offsetParent;var b=G(a),c=K(a,"position"),d=c=="fixed"||c=="absolute";for(a=a.parentNode;a&&a!=b;a=a.parentNode){c=K(a,"position");d=d&&c=="static"&&a!=b.documentElement&&a!=b.body;if(!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||c=="fixed"||c=="absolute"||c=="relative"))return a}return null} -function Qb(a){var b=new A(0,Infinity,Infinity,0),c=F(a),d=c.d.body,f=c.d.documentElement,e=!x&&Cb(c.d)?c.d.documentElement:c.d.body;for(a=a;a=Pb(a);)if((!v||a.clientWidth!=0)&&(!x||a.clientHeight!=0||a!=d)&&a!=d&&a!=f&&K(a,"overflow")!="visible"){var h=Rb(a),i;i=a;if(w&&!y("1.9")){var j=parseFloat(J(i,"borderLeftWidth"));if(Sb(i)){var l=i.offsetWidth-i.clientWidth-j-parseFloat(J(i,"borderRightWidth"));j+=l}i=new z(j,parseFloat(J(i,"borderTopWidth")))}else i=new z(i.clientLeft,i.clientTop);h.x+=i.x; -h.y+=i.y;b.top=Math.max(b.top,h.y);b.right=Math.min(b.right,h.x+a.clientWidth);b.bottom=Math.min(b.bottom,h.y+a.clientHeight);b.left=Math.max(b.left,h.x)}d=e.scrollLeft;e=e.scrollTop;b.left=Math.max(b.left,d);b.top=Math.max(b.top,e);c=c.d.parentWindow||c.d.defaultView||window;f=c.document;if(x&&!y("500")&&!Ha){if(typeof c.innerHeight=="undefined")c=window;f=c.innerHeight;a=c.document.documentElement.scrollHeight;if(c==c.top)if(a=0&&b.left>=0&&b.bottom>b.top&&b.right>b.left?b:null} -function Rb(a){var b,c=G(a),d=K(a,"position"),f=w&&c.getBoxObjectFor&&!a.getBoundingClientRect&&d=="absolute"&&(b=c.getBoxObjectFor(a))&&(b.screenX<0||b.screenY<0),e=new z(0,0),h=Nb(c);if(a==h)return e;if(a.getBoundingClientRect){b=Ob(a);a=Mb(F(c));e.x=b.left+a.x;e.y=b.top+a.y}else if(c.getBoxObjectFor&&!f){b=c.getBoxObjectFor(a);a=c.getBoxObjectFor(h);e.x=b.screenX-a.screenX;e.y=b.screenY-a.screenY}else{b=a;do{e.x+=b.offsetLeft;e.y+=b.offsetTop;if(b!=a){e.x+=b.clientLeft||0;e.y+=b.clientTop||0}if(x&& -K(b,"position")=="fixed"){e.x+=c.body.scrollLeft;e.y+=c.body.scrollTop;break}b=b.offsetParent}while(b&&b!=a);if(Ga||x&&d=="absolute")e.y-=c.body.offsetTop;for(b=a;(b=Pb(b))&&b!=c.body&&b!=h;){e.x-=b.scrollLeft;if(!Ga||b.tagName!="TR")e.y-=b.scrollTop}}return e}function Tb(a,b){if(typeof a=="number")a=(b?Math.round(a):a)+"px";return a} -function Ub(a){if(K(a,"display")!="none")return Vb(a);var b=a.style,c=b.display,d=b.visibility,f=b.position;b.visibility="hidden";b.position="absolute";b.display="inline";a=Vb(a);b.display=c;b.position=f;b.visibility=d;return a}function Vb(a){var b=a.offsetWidth,c=a.offsetHeight,d=x&&!b&&!c;if((b===undefined||d)&&a.getBoundingClientRect){a=Ob(a);return new D(a.right-a.left,a.bottom-a.top)}return new D(b,c)}function Wb(a,b){a.style.display=b?"":"none"}function Sb(a){return"rtl"==K(a,"direction")} -function Xb(a,b,c,d){if(/^\d+px?$/.test(b))return parseInt(b,10);else{var f=a.style[c],e=a.runtimeStyle[c];a.runtimeStyle[c]=a.currentStyle[c];a.style[c]=b;b=a.style[d];a.style[c]=f;a.runtimeStyle[c]=e;return b}}function Yb(a,b){return Xb(a,a.currentStyle?a.currentStyle[b]:null,"left","pixelLeft")}var Zb={thin:2,medium:4,thick:6}; -function $b(a,b){if((a.currentStyle?a.currentStyle[b+"Style"]:null)=="none")return 0;var c=a.currentStyle?a.currentStyle[b+"Width"]:null;if(c in Zb)return Zb[c];return Xb(a,c,"left","pixelLeft")};function ac(){}var bc=0;g=ac.prototype;g.key=0;g.M=false;g.ea=false;g.Y=function(a,b,c,d,f,e){if(fa(a))this.Ia=true;else if(a&&a.handleEvent&&fa(a.handleEvent))this.Ia=false;else throw Error("Invalid listener argument");this.R=a;this.Qa=b;this.src=c;this.type=d;this.capture=!!f;this.ha=e;this.ea=false;this.key=++bc;this.M=false};g.handleEvent=function(a){if(this.Ia)return this.R.call(this.ha||this.src,a);return this.R.handleEvent.call(this.R,a)};!v||Va(9);var cc=!v||Va(9),dc=v&&!y("8");var ec=[];function L(){if(fc)gc[p(this)]=this}var fc=false,gc={};L.prototype.za=false;L.prototype.C=function(){if(!this.za){this.za=true;this.j();if(fc){var a=p(this);if(!gc.hasOwnProperty(a))throw Error(this+" did not call the goog.Disposable base constructor or was disposed of after a clearUndisposedObjects call");delete gc[a]}}};L.prototype.j=function(){this.Wa&&hc.apply(null,this.Wa)};function ic(a){a&&typeof a.C=="function"&&a.C()} -function hc(){for(var a=0,b=arguments.length;a=112&&a.keyCode<=123)a.keyCode=-1}catch(b){}}};g.Za=function(){return this.v};g.j=function(){N.g.j.call(this);this.relatedTarget=this.currentTarget=this.target=this.v=null};var O={},P={},Q={},kc={}; -function R(a,b,c,d,f){if(b)if(da(b)){for(var e=0;e=0;l--){var m=j[l];if((e||b==m.type)&&(h||c==m.capture)){pc(m.key);d++}}});else{a=p(a);if(Q[a]){a=Q[a];for(f=a.length-1;f>=0;f--){var i=a[f];if((e||b==i.type)&&(h||c==i.capture)){pc(i.key);d++}}}}return d}function mc(a){if(a in kc)return kc[a];return kc[a]="on"+a} -function sc(a,b,c,d,f){var e=1;b=p(b);if(a[b]){a.p--;a=a[b];if(a.Z)a.Z++;else a.Z=1;try{for(var h=a.length,i=0;i=0&&h.p;s--){l.currentTarget=n[s];e&=sc(h,n[s],d,true,l)}if(j){h=f[false];h.p=h.f;for(s=0;!l.G&&s=0&&e.p;h--){a.currentTarget=f[h];d&=sc(e,f[h],a.type,true,a)&&a.S!=false}}if(false in c){e=c[false];e.p=e.f;if(b)for(h=0;!a.G&&h(a.c?a.c.length:0))throw Error("Child component index out of bounds");if(!a.r||!a.c){a.r={};a.c=[]}if(b.o==a){var f=zc(b);a.r[f]=b;gb(a.c,b)}else{f=a.r;var e=zc(b);if(e in f)throw Error('The object already contains the key "'+e+'"');f[e]=b}Ac(b,a);jb(a.c,c,0,b);if(b.k&&a.k&&b.o==a){a=a.a;a.insertBefore(b.b(),a.childNodes[c]||null)}else if(d){a.a||a.B();c=a.c?a.c[c+1]||null:null;a=a.a;c=c?c.a:null;if(b.k)throw Error("Component already rendered"); -b.a||b.B();a?a.insertBefore(b.a,c||null):b.n.d.body.appendChild(b.a);if(!b.o||b.o.k)b.A()}else a.k&&!b.k&&b.a&&b.A()}g.removeChild=function(a,b){if(a){var c=o(a)?a:zc(a);a=this.r&&c?Ya(this.r,c)||null:null;if(c&&a){var d=this.r;c in d&&delete d[c];gb(this.c,a);if(b){a.F();a.a&&Eb(a.a)}Ac(a,null)}}if(!a)throw Error("Child is not in parent component");return a};g.Ra=function(a){for(;this.c&&this.c.length!=0;)this.removeChild(this.c?this.c[0]||null:null,a)};function W(a){V.call(this,a);this.W=-1;this.T=false;this.Va=Dc;this.t=[]}u(W,V);W.prototype.V=function(a){return a.tagName=="TABLE"};W.prototype.A=function(){W.g.A.call(this);var a=this.b().getElementsByTagName("TR")[0];vc(this.K||(this.K=new U(this)),a,"click",this.pb)};W.prototype.pb=function(a){a=Jb(a.target,"TH").cellIndex;var b=a==this.W?!this.T:false;this.dispatchEvent("beforesort")&&this.sort(a,b)&&this.dispatchEvent("sort")}; -W.prototype.sort=function(a,b){var c=this.t[a]||this.Va;if(c===Ec)return false;var d=this.b(),f=d.tBodies[0],e=f.rows,h=d.tHead.rows[0].cells;if(this.W>=0)rb(h[this.W],this.T?"goog-tablesorter-sorted-reverse":"goog-tablesorter-sorted");this.T=!!b;h=h[a];for(var i=[],j=0,l=e.length;j=f.right))e&=-2;if((e&132)==132&&(i.y=f.bottom))e&=-5;if(i.xf.right&&e&16){h.width-=i.x+h.width-f.right;d|=4}if(i.x+h.width>f.right&&e&1){i.x=Math.max(f.right-h.width, -f.left);d|=1}if(e&2)d|=(i.xf.right?32:0);if(i.y=f.top&&i.y+h.height>f.bottom&&e&32){h.height-=i.y+h.height-f.bottom;d|=8}if(i.y+h.height>f.bottom&&e&4){i.y=Math.max(f.bottom-h.height,f.top);d|=2}if(e&8)d|=(i.yf.bottom?128:0);i=d}else i=256;i=i;if(i&496)return i}e=a;f=w&&(Ba||Ja)&&y("1.9");if(e instanceof z){a=e.x;e=e.y}else{a=e;e=void 0}b.style.left=Tb(a,f);b.style.top=Tb(e,f);if(!(c==h?true:!c||!h?false:c.width== -h.width&&c.height==h.height)){a=Lb(F(G(b)));if(v&&(!a||!y("8"))){c=b.style;if(a){if(v){a=Yb(b,"paddingLeft");f=Yb(b,"paddingRight");e=Yb(b,"paddingTop");d=Yb(b,"paddingBottom");a=new A(e,f,d,a)}else{a=J(b,"paddingLeft");f=J(b,"paddingRight");e=J(b,"paddingTop");d=J(b,"paddingBottom");a=new A(parseFloat(e),parseFloat(f),parseFloat(d),parseFloat(a))}if(v){f=$b(b,"borderLeft");e=$b(b,"borderRight");d=$b(b,"borderTop");b=$b(b,"borderBottom");b=new A(d,e,b,f)}else{f=J(b,"borderLeftWidth");e=J(b,"borderRightWidth"); -d=J(b,"borderTopWidth");b=J(b,"borderBottomWidth");b=new A(parseFloat(d),parseFloat(e),parseFloat(b),parseFloat(f))}c.pixelWidth=h.width-b.left-a.left-a.right-b.right;c.pixelHeight=h.height-b.top-a.top-a.bottom-b.bottom}else{c.pixelWidth=h.width;c.pixelHeight=h.height}}else{b=b.style;if(w)b.MozBoxSizing="border-box";else if(x)b.WebkitBoxSizing="border-box";else b.boxSizing="border-box";b.width=h.width+"px";b.height=h.height+"px"}}return i};var Ic=k.window;function Jc(a,b,c){if(fa(a)){if(c)a=q(a,c)}else if(a&&typeof a.handleEvent=="function")a=q(a.handleEvent,a);else throw Error("Invalid listener argument");return b>2147483647?-1:Ic.setTimeout(a,b||0)};function Kc(){}Kc.prototype.s=function(){};function Lc(a,b){this.element=a;this.xa=b}u(Lc,Kc);Lc.prototype.s=function(a,b,c){Gc(this.element,this.xa,a,b,undefined,c)};function X(a,b){L.call(this);this.q=new U(this);this.oa(a||null);if(b)this.N=b}u(X,xc);g=X.prototype;g.a=null;g.Ua=true;g.sa=null;g.m=false;g.ob=false;g.ka=-1;g.Ja=-1;g.ab=false;g.Ya=true;g.N="toggle_display";g.b=function(){return this.a};g.oa=function(a){if(this.m)throw Error("Can not change this state of the popup while showing.");this.a=a}; -function Mc(a,b){a.U&&a.U.stop();a.P&&a.P.stop();if(b){if(!a.m)if(a.la()){if(!a.a)throw Error("Caller must call setElement before trying to show the popup");a.s();var c=G(a.a);a.ab&&vc(a.q,c,"keydown",a.ib,true);if(a.Ua){vc(a.q,c,"mousedown",a.Na,true);if(v){var d;try{d=c.activeElement}catch(f){}for(;d&&d.nodeName=="IFRAME";){try{var e=d.contentDocument||d.contentWindow.document}catch(h){break}c=e;d=c.activeElement}vc(a.q,c,"mousedown",a.Na,true);vc(a.q,c,"deactivate",a.Ma)}else vc(a.q,c,"blur",a.Ma)}if(a.N== -"toggle_display"){a.a.style.visibility="visible";Wb(a.a,true)}else a.N=="move_offscreen"&&a.s();a.m=true;if(a.U){oc(a.U,"end",a.Oa,false,a);a.U.play()}else a.Oa()}}else Nc(a)}g.s=ba;function Nc(a,b){if(!a.m||!a.dispatchEvent({type:"beforehide",target:b}))return false;a.q&&a.q.aa();if(a.P){oc(a.P,"end",ma(a.wa,b),false,a);a.P.play()}else a.wa(b);return true} -g.wa=function(a){if(this.N=="toggle_display")this.ob?Jc(this.Ga,0,this):this.Ga();else if(this.N=="move_offscreen"){this.a.style.left="-200px";this.a.style.top="-200px"}this.m=false;this.ma(a)};g.Ga=function(){this.a.style.visibility="hidden";Wb(this.a,false)};g.la=function(){return this.dispatchEvent("beforeshow")};g.Oa=function(){this.ka=na();this.Ja=-1;this.dispatchEvent("show")};g.ma=function(a){this.Ja=na();this.dispatchEvent({type:"hide",target:a})}; -g.Na=function(a){a=a.target;if(!I(this.a,a)&&(!this.sa||I(this.sa,a))&&!(na()-this.ka<150))Nc(this,a)};g.ib=function(a){if(a.keyCode==27)if(Nc(this,a.target)){a.preventDefault();a.stopPropagation()}};g.Ma=function(a){if(this.Ya){var b=G(this.a);if(v||Ga){a=b.activeElement;if(!a||I(this.a,a)||a.tagName=="BODY")return}else if(a.target!=b)return;na()-this.ka<150||Nc(this)}};g.j=function(){X.g.j.call(this);this.q.C();ic(this.U);ic(this.P);delete this.a;delete this.q};function Oc(a,b){this.fa=a instanceof z?a:new z(a,b)}u(Oc,Kc);Oc.prototype.s=function(a,b,c,d){Gc(Nb(a),0,a,b,this.fa,c,null,d)};function Pc(a,b){this.kb=4;this.na=b||undefined;X.call(this,a)}u(Pc,X);Pc.prototype.s=function(){if(this.na){var a=!this.m&&this.N!="move_offscreen",b=this.b();if(a){b.style.visibility="hidden";Wb(b,true)}this.na.s(b,this.kb,this.rb);a&&Wb(b,false)}};function Qc(a){if(typeof a.J=="function")return a.J();if(o(a))return a.split("");if(ea(a)){for(var b=[],c=a.length,d=0;d1){if(b%2)throw Error("Uneven number of arguments");for(var c=0;c2*this.f&&Tc(this);return true}return false};function Tc(a){if(a.f!=a.e.length){for(var b=0,c=0;b=0||Xc.push(this);a=this.b();a.className=this.className;Zc(this);R(a,"mouseover",this.Fa,false,this);R(a,"mouseout",this.Ea,false,this);$c(this);return true}; -g.ma=function(){gb(Xc,this);for(var a=this.b(),b,c=0;b=Xc[c];c++)b.anchor&&I(a,b.anchor)&&Mc(b,false);this.Pa&&ad(this.Pa);S(a,"mouseover",this.Fa,false,this);S(a,"mouseout",this.Ea,false,this);this.anchor=undefined;if((this.z?this.m?4:1:this.L?3:this.m?2:0)==0)this.ba=false;X.prototype.ma.call(this)}; -g.Ka=function(a,b){if(this.anchor==a&&this.D.contains(this.anchor))if(this.ba||!this.tb){Mc(this,false);if(!this.m){this.anchor=a;this.na=b||bd(this,0)||undefined;this.m&&this.s();Mc(this,true)}}else this.anchor=undefined;this.z=undefined};g.fb=function(a){this.L=undefined;if(a==this.anchor)if((this.i==null||this.i!=this.b()&&!this.D.contains(this.i))&&!(this.va&&this.va.i))Mc(this,false)};function cd(a,b){var c=Mb(a.n);a.ga.x=b.clientX+c.x;a.ga.y=b.clientY+c.y} -g.Da=function(a){var b=dd(this,a.target);this.i=b;Zc(this);if(b!=this.anchor){this.anchor=b;if(!this.z)this.z=Jc(q(this.Ka,this,b,void 0),this.Sa);ed(this);cd(this,a)}};function dd(a,b){try{for(;b&&!a.D.contains(b);)b=b.parentNode;return b}catch(c){return null}}g.Ca=function(a){cd(this,a);this.ba=true};g.Ba=function(a){this.i=a=dd(this,a.target);this.ba=true;if(this.anchor!=a){this.anchor=a;var b=bd(this,1);Zc(this);if(!this.z)this.z=Jc(q(this.Ka,this,a,b),this.Sa);ed(this)}}; -function bd(a,b){if(b==0){var c=a.ga.u();return new fd(c)}return new gd(a.i)}function ed(a){if(a.anchor)for(var b,c=0;b=Xc[c];c++)if(I(b.b(),a.anchor)){b.va=a;a.Pa=b}}g.X=function(a){var b=dd(this,a.target),c=dd(this,a.relatedTarget);if(b!=c){if(b==this.i)this.i=null;$c(this);this.ba=false;if(this.m&&(!a.relatedTarget||!I(this.b(),a.relatedTarget)))ad(this);else this.anchor=undefined}};g.Fa=function(){var a=this.b();if(this.i!=a){Zc(this);this.i=a}}; -g.Ea=function(a){var b=this.b();if(this.i==b&&(!a.relatedTarget||!I(b,a.relatedTarget))){this.i=null;ad(this)}};function $c(a){if(a.z){Ic.clearTimeout(a.z);a.z=undefined}}function ad(a){if((a.z?a.m?4:1:a.L?3:a.m?2:0)==2)a.L=Jc(q(a.fb,a,a.anchor),a.$a)}function Zc(a){if(a.L){Ic.clearTimeout(a.L);a.L=undefined}}g.j=function(){Mc(this,false);$c(this);this.detach();this.b()&&Eb(this.b());this.i=null;delete this.n;Wc.g.j.call(this)};function fd(a,b){Oc.call(this,a,b)}u(fd,Oc); -fd.prototype.s=function(a,b,c){b=Nb(a);b=Qb(b);c=c?new A(c.top+10,c.right,c.bottom,c.left+10):new A(10,0,0,10);Hc(this.fa,a,4,c,b,9)&496&&Hc(this.fa,a,4,c,b,5)};function gd(a){Lc.call(this,a,3)}u(gd,Lc);gd.prototype.s=function(a,b,c){var d=new z(10,0);Gc(this.element,this.xa,a,b,d,c,9)&496&&Gc(this.element,2,a,1,d,c,5)};var Y={};function Z(a,b){V.call(this,b);this.h=a}u(Z,V);Z.prototype.V=function(){return false};Z.prototype.B=function(){var a=this.h.type+"_field message_field",b=this.h.name;if(this.h.type=="string"){max=this.h.max_size;min=this.h.min_size;if(max!=undefined&&min!=undefined)b+=max==min?" ("+max+" bytes )":" ( \u2265 "+min+", \u2264 "+max+" bytes )";else if(max!=undefined)b+=" ( \u2264 "+max+" bytes )";else if(min!=undefined)b+=" ( \u2265 "+min+" bytes )"}this.a=this.n.B("div",{"class":a},b)}; -Z.prototype.A=function(){Z.g.A.call(this);var a="Type: "+this.h.type+"
Name: "+this.h.name+"
";if(this.h.multiplier!=undefined)a+="Multipler: 10"+this.h.multiplier+"
";if(this.h.size!=undefined)a+="Size: "+this.h.size;if(this.h.ranges){a+="Allowed Values:
    ";for(var b=this.h.ranges,c=0;c["+b[c].min+", "+b[c].max+"]";a+="
"}if(this.h.enums){a+="Labeled Values:
    ";b=this.h.enums;for(c=0;c"+b[c].value+": "+b[c].label+""; -a+="
"}this.H=new Wc(this.b());a=a;this.H.b().innerHTML=a};Z.prototype.F=function(){Z.g.F.call(this);this.H.detach(this.b())};function $(a){V.call(this,a)}u($,V);$.prototype.B=function(){this.I(this.n.createElement("div"))};$.prototype.I=function(a){$.g.I.call(this,a)};$.prototype.V=function(a){return a.tagName=="DIV"}; -$.prototype.update=function(a){this.Ra(true);for(var b=0;b=Y.O.length)){b=Y.O[b];var c=b.personalities,d=H("model_personality_fieldset");if(c&&c.length){var f=H("model_personality_tbody");Db(f);for(a=0;ac){c=f;b=d}}a.selectedIndex=b;Y.ua(a)};aa("app.setLatestVersion",Y.mb,void 0); -Y.eb=function(a){var b=new W;Bc(b,H(a));b.t[0]=Fc;b.t[1]=Y.ia;b.t[2]=Y.ia;b.t[3]=Fc;b.t[4]=Fc;b.t[5]=Fc};aa("app.makePIDTable",Y.eb,void 0);Y.Xa=function(a,b){var c=new $;Bc(c,H(b));c.update(a.items)};aa("app.displayCommand",Y.Xa,void 0); +var h,m=this;function q(a){return"string"==typeof a}function aa(){} +function ba(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; +else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function r(a){return"array"==ba(a)}function ca(a){var b=ba(a);return"array"==b||"object"==b&&"number"==typeof a.length}function u(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}var da="closure_uid_"+(1E9*Math.random()>>>0),ea=0;function fa(a,b,c){return a.call.apply(a.bind,arguments)} +function ha(a,b,c){if(!a)throw Error();if(2")&&(a=a.replace(ra,">"));-1!=a.indexOf('"')&&(a=a.replace(sa,"""));-1!=a.indexOf("'")&&(a=a.replace(ta,"'"));-1!=a.indexOf("\x00")&&(a=a.replace(ua,"�"));return a}var pa=/&/g,qa=//g,sa=/"/g,ta=/'/g,ua=/\x00/g,oa=/[\x00&<>"']/; +function va(a,b){var c=0;a=ma(String(a)).split(".");b=ma(String(b)).split(".");for(var d=Math.max(a.length,b.length),e=0;0==c&&eb?1:0};var xa=Array.prototype.indexOf?function(a,b,c){return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(q(a))return q(b)&&1==b.length?a.indexOf(b,c):-1;for(;c=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)}function A(a,b){return a>b?1:aparseFloat(hb)){gb=String(jb);break a}}gb=hb}var Ta={};function kb(a){return Sa(a,function(){return 0<=va(gb,a)})}var F;var lb=m.document; +F=lb&&D?fb()||("CSS1Compat"==lb.compatMode?parseInt(gb,10):5):void 0;var mb=!D||9<=Number(F),nb=D&&!kb("9");function G(a,b){this.c=void 0!==a?a:0;this.f=void 0!==b?b:0}function ob(a){return new G(a.c,a.f)}G.prototype.toString=function(){return"("+this.c+", "+this.f+")"};function pb(a,b){return new G(a.c-b.c,a.f-b.f)}G.prototype.ceil=function(){this.c=Math.ceil(this.c);this.f=Math.ceil(this.f);return this};G.prototype.floor=function(){this.c=Math.floor(this.c);this.f=Math.floor(this.f);return this};G.prototype.round=function(){this.c=Math.round(this.c);this.f=Math.round(this.f);return this};function I(a,b){this.width=a;this.height=b}h=I.prototype;h.toString=function(){return"("+this.width+" x "+this.height+")"};h.aspectRatio=function(){return this.width/this.height};h.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};h.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};h.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};function J(a){return a?new qb(K(a)):la||(la=new qb)}function L(a){return q(a)?document.getElementById(a):a}function rb(a,b){Ia(b,function(b,d){b&&b.Ia&&(b=b.Ha());"style"==d?a.style.cssText=b:"class"==d?a.className=b:"for"==d?a.htmlFor=b:sb.hasOwnProperty(d)?a.setAttribute(sb[d],b):0==d.lastIndexOf("aria-",0)||0==d.lastIndexOf("data-",0)?a.setAttribute(d,b):a[d]=b})} +var sb={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};function tb(a){var b=ub(a);a=vb(a);return D&&kb("10")&&a.pageYOffset!=b.scrollTop?new G(b.scrollLeft,b.scrollTop):new G(a.pageXOffset||b.scrollLeft,a.pageYOffset||b.scrollTop)} +function ub(a){return a.scrollingElement?a.scrollingElement:!Ya&&wb(a)?a.documentElement:a.body||a.documentElement}function vb(a){return a.parentWindow||a.defaultView}function xb(a,b,c){return yb(document,arguments)} +function yb(a,b){var c=String(b[0]),d=b[1];if(!mb&&d&&(d.name||d.type)){c=["<",c];d.name&&c.push(' name="',na(d.name),'"');if(d.type){c.push(' type="',na(d.type),'"');var e={};Ma(e,d);delete e.type;d=e}c.push(">");c=c.join("")}c=a.createElement(c);d&&(q(d)?c.className=d:r(d)?c.className=d.join(" "):rb(c,d));2=a.keyCode)a.keyCode=-1}catch(b){}};var Sb="closure_listenable_"+(1E6*Math.random()|0);function Tb(a){return!(!a||!a[Sb])}var Ub=0;function Vb(a,b,c,d,e){this.listener=a;this.a=null;this.src=b;this.type=c;this.capture=!!d;this.aa=e;this.key=++Ub;this.L=this.V=!1}function Wb(a){a.L=!0;a.listener=null;a.a=null;a.src=null;a.aa=null};function Xb(a){this.src=a;this.a={};this.b=0}function Yb(a,b,c,d,e,f){var g=b.toString();b=a.a[g];b||(b=a.a[g]=[],a.b++);var k=Zb(b,c,e,f);-1d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.a;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.a=d[e];var f=lc(d[e],a,!0,b);c=c&&f}for(e=0;e>>0);function ec(a){if("function"==ba(a))return a;a[nc]||(a[nc]=function(b){return a.handleEvent(b)});return a[nc]};function oc(a){N.call(this);this.b=a;this.a={}}z(oc,N);var pc=[];h=oc.prototype;h.K=function(a,b,c,d){r(b)||(b&&(pc[0]=b.toString()),b=pc);for(var e=0;e=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom:a.c>=this.left&&a.c<=this.right&&a.f>=this.top&&a.f<=this.bottom:!1}; +h.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};h.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};h.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};function tc(a,b,c,d){this.left=a;this.top=b;this.width=c;this.height=d}h=tc.prototype;h.toString=function(){return"("+this.left+", "+this.top+" - "+this.width+"w x "+this.height+"h)"};h.contains=function(a){return a instanceof G?a.c>=this.left&&a.c<=this.left+this.width&&a.f>=this.top&&a.f<=this.top+this.height:this.left<=a.left&&this.left+this.width>=a.left+a.width&&this.top<=a.top&&this.top+this.height>=a.top+a.height}; +h.ceil=function(){this.left=Math.ceil(this.left);this.top=Math.ceil(this.top);this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};h.floor=function(){this.left=Math.floor(this.left);this.top=Math.floor(this.top);this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};h.round=function(){this.left=Math.round(this.left);this.top=Math.round(this.top);this.width=Math.round(this.width);this.height=Math.round(this.height);return this};function S(a,b){var c=K(a);return c.defaultView&&c.defaultView.getComputedStyle&&(a=c.defaultView.getComputedStyle(a,null))?a[b]||a.getPropertyValue(b)||"":""}function T(a,b){return S(a,b)||(a.currentStyle?a.currentStyle[b]:null)||a.style&&a.style[b]}function uc(a){a=a?K(a):document;return!D||9<=Number(F)||wb(J(a).a)?a.documentElement:a.body} +function vc(a){try{var b=a.getBoundingClientRect()}catch(c){return{left:0,top:0,right:0,bottom:0}}D&&a.ownerDocument.body&&(a=a.ownerDocument,b.left-=a.documentElement.clientLeft+a.body.clientLeft,b.top-=a.documentElement.clientTop+a.body.clientTop);return b} +function wc(a){if(D&&!(8<=Number(F)))return a.offsetParent;var b=K(a),c=T(a,"position"),d="fixed"==c||"absolute"==c;for(a=a.parentNode;a&&a!=b;a=a.parentNode)if(11==a.nodeType&&a.host&&(a=a.host),c=T(a,"position"),d=d&&"static"==c&&a!=b.documentElement&&a!=b.body,!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||"fixed"==c||"absolute"==c||"relative"==c))return a;return null} +function xc(a){for(var b=new R(0,Infinity,Infinity,0),c=J(a),d=c.a.body,e=c.a.documentElement,f=ub(c.a);a=wc(a);)if(!(D&&0==a.clientWidth||Ya&&0==a.clientHeight&&a==d)&&a!=d&&a!=e&&"visible"!=T(a,"overflow")){var g=yc(a),k=new G(a.clientLeft,a.clientTop);g.c+=k.c;g.f+=k.f;b.top=Math.max(b.top,g.f);b.right=Math.min(b.right,g.c+a.clientWidth);b.bottom=Math.min(b.bottom,g.f+a.clientHeight);b.left=Math.max(b.left,g.c)}d=f.scrollLeft;f=f.scrollTop;b.left=Math.max(b.left,d);b.top=Math.max(b.top,f);c=(vb(c.a)|| +window).document;c=wb(c)?c.documentElement:c.body;c=new I(c.clientWidth,c.clientHeight);b.right=Math.min(b.right,d+c.width);b.bottom=Math.min(b.bottom,f+c.height);return 0<=b.top&&0<=b.left&&b.bottom>b.top&&b.right>b.left?b:null}function yc(a){var b=K(a),c=new G(0,0),d=uc(b);if(a==d)return c;a=vc(a);b=tb(J(b).a);c.c=a.left+b.c;c.f=a.top+b.f;return c}function zc(a){"number"==typeof a&&(a+="px");return a} +function Ac(a){var b=Bc;if("none"!=T(a,"display"))return b(a);var c=a.style,d=c.display,e=c.visibility,f=c.position;c.visibility="hidden";c.position="absolute";c.display="inline";a=b(a);c.display=d;c.position=f;c.visibility=e;return a}function Bc(a){var b=a.offsetWidth,c=a.offsetHeight,d=Ya&&!b&&!c;return(void 0===b||d)&&a.getBoundingClientRect?(a=vc(a),new I(a.right-a.left,a.bottom-a.top)):new I(b,c)}function Cc(a,b){a.style.display=b?"":"none"} +function Dc(a,b){if(/^\d+px?$/.test(b))return parseInt(b,10);var c=a.style.left,d=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;a.style.left=b;b=a.style.pixelLeft;a.style.left=c;a.runtimeStyle.left=d;return+b}function Ec(a,b){return(b=a.currentStyle?a.currentStyle[b]:null)?Dc(a,b):0}var Fc={thin:2,medium:4,thick:6};function Gc(a,b){if("none"==(a.currentStyle?a.currentStyle[b+"Style"]:null))return 0;b=a.currentStyle?a.currentStyle[b+"Width"]:null;return b in Fc?Fc[b]:Dc(a,b)};function U(){}U.a=void 0;U.b=function(){return U.a?U.a:U.a=new U};U.prototype.a=0;function V(a){Q.call(this);this.A=a||J();this.G=null;this.C=!1;this.b=null;this.o=void 0;this.j=this.a=this.i=null;this.N=!1}z(V,Q);h=V.prototype;h.Ca=U.b();function Hc(a){return a.G||(a.G=":"+(a.Ca.a++).toString(36))}h.h=function(){return this.b};function Ic(a,b){if(a==b)throw Error("Unable to set parent component");var c;if(c=b&&a.i&&a.G){c=a.i;var d=a.G;c=c.j&&d?Ka(c.j,d)||null:null}if(c&&a.i!=b)throw Error("Unable to set parent component");a.i=b;V.u.ia.call(a,b)} +h.ia=function(a){if(this.i&&this.i!=a)throw Error("Method not supported");V.u.ia.call(this,a)};h.Y=function(){this.b=this.A.a.createElement("DIV")};function Jc(a,b){if(a.C)throw Error("Component already rendered");if(b&&a.W(b)){a.N=!0;var c=K(b);a.A&&a.A.a==c||(a.A=J(b));a.X(b);a.H()}else throw Error("Invalid element to decorate");}h.W=function(){return!0};h.X=function(a){this.b=a};h.H=function(){this.C=!0;Kc(this,function(a){!a.C&&a.h()&&a.H()})}; +h.R=function(){Kc(this,function(a){a.C&&a.R()});this.o&&rc(this.o);this.C=!1};h.v=function(){this.C&&this.R();this.o&&(this.o.P(),delete this.o);Kc(this,function(a){a.P()});!this.N&&this.b&&Cb(this.b);this.i=this.b=this.j=this.a=null;V.u.v.call(this)}; +function Lc(a,b,c){if(b.C)throw Error("Component already rendered");if(0>c||c>(a.a?a.a.length:0))throw Error("Child component index out of bounds");a.j&&a.a||(a.j={},a.a=[]);if(b.i==a){var d=Hc(b);a.j[d]=b;Ca(a.a,b)}else{d=a.j;var e=Hc(b);if(null!==d&&e in d)throw Error('The object already contains the key "'+e+'"');d[e]=b}Ic(b,a);Ea(a.a,c,0,b);if(b.C&&a.C&&b.i==a)a=a.b,c=a.childNodes[c]||null,c!=b.h()&&a.insertBefore(b.h(),c);else{a.b||a.Y();c=a.a?a.a[c+1]||null:null;a=a.b;c=c?c.b:null;if(b.C)throw Error("Component already rendered"); +b.b||b.Y();a?a.insertBefore(b.b,c||null):b.A.a.body.appendChild(b.b);b.i&&!b.i.C||b.H()}}function Kc(a,b){a.a&&ya(a.a,b,void 0)}h.removeChild=function(a,b){if(a){var c=q(a)?a:Hc(a);a=this.j&&c?Ka(this.j,c)||null:null;if(c&&a){var d=this.j;c in d&&delete d[c];Ca(this.a,a);b&&(a.R(),a.b&&Cb(a.b));Ic(a,null)}}if(!a)throw Error("Child is not in parent component");return a};function Mc(a,b){if("function"!=ba(a))if(a&&"function"==typeof a.handleEvent)a=v(a.handleEvent,a);else throw Error("Invalid listener argument");return 2147483647=e.right)&&(f&=-2);132==(f&132)&&(d.f=e.bottom)&&(f&=-5);d.ce.right&& +(k.width=Math.min(e.right-d.c,n+k.width-e.left),k.width=Math.max(k.width,0),l|=4)}d.c+k.width>e.right&&f&1&&(d.c=Math.max(e.right-k.width,e.left),l|=1);f&2&&(l|=(d.ce.right?32:0));d.fe.bottom&&(k.height=Math.min(e.bottom-d.f,n+k.height-e.top),k.height=Math.max(k.height,0),l|=8));d.f+k.height>e.bottom&&f&4&&(d.f=Math.max(e.bottom-k.height,e.top),l|=2);f&8&&(l|=(d.f +e.bottom?128:0));e=l}else e=256;l=e}f=new tc(0,0,0,0);f.left=a.c;f.top=a.f;f.width=g.width;f.height=g.height;e=l;if(e&496)return e;a=new G(f.left,f.top);a instanceof G?(g=a.c,a=a.f):(g=a,a=void 0);b.style.left=zc(g);b.style.top=zc(a);g=new I(f.width,f.height);c==g||c&&g&&c.width==g.width&&c.height==g.height||(c=g,a=wb(J(K(b)).a),!D||kb("10")||a&&kb("8")?(b=b.style,Xa?b.MozBoxSizing="border-box":Ya?b.WebkitBoxSizing="border-box":b.boxSizing="border-box",b.width=Math.max(c.width,0)+"px",b.height=Math.max(c.height, +0)+"px"):(g=b.style,a?(D?(a=Ec(b,"paddingLeft"),f=Ec(b,"paddingRight"),d=Ec(b,"paddingTop"),k=Ec(b,"paddingBottom"),a=new R(d,f,k,a)):(a=S(b,"paddingLeft"),f=S(b,"paddingRight"),d=S(b,"paddingTop"),k=S(b,"paddingBottom"),a=new R(parseFloat(d),parseFloat(f),parseFloat(k),parseFloat(a))),!D||9<=Number(F)?(f=S(b,"borderLeftWidth"),d=S(b,"borderRightWidth"),k=S(b,"borderTopWidth"),b=S(b,"borderBottomWidth"),b=new R(parseFloat(k),parseFloat(d),parseFloat(b),parseFloat(f))):(f=Gc(b,"borderLeft"),d=Gc(b, +"borderRight"),k=Gc(b,"borderTop"),b=Gc(b,"borderBottom"),b=new R(k,d,b,f)),g.pixelWidth=c.width-b.left-a.left-a.right-b.right,g.pixelHeight=c.height-b.top-a.top-a.bottom-b.bottom):(g.pixelWidth=c.width,g.pixelHeight=c.height)));return e}function Yc(a,b){return(b&8&&"rtl"==T(a,"direction")?b^4:b)&-9};function $c(){}$c.prototype.a=function(){};function ad(a,b,c){this.b=a;this.g=b;this.i=c}z(ad,$c);ad.prototype.a=function(a,b,c){Xc(this.b,this.g,a,b,void 0,c,this.i)};function bd(a,b){this.b=a instanceof G?a:new G(a,b)}z(bd,$c);bd.prototype.a=function(a,b,c,d){Xc(uc(a),0,a,b,this.b,c,null,d)};function cd(a){if(a.I&&"function"==typeof a.I)return a.I();if(q(a))return a.split("");if(ca(a)){for(var b=[],c=a.length,d=0;dka()-this.ea||jd(this,a)};h.ua=function(a){var b=K(this.w);if("undefined"!=typeof document.activeElement){if(a=b.activeElement,!a||M(this.w,a)||"BODY"==a.tagName)return}else if(a.target!=b)return;150>ka()-this.ea||jd(this)};function kd(a,b){return Ba(a.la||[],function(a){return b===a||M(a,b)})} +h.v=function(){W.u.v.call(this);this.g.P();Kb(this.D);Kb(this.l);delete this.w;delete this.g;delete this.la};function ld(a,b){this.U=b||void 0;W.call(this,a)}z(ld,W);ld.prototype.Z=function(){if(this.U){var a=!this.B&&"move_offscreen"!=this.M,b=this.h();a&&(b.style.visibility="hidden",Cc(b,!0));this.U.a(b,8,this.Ea);a&&Cc(b,!1)}};function md(a,b,c){this.A=c||(a?J(L(a)):J());ld.call(this,this.A.b("DIV",{style:"position:absolute;display:none;"}));this.N=new G(1,1);this.i=new gd;this.j=null;a&&(c=a=L(a),this.i.a.set(hd(c),c),O(a,"mouseover",this.pa,!1,this),O(a,"mouseout",this.$,!1,this),O(a,"mousemove",this.oa,!1,this),O(a,"focus",this.na,!1,this),O(a,"blur",this.$,!1,this));if(null!=b)if(a=this.h(),"textContent"in a)a.textContent=b;else if(3==a.nodeType)a.data=String(b);else if(a.firstChild&&3==a.firstChild.nodeType){for(;a.lastChild!= +a.firstChild;)a.removeChild(a.lastChild);a.firstChild.data=String(b)}else Ab(a),a.appendChild(K(a).createTextNode(String(b)))}z(md,ld);var nd=[];h=md.prototype;h.s=null;h.Aa="goog-tooltip";h.detach=function(a){if(a){a=L(a);od(this,a);var b=this.i.a;a=hd(a);fd(b.a,a)&&(delete b.a[a],b.b--,b.m.length>2*b.b&&ed(b))}else{b=this.i.I();for(var c=0;a=b[c];c++)od(this,a);a=this.i.a;a.a={};a.m.length=0;a.b=0}}; +function od(a,b){P(b,"mouseover",a.pa,!1,a);P(b,"mouseout",a.$,!1,a);P(b,"mousemove",a.oa,!1,a);P(b,"focus",a.na,!1,a);P(b,"blur",a.$,!1,a)}h.ha=function(a){var b=this.h();b&&Cb(b);md.u.ha.call(this,a);a?(b=this.A.a.body,b.insertBefore(a,b.lastChild),Kb(this.j),this.j=new Nc(this.h()),a=ia(Kb,this.j),this.T?a():(this.J||(this.J=[]),this.J.push(a)),O(this.j,"focusin",this.O,void 0,this),O(this.j,"focusout",this.ca,void 0,this)):(Kb(this.j),this.j=null)}; +h.fa=function(){if(!W.prototype.fa.call(this))return!1;if(this.a)for(var a,b=0;a=nd[b];b++)M(a.h(),this.a)||id(a,!1);0<=xa(nd,this)||nd.push(this);a=this.h();a.className=this.Aa;this.O();O(a,"mouseover",this.ra,!1,this);O(a,"mouseout",this.qa,!1,this);pd(this);return!0}; +h.ga=function(){Ca(nd,this);for(var a=this.h(),b,c=0;b=nd[c];c++)b.a&&M(a,b.a)&&id(b,!1);this.ka&&this.ka.ca();P(a,"mouseover",this.ra,!1,this);P(a,"mouseout",this.qa,!1,this);this.a=void 0;0==(this.b?this.B?4:1:this.o?3:this.B?2:0)&&(this.G=!1);W.prototype.ga.call(this)};h.ta=function(a,b){this.a==a&&this.i.contains(this.a)&&(this.G||!this.Fa?(id(this,!1),this.B||(this.a=a,this.U=b||new qd(ob(this.N)),this.B&&this.Z(),id(this,!0))):this.a=void 0);this.b=void 0}; +h.Da=function(a){this.o=void 0;if(a==this.a){a=this.A;a:{var b=a.a;try{var c=b&&b.activeElement;break a}catch(d){}c=null}c=c&&this.h()&&a.contains(this.h(),c);this.s&&(this.s==this.h()||this.i.contains(this.s))||c||this.da&&this.da.s||id(this,!1)}};function rd(a,b){var c=tb(a.A.a);a.N.c=b.clientX+c.c;a.N.f=b.clientY+c.f}h.pa=function(a){var b=sd(this,a.target);this.s=b;this.O();b!=this.a&&(this.a=b,this.b||(this.b=Mc(v(this.ta,this,b,void 0),500)),td(this),rd(this,a))}; +function sd(a,b){try{for(;b&&!a.i.contains(b);)b=b.parentNode;return b}catch(c){return null}}h.oa=function(a){rd(this,a);this.G=!0};h.na=function(a){this.s=a=sd(this,a.target);this.G=!0;if(this.a!=a){this.a=a;var b=new ud(this.s);this.O();this.b||(this.b=Mc(v(this.ta,this,a,b),500));td(this)}};function td(a){if(a.a)for(var b,c=0;b=nd[c];c++)M(b.h(),a.a)&&(b.da=a,a.ka=b)} +h.$=function(a){var b=sd(this,a.target),c=sd(this,a.relatedTarget);b!=c&&(b==this.s&&(this.s=null),pd(this),this.G=!1,!this.B||a.relatedTarget&&M(this.h(),a.relatedTarget)?this.a=void 0:this.ca())};h.ra=function(){var a=this.h();this.s!=a&&(this.O(),this.s=a)};h.qa=function(a){var b=this.h();this.s!=b||a.relatedTarget&&M(b,a.relatedTarget)||(this.s=null,this.ca())};function pd(a){a.b&&(m.clearTimeout(a.b),a.b=void 0)} +h.ca=function(){2==(this.b?this.B?4:1:this.o?3:this.B?2:0)&&(this.o=Mc(v(this.Da,this,this.a),0))};h.O=function(){this.o&&(m.clearTimeout(this.o),this.o=void 0)};h.v=function(){id(this,!1);pd(this);this.detach();this.h()&&Cb(this.h());this.s=null;delete this.A;md.u.v.call(this)};function qd(a,b){bd.call(this,a,b)}z(qd,bd);qd.prototype.a=function(a,b,c){b=uc(a);b=xc(b);c=c?new R(c.top+10,c.right,c.bottom,c.left+10):new R(10,0,0,10);Zc(this.b,a,8,c,b,9)&496&&Zc(this.b,a,8,c,b,5)}; +function ud(a){ad.call(this,a,5)}z(ud,ad);ud.prototype.a=function(a,b,c){var d=new G(10,0);Xc(this.b,this.g,a,b,d,c,9)&496&&Xc(this.b,4,a,1,d,c,5)};function X(a,b){V.call(this,b);this.g=a}z(X,V);X.prototype.W=function(){return!1};X.prototype.Y=function(){var a=this.g.type+"_field message_field",b=this.g.name;if("string"==this.g.type){var c=this.g.max_size,d=this.g.min_size;void 0!=c&&void 0!=d?b=c==d?b+(" ("+c+" bytes )"):b+(" ( \u2265 "+d+", \u2264 "+c+" bytes )"):void 0!=c?b+=" ( \u2264 "+c+" bytes )":void 0!=d&&(b+=" ( \u2265 "+d+" bytes )")}this.b=this.A.b("div",{"class":a},b)}; +X.prototype.H=function(){X.u.H.call(this);var a="Type: "+this.g.type+"
Name: "+this.g.name+"
";void 0!=this.g.multiplier&&(a+="Multipler: 10"+this.g.multiplier+"
");void 0!=this.g.size&&(a+="Size: "+this.g.size);if(this.g.ranges){a+="Allowed Values:
    ";for(var b=this.g.ranges,c=0;c["+b[c].min+", "+b[c].max+"]";a+="
"}if(this.g.enums){a+="Labeled Values:
    ";b=this.g.enums;for(c=0;c"+b[c].value+": "+b[c].label+"";a+= +"
"}this.l=new md(this.h());this.l.ya(a)};X.prototype.R=function(){X.u.R.call(this);this.l&&this.l.detach(this.h())};function Y(a){V.call(this,a)}z(Y,V);Y.prototype.Y=function(){this.X(this.A.a.createElement("div"))};Y.prototype.W=function(a){return"DIV"==a.tagName}; +Y.prototype.update=function(a){for(var b=[];this.a&&0!=this.a.length;)b.push(this.removeChild(this.a?this.a[0]||null:null,!0));for(b=0;ba&&(a+=4294967296);for(a=a.toString(16);a.length=Ed.length)){b=Ed[b];var c=b.personalities,d=L("model_personality_fieldset");if(d)if(c&&c.length){var e=L("model_personality_tbody");Ab(e);for(a=0;aView in Open Fixture Library');k.appendChild(g);e.appendChild(k)}d.style.display= +"block"}else d.style.display="none";c=b.sensors;if(d=L("model_sensor_fieldset"))if(c&&c.length){e=L("model_sensor_tbody");Ab(e);for(a=0;ac&&(c=e,b=d)}a.selectedIndex=b;Id(a)}); +x("app.makePIDTable",function(a){var b=new Ad;Jc(b,L(a));b.g[0]=A;b.g[1]=Gd;b.g[2]=Gd;b.g[3]=A;b.g[4]=A;b.g[5]=A}); diff --git a/templates/display_model.tmpl b/templates/display_model.tmpl index f4f00acc..3aef2c9f 100644 --- a/templates/display_model.tmpl +++ b/templates/display_model.tmpl @@ -49,6 +49,10 @@ {% endif %} + + Fixture definition + View in Open Fixture Library +
Index Slot Count Description + Channel List @@ -139,6 +144,7 @@ }(document, 'script', 'facebook-jssdk'));