1
0

pywebio.min.js 37 KB

12
  1. !function a(r,s,l){function c(t,e){if(!s[t]){if(!r[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(u)return u(t,!0);var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}var o=s[t]={exports:{}};r[t][0].call(o.exports,function(e){return c(r[t][1][e]||e)},o,o.exports,a,r,s,l)}return s[t].exports}for(var u="function"==typeof require&&require,e=0;e<l.length;e++)c(l[e]);return c}({1:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=e("./utils"),l=e("./state"),r=e("./models/input"),c=(i(u,[{key:"_after_show_form",value:function(){l.state.AutoScrollBottom&&(this.container_elem.height()>$(window).height()?s.body_scroll_to(this.container_elem,"top",function(){$('[auto_focus="true"]').focus()}):s.body_scroll_to(this.container_elem,"bottom",function(){$('[auto_focus="true"]').focus()}))}},{key:"_activate_form",value:function(e,t){var n=this,i=this.form_ctrls.get_value(e),o=i[i.length-1];if(o===t||void 0===t)return o.element.show(l.state.ShowDuration,function(){n._after_show_form()});this.form_ctrls.move_to_top(e),t.element.hide(100,function(){var e=n.form_ctrls.get_top();e&&e[e.length-1].element.show(l.state.ShowDuration,function(){n._after_show_form()})})}},{key:"handle_message",value:function(e){var t=this,n=this.form_ctrls.get_top(),i=n&&n[n.length-1],o=this.form_ctrls.get_value(e.task_id);if(void 0===o&&(this.form_ctrls.push(e.task_id,[]),o=this.form_ctrls.get_value(e.task_id)),e.command in s.make_set(["input","input_group"])){var a=new d(this.session,e.task_id,e.spec);o.push(a),this.container_elem.append(a.create_element()),this._activate_form(e.task_id,i)}else if(e.command in s.make_set(["update_input"])){if(0===o.length)return console.error("No form to current message. task_id:%s",e.task_id);o[o.length-1].dispatch_ctrl_message(e.spec)}else if("destroy_form"===e.command){if(0===o.length)return console.error("No form to current message. task_id:%s",e.task_id);var r=o.pop();0===o.length&&this.form_ctrls.remove(e.task_id),n===o?r.element.hide(100,function(){r.element.remove();var e=t.form_ctrls.get_top();e&&e[e.length-1].element.show(l.state.ShowDuration,function(){t._after_show_form()})}):r.element.remove()}}}]),u);function u(e,t){a(this,u),this.session=e,this.container_elem=t,this.form_ctrls=new s.LRUMap}(n.InputAreaController=c).accept_command=["input","input_group","update_input","destroy_form"];var d=(i(p,[{key:"create_element",value:function(){var t=this,e=Mustache.render('\n <div class="card" style="display: none">\n <h5 class="card-header">{{label}}</h5>\n <div class="card-body">\n <form>\n <div class="input-container"></div>\n <div class="ws-form-submit-btns">\n <button type="submit" class="btn btn-primary">提交</button>\n <button type="reset" class="btn btn-warning">重置</button>\n {{#cancelable}}<button type="button" class="pywebio_cancel_btn btn btn-danger">取消</button>{{/cancelable}}\n </div>\n </form>\n </div>\n </div>',{label:this.spec.label,cancelable:this.spec.cancelable}),n=$(e);n.find(".pywebio_cancel_btn").on("click",function(e){t.session.send_message({event:"from_cancel",task_id:t.task_id,data:null})}),this.spec.inputs.length&&"actions"===this.spec.inputs[this.spec.inputs.length-1].type&&n.find(".ws-form-submit-btns").hide();var i=n.find(".input-container");for(var o in this.spec.inputs){var a=this.spec.inputs[o];if(!(a.type in p.input_items))throw new Error("Unknown input type '"+a.type+"'");var r=new p.input_items[a.type](this.session,this.task_id,a);this.name2input[a.name]=r,i.append(r.create_element())}return n.on("submit","form",function(e){e.preventDefault();var n={};$.each(t.name2input,function(e,t){n[e]=t.get_value()}),t.session.send_message({event:"from_submit",task_id:t.task_id,data:n})}),this.element=n}},{key:"dispatch_ctrl_message",value:function(e){if(!(e.target_name in this.name2input))return console.error("Can't find input[name=%s] element in curr form!",e.target_name);this.name2input[e.target_name].update_input(e)}}],[{key:"register_inputitem",value:function(e){var t=!0,n=!1,i=void 0;try{for(var o,a=e.accept_input_types[Symbol.iterator]();!(t=(o=a.next()).done);t=!0){var r=o.value;if(r in this.input_items)throw new Error("duplicated accept_input_types:["+r+"] in "+e+" and "+this.input_items[r]);this.input_items[r]=e}}catch(e){n=!0,i=e}finally{try{!t&&a.return&&a.return()}finally{if(n)throw i}}}}]),p);function p(e,t,n){a(this,p),this.element=null,this.name2input={},this.session=e,this.task_id=t,this.spec=n}var f=!0,_=!(d.input_items={}),h=void 0;try{for(var v,m=r.all_input_items[Symbol.iterator]();!(f=(v=m.next()).done);f=!0){var b=v.value;d.register_inputitem(b)}}catch(e){_=!0,h=e}finally{try{!f&&m.return&&m.return()}finally{if(_)throw h}}},{"./models/input":7,"./state":13,"./utils":14}],2:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var s=e("./state"),r=e("./session"),l=e("./utils"),c=e("./input"),u=e("./output"),i=e("./models/output");window.WebIO={startWebIOClient:function(n,i,e){for(var t in e)s.config[t]=e[t];var o,a=(o=new URLSearchParams(window.location.search).get("pywebio_api")||"./io",new URL(o,window.location.href).href);r.is_http_backend(a).then(function(e){var t=void 0;(function(t,e,n){(s.state.CurrentSession=t).on_session_close(function(){$("#favicon32").attr("href","data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAByElEQVRYR82XLUzDUBDH/9emYoouYHAYMGCAYJAYEhxiW2EOSOYwkKBQKBIwuIUPN2g7gSPBIDF8GWbA4DAjG2qitEfesi6lbGxlXd5q393/fr333t07QpdfPp8f0nV9CcACEU0DGAOgN9yrAN6Y+QnATbVavcrlcp/dSFMnI9M0J1RV3WHmFQCJTvaN9RoRXbiuu28YxstfPm0BbNtOMPMeEW0C0LoMHDZzmPmIiHbT6XStlUZLgEKhMK5p2iWAyX8GDruVHMdZzmazr+GFXwCmac4oinINYCSm4L5M2fO8RcMwHoO6PwAaf37bh+BNCMdx5oOZaAKIPQdwF2Pa2yWwBGDOPxNNAMuyDohoK+a0t5Rj5sNMJrMtFusA4qopivLcw2mPyu14njclrmgdoFgsnjLzWlSVXuyJ6CyVSq2TqHDJZPI9QpHpJW7Qt1apVEbJsqwVIjqPSzWKDjOvCoBjItqI4hiXLTOfkG3b9wBm4xKNqPMgAMoAhiM6xmX+IQC+AKhxKUbUcQcCQPoWyD2E0q+h9EIkvRRLb0YD0Y4FhNQHiQCQ/iQTEFIfpX4Nl/os9yGkDiY+hNTRLNhSpQ2n4b7er/H8G7N6BRSbHvW5AAAAAElFTkSuQmCC"),$("#favicon16").attr("href","data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA0ElEQVQ4T62TPQrCQBCF30tA8BZW9mJtY+MNEtKr2HkWK0Xtw+4NbGysxVorbyEKyZMNRiSgmJ/tZufNNzO7M0ThxHHc8zxvSnIIoPNyXyXt0zRdR1F0+gxhblhr25IWJMcA3vcFviRtSc6DILg5XyZ0wQB2AAbFir7YBwAjB8kAxpg1ycmfwZlM0iYMwyldz77vH3+U/Y2rJEn6NMYsSc7KZM+1kla01p4BdKsAAFwc4A6gVRHwaARQr4Xaj1j7G2sPUiOjnEMqL9PnDJRd5ycpJXsd2f2NIAAAAABJRU5ErkJggg==")});var i=new u.OutputController(t,e),o=new c.InputAreaController(t,n),a=l.make_set(u.OutputController.accept_command),r=l.make_set(c.InputAreaController.accept_command);t.on_server_message(function(e){e.command in r?o.handle_message(e):e.command in a?i.handle_message(e):"close_session"===e.command?t.close_session():console.error("Unknown command:%s",e.command)})})(t=e?new r.HttpSession(a):new r.WebSocketSession(a),n,i),t.start_session(s.config.debug)})},DisplayAreaButtonOnClick:i.DisplayAreaButtonOnClick}},{"./input":1,"./models/output":10,"./output":11,"./session":12,"./state":13,"./utils":14}],3:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(n,"__esModule",{value:!0});var a=e("./base"),r=(function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(s,a.InputItem),i(s,[{key:"create_element",value:function(){var e=!0,t=!1,n=void 0;try{for(var i,o=this.spec.buttons[Symbol.iterator]();!(e=(i=o.next()).done);e=!0){var a=i.value;a.btn_type="submit"===a.type?"submit":"button"}}catch(e){t=!0,n=e}finally{try{!e&&o.return&&o.return()}finally{if(t)throw n}}var r=Mustache.render('\n<div class="form-group">\n {{#label}}<label>{{label}}</label> <br> {{/label}} \n {{#buttons}}\n <button type="{{btn_type}}" data-type="{{type}}" value="{{value}}" aria-describedby="{{name}}_help" {{#disabled}}disabled{{/disabled}} class="btn btn-primary">{{label}}</button>\n {{/buttons}}\n <div class="invalid-feedback">{{invalid_feedback}}</div> \x3c!-- input 添加 is-invalid 类 --\x3e\n <div class="valid-feedback">{{valid_feedback}}</div> \x3c!-- input 添加 is-valid 类 --\x3e\n <small id="{{name}}_help" class="form-text text-muted">{{help_text}}</small>\n</div>',this.spec);this.element=$(r);var s=this;return this.element.find("button").on("click",function(e){var t=$(this);"submit"===t.data("type")?s.submit_value=t.val():"reset"===t.data("type")?t.parents("form").trigger("reset"):"cancel"===t.data("type")?s.session.send_message({event:"from_cancel",task_id:s.task_id,data:null}):console.error("`actions` input: unknown button type '%s'",t.data("type"))}),this.element}},{key:"update_input",value:function(t){var e=t.attributes,n=-1;"target_value"in t&&this.element.find("button").each(function(e){if($(this).val()===t.target_value)return n=e,!1}),this.update_input_helper(n,e)}},{key:"get_value",value:function(){return this.submit_value}}]),s);function s(e,t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(s.__proto__||Object.getPrototypeOf(s)).call(this,e,t,n));return i.submit_value=null,i}(n.Actions=r).accept_input_types=["actions"]},{"./base":4}],4:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(n,"__esModule",{value:!0});var a=(i(r,[{key:"create_element",value:function(){throw new Error("Not implement!")}},{key:"update_input",value:function(){throw new Error("Not implement!")}},{key:"get_value",value:function(){throw new Error("Not implement!")}},{key:"send_value_listener",value:function(e,t){e.session.send_message({event:"input_event",task_id:e.task_id,data:{event_name:t.type.toLowerCase(),name:e.spec.name,value:e.get_value()}})}},{key:"update_input_helper",value:function(e,t){var n={invalid_feedback:"div.invalid-feedback",valid_feedback:"div.valid-feedback",help_text:"small.text-muted"};for(var i in n)i in t&&(-1===e?this.element.find(n[i]).text(t[i]):this.element.find(n[i]).eq(e).text(t[i]),delete t[i]);var o,a=this.element.find("input,select,textarea");0<=e&&(a=a.eq(e)),"valid_status"in t&&(o=t.valid_status?"is-valid":"is-invalid",a.removeClass("is-valid is-invalid").addClass(o),delete t.valid_status),a.attr(t)}}]),r);function r(e,t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this.element=null,this.session=e,this.task_id=t,this.spec=n}(n.InputItem=a).accept_input_types=[]},{}],5:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(n,"__esModule",{value:!0});var a=e("./base"),c=e("../../utils"),r=(function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(s,a.InputItem),i(s,[{key:"create_element",value:function(){var e=c.deep_copy(this.spec),t=e.name+"-"+Math.floor(Math.random()*Math.floor(9999));for(var n in e.id_name_prefix=t,e.options)e.options[n].idx=n;var i=Mustache.render('\n<div class="form-group">\n {{#label}}<label>{{label}}</label>{{/label}}\n {{#inline}}<br>{{/inline}}\n {{#options}}\n <div class="form-check {{#inline}}form-check-inline{{/inline}}">\n <input type="{{type}}" id="{{id_name_prefix}}-{{idx}}" name="{{name}}" value="{{value}}" {{#selected}}checked{{/selected}} {{#disabled}}disabled{{/disabled}} class="form-check-input">\n <label class="form-check-label" for="{{id_name_prefix}}-{{idx}}">\n {{label}}\n </label>\n <div class="invalid-feedback">{{invalid_feedback}}</div> \x3c!-- input 添加 is-invalid 类 --\x3e\n <div class="valid-feedback">{{valid_feedback}}</div> \x3c!-- input 添加 is-valid 类 --\x3e\n </div>\n {{/options}}\n <small id="{{id_name}}_help" class="form-text text-muted">{{help_text}}</small>\n</div>',e),o=$(i);this.element=o;for(var a={value:"",label:"",selected:""},r=0;r<this.spec.options.length;r++){var s=o.find("#"+t+"-"+r);for(var l in this.spec.options[r])l in a||s.attr(l,this.spec.options[r][l])}return this.element}},{key:"update_input",value:function(t){var e=t.attributes,n=-1;"target_value"in t&&this.element.find("input").each(function(e){if($(this).val()===t.target_value)return n=e,!1}),this.update_input_helper(n,e)}},{key:"get_value",value:function(){if("radio"===this.spec.type)return this.element.find("input:checked").val()||"";var e=this.element.find("input").serializeArray(),n=[],i=this;return $.each(e,function(e,t){t.name===i.spec.name&&n.push(t.value)}),n}}]),s);function s(e,t,n){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(s.__proto__||Object.getPrototypeOf(s)).call(this,e,t,n))}(n.CheckboxRadio=r).accept_input_types=["checkbox","radio"]},{"../../utils":14,"./base":4}],6:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(n,"__esModule",{value:!0});var a=e("./base"),s=e("../../utils"),l=e("../../state"),r=(function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(c,a.InputItem),i(c,[{key:"create_element",value:function(){var e=s.deep_copy(this.spec),t=e.name+"-"+Math.floor(Math.random()*Math.floor(9999));e.id_name=t;var n=Mustache.render('\n<div class="form-group">\n {{#label}}<label for="{{id_name}}">{{label}}</label>{{/label}}\n <div class="custom-file">\n <input type="file" name="{{name}}" class="custom-file-input" id="{{id_name}}" aria-describedby="{{id_name}}_help">\n <label class="custom-file-label" for="{{id_name}}">{{placeholder}}</label>\n <div class="invalid-feedback">{{invalid_feedback}}</div> \x3c!-- input 添加 is-invalid 类 --\x3e\n <div class="valid-feedback">{{valid_feedback}}</div> \x3c!-- input 添加 is-valid 类 --\x3e\n <small id="{{id_name}}_help" class="form-text text-muted">{{help_text}}</small>\n </div>\n</div>',e);this.element=$(n);var i=this.element.find('input[type="file"]'),o={label:"",invalid_feedback:"",valid_feedback:"",help_text:"",placeholder:""};for(var a in this.spec)a in o||i.attr(a,this.spec[a]);var r=this;return i.on("change",function(){var e=i[0].files[0],t=new FileReader;t.onload=function(){r.data_url_value={filename:e.name,dataurl:t.result},console.log(r.data_url_value)},t.readAsDataURL(e)}),setTimeout(bsCustomFileInput.init,l.state.ShowDuration+100),this.element}},{key:"update_input",value:function(e){var t=e.attributes;this.update_input_helper(-1,t)}},{key:"get_value",value:function(){return this.data_url_value}}]),c);function c(e,t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,c);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(c.__proto__||Object.getPrototypeOf(c)).call(this,e,t,n));return i.data_url_value=null,i}(n.File=r).accept_input_types=["file"]},{"../../state":13,"../../utils":14,"./base":4}],7:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=e("./input"),o=e("./actions"),a=e("./checkbox_radio"),r=e("./textarea"),s=e("./file");n.all_input_items=[i.Input,o.Actions,a.CheckboxRadio,r.Textarea,s.File]},{"./actions":3,"./checkbox_radio":5,"./file":6,"./input":8,"./textarea":9}],8:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(n,"__esModule",{value:!0});var a=e("./base"),s=e("../../utils"),r=(function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(l,a.InputItem),i(l,[{key:"create_element",value:function(){var t=this,e=s.deep_copy(this.spec),n=e.name+"-"+Math.floor(Math.random()*Math.floor(9999));e.id_name=n,e.datalist&&(e.list=n+"-list");var i=void 0,i="select"===e.type?Mustache.render('\n<div class="form-group">\n {{#label}}<label for="{{id_name}}">{{label}}</label>{{/label}}\n <select id="{{id_name}}" aria-describedby="{{id_name}}_help" class="form-control" {{#multiple}}multiple{{/multiple}}>\n {{#options}}\n <option value="{{value}}" {{#selected}}selected{{/selected}} {{#disabled}}disabled{{/disabled}}>{{label}}</option>\n {{/options}}\n </select>\n <div class="invalid-feedback">{{invalid_feedback}}</div>\n <div class="valid-feedback">{{valid_feedback}}</div>\n <small id="{{id_name}}_help" class="form-text text-muted">{{help_text}}</small>\n</div>',e):Mustache.render('\n<div class="form-group">\n {{#label}}<label for="{{id_name}}">{{label}}</label>{{/label}}\n <input type="{{type}}" id="{{id_name}}" aria-describedby="{{id_name}}_help" {{#list}}list="{{list}}"{{/list}} class="form-control" >\n <datalist id="{{id_name}}-list">\n {{#datalist}} \n <option>{{.}}</option> \n {{/datalist}}\n </datalist>\n <div class="invalid-feedback">{{invalid_feedback}}</div> \x3c!-- input 添加 is-invalid 类 --\x3e\n <div class="valid-feedback">{{valid_feedback}}</div> \x3c!-- input 添加 is-valid 类 --\x3e\n <small id="{{id_name}}_help" class="form-text text-muted">{{help_text}}</small>\n</div>',e);this.element=$(i);var o=this.element.find("#"+n);o.on("blur",function(e){t.send_value_listener(t,e)});var a={type:"",label:"",invalid_feedback:"",valid_feedback:"",help_text:"",options:"",datalist:"",multiple:""};for(var r in this.spec)r in a||o.attr(r,this.spec[r]);return this.element}},{key:"update_input",value:function(e){var t=e.attributes;this.update_input_helper(-1,t)}},{key:"get_value",value:function(){return this.element.find("input,select").val()}}]),l);function l(e,t,n){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(l.__proto__||Object.getPrototypeOf(l)).call(this,e,t,n))}(n.Input=r).accept_input_types=["text","password","number","color","date","range","time","select"]},{"../../utils":14,"./base":4}],9:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(n,"__esModule",{value:!0});var a=e("./base"),c=e("../../utils"),u=e("../../state"),r=(function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(d,a.InputItem),i(d,[{key:"create_element",value:function(){var e=this,t=c.deep_copy(this.spec),n=t.name+"-"+Math.floor(Math.random()*Math.floor(9999));t.id_name=n;var i=Mustache.render('\n<div class="form-group">\n {{#label}}<label for="{{id_name}}">{{label}}</label>{{/label}}\n <textarea id="{{id_name}}" aria-describedby="{{id_name}}_help" rows="{{rows}}" class="form-control" >{{value}}</textarea>\n <div class="invalid-feedback">{{invalid_feedback}}</div> \x3c!-- input 添加 is-invalid 类 --\x3e\n <div class="valid-feedback">{{valid_feedback}}</div> \x3c!-- input 添加 is-valid 类 --\x3e\n <small id="{{id_name}}_help" class="form-text text-muted">{{help_text}}</small>\n</div>',t);this.element=$(i);var o=this.element.find("#"+n),a=c.make_set(["value","type","label","invalid_feedback","valid_feedback","help_text","rows","code"]);for(var r in this.spec)r in a||o.attr(r,this.spec[r]);if(t.code){CodeMirror.modeURL=u.config.codeMirrorModeURL;var s={theme:"base16-light",mode:"python",lineNumbers:!0,indentUnit:4,styleActiveLine:!0,matchBrackets:!0,lineWrapping:!0};for(var l in e.spec.code)s[l]=e.spec.code[l];s.theme&&"base16-light"!==s.theme&&d.load_codemirror_theme(s.theme),setTimeout(function(){e.code_mirror=CodeMirror.fromTextArea(e.element.find("textarea")[0],s),CodeMirror.autoLoadMode(e.code_mirror,s.mode),e.code_mirror.setSize(null,20*e.spec.rows)},100),setTimeout(function(){e.element.parents(".card").height("auto")},u.state.ShowDuration)}return this.element}},{key:"update_input",value:function(e){var t=e.attributes;this.update_input_helper.call(this,-1,t)}},{key:"get_value",value:function(){return this.element.find("textarea").val()}}],[{key:"load_codemirror_theme",value:function(e,t){var n,i,o=1<arguments.length&&void 0!==t?t:u.config.codeMirrorThemeURL,a="codemirror_theme_"+e;document.getElementById(a)||(n=document.getElementsByTagName("head")[0],(i=document.createElement("link")).id=a,i.rel="stylesheet",i.type="text/css",i.href=o.replace("%N",e),i.media="all",n.appendChild(i))}}]),d);function d(e,t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,d);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(d.__proto__||Object.getPrototypeOf(d)).call(this,e,t,n));return i.code_mirror=null,i}(n.Textarea=r).accept_input_types=["textarea"]},{"../../state":13,"../../utils":14,"./base":4}],10:[function(e,t,n){"use strict";var v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(n,"__esModule",{value:!0});var i=e("../state"),o=e("../utils"),a={handle_type:"text",get_element:function(e){var t=e.inline?$("<span></span>"):$("<p></p>");e.content=e.content.replace(/ /g," ");for(var n=(e.content||"").split("\n"),i=0;i<n.length-1;i++)t.append(document.createTextNode(n[i])).append("<br/>");return t.append(document.createTextNode(n[n.length-1])),t}},r=new Mditor.Parser,s={handle_type:"markdown",get_element:function(e){return $(r.parse(e.content))}},l={handle_type:"html",get_element:function(e){var t=$.parseHTML(e.content,null,!0);return 1<t.length?$("<div><div/>").append(t):1===t.length?$(t[0]):$(t)}},c={handle_type:"buttons",get_element:function(e){var t=Mustache.render('<div>{{#buttons}}\n <button value="{{value}}" onclick="WebIO.DisplayAreaButtonOnClick(this, \'{{callback_id}}\')" class="btn btn-primary {{#small}}btn-sm{{/small}}">{{label}}</button> \n {{/buttons}}</div>',e);return $(t)}};n.DisplayAreaButtonOnClick=function(e,t){if(null===i.state.CurrentSession)return console.error("can't invoke DisplayAreaButtonOnClick when WebIOController is not instantiated");if(i.state.CurrentSession.closed())return alert("与服务器连接已断开,请刷新页面重新操作");var n=$(e).val();i.state.CurrentSession.send_message({event:"callback",task_id:t,data:n})};var u={handle_type:"file",get_element:function(t){var e='<div><button type="button" class="btn btn-link">'+t.name+"</button></div>",n=$(e),i=o.b64toBlob(t.content);return n.on("click","button",function(e){saveAs(i,t.name,{},!1)}),n}},d={handle_type:"table",get_element:function(e){var t=[];for(var n in e.data){t.push([]);var i=e.data[n];for(var o in i){var a=e.data[n][o];if("object"===(void 0===a?"undefined":v(a))){var r="";try{var s=m[a.type](a),l=!0,c=!1,u=void 0;try{for(var d,p=s[Symbol.iterator]();!(l=(d=p.next()).done);l=!0){r+=d.value.outerHTML||""}}catch(e){c=!0,u=e}finally{try{!l&&p.return&&p.return()}finally{if(c)throw u}}}catch(e){console.error("Get sub widget html error,",e,a)}a=r}t[n].push(Object.assign({data:a},e.span[n+","+o]||{}))}}var f=t[0],_=t.slice(1),h=Mustache.render('\n<table>\n <tr>\n {{#header}} \n <th{{#col}} colspan="{{col}}"{{/col}}{{#row}} rowspan="{{row}}"{{/row}}>{{& data}}</th> \n {{/header}}\n </tr>\n {{#tdata}} \n <tr>\n {{# . }} \n <td{{#col}} colspan="{{col}}"{{/col}}{{#row}} rowspan="{{row}}"{{/row}}>{{& data}}</td> \n {{/ . }} \n </tr>\n {{/tdata}}\n \n</table>',{header:f,tdata:_});return $(h)}};n.all_widgets=[a,s,l,c,u,d];var m={},p=!0,f=!1,_=void 0;try{for(var h,b=n.all_widgets[Symbol.iterator]();!(p=(h=b.next()).done);p=!0){var y=h.value;m[y.handle_type]=y.get_element}}catch(e){f=!0,_=e}finally{try{!p&&b.return&&b.return()}finally{if(f)throw _}}},{"../state":13,"../utils":14}],11:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(n,"__esModule",{value:!0});var a=e("./state"),r=e("./utils"),s=e("./models/output"),l=(i(c,[{key:"scroll_bottom",value:function(){a.state.OutputFixedHeight&&r.box_scroll_to(this.container_elem,this.container_parent,"bottom",void 0,30),r.body_scroll_to(this.container_parent,"bottom")}},{key:"handle_message",value:function(e){var t=!1;if("output"===e.command){if(!(e.spec.type in c.widgets))return console.error("Unknown output type:%s",e.spec.type);var n=c.widgets[e.spec.type].get_element(e.spec);a.config.outputAnimation&&n.hide(),void 0!==e.spec.anchor&&this.container_elem.find("#"+e.spec.anchor).length?(this.container_elem.find("#"+e.spec.anchor).empty().append(n),n.unwrap().attr("id",e.spec.anchor)):(void 0!==e.spec.anchor&&n.attr("id",e.spec.anchor),void 0!==e.spec.before?this.container_elem.find("#"+e.spec.before).before(n):void 0!==e.spec.after?this.container_elem.find("#"+e.spec.after).after(n):(this.container_elem.append(n),t=!0)),a.config.outputAnimation&&n.fadeIn()}else"output_ctl"===e.command&&this.handle_output_ctl(e);a.state.AutoScrollBottom&&t&&this.scroll_bottom()}},{key:"handle_output_ctl",value:function(e){var t,n,i;e.spec.title&&($("#title").text(e.spec.title),document.title=e.spec.title),void 0!==e.spec.output_fixed_height&&(a.state.OutputFixedHeight=e.spec.output_fixed_height,e.spec.output_fixed_height?$(".container").removeClass("no-fix-height"):$(".container").addClass("no-fix-height")),void 0!==e.spec.auto_scroll_bottom&&(a.state.AutoScrollBottom=e.spec.auto_scroll_bottom),void 0!==e.spec.set_anchor&&(this.container_elem.find("#"+e.spec.set_anchor).removeAttr("id"),this.container_elem.append('<div id="'+e.spec.set_anchor+'"></div>')),void 0!==e.spec.clear_before&&this.container_elem.find("#"+e.spec.clear_before).prevAll().remove(),void 0!==e.spec.clear_after&&this.container_elem.find("#"+e.spec.clear_after+"~*").remove(),void 0!==e.spec.scroll_to&&((t=$("#"+e.spec.scroll_to)).length?a.state.OutputFixedHeight?r.box_scroll_to(t,this.container_parent,e.spec.position):r.body_scroll_to(t,e.spec.position):console.error("Anchor "+e.spec.scroll_to+" not found")),void 0!==e.spec.clear_range&&this.container_elem.find("#"+e.spec.clear_range[0]).length&&this.container_elem.find("#"+e.spec.clear_range[1]).length&&(i=!(n=[]),this.container_elem.find("#"+e.spec.clear_range[0]+"~*").each(function(){if(this.id===e.spec.clear_range[1])return!(i=!0);n.push(this)}),i?$(n).remove():console.warn("clear_range not valid: can't find "+e.spec.clear_range[1]+" after "+e.spec.clear_range[0])),void 0!==e.spec.remove&&this.container_elem.find("#"+e.spec.remove).remove()}}],[{key:"add_widget",value:function(e){this.widgets[e.handle_type]=e}}]),c);function c(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,c),this.md_parser=new Mditor.Parser,this.body=$("html,body"),this.session=e,this.container_elem=t,this.container_parent=this.container_elem.parent()}(n.OutputController=l).accept_command=["output","output_ctl"];var u=!0,d=!(l.widgets={}),p=void 0;try{for(var f,_=s.all_widgets[Symbol.iterator]();!(u=(f=_.next()).done);u=!0){var h=f.value;l.add_widget(h)}}catch(e){d=!0,p=e}finally{try{!u&&_.return&&_.return()}finally{if(d)throw p}}},{"./models/output":10,"./state":13,"./utils":14}],12:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=(i(s,[{key:"on_session_create",value:function(e){this._on_session_create=e}},{key:"on_session_close",value:function(e){this._on_session_close=e}},{key:"on_server_message",value:function(e){this._on_server_message=e}},{key:"start_session",value:function(e){var n=0<arguments.length&&void 0!==e&&e;this.debug=n,this.ws=new WebSocket(this.ws_api),this.ws.onopen=this._on_session_create,this.ws.onclose=this._on_session_close;var i=this;this.ws.onmessage=function(e){var t=JSON.parse(e.data);n&&console.info(">>>",t),i._on_server_message(t)}}},{key:"send_message",value:function(e){if(null===this.ws)return console.error("WebSocketWebIOSession.ws is null when invoke WebSocketWebIOSession.send_message. Please call WebSocketWebIOSession.start_session first");this.ws.send(JSON.stringify(e)),this.debug&&console.info("<<<",e)}},{key:"close_session",value:function(){this._closed=!0,this._on_session_close.call(this.ws,null);try{this.ws.close()}catch(e){}}},{key:"closed",value:function(){return this._closed}}]),s);function s(e){a(this,s),this.ws_api=e,this._on_session_create=function(){},this._on_session_close=function(){},this._on_server_message=function(){},this.ws=null,this.debug=!1,this._closed=!1;var t,n=new URL(e);"wss:"!==n.protocol&&"ws:"!==n.protocol&&(t=n.protocol||window.location.protocol,n.protocol=t.replace("https","wss").replace("http","ws")),this.ws_api=n.href}n.WebSocketSession=r;var l=(i(c,[{key:"on_session_create",value:function(e){this._on_session_create=e}},{key:"on_session_close",value:function(e){this._on_session_close=e}},{key:"on_server_message",value:function(e){this._on_server_message=e}},{key:"start_session",value:function(e){var t=0<arguments.length&&void 0!==e&&e;this.debug=t;var i=this;function n(){$.ajax({type:"GET",url:i.api_url,contentType:"application/json; charset=utf-8",dataType:"json",headers:{"webio-session-id":i.webio_session_id},success:function(e,t,n){i._on_request_success(e,t,n),i._on_session_create()},error:function(){console.error("Http pulling failed")}})}n(),this.interval_pull_id=setInterval(n,this.pull_interval_ms)}},{key:"_on_request_success",value:function(e,t,n){var i=n.getResponseHeader("webio-session-id");i&&(this.webio_session_id=i);var o=!0,a=!1,r=void 0;try{for(var s,l=e[Symbol.iterator]();!(o=(s=l.next()).done);o=!0){var c=s.value;this.debug&&console.info(">>>",c),this._on_server_message(c)}}catch(e){a=!0,r=e}finally{try{!o&&l.return&&l.return()}finally{if(a)throw r}}}},{key:"send_message",value:function(e){this.debug&&console.info("<<<",e),$.ajax({type:"POST",url:this.api_url,data:JSON.stringify(e),contentType:"application/json; charset=utf-8",dataType:"json",headers:{"webio-session-id":this.webio_session_id},success:this._on_request_success.bind(this),error:function(){console.error("Http push event failed, event data: %s",e)}})}},{key:"close_session",value:function(){this._closed=!0,this._on_session_close(),clearInterval(this.interval_pull_id)}},{key:"closed",value:function(){return this._closed}}]),c);function c(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:1e3;a(this,c),this.api_url=e,this.pull_interval_ms=t,this.interval_pull_id=null,this.debug=!1,this._closed=!1,this._on_session_create=function(){},this._on_session_close=function(){},this._on_server_message=function(){}}n.HttpSession=l,n.is_http_backend=function(n){var e=new URL(n),t=e.protocol||window.location.protocol;return e.protocol=t.replace("wss","https").replace("ws","http"),n=e.href,new Promise(function(t,e){$.get(n,{test:1},void 0,"html").done(function(e){t("ok"===e)}).fail(function(e){t(!1)})})}},{}],13:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.state={AutoScrollBottom:!0,OutputFixedHeight:!1,CurrentSession:null,ShowDuration:200},n.config={codeMirrorModeURL:"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.52.2/mode/%N/%N.min.js",codeMirrorThemeURL:"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.52.2/theme/%N.min.css",outputAnimation:!0,debug:!1}},{}],14:[function(e,t,n){"use strict";var i=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(n,"__esModule",{value:!0});var a=(i(r,[{key:"push",value:function(e,t){if(e in this.map)return console.error("LRUMap: key:%s already in map",e);this.keys.push(e),this.map[e]=t}},{key:"get_value",value:function(e){return this.map[e]}},{key:"get_top",value:function(){var e=this.keys[this.keys.length-1];return this.map[e]}},{key:"set_value",value:function(e,t){if(!(e in this.map))return console.error("LRUMap: key:%s not in map when call `set_value`",e);this.map[e]=t}},{key:"move_to_top",value:function(e){var t=this.keys.indexOf(e);if(!(-1<t))return console.error("LRUMap: key:%s not in map when call `move_to_top`",e);this.keys.splice(t,1),this.keys.push(e)}},{key:"remove",value:function(e){if(!(e in this.map))return console.error("LRUMap: key:%s not in map when call `remove`",e);delete this.map[e],this.keys.splice(this.keys.indexOf(e),1)}}]),r);function r(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this.keys=[],this.map={}}n.LRUMap=a,n.b64toBlob=function(e){for(var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"application/octet-stream",n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:512,i=atob(e),o=[],a=0;a<i.length;a+=n){for(var r=i.slice(a,a+n),s=new Array(r.length),l=0;l<r.length;l++)s[l]=r.charCodeAt(l);var c=new Uint8Array(s);o.push(c)}return new Blob(o,{type:t})},n.make_set=function(e){var t={},n=!0,i=!1,o=void 0;try{for(var a,r=e[Symbol.iterator]();!(n=(a=r.next()).done);n=!0){t[a.value]=""}}catch(e){i=!0,o=e}finally{try{!n&&r.return&&r.return()}finally{if(i)throw o}}return t},n.deep_copy=function(e){return JSON.parse(JSON.stringify(e))},n.body_scroll_to=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"top",n=arguments[2],i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:0,o=null;"top"===t?o=e.offset().top:"middle"===t?o=e.offset().top+.5*e[0].clientHeight-.5*$(window).height():"bottom"===t&&(o=e[0].clientHeight+e.offset().top-$(window).height());var a=$("body,html"),r=Math.abs(a.scrollTop()-o-i);null!==o&&a.stop().animate({scrollTop:o+i},Math.min(r,500)+100,n)},n.box_scroll_to=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"top",i=arguments[3],o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=null;"top"===n?a=e[0].getBoundingClientRect().top-t[0].getBoundingClientRect().top:"middle"===n?a=e[0].getBoundingClientRect().top-t[0].getBoundingClientRect().top-.5*t.height()+.5*e.height():"bottom"===n&&(a=e[0].getBoundingClientRect().bottom-t[0].getBoundingClientRect().bottom);var r=Math.min(Math.abs(a+o),500)+100;null!==a&&t.stop().animate({scrollTop:t.scrollTop()+a+o},r,i)}},{}]},{},[2]);
  2. //# sourceMappingURL=pywebio.min.js.map