whimsical-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ru...@apache.org
Subject [whimsy] branch master updated: update wunderbar/react.js/rack/etc.
Date Wed, 17 May 2017 23:52:04 GMT
This is an automated email from the ASF dual-hosted git repository.

rubys pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git

The following commit(s) were added to refs/heads/master by this push:
       new  a70e928   update wunderbar/react.js/rack/etc.
a70e928 is described below

commit a70e9280ecb362756936b5dfdf62225d756f2c3f
Author: Sam Ruby <rubys@intertwingly.net>
AuthorDate: Wed May 17 19:51:23 2017 -0400

    update wunderbar/react.js/rack/etc.
    
    Note: asssets aren't being shared with the site; need to investigate
---
 www/roster/Gemfile                               |   4 +-
 www/roster/public/assets/bootstrap-min.css       |   6 +-
 www/roster/public/assets/bootstrap-min.js        |   8 +-
 www/roster/public/assets/bootstrap-theme.min.css |   4 +-
 www/roster/public/assets/jquery-min.js           |   8 +-
 www/roster/public/assets/react-dom.min.js        |  16 ++
 www/roster/public/assets/react-min.js            |  11 +-
 www/roster/public/assets/stupidtable.min.js      |   5 +-
 www/roster/public/assets/underscore-min.js       |   6 +-
 www/roster/public/stylesheets/app.css            |  11 +-
 www/roster/views/person.js.rb                    | 243 +++++++++++------------
 www/roster/views/person/email.js.rb              |   6 +-
 www/roster/views/person/forms.js.rb              |   6 +-
 www/roster/views/person/fullname.js.rb           |   6 +-
 www/roster/views/person/github.js.rb             |   6 +-
 www/roster/views/person/memstat.js.rb            |   8 +-
 www/roster/views/person/memtext.rb               |   6 +-
 www/roster/views/person/pgpkeys.js.rb            |   7 +-
 www/roster/views/person/sascore.js.rb            |   6 +-
 www/roster/views/person/sshkeys.js.rb            |   6 +-
 www/roster/views/person/urls.js.rb               |   6 +-
 21 files changed, 199 insertions(+), 186 deletions(-)

diff --git a/www/roster/Gemfile b/www/roster/Gemfile
index 023ee7d..9660a26 100644
--- a/www/roster/Gemfile
+++ b/www/roster/Gemfile
@@ -13,9 +13,9 @@ else
 end
 
 gem 'rake'
-gem 'wunderbar', '~> 1.0.28'
+gem 'wunderbar', '~> 1.1.0'
 gem 'ruby2js', '>= 2.0.0'
-gem 'sinatra', '~> 1.4'
+gem 'sinatra', '~> 2.0'
 gem 'nokogumbo'
 gem 'execjs'
 gem 'mail'
diff --git a/www/roster/public/assets/bootstrap-min.css b/www/roster/public/assets/bootstrap-min.css
index 4cf729e..ed3905e 100644
--- a/www/roster/public/assets/bootstrap-min.css
+++ b/www/roster/public/assets/bootstrap-min.css
@@ -1,6 +1,6 @@
 /*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr
[...]
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr
[...]
 /*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/www/roster/public/assets/bootstrap-min.js b/www/roster/public/assets/bootstrap-min.js
index e79c065..9bcd2fc 100644
--- a/www/roster/public/assets/bootstrap-min.js
+++ b/www/roster/public/assets/bootstrap-min.js
@@ -1,7 +1,7 @@
 /*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
  * Licensed under the MIT license
  */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use
strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw
new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than
version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"
[...]
-d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var
d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return
a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var
b=a(this);c.call(b,b.data()) [...]
\ No newline at end of file
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use
strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw
new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than
version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"
[...]
+this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var
d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return
 [...]
\ No newline at end of file
diff --git a/www/roster/public/assets/bootstrap-theme.min.css b/www/roster/public/assets/bootstrap-theme.min.css
index dc95d8e..5e39401 100644
--- a/www/roster/public/assets/bootstrap-theme.min.css
+++ b/www/roster/public/assets/bootstrap-theme.min.css
@@ -1,6 +1,6 @@
 /*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0
-1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset
0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warnin
[...]
 /*# sourceMappingURL=bootstrap-theme.min.css.map */
\ No newline at end of file
diff --git a/www/roster/public/assets/jquery-min.js b/www/roster/public/assets/jquery-min.js
index e6a051d..644d35e 100644
--- a/www/roster/public/assets/jquery-min.js
+++ b/www/roster/public/assets/jquery-min.js
@@ -1,4 +1,4 @@
-/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw
new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof
window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return
new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b
[...]
-return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void
0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof
b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void
0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}fu
[...]
-}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var
a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var
b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(
[...]
+/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw
new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof
window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function
p(a,b){b=b||d;var c=b.createElem [...]
+a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var
T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h
in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return
j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d: [...]
+null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var
c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var
c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return
b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var
c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();r [...]
diff --git a/www/roster/public/assets/react-dom.min.js b/www/roster/public/assets/react-dom.min.js
new file mode 100644
index 0000000..3261edd
--- /dev/null
+++ b/www/roster/public/assets/react-dom.min.js
@@ -0,0 +1,16 @@
+/**
+ * ReactDOM v15.5.4
+ *
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e(require("react"));else
if("function"==typeof define&&define.amd)define(["react"],e);else{var t;t="undefined"!=typeof
window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.ReactDOM=e(t.React)}}(function(e){return
function(t){return function(){return function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var
u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)r [...]
+topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelection
[...]
+this._hostNode=null,this._hostParent=null,this._domID=0,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});o(l.prototype,{mountComponent:function(e,t,n,r){var
o=n._idCounter++,i=" react-text: "+o+" ";if(this._domID=o,this._hostParent=t,e.useCreateElement){var
l=n._ownerDocument,c=l.createComment(i),p=l.createComment(" /react-text "),d=a(l.createDocumentFragment());return
a.queueChild(d,a(c)),this._stringText&&a.queueChild(d,a(l.createTextNode(this._stringText))),a.que
[...]
+;case"topBlur":m=null,v=null,g=null;break;case"topMouseDown":y=!0;break;case"topContextMenu":case"topMouseUp":return
y=!1,o(n,r);case"topSelectionChange":if(f)break;case"topKeyDown":case"topKeyUp":return o(n,r)}return
null},didPutListener:function(e,t,n){"onSelect"===t&&(_=!0)}};t.exports=C},{110:110,123:123,132:132,141:141,19:19,33:33,56:56,80:80}],75:[function(e,t,n){"use
strict";function r(e){return"."+e._rootNodeID}function o(e){return"button"===e||"input"===e||"select"===e||"textare
[...]
+;return u.prototype=Error.prototype,T.checkPropTypes=a,T.PropTypes=T,T}},{129:129,137:137,142:142,144:144,147:147}],147:[function(e,t,n){"use
strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},{}]},{},[45])(45)}()}()});
\ No newline at end of file
diff --git a/www/roster/public/assets/react-min.js b/www/roster/public/assets/react-min.js
index 5658bf5..c00a1ed 100644
--- a/www/roster/public/assets/react-min.js
+++ b/www/roster/public/assets/react-min.js
@@ -1,7 +1,7 @@
 /**
- * React (with addons) v0.14.6
+ * React (with addons) v15.5.4
  *
- * Copyright 2013-2015, Facebook, Inc.
+ * Copyright 2013-present, Facebook, Inc.
  * All rights reserved.
  *
  * This source code is licensed under the BSD-style license found in the
@@ -9,8 +9,5 @@
  * of patent rights can be found in the PATENTS file in the same directory.
  *
  */
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else
if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof
window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.React=e()}}(function(){return
function e(t,n,r){function o(i,u){if(!n[i]){if(!t[i]){var s="function"==typeof require&&require;if(!u&&s)return
s(i,!0);if(a)return a(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.cod [...]
-topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOve
[...]
-56:56}],44:[function(e,t,n){"use strict";var r={useCreateElement:!1};t.exports=r},{}],45:[function(e,t,n){"use
strict";var r=e(9),o=e(11),a=e(70),i=e(76),u=e(158),s={dangerouslySetInnerHTML:"`dangerouslySetInnerHTML`
must be set using `updateInnerHTMLByID()`.",style:"`style` must be set using `updateStylesByID()`."},l={updatePropertyByID:function(e,t,n){var
r=a.getNode(e);s.hasOwnProperty(t)?u(!1):void 0,null!=n?o.setValueForProperty(r,t,n):o.deleteValueForProperty(r,t)},dangerouslyRepla
[...]
-t.exports=r},{}],79:[function(e,t,n){"use strict";var r=e(162),o=r({prop:null,context:null,childContext:null});t.exports=o},{162:162}],80:[function(e,t,n){"use
strict";function r(e){function t(t,n,r,o,a,i){if(o=o||_,i=i||r,null==n[r]){var u=C[a];return
t?new Error("Required "+u+" `"+i+"` was not specified in "+("`"+o+"`.")):null}return e(n,r,o,a,i)}var
n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function o(e){function t(t,n,r,o,a){var
i=t[n],u=v(i);if(u!==e){var s=C[o],l=m(i) [...]
-},pageY:function(e){return"pageY"in e?e.pageY:e.clientY+a.currentScrollTop}};o.augmentClass(r,u),t.exports=r},{108:108,111:111,124:124}],107:[function(e,t,n){"use
strict";function r(e,t,n,r){o.call(this,e,t,n,r)}var o=e(108),a=e(124),i={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:a};o.augmentClass(r,i),t.exports=r},{108:108,124:124}],108:[function(e,t,n){"use
strict";function r(e,t,n,r){o.call(this,e,t,n,r)}var  [...]
\ No newline at end of file
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else
if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof
window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.React=e()}}(function(){return
function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return
u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.cod [...]
+;t.exports=function(e){return r(e,!1)}},{48:48}],48:[function(e,t,n){"use strict";var r=e(40),o=e(42),i=(e(44),e(49)),a=e(46);t.exports=function(e,t){function
n(e){var t=e&&(w&&e[w]||e[A]);if("function"==typeof t)return t}function s(e,t){return
e===t?0!==e||1/e==1/t:e!==e&&t!==t}function u(e){this.message=e,this.stack=""}function
c(e){function n(n,r,a,s,c,p,l){if(s=s||T,p=p||a,l!==i)if(t)o(!1,"Calling PropTypes validators
directly is not supported by the `prop-types` package. Use `PropTy [...]
\ No newline at end of file
diff --git a/www/roster/public/assets/stupidtable.min.js b/www/roster/public/assets/stupidtable.min.js
index fa3cdd5..eeb3b02 100644
--- a/www/roster/public/assets/stupidtable.min.js
+++ b/www/roster/public/assets/stupidtable.min.js
@@ -1 +1,4 @@
-(function(d){d.fn.stupidtable=function(b){return this.each(function(){var a=d(this);b=b||{};b=d.extend({},d.fn.stupidtable.default_sort_fns,b);var
n=function(a,b){for(var f=[],c=0,e=a.slice(0).sort(b),h=0;h<a.length;h++){for(c=d.inArray(a[h],e);-1!=d.inArray(c,f);)c++;f.push(c)}return
f},q=function(a,b){for(var d=a.slice(0),c=0,e=0;e<b.length;e++)c=b[e],d[c]=a[e];return
d};a.on("click","th",function(){var m=a.children("tbody").children("tr"),g=d(this),f=0,c=d.fn.stupidtable.dir;a.find("t
[...]
+(function(c){c.fn.stupidtable=function(b){return this.each(function(){var a=c(this);b=b||{};b=c.extend({},c.fn.stupidtable.default_sort_fns,b);a.data("sortFns",b);a.on("click.stupidtable","thead
th",function(){c(this).stupidsort()})})};c.fn.stupidsort=function(b){var a=c(this),g=0,f=c.fn.stupidtable.dir,e=a.closest("table"),k=a.data("sort")||null;if(null!==k){a.parents("tr").find("th").slice(0,c(this).index()).each(function(){var
a=c(this).attr("colspan")||1;g+=parseInt(a,10)});var d;1== [...]
+d=b:(d=b||a.data("sort-default")||f.ASC,a.data("sort-dir")&&(d=a.data("sort-dir")===f.ASC?f.DESC:f.ASC));if(a.data("sort-dir")!==d)return
a.data("sort-dir",d),e.trigger("beforetablesort",{column:g,direction:d}),e.css("display"),setTimeout(function(){var
b=[],l=e.data("sortFns")[k],h=e.children("tbody").children("tr");h.each(function(a,d){var
e=c(d).children().eq(g),f=e.data("sort-value");"undefined"===typeof f&&(f=e.text(),e.data("sort-value",f));b.push([f,d])});b.sort(function(a,b){retu
[...]
+b[0])});d!=f.ASC&&b.reverse();h=c.map(b,function(a){return a[1]});e.children("tbody").append(h);e.find("th").data("sort-dir",null).removeClass("sorting-desc
sorting-asc");a.data("sort-dir",d).addClass("sorting-"+d);e.trigger("aftertablesort",{column:g,direction:d});e.css("display")},10),a}};c.fn.updateSortVal=function(b){var
a=c(this);a.is("[data-sort-value]")&&a.attr("data-sort-value",b);a.data("sort-value",b);return
a};c.fn.stupidtable.dir={ASC:"asc",DESC:"desc"};c.fn.stupidtable.defau [...]
+{"int":function(b,a){return parseInt(b,10)-parseInt(a,10)},"float":function(b,a){return parseFloat(b)-parseFloat(a)},string:function(b,a){return
b.toString().localeCompare(a.toString())},"string-ins":function(b,a){b=b.toString().toLocaleLowerCase();a=a.toString().toLocaleLowerCase();return
b.localeCompare(a)}}})(jQuery);
diff --git a/www/roster/public/assets/underscore-min.js b/www/roster/public/assets/underscore-min.js
index d22f881..f01025b 100644
--- a/www/roster/public/assets/underscore-min.js
+++ b/www/roster/public/assets/underscore-min.js
@@ -1,6 +1,6 @@
-//     Underscore.js 1.5.2
+//     Underscore.js 1.8.3
 //     http://underscorejs.org
-//     (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 //     Underscore may be freely distributed under the MIT license.
-(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,w=Object.keys,_=i.bind,j=function(n){return
n instanceof j?n:this instanceof j?(this._wrapped=n,void 0):new j(n)};"undefined"!=typeof
exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=j),exp
[...]
+(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var
a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return
arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var
u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function
r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a
[...]
 //# sourceMappingURL=underscore-min.map
\ No newline at end of file
diff --git a/www/roster/public/stylesheets/app.css b/www/roster/public/stylesheets/app.css
index 12ac41c..d9a682c 100644
--- a/www/roster/public/stylesheets/app.css
+++ b/www/roster/public/stylesheets/app.css
@@ -3,16 +3,14 @@ h1 .note, h2 .note {font-size: small}
 h1 small {font-weight: normal; font-size: medium}
 h2 {margin-bottom: 0}
 h4 {margin-left: 1em}
-table ul {margin: 0; padding: 0; list-style: none}
-table {border-spacing: 0}
-table.wide {border-spacing: 0 1em}
+div.value ul {margin: 0; padding: 0; list-style: none}
+div.value {border-spacing: 0}
 .counts td:first-child {text-align: right}
 .wide td:first-child {text-align: right; padding: 0}
 .wide td:first-child:after {content: ' —'}
 .wide td:last-child {border-left: solid 1px #000; padding: 0 0.5em}
 table {margin-left: 1em; margin-top: 0.5em}
 td, th {padding-left: 0.5em; padding-right: 0.5em}
-table.wide {color: #000; border-collapse: separate; font-size: 100%}
 .issue:before, .chair:before {content: '\21d0  '}
 .issue, .not-found {color: red; font-weight:bold} 
 .chair {color: green; font-weight:bold} 
@@ -64,6 +62,11 @@ input:disabled[type=submit] {cursor: not-allowed}
 
 .modal textarea {width: 100%; height: 30em}
 
+.row {display: flex; align-items: center; margin: 1em 0}
+.row .name {text-align: right; padding-right: 0; min-width: 20%}
+.row .name:after {content: '\00A0\2014'; margin-right: -2px}
+.row .value {border-left: solid 1px #000; padding: 0 0.5em}
+
 @media screen and (min-width: 768px) {
   .wide-form .modal-dialog {
     width: 80%;
diff --git a/www/roster/views/person.js.rb b/www/roster/views/person.js.rb
index a131e8b..d7f2eda 100644
--- a/www/roster/views/person.js.rb
+++ b/www/roster/views/person.js.rb
@@ -12,144 +12,139 @@ class Person < React
 
     _h2 "#{@committer.id}@apache.org"
 
-    _table.wide do
-      _tbody do
+    # Name
+    _PersonName person: self
 
-        # Name
-        _PersonName person: self
-
-        # Personal URL
-        if @committer.urls
-          _PersonUrls person: self
-        end
-
-        # Committees
-        committees = @committer.committees
-        unless committees.empty?
-          _tr do
-            _td 'Committees'
-            _td do
-              _ul committees do |pmc|
-                _li {_a pmc, href: "committee/#{pmc}"}
-              end
-            end
-          end
-        end
+    # Personal URL
+    if @committer.urls
+      _PersonUrls person: self
+    end
 
-        # Committer
-        commit_list = @committer.committer
-        unless commit_list.all? {|pmc| committees.include? pmc}
-          _tr do
-            _td 'Committer'
-            _td do
-              _ul commit_list do |pmc|
-                next if committees.include? pmc
-                _li {_a pmc, href: "committee/#{pmc}"}
-              end
-            end
-          end
-        end
+    # Committees
+    committees = @committer.committees
+    unless committees.empty?
+      _div.row do
+	_div.name 'Committees'
+	_div.value do
+	  _ul committees do |pmc|
+	    _li {_a pmc, href: "committee/#{pmc}"}
+	  end
+	end
+      end
+    end
 
-        # Groups
-        unless @committer.groups.empty?
-          _tr do
-            _td 'Groups'
-            _td do
-              _ul @committer.groups do |group|
-                next if group == 'apldap'
-
-                if group == 'committers'
-                  _li {_a group, href: "committer/"}
-                elsif group == 'member'
-                  _li {_a group, href: "members"}
-                else
-                  _li {_a group, href: "group/#{group}"}
-                end
-              end
-            end
-          end
-        end
+    # Committer
+    commit_list = @committer.committer
+    unless commit_list.all? {|pmc| committees.include? pmc}
+      _div.row do
+	_div.name 'Committer'
+	_div.value do
+	  _ul commit_list do |pmc|
+	    next if committees.include? pmc
+	    _li {_a pmc, href: "committee/#{pmc}"}
+	  end
+	end
+      end
+    end
 
-        # Email addresses
-        if @committer.mail
-          _PersonEmail person: self
-        end
+    # Groups
+    unless @committer.groups.empty?
+      _div.row do
+	_div.name 'Groups'
+	_div.value do
+	  _ul @committer.groups do |group|
+	    next if group == 'apldap'
+
+	    if group == 'committers'
+	      _li {_a group, href: "committer/"}
+	    elsif group == 'member'
+	      _li {_a group, href: "members"}
+	    else
+	      _li {_a group, href: "group/#{group}"}
+	    end
+	  end
+	end
+      end
+    end
 
-        # Moderates
-        if @committer.moderates and @committer.moderates.keys().length > 0
-          _tr do
-            _td 'Moderates'
-            _td do
-              _ul @committer.moderates.keys() do |list_name|
-                _li do
-                  _a list_name, href: 'https://lists.apache.org/list.html?' +
-                    list_name
-                  _span " as "
-                  _span @committer.moderates[list_name].join(', ')
-                end
-              end
-            end
-          end
-        end
+    # Email addresses
+    if @committer.mail
+      _PersonEmail person: self
+    end
 
-        # subscriptions
-        if @committer.subscriptions
-          _tr do
-            _td 'Subscriptions'
-            _td do
-              _ul @committer.subscriptions do |list_email|
-                _li do
-                  _a list_email[0], 
-                    href: 'https://lists.apache.org/list.html?' + list_email[0]
-                  _span " as "
-                  _span list_email[1]
-                end
-              end
-            end
-          end
-        end
+    # Moderates
+    if @committer.moderates and @committer.moderates.keys().length > 0
+      _div.row do
+	_div.name 'Moderates'
+	_div.value do
+	  _ul @committer.moderates.keys() do |list_name|
+	    _li do
+	      _a list_name, href: 'https://lists.apache.org/list.html?' +
+		list_name
+	      _span " as "
+	      _span @committer.moderates[list_name].join(', ')
+	    end
+	  end
+	end
+      end
+    end
 
-        # PGP keys
-        if @committer.pgp
-          _PersonPgpKeys person: self
-        end
+    # subscriptions
+    if @committer.subscriptions
+      _div.row do
+	_div.name 'Subscriptions'
+	_div.value do
+	  _ul @committer.subscriptions do |list_email|
+	    _li do
+	      _a list_email[0], 
+		href: 'https://lists.apache.org/list.html?' + list_email[0]
+	      _span " as "
+	      _span list_email[1]
+	    end
+	  end
+	end
+      end
+    end
 
-        # SSH keys
-        if @committer.ssh
-          _PersonSshKeys person: self
-        end
+    # PGP keys
+    if @committer.pgp
+      _PersonPgpKeys person: self
+    end
 
-        # GitHub username
-        if @committer.githubUsername
-          _PersonGitHub person: self
-        end
+    # SSH keys
+    if @committer.ssh
+      _PersonSshKeys person: self
+    end
 
-        if @committer.member
-          _PersonMemberStatus person: self
+    # GitHub username
+    if @committer.githubUsername
+      _PersonGitHub person: self
+    end
 
-          # Members.txt
-          if @committer.member.info
-            _PersonMemberText person: self
-          end
+    if @committer.member
+      _PersonMemberStatus person: self
 
-          if @committer.member.nomination
-            _tr do
-              _td 'Nomination'
-              _td {_pre @committer.member.nomination}
-            end
-          end
+      # Members.txt
+      if @committer.member.info
+	_PersonMemberText person: self
+      end
 
-          # Forms on file
-          if @committer.forms
-            _PersonForms person: self
-          end
-        end
+      if @committer.member.nomination
+	_div.row do
+	  _div.name 'Nomination'
+	  _div.value {_pre @committer.member.nomination}
+	end
+      end
 
-        # SpamAssassin score
-        _PersonSascore person: self
+      # Forms on file
+      if @committer.forms
+	_PersonForms person: self
       end
     end
 
+    # SpamAssassin score
+    _PersonSascore person: self
+
     # modal dialog for dry run results
     _div.modal.fade.wide_form tabindex: -1 do
       _div.modal_dialog do
@@ -187,9 +182,9 @@ class Person < React
   # and watch for double clicks on them
   def componentDidMount()
     return unless @auth
-    Array(document.querySelectorAll('tr[data-edit]')).each do |tr|
-      tr.addEventListener('dblclick', self.dblclick)
-      tr.querySelector('td').classList.add 'bg-success'
+    Array(document.querySelectorAll('div.row[data-edit]')).each do |div|
+      div.addEventListener('dblclick', self.dblclick)
+      div.querySelector('div.name').classList.add 'bg-success'
     end
   end
 
diff --git a/www/roster/views/person/email.js.rb b/www/roster/views/person/email.js.rb
index 3537221..ce8f6cf 100644
--- a/www/roster/views/person/email.js.rb
+++ b/www/roster/views/person/email.js.rb
@@ -6,10 +6,10 @@ class PersonEmail < React
   def render
     committer = @@person.state.committer
 
-    _tr do
-      _td 'Email addresses'
+    _div.row do
+      _div.name 'Email addresses'
 
-      _td do
+      _div.value do
         _ul committer.mail do |url|
           _li do
             _a url, href: 'mailto:' + url
diff --git a/www/roster/views/person/forms.js.rb b/www/roster/views/person/forms.js.rb
index d936f16..4824c97 100644
--- a/www/roster/views/person/forms.js.rb
+++ b/www/roster/views/person/forms.js.rb
@@ -7,10 +7,10 @@ class PersonForms < React
     committer = @@person.state.committer
     documents = "https://svn.apache.org/repos/private/documents"
 
-    _tr do
-      _td 'Forms on file'
+    _div.row do
+      _div.name 'Forms on file'
 
-      _td do
+      _div.value do
         _ul do
           for form in committer.forms
             link = committer.forms[form]
diff --git a/www/roster/views/person/fullname.js.rb b/www/roster/views/person/fullname.js.rb
index 354f456..b4a5435 100644
--- a/www/roster/views/person/fullname.js.rb
+++ b/www/roster/views/person/fullname.js.rb
@@ -6,10 +6,10 @@ class PersonName < React
   def render
     committer = @@person.state.committer
 
-    _tr data_edit: ('fullname' if @@person.props.auth.secretary) do
-      _td 'Name'
+    _div.row data_edit: ('fullname' if @@person.props.auth.secretary) do
+      _div.name 'Name'
 
-      _td do
+      _div.value do
         name = committer.name
 
         if @@person.state.edit_fullname
diff --git a/www/roster/views/person/github.js.rb b/www/roster/views/person/github.js.rb
index c4fe051..7125db9 100644
--- a/www/roster/views/person/github.js.rb
+++ b/www/roster/views/person/github.js.rb
@@ -6,10 +6,10 @@ class PersonGitHub < React
   def render
     committer = @@person.state.committer
 
-    _tr data_edit: 'github' do
-      _td 'GitHub username'
+    _div.row data_edit: 'github' do
+      _div.name 'GitHub username'
 
-      _td do
+      _div.value do
 
         if @@person.state.edit_github
 
diff --git a/www/roster/views/person/memstat.js.rb b/www/roster/views/person/memstat.js.rb
index 31cdd81..d9db838 100644
--- a/www/roster/views/person/memstat.js.rb
+++ b/www/roster/views/person/memstat.js.rb
@@ -6,11 +6,11 @@ class PersonMemberStatus < React
   def render
     committer = @@person.state.committer
 
-    _tr data_edit: ('memstat' if @@person.props.auth.secretary) do
-      _td 'Member status'
+    _div.row data_edit: ('memstat' if @@person.props.auth.secretary) do
+      _div.name 'Member status'
 
       if committer.member.info
-        _td do
+        _div.value do
           _span committer.member.status
 
          if @@person.state.edit_memstat
@@ -26,7 +26,7 @@ class PersonMemberStatus < React
          end
         end
       else
-        _td.not_found 'Not in members.txt'
+        _div.value.not_found 'Not in members.txt'
       end
     end
   end
diff --git a/www/roster/views/person/memtext.rb b/www/roster/views/person/memtext.rb
index 7bc7f14..d1d0ca5 100644
--- a/www/roster/views/person/memtext.rb
+++ b/www/roster/views/person/memtext.rb
@@ -6,10 +6,10 @@ class PersonMemberText < React
   def render
     committer = @@person.state.committer
 
-    _tr data_edit: 'memtext' do
-      _td 'Members.txt'
+    _div.row data_edit: 'memtext' do
+      _div.name 'Members.txt'
 
-      _td do
+      _div.value do
         if @@person.state.edit_memtext
 
           _form.inline method: 'post' do
diff --git a/www/roster/views/person/pgpkeys.js.rb b/www/roster/views/person/pgpkeys.js.rb
index 815c59c..a700637 100644
--- a/www/roster/views/person/pgpkeys.js.rb
+++ b/www/roster/views/person/pgpkeys.js.rb
@@ -6,10 +6,10 @@ class PersonPgpKeys < React
   def render
     committer = @@person.state.committer
 
-    _tr do
-      _td 'PGP keys'
+    _div.row do
+      _div.name 'PGP keys'
 
-      _td do
+      _div.value do
         _ul committer.pgp do |key|
           _li do
             if key =~ /^[0-9a-fA-F ]+$/
@@ -26,4 +26,3 @@ class PersonPgpKeys < React
     end
   end
 end
-
diff --git a/www/roster/views/person/sascore.js.rb b/www/roster/views/person/sascore.js.rb
index 80d9039..65d2419 100644
--- a/www/roster/views/person/sascore.js.rb
+++ b/www/roster/views/person/sascore.js.rb
@@ -6,10 +6,10 @@ class PersonSascore < React
   def render
     committer = @@person.state.committer
 
-    _tr data_edit: 'sascore' do
-      _td 'SpamAssassin score'
+    _div.row data_edit: 'sascore' do
+      _div.name 'SpamAssassin score'
 
-      _td do
+      _div.value do
 
         if @@person.state.edit_sascore
 
diff --git a/www/roster/views/person/sshkeys.js.rb b/www/roster/views/person/sshkeys.js.rb
index 4124df3..78014cd 100644
--- a/www/roster/views/person/sshkeys.js.rb
+++ b/www/roster/views/person/sshkeys.js.rb
@@ -6,11 +6,11 @@ class PersonSshKeys < React
   def render
     committer = @@person.state.committer
 
-    _tr do
-      _td 'SSH keys'
+    _div.row do
+      _div.name 'SSH keys'
 
 
-      _td do
+      _div.value do
         _ul committer.ssh do |key|
           _li.ssh do
             _pre.wide key
diff --git a/www/roster/views/person/urls.js.rb b/www/roster/views/person/urls.js.rb
index a73bc1b..a449bf1 100644
--- a/www/roster/views/person/urls.js.rb
+++ b/www/roster/views/person/urls.js.rb
@@ -6,10 +6,10 @@ class PersonUrls < React
   def render
     committer = @@person.state.committer
 
-    _tr do
-      _td 'Personal URL'
+    _div.row do
+      _div.name 'Personal URL'
 
-      _td do
+      _div.value do
         _ul committer.urls do |url|
           _li {_a url, href: url}
         end

-- 
To stop receiving notification emails like this one, please contact
['"commits@whimsical.apache.org" <commits@whimsical.apache.org>'].

Mime
View raw message