diff --git a/THANKS b/THANKS index b4039e3ef..82e322535 100644 --- a/THANKS +++ b/THANKS @@ -12,14 +12,14 @@ OpenSlides uses parts of the following projects: * jQuery UI +* Twitter Bootstrap + + * ReportLab * Drupal (tabledrag function) -* Oxygen-Icons - - * Ubuntu TrueType Font diff --git a/openslides/agenda/static/images/icons/summary.png b/openslides/agenda/static/images/icons/summary.png deleted file mode 100644 index 0f8264c78..000000000 Binary files a/openslides/agenda/static/images/icons/summary.png and /dev/null differ diff --git a/openslides/agenda/static/styles/agenda.css b/openslides/agenda/static/styles/agenda.css index 3851b9db8..27cb3d47c 100644 --- a/openslides/agenda/static/styles/agenda.css +++ b/openslides/agenda/static/styles/agenda.css @@ -5,20 +5,6 @@ * :license: GNU GPL, see LICENSE for more details. */ -/* agenda item open/closed */ -.close_link span { - background-image: url(../images/icons/close-grey.png); - background-repeat: no-repeat; - background-position: center; - width: 16px; - height: 16px; - display: inline-block; -} - -.close_link.closed span { - background-image: url(../images/icons/close.png); -} - tr.topline td { border-bottom: 1px solid #333333; background-color: #CDCDCD; diff --git a/openslides/agenda/templates/agenda/item_row.html b/openslides/agenda/templates/agenda/item_row.html index ee09dfc8b..3e8d71df8 100644 --- a/openslides/agenda/templates/agenda/item_row.html +++ b/openslides/agenda/templates/agenda/item_row.html @@ -1,5 +1,4 @@ {% load i18n %} -{% load staticfiles %} {% load tags %} @@ -9,7 +8,9 @@ {% else %} - + + + {% endif %} @@ -43,7 +44,7 @@ {% if not item.is_leaf_node %} - + {% endif %} @@ -51,7 +52,6 @@ {% endif %} - {% if perms.agenda.can_manage_agenda %} {% with form=item.weight_form %} {{ form.weight }} @@ -59,4 +59,5 @@ {{ form.parent }} {% endwith %} - {% endif %} + + diff --git a/openslides/agenda/templates/agenda/overview.html b/openslides/agenda/templates/agenda/overview.html index 7346cc862..539521b04 100644 --- a/openslides/agenda/templates/agenda/overview.html +++ b/openslides/agenda/templates/agenda/overview.html @@ -17,7 +17,6 @@ {% if perms.agenda.can_manage_agenda %} - @@ -24,7 +18,7 @@
{% if perms.participant.can_manage_participant %} {% trans "New" %} - {% trans "User groups" %} + {% trans "Groups" %} {% trans 'Import' %} {% endif %} {% if perms.participant.can_see_participant and perms.participant.can_manage_participant %} @@ -111,13 +105,13 @@ {% if perms.participant.can_manage_participant %} {% trans "Comment" %} {% trans "Last Login" %} - {% trans "Actions" %} + {% trans "Actions" %} {% endif %} {% for user in users %} - {{ user.first_name }} - {{ user.last_name }} + {{ user.first_name }} + {{ user.last_name }} {{ user.structure_level }} {{ user.get_type_display }} {{ user.committee }} diff --git a/openslides/participant/templates/participant/user_detail.html b/openslides/participant/templates/participant/user_detail.html index 90aea2843..e31502b29 100644 --- a/openslides/participant/templates/participant/user_detail.html +++ b/openslides/participant/templates/participant/user_detail.html @@ -7,11 +7,15 @@ {% block content %} -

{{ shown_user }}

+

{{ shown_user }} + + {% trans "Back to overview" %} + +

{{ shown_user.email }}

-

{% trans "Groups" %}

+

{% trans "Groups" %}

{% if shown_user.groups.all %} {{ shown_user.groups.all|join:", " }} @@ -21,32 +25,32 @@

{% if shown_user.get_gender_display %} -

{% trans "Gender" %}

+

{% trans "Gender" %}

{{ shown_user.get_gender_display }}

{% endif %} {% if shown_user.get_type_display %} -

{% trans "Type" %}

+

{% trans "Type" %}

{{ shown_user.get_type_display }}

{% endif %} {% if shown_user.committee %} -

{% trans "Committee" %}

+

{% trans "Committee" %}

{{ shown_user.committee }}

{% endif %} {% if shown_user.about_me %} -

{% trans "About me" %}

+

{% trans "About me" %}

{{ shown_user.about_me }}

{% endif %} {% if perms.participant.can_manage_participant %} {% if shown_user.comment %} -

{% trans "Comment" %}

+

{% trans "Comment" %}

{{ shown_user.comment }}

{% endif %} -

{% trans "Last Login" %}

+

{% trans "Last Login" %}

{% if shown_user.last_login > shown_user.date_joined %}

{{ shown_user.last_login }}

{% else %} diff --git a/openslides/projector/static/images/icons/clock.png b/openslides/projector/static/images/icons/clock.png deleted file mode 100644 index a7800ef21..000000000 Binary files a/openslides/projector/static/images/icons/clock.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/document-save.png b/openslides/projector/static/images/icons/document-save.png deleted file mode 100644 index 8072aea32..000000000 Binary files a/openslides/projector/static/images/icons/document-save.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/go-down.png b/openslides/projector/static/images/icons/go-down.png deleted file mode 100644 index 6a2bb793c..000000000 Binary files a/openslides/projector/static/images/icons/go-down.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/go-up.png b/openslides/projector/static/images/icons/go-up.png deleted file mode 100644 index dca17c452..000000000 Binary files a/openslides/projector/static/images/icons/go-up.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/pause.png b/openslides/projector/static/images/icons/pause.png deleted file mode 100644 index a9b3113fb..000000000 Binary files a/openslides/projector/static/images/icons/pause.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/play.png b/openslides/projector/static/images/icons/play.png deleted file mode 100644 index 80ff3a1d5..000000000 Binary files a/openslides/projector/static/images/icons/play.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/skip-backward.png b/openslides/projector/static/images/icons/skip-backward.png deleted file mode 100644 index 1de5dbacf..000000000 Binary files a/openslides/projector/static/images/icons/skip-backward.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/spin-down.png b/openslides/projector/static/images/icons/spin-down.png deleted file mode 100644 index e54993882..000000000 Binary files a/openslides/projector/static/images/icons/spin-down.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/spin-up.png b/openslides/projector/static/images/icons/spin-up.png deleted file mode 100644 index 7830c52a7..000000000 Binary files a/openslides/projector/static/images/icons/spin-up.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/view-reset.png b/openslides/projector/static/images/icons/view-reset.png deleted file mode 100644 index 7726c3546..000000000 Binary files a/openslides/projector/static/images/icons/view-reset.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/zoom-in.png b/openslides/projector/static/images/icons/zoom-in.png deleted file mode 100644 index e96beb2f7..000000000 Binary files a/openslides/projector/static/images/icons/zoom-in.png and /dev/null differ diff --git a/openslides/projector/static/images/icons/zoom-out.png b/openslides/projector/static/images/icons/zoom-out.png deleted file mode 100644 index 75a1837c4..000000000 Binary files a/openslides/projector/static/images/icons/zoom-out.png and /dev/null differ diff --git a/openslides/projector/static/img/glyphicons_054_clock.png b/openslides/projector/static/img/glyphicons_054_clock.png new file mode 100644 index 000000000..46a86c1a9 Binary files /dev/null and b/openslides/projector/static/img/glyphicons_054_clock.png differ diff --git a/openslides/projector/static/images/logo-projector.png b/openslides/projector/static/img/logo-projector.png similarity index 100% rename from openslides/projector/static/images/logo-projector.png rename to openslides/projector/static/img/logo-projector.png diff --git a/openslides/projector/static/images/presentation-header-bg.png b/openslides/projector/static/img/presentation-header-bg.png similarity index 100% rename from openslides/projector/static/images/presentation-header-bg.png rename to openslides/projector/static/img/presentation-header-bg.png diff --git a/openslides/projector/static/javascript/dashboard.js b/openslides/projector/static/javascript/dashboard.js index 02eb44d4e..454accbff 100644 --- a/openslides/projector/static/javascript/dashboard.js +++ b/openslides/projector/static/javascript/dashboard.js @@ -15,11 +15,12 @@ function saveOrder() { $.cookie(cookieName, order, { path: "/", expiry: new Date(2012, 1, 1)}); }); } + // function that restores the widget list order from a cookie function restoreOrder() { $(".column").each(function(index, value) { var colid = value.id; - var cookieName = "cookie-" + colid + var cookieName = "cookie-" + colid; var cookie = $.cookie(cookieName); if ( cookie == null ) { return; } var IDs = cookie.split(","); @@ -38,38 +39,7 @@ $(function() { stop: function() { saveOrder(); } }); - restoreOrder(); - - if ($.browser.msie) { - if ($.browser.version >= 8.0 && $.browser.version < 9.0) - { - /* scaling bug in IE8.. iframe has to be 4 times bigger */ - $( "#iframe" ).css('width', 1024 * 4); - $( "#iframe" ).css('height', 768 * 4); - } - $( "#iframe" ).css('zoom', '0.25'); - } - - $('a.overlay').click(function(event) { - event.preventDefault(); - var link = $(this); - $.ajax({ - type: 'GET', - url: $(this).attr('href'), - dataType: 'json', - success: function(data) { - if (data['active']) { - $('#' + data['def_name'] + '_active').show(); - $('#' + data['def_name'] + '_inactive').hide(); - } else { - $('#' + data['def_name'] + '_active').hide(); - $('#' + data['def_name'] + '_inactive').show(); - } - }, - }); - }); - - // control the projector + // control the projector view $('.projector_edit').click(function(event) { event.preventDefault(); var link = $(this); @@ -87,7 +57,6 @@ $(function() { event.preventDefault(); var link = $(this); var requestData = {}; - if (link.attr('id') == "countdown_set") { requestData = { "countdown_time" : $( "#countdown_time" ).val() }; } @@ -109,7 +78,8 @@ $(function() { }); }); - $('.countdown_visible_link').click(function(event) { + // activate/deactivate overlay + $('.overlay_activate_link').click(function(event) { event.preventDefault(); var link = $(this); $.ajax({ @@ -117,13 +87,13 @@ $(function() { url: link.attr('href'), dataType: 'json', success: function(data) { - if (data.countdown_visible == "True") { - newclass = 'open'; + if (data['active']) { + $('#' + data['def_name'] + '_active').show(); + $('#' + data['def_name'] + '_inactive').hide(); } else { - newclass = 'closed'; + $('#' + data['def_name'] + '_active').hide(); + $('#' + data['def_name'] + '_inactive').show(); } - link.removeClass('closed open').addClass(newclass); - link.attr('href', data.link); } }); }); @@ -134,4 +104,21 @@ $(function() { $('#overlay_message_text').val(data['overlay_message']); } }); + +/* comment out this function because '$.browser' has been removed from jquery 1.9, see: + http://blog.jquery.com/2013/01/15/jquery-1-9-final-jquery-2-0-beta-migrate-final-released/ + TODO: use jquery migrate to have $.browser support for IE8; + + if ($.browser.msie) { + if ($.browser.version >= 8.0 && $.browser.version < 9.0) + { + // scaling bug in IE8.. iframe has to be 4 times bigger + $( "#iframe" ).css('width', 1024 * 4); + $( "#iframe" ).css('height', 768 * 4); + } + $( "#iframe" ).css('zoom', '0.25'); + } +*/ + + restoreOrder(); }); diff --git a/openslides/projector/static/javascript/jquery.form.js b/openslides/projector/static/javascript/jquery.form.js index 796db12fb..64a916062 100644 --- a/openslides/projector/static/javascript/jquery.form.js +++ b/openslides/projector/static/javascript/jquery.form.js @@ -1,7 +1,7 @@ /*! * jQuery Form Plugin - * version: 3.09 (16-APR-2012) - * @requires jQuery v1.3.2 or later + * version: 3.26.0-2013.01.28 + * @requires jQuery v1.5 or later * * Examples and documentation at: http://malsup.com/jquery/form/ * Project repository: https://github.com/malsup/form @@ -37,7 +37,7 @@ target: '#output' }); }); - + You can also use ajaxForm with delegation (requires jQuery v1.7+), so the form does not have to exist when you invoke ajaxForm: @@ -45,7 +45,7 @@ delegation: true, target: '#output' }); - + When using ajaxForm, the ajaxSubmit function will be invoked for you at the appropriate time. */ @@ -69,7 +69,7 @@ $.fn.ajaxSubmit = function(options) { log('ajaxSubmit: skipping submit process - no element selected'); return this; } - + var method, action, url, $form = this; if (typeof options == 'function') { @@ -111,7 +111,7 @@ $.fn.ajaxSubmit = function(options) { if ( traditional === undefined ) { traditional = $.ajaxSettings.traditional; } - + var elements = []; var qx, a = this.formToArray(options.semantic, elements); if (options.data) { @@ -135,7 +135,7 @@ $.fn.ajaxSubmit = function(options) { var q = $.param(a, traditional); if (qx) { q = ( q ? (q + '&' + qx) : qx ); - } + } if (options.type.toUpperCase() == 'GET') { options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; options.data = null; // data is null for 'get' @@ -165,14 +165,18 @@ $.fn.ajaxSubmit = function(options) { } options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg - var context = options.context || options; // jQuery 1.4+ supports scope context + var context = options.context || this ; // jQuery 1.4+ supports scope context for (var i=0, max=callbacks.length; i < max; i++) { callbacks[i].apply(context, [data, status, xhr || $form, $form]); } }; // are there files to upload? - var fileInputs = $('input:file:enabled[value]', this); // [value] (issue #113) + + // [value] (issue #113), also see comment: + // https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219 + var fileInputs = $('input[type=file]:enabled[value!=""]', this); + var hasFileInputs = fileInputs.length > 0; var mp = 'multipart/form-data'; var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp); @@ -181,6 +185,8 @@ $.fn.ajaxSubmit = function(options) { log("fileAPI :" + fileAPI); var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI; + var jqxhr; + // options.iframe allows user to force iframe mode // 06-NOV-09: now defaulting to iframe mode if file input is detected if (options.iframe !== false && (options.iframe || shouldUseFrame)) { @@ -188,20 +194,22 @@ $.fn.ajaxSubmit = function(options) { // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d if (options.closeKeepAlive) { $.get(options.closeKeepAlive, function() { - fileUploadIframe(a); + jqxhr = fileUploadIframe(a); }); } - else { - fileUploadIframe(a); - } + else { + jqxhr = fileUploadIframe(a); + } } else if ((hasFileInputs || multipart) && fileAPI) { - fileUploadXhr(a); + jqxhr = fileUploadXhr(a); } else { - $.ajax(options); + jqxhr = $.ajax(options); } + $form.removeData('jqxhr').data('jqxhr', jqxhr); + // clear element array for (var k=0; k < elements.length; k++) elements[k] = null; @@ -210,6 +218,22 @@ $.fn.ajaxSubmit = function(options) { this.trigger('form-submit-notify', [this, options]); return this; + // utility fn for deep serialization + function deepSerialize(extraData){ + var serialized = $.param(extraData).split('&'); + var len = serialized.length; + var result = []; + var i, part; + for (i=0; i < len; i++) { + // #252; undo param space replacement + serialized[i] = serialized[i].replace(/\+/g,' '); + part = serialized[i].split('='); + // #278; use array instead of object storage, favoring array serializations + result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]); + } + return result; + } + // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz) function fileUploadXhr(a) { var formdata = new FormData(); @@ -219,9 +243,10 @@ $.fn.ajaxSubmit = function(options) { } if (options.extraData) { - for (var p in options.extraData) - if (options.extraData.hasOwnProperty(p)) - formdata.append(p, options.extraData[p]); + var serializedData = deepSerialize(options.extraData); + for (i=0; i < serializedData.length; i++) + if (serializedData[i]) + formdata.append(serializedData[i][0], serializedData[i][1]); } options.data = null; @@ -230,9 +255,9 @@ $.fn.ajaxSubmit = function(options) { contentType: false, processData: false, cache: false, - type: 'POST' + type: method || 'POST' }); - + if (options.uploadProgress) { // workaround because jqXHR does not expose upload property s.xhr = function() { @@ -253,27 +278,21 @@ $.fn.ajaxSubmit = function(options) { } s.data = null; - var beforeSend = s.beforeSend; - s.beforeSend = function(xhr, o) { - o.data = formdata; - if(beforeSend) - beforeSend.call(o, xhr, options); + var beforeSend = s.beforeSend; + s.beforeSend = function(xhr, o) { + o.data = formdata; + if(beforeSend) + beforeSend.call(this, xhr, o); }; - $.ajax(s); + return $.ajax(s); } // private function for handling file uploads (hat tip to YAHOO!) function fileUploadIframe(a) { var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle; var useProp = !!$.fn.prop; + var deferred = $.Deferred(); - if ($(':input[name=submit],:input[id=submit]', form).length) { - // if there is an input with a name or id of 'submit' then we won't be - // able to invoke the submit fn on the form (at least not x-browser) - alert('Error: Form elements must not have name or id of "submit".'); - return; - } - if (a) { // ensure that every serialized input is still enabled for (i=0; i < elements.length; i++) { @@ -316,6 +335,14 @@ $.fn.ajaxSubmit = function(options) { var e = (status === 'timeout' ? 'timeout' : 'aborted'); log('aborting upload... ' + e); this.aborted = 1; + + try { // #214, #257 + if (io.contentWindow.document.execCommand) { + io.contentWindow.document.execCommand('Stop'); + } + } + catch(ignore) {} + $io.attr('src', s.iframeSrc); // abort op in progress xhr.error = e; if (s.error) @@ -340,10 +367,12 @@ $.fn.ajaxSubmit = function(options) { if (s.global) { $.active--; } - return; + deferred.reject(); + return deferred; } if (xhr.aborted) { - return; + deferred.reject(); + return deferred; } // add submitting element to data if we know it @@ -359,7 +388,7 @@ $.fn.ajaxSubmit = function(options) { } } } - + var CLIENT_TIMEOUT_ABORT = 1; var SERVER_ABORT = 2; @@ -367,7 +396,7 @@ $.fn.ajaxSubmit = function(options) { var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document; return doc; } - + // Rails CSRF hack (thanks to Yvan Barthelemy) var csrf_token = $('meta[name=csrf-token]').attr('content'); var csrf_param = $('meta[name=csrf-param]').attr('content'); @@ -402,7 +431,7 @@ $.fn.ajaxSubmit = function(options) { if (s.timeout) { timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout); } - + // look for server aborts function checkState() { try { @@ -426,9 +455,16 @@ $.fn.ajaxSubmit = function(options) { if (s.extraData) { for (var n in s.extraData) { if (s.extraData.hasOwnProperty(n)) { - extraInputs.push( - $('').attr('value',s.extraData[n]) - .appendTo(form)[0]); + // if using the $.param format that allows for multiple values with the same name + if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) { + extraInputs.push( + $('').val(s.extraData[n].value) + .appendTo(form)[0]); + } else { + extraInputs.push( + $('').val(s.extraData[n]) + .appendTo(form)[0]); + } } } } @@ -442,7 +478,9 @@ $.fn.ajaxSubmit = function(options) { io.addEventListener('load', cb, false); } setTimeout(checkState,15); - form.submit(); + // just in case form has element with name/id of 'submit' + var submitFn = document.createElement('form').submit; + submitFn.apply(form); } finally { // reset attrs and remove "extra" input elements @@ -478,10 +516,12 @@ $.fn.ajaxSubmit = function(options) { } if (e === CLIENT_TIMEOUT_ABORT && xhr) { xhr.abort('timeout'); + deferred.reject(xhr, 'timeout'); return; } else if (e == SERVER_ABORT && xhr) { xhr.abort('server abort'); + deferred.reject(xhr, 'error', 'server abort'); return; } @@ -492,7 +532,7 @@ $.fn.ajaxSubmit = function(options) { } if (io.detachEvent) io.detachEvent('onload', cb); - else + else io.removeEventListener('load', cb, false); var status = 'success', errMsg; @@ -586,6 +626,7 @@ $.fn.ajaxSubmit = function(options) { if (status === 'success') { if (s.success) s.success.call(s.context, data, 'success', xhr); + deferred.resolve(xhr.responseText, 'success', xhr); if (g) $.event.trigger("ajaxSuccess", [xhr, s]); } @@ -594,6 +635,7 @@ $.fn.ajaxSubmit = function(options) { errMsg = xhr.statusText; if (s.error) s.error.call(s.context, xhr, status, errMsg); + deferred.reject(xhr, 'error', errMsg); if (g) $.event.trigger("ajaxError", [xhr, s, errMsg]); } @@ -658,6 +700,8 @@ $.fn.ajaxSubmit = function(options) { } return data; }; + + return deferred; } }; @@ -679,7 +723,7 @@ $.fn.ajaxSubmit = function(options) { $.fn.ajaxForm = function(options) { options = options || {}; options.delegation = options.delegation && $.isFunction($.fn.on); - + // in jQuery 1.3+ we can fix mistakes with the ready state if (!options.delegation && this.length === 0) { var o = { s: this.selector, c: this.context }; @@ -709,7 +753,7 @@ $.fn.ajaxForm = function(options) { .bind('click.form-plugin', options, captureSubmittingElement); }; -// private event handlers +// private event handlers function doAjaxSubmit(e) { /*jshint validthis:true */ var options = e.data; @@ -718,14 +762,14 @@ function doAjaxSubmit(e) { $(this).ajaxSubmit(options); } } - + function captureSubmittingElement(e) { /*jshint validthis:true */ var target = e.target; var $el = $(target); - if (!($el.is(":submit,input:image"))) { + if (!($el.is("[type=submit],[type=image]"))) { // is this a child element of the submit el? (ex: a span within a button) - var t = $el.closest(':submit'); + var t = $el.closest('[type=submit]'); if (t.length === 0) { return; } @@ -798,14 +842,14 @@ $.fn.formToArray = function(semantic, elements) { v = $.fieldValue(el, true); if (v && v.constructor == Array) { - if (elements) + if (elements) elements.push(el); for(j=0, jmax=v.length; j < jmax; j++) { a.push({name: n, value: v[j]}); } } else if (feature.fileapi && el.type == 'file' && !el.disabled) { - if (elements) + if (elements) elements.push(el); var files = el.files; if (files.length) { @@ -819,7 +863,7 @@ $.fn.formToArray = function(semantic, elements) { } } else if (v !== null && typeof v != 'undefined') { - if (elements) + if (elements) elements.push(el); a.push({name: n, value: v, type: el.type, required: el.required}); } @@ -883,19 +927,19 @@ $.fn.fieldSerialize = function(successful) { * * * - * var v = $(':text').fieldValue(); + * var v = $('input[type=text]').fieldValue(); * // if no values are entered into the text inputs * v == ['',''] * // if values entered into the text inputs are 'foo' and 'bar' * v == ['foo','bar'] * - * var v = $(':checkbox').fieldValue(); + * var v = $('input[type=checkbox]').fieldValue(); * // if neither checkbox is checked * v === undefined * // if both checkboxes are checked * v == ['B1', 'B2'] * - * var v = $(':radio').fieldValue(); + * var v = $('input[type=radio]').fieldValue(); * // if neither radio is checked * v === undefined * // if first radio is checked @@ -996,8 +1040,15 @@ $.fn.clearFields = $.fn.clearInputs = function(includeHidden) { else if (tag == 'select') { this.selectedIndex = -1; } + else if (t == "file") { + if (/MSIE/.test(navigator.userAgent)) { + $(this).replaceWith($(this).clone()); + } else { + $(this).val(''); + } + } else if (includeHidden) { - // includeHidden can be the valud true, or it can be a selector string + // includeHidden can be the value true, or it can be a selector string // indicating a special test; for example: // $('#myForm').clearForm('.special:hidden') // the above would clean hidden inputs that have the class of 'special' @@ -1062,7 +1113,7 @@ $.fn.ajaxSubmit.debug = false; // helper fn for console logging function log() { - if (!$.fn.ajaxSubmit.debug) + if (!$.fn.ajaxSubmit.debug) return; var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,''); if (window.console && window.console.log) { diff --git a/openslides/projector/static/styles/dashboard.css b/openslides/projector/static/styles/dashboard.css index 0266e64c2..fd5134bdb 100644 --- a/openslides/projector/static/styles/dashboard.css +++ b/openslides/projector/static/styles/dashboard.css @@ -54,9 +54,12 @@ -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; } -.widget-content li{ +.widget-content li { padding: 4px 0; } +.widget-content .overlay_list li { + padding-bottom: 10px; +} .widget-content ul { list-style: none inside none; margin: 0; @@ -74,15 +77,13 @@ visibility: hidden; } -/*.projector_countdown_spinval {*/ +.overlay_list .form-inline { + margin: 5px 0 0 31px; +} #countdown_time { width: 40px; } -#overlay_message_text { - width: 90%; - height: 12px; -} /* iframe */ #iframe { @@ -95,7 +96,6 @@ width: 1024px; height: 768px; } - #iframewrapper { width: 256px;/*100%;*/ height: 192px;/*230px;*/ @@ -103,7 +103,6 @@ overflow: hidden; border: 1px solid #D5D5D5; } - #iframeoverlay { width: 256px; height: 192px; @@ -113,35 +112,3 @@ display: block; z-index: 1; } - -/* activate link */ -a.activate_link div { - background-image: url(../images/icons/accept-grey.png); - background-repeat: no-repeat; - float: left; - width: 16px; - height: 16px; - padding-right: 12px; - position: relative; - top: 4px; - left: 4px; -} -a.activate_link.active div { - background-image: url(../images/icons/accept.png); -} - -a.overlay div { - background-image: url(../images/icons/accept-grey.png); - background-repeat: no-repeat; - float: left; - width: 16px; - height: 16px; - padding-right: 16px; - position: relative; - top: 4px; - left: 4px; -} - -a.overlay.active div { - background-image: url(../images/icons/accept.png); -} diff --git a/openslides/projector/static/styles/projector.css b/openslides/projector/static/styles/projector.css index 423c8039d..2f22b4550 100644 --- a/openslides/projector/static/styles/projector.css +++ b/openslides/projector/static/styles/projector.css @@ -18,7 +18,7 @@ body{ /*** HEADER ***/ #header { position:relative; - background:url("../images/presentation-header-bg.png") repeat-x scroll center top #3D3020; + background:url("../img/presentation-header-bg.png") repeat-x scroll center top #3D3020; height:100px; } #logo { @@ -58,7 +58,7 @@ body{ top:110px; right:40px; padding-left:30px; - background: url(../images/icons/clock.png) no-repeat scroll 0px 4px; + background: url(../img/glyphicons_054_clock.png) no-repeat scroll 0px 4px; } #currentTime.ajax_error { diff --git a/openslides/projector/templates/base-projector.html b/openslides/projector/templates/base-projector.html index e86cd52d6..af2845b92 100644 --- a/openslides/projector/templates/base-projector.html +++ b/openslides/projector/templates/base-projector.html @@ -10,7 +10,7 @@ - XX{% block title %} {% get_config 'event_name' %} {% endblock %} + {% block title %} {% get_config 'event_name' %} {% endblock %} {% block header %} {% endblock %} @@ -21,7 +21,7 @@
diff --git a/openslides/projector/templates/projector/control_countdown.html b/openslides/projector/templates/projector/control_countdown.html index a2c93248a..837666093 100644 --- a/openslides/projector/templates/projector/control_countdown.html +++ b/openslides/projector/templates/projector/control_countdown.html @@ -1,24 +1,21 @@ -{% load staticfiles %} {% load i18n %} {% load tags %} - -
-
- - {% trans "s" context "seconds" %} -
- - - - - - - - +
+
+ + {% trans "s" context "seconds" %}
- + + + + + + + + +
diff --git a/openslides/projector/templates/projector/control_overlay_message.html b/openslides/projector/templates/projector/control_overlay_message.html index 5c9c205ed..ee10ace99 100644 --- a/openslides/projector/templates/projector/control_overlay_message.html +++ b/openslides/projector/templates/projector/control_overlay_message.html @@ -1,15 +1,14 @@ -{% load staticfiles %} {% load i18n %} {% load tags %} -
{% csrf_token %} -
- - - +{% csrf_token %} +
+ + +
diff --git a/openslides/projector/templates/projector/custom_slide_widget.html b/openslides/projector/templates/projector/custom_slide_widget.html index 64445a72c..f4c805047 100644 --- a/openslides/projector/templates/projector/custom_slide_widget.html +++ b/openslides/projector/templates/projector/custom_slide_widget.html @@ -1,4 +1,3 @@ -{% load staticfiles %} {% load i18n %} {% load tags %} diff --git a/openslides/projector/templates/projector/dashboard.html b/openslides/projector/templates/projector/dashboard.html index 76e50a0c8..11d5f3a7b 100644 --- a/openslides/projector/templates/projector/dashboard.html +++ b/openslides/projector/templates/projector/dashboard.html @@ -9,9 +9,9 @@ {% endblock %} {% block javascript %} - + {% endblock %} {% block content %} diff --git a/openslides/projector/templates/projector/live_view_widget.html b/openslides/projector/templates/projector/live_view_widget.html index fbcb4cb95..cd49a453f 100644 --- a/openslides/projector/templates/projector/live_view_widget.html +++ b/openslides/projector/templates/projector/live_view_widget.html @@ -1,6 +1,5 @@ {% load i18n %} {% load tags %} -{% load staticfiles %} {% if perms.projector.can_manage_projector %} diff --git a/openslides/projector/templates/projector/overlay_widget.html b/openslides/projector/templates/projector/overlay_widget.html index 51d68f8da..b0cb79205 100644 --- a/openslides/projector/templates/projector/overlay_widget.html +++ b/openslides/projector/templates/projector/overlay_widget.html @@ -1,24 +1,29 @@ {% load i18n %} {% load tags %} -
    +
      {% for overlay in overlays %}
    • - - + + + + + - {# TODO: Call the html via overlay.html #} {% if overlay.def_name == "Countdown" %} -

      {{ overlay }}:
      + {% trans "Countdown for speaking time" %}:
      {% include 'projector/control_countdown.html' %} -

      {% endif %} {% if overlay.def_name == "Message" %} - {{ overlay }}:
      + {% trans "Message" %}:
      {% include 'projector/control_overlay_message.html' %} {% endif %}
    • diff --git a/openslides/static/images/icons/accept-grey.png b/openslides/static/images/icons/accept-grey.png deleted file mode 100644 index d6c64cfab..000000000 Binary files a/openslides/static/images/icons/accept-grey.png and /dev/null differ diff --git a/openslides/static/images/icons/accept.png b/openslides/static/images/icons/accept.png deleted file mode 100644 index 225abbf4d..000000000 Binary files a/openslides/static/images/icons/accept.png and /dev/null differ diff --git a/openslides/static/images/icons/add-user.png b/openslides/static/images/icons/add-user.png deleted file mode 100644 index b413be26a..000000000 Binary files a/openslides/static/images/icons/add-user.png and /dev/null differ diff --git a/openslides/static/images/icons/add.png b/openslides/static/images/icons/add.png deleted file mode 100644 index 1e03be9bc..000000000 Binary files a/openslides/static/images/icons/add.png and /dev/null differ diff --git a/openslides/static/images/icons/clear.png b/openslides/static/images/icons/clear.png deleted file mode 100644 index 6c4b83b7a..000000000 Binary files a/openslides/static/images/icons/clear.png and /dev/null differ diff --git a/openslides/static/images/icons/close-grey.png b/openslides/static/images/icons/close-grey.png deleted file mode 100644 index b843656fc..000000000 Binary files a/openslides/static/images/icons/close-grey.png and /dev/null differ diff --git a/openslides/static/images/icons/close.png b/openslides/static/images/icons/close.png deleted file mode 100644 index 1c311e210..000000000 Binary files a/openslides/static/images/icons/close.png and /dev/null differ diff --git a/openslides/static/images/icons/cross.png b/openslides/static/images/icons/cross.png deleted file mode 100644 index 0cdfc1d42..000000000 Binary files a/openslides/static/images/icons/cross.png and /dev/null differ diff --git a/openslides/static/images/icons/delete.png b/openslides/static/images/icons/delete.png deleted file mode 100644 index 87cd0b012..000000000 Binary files a/openslides/static/images/icons/delete.png and /dev/null differ diff --git a/openslides/static/images/icons/dialog-cancel.png b/openslides/static/images/icons/dialog-cancel.png deleted file mode 100644 index 45f8949bf..000000000 Binary files a/openslides/static/images/icons/dialog-cancel.png and /dev/null differ diff --git a/openslides/static/images/icons/dialog-ok-apply.png b/openslides/static/images/icons/dialog-ok-apply.png deleted file mode 100644 index f1d290c64..000000000 Binary files a/openslides/static/images/icons/dialog-ok-apply.png and /dev/null differ diff --git a/openslides/static/images/icons/dialog-ok.png b/openslides/static/images/icons/dialog-ok.png deleted file mode 100644 index c173526fa..000000000 Binary files a/openslides/static/images/icons/dialog-ok.png and /dev/null differ diff --git a/openslides/static/images/icons/done-grey.png b/openslides/static/images/icons/done-grey.png deleted file mode 100644 index 4e5e16f47..000000000 Binary files a/openslides/static/images/icons/done-grey.png and /dev/null differ diff --git a/openslides/static/images/icons/done.png b/openslides/static/images/icons/done.png deleted file mode 100644 index 5ea69d2dd..000000000 Binary files a/openslides/static/images/icons/done.png and /dev/null differ diff --git a/openslides/static/images/icons/edit.png b/openslides/static/images/icons/edit.png deleted file mode 100644 index 84e345d22..000000000 Binary files a/openslides/static/images/icons/edit.png and /dev/null differ diff --git a/openslides/static/images/icons/error.png b/openslides/static/images/icons/error.png deleted file mode 100644 index 0281708ab..000000000 Binary files a/openslides/static/images/icons/error.png and /dev/null differ diff --git a/openslides/static/images/icons/export.png b/openslides/static/images/icons/export.png deleted file mode 100644 index ebcc0fa9a..000000000 Binary files a/openslides/static/images/icons/export.png and /dev/null differ diff --git a/openslides/static/images/icons/guest.png b/openslides/static/images/icons/guest.png deleted file mode 100644 index b50ec42a5..000000000 Binary files a/openslides/static/images/icons/guest.png and /dev/null differ diff --git a/openslides/static/images/icons/import.png b/openslides/static/images/icons/import.png deleted file mode 100644 index 66305f4ad..000000000 Binary files a/openslides/static/images/icons/import.png and /dev/null differ diff --git a/openslides/static/images/icons/information.png b/openslides/static/images/icons/information.png deleted file mode 100644 index cbabb0e54..000000000 Binary files a/openslides/static/images/icons/information.png and /dev/null differ diff --git a/openslides/static/images/icons/number.png b/openslides/static/images/icons/number.png deleted file mode 100644 index 87e23bb31..000000000 Binary files a/openslides/static/images/icons/number.png and /dev/null differ diff --git a/openslides/static/images/icons/off.png b/openslides/static/images/icons/off.png deleted file mode 100644 index fd50901be..000000000 Binary files a/openslides/static/images/icons/off.png and /dev/null differ diff --git a/openslides/static/images/icons/on.png b/openslides/static/images/icons/on.png deleted file mode 100644 index 1221e1310..000000000 Binary files a/openslides/static/images/icons/on.png and /dev/null differ diff --git a/openslides/static/images/icons/pdf.png b/openslides/static/images/icons/pdf.png deleted file mode 100644 index 9498f0ffd..000000000 Binary files a/openslides/static/images/icons/pdf.png and /dev/null differ diff --git a/openslides/static/images/icons/preview.png b/openslides/static/images/icons/preview.png deleted file mode 100644 index 3b674c3bd..000000000 Binary files a/openslides/static/images/icons/preview.png and /dev/null differ diff --git a/openslides/static/images/icons/projector.png b/openslides/static/images/icons/projector.png deleted file mode 100644 index cb2be2258..000000000 Binary files a/openslides/static/images/icons/projector.png and /dev/null differ diff --git a/openslides/static/images/icons/reject-grey.png b/openslides/static/images/icons/reject-grey.png deleted file mode 100644 index b34520453..000000000 Binary files a/openslides/static/images/icons/reject-grey.png and /dev/null differ diff --git a/openslides/static/images/icons/reject.png b/openslides/static/images/icons/reject.png deleted file mode 100644 index 9006b077d..000000000 Binary files a/openslides/static/images/icons/reject.png and /dev/null differ diff --git a/openslides/static/images/icons/remove-user.png b/openslides/static/images/icons/remove-user.png deleted file mode 100644 index 6ac1d6846..000000000 Binary files a/openslides/static/images/icons/remove-user.png and /dev/null differ diff --git a/openslides/static/images/icons/remove.png b/openslides/static/images/icons/remove.png deleted file mode 100644 index 5a4d15b7b..000000000 Binary files a/openslides/static/images/icons/remove.png and /dev/null differ diff --git a/openslides/static/images/icons/revert.png b/openslides/static/images/icons/revert.png deleted file mode 100644 index b224e05e8..000000000 Binary files a/openslides/static/images/icons/revert.png and /dev/null differ diff --git a/openslides/static/images/icons/statistics.png b/openslides/static/images/icons/statistics.png deleted file mode 100644 index 5a05fa48d..000000000 Binary files a/openslides/static/images/icons/statistics.png and /dev/null differ diff --git a/openslides/static/images/icons/undo.png b/openslides/static/images/icons/undo.png deleted file mode 100644 index 83e41dcf3..000000000 Binary files a/openslides/static/images/icons/undo.png and /dev/null differ diff --git a/openslides/static/images/icons/user-information.png b/openslides/static/images/icons/user-information.png deleted file mode 100644 index 346f21e7b..000000000 Binary files a/openslides/static/images/icons/user-information.png and /dev/null differ diff --git a/openslides/static/images/icons/warning.png b/openslides/static/images/icons/warning.png deleted file mode 100644 index 1abe3f3f9..000000000 Binary files a/openslides/static/images/icons/warning.png and /dev/null differ diff --git a/openslides/static/img/glyphicons_006_user_add.png b/openslides/static/img/glyphicons_006_user_add.png new file mode 100644 index 000000000..098d70d3d Binary files /dev/null and b/openslides/static/img/glyphicons_006_user_add.png differ diff --git a/openslides/static/img/glyphicons_041_charts.png b/openslides/static/img/glyphicons_041_charts.png new file mode 100644 index 000000000..556b7cce5 Binary files /dev/null and b/openslides/static/img/glyphicons_041_charts.png differ diff --git a/openslides/static/img/glyphicons_041_charts_white.png b/openslides/static/img/glyphicons_041_charts_white.png new file mode 100644 index 000000000..83cd93b8c Binary files /dev/null and b/openslides/static/img/glyphicons_041_charts_white.png differ diff --git a/openslides/static/img/glyphicons_056_projector.png b/openslides/static/img/glyphicons_056_projector.png deleted file mode 100644 index 4d644db30..000000000 Binary files a/openslides/static/img/glyphicons_056_projector.png and /dev/null differ diff --git a/openslides/static/img/glyphicons_056_projector_small.png b/openslides/static/img/glyphicons_056_projector_small.png deleted file mode 100644 index ba0ec4282..000000000 Binary files a/openslides/static/img/glyphicons_056_projector_small.png and /dev/null differ diff --git a/openslides/static/img/glyphicons_152_check_white.png b/openslides/static/img/glyphicons_152_check_white.png new file mode 100644 index 000000000..0c4f5fd1a Binary files /dev/null and b/openslides/static/img/glyphicons_152_check_white.png differ diff --git a/openslides/static/img/glyphicons_256_delete.png b/openslides/static/img/glyphicons_256_delete.png new file mode 100644 index 000000000..81282f990 Binary files /dev/null and b/openslides/static/img/glyphicons_256_delete.png differ diff --git a/openslides/static/images/icons/voting-abstention.png b/openslides/static/img/voting-abstention.png similarity index 100% rename from openslides/static/images/icons/voting-abstention.png rename to openslides/static/img/voting-abstention.png diff --git a/openslides/static/images/icons/voting-invalid.png b/openslides/static/img/voting-invalid.png similarity index 100% rename from openslides/static/images/icons/voting-invalid.png rename to openslides/static/img/voting-invalid.png diff --git a/openslides/static/images/icons/voting-no.png b/openslides/static/img/voting-no.png similarity index 100% rename from openslides/static/images/icons/voting-no.png rename to openslides/static/img/voting-no.png diff --git a/openslides/static/images/icons/voting-total.png b/openslides/static/img/voting-total.png similarity index 100% rename from openslides/static/images/icons/voting-total.png rename to openslides/static/img/voting-total.png diff --git a/openslides/static/images/icons/voting-yes-grey.png b/openslides/static/img/voting-yes-grey.png similarity index 100% rename from openslides/static/images/icons/voting-yes-grey.png rename to openslides/static/img/voting-yes-grey.png diff --git a/openslides/static/images/icons/voting-yes.png b/openslides/static/img/voting-yes.png similarity index 100% rename from openslides/static/images/icons/voting-yes.png rename to openslides/static/img/voting-yes.png diff --git a/openslides/static/javascript/jquery.min.js b/openslides/static/javascript/jquery.min.js index 50d1b22f2..006e95310 100644 --- a/openslides/static/javascript/jquery.min.js +++ b/openslides/static/javascript/jquery.min.js @@ -1,4 +1,5 @@ -/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("