From 6ff7df2360d1a6d0461980c938809165982583e8 Mon Sep 17 00:00:00 2001 From: zsloan Date: Thu, 29 Mar 2018 15:40:56 +0000 Subject: Fixed box plots and got them to update with changed sample data Removed fast correlation option because it doesn't work well with gunicorn Changed the type of logger from error to debug when logging which page is being visited in views.py --- wqflask/wqflask/correlation/show_corr_results.py | 43 ++--- wqflask/wqflask/do_search.py | 1 + .../wqflask/static/new/javascript/show_trait.js | 176 +++++++++++++++------ wqflask/wqflask/views.py | 66 ++++---- 4 files changed, 180 insertions(+), 106 deletions(-) diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py index 9b048346..12f76b7d 100644 --- a/wqflask/wqflask/correlation/show_corr_results.py +++ b/wqflask/wqflask/correlation/show_corr_results.py @@ -236,28 +236,29 @@ class CorrelationResults(object): self.get_sample_r_and_p_values(trait, self.target_dataset.trait_data[trait]) elif self.corr_type == "sample": - if self.dataset.type == "ProbeSet" and cache_available: - dataset_file = open(webqtlConfig.GENERATED_TEXT_DIR+db_filename,'r') - - #XZ, 01/08/2009: read the first line - line = dataset_file.readline() - dataset_strains = webqtlUtil.readLineCSV(line)[1:] - - self.this_trait_vals = [] - for item in dataset_strains: - if item in self.sample_data: - self.this_trait_vals.append(self.sample_data[item]) - else: - self.this_trait_vals.append("None") - num_overlap = len(self.this_trait_vals) - logger.debug("DOING PARALLEL") - self.do_parallel_correlation(db_filename, num_overlap) - else: - for trait, values in self.target_dataset.trait_data.iteritems(): - self.get_sample_r_and_p_values(trait, values) + #ZS: Commented out since parallel correlation has issues with gunicorn + # if self.dataset.type == "ProbeSet" and cache_available: + # dataset_file = open(webqtlConfig.GENERATED_TEXT_DIR+db_filename,'r') + + ##XZ, 01/08/2009: read the first line + # line = dataset_file.readline() + # dataset_strains = webqtlUtil.readLineCSV(line)[1:] + + # self.this_trait_vals = [] + # for item in dataset_strains: + # if item in self.sample_data: + # self.this_trait_vals.append(self.sample_data[item]) + # else: + # self.this_trait_vals.append("None") + # num_overlap = len(self.this_trait_vals) + # logger.debug("DOING PARALLEL") + # self.do_parallel_correlation(db_filename, num_overlap) + # else: + for trait, values in self.target_dataset.trait_data.iteritems(): + self.get_sample_r_and_p_values(trait, values) - self.correlation_data = collections.OrderedDict(sorted(self.correlation_data.items(), - key=lambda t: -abs(t[1][0]))) + self.correlation_data = collections.OrderedDict(sorted(self.correlation_data.items(), + key=lambda t: -abs(t[1][0]))) if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno": diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py index e1df1e63..17625474 100644 --- a/wqflask/wqflask/do_search.py +++ b/wqflask/wqflask/do_search.py @@ -989,3 +989,4 @@ if __name__ == "__main__": #results = GoSearch("0045202", dataset, cursor, db_conn).run() logger.debug("results are:", pf(results)) + db_conn.close() diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js index df10c060..117d8f12 100644 --- a/wqflask/wqflask/static/new/javascript/show_trait.js +++ b/wqflask/wqflask/static/new/javascript/show_trait.js @@ -250,15 +250,29 @@ }; redraw_box_plot = function() { - var x; - var _i, _len, _ref, data; - _ref = _.values(root.selected_samples[root.stats_group]); - trait_vals = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - x = _ref[_i]; - trait_vals.push(x.value); + var y_value_list = [] + for (var sample_group in root.selected_samples){ + var trait_sample_data = _.values(root.selected_samples[sample_group]) + var trait_vals = []; + for (i = 0, len = trait_sample_data.length; i < len; i++) { + this_sample_data = trait_sample_data[i]; + trait_vals.push(this_sample_data.value); + } + y_value_list.push(trait_vals) + } + + if (Object.keys(js_data.sample_group_types).length > 1) { + var update = { + y: y_value_list + } + console.log("REDRAW UPDATE:", update) + Plotly.restyle('box_plot', update, [0, 1, 2]) + } else { + var update = { + y: y_value_list + } + Plotly.restyle('box_plot', update) } - Plotly.restyle('box_plot', 'y', [trait_vals]) } redraw_prob_plot = function() { @@ -640,6 +654,108 @@ }; root.stats_group = 'samples_primary'; + + if (Object.keys(js_data.sample_group_types).length > 1) { + full_sample_lists = [sample_lists[0], sample_lists[1], sample_lists[0].concat(sample_lists[1])] + sample_group_list = [js_data.sample_group_types['samples_primary'], js_data.sample_group_types['samples_other'], js_data.sample_group_types['samples_all']] + } else { + full_sample_lists = [sample_lists[0]] + sample_group_list = [js_data.sample_group_types['samples_primary']] + } + + if (full_sample_lists.length > 1) { + var box_layout = { + width: 1200, + height: 500, + margin: { + l: 50, + r: 30, + t: 30, + b: 80 + } + }; + var trace1 = { + y: get_sample_vals(full_sample_lists[0]), + type: 'box', + name: sample_group_list[0], + boxpoints: 'all', + jitter: 0.5, + whiskerwidth: 0.2, + fillcolor: 'cls', + marker: { + size: 2 + }, + line: { + width: 1 + } + } + var trace2 = { + y: get_sample_vals(full_sample_lists[1]), + type: 'box', + name: sample_group_list[1], + boxpoints: 'all', + jitter: 0.5, + whiskerwidth: 0.2, + fillcolor: 'cls', + marker: { + size: 2 + }, + line: { + width: 1 + } + } + var trace3 = { + y: get_sample_vals(full_sample_lists[2]), + type: 'box', + name: sample_group_list[2], + boxpoints: 'all', + jitter: 0.5, + whiskerwidth: 0.2, + fillcolor: 'cls', + marker: { + size: 2 + }, + line: { + width: 1 + } + } + box_data = [trace1, trace2, trace3] + } else { + var box_layout = { + width: 500, + height: 500, + margin: { + l: 50, + r: 30, + t: 30, + b: 80 + } + }; + box_data = [ + { + type: 'box', + y: get_sample_vals(full_sample_lists[0]), + name: sample_group_list[0], + boxpoints: 'all', + jitter: 0.5, + whiskerwidth: 0.2, + fillcolor: 'cls', + marker: { + size: 2 + }, + line: { + width: 1 + } + } + ] + } + + obj = { + data: box_data, + layout: box_layout + } + Plotly.newPlot('box_plot', obj); + // Histogram var hist_trace = { x: get_sample_vals(sample_lists[0]), @@ -686,50 +802,6 @@ root.bar_layout = layout Plotly.newPlot('bar_chart', root.bar_data, layout) - if (Object.keys(js_data.sample_group_types).length > 1) { - full_sample_lists = [sample_lists[0], sample_lists[1], sample_lists[0].concat(sample_lists[1])] - sample_group_list = [js_data.sample_group_types['samples_primary'], js_data.sample_group_types['samples_other'], js_data.sample_group_types['samples_all']] - } else { - full_sample_lists = [sample_lists[0]] - sample_group_list = [js_data.sample_group_types['samples_primary']] - } - - data = [] - for ( var i = 0; i < full_sample_lists.length; i ++ ) { - var box_trace = { - type: 'box', - y: get_sample_vals(full_sample_lists[i]), - name: sample_group_list[i], - boxpoints: 'all', - jitter: 0.5, - whiskerwidth: 0.2, - fillcolor: 'cls', - marker: { - size: 2 - }, - line: { - width: 1 - } - }; - data.push(box_trace) - }; - layout = { - title: 'Box Plot', - yaxis: { - autorange: true, - showgrid: true, - zeroline: true - }, - margin: { - l: 50, - r: 30, - t: 80, - b: 80 - } - }; - - Plotly.newPlot('box_plot', data, layout); - $('.histogram_samples_group').val(root.stats_group); $('.histogram_samples_group').change(function() { root.stats_group = $(this).val(); diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 17a2d762..998e5302 100644 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -123,7 +123,7 @@ def handle_bad_request(e): @app.route("/") def index_page(): logger.info("Sending index_page") - logger.error(request.url) + logger.debug(request.url) params = request.args if 'import_collections' in params: import_collections = params['import_collections'] @@ -141,7 +141,7 @@ def index_page(): def tmp_page(img_path): logger.info("In tmp_page") logger.info("img_path:", img_path) - logger.error(request.url) + logger.debug(request.url) initial_start_vars = request.form logger.info("initial_start_vars:", initial_start_vars) imgfile = open(GENERATED_IMAGE_DIR + img_path, 'rb') @@ -174,7 +174,7 @@ def twitter(filename): @app.route("/search", methods=('GET',)) def search_page(): logger.info("in search_page") - logger.error(request.url) + logger.debug(request.url) if 'info_database' in request.args: logger.info("Going to sharing_info_page") template_vars = sharing_info_page() @@ -213,7 +213,7 @@ def search_page(): @app.route("/gsearch", methods=('GET',)) def gsearchact(): - logger.error(request.url) + logger.debug(request.url) result = gsearch.GSearch(request.args).__dict__ type = request.args['type'] if type == "gene": @@ -224,7 +224,7 @@ def gsearchact(): @app.route("/gsearch_updating", methods=('POST',)) def gsearch_updating(): logger.info("REQUEST ARGS:", request.values) - logger.error(request.url) + logger.debug(request.url) result = update_search_results.GSearch(request.args).__dict__ return result['results'] # type = request.args['type'] @@ -235,31 +235,31 @@ def gsearch_updating(): @app.route("/docedit") def docedit(): - logger.error(request.url) + logger.debug(request.url) doc = docs.Docs(request.args['entry']) return render_template("docedit.html", **doc.__dict__) @app.route('/generated/') def generated_file(filename): - logger.error(request.url) + logger.debug(request.url) return send_from_directory(GENERATED_IMAGE_DIR,filename) @app.route("/help") def help(): - logger.error(request.url) + logger.debug(request.url) doc = docs.Docs("help") return render_template("docs.html", **doc.__dict__) @app.route("/wgcna_setup", methods=('POST',)) def wcgna_setup(): logger.info("In wgcna, request.form is:", request.form) # We are going to get additional user input for the analysis - logger.error(request.url) + logger.debug(request.url) return render_template("wgcna_setup.html", **request.form) # Display them using the template @app.route("/wgcna_results", methods=('POST',)) def wcgna_results(): logger.info("In wgcna, request.form is:", request.form) - logger.error(request.url) + logger.debug(request.url) wgcna = wgcna_analysis.WGCNA() # Start R, load the package and pointers and create the analysis wgcnaA = wgcna.run_analysis(request.form) # Start the analysis, a wgcnaA object should be a separate long running thread result = wgcna.process_results(wgcnaA) # After the analysis is finished store the result @@ -268,13 +268,13 @@ def wcgna_results(): @app.route("/ctl_setup", methods=('POST',)) def ctl_setup(): logger.info("In ctl, request.form is:", request.form) # We are going to get additional user input for the analysis - logger.error(request.url) + logger.debug(request.url) return render_template("ctl_setup.html", **request.form) # Display them using the template @app.route("/ctl_results", methods=('POST',)) def ctl_results(): logger.info("In ctl, request.form is:", request.form) - logger.error(request.url) + logger.debug(request.url) ctl = ctl_analysis.CTL() # Start R, load the package and pointers and create the analysis ctlA = ctl.run_analysis(request.form) # Start the analysis, a ctlA object should be a separate long running thread result = ctl.process_results(ctlA) # After the analysis is finished store the result @@ -313,13 +313,13 @@ def environments(): @app.route("/submit_trait") def submit_trait_form(): - logger.error(request.url) + logger.debug(request.url) species_and_groups = get_species_groups() return render_template("submit_trait.html", **{'species_and_groups' : species_and_groups, 'gn_server_url' : GN_SERVER_URL, 'version' : GN_VERSION}) @app.route("/create_temp_trait", methods=('POST',)) def create_temp_trait(): - logger.error(request.url) + logger.debug(request.url) print("REQUEST.FORM:", request.form) #template_vars = submit_trait.SubmitTrait(request.form) @@ -332,7 +332,7 @@ def export_trait_excel(): """Excel file consisting of the sample data from the trait data and analysis page""" logger.info("In export_trait_excel") logger.info("request.form:", request.form) - logger.error(request.url) + logger.debug(request.url) sample_data = export_trait_data.export_sample_table(request.form) logger.info("sample_data - type: %s -- size: %s" % (type(sample_data), len(sample_data))) @@ -358,7 +358,7 @@ def export_trait_csv(): """CSV file consisting of the sample data from the trait data and analysis page""" logger.info("In export_trait_csv") logger.info("request.form:", request.form) - logger.error(request.url) + logger.debug(request.url) sample_data = export_trait_data.export_sample_table(request.form) logger.info("sample_data - type: %s -- size: %s" % (type(sample_data), len(sample_data))) @@ -379,7 +379,7 @@ def export_traits_csv(): """CSV file consisting of the traits from the search result page""" logger.info("In export_traits_csv") logger.info("request.form:", request.form) - logger.error(request.url) + logger.debug(request.url) csv_data = export_traits.export_search_results_csv(request.form) return Response(csv_data, @@ -389,7 +389,7 @@ def export_traits_csv(): @app.route('/export_perm_data', methods=('POST',)) def export_perm_data(): """CSV file consisting of the permutation data for the mapping results""" - logger.error(request.url) + logger.debug(request.url) num_perm = float(request.form['num_perm']) perm_data = json.loads(request.form['perm_results']) @@ -412,7 +412,7 @@ def export_perm_data(): @app.route("/show_temp_trait", methods=('POST',)) def show_temp_trait_page(): - logger.error(request.url) + logger.debug(request.url) template_vars = show_trait.ShowTrait(request.form) #logger.info("js_data before dump:", template_vars.js_data) template_vars.js_data = json.dumps(template_vars.js_data, @@ -427,7 +427,7 @@ def show_temp_trait_page(): @app.route("/show_trait") def show_trait_page(): - logger.error(request.url) + logger.debug(request.url) template_vars = show_trait.ShowTrait(request.args) #logger.info("js_data before dump:", template_vars.js_data) template_vars.js_data = json.dumps(template_vars.js_data, @@ -443,7 +443,7 @@ def show_trait_page(): @app.route("/heatmap", methods=('POST',)) def heatmap_page(): logger.info("In heatmap, request.form is:", pf(request.form)) - logger.error(request.url) + logger.debug(request.url) start_vars = request.form temp_uuid = uuid.uuid4() @@ -493,7 +493,7 @@ def mapping_results_container_page(): @app.route("/loading", methods=('POST',)) def loading_page(): - logger.error(request.url) + logger.debug(request.url) initial_start_vars = request.form logger.debug("Marker regression called with initial_start_vars:", initial_start_vars.items()) #temp_uuid = initial_start_vars['temp_uuid'] @@ -552,7 +552,7 @@ def loading_page(): def marker_regression_page(): initial_start_vars = request.form logger.debug("Marker regression called with initial_start_vars:", initial_start_vars.items()) - logger.error(request.url) + logger.debug(request.url) temp_uuid = initial_start_vars['temp_uuid'] wanted = ( 'trait_id', @@ -678,7 +678,7 @@ def marker_regression_page(): @app.route("/export_mapping_results", methods = ('POST',)) def export_mapping_results(): logger.info("request.form:", request.form) - logger.error(request.url) + logger.debug(request.url) file_path = request.form.get("results_path") results_csv = open(file_path, "r").read() response = Response(results_csv, @@ -691,7 +691,7 @@ def export_mapping_results(): @app.route("/export", methods = ('POST',)) def export(): logger.info("request.form:", request.form) - logger.error(request.url) + logger.debug(request.url) svg_xml = request.form.get("data", "Invalid data") filename = request.form.get("filename", "manhattan_plot_snp") response = Response(svg_xml, mimetype="image/svg+xml") @@ -702,7 +702,7 @@ def export(): def export_pdf(): import cairosvg logger.info("request.form:", request.form) - logger.error(request.url) + logger.debug(request.url) svg_xml = request.form.get("data", "Invalid data") logger.info("svg_xml:", svg_xml) filename = request.form.get("filename", "interval_map_pdf") @@ -715,7 +715,7 @@ def export_pdf(): @app.route("/network_graph", methods=('POST',)) def network_graph_page(): logger.info("In network_graph, request.form is:", pf(request.form)) - logger.error(request.url) + logger.debug(request.url) start_vars = request.form traits = [trait.strip() for trait in start_vars['trait_list'].split(',')] if traits[0] != "": @@ -731,7 +731,7 @@ def network_graph_page(): @app.route("/corr_compute", methods=('POST',)) def corr_compute_page(): logger.info("In corr_compute, request.form is:", pf(request.form)) - logger.error(request.url) + logger.debug(request.url) #fd = webqtlFormData.webqtlFormData(request.form) template_vars = show_corr_results.CorrelationResults(request.form) return render_template("correlation_page.html", **template_vars.__dict__) @@ -739,7 +739,7 @@ def corr_compute_page(): @app.route("/corr_matrix", methods=('POST',)) def corr_matrix_page(): logger.info("In corr_matrix, request.form is:", pf(request.form)) - logger.error(request.url) + logger.debug(request.url) start_vars = request.form traits = [trait.strip() for trait in start_vars['trait_list'].split(',')] @@ -755,7 +755,7 @@ def corr_matrix_page(): @app.route("/corr_scatter_plot") def corr_scatter_plot_page(): - logger.error(request.url) + logger.debug(request.url) template_vars = corr_scatter_plot.CorrScatterPlot(request.args) template_vars.js_data = json.dumps(template_vars.js_data, default=json_default_handler, @@ -764,7 +764,7 @@ def corr_scatter_plot_page(): @app.route("/submit_bnw", methods=('POST',)) def submit_bnw(): - logger.error(request.url) + logger.debug(request.url) template_vars = get_bnw_input(request.form) return render_template("empty_collection.html", **{'tool':'Correlation Matrix'}) @@ -772,7 +772,7 @@ def submit_bnw(): def sharing_info_page(): """Info page displayed when the user clicks the "Info" button next to the dataset selection""" logger.info("In sharing_info_page") - logger.error(request.url) + logger.debug(request.url) fd = webqtlFormData.webqtlFormData(request.args) template_vars = SharingInfoPage.SharingInfoPage(fd) return template_vars @@ -780,7 +780,7 @@ def sharing_info_page(): # Take this out or secure it before putting into production @app.route("/get_temp_data") def get_temp_data(): - logger.error(request.url) + logger.debug(request.url) temp_uuid = request.args['key'] return flask.jsonify(temp_data.TempData(temp_uuid).get_all()) -- cgit v1.2.3 From 1f8430561fc542eaec2148361dde49beff4d3361 Mon Sep 17 00:00:00 2001 From: zsloan Date: Thu, 29 Mar 2018 20:32:14 +0000 Subject: Can now add markers to collection from mapping results page --- wqflask/wqflask/templates/marker_regression_gn1.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/marker_regression_gn1.html index 08a934a6..fd083983 100644 --- a/wqflask/wqflask/templates/marker_regression_gn1.html +++ b/wqflask/wqflask/templates/marker_regression_gn1.html @@ -183,6 +183,13 @@ {% if selectedChr == -1 %}

Mapping Statistics

+
+ + + + +
+
@@ -211,7 +218,7 @@ -- cgit v1.2.3 From 7390eefb5d0b6641f43001b204fcf7a466a1d442 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 07:18:46 +0000 Subject: user_session add output --- wqflask/wqflask/collect.py | 1 + 1 file changed, 1 insertion(+) diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py index 629977ac..ffc698de 100644 --- a/wqflask/wqflask/collect.py +++ b/wqflask/wqflask/collect.py @@ -227,6 +227,7 @@ def collections_add(): traits=request.args['traits'] if g.user_session.logged_in: + logger.debug("user_session",g.user_session) user_collections = g.user_session.user_ob.user_collections logger.debug("user_collections are:", user_collections) return render_template("collections/add.html", -- cgit v1.2.3 From d5e27a8863f125924de1d38f9936f159a610a620 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 07:49:53 +0000 Subject: js: removed jqplot --- MANIFEST.in | 24 - .../wqflask/static/packages/jqplot/MIT-LICENSE.txt | 21 - wqflask/wqflask/static/packages/jqplot/README.txt | 77 - .../static/packages/jqplot/additional-methods.js | 437 - .../packages/jqplot/additional-methods.min.js | 4 - wqflask/wqflask/static/packages/jqplot/changes.txt | 395 - .../wqflask/static/packages/jqplot/copyright.txt | 56 - .../jqplot/docs/files/MIT-LICENSE-txt.html | 39 - .../packages/jqplot/docs/files/changes-txt.html | 39 - .../packages/jqplot/docs/files/gpl-2-0-txt.html | 39 - .../jqplot/docs/files/images/background.jpg | Bin 1101 -> 0 bytes .../jqplot/docs/files/images/basicline.png | Bin 17024 -> 0 bytes .../jqplot/docs/files/images/basiclogaxis.png | Bin 19902 -> 0 bytes .../jqplot/docs/files/images/basiclogoptions.png | Bin 17207 -> 0 bytes .../jqplot/docs/files/images/basicoptions.png | Bin 19864 -> 0 bytes .../packages/jqplot/docs/files/images/dualaxis.png | Bin 29672 -> 0 bytes .../packages/jqplot/docs/files/images/logo.jpg | Bin 14632 -> 0 bytes .../packages/jqplot/docs/files/images/navdocs.png | Bin 996 -> 0 bytes .../jqplot/docs/files/images/navdocsover.png | Bin 1006 -> 0 bytes .../jqplot/docs/files/images/navdownload.png | Bin 1236 -> 0 bytes .../jqplot/docs/files/images/navdownloadover.png | Bin 1265 -> 0 bytes .../jqplot/docs/files/images/navexamples.png | Bin 1308 -> 0 bytes .../jqplot/docs/files/images/navexamplesover.png | Bin 1332 -> 0 bytes .../packages/jqplot/docs/files/images/navhome.png | Bin 858 -> 0 bytes .../jqplot/docs/files/images/navhomeover.png | Bin 886 -> 0 bytes .../packages/jqplot/docs/files/images/new.png | Bin 13750 -> 0 bytes .../packages/jqplot/docs/files/images/sample3.png | Bin 44781 -> 0 bytes .../packages/jqplot/docs/files/images/samplesm.png | Bin 20874 -> 0 bytes .../jqplot/docs/files/jqPlotCssStyling-txt.html | 39 - .../jqplot/docs/files/jqPlotOptions-txt.html | 292 - .../docs/files/jqplot-axisLabelRenderer-js.html | 47 - .../docs/files/jqplot-axisTickRenderer-js.html | 73 - .../docs/files/jqplot-canvasGridRenderer-js.html | 39 - .../packages/jqplot/docs/files/jqplot-core-js.html | 389 - .../docs/files/jqplot-divTitleRenderer-js.html | 39 - .../jqplot/docs/files/jqplot-lineRenderer-js.html | 69 - .../docs/files/jqplot-linearAxisRenderer-js.html | 61 - .../docs/files/jqplot-markerRenderer-js.html | 65 - .../docs/files/jqplot-shadowRenderer-js.html | 61 - .../jqplot/docs/files/jqplot-shapeRenderer-js.html | 65 - .../jqplot/docs/files/jqplot-themeEngine-js.html | 191 - .../jqplot/docs/files/jqplot-toImage-js.html | 39 - .../jqplot/docs/files/optionsTutorial-txt.html | 120 - .../plugins/jqplot-BezierCurveRenderer-js.html | 45 - .../docs/files/plugins/jqplot-barRenderer-js.html | 69 - .../files/plugins/jqplot-blockRenderer-js.html | 53 - .../files/plugins/jqplot-bubbleRenderer-js.html | 71 - .../plugins/jqplot-canvasAxisLabelRenderer-js.html | 63 - .../plugins/jqplot-canvasAxisTickRenderer-js.html | 79 - .../files/plugins/jqplot-canvasOverlay-js.html | 113 - .../plugins/jqplot-categoryAxisRenderer-js.html | 46 - .../docs/files/plugins/jqplot-ciParser-js.html | 39 - .../docs/files/plugins/jqplot-cursor-js.html | 93 - .../files/plugins/jqplot-dateAxisRenderer-js.html | 101 - .../files/plugins/jqplot-donutRenderer-js.html | 98 - .../docs/files/plugins/jqplot-dragable-js.html | 45 - .../plugins/jqplot-enhancedLegendRenderer-js.html | 51 - .../files/plugins/jqplot-funnelRenderer-js.html | 87 - .../docs/files/plugins/jqplot-highlighter-js.html | 80 - .../files/plugins/jqplot-logAxisRenderer-js.html | 47 - .../files/plugins/jqplot-mekkoAxisRenderer-js.html | 49 - .../files/plugins/jqplot-mekkoRenderer-js.html | 62 - .../plugins/jqplot-meterGaugeRenderer-js.html | 103 - .../docs/files/plugins/jqplot-ohlcRenderer-js.html | 65 - .../docs/files/plugins/jqplot-pieRenderer-js.html | 93 - .../docs/files/plugins/jqplot-pointLabels-js.html | 72 - .../plugins/jqplot-pyramidAxisRenderer-js.html | 49 - .../plugins/jqplot-pyramidGridRenderer-js.html | 39 - .../files/plugins/jqplot-pyramidRenderer-js.html | 55 - .../docs/files/plugins/jqplot-trendline-js.html | 67 - .../packages/jqplot/docs/files/usage-txt.html | 58 - .../wqflask/static/packages/jqplot/docs/index.html | 1 - .../static/packages/jqplot/docs/index/Classes.html | 70 - .../static/packages/jqplot/docs/index/Files.html | 34 - .../packages/jqplot/docs/index/Functions.html | 70 - .../static/packages/jqplot/docs/index/General.html | 42 - .../packages/jqplot/docs/index/General2.html | 42 - .../packages/jqplot/docs/index/General3.html | 42 - .../packages/jqplot/docs/index/General4.html | 46 - .../packages/jqplot/docs/index/General5.html | 50 - .../packages/jqplot/docs/index/General6.html | 34 - .../packages/jqplot/docs/index/General7.html | 58 - .../static/packages/jqplot/docs/index/Hooks.html | 46 - .../packages/jqplot/docs/index/Properties.html | 42 - .../packages/jqplot/docs/index/Properties2.html | 42 - .../packages/jqplot/docs/index/Properties3.html | 46 - .../packages/jqplot/docs/index/Properties4.html | 50 - .../packages/jqplot/docs/index/Properties5.html | 34 - .../packages/jqplot/docs/index/Properties6.html | 58 - .../static/packages/jqplot/docs/javascript/main.js | 836 -- .../packages/jqplot/docs/javascript/searchdata.js | 182 - .../packages/jqplot/docs/search/ClassesA.html | 20 - .../packages/jqplot/docs/search/ClassesD.html | 20 - .../packages/jqplot/docs/search/ClassesG.html | 20 - .../packages/jqplot/docs/search/ClassesH.html | 20 - .../packages/jqplot/docs/search/ClassesJ.html | 20 - .../packages/jqplot/docs/search/ClassesL.html | 20 - .../packages/jqplot/docs/search/ClassesS.html | 20 - .../jqplot/docs/search/ClassesSymbols.html | 20 - .../packages/jqplot/docs/search/ClassesT.html | 20 - .../packages/jqplot/docs/search/ClassesV.html | 20 - .../static/packages/jqplot/docs/search/FilesJ.html | 20 - .../packages/jqplot/docs/search/FunctionsC.html | 20 - .../packages/jqplot/docs/search/FunctionsD.html | 20 - .../packages/jqplot/docs/search/FunctionsG.html | 20 - .../packages/jqplot/docs/search/FunctionsI.html | 20 - .../packages/jqplot/docs/search/FunctionsM.html | 20 - .../packages/jqplot/docs/search/FunctionsN.html | 20 - .../packages/jqplot/docs/search/FunctionsQ.html | 20 - .../packages/jqplot/docs/search/FunctionsR.html | 20 - .../packages/jqplot/docs/search/FunctionsS.html | 20 - .../packages/jqplot/docs/search/FunctionsZ.html | 20 - .../packages/jqplot/docs/search/GeneralA.html | 20 - .../packages/jqplot/docs/search/GeneralB.html | 20 - .../packages/jqplot/docs/search/GeneralC.html | 20 - .../packages/jqplot/docs/search/GeneralD.html | 20 - .../packages/jqplot/docs/search/GeneralE.html | 20 - .../packages/jqplot/docs/search/GeneralF.html | 20 - .../packages/jqplot/docs/search/GeneralG.html | 20 - .../packages/jqplot/docs/search/GeneralH.html | 20 - .../packages/jqplot/docs/search/GeneralI.html | 20 - .../packages/jqplot/docs/search/GeneralJ.html | 20 - .../packages/jqplot/docs/search/GeneralL.html | 20 - .../packages/jqplot/docs/search/GeneralM.html | 20 - .../packages/jqplot/docs/search/GeneralN.html | 20 - .../packages/jqplot/docs/search/GeneralO.html | 20 - .../packages/jqplot/docs/search/GeneralP.html | 20 - .../packages/jqplot/docs/search/GeneralQ.html | 20 - .../packages/jqplot/docs/search/GeneralR.html | 20 - .../packages/jqplot/docs/search/GeneralS.html | 20 - .../jqplot/docs/search/GeneralSymbols.html | 20 - .../packages/jqplot/docs/search/GeneralT.html | 20 - .../packages/jqplot/docs/search/GeneralU.html | 20 - .../packages/jqplot/docs/search/GeneralV.html | 20 - .../packages/jqplot/docs/search/GeneralW.html | 20 - .../packages/jqplot/docs/search/GeneralX.html | 20 - .../packages/jqplot/docs/search/GeneralY.html | 20 - .../packages/jqplot/docs/search/GeneralZ.html | 20 - .../static/packages/jqplot/docs/search/HooksA.html | 20 - .../static/packages/jqplot/docs/search/HooksE.html | 20 - .../static/packages/jqplot/docs/search/HooksJ.html | 20 - .../static/packages/jqplot/docs/search/HooksP.html | 20 - .../packages/jqplot/docs/search/NoResults.html | 15 - .../packages/jqplot/docs/search/PropertiesA.html | 20 - .../packages/jqplot/docs/search/PropertiesB.html | 20 - .../packages/jqplot/docs/search/PropertiesC.html | 20 - .../packages/jqplot/docs/search/PropertiesD.html | 20 - .../packages/jqplot/docs/search/PropertiesE.html | 20 - .../packages/jqplot/docs/search/PropertiesF.html | 20 - .../packages/jqplot/docs/search/PropertiesG.html | 20 - .../packages/jqplot/docs/search/PropertiesH.html | 20 - .../packages/jqplot/docs/search/PropertiesI.html | 20 - .../packages/jqplot/docs/search/PropertiesL.html | 20 - .../packages/jqplot/docs/search/PropertiesM.html | 20 - .../packages/jqplot/docs/search/PropertiesN.html | 20 - .../packages/jqplot/docs/search/PropertiesO.html | 20 - .../packages/jqplot/docs/search/PropertiesP.html | 20 - .../packages/jqplot/docs/search/PropertiesR.html | 20 - .../packages/jqplot/docs/search/PropertiesS.html | 20 - .../packages/jqplot/docs/search/PropertiesT.html | 20 - .../packages/jqplot/docs/search/PropertiesU.html | 20 - .../packages/jqplot/docs/search/PropertiesV.html | 20 - .../packages/jqplot/docs/search/PropertiesW.html | 20 - .../packages/jqplot/docs/search/PropertiesX.html | 20 - .../packages/jqplot/docs/search/PropertiesY.html | 20 - .../packages/jqplot/docs/search/PropertiesZ.html | 20 - .../static/packages/jqplot/docs/styles/1.css | 767 -- .../static/packages/jqplot/docs/styles/2.css | 174 - .../static/packages/jqplot/docs/styles/main.css | 2 - wqflask/wqflask/static/packages/jqplot/excanvas.js | 1438 --- .../wqflask/static/packages/jqplot/excanvas.min.js | 57 - wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt | 280 - .../static/packages/jqplot/jqPlotCssStyling.txt | 53 - .../static/packages/jqplot/jqPlotOptions.txt | 276 - .../static/packages/jqplot/jquery.jqplot.css | 259 - .../static/packages/jqplot/jquery.jqplot.js | 11381 ------------------- .../static/packages/jqplot/jquery.jqplot.min.css | 1 - .../static/packages/jqplot/jquery.jqplot.min.js | 57 - wqflask/wqflask/static/packages/jqplot/jquery.js | 9046 --------------- .../wqflask/static/packages/jqplot/jquery.min.js | 4 - .../static/packages/jqplot/jquery.validate.js | 1248 -- .../static/packages/jqplot/jquery.validate.min.js | 4 - .../static/packages/jqplot/optionsTutorial.txt | 240 - .../jqplot/plugins/jqplot.BezierCurveRenderer.js | 313 - .../plugins/jqplot.BezierCurveRenderer.min.js | 57 - .../packages/jqplot/plugins/jqplot.barRenderer.js | 797 -- .../jqplot/plugins/jqplot.barRenderer.min.js | 57 - .../jqplot/plugins/jqplot.blockRenderer.js | 234 - .../jqplot/plugins/jqplot.blockRenderer.min.js | 57 - .../jqplot/plugins/jqplot.bubbleRenderer.js | 758 -- .../jqplot/plugins/jqplot.bubbleRenderer.min.js | 57 - .../plugins/jqplot.canvasAxisLabelRenderer.js | 203 - .../plugins/jqplot.canvasAxisLabelRenderer.min.js | 57 - .../plugins/jqplot.canvasAxisTickRenderer.js | 243 - .../plugins/jqplot.canvasAxisTickRenderer.min.js | 57 - .../jqplot/plugins/jqplot.canvasOverlay.js | 865 -- .../jqplot/plugins/jqplot.canvasOverlay.min.js | 57 - .../jqplot/plugins/jqplot.canvasTextRenderer.js | 449 - .../plugins/jqplot.canvasTextRenderer.min.js | 57 - .../jqplot/plugins/jqplot.categoryAxisRenderer.js | 673 -- .../plugins/jqplot.categoryAxisRenderer.min.js | 57 - .../packages/jqplot/plugins/jqplot.ciParser.js | 116 - .../packages/jqplot/plugins/jqplot.ciParser.min.js | 57 - .../packages/jqplot/plugins/jqplot.cursor.js | 1108 -- .../packages/jqplot/plugins/jqplot.cursor.min.js | 57 - .../jqplot/plugins/jqplot.dateAxisRenderer.js | 737 -- .../jqplot/plugins/jqplot.dateAxisRenderer.min.js | 57 - .../jqplot/plugins/jqplot.donutRenderer.js | 804 -- .../jqplot/plugins/jqplot.donutRenderer.min.js | 57 - .../packages/jqplot/plugins/jqplot.dragable.js | 225 - .../packages/jqplot/plugins/jqplot.dragable.min.js | 57 - .../plugins/jqplot.enhancedLegendRenderer.js | 305 - .../plugins/jqplot.enhancedLegendRenderer.min.js | 57 - .../jqplot/plugins/jqplot.funnelRenderer.js | 942 -- .../jqplot/plugins/jqplot.funnelRenderer.min.js | 57 - .../packages/jqplot/plugins/jqplot.highlighter.js | 465 - .../jqplot/plugins/jqplot.highlighter.min.js | 57 - .../static/packages/jqplot/plugins/jqplot.json2.js | 475 - .../packages/jqplot/plugins/jqplot.json2.min.js | 57 - .../jqplot/plugins/jqplot.logAxisRenderer.js | 529 - .../jqplot/plugins/jqplot.logAxisRenderer.min.js | 57 - .../jqplot/plugins/jqplot.mekkoAxisRenderer.js | 611 - .../jqplot/plugins/jqplot.mekkoAxisRenderer.min.js | 57 - .../jqplot/plugins/jqplot.mekkoRenderer.js | 437 - .../jqplot/plugins/jqplot.mekkoRenderer.min.js | 57 - .../jqplot/plugins/jqplot.meterGaugeRenderer.js | 1029 -- .../plugins/jqplot.meterGaugeRenderer.min.js | 57 - .../packages/jqplot/plugins/jqplot.mobile.js | 45 - .../packages/jqplot/plugins/jqplot.mobile.min.js | 57 - .../packages/jqplot/plugins/jqplot.ohlcRenderer.js | 373 - .../jqplot/plugins/jqplot.ohlcRenderer.min.js | 57 - .../packages/jqplot/plugins/jqplot.pieRenderer.js | 903 -- .../jqplot/plugins/jqplot.pieRenderer.min.js | 57 - .../packages/jqplot/plugins/jqplot.pointLabels.js | 379 - .../jqplot/plugins/jqplot.pointLabels.min.js | 57 - .../jqplot/plugins/jqplot.pyramidAxisRenderer.js | 728 -- .../plugins/jqplot.pyramidAxisRenderer.min.js | 57 - .../jqplot/plugins/jqplot.pyramidGridRenderer.js | 429 - .../plugins/jqplot.pyramidGridRenderer.min.js | 57 - .../jqplot/plugins/jqplot.pyramidRenderer.js | 514 - .../jqplot/plugins/jqplot.pyramidRenderer.min.js | 57 - .../packages/jqplot/plugins/jqplot.trendline.js | 223 - .../jqplot/plugins/jqplot.trendline.min.js | 57 - wqflask/wqflask/static/packages/jqplot/usage.txt | 126 - wqflask/wqflask/templates/corr_scatterplot.html | 1 - wqflask/wqflask/templates/correlation_matrix.html | 1 - 246 files changed, 50969 deletions(-) delete mode 100644 wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt delete mode 100644 wqflask/wqflask/static/packages/jqplot/README.txt delete mode 100644 wqflask/wqflask/static/packages/jqplot/additional-methods.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/additional-methods.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/changes.txt delete mode 100644 wqflask/wqflask/static/packages/jqplot/copyright.txt delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpg delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpg delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/new.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.png delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Files.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/General.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/General2.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/General3.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/General4.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/General5.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/General6.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/General7.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/styles/1.css delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/styles/2.css delete mode 100644 wqflask/wqflask/static/packages/jqplot/docs/styles/main.css delete mode 100644 wqflask/wqflask/static/packages/jqplot/excanvas.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/excanvas.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt delete mode 100644 wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt delete mode 100644 wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt delete mode 100644 wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css delete mode 100644 wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css delete mode 100644 wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/jquery.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/jquery.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/jquery.validate.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js delete mode 100644 wqflask/wqflask/static/packages/jqplot/usage.txt diff --git a/MANIFEST.in b/MANIFEST.in index bf23f9aa..26c71a60 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -220,30 +220,6 @@ include wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/ include wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/specs/* include wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/* include wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/* -include wqflask/wqflask/static/packages/jqplot/* -include wqflask/wqflask/static/packages/jqplot/docs/* -include wqflask/wqflask/static/packages/jqplot/docs/index/* -include wqflask/wqflask/static/packages/jqplot/docs/styles/* -include wqflask/wqflask/static/packages/jqplot/docs/files/* -include wqflask/wqflask/static/packages/jqplot/docs/files/images/* -include wqflask/wqflask/static/packages/jqplot/docs/files/plugins/* -include wqflask/wqflask/static/packages/jqplot/docs/search/* -include wqflask/wqflask/static/packages/jqplot/docs/javascript/* -include wqflask/wqflask/static/packages/jqplot/examples/* -include wqflask/wqflask/static/packages/jqplot/examples/colorpicker/* -include wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/* -include wqflask/wqflask/static/packages/jqplot/examples/images/* -include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/* -include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/* -include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/* -include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/* -include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/* -include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/* -include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/* -include wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/* -include wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/* -include wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/* -include wqflask/wqflask/static/packages/jqplot/plugins/* include wqflask/wqflask/correlation_matrix/* include wqflask/wqflask/show_trait/* include wqflask/wqflask/wgcna/* diff --git a/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt b/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt deleted file mode 100644 index 647db23f..00000000 --- a/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Title: MIT License - -Copyright (c) 2009-2012 Chris Leonello - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/README.txt b/wqflask/wqflask/static/packages/jqplot/README.txt deleted file mode 100644 index 4932a00c..00000000 --- a/wqflask/wqflask/static/packages/jqplot/README.txt +++ /dev/null @@ -1,77 +0,0 @@ -Title: jqPlot Readme - -Pure JavaScript plotting plugin for jQuery. - -To learn how to use jqPlot, start with the Basic Usage Instructions below. Then read the -usage.txt and jqPlotOptions.txt files included with the distribution. - -The jqPlot home page is at . - -Downloads can be found at . - -The mailing list is at . - -Examples and unit tests are at . - -Documentation is at . - -The project page and source code are at . - -Bugs, issues, feature requests: . - -Basic Usage Instructions: - -jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.4 is included in -the distribution. To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and -optionally the excanvas script to support IE version prior to IE 9 in your web page: - -> -> -> -> - -For usage instructions, see in usage.txt. For available options, see - in jqPlotOptions.txt. - -Building from source: - -If you've cloned the repository, you can build a distribution from source. -You need to have ant installed. You can simply -type "ant" from the jqplot directory to build the default "all" target. -There are 6 pertinent targets: clean, dist, min, docs, compress and all. Use: - -> ant -p - -to get a description of the various build targets. - -Legal Notices: - -Copyright (c) 2009-2010 Chris Leonello -jqPlot is currently available for use in all personal or commercial projects -under both the MIT and GPL version 2.0 licenses. This means that you can -choose the license that best suits your project and use it accordingly. - -Although not required, the author would appreciate an email letting him -know of any substantial use of jqPlot. You can reach the author at: -chris at jqplot or see http://www.jqplot.com/info.php . - -If you are feeling kind and generous, consider supporting the project by -making a donation at: http://www.jqplot.com/donate.php . - -jqPlot includes date instance methods and printf/sprintf functions by other authors: - -Date instance methods: - - author Ken Snyder (ken d snyder at gmail dot com) - date 2008-09-10 - version 2.0.2 (http://kendsnyder.com/sandbox/date/) - license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - -JavaScript printf/sprintf functions. - - version 2007.04.27 - author Ash Searle - http://hexmen.com/blog/2007/03/printf-sprintf/ - http://hexmen.com/js/sprintf.js - The author (Ash Searle) has placed this code in the public domain: - "This code is unrestricted: you are free to use it however you like." diff --git a/wqflask/wqflask/static/packages/jqplot/additional-methods.js b/wqflask/wqflask/static/packages/jqplot/additional-methods.js deleted file mode 100644 index 801d0b7f..00000000 --- a/wqflask/wqflask/static/packages/jqplot/additional-methods.js +++ /dev/null @@ -1,437 +0,0 @@ -/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012 -* https://github.com/jzaefferer/jquery-validation -* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */ - -/*! - * jQuery Validation Plugin 1.10.0 - * - * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ - * http://docs.jquery.com/Plugins/Validation - * - * Copyright (c) 2006 - 2011 Jörn Zaefferer - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - */ - -(function() { - - function stripHtml(value) { - // remove html tags and space chars - return value.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' ') - // remove punctuation - .replace(/[.(),;:!?%#$'"_+=\/-]*/g,''); - } - jQuery.validator.addMethod("maxWords", function(value, element, params) { - return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length <= params; - }, jQuery.validator.format("Please enter {0} words or less.")); - - jQuery.validator.addMethod("minWords", function(value, element, params) { - return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params; - }, jQuery.validator.format("Please enter at least {0} words.")); - - jQuery.validator.addMethod("rangeWords", function(value, element, params) { - var valueStripped = stripHtml(value); - var regex = /\b\w+\b/g; - return this.optional(element) || valueStripped.match(regex).length >= params[0] && valueStripped.match(regex).length <= params[1]; - }, jQuery.validator.format("Please enter between {0} and {1} words.")); - -})(); - -jQuery.validator.addMethod("letterswithbasicpunc", function(value, element) { - return this.optional(element) || /^[a-z\-.,()'\"\s]+$/i.test(value); -}, "Letters or punctuation only please"); - -jQuery.validator.addMethod("alphanumeric", function(value, element) { - return this.optional(element) || /^\w+$/i.test(value); -}, "Letters, numbers, and underscores only please"); - -jQuery.validator.addMethod("lettersonly", function(value, element) { - return this.optional(element) || /^[a-z]+$/i.test(value); -}, "Letters only please"); - -jQuery.validator.addMethod("nowhitespace", function(value, element) { - return this.optional(element) || /^\S+$/i.test(value); -}, "No white space please"); - -jQuery.validator.addMethod("ziprange", function(value, element) { - return this.optional(element) || /^90[2-5]\d\{2\}-\d{4}$/.test(value); -}, "Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx"); - -jQuery.validator.addMethod("zipcodeUS", function(value, element) { - return this.optional(element) || /\d{5}-\d{4}$|^\d{5}$/.test(value) -}, "The specified US ZIP Code is invalid"); - -jQuery.validator.addMethod("integer", function(value, element) { - return this.optional(element) || /^-?\d+$/.test(value); -}, "A positive or negative non-decimal number please"); - -/** - * Return true, if the value is a valid vehicle identification number (VIN). - * - * Works with all kind of text inputs. - * - * @example - * @desc Declares a required input element whose value must be a valid vehicle identification number. - * - * @name jQuery.validator.methods.vinUS - * @type Boolean - * @cat Plugins/Validate/Methods - */ -jQuery.validator.addMethod("vinUS", function(v) { - if (v.length != 17) { - return false; - } - var i, n, d, f, cd, cdv; - var LL = ["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"]; - var VL = [1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9]; - var FL = [8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2]; - var rs = 0; - for(i = 0; i < 17; i++){ - f = FL[i]; - d = v.slice(i,i+1); - if (i == 8) { - cdv = d; - } - if (!isNaN(d)) { - d *= f; - } else { - for (n = 0; n < LL.length; n++) { - if (d.toUpperCase() === LL[n]) { - d = VL[n]; - d *= f; - if (isNaN(cdv) && n == 8) { - cdv = LL[n]; - } - break; - } - } - } - rs += d; - } - cd = rs % 11; - if (cd == 10) { - cd = "X"; - } - if (cd == cdv) { - return true; - } - return false; -}, "The specified vehicle identification number (VIN) is invalid."); - -/** - * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy. - * - * @example jQuery.validator.methods.date("01/01/1900") - * @result true - * - * @example jQuery.validator.methods.date("01/13/1990") - * @result false - * - * @example jQuery.validator.methods.date("01.01.1900") - * @result false - * - * @example - * @desc Declares an optional input element whose value must be a valid date. - * - * @name jQuery.validator.methods.dateITA - * @type Boolean - * @cat Plugins/Validate/Methods - */ -jQuery.validator.addMethod("dateITA", function(value, element) { - var check = false; - var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/; - if( re.test(value)){ - var adata = value.split('/'); - var gg = parseInt(adata[0],10); - var mm = parseInt(adata[1],10); - var aaaa = parseInt(adata[2],10); - var xdata = new Date(aaaa,mm-1,gg); - if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) ) - check = true; - else - check = false; - } else - check = false; - return this.optional(element) || check; -}, "Please enter a correct date"); - -jQuery.validator.addMethod("dateNL", function(value, element) { - return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value); -}, "Vul hier een geldige datum in."); - -jQuery.validator.addMethod("time", function(value, element) { - return this.optional(element) || /^([0-1]\d|2[0-3]):([0-5]\d)$/.test(value); -}, "Please enter a valid time, between 00:00 and 23:59"); -jQuery.validator.addMethod("time12h", function(value, element) { - return this.optional(element) || /^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))$/i.test(value); -}, "Please enter a valid time, between 00:00 am and 12:00 pm"); - -/** - * matches US phone number format - * - * where the area code may not start with 1 and the prefix may not start with 1 - * allows '-' or ' ' as a separator and allows parens around area code - * some people may want to put a '1' in front of their number - * - * 1(212)-999-2345 or - * 212 999 2344 or - * 212-999-0983 - * - * but not - * 111-123-5434 - * and not - * 212 123 4567 - */ -jQuery.validator.addMethod("phoneUS", function(phone_number, element) { - phone_number = phone_number.replace(/\s+/g, ""); - return this.optional(element) || phone_number.length > 9 && - phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/); -}, "Please specify a valid phone number"); - -jQuery.validator.addMethod('phoneUK', function(phone_number, element) { - phone_number = phone_number.replace(/\(|\)|\s+|-/g,''); - return this.optional(element) || phone_number.length > 9 && - phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:(?:\d{5}\)?\s?\d{4,5})|(?:\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3}))|(?:\d{3}\)?\s?\d{3}\s?\d{3,4})|(?:\d{2}\)?\s?\d{4}\s?\d{4}))$/); -}, 'Please specify a valid phone number'); - -jQuery.validator.addMethod('mobileUK', function(phone_number, element) { - phone_number = phone_number.replace(/\s+|-/g,''); - return this.optional(element) || phone_number.length > 9 && - phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[45789]\d{2}|624)\s?\d{3}\s?\d{3})$/); -}, 'Please specify a valid mobile number'); - -//Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers -jQuery.validator.addMethod('phonesUK', function(phone_number, element) { - phone_number = phone_number.replace(/\s+|-/g,''); - return this.optional(element) || phone_number.length > 9 && - phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[45789]\d{8}|624\d{6})))$/); -}, 'Please specify a valid uk phone number'); -// On the above three UK functions, do the following server side processing: -// Compare with ^((?:00\s?|\+)(44)\s?)?\(?0?(?:\)\s?)?([1-9]\d{1,4}\)?[\d\s]+) -// Extract $2 and set $prefix to '+44' if $2 is '44' otherwise set $prefix to '0' -// Extract $3 and remove spaces and parentheses. Phone number is combined $2 and $3. -// A number of very detailed GB telephone number RegEx patterns can also be found at: -// http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_UK_Telephone_Numbers - -//Matches UK postcode. based on http://snipplr.com/view/3152/postcode-validation/ -jQuery.validator.addMethod('postcodeUK', function(postcode, element) { - postcode = (postcode.toUpperCase()).replace(/\s+/g,''); - return this.optional(element) || postcode.match(/^([^QZ][^IJZ]{0,1}\d{1,2})(\d[^CIKMOV]{2})$/) || postcode.match(/^([^QV]\d[ABCDEFGHJKSTUW])(\d[^CIKMOV]{2})$/) || postcode.match(/^([^QV][^IJZ]\d[ABEHMNPRVWXY])(\d[^CIKMOV]{2})$/) || postcode.match(/^(GIR)(0AA)$/) || postcode.match(/^(BFPO)(\d{1,4})$/) || postcode.match(/^(BFPO)(C\/O\d{1,3})$/); -}, 'Please specify a valid postcode'); - -// TODO check if value starts with <, otherwise don't try stripping anything -jQuery.validator.addMethod("strippedminlength", function(value, element, param) { - return jQuery(value).text().length >= param; -}, jQuery.validator.format("Please enter at least {0} characters")); - -// same as email, but TLD is optional -jQuery.validator.addMethod("email2", function(value, element, param) { - return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value); -}, jQuery.validator.messages.email); - -// same as url, but TLD is optional -jQuery.validator.addMethod("url2", function(value, element, param) { - return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); -}, jQuery.validator.messages.url); - -// NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator -// Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0 -// Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings) -jQuery.validator.addMethod("creditcardtypes", function(value, element, param) { - if (/[^0-9-]+/.test(value)) { - return false; - } - - value = value.replace(/\D/g, ""); - - var validTypes = 0x0000; - - if (param.mastercard) - validTypes |= 0x0001; - if (param.visa) - validTypes |= 0x0002; - if (param.amex) - validTypes |= 0x0004; - if (param.dinersclub) - validTypes |= 0x0008; - if (param.enroute) - validTypes |= 0x0010; - if (param.discover) - validTypes |= 0x0020; - if (param.jcb) - validTypes |= 0x0040; - if (param.unknown) - validTypes |= 0x0080; - if (param.all) - validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080; - - if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard - return value.length == 16; - } - if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa - return value.length == 16; - } - if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex - return value.length == 15; - } - if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub - return value.length == 14; - } - if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute - return value.length == 15; - } - if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover - return value.length == 16; - } - if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb - return value.length == 16; - } - if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb - return value.length == 15; - } - if (validTypes & 0x0080) { //unknown - return true; - } - return false; -}, "Please enter a valid credit card number."); - -jQuery.validator.addMethod("ipv4", function(value, element, param) { - return this.optional(element) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value); -}, "Please enter a valid IP v4 address."); - -jQuery.validator.addMethod("ipv6", function(value, element, param) { - return this.optional(element) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value); -}, "Please enter a valid IP v6 address."); - -/** -* Return true if the field value matches the given format RegExp -* -* @example jQuery.validator.methods.pattern("AR1004",element,/^AR\d{4}$/) -* @result true -* -* @example jQuery.validator.methods.pattern("BR1004",element,/^AR\d{4}$/) -* @result false -* -* @name jQuery.validator.methods.pattern -* @type Boolean -* @cat Plugins/Validate/Methods -*/ -jQuery.validator.addMethod("pattern", function(value, element, param) { - if (this.optional(element)) { - return true; - } - if (typeof param === 'string') { - param = new RegExp('^(?:' + param + ')$'); - } - return param.test(value); -}, "Invalid format."); - - -/* - * Lets you say "at least X inputs that match selector Y must be filled." - * - * The end result is that neither of these inputs: - * - * - * - * - * ...will validate unless at least one of them is filled. - * - * partnumber: {require_from_group: [1,".productinfo"]}, - * description: {require_from_group: [1,".productinfo"]} - * - */ -jQuery.validator.addMethod("require_from_group", function(value, element, options) { - var validator = this; - var selector = options[1]; - var validOrNot = $(selector, element.form).filter(function() { - return validator.elementValue(this); - }).length >= options[0]; - - if(!$(element).data('being_validated')) { - var fields = $(selector, element.form); - fields.data('being_validated', true); - fields.valid(); - fields.data('being_validated', false); - } - return validOrNot; -}, jQuery.format("Please fill at least {0} of these fields.")); - -/* - * Lets you say "either at least X inputs that match selector Y must be filled, - * OR they must all be skipped (left blank)." - * - * The end result, is that none of these inputs: - * - * - * - * - * - * ...will validate unless either at least two of them are filled, - * OR none of them are. - * - * partnumber: {skip_or_fill_minimum: [2,".productinfo"]}, - * description: {skip_or_fill_minimum: [2,".productinfo"]}, - * color: {skip_or_fill_minimum: [2,".productinfo"]} - * - */ -jQuery.validator.addMethod("skip_or_fill_minimum", function(value, element, options) { - var validator = this; - - numberRequired = options[0]; - selector = options[1]; - var numberFilled = $(selector, element.form).filter(function() { - return validator.elementValue(this); - }).length; - var valid = numberFilled >= numberRequired || numberFilled === 0; - - if(!$(element).data('being_validated')) { - var fields = $(selector, element.form); - fields.data('being_validated', true); - fields.valid(); - fields.data('being_validated', false); - } - return valid; -}, jQuery.format("Please either skip these fields or fill at least {0} of them.")); - -// Accept a value from a file input based on a required mimetype -jQuery.validator.addMethod("accept", function(value, element, param) { - // Split mime on commas incase we have multiple types we can accept - var typeParam = typeof param === "string" ? param.replace(/,/g, '|') : "image/*", - optionalValue = this.optional(element), - i, file; - - // Element is optional - if(optionalValue) { - return optionalValue; - } - - if($(element).attr("type") === "file") { - // If we are using a wildcard, make it regex friendly - typeParam = typeParam.replace("*", ".*"); - - // Check if the element has a FileList before checking each file - if(element.files && element.files.length) { - for(i = 0; i < element.files.length; i++) { - file = element.files[i]; - - // Grab the mimtype from the loaded file, verify it matches - if(!file.type.match(new RegExp( ".?(" + typeParam + ")$", "i"))) { - return false; - } - } - } - } - - // Either return true because we've validated each file, or because the - // browser does not support element.files and the FileList feature - return true; -}, jQuery.format("Please enter a value with a valid mimetype.")); - -// Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept -jQuery.validator.addMethod("extension", function(value, element, param) { - param = typeof param === "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif"; - return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); -}, jQuery.format("Please enter a value with a valid extension.")); diff --git a/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js b/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js deleted file mode 100644 index 60533e43..00000000 --- a/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012 -* https://github.com/jzaefferer/jquery-validation -* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */ -(function(){function a(a){return a.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ").replace(/[.(),;:!?%#$'"_+=\/-]*/g,"")}jQuery.validator.addMethod("maxWords",function(b,c,d){return this.optional(c)||a(b).match(/\b\w+\b/g).length<=d},jQuery.validator.format("Please enter {0} words or less.")),jQuery.validator.addMethod("minWords",function(b,c,d){return this.optional(c)||a(b).match(/\b\w+\b/g).length>=d},jQuery.validator.format("Please enter at least {0} words.")),jQuery.validator.addMethod("rangeWords",function(b,c,d){var e=a(b),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},jQuery.validator.format("Please enter between {0} and {1} words."))})(),jQuery.validator.addMethod("letterswithbasicpunc",function(a,b){return this.optional(b)||/^[a-z\-.,()'\"\s]+$/i.test(a)},"Letters or punctuation only please"),jQuery.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letters, numbers, and underscores only please"),jQuery.validator.addMethod("lettersonly",function(a,b){return this.optional(b)||/^[a-z]+$/i.test(a)},"Letters only please"),jQuery.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),jQuery.validator.addMethod("ziprange",function(a,b){return this.optional(b)||/^90[2-5]\d\{2\}-\d{4}$/.test(a)},"Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx"),jQuery.validator.addMethod("zipcodeUS",function(a,b){return this.optional(b)||/\d{5}-\d{4}$|^\d{5}$/.test(a)},"The specified US ZIP Code is invalid"),jQuery.validator.addMethod("integer",function(a,b){return this.optional(b)||/^-?\d+$/.test(a)},"A positive or negative non-decimal number please"),jQuery.validator.addMethod("vinUS",function(a){if(a.length!=17)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;b<17;b++){e=j[b],d=a.slice(b,b+1),b==8&&(g=d);if(!isNaN(d))d*=e;else for(c=0;c9&&a.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/)},"Please specify a valid phone number"),jQuery.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:(?:\d{5}\)?\s?\d{4,5})|(?:\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3}))|(?:\d{3}\)?\s?\d{3}\s?\d{3,4})|(?:\d{2}\)?\s?\d{4}\s?\d{4}))$/)},"Please specify a valid phone number"),jQuery.validator.addMethod("mobileUK",function(a,b){return a=a.replace(/\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[45789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),jQuery.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[45789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),jQuery.validator.addMethod("postcodeUK",function(a,b){return a=a.toUpperCase().replace(/\s+/g,""),this.optional(b)||a.match(/^([^QZ][^IJZ]{0,1}\d{1,2})(\d[^CIKMOV]{2})$/)||a.match(/^([^QV]\d[ABCDEFGHJKSTUW])(\d[^CIKMOV]{2})$/)||a.match(/^([^QV][^IJZ]\d[ABEHMNPRVWXY])(\d[^CIKMOV]{2})$/)||a.match(/^(GIR)(0AA)$/)||a.match(/^(BFPO)(\d{1,4})$/)||a.match(/^(BFPO)(C\/O\d{1,3})$/)},"Please specify a valid postcode"),jQuery.validator.addMethod("strippedminlength",function(a,b,c){return jQuery(a).text().length>=c},jQuery.validator.format("Please enter at least {0} characters")),jQuery.validator.addMethod("email2",function(a,b,c){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(a)},jQuery.validator.messages.email),jQuery.validator.addMethod("url2",function(a,b,c){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},jQuery.validator.messages.url),jQuery.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),d&1&&/^(5[12345])/.test(a)?a.length==16:d&2&&/^(4)/.test(a)?a.length==16:d&4&&/^(3[47])/.test(a)?a.length==15:d&8&&/^(3(0[012345]|[68]))/.test(a)?a.length==14:d&16&&/^(2(014|149))/.test(a)?a.length==15:d&32&&/^(6011)/.test(a)?a.length==16:d&64&&/^(3)/.test(a)?a.length==16:d&64&&/^(2131|1800)/.test(a)?a.length==15:d&128?!0:!1},"Please enter a valid credit card number."),jQuery.validator.addMethod("ipv4",function(a,b,c){return this.optional(b)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(a)},"Please enter a valid IP v4 address."),jQuery.validator.addMethod("ipv6",function(a,b,c){return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)},"Please enter a valid IP v6 address."),jQuery.validator.addMethod("pattern",function(a,b,c){return this.optional(b)?!0:(typeof c=="string"&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),jQuery.validator.addMethod("require_from_group",function(a,b,c){var d=this,e=c[1],f=$(e,b.form).filter(function(){return d.elementValue(this)}).length>=c[0];if(!$(b).data("being_validated")){var g=$(e,b.form);g.data("being_validated",!0),g.valid(),g.data("being_validated",!1)}return f},jQuery.format("Please fill at least {0} of these fields.")),jQuery.validator.addMethod("skip_or_fill_minimum",function(a,b,c){var d=this;numberRequired=c[0],selector=c[1];var e=$(selector,b.form).filter(function(){return d.elementValue(this)}).length,f=e>=numberRequired||e===0;if(!$(b).data("being_validated")){var g=$(selector,b.form);g.data("being_validated",!0),g.valid(),g.data("being_validated",!1)}return f},jQuery.format("Please either skip these fields or fill at least {0} of them.")),jQuery.validator.addMethod("accept",function(a,b,c){var d=typeof c=="string"?c.replace(/,/g,"|"):"image/*",e=this.optional(b),f,g;if(e)return e;if($(b).attr("type")==="file"){d=d.replace("*",".*");if(b.files&&b.files.length)for(f=0;f
+ value="{{ data_hmac('{}:{}Geno'.format(marker.name, dataset.group.name)) }}"> {{ loop.index }} {% if geno_db_exists == "True" %}{{ marker.name }}{% else %}{{ marker.name }}{% endif %}
.jqplot-targetStyles for the plot target div.  These will be cascaded down to all plot elements according to css rules.
.jqplot-axisStyles for all axes
.jqplot-xaxisStyles applied to the primary x axis only.
.jqplot-yaxisStyles applied to the primary y axis only.
.jqplot-x2axis, .jqplot-x3axis, ...Styles applied to the 2nd, 3rd, etc. x axis only.
.jqplot-y2axis, .jqplot-y3axis, ...Styles applied to the 2nd, 3rd, etc.y axis only.
.jqplot-axis-tickStyles applied to all axis ticks
.jqplot-xaxis-tickStyles applied to primary x axis ticks only.
.jqplot-x2axis-tickStyles applied to secondary x axis ticks only.
.jqplot-yaxis-tickStyles applied to primary y axis ticks only.
.jqplot-y2axis-tickStyles applied to secondary y axis ticks only.
table.jqplot-table-legendStyles applied to the legend box table.
.jqplot-titleStyles applied to the title.
.jqplot-cursor-tooltipStyles applied to the cursor tooltip
.jqplot-highlighter-tooltipStyles applied to the highlighter tooltip.
div.jqplot-table-legend-swatchthe div element used for the colored swatch on the legend.

Note that axes will be assigned 2 classes like: class=”.jqplot-axis .jqplot-xaxis”.

- - - - - - - - - - - - -
This document is out of date.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html deleted file mode 100644 index 5abc8339..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html +++ /dev/null @@ -1,292 +0,0 @@ - - -jqPlot Options - - - - - - - - - -

This document is out of date.  While the options described here should still be relavent and valid, it has not been updated for many new options.  Sorry for this inconvenience.

This document describes the options available to jqPlot.  These are set with the third argument to the $.jqplot(‘target’, data, options) function.  Options are using the following convention:

property: default, // notes

This document is not complete!  Not all options are shown!  Also, Options marked with * in the notes are post 0.7.1 additions.  They will be available in the next release.  Further information about the options can be found in the online API documentation.  For details on how the options relate to the API documentation, see the Options Tutorial in the optionsTutorial.txt file.

options =
-{
-    seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12",
-        "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"],  // colors that will
-         // be assigned to the series.  If there are more series than colors, colors
-         // will wrap around and start at the beginning again.
-
-    stackSeries: false, // if true, will create a stack plot.
-                        // Currently supported by line and bar graphs.
-
-    title: '',      // Title for the plot.  Can also be specified as an object like:
-
-    title: {
-        text: '',   // title for the plot,
-        show: true,
-    },
-
-    axesDefaults: {
-        show: false,    // wether or not to renderer the axis.  Determined automatically.
-        min: null,      // minimum numerical value of the axis.  Determined automatically.
-        max: null,      // maximum numverical value of the axis.  Determined automatically.
-        pad: 1.2,       // a factor multiplied by the data range on the axis to give the
-                        // axis range so that data points don't fall on the edges of the axis.
-        ticks: [],      // a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...]
-                        // array of ticks to use.  Computed automatically.
-        numberTicks: undefined,
-        renderer: $.jqplot.LinearAxisRenderer,  // renderer to use to draw the axis,
-        rendererOptions: {},    // options to pass to the renderer.  LinearAxisRenderer
-                                // has no options,
-        tickOptions: {
-            mark: 'outside',    // Where to put the tick mark on the axis
-                                // 'outside', 'inside' or 'cross',
-            showMark: true,
-            showGridline: true, // wether to draw a gridline (across the whole grid) at this tick,
-            markSize: 4,        // length the tick will extend beyond the grid in pixels.  For
-                                // 'cross', length will be added above and below the grid boundary,
-            show: true,         // wether to show the tick (mark and label),
-            showLabel: true,    // wether to show the text label at the tick,
-            formatString: '',   // format string to use with the axis tick formatter
-        }
-        showTicks: true,        // wether or not to show the tick labels,
-        showTickMarks: true,    // wether or not to show the tick marks
-    },
-
-    axes: {
-        xaxis: {
-            // same options as axesDefaults
-        },
-        yaxis: {
-            // same options as axesDefaults
-        },
-        x2axis: {
-            // same options as axesDefaults
-        },
-        y2axis: {
-            // same options as axesDefaults
-        }
-    },
-
-    seriesDefaults: {
-        show: true,     // wether to render the series.
-        xaxis: 'xaxis', // either 'xaxis' or 'x2axis'.
-        yaxis: 'yaxis', // either 'yaxis' or 'y2axis'.
-        label: '',      // label to use in the legend for this line.
-        color: '',      // CSS color spec to use for the line.  Determined automatically.
-        lineWidth: 2.5, // Width of the line in pixels.
-        shadow: true,   // show shadow or not.
-        shadowAngle: 45,    // angle (degrees) of the shadow, clockwise from x axis.
-        shadowOffset: 1.25, // offset from the line of the shadow.
-        shadowDepth: 3,     // Number of strokes to make when drawing shadow.  Each
-                            // stroke offset by shadowOffset from the last.
-        shadowAlpha: 0.1,   // Opacity of the shadow.
-        showLine: true,     // whether to render the line segments or not.
-        showMarker: true,   // render the data point markers or not.
-        fill: false,        // fill under the line,
-        fillAndStroke: false,       // *stroke a line at top of fill area.
-        fillColor: undefined,       // *custom fill color for filled lines (default is line color).
-        fillAlpha: undefined,       // *custom alpha to apply to fillColor.
-        renderer: $.jqplot.LineRenderer],    // renderer used to draw the series.
-        rendererOptions: {}, // options passed to the renderer.  LineRenderer has no options.
-        markerRenderer: $.jqplot.MarkerRenderer,    // renderer to use to draw the data
-                                                    // point markers.
-        markerOptions: {
-            show: true,             // wether to show data point markers.
-            style: 'filledCircle',  // circle, diamond, square, filledCircle.
-                                    // filledDiamond or filledSquare.
-            lineWidth: 2,       // width of the stroke drawing the marker.
-            size: 9,            // size (diameter, edge length, etc.) of the marker.
-            color: '#666666'    // color of marker, set to color of line by default.
-            shadow: true,       // wether to draw shadow on marker or not.
-            shadowAngle: 45,    // angle of the shadow.  Clockwise from x axis.
-            shadowOffset: 1,    // offset from the line of the shadow,
-            shadowDepth: 3,     // Number of strokes to make when drawing shadow.  Each stroke
-                                // offset by shadowOffset from the last.
-            shadowAlpha: 0.07   // Opacity of the shadow
-        }
-    },
-
-    series:[
-        {Each series has same options as seriesDefaults},
-        {You can override each series individually here}
-    ],
-
-    legend: {
-        show: false,
-        location: 'ne',     // compass direction, nw, n, ne, e, se, s, sw, w.
-        xoffset: 12,        // pixel offset of the legend box from the x (or x2) axis.
-        yoffset: 12,        // pixel offset of the legend box from the y (or y2) axis.
-    },
-
-    grid: {
-        drawGridLines: true,        // wether to draw lines across the grid or not.
-        gridLineColor: '#cccccc'    // *Color of the grid lines.
-        background: '#fffdf6',      // CSS color spec for background color of grid.
-        borderColor: '#999999',     // CSS color spec for border around grid.
-        borderWidth: 2.0,           // pixel width of border around grid.
-        shadow: true,               // draw a shadow for grid.
-        shadowAngle: 45,            // angle of the shadow.  Clockwise from x axis.
-        shadowOffset: 1.5,          // offset from the line of the shadow.
-        shadowWidth: 3,             // width of the stroke for the shadow.
-        shadowDepth: 3,             // Number of strokes to make when drawing shadow.
-                                    // Each stroke offset by shadowOffset from the last.
-        shadowAlpha: 0.07           // Opacity of the shadow
-        renderer: $.jqplot.CanvasGridRenderer,  // renderer to use to draw the grid.
-        rendererOptions: {}         // options to pass to the renderer.  Note, the default
-                                    // CanvasGridRenderer takes no additional options.
-    },
-
-    // Plugin and renderer options.
-
-    // BarRenderer.
-    // With BarRenderer, you can specify additional options in the rendererOptions object
-    // on the series or on the seriesDefaults object.  Note, some options are respecified
-    // (like shadowDepth) to override lineRenderer defaults from which BarRenderer inherits.
-
-    seriesDefaults: {
-        rendererOptions: {
-            barPadding: 8,      // number of pixels between adjacent bars in the same
-                                // group (same category or bin).
-            barMargin: 10,      // number of pixels between adjacent groups of bars.
-            barDirection: 'vertical', // vertical or horizontal.
-            barWidth: null,     // width of the bars.  null to calculate automatically.
-            shadowOffset: 2,    // offset from the bar edge to stroke the shadow.
-            shadowDepth: 5,     // nuber of strokes to make for the shadow.
-            shadowAlpha: 0.8,   // transparency of the shadow.
-        }
-    },
-
-    // Cursor
-    // Options are passed to the cursor plugin through the "cursor" object at the top
-    // level of the options object.
-
-    cursor: {
-        style: 'crosshair',     // A CSS spec for the cursor type to change the
-                                // cursor to when over plot.
-        show: true,
-        showTooltip: true,      // show a tooltip showing cursor position.
-        followMouse: false,     // wether tooltip should follow the mouse or be stationary.
-        tooltipLocation: 'se',  // location of the tooltip either relative to the mouse
-                                // (followMouse=true) or relative to the plot.  One of
-                                // the compass directions, n, ne, e, se, etc.
-        tooltipOffset: 6,       // pixel offset of the tooltip from the mouse or the axes.
-        showTooltipGridPosition: false,     // show the grid pixel coordinates of the mouse
-                                            // in the tooltip.
-        showTooltipUnitPosition: true,      // show the coordinates in data units of the mouse
-                                            // in the tooltip.
-        tooltipFormatString: '%.4P',    // sprintf style format string for tooltip values.
-        useAxesFormatters: true,        // wether to use the same formatter and formatStrings
-                                        // as used by the axes, or to use the formatString
-                                        // specified on the cursor with sprintf.
-        tooltipAxesGroups: [],  // show only specified axes groups in tooltip.  Would specify like:
-                                // [['xaxis', 'yaxis'], ['xaxis', 'y2axis']].  By default, all axes
-                                // combinations with for the series in the plot are shown.
-
-    },
-
-    // Dragable
-    // Dragable options are specified with the "dragable" object at the top level
-    // of the options object.
-
-    dragable: {
-        color: undefined,       // custom color to use for the dragged point and dragged line
-                                // section. default will use a transparent variant of the line color.
-        constrainTo: 'none',    // Constrain dragging motion to an axis: 'x', 'y', or 'none'.
-    },
-
-    // Highlighter
-    // Highlighter options are specified with the "highlighter" object at the top level
-    // of the options object.
-
-    highlighter: {
-        lineWidthAdjust: 2.5,   // pixels to add to the size line stroking the data point marker
-                                // when showing highlight.  Only affects non filled data point markers.
-        sizeAdjust: 5,          // pixels to add to the size of filled markers when drawing highlight.
-        showTooltip: true,      // show a tooltip with data point values.
-        tooltipLocation: 'nw',  // location of tooltip: n, ne, e, se, s, sw, w, nw.
-        fadeTooltip: true,      // use fade effect to show/hide tooltip.
-        tooltipFadeSpeed: "fast"// slow, def, fast, or a number of milliseconds.
-        tooltipOffset: 2,       // pixel offset of tooltip from the highlight.
-        tooltipAxes: 'both',    // which axis values to display in the tooltip, x, y or both.
-        tooltipSeparator: ', '  // separator between values in the tooltip.
-        useAxesFormatters: true // use the same format string and formatters as used in the axes to
-                                // display values in the tooltip.
-        tooltipFormatString: '%.5P' // sprintf format string for the tooltip.  only used if
-                                    // useAxesFormatters is false.  Will use sprintf formatter with
-                                    // this string, not the axes formatters.
-    },
-
-    // LogAxisRenderer
-    // LogAxisRenderer add 2 options to the axes object.  These options are specified directly on
-    // the axes or axesDefaults object.
-
-    axesDefaults: {
-        base: 10,                   // the logarithmic base.
-        tickDistribution: 'even',   // 'even' or 'power'.  'even' will produce with even visiual (pixel)
-                                    // spacing on the axis.  'power' will produce ticks spaced by
-                                    // increasing powers of the log base.
-    },
-
-    // PieRenderer
-    // PieRenderer accepts options from the rendererOptions object of the series or seriesDefaults object.
-
-    seriesDefaults: {
-        rendererOptions: {
-            diameter: undefined, // diameter of pie, auto computed by default.
-            padding: 20,        // padding between pie and neighboring legend or plot margin.
-            sliceMargin: 0,     // gap between slices.
-            fill: true,         // render solid (filled) slices.
-            shadowOffset: 2,    // offset of the shadow from the chart.
-            shadowDepth: 5,     // Number of strokes to make when drawing shadow.  Each stroke
-                                // offset by shadowOffset from the last.
-            shadowAlpha: 0.07   // Opacity of the shadow
-        }
-    },
-
-    // Trendline
-    // Trendline takes options on the trendline object of the series or seriesDefaults object.
-
-    seriesDefaults: {
-        trendline: {
-            show: true,         // show the trend line
-            color: '#666666',   // CSS color spec for the trend line.
-            label: '',          // label for the trend line.
-            type: 'linear',     // 'linear', 'exponential' or 'exp'
-            shadow: true,       // show the trend line shadow.
-            lineWidth: 1.5,     // width of the trend line.
-            shadowAngle: 45,    // angle of the shadow.  Clockwise from x axis.
-            shadowOffset: 1.5,  // offset from the line of the shadow.
-            shadowDepth: 3,     // Number of strokes to make when drawing shadow.
-                                // Each stroke offset by shadowOffset from the last.
-            shadowAlpha: 0.07   // Opacity of the shadow
-        }
-    }
-}
- -
- - - - - - - - - - -
This document will help you understand how jqPlot’s options relate to the API documentation and the jqPlot object itself.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html deleted file mode 100644 index a268b1af..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html +++ /dev/null @@ -1,47 +0,0 @@ - - -$.jqplot.AxisLabelRenderer - - - - - - - - - -

Renderer to place labels on the axes.

Summary
$.jqplot.AxisLabelRendererRenderer to place labels on the axes.
Properties
showwether or not to show the tick (mark and label).
labelThe text or html for the label.
escapeHTMLtrue to escape HTML entities in the label.
- -

Properties

- -

show

this.show = true

wether or not to show the tick (mark and label).

- -

label

this.label = ''

The text or html for the label.

- -

escapeHTML

this.escapeHTML = false

true to escape HTML entities in the label.

- -
- - - - - - - - - - -
this.show = true
wether or not to show the tick (mark and label).
this.label = ''
The text or html for the label.
this.escapeHTML = false
true to escape HTML entities in the label.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html deleted file mode 100644 index 13ea1899..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html +++ /dev/null @@ -1,73 +0,0 @@ - - -$.jqplot.AxisTickRenderer - - - - - - - - - -

A “tick” object showing the value of a tick/gridline on the plot.

Summary
$.jqplot.AxisTickRendererA “tick” object showing the value of a tick/gridline on the plot.
Properties
marktick mark on the axis.
showMarkwether or not to show the mark on the axis.
showGridlinewether or not to draw the gridline on the grid at this tick.
isMinorTickif this is a minor tick.
sizeLength of the tick beyond the grid in pixels.
markSizeLength of the tick marks in pixels.
showwether or not to show the tick (mark and label).
showLabelwether or not to show the label.
formatterA class of a formatter for the tick text.
prefixString to prepend to the tick label.
suffixString to append to the tick label.
formatStringstring passed to the formatter.
fontFamilycss spec for the font-family css attribute.
fontSizecss spec for the font-size css attribute.
textColorcss spec for the color attribute.
escapeHTMLtrue to escape HTML entities in the label.
- -

Properties

- -

mark

this.mark = 'outside'

tick mark on the axis.  One of ‘inside’, ‘outside’, ‘cross’, ‘’ or null.

- -

showMark

this.showMark = true

wether or not to show the mark on the axis.

- -

showGridline

this.showGridline = true

wether or not to draw the gridline on the grid at this tick.

- -

isMinorTick

this.isMinorTick = false

if this is a minor tick.

- -

size

this.size = 4

Length of the tick beyond the grid in pixels.  DEPRECATED: This has been superceeded by markSize

- -

markSize

this.markSize = 6

Length of the tick marks in pixels.  For ‘cross’ style, length will be stoked above and below axis, so total length will be twice this.

- -

show

this.show = true

wether or not to show the tick (mark and label).  Setting this to false requires more testing.  It is recommended to set showLabel and showMark to false instead.

- -

showLabel

this.showLabel = true

wether or not to show the label.

- -

formatter

this.formatter = $.jqplot.DefaultTickFormatter

A class of a formatter for the tick text.  sprintf by default.

- -

prefix

this.prefix = ''

String to prepend to the tick label.  Prefix is prepended to the formatted tick label.

- -

suffix

this.suffix = ''

String to append to the tick label.  Suffix is appended to the formatted tick label.

- -

formatString

this.formatString = ''

string passed to the formatter.

- -

fontFamily

this.fontFamily

css spec for the font-family css attribute.

- -

fontSize

this.fontSize

css spec for the font-size css attribute.

- -

textColor

this.textColor

css spec for the color attribute.

- -

escapeHTML

this.escapeHTML = false

true to escape HTML entities in the label.

- -
- - - - - - - - - - -
this.mark = 'outside'
tick mark on the axis.
this.showMark = true
wether or not to show the mark on the axis.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.isMinorTick = false
if this is a minor tick.
this.size = 4
Length of the tick beyond the grid in pixels.
this.markSize = 6
Length of the tick marks in pixels.
this.show = true
wether or not to show the tick (mark and label).
this.showLabel = true
wether or not to show the label.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.prefix = ''
String to prepend to the tick label.
this.suffix = ''
String to append to the tick label.
this.formatString = ''
string passed to the formatter.
this.fontFamily
css spec for the font-family css attribute.
this.fontSize
css spec for the font-size css attribute.
this.textColor
css spec for the color attribute.
this.escapeHTML = false
true to escape HTML entities in the label.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html deleted file mode 100644 index f069f6b6..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html +++ /dev/null @@ -1,39 +0,0 @@ - - -$.jqplot.CanvasGridRenderer - - - - - - - - - -

The default jqPlot grid renderer, creating a grid on a canvas element.  The renderer has no additional options beyond the Grid class.

- -
- - - - - - - - - - -
Object representing the grid on which the plot is drawn.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html deleted file mode 100644 index 9fa9cf9d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html +++ /dev/null @@ -1,389 +0,0 @@ - - -jqPlot Charts - - - - - - - - - -

Pure JavaScript plotting plugin for jQuery.

Summary
jqPlot ChartsPure JavaScript plotting plugin for jQuery.
Versionversion: 1.0.4 revision: 1121
Copyright & LicenseCopyright © 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses.
IntroductionjqPlot requires jQuery (1.4+ required for certain features).
UsageSee jqPlot Usage
Available OptionsSee jqPlot Options for a list of options available thorugh the options object (not complete yet!)
Options UsageSee Options Tutorial
ChangesSee Change Log
$.jqplotjQuery function called by the user to create a plot.
Hooks
jqPlot Pugin Hooks
AxisAn individual axis object.
PropertiesAxes options are specified within an axes object at the top level of the plot options like so:
showWether to display the axis on the graph.
tickRendererA class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
tickOptionsOptions that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
labelRendererA class of a rendering engine for creating an axis label.
labelOptionsOptions passed to the label renderer.
labelLabel for the axis
showLabeltrue to show the axis label.
minminimum value of the axis (in data units, not pixels).
maxmaximum value of the axis (in data units, not pixels).
autoscaleDEPRECATED the default scaling algorithm produces superior results.
padPadding to extend the range above and below the data bounds.
padMaxPadding to extend the range above data bounds.
padMinPadding to extend the range below data bounds.
ticks1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
numberTicksDesired number of ticks.
tickIntervalnumber of units between ticks.
rendererA class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
rendererOptionsrenderer specific options.
showTicksWether to show the ticks (both marks and labels) or not.
showTickMarksWether to show the tick marks (line crossing grid) or not.
showMinorTicksWether or not to show minor ticks.
drawMajorGridlinesTrue to draw gridlines for major axis ticks.
drawMinorGridlinesTrue to draw gridlines for minor ticks.
drawMajorTickMarksTrue to draw tick marks for major axis ticks.
drawMinorTickMarksTrue to draw tick marks for minor ticks.
useSeriesColorUse the color of the first series associated with this axis for the tick marks and line bordering this axis.
borderWidthwidth of line stroked at the border of the axis.
borderColorcolor of the border adjacent to the axis.
scaleToHiddenSeriesTrue to include hidden series when computing axes bounds and scaling.
syncTickstrue to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
tickSpacingApproximate pixel spacing between ticks on graph.
LegendLegend object.
Properties
showWether to display the legend on the graph.
locationPlacement of the legend.
labelsArray of labels to use.
showLabelstrue to show the label text on the legend.
showSwatchtrue to show the color swatches on the legend.
placement“insideGrid” places legend inside the grid area of the plot.
xoffsetDEPRECATED.
yoffsetDEPRECATED.
bordercss spec for the border around the legend box.
backgroundcss spec for the background of the legend box.
textColorcss color spec for the legend text.
fontFamilycss font-family spec for the legend text.
fontSizecss font-size spec for the legend text.
rowSpacingcss padding-top spec for the rows in the legend.
rendererOptionsrenderer specific options passed to the renderer.
predrawWether to draw the legend before the series or not.
marginTopCSS margin for the legend DOM element.
marginRightCSS margin for the legend DOM element.
marginBottomCSS margin for the legend DOM element.
marginLeftCSS margin for the legend DOM element.
escapeHtmlTrue to escape special characters with their html entity equivalents in legend text.
TitlePlot Title object.
Properties
texttext of the title;
showwether or not to show the title
fontFamilycss font-family spec for the text.
fontSizecss font-size spec for the text.
textAligncss text-align spec for the text.
textColorcss color spec for the text.
rendererA class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
rendererOptionsrenderer specific options passed to the renderer.
escapeHtmlTrue to escape special characters with their html entity equivalents in title text.
SeriesAn individual data series object.
PropertiesProperties will be assigned from a series array at the top level of the options.
showwether or not to draw the series.
xaxiswhich x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
yaxiswhich y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
rendererA class of a renderer which will draw the series, see $.jqplot.LineRenderer.
rendererOptionsOptions to pass on to the renderer.
labelLine label to use in the legend.
showLabeltrue to show label for this series in the legend.
colorcss color spec for the series
negativeColorcss color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
lineWidthwidth of the line in pixels.
lineJoinCanvas lineJoin style between segments of series.
lineCapCanvas lineCap style at ends of line.
linePatternline pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
shadowAngleShadow angle in degrees
shadowOffsetShadow offset from line in pixels
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowAlphaAlpha channel transparency of shadow.
breakOnNullWether line segments should be be broken at null value.
markerRendererA class of a renderer which will draw marker (e.g.
markerOptionsrenderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
showLinewether to actually draw the line or not.
showMarkerwether or not to show the markers at the data points.
index0 based index of this series in the plot series array.
filltrue or false, wether to fill under lines or in bars.
fillColorCSS color spec to use for fill under line.
fillAlphaAlpha transparency to apply to the fill under the line.
fillAndStrokeIf true will stroke the line (with color this.color) as well as fill under it.
disableStacktrue to not stack this series with other series in the plot.
neighborThresholdhow close or far (in pixels) the cursor must be from a point marker to detect the point.
fillToZerotrue will force bar and filled series to fill toward zero on the fill Axis.
fillToValuefill a filled series to this value on the fill axis.
fillAxisEither ‘x’ or ‘y’.
useNegativeColorstrue to color negative values differently in filled and bar charts.
GridObject representing the grid on which the plot is drawn.
Properties
drawGridlineswether to draw the gridlines on the plot.
gridLineColorcolor of the grid lines.
gridLineWidthwidth of the grid lines.
backgroundcss spec for the background color.
borderColorcss spec for the color of the grid border.
borderWidthwidth of the border in pixels.
drawBorderTrue to draw border around grid.
shadowwether to show a shadow behind the grid.
shadowAngleshadow angle in degrees
shadowOffsetOffset of each shadow stroke from the border in pixels
shadowWidthwidth of the stoke for the shadow
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowColoran optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
shadowAlphaAlpha channel transparency of shadow.
rendererInstance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
rendererOptionsOptions to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
jqPlotPlot object returned by call to $.jqplot.
PropertiesThese properties are specified at the top of the options object like so:
animateTrue to animate the series on initial plot draw (renderer dependent).
animateReplotTrue to animate series after a call to the replot() method.
axesup to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
datauser’s data.
dataRendererA callable which can be used to preprocess data passed into the plot.
dataRendererOptionsOptions that will be passed to the dataRenderer.
axesDefaultsdefault options that will be applied to all axes.
seriesDefaultsdefault options that will be applied to all series.
defaultAxisStart1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
fillBetweenFill between 2 line series in a plot.
fontSizecss spec for the font-size attribute.
gridSee Grid for grid specific options.
legendsee <$.jqplot.TableLegendRenderer>
noDataIndicatorOptions to set up a mock plot with a data loading indicator if no data is specified.
seriesArray of series object options.
seriesColorsAnn array of CSS color specifications that will be applied, in order, to the series in the plot.
sortDatafalse to not sort the data passed in by the user.
stackSeriestrue or false, creates a stack or “mountain” plot.
titleTitle object.
methods
initsets the plot target, checks data and applies user options to plot.
resetAxesScaleReset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
reInitializereinitialize plot for replotting.
quickInitQuick reinitialization plot for replotting.
destroyReleases all resources occupied by the plot
replotDoes a reinitialization of the plot followed by a redraw.
redrawEmpties the plot target div and redraws the plot.
drawDraws all elements of the plot into the container.
drawSeriesRedraws all or just one series on the plot.
moveSeriesToFrontThis method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
moveSeriesToBackThis method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
restorePreviousSeriesOrderThis method requires jQuery 1.4+ Restore the series canvas order to its previous state.
restoreOriginalSeriesOrderThis method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
- -

Version

version: 1.0.4 revision: 1121

- -

Copyright & License

Copyright © 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses.  This means that you can choose the license that best suits your project and use it accordingly.

See GPL Version 2 and MIT License contained within this distribution for further information.

The author would appreciate an email letting him know of any substantial use of jqPlot.  You can reach the author at: chris at jqplot dot com or see http://www.jqplot.com/info.php.  This is, of course, not required.

If you are feeling kind and generous, consider supporting the project by making a donation at: http://www.jqplot.com/donate.php.

sprintf functions contained in jqplot.sprintf.js by Ash Searle

version 2007.04.27 author Ash Searle http://hexmen.com/blog/2007/03/printf-sprintf/ http://hexmen.com/js/sprintf.js The author (Ash Searle) has placed this code in the public domain: “This code is unrestricted: you are free to use it however you like.”

- -

Introduction

jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.2 is included in the distribution.  To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and optionally the excanvas script for IE support in your web page:

<!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
-<script language="javascript" type="text/javascript" src="jquery-1.4.4.min.js"></script>
-<script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
-<link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />

jqPlot can be customized by overriding the defaults of any of the objects which make up the plot.  The general usage of jqplot is:

chart = $.jqplot('targetElemId', [dataArray,...], {optionsObject});

The options available to jqplot are detailed in jqPlot Options in the jqPlotOptions.txt file.

An actual call to $.jqplot() may look like the examples below:

chart = $.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);

or

dataArray = [34,12,43,55,77];
-chart = $.jqplot('targetElemId', [dataArray, ...], {title:'My Plot', axes:{yaxis:{min:20, max:100}}});

For more inforrmation, see jqPlot Usage.

- -

Usage

- -

Available Options

See jqPlot Options for a list of options available thorugh the options object (not complete yet!)

- -

Options Usage

- -

Changes

- -

$.jqplot

jQuery function called by the user to create a plot.

Parameters

targetID of target element to render the plot into.
dataan array of data series.
optionsuser defined options object.  See the individual classes for available options.

Properties

configobject to hold configuration information for jqPlot plot object.

attributes

enablePluginsFalse to disable plugins by default.  Plugins must then be explicitly enabled in the individual plot options.  Default: false.  This property sets the “show” property of certain plugins to true or false.  Only plugins that can be immediately active upon loading are affected.  This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.
defaultHeightDefault height for plots where no css height specification exists.  This is a jqplot wide default.
defaultWidthDefault height for plots where no css height specification exists.  This is a jqplot wide default.
- -

Hooks

- -

jqPlot Pugin Hooks

$.jqplot.preInitHookscalled before initialization.
$.jqplot.postInitHookscalled after initialization.
$.jqplot.preParseOptionsHookscalled before user options are parsed.
$.jqplot.postParseOptionsHookscalled after user options are parsed.
$.jqplot.preDrawHookscalled before plot draw.
$.jqplot.postDrawHookscalled after plot draw.
$.jqplot.preDrawSeriesHookscalled before each series is drawn.
$.jqplot.postDrawSeriesHookscalled after each series is drawn.
$.jqplot.preDrawLegendHookscalled before the legend is drawn.
$.jqplot.addLegendRowHookscalled at the end of legend draw, so plugins can add rows to the legend table.
$.jqplot.preSeriesInitHookscalled before series is initialized.
$.jqplot.postSeriesInitHookscalled after series is initialized.
$.jqplot.preParseSeriesOptionsHookscalled before series related options are parsed.
$.jqplot.postParseSeriesOptionsHookscalled after series related options are parsed.
$.jqplot.eventListenerHookscalled at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.
$.jqplot.preDrawSeriesShadowHookscalled before series shadows are drawn.
$.jqplot.postDrawSeriesShadowHookscalled after series shadows are drawn.
- -

Axis

An individual axis object.  Cannot be instantiated directly, but created by the Plot oject.  Axis properties can be set or overriden by the options passed in from the user.

Summary
PropertiesAxes options are specified within an axes object at the top level of the plot options like so:
showWether to display the axis on the graph.
tickRendererA class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
tickOptionsOptions that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
labelRendererA class of a rendering engine for creating an axis label.
labelOptionsOptions passed to the label renderer.
labelLabel for the axis
showLabeltrue to show the axis label.
minminimum value of the axis (in data units, not pixels).
maxmaximum value of the axis (in data units, not pixels).
autoscaleDEPRECATED the default scaling algorithm produces superior results.
padPadding to extend the range above and below the data bounds.
padMaxPadding to extend the range above data bounds.
padMinPadding to extend the range below data bounds.
ticks1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
numberTicksDesired number of ticks.
tickIntervalnumber of units between ticks.
rendererA class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
rendererOptionsrenderer specific options.
showTicksWether to show the ticks (both marks and labels) or not.
showTickMarksWether to show the tick marks (line crossing grid) or not.
showMinorTicksWether or not to show minor ticks.
drawMajorGridlinesTrue to draw gridlines for major axis ticks.
drawMinorGridlinesTrue to draw gridlines for minor ticks.
drawMajorTickMarksTrue to draw tick marks for major axis ticks.
drawMinorTickMarksTrue to draw tick marks for minor ticks.
useSeriesColorUse the color of the first series associated with this axis for the tick marks and line bordering this axis.
borderWidthwidth of line stroked at the border of the axis.
borderColorcolor of the border adjacent to the axis.
scaleToHiddenSeriesTrue to include hidden series when computing axes bounds and scaling.
syncTickstrue to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
tickSpacingApproximate pixel spacing between ticks on graph.
- -

Properties

Axes options are specified within an axes object at the top level of the plot options like so:

{
-   axes: {
-       xaxis: {min: 5},
-       yaxis: {min: 2, max: 8, numberTicks:4},
-       x2axis: {pad: 1.5},
-       y2axis: {ticks:[22, 44, 66, 88]}
-       }
-}

There are 2 x axes, ‘xaxis’ and ‘x2axis’, and 9 yaxes, ‘yaxis’, ‘y2axis’.  ‘y3axis’, ...  Any or all of which may be specified.

- -

show

this.show = false

Wether to display the axis on the graph.

- -

tickRenderer

this.tickRenderer = $.jqplot.AxisTickRenderer

A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.

- -

tickOptions

this.tickOptions = {}

Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.

- -

labelRenderer

this.labelRenderer = $.jqplot.AxisLabelRenderer

A class of a rendering engine for creating an axis label.

- -

labelOptions

this.labelOptions = {}

Options passed to the label renderer.

- -

label

this.label = null

Label for the axis

- -

showLabel

this.showLabel = true

true to show the axis label.

- -

min

this.min = null

minimum value of the axis (in data units, not pixels).

- -

max

this.max = null

maximum value of the axis (in data units, not pixels).

- -

autoscale

this.autoscale = false

DEPRECATED the default scaling algorithm produces superior results.

- -

pad

this.pad = 1.2

Padding to extend the range above and below the data bounds.  The data range is multiplied by this factor to determine minimum and maximum axis bounds.  A value of 0 will be interpreted to mean no padding, and pad will be set to 1.0.

- -

padMax

this.padMax = null

Padding to extend the range above data bounds.  The top of the data range is multiplied by this factor to determine maximum axis bounds.  A value of 0 will be interpreted to mean no padding, and padMax will be set to 1.0.

- -

padMin

this.padMin = null

Padding to extend the range below data bounds.  The bottom of the data range is multiplied by this factor to determine minimum axis bounds.  A value of 0 will be interpreted to mean no padding, and padMin will be set to 1.0.

- -

ticks

this.ticks = []

1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.  If no label is specified, the value is formatted into an appropriate label.

- -

numberTicks

this.numberTicks

Desired number of ticks.  Default is to compute automatically.

- -

tickInterval

this.tickInterval

number of units between ticks.  Mutually exclusive with numberTicks.

- -

renderer

this.renderer = $.jqplot.LinearAxisRenderer

A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.

- -

rendererOptions

this.rendererOptions = {}

renderer specific options.  See $.jqplot.LinearAxisRenderer for options.

- -

showTicks

this.showTicks = true

Wether to show the ticks (both marks and labels) or not.  Will not override showMark and showLabel options if specified on the ticks themselves.

- -

showTickMarks

this.showTickMarks = true

Wether to show the tick marks (line crossing grid) or not.  Overridden by showTicks and showMark option of tick itself.

- -

showMinorTicks

this.showMinorTicks = true

Wether or not to show minor ticks.  This is renderer dependent.

- -

drawMajorGridlines

this.drawMajorGridlines = true

True to draw gridlines for major axis ticks.

- -

drawMinorGridlines

this.drawMinorGridlines = false

True to draw gridlines for minor ticks.

- -

drawMajorTickMarks

this.drawMajorTickMarks = true

True to draw tick marks for major axis ticks.

- -

drawMinorTickMarks

this.drawMinorTickMarks = true

True to draw tick marks for minor ticks.  This is renderer dependent.

- -

useSeriesColor

this.useSeriesColor = false

Use the color of the first series associated with this axis for the tick marks and line bordering this axis.

- -

borderWidth

this.borderWidth = null

width of line stroked at the border of the axis.  Defaults to the width of the grid boarder.

- -

borderColor

this.borderColor = null

color of the border adjacent to the axis.  Defaults to grid border color.

- -

scaleToHiddenSeries

this.scaleToHiddenSeries = false

True to include hidden series when computing axes bounds and scaling.

- -

syncTicks

this.syncTicks = null

true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.  This has an impact on autoscaling algorithm, however.  In general, autoscaling an individual axis will work better if it does not have to sync ticks.

- -

tickSpacing

this.tickSpacing = 75

Approximate pixel spacing between ticks on graph.  Used during autoscaling.  This number will be an upper bound, actual spacing will be less.

- -

Legend

Legend object.  Cannot be instantiated directly, but created by the Plot oject.  Legend properties can be set or overriden by the options passed in from the user.

Summary
Properties
showWether to display the legend on the graph.
locationPlacement of the legend.
labelsArray of labels to use.
showLabelstrue to show the label text on the legend.
showSwatchtrue to show the color swatches on the legend.
placement“insideGrid” places legend inside the grid area of the plot.
xoffsetDEPRECATED.
yoffsetDEPRECATED.
bordercss spec for the border around the legend box.
backgroundcss spec for the background of the legend box.
textColorcss color spec for the legend text.
fontFamilycss font-family spec for the legend text.
fontSizecss font-size spec for the legend text.
rowSpacingcss padding-top spec for the rows in the legend.
rendererOptionsrenderer specific options passed to the renderer.
predrawWether to draw the legend before the series or not.
marginTopCSS margin for the legend DOM element.
marginRightCSS margin for the legend DOM element.
marginBottomCSS margin for the legend DOM element.
marginLeftCSS margin for the legend DOM element.
escapeHtmlTrue to escape special characters with their html entity equivalents in legend text.
- -

Properties

- -

show

this.show = false

Wether to display the legend on the graph.

- -

location

this.location = 'ne'

Placement of the legend.  one of the compass directions: nw, n, ne, e, se, s, sw, w

- -

labels

this.labels = []

Array of labels to use.  By default the renderer will look for labels on the series.  Labels specified in this array will override labels specified on the series.

- -

showLabels

this.showLabels = true

true to show the label text on the legend.

- -

showSwatch

this.showSwatches = true

true to show the color swatches on the legend.

- -

placement

this.placement = "insideGrid"

”insideGrid” places legend inside the grid area of the plot.  “outsideGrid” places the legend outside the grid but inside the plot container, shrinking the grid to accomodate the legend.  “inside” synonym for “insideGrid”, “outside” places the legend ouside the grid area, but does not shrink the grid which can cause the legend to overflow the plot container.

- -

xoffset

this.xoffset = 0

DEPRECATED.  Set the margins on the legend using the marginTop, marginLeft, etc. properties or via CSS margin styling of the .jqplot-table-legend class.

- -

yoffset

this.yoffset = 0

DEPRECATED.  Set the margins on the legend using the marginTop, marginLeft, etc. properties or via CSS margin styling of the .jqplot-table-legend class.

- -

border

this.border

css spec for the border around the legend box.

- -

background

this.background

css spec for the background of the legend box.

- -

textColor

this.textColor

css color spec for the legend text.

- -

fontFamily

this.fontFamily

css font-family spec for the legend text.

- -

fontSize

this.fontSize

css font-size spec for the legend text.

- -

rowSpacing

this.rowSpacing = '0.5em'

css padding-top spec for the rows in the legend.

- -

rendererOptions

this.rendererOptions = {}

renderer specific options passed to the renderer.

- -

predraw

Wether to draw the legend before the series or not.  Used with series specific legend renderers for pie, donut, mekko charts, etc.

- -

marginTop

this.marginTop = null

CSS margin for the legend DOM element.  This will set an element CSS style for the margin which will override any style sheet setting.  The default will be taken from the stylesheet.

- -

marginRight

this.marginRight = null

CSS margin for the legend DOM element.  This will set an element CSS style for the margin which will override any style sheet setting.  The default will be taken from the stylesheet.

- -

marginBottom

this.marginBottom = null

CSS margin for the legend DOM element.  This will set an element CSS style for the margin which will override any style sheet setting.  The default will be taken from the stylesheet.

- -

marginLeft

this.marginLeft = null

CSS margin for the legend DOM element.  This will set an element CSS style for the margin which will override any style sheet setting.  The default will be taken from the stylesheet.

- -

escapeHtml

this.escapeHtml = false

True to escape special characters with their html entity equivalents in legend text.  “<” becomes &lt; and so on, so html tags are not rendered.

- -

Title

Plot Title object.  Cannot be instantiated directly, but created by the Plot oject.  Title properties can be set or overriden by the options passed in from the user.

Parameters

texttext of the title.
Summary
Properties
texttext of the title;
showwether or not to show the title
fontFamilycss font-family spec for the text.
fontSizecss font-size spec for the text.
textAligncss text-align spec for the text.
textColorcss color spec for the text.
rendererA class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
rendererOptionsrenderer specific options passed to the renderer.
escapeHtmlTrue to escape special characters with their html entity equivalents in title text.
- -

Properties

- -

text

this.text = text

text of the title;

- -

show

this.show = true

wether or not to show the title

- -

fontFamily

this.fontFamily

css font-family spec for the text.

- -

fontSize

this.fontSize

css font-size spec for the text.

- -

textAlign

this.textAlign

css text-align spec for the text.

- -

textColor

this.textColor

css color spec for the text.

- -

renderer

this.renderer = $.jqplot.DivTitleRenderer

A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.

- -

rendererOptions

this.rendererOptions = {}

renderer specific options passed to the renderer.

- -

escapeHtml

this.escapeHtml = false

True to escape special characters with their html entity equivalents in title text.  “<” becomes &lt; and so on, so html tags are not rendered.

- -

Series

An individual data series object.  Cannot be instantiated directly, but created by the Plot oject.  Series properties can be set or overriden by the options passed in from the user.

Summary
PropertiesProperties will be assigned from a series array at the top level of the options.
showwether or not to draw the series.
xaxiswhich x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
yaxiswhich y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
rendererA class of a renderer which will draw the series, see $.jqplot.LineRenderer.
rendererOptionsOptions to pass on to the renderer.
labelLine label to use in the legend.
showLabeltrue to show label for this series in the legend.
colorcss color spec for the series
negativeColorcss color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
lineWidthwidth of the line in pixels.
lineJoinCanvas lineJoin style between segments of series.
lineCapCanvas lineCap style at ends of line.
linePatternline pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
shadowAngleShadow angle in degrees
shadowOffsetShadow offset from line in pixels
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowAlphaAlpha channel transparency of shadow.
breakOnNullWether line segments should be be broken at null value.
markerRendererA class of a renderer which will draw marker (e.g.
markerOptionsrenderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
showLinewether to actually draw the line or not.
showMarkerwether or not to show the markers at the data points.
index0 based index of this series in the plot series array.
filltrue or false, wether to fill under lines or in bars.
fillColorCSS color spec to use for fill under line.
fillAlphaAlpha transparency to apply to the fill under the line.
fillAndStrokeIf true will stroke the line (with color this.color) as well as fill under it.
disableStacktrue to not stack this series with other series in the plot.
neighborThresholdhow close or far (in pixels) the cursor must be from a point marker to detect the point.
fillToZerotrue will force bar and filled series to fill toward zero on the fill Axis.
fillToValuefill a filled series to this value on the fill axis.
fillAxisEither ‘x’ or ‘y’.
useNegativeColorstrue to color negative values differently in filled and bar charts.
- -

Properties

Properties will be assigned from a series array at the top level of the options.  If you had two series and wanted to change the color and line width of the first and set the second to use the secondary y axis with no shadow and supply custom labels for each:

{
-   series:[
-       {color: '#ff4466', lineWidth: 5, label:'good line'},
-       {yaxis: 'y2axis', shadow: false, label:'bad line'}
-   ]
-}
- -

show

this.show = true

wether or not to draw the series.

- -

xaxis

this.xaxis = 'xaxis'

which x axis to use with this series, either ‘xaxis’ or ‘x2axis’.

- -

yaxis

this.yaxis = 'yaxis'

which y axis to use with this series, either ‘yaxis’ or ‘y2axis’.

- -

renderer

this.renderer = $.jqplot.LineRenderer

A class of a renderer which will draw the series, see $.jqplot.LineRenderer.

- -

rendererOptions

this.rendererOptions = {}

Options to pass on to the renderer.

- -

label

this.label = ''

Line label to use in the legend.

- -

showLabel

this.showLabel = true

true to show label for this series in the legend.

- -

color

this.color

css color spec for the series

- -

negativeColor

this.negativeColor

css color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.

- -

lineWidth

this.lineWidth = 2.5

width of the line in pixels.  May have different meanings depending on renderer.

- -

lineJoin

this.lineJoin = 'round'

Canvas lineJoin style between segments of series.

- -

lineCap

this.lineCap = 'round'

Canvas lineCap style at ends of line.

- -

linePattern

this.linePattern = 'solid'

line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’ characters such as ‘.-.’ or a numerical array like [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, [1, 10, 20, 10] to draw a dot-dash line, and so on.

- -

shadowAngle

this.shadowAngle = 45

Shadow angle in degrees

- -

shadowOffset

this.shadowOffset = 1.25

Shadow offset from line in pixels

- -

shadowDepth

this.shadowDepth = 3

Number of times shadow is stroked, each stroke offset shadowOffset from the last.

- -

shadowAlpha

this.shadowAlpha = '0.1'

Alpha channel transparency of shadow.  0 = transparent.

- -

breakOnNull

this.breakOnNull = false

Wether line segments should be be broken at null value.  False will join point on either side of line.

- -

markerRenderer

this.markerRenderer = $.jqplot.MarkerRenderer

A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points, see $.jqplot.MarkerRenderer.

- -

markerOptions

this.markerOptions = {}

renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.

- -

showLine

this.showLine = true

wether to actually draw the line or not.  Series will still be renderered, even if no line is drawn.

- -

showMarker

this.showMarker = true

wether or not to show the markers at the data points.

- -

index

this.index

0 based index of this series in the plot series array.

- -

fill

this.fill = false

true or false, wether to fill under lines or in bars.  May not be implemented in all renderers.

- -

fillColor

this.fillColor

CSS color spec to use for fill under line.  Defaults to line color.

- -

fillAlpha

this.fillAlpha

Alpha transparency to apply to the fill under the line.  Use this to adjust alpha separate from fill color.

- -

fillAndStroke

this.fillAndStroke = false

If true will stroke the line (with color this.color) as well as fill under it.  Applies only when fill is true.

- -

disableStack

this.disableStack = false

true to not stack this series with other series in the plot.  To render properly, non-stacked series must come after any stacked series in the plot’s data series array.  So, the plot’s data series array would look like:

[stackedSeries1, stackedSeries2, ..., nonStackedSeries1, nonStackedSeries2, ...]

disableStack will put a gap in the stacking order of series, and subsequent stacked series will not fill down through the non-stacked series and will most likely not stack properly on top of the non-stacked series.

- -

neighborThreshold

this.neighborThreshold = 4

how close or far (in pixels) the cursor must be from a point marker to detect the point.

- -

fillToZero

this.fillToZero = false

true will force bar and filled series to fill toward zero on the fill Axis.

- -

fillToValue

this.fillToValue = 0

fill a filled series to this value on the fill axis.  Works in conjunction with fillToZero, so that must be true.

- -

fillAxis

this.fillAxis = 'y'

Either ‘x’ or ‘y’.  Which axis to fill the line toward if fillToZero is true.  ‘y’ means fill up/down to 0 on the y axis for this series.

- -

useNegativeColors

this.useNegativeColors = true

true to color negative values differently in filled and bar charts.

- -

Grid

Object representing the grid on which the plot is drawn.  The grid in this context is the area bounded by the axes, the area which will contain the series.  Note, the series are drawn on their own canvas.  The Grid object cannot be instantiated directly, but is created by the Plot oject.  Grid properties can be set or overriden by the options passed in from the user.

Summary
Properties
drawGridlineswether to draw the gridlines on the plot.
gridLineColorcolor of the grid lines.
gridLineWidthwidth of the grid lines.
backgroundcss spec for the background color.
borderColorcss spec for the color of the grid border.
borderWidthwidth of the border in pixels.
drawBorderTrue to draw border around grid.
shadowwether to show a shadow behind the grid.
shadowAngleshadow angle in degrees
shadowOffsetOffset of each shadow stroke from the border in pixels
shadowWidthwidth of the stoke for the shadow
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowColoran optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
shadowAlphaAlpha channel transparency of shadow.
rendererInstance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
rendererOptionsOptions to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
- -

Properties

- -

drawGridlines

this.drawGridlines = true

wether to draw the gridlines on the plot.

- -

gridLineColor

this.gridLineColor = '#cccccc'

color of the grid lines.

- -

gridLineWidth

this.gridLineWidth = 1.0

width of the grid lines.

- -

background

this.background = '#fffdf6'

css spec for the background color.

- -

borderColor

this.borderColor = '#999999'

css spec for the color of the grid border.

- -

borderWidth

this.borderWidth = 2.0

width of the border in pixels.

- -

drawBorder

this.drawBorder = true

True to draw border around grid.

- -

shadow

this.shadow = true

wether to show a shadow behind the grid.

- -

shadowAngle

this.shadowAngle = 45

shadow angle in degrees

- -

shadowOffset

this.shadowOffset = 1.5

Offset of each shadow stroke from the border in pixels

- -

shadowWidth

this.shadowWidth = 3

width of the stoke for the shadow

- -

shadowDepth

this.shadowDepth = 3

Number of times shadow is stroked, each stroke offset shadowOffset from the last.

- -

shadowColor

this.shadowColor = null

an optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form

- -

shadowAlpha

this.shadowAlpha = '0.07'

Alpha channel transparency of shadow.  0 = transparent.

- -

renderer

this.renderer = $.jqplot.CanvasGridRenderer

Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.

- -

rendererOptions

this.rendererOptions = {}

Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.

- -

jqPlot

Plot object returned by call to $.jqplot.  Handles parsing user options, creating sub objects (Axes, legend, title, series) and rendering the plot.

Summary
PropertiesThese properties are specified at the top of the options object like so:
animateTrue to animate the series on initial plot draw (renderer dependent).
animateReplotTrue to animate series after a call to the replot() method.
axesup to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
datauser’s data.
dataRendererA callable which can be used to preprocess data passed into the plot.
dataRendererOptionsOptions that will be passed to the dataRenderer.
axesDefaultsdefault options that will be applied to all axes.
seriesDefaultsdefault options that will be applied to all series.
defaultAxisStart1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
fillBetweenFill between 2 line series in a plot.
fontSizecss spec for the font-size attribute.
gridSee Grid for grid specific options.
legendsee <$.jqplot.TableLegendRenderer>
noDataIndicatorOptions to set up a mock plot with a data loading indicator if no data is specified.
seriesArray of series object options.
seriesColorsAnn array of CSS color specifications that will be applied, in order, to the series in the plot.
sortDatafalse to not sort the data passed in by the user.
stackSeriestrue or false, creates a stack or “mountain” plot.
titleTitle object.
methods
initsets the plot target, checks data and applies user options to plot.
resetAxesScaleReset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
reInitializereinitialize plot for replotting.
quickInitQuick reinitialization plot for replotting.
destroyReleases all resources occupied by the plot
replotDoes a reinitialization of the plot followed by a redraw.
redrawEmpties the plot target div and redraws the plot.
drawDraws all elements of the plot into the container.
drawSeriesRedraws all or just one series on the plot.
moveSeriesToFrontThis method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
moveSeriesToBackThis method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
restorePreviousSeriesOrderThis method requires jQuery 1.4+ Restore the series canvas order to its previous state.
restoreOriginalSeriesOrderThis method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
- -

Properties

These properties are specified at the top of the options object like so:

{
-    axesDefaults:{min:0},
-    series:[{color:'#6633dd'}],
-    title: 'A Plot'
-}
- -

animate

this.animate = false

True to animate the series on initial plot draw (renderer dependent).  Actual animation functionality must be supported in the renderer.

- -

animateReplot

this.animateReplot = false

True to animate series after a call to the replot() method.  Use with caution!  Replots can happen very frequently under certain circumstances (e.g. resizing, dragging points) and animation in these situations can cause problems.

- -

axes

this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}

up to 4 axes are supported, each with it’s own options, See Axis for axis specific options.

- -

data

this.data = []

user’s data.  Data should NOT be specified in the options object, but be passed in as the second argument to the $.jqplot() function.  The data property is described here soley for reference.  The data should be in the form of an array of 2D or 1D arrays like

[ [[x1, y1], [x2, y2],...], [y1, y2, ...] ].
- -

dataRenderer

this.dataRenderer

A callable which can be used to preprocess data passed into the plot.  Will be called with 2 arguments, the plot data and a reference to the plot.

- -

dataRendererOptions

this.dataRendererOptions

Options that will be passed to the dataRenderer.  Can be of any type.

- -

axesDefaults

default options that will be applied to all axes. see Axis for axes options.

- -

seriesDefaults

seriesDefaults: {}, series:[] }

default options that will be applied to all series. see Series for series options.

- -

defaultAxisStart

this.defaultAxisStart = 1

1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.  This is the default starting value for the missing x or y value.  The added data will be a monotonically increasing series (e.g.  [1, 2, 3, ...]) starting at this value.

- -

fillBetween

this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }

Fill between 2 line series in a plot.  Options object: { series1: first index (0 based) of series in fill series2: second index (0 based) of series in fill color: color of fill [default fillColor of series1] baseSeries: fill will be drawn below this series (0 based index) fill: false to turn off fill [default true].  }

- -

fontSize

this.fontSize

css spec for the font-size attribute.  Default for the entire plot.

- -

grid

this.grid = new Grid()

See Grid for grid specific options.

- -

legend

this.legend = new Legend()

see <$.jqplot.TableLegendRenderer>

- -

noDataIndicator

Options to set up a mock plot with a data loading indicator if no data is specified.

- -

series

this.series = []

Array of series object options. see Series for series specific options.

- -

seriesColors

this.seriesColors = $.jqplot.config.defaultColors

Ann array of CSS color specifications that will be applied, in order, to the series in the plot.  Colors will wrap around so, if their are more series than colors, colors will be reused starting at the beginning.  For pie charts, this specifies the colors of the slices.

- -

sortData

this.sortData = true

false to not sort the data passed in by the user.  Many bar, stakced and other graphs as well as many plugins depend on having sorted data.

- -

stackSeries

this.stackSeries = false

true or false, creates a stack or “mountain” plot.  Not all series renderers may implement this option.

- -

title

this.title = new Title()

Title object.  See Title for specific options.  As a shortcut, you can specify the title option as just a string like: title: ‘My Plot’ and this will create a new title object with the specified text.

- -

methods

- -

init

this.init = function(target,
data,
options)

sets the plot target, checks data and applies user options to plot.

- -

resetAxesScale

this.resetAxesScale = function(axes,
options)

Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.

Parameters

axesBoolean to reset or not reset all axes or an array or object of axis names to reset.
- -

reInitialize

this.reInitialize = function (data,
opts)

reinitialize plot for replotting. not called directly.

- -

quickInit

this.quickInit = function ()

Quick reinitialization plot for replotting.  Does not parse options ore recreate axes and series. not called directly.

- -

destroy

this.destroy = function()

Releases all resources occupied by the plot

- -

replot

this.replot = function(options)

Does a reinitialization of the plot followed by a redraw.  Method could be used to interactively change plot characteristics and then replot.

Parameters

optionsOptions used for replotting.

Properties

clearfalse to not clear (empty) the plot container before replotting (default: true).
resetAxestrue to reset all axes min, max, numberTicks and tickInterval setting so axes will rescale themselves. optionally pass in list of axes to reset (e.g.  [‘xaxis’, ‘y2axis’]) (default: false).
- -

redraw

this.redraw = function(clear)

Empties the plot target div and redraws the plot.  This enables plot data and properties to be changed and then to comletely clear the plot and redraw. redraw will not reinitialize any plot elements.  That is, axes will not be autoscaled and defaults will not be reapplied to any plot elements.  redraw is used primarily with zooming.

Parameters

clearfalse to not clear (empty) the plot container before redrawing (default: true).
- -

draw

this.draw = function()

Draws all elements of the plot into the container.  Does not clear the container before drawing.

- -

drawSeries

this.drawSeries = function(options,
idx)

Redraws all or just one series on the plot.  No axis scaling is performed and no other elements on the plot are redrawn. options is an options object to pass on to the series renderers.  It can be an empty object {}.  idx is the series index to redraw if only one series is to be redrawn.

- -

moveSeriesToFront

this.moveSeriesToFront = function (idx)

This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.  This effectively “draws” the specified series on top of all other series, although it is performed through DOM manipulation, no redrawing is performed.

Parameters

idx0 based index of the series to move.  This will be the index of the series as it was first passed into the jqplot function.
- -

moveSeriesToBack

this.moveSeriesToBack = function (idx)

This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.

Parameters

idx0 based index of the series to move.  This will be the index of the series as it was first passed into the jqplot function.
- -

restorePreviousSeriesOrder

this.restorePreviousSeriesOrder = function ()

This method requires jQuery 1.4+ Restore the series canvas order to its previous state.  Useful to put a series back where it belongs after moving it to the front.

- -

restoreOriginalSeriesOrder

this.restoreOriginalSeriesOrder = function ()

This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.

- -
- - - - - - - - - - -
This document is out of date.
This document will help you understand how jqPlot’s options relate to the API documentation and the jqPlot object itself.
this.show = false
Wether to display the axis on the graph.
this.tickRenderer = $.jqplot.AxisTickRenderer
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
A “tick” object showing the value of a tick/gridline on the plot.
this.tickOptions = {}
Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
this.labelRenderer = $.jqplot.AxisLabelRenderer
A class of a rendering engine for creating an axis label.
this.labelOptions = {}
Options passed to the label renderer.
this.label = null
Label for the axis
this.showLabel = true
true to show the axis label.
this.min = null
minimum value of the axis (in data units, not pixels).
this.max = null
maximum value of the axis (in data units, not pixels).
this.autoscale = false
DEPRECATED the default scaling algorithm produces superior results.
this.pad = 1.2
Padding to extend the range above and below the data bounds.
this.padMax = null
Padding to extend the range above data bounds.
this.padMin = null
Padding to extend the range below data bounds.
this.ticks = []
1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
this.numberTicks
Desired number of ticks.
this.tickInterval
number of units between ticks.
this.renderer = $.jqplot.LinearAxisRenderer
A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
this.rendererOptions = {}
renderer specific options.
this.showTicks = true
Wether to show the ticks (both marks and labels) or not.
this.showTickMarks = true
Wether to show the tick marks (line crossing grid) or not.
this.showMinorTicks = true
Wether or not to show minor ticks.
this.drawMajorGridlines = true
True to draw gridlines for major axis ticks.
this.drawMinorGridlines = false
True to draw gridlines for minor ticks.
this.drawMajorTickMarks = true
True to draw tick marks for major axis ticks.
this.drawMinorTickMarks = true
True to draw tick marks for minor ticks.
this.useSeriesColor = false
Use the color of the first series associated with this axis for the tick marks and line bordering this axis.
this.borderWidth = null
width of line stroked at the border of the axis.
this.borderColor = null
color of the border adjacent to the axis.
this.scaleToHiddenSeries = false
True to include hidden series when computing axes bounds and scaling.
this.syncTicks = null
true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
this.tickSpacing = 75
Approximate pixel spacing between ticks on graph.
this.show = false
Wether to display the legend on the graph.
this.location = 'ne'
Placement of the legend.
this.labels = []
Array of labels to use.
this.showLabels = true
true to show the label text on the legend.
this.showSwatches = true
true to show the color swatches on the legend.
this.placement = "insideGrid"
“insideGrid” places legend inside the grid area of the plot.
this.xoffset = 0
DEPRECATED.
this.yoffset = 0
DEPRECATED.
this.border
css spec for the border around the legend box.
this.background
css spec for the background of the legend box.
this.textColor
css color spec for the legend text.
this.fontFamily
css font-family spec for the legend text.
this.fontSize
css font-size spec for the legend text.
this.rowSpacing = '0.5em'
css padding-top spec for the rows in the legend.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.marginTop = null
CSS margin for the legend DOM element.
this.marginRight = null
CSS margin for the legend DOM element.
this.marginBottom = null
CSS margin for the legend DOM element.
this.marginLeft = null
CSS margin for the legend DOM element.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in legend text.
this.text = text
text of the title;
this.show = true
wether or not to show the title
this.fontFamily
css font-family spec for the text.
this.fontSize
css font-size spec for the text.
this.textAlign
css text-align spec for the text.
this.textColor
css color spec for the text.
this.renderer = $.jqplot.DivTitleRenderer
A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
The default title renderer for jqPlot.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in title text.
this.show = true
wether or not to draw the series.
this.xaxis = 'xaxis'
which x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
this.yaxis = 'yaxis'
which y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
this.renderer = $.jqplot.LineRenderer
A class of a renderer which will draw the series, see $.jqplot.LineRenderer.
The default line renderer for jqPlot, this class has no options beyond the Series class.
this.rendererOptions = {}
Options to pass on to the renderer.
this.label = ''
Line label to use in the legend.
this.showLabel = true
true to show label for this series in the legend.
this.color
css color spec for the series
this.negativeColor
css color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
this.lineWidth = 2.5
width of the line in pixels.
this.lineJoin = 'round'
Canvas lineJoin style between segments of series.
this.lineCap = 'round'
Canvas lineCap style at ends of line.
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
this.shadowAngle = 45
Shadow angle in degrees
this.shadowOffset = 1.25
Shadow offset from line in pixels
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowAlpha = '0.1'
Alpha channel transparency of shadow.
this.breakOnNull = false
Wether line segments should be be broken at null value.
this.markerRenderer = $.jqplot.MarkerRenderer
A class of a renderer which will draw marker (e.g.
this.markerOptions = {}
renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
The default jqPlot marker renderer, rendering the points on the line.
this.showLine = true
wether to actually draw the line or not.
this.showMarker = true
wether or not to show the markers at the data points.
this.index
0 based index of this series in the plot series array.
this.fill = false
true or false, wether to fill under lines or in bars.
this.fillColor
CSS color spec to use for fill under line.
this.fillAlpha
Alpha transparency to apply to the fill under the line.
this.fillAndStroke = false
If true will stroke the line (with color this.color) as well as fill under it.
this.disableStack = false
true to not stack this series with other series in the plot.
this.neighborThreshold = 4
how close or far (in pixels) the cursor must be from a point marker to detect the point.
this.fillToZero = false
true will force bar and filled series to fill toward zero on the fill Axis.
this.fillToValue = 0
fill a filled series to this value on the fill axis.
this.fillAxis = 'y'
Either ‘x’ or ‘y’.
this.useNegativeColors = true
true to color negative values differently in filled and bar charts.
this.drawGridlines = true
wether to draw the gridlines on the plot.
this.gridLineColor = '#cccccc'
color of the grid lines.
this.gridLineWidth = 1.0
width of the grid lines.
this.background = '#fffdf6'
css spec for the background color.
this.borderColor = '#999999'
css spec for the color of the grid border.
this.borderWidth = 2.0
width of the border in pixels.
this.drawBorder = true
True to draw border around grid.
this.shadow = true
wether to show a shadow behind the grid.
this.shadowAngle = 45
shadow angle in degrees
this.shadowOffset = 1.5
Offset of each shadow stroke from the border in pixels
this.shadowWidth = 3
width of the stoke for the shadow
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowColor = null
an optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.renderer = $.jqplot.CanvasGridRenderer
Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
The default jqPlot grid renderer, creating a grid on a canvas element.
this.rendererOptions = {}
Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
this.animate = false
True to animate the series on initial plot draw (renderer dependent).
this.animateReplot = false
True to animate series after a call to the replot() method.
this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}
up to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
An individual axis object.
this.data = []
user’s data.
this.dataRenderer
A callable which can be used to preprocess data passed into the plot.
this.dataRendererOptions
Options that will be passed to the dataRenderer.
seriesDefaults: {}, series:[] }
default options that will be applied to all series.
this.defaultAxisStart = 1
1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }
Fill between 2 line series in a plot.
this.fontSize
css spec for the font-size attribute.
this.grid = new Grid()
See Grid for grid specific options.
Object representing the grid on which the plot is drawn.
this.legend = new Legend()
see $.jqplot.TableLegendRenderer
this.series = []
Array of series object options.
this.seriesColors = $.jqplot.config.defaultColors
Ann array of CSS color specifications that will be applied, in order, to the series in the plot.
this.sortData = true
false to not sort the data passed in by the user.
this.stackSeries = false
true or false, creates a stack or “mountain” plot.
this.title = new Title()
Title object.
this.init = function(target,
data,
options)
sets the plot target, checks data and applies user options to plot.
this.resetAxesScale = function(axes,
options)
Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
this.reInitialize = function (data,
opts)
reinitialize plot for replotting.
this.quickInit = function ()
Quick reinitialization plot for replotting.
this.destroy = function()
Releases all resources occupied by the plot
this.replot = function(options)
Does a reinitialization of the plot followed by a redraw.
this.redraw = function(clear)
Empties the plot target div and redraws the plot.
this.draw = function()
Draws all elements of the plot into the container.
this.drawSeries = function(options,
idx)
Redraws all or just one series on the plot.
this.moveSeriesToFront = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
this.moveSeriesToBack = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
this.restorePreviousSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its previous state.
this.restoreOriginalSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Copyright © 2009-2012 Chris Leonello
The default jqPlot axis renderer, creating a numeric axis.
An individual data series object.
Plot Title object.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html deleted file mode 100644 index a3806b9a..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html +++ /dev/null @@ -1,39 +0,0 @@ - - -$.jqplot.DivTitleRenderer - - - - - - - - - -

The default title renderer for jqPlot.  This class has no options beyond the Title class.

- -
- - - - - - - - - - -
Plot Title object.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html deleted file mode 100644 index 09170eda..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html +++ /dev/null @@ -1,69 +0,0 @@ - - -$.jqplot.LineRenderer - - - - - - - - - -

The default line renderer for jqPlot, this class has no options beyond the Series class.  Draws series as a line.

Summary
$.jqplot.LineRendererThe default line renderer for jqPlot, this class has no options beyond the Series class.
Properties
smoothTrue to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.
constrainSmoothingTrue to use a more accurate smoothing algorithm that will not overshoot any data points.
bandDataData used to draw error bands or confidence intervals above/below a line.
bandsBanding around line, e.g error bands or confidence intervals.
showtrue to show the bands.
colorcolor of lines at top and bottom of bands [default: series color].
showLinesTrue to show lines at top and bottom of bands [default: false].
fillTrue to fill area between bands [default: true].
fillColorcss color spec for filled area.
intervalUser specified interval above and below line for bands [default: ‘3%’’].
Properties
highlightMouseOverTrue to highlight area on a filled plot when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over an area on a filled plot.
highlightColorcolor to use when highlighting an area on a filled plot.
- -

Properties

- -

smooth

this.renderer.smooth = false

True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.  Set to an integer number > 2 to specify number of smoothing points to use between each data point.

- -

constrainSmoothing

this.renderer.constrainSmoothing = true

True to use a more accurate smoothing algorithm that will not overshoot any data points.  False to allow overshoot but produce a smoother looking line.

- -

bandData

this.renderer.bandData = []

Data used to draw error bands or confidence intervals above/below a line.

bandData can be input in 3 forms.  jqPlot will figure out which is the low band line and which is the high band line for all forms:

A 2 dimensional array like [[yl1, yl2, ...], [yu1, yu2, ...]] where [yl1, yl2, ...] are y values of the lower line and [yu1, yu2, ...] are y values of the upper line.  In this case there must be the same number of y data points as data points in the series and the bands will inherit the x values of the series.

A 2 dimensional array like [[[xl1, yl1], [xl2, yl2], ...], [[xh1, yh1], [xh2, yh2], ...]] where [xl1, yl1] are x,y data points for the lower line and [xh1, yh1] are x,y data points for the high line. x values do not have to correspond to the x values of the series and can be of any arbitrary length.

Can be of form [[yl1, yu1], [yl2, yu2], [yl3, yu3], ...] where there must be 3 or more arrays and there must be the same number of arrays as there are data points in the series.  In this case, [yl1, yu1] specifies the lower and upper y values for the 1st data point and so on.  The bands will inherit the x values from the series.

- -

bands

Banding around line, e.g error bands or confidence intervals.

- -

show

true to show the bands.  If bandData or interval is supplied, show will be set to true by default.

- -

color

color of lines at top and bottom of bands [default: series color].

- -

showLines

True to show lines at top and bottom of bands [default: false].

- -

fill

True to fill area between bands [default: true].

- -

fillColor

css color spec for filled area.  [default: series color].

- -

interval

interval: '3%' }

User specified interval above and below line for bands [default: ‘3%’’].  Can be a value like 3 or a string like ‘3%’ or an upper/lower array like [1, -2] or [‘2%’, ‘-1.5%’]

- -

Properties

- -

highlightMouseOver

this.highlightMouseOver = true

True to highlight area on a filled plot when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot.

- -

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over an area on a filled plot.  This will be disabled if highlightMouseOver is true.

- -

highlightColor

this.highlightColor = null

color to use when highlighting an area on a filled plot.

- -
- - - - - - - - - - -
An individual data series object.
this.renderer.smooth = false
True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.
this.renderer.constrainSmoothing = true
True to use a more accurate smoothing algorithm that will not overshoot any data points.
this.renderer.bandData = []
Data used to draw error bands or confidence intervals above/below a line.
interval: '3%' }
User specified interval above and below line for bands [default: ‘3%’’].
this.highlightMouseOver = true
True to highlight area on a filled plot when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over an area on a filled plot.
this.highlightColor = null
color to use when highlighting an area on a filled plot.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html deleted file mode 100644 index a3669ba1..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html +++ /dev/null @@ -1,61 +0,0 @@ - - -$.jqplot.LinearAxisRenderer - - - - - - - - - -

The default jqPlot axis renderer, creating a numeric axis.

Summary
$.jqplot.LinearAxisRendererThe default jqPlot axis renderer, creating a numeric axis.
Properties
breakPointsEXPERIMENTAL!! 
breakTickLabelLabel to use at the axis break if breakPoints are specified.
drawBaselineTrue to draw the axis baseline.
baselineWidthwidth of the baseline in pixels.
baselineColorCSS color spec for the baseline.
forceTickAt0This will ensure that there is always a tick mark at 0.
forceTickAt100This will ensure that there is always a tick mark at 100.
tickInsetControls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
minorTicksNumber of ticks to add between “major” ticks.
alignTickstrue to align tick marks across opposed axes such as from the y2axis to yaxis.
- -

Properties

- -

breakPoints

this.breakPoints = null

EXPERIMENTAL!!  Use at your own risk!  Works only with linear axes and the default tick renderer.  Array of [start, stop] points to create a broken axis.  Broken axes have a “jump” in them, which is an immediate transition from a smaller value to a larger value.  Currently, axis ticks MUST be manually assigned if using breakPoints by using the axis ticks array option.

- -

breakTickLabel

this.breakTickLabel = "&asymp

Label to use at the axis break if breakPoints are specified.

- -

drawBaseline

this.drawBaseline = true

True to draw the axis baseline.

- -

baselineWidth

this.baselineWidth = null

width of the baseline in pixels.

- -

baselineColor

this.baselineColor = null

CSS color spec for the baseline.

- -

forceTickAt0

this.forceTickAt0 = false

This will ensure that there is always a tick mark at 0.  If data range is strictly positive or negative, this will force 0 to be inside the axis bounds unless the appropriate axis pad (pad, padMin or padMax) is set to 0, then this will force an axis min or max value at 0.  This has know effect when any of the following options are set: autoscale, min, max, numberTicks or tickInterval.

- -

forceTickAt100

this.forceTickAt100 = false

This will ensure that there is always a tick mark at 100.  If data range is strictly above or below 100, this will force 100 to be inside the axis bounds unless the appropriate axis pad (pad, padMin or padMax) is set to 0, then this will force an axis min or max value at 100.  This has know effect when any of the following options are set: autoscale, min, max, numberTicks or tickInterval.

- -

tickInset

this.tickInset = 0

Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.  0 is no inset, 0.5 is one half a tick interval, 1 is a full tick interval, etc.

- -

minorTicks

this.minorTicks = 0

Number of ticks to add between “major” ticks.  Major ticks are ticks supplied by user or auto computed.  Minor ticks cannot be created by user.

- -

alignTicks

this.alignTicks = false

true to align tick marks across opposed axes such as from the y2axis to yaxis.

- -
- - - - - - - - - - -
this.breakPoints = null
EXPERIMENTAL!! 
this.breakTickLabel = "&asymp
Label to use at the axis break if breakPoints are specified.
this.drawBaseline = true
True to draw the axis baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineColor = null
CSS color spec for the baseline.
this.forceTickAt0 = false
This will ensure that there is always a tick mark at 0.
this.forceTickAt100 = false
This will ensure that there is always a tick mark at 100.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.minorTicks = 0
Number of ticks to add between “major” ticks.
this.alignTicks = false
true to align tick marks across opposed axes such as from the y2axis to yaxis.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html deleted file mode 100644 index 304fc362..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html +++ /dev/null @@ -1,65 +0,0 @@ - - -$.jqplot.MarkerRenderer - - - - - - - - - -

The default jqPlot marker renderer, rendering the points on the line.

Summary
$.jqplot.MarkerRendererThe default jqPlot marker renderer, rendering the points on the line.
Properties
showwether or not to show the marker.
styleOne of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
lineWidthsize of the line for non-filled markers.
sizeSize of the marker (diameter or circle, length of edge of square, etc.)
colorcolor of marker.
shadowwether or not to draw a shadow on the line
shadowAngleShadow angle in degrees
shadowOffsetShadow offset from line in pixels
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowAlphaAlpha channel transparency of shadow.
shadowRendererRenderer that will draws the shadows on the marker.
shapeRendererRenderer that will draw the marker.
- -

Properties

- -

show

this.show = true

wether or not to show the marker.

- -

style

this.style = 'filledCircle'

One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare

- -

lineWidth

this.lineWidth = 2

size of the line for non-filled markers.

- -

size

this.size = 9.0

Size of the marker (diameter or circle, length of edge of square, etc.)

- -

color

this.color = '#666666'

color of marker.  Will be set to color of series by default on init.

- -

shadow

this.shadow = true

wether or not to draw a shadow on the line

- -

shadowAngle

this.shadowAngle = 45

Shadow angle in degrees

- -

shadowOffset

this.shadowOffset = 1

Shadow offset from line in pixels

- -

shadowDepth

this.shadowDepth = 3

Number of times shadow is stroked, each stroke offset shadowOffset from the last.

- -

shadowAlpha

this.shadowAlpha = '0.07'

Alpha channel transparency of shadow.  0 = transparent.

- -

shadowRenderer

this.shadowRenderer = new $.jqplot.ShadowRenderer()

Renderer that will draws the shadows on the marker.

- -

shapeRenderer

this.shapeRenderer = new $.jqplot.ShapeRenderer()

Renderer that will draw the marker.

- -
- - - - - - - - - - -
this.show = true
wether or not to show the marker.
this.style = 'filledCircle'
One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
this.lineWidth = 2
size of the line for non-filled markers.
this.size = 9.0
Size of the marker (diameter or circle, length of edge of square, etc.)
this.color = '#666666'
color of marker.
this.shadow = true
wether or not to draw a shadow on the line
this.shadowAngle = 45
Shadow angle in degrees
this.shadowOffset = 1
Shadow offset from line in pixels
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowRenderer = new $.jqplot.ShadowRenderer()
Renderer that will draws the shadows on the marker.
this.shapeRenderer = new $.jqplot.ShapeRenderer()
Renderer that will draw the marker.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html deleted file mode 100644 index 7d5fb69d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html +++ /dev/null @@ -1,61 +0,0 @@ - - -$.jqplot.shadowRenderer - - - - - - - - - -

The default jqPlot shadow renderer, rendering shadows behind shapes.

Summary
$.jqplot.shadowRendererThe default jqPlot shadow renderer, rendering shadows behind shapes.
Properties
angleAngle of the shadow in degrees.
offsetPixel offset at the given shadow angle of each shadow stroke from the last stroke.
alphaalpha transparency of shadow stroke.
lineWidthwidth of the shadow line stroke.
lineJoinHow line segments of the shadow are joined.
lineCaphow ends of the shadow line are rendered.
fillwhether to fill the shape.
depthhow many times the shadow is stroked.
isarcwether the shadow is an arc or not.
drawdraws an transparent black (i.e.
- -

Properties

- -

angle

this.angle = 45

Angle of the shadow in degrees.  Measured counter-clockwise from the x axis.

- -

offset

this.offset = 1

Pixel offset at the given shadow angle of each shadow stroke from the last stroke.

- -

alpha

this.alpha = 0.07

alpha transparency of shadow stroke.

- -

lineWidth

this.lineWidth = 1.5

width of the shadow line stroke.

- -

lineJoin

this.lineJoin = 'miter'

How line segments of the shadow are joined.

- -

lineCap

this.lineCap = 'round'

how ends of the shadow line are rendered.

- -

fill

this.fill = false

whether to fill the shape.

- -

depth

this.depth = 3

how many times the shadow is stroked.  Each stroke will be offset by offset at angle degrees.

- -

isarc

this.isarc = false

wether the shadow is an arc or not.

- -

draw

$.jqplot.ShadowRenderer.prototype.draw = function(ctx,
points,
options)

draws an transparent black (i.e. gray) shadow.

ctxcanvas drawing context
pointsarray of points or [x, y, radius, start angle (rad), end angle (rad)]
- -
- - - - - - - - - - -
this.angle = 45
Angle of the shadow in degrees.
this.offset = 1
Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
this.alpha = 0.07
alpha transparency of shadow stroke.
this.lineWidth = 1.5
width of the shadow line stroke.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.fill = false
whether to fill the shape.
this.depth = 3
how many times the shadow is stroked.
this.isarc = false
wether the shadow is an arc or not.
$.jqplot.ShadowRenderer.prototype.draw = function(ctx,
points,
options)
draws an transparent black (i.e.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html deleted file mode 100644 index a063dea9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html +++ /dev/null @@ -1,65 +0,0 @@ - - -$.jqplot.shapeRenderer - - - - - - - - - -

The default jqPlot shape renderer.  Given a set of points will plot them and either stroke a line (fill = false) or fill them (fill = true).  If a filled shape is desired, closePath = true must also be set to close the shape.

Summary
$.jqplot.shapeRendererThe default jqPlot shape renderer.
Properties
linePatternline pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
lineJoinHow line segments of the shadow are joined.
lineCaphow ends of the shadow line are rendered.
fillwhether to fill the shape.
isarcwether the shadow is an arc or not.
fillRecttrue to draw shape as a filled rectangle.
strokeRecttrue to draw shape as a stroked rectangle.
clearRecttrue to cear a rectangle.
strokeStylecss color spec for the stoke style
fillStylecss color spec for the fill style.
Functions
drawdraws the shape.
- -

Properties

- -

linePattern

this.linePattern = 'solid'

line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’ characters such as ‘.-.’ or a numerical array like [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, [1, 10, 20, 10] to draw a dot-dash line, and so on.

- -

lineJoin

this.lineJoin = 'miter'

How line segments of the shadow are joined.

- -

lineCap

this.lineCap = 'round'

how ends of the shadow line are rendered.

- -

fill

this.fill = false

whether to fill the shape.

- -

isarc

this.isarc = false

wether the shadow is an arc or not.

- -

fillRect

this.fillRect = false

true to draw shape as a filled rectangle.

- -

strokeRect

this.strokeRect = false

true to draw shape as a stroked rectangle.

- -

clearRect

this.clearRect = false

true to cear a rectangle.

- -

strokeStyle

this.strokeStyle = '#999999'

css color spec for the stoke style

- -

fillStyle

this.fillStyle = '#999999'

css color spec for the fill style.

- -

Functions

- -

draw

$.jqplot.ShapeRenderer.prototype.draw = function(ctx,
points,
options)

draws the shape.

ctxcanvas drawing context
pointsarray of points for shapes or [x, y, width, height] for rectangles or [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs.
- -
- - - - - - - - - - -
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.fill = false
whether to fill the shape.
this.isarc = false
wether the shadow is an arc or not.
this.fillRect = false
true to draw shape as a filled rectangle.
this.strokeRect = false
true to draw shape as a stroked rectangle.
this.clearRect = false
true to cear a rectangle.
this.strokeStyle = '#999999'
css color spec for the stoke style
this.fillStyle = '#999999'
css color spec for the fill style.
$.jqplot.ShapeRenderer.prototype.draw = function(ctx,
points,
options)
draws the shape.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html deleted file mode 100644 index 54fb438f..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html +++ /dev/null @@ -1,191 +0,0 @@ - - -$.jqplot.ThemeEngine - - - - - - - - - -

Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.  A theme engine instance is created with each plot.  The theme engine manages a collection of themes which can be modified, added to, or applied to the plot.

The themeEngine class is not instantiated directly.  When a plot is initialized, the current plot options are scanned an a default theme named “Default” is created.  This theme is used as the basis for other themes added to the theme engine and is always available.

A theme is a simple javascript object with styling parameters for various entities of the plot.  A theme has the form:

{
-    _name:f "Default",
-    target: {
-        backgroundColor: "transparent"
-    },
-    legend: {
-        textColor: null,
-        fontFamily: null,
-        fontSize: null,
-        border: null,
-        background: null
-    },
-    title: {
-        textColor: "rgb(102, 102, 102)",
-        fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif",
-        fontSize: "19.2px",
-        textAlign: "center"
-    },
-    seriesStyles: {},
-    series: [{
-        color: "#4bb2c5",
-        lineWidth: 2.5,
-        linePattern: "solid",
-        shadow: true,
-        fillColor: "#4bb2c5",
-        showMarker: true,
-        markerOptions: {
-            color: "#4bb2c5",
-            show: true,
-            style: 'filledCircle',
-            lineWidth: 1.5,
-            size: 4,
-            shadow: true
-        }
-    }],
-    grid: {
-        drawGridlines: true,
-        gridLineColor: "#cccccc",
-        gridLineWidth: 1,
-        backgroundColor: "#fffdf6",
-        borderColor: "#999999",
-        borderWidth: 2,
-        shadow: true
-    },
-    axesStyles: {
-        label: {},
-        ticks: {}
-    },
-    axes: {
-        xaxis: {
-            borderColor: "#999999",
-            borderWidth: 2,
-            ticks: {
-                show: true,
-                showGridline: true,
-                showLabel: true,
-                showMark: true,
-                size: 4,
-                textColor: "",
-                whiteSpace: "nowrap",
-                fontSize: "12px",
-                fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif"
-            },
-            label: {
-                textColor: "rgb(102, 102, 102)",
-                whiteSpace: "normal",
-                fontSize: "14.6667px",
-                fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif",
-                fontWeight: "400"
-            }
-        },
-        yaxis: {
-            borderColor: "#999999",
-            borderWidth: 2,
-            ticks: {
-                show: true,
-                showGridline: true,
-                showLabel: true,
-                showMark: true,
-                size: 4,
-                textColor: "",
-                whiteSpace: "nowrap",
-                fontSize: "12px",
-                fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif"
-            },
-            label: {
-                textColor: null,
-                whiteSpace: null,
-                fontSize: null,
-                fontFamily: null,
-                fontWeight: null
-            }
-        },
-        x2axis: {...
-        },
-        ...
-        y9axis: {...
-        }
-    }
-}

”seriesStyles” is a style object that will be applied to all series in the plot.  It will forcibly override any styles applied on the individual series.  “axesStyles” is a style object that will be applied to all axes in the plot.  It will also forcibly override any styles on the individual axes.

The example shown above has series options for a line series.  Options for other series types are shown below:

Bar Series

{
-    color: "#4bb2c5",
-    seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
-    lineWidth: 2.5,
-    shadow: true,
-    barPadding: 2,
-    barMargin: 10,
-    barWidth: 15.09375,
-    highlightColors: ["rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)"]
-}

Pie Series

{
-    seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
-    padding: 20,
-    sliceMargin: 0,
-    fill: true,
-    shadow: true,
-    startAngle: 0,
-    lineWidth: 2.5,
-    highlightColors: ["rgb(129,201,214)", "rgb(240,189,104)", "rgb(214,202,165)", "rgb(137,180,158)", "rgb(168,180,137)", "rgb(180,174,89)", "rgb(180,113,161)", "rgb(129,141,236)", "rgb(227,205,120)", "rgb(255,138,76)", "rgb(76,169,219)", "rgb(215,126,190)", "rgb(220,232,135)", "rgb(200,167,96)", "rgb(103,202,235)", "rgb(208,154,215)"]
-}

Funnel Series

{
-    color: "#4bb2c5",
-    lineWidth: 2,
-    shadow: true,
-    padding: {
-        top: 20,
-        right: 20,
-        bottom: 20,
-        left: 20
-    },
-    sectionMargin: 6,
-    seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
-    highlightColors: ["rgb(147,208,220)", "rgb(242,199,126)", "rgb(220,210,178)", "rgb(154,191,172)", "rgb(180,191,154)", "rgb(191,186,112)", "rgb(191,133,174)", "rgb(147,157,238)", "rgb(231,212,139)", "rgb(255,154,102)", "rgb(102,181,224)", "rgb(221,144,199)", "rgb(225,235,152)", "rgb(200,167,96)", "rgb(124,210,238)", "rgb(215,169,221)"]
-}
Summary
$.jqplot.ThemeEngineTheme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.
Properties
themeshash of themes managed by the theme engine.
activeThemePointer to currently active theme
methods
getGet and return the named theme or the active theme if no name given.
getThemeNamesReturn the list of theme names in this manager in alpha-numerical order.
getThemesReturn a list of themes in alpha-numerical order by name.
removeRemove the given theme from the themeEngine.
newThemeCreate a new theme based on the default theme, adding it the themeEngine.
renameRename a theme.
copyCreate a copy of an existing theme in the themeEngine, adding it the themeEngine.
- -

Properties

- -

themes

this.themes = {}

hash of themes managed by the theme engine.  Indexed by theme name.

- -

activeTheme

this.activeTheme=null

Pointer to currently active theme

- -

methods

- -

get

$.jqplot.ThemeEngine.prototype.get = function(name)

Get and return the named theme or the active theme if no name given.

parameter

namename of theme to get.

returns

Theme instance of given name.

- -

getThemeNames

$.jqplot.ThemeEngine.prototype.getThemeNames = function()

Return the list of theme names in this manager in alpha-numerical order.

parameter

None

returns

A the list of theme names in this manager in alpha-numerical order.

- -

getThemes

$.jqplot.ThemeEngine.prototype.getThemes = function()

Return a list of themes in alpha-numerical order by name.

parameter

None

returns

A list of themes in alpha-numerical order by name.

- -

remove

$.jqplot.ThemeEngine.prototype.remove = function(name)

Remove the given theme from the themeEngine.

parameters

namename of the theme to remove.

returns

true on success, false on failure.

- -

newTheme

$.jqplot.ThemeEngine.prototype.newTheme = function(name,
obj)

Create a new theme based on the default theme, adding it the themeEngine.

parameters

namename of the new theme.
objoptional object of styles to be applied to this new theme.

returns

new Theme object.

- -

rename

$.jqplot.ThemeEngine.prototype.rename = function (oldName,
newName)

Rename a theme.

parameters

oldNamecurrent name of the theme.
newNamedesired name of the theme.

returns

new Theme object.

- -

copy

$.jqplot.ThemeEngine.prototype.copy = function (sourceName,
targetName,
obj)

Create a copy of an existing theme in the themeEngine, adding it the themeEngine.

parameters

sourceNamename of the existing theme.
targetNamename of the copy.
objoptional object of style parameter to apply to the new theme.

returns

new Theme object.

- -
- - - - - - - - - - -
this.themes = {}
hash of themes managed by the theme engine.
this.activeTheme=null
Pointer to currently active theme
$.jqplot.ThemeEngine.prototype.get = function(name)
Get and return the named theme or the active theme if no name given.
$.jqplot.ThemeEngine.prototype.getThemeNames = function()
Return the list of theme names in this manager in alpha-numerical order.
$.jqplot.ThemeEngine.prototype.getThemes = function()
Return a list of themes in alpha-numerical order by name.
$.jqplot.ThemeEngine.prototype.remove = function(name)
Remove the given theme from the themeEngine.
$.jqplot.ThemeEngine.prototype.newTheme = function(name,
obj)
Create a new theme based on the default theme, adding it the themeEngine.
$.jqplot.ThemeEngine.prototype.rename = function (oldName,
newName)
Rename a theme.
$.jqplot.ThemeEngine.prototype.copy = function (sourceName,
targetName,
obj)
Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html deleted file mode 100644 index 5a3896cd..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html +++ /dev/null @@ -1,39 +0,0 @@ - - -$.fn - - - - - - - - - -

jQuery namespace to attach functions to jQuery elements.

- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html deleted file mode 100644 index d38cd3d9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html +++ /dev/null @@ -1,120 +0,0 @@ - - -Options Tutorial - - - - - - - - - -

This document will help you understand how jqPlot’s options relate to the API documentation and the jqPlot object itself.  For a listing of options available to jqPlot, see jqPlot Options in the jqPlotOptions.txt file.

The key to effectively using jqPlot is understanding jqPlot’s options.  The online documentation is API documentation.  While it explains what attributes and methods various objects posses, it doesn’t explain how to use or set those attributes through options.  This tutorial will help explain that.

Lets assume you are creating a plot like this:

chart = $.jqplot('chart', dataSeries, optionsObj);

First, note that you shouldn’t try to directly set attributes on the “chart” object (like chart.grid.shadow) after your call to $.jqplot().  At best this won’t do anything **(see below).  You should pass options in via the “optionsObj”.

the optionsObj really represents the plot object (jqPlot object, not to be confused with the $.jqplot function which will create a jqPlot object).  Attributes you specify on that object will be merged with attributes in the jqPlot object.  The axes, legend, series, etc. are attributes on the jqPlot object.  The jqPlot/optionsObj object looks something like (only some attributes shown):

jqPlot-|
-       |-seriesColors
-       |-textColor
-       |-fontFamily
-       |-fontSize
-       |-stackSeries
-       |-series(Array)-|
-       |               |-Series1-|
-       |               |         |-lineWidth
-       |               |         |-linePattern
-       |               |         |-shadow
-       |               |         |-showLine
-       |               |         |-showMarker
-       |               |         |-color
-       |               |-Series2...
-       |               |-...
-       |               |-SeriesN
-       |
-       |-grid(Object)-|
-       |              |-drawGridLines
-       |              |-background
-       |              |-borderColor
-       |              |-borderWidth
-       |              |-shadow
-       |
-       |-title(Object)-|
-       |               |-text
-       |               |-show
-       |               |-fontFamily
-       |               |-fontSize
-       |               |-textAlign
-       |               |-textColor
-       |
-       |-axes(Object)-|
-       |              |-xais-|
-       |              |      |-min
-       |              |      |-max
-       |              |      |-numberTicks
-       |              |      |-showTicks
-       |              |      |-showTickMarks
-       |              |      |-pad
-       |
-       | ... and so on

The optionsObj should follow the same construction as if it were a jqPlot object (with some exceptions/shortcuts I’ll mention in a moment).  So generally, when you see something like “this.drawGridLines” in the grid properties in the docs, just replace “this” with “grid” in your options object.  So it becomes optionsObj.grid.drawGridLines.  Do likewise with the other objects in the plot, replacing “this”, with the respective attribute on the plot like “legend” or “title”.  Series and Axes are handled a little different, because series is an array and axes has 4 distinct children “xaxis”, “yaxis”, “x2axis” and “y2axis”.

So, to remove the shadow from the grid and change the grid border size you would do:

optionObj = {grid:{shadow:false, borderWidth:9.0}};

To do the same as above but also make all the text in the plot red you would do:

optionObj = {
-   textColor:"#ff0000",
-   grid:{shadow:false, borderWidth:9.0}
-}

Here is a more deeply nested example.  Say you want to specify a min and max on your y axis and use a specific color for your second series.  That would look like:

optionsObj = {
-   axes:{yaxis:{min:5, max:230}},
-   series:[{},{color:"#33ff66"}]
-}

Note that series options are an array in order of the series data you sent in to your plot.  To get to the second series, you have to put an object (even if empty) in place of the first series.

There is a handy shortcut to assign options to all axes or all series at one go.  Use axesDefaults and seriesDefaults.  So, if you wanted both x and y axes to start at 0 and you wanted all series to not show markers, you could do:

optionsObj = {axesDefaults:{min:0}, seriesDefaults:{showMarker:false}}

Another shortcut is for the plot title.  Normally, you would assign options to the title as an object.  If you specify a title option as a string, it will assign that to the title.text property automatically.  So these two are equivalent:

optionsObj = {title:{text:"My Plot"}}

and

optionsObj = {title:"My Plot"}

Where things need more explaination is with renderers, plugins and their options.  Briefly, what’s renderer, what’s a plugin.

A renderer is an object that is used to draw something and gets attached to an existing object in the plot in order to draw it.  A plugin does more than just provide drawing functionality to an object.  It will do more like calculate a trend line, change the cursor, provide event driven functionality, etc.  I consider renderers plugins, but plugins don’t have to be renderers.

So, how do you use renderers, plugins, and specify their options?  Some common renderes are for bar charts and category axes.  If you want to render your series as a bar chart with each set of bars showing up in a category on the x axis, you do:

optionsObj = {
-   seriesDefaults:{renderer:$.jqplot.BarRenderer},
-   axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
-}

This replaces the default renderer used for all series in the plot with a bar renderer and the x axis default renderer (but not any other axis) with a category renderer.

Now, how would I assign options to those renderers?  The renderer’s attributes may not be present in the pre-existing jqPlot object, they may be specific to the renderer.  This is done through the “rendererOptions” option on the appropriate object.  So, if I wanted my bars to be 25 pixels wide, I would do:

optionsObj = {
-   seriesDefaults:{
-       renderer:$.jqplot.BarRenderer},
-       rendererOptions:{
-           barWidth:25
-       },
-   axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
-}

Again, this is using the “seriesDefaults” option, which will apply options to all series in the plot.  You could do the same on any particular series in the plot through the “series” options array.

Plugins are free to add their own options.  For example, the highlighter plugin has it’s own set of options that are unique to it.  As a result, it responds to options placed in the “highlighter” attribute of your options object.  So, if I wanted to change the highlighter tooltip to fade in and out slowly and be positioned directly above the point I’m highlighting:

optionsObj = {
-    highlighter:{tooltipFadeSpeed:'slow', tooltipLocation:'n'}
-}

Other plugins, like dragable and trendlines, add their options in with the series.  This is because both of those plugins can have different options for different series in the plot.  So, if you wanted to specify the color of the dragable and constrain it to drag only on the x axis as well as specify the color of the trend line you could do:

series:[{
-    dragable: {
-        color: '#ff3366',
-        constrainTo: 'x'
-    },
-    trendline: {
-        color: '#cccccc'
-    }
-}]

This would apply those options to the first series only.  If you had 2 series and wanted to turn off dragging and trend lines on the second series, you could do:

series:[{
-    dragable: {
-        color: '#ff3366',
-        constrainTo: 'x'
-    },
-    trendline: {
-        color: '#cccccc'
-    }
-}, {
-   isDragable: false,
-   trendline:{
-       show: false
-   }
-}]

Note, series dragability is turned off with the “isDragable” option directly on the series itself, not with a suboption of “dragable”.  This may be improved in the future.

I hope this is helpful.  A few key points to remember:

  • When you see “this” in the api docs, you generally replace it with the name of the object (in lowercase) you are looking at in your options object.
  • seriesDefaults and axesDefaults are convenient shortcuts.
  • to assign options to a renderer, generally use the “rendererOptions”
  • plugins may add their own options attribute, like “highlighter” or “cursor”.

** Note: you can set attributes after the plot is created (like plot.grid.shadow = false), but you’ll have to issue the appropriate calls to possibly reinitialize and redraw the plot.  jqPlot can definitely handle this to change the plot after creation (this is how the dragable plugin updates the plot data and the trend line plugin recomputes itself when data changes).  This hasn’t been documented yet, however.

- -
- - - - - - - - - - -
This document is out of date.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html deleted file mode 100644 index 312db432..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html +++ /dev/null @@ -1,45 +0,0 @@ - - -$.jqplot.BezierCurveRenderer.js - - - - - - - - - -

Renderer which draws lines as stacked bezier curves.  Data for the line will not be specified as an array of [x, y] data point values, but as a an array of [start piont, bezier curve] So, the line is specified as: [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]].

Summary
$.jqplot.BezierCurveRenderer.jsRenderer which draws lines as stacked bezier curves.
Functions
setGridDataconverts the user data values to grid coordinates and stores them in the gridData array.
makeGridDataconverts any arbitrary data values to grid coordinates and returns them.
- -

Functions

- -

setGridData

$.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot)

converts the user data values to grid coordinates and stores them in the gridData array.  Called with scope of a series.

- -

makeGridData

$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data,
plot)

converts any arbitrary data values to grid coordinates and returns them.  This method exists so that plugins can use a series’ linerenderer to generate grid data points without overwriting the grid data associated with that series.  Called with scope of a series.

- -
- - - - - - - - - - -
$.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html deleted file mode 100644 index 21560d9c..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html +++ /dev/null @@ -1,69 +0,0 @@ - - -$.jqplot.BarRenderer - - - - - - - - - -

A plugin renderer for jqPlot to draw a bar plot.  Draws series as a line.

Summary
$.jqplot.BarRendererA plugin renderer for jqPlot to draw a bar plot.
Properties
barPaddingNumber of pixels between adjacent bars at the same axis value.
barMarginNumber of pixels between groups of bars at adjacent axis values.
barDirection‘vertical’ = up and down bars, ‘horizontal’ = side to side bars
barWidthWidth of the bar in pixels (auto by devaul).
shadowOffsetoffset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
waterfalltrue to enable waterfall plot.
groupsgroup bars into this many groups
varyBarColortrue to color each bar of a series separately rather than have every bar of a given series the same color.
highlightMouseOverTrue to highlight slice when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a slice.
highlightColorsan array of colors to use when highlighting a bar.
transposedDataNOT IMPLEMENTED YET.
- -

Properties

- -

barPadding

this.barPadding = 8

Number of pixels between adjacent bars at the same axis value.

- -

barMargin

this.barMargin = 10

Number of pixels between groups of bars at adjacent axis values.

- -

barDirection

this.barDirection = 'vertical'

’vertical’ = up and down bars, ‘horizontal’ = side to side bars

- -

barWidth

this.barWidth = null

Width of the bar in pixels (auto by devaul).  null = calculated automatically.

- -

shadowOffset

this.shadowOffset = 2

offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.

- -

shadowDepth

this.shadowDepth = 5

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

- -

shadowAlpha

this.shadowAlpha = 0.08

transparency of the shadow (0 = transparent, 1 = opaque)

- -

waterfall

this.waterfall = false

true to enable waterfall plot.

- -

groups

this.groups = 1

group bars into this many groups

- -

varyBarColor

this.varyBarColor = false

true to color each bar of a series separately rather than have every bar of a given series the same color.  If used for non-stacked multiple series bar plots, user should specify a separate ‘seriesColors’ array for each series.  Otherwise, each series will set their bars to the same color array.  This option has no Effect for stacked bar charts and is disabled.

- -

highlightMouseOver

this.highlightMouseOver = true

True to highlight slice when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

- -

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a slice.  This will be disabled if highlightMouseOver is true.

- -

highlightColors

this.highlightColors = []

an array of colors to use when highlighting a bar.

- -

transposedData

this.transposedData = true

NOT IMPLEMENTED YET.  True if this is a horizontal bar plot and x and y values are “transposed”.  Tranposed, or “swapped”, data is required prior to rev.  894 builds of jqPlot with horizontal bars.  Allows backward compatability of bar renderer horizontal bars with old style data sets.

- -
- - - - - - - - - - -
this.barPadding = 8
Number of pixels between adjacent bars at the same axis value.
this.barMargin = 10
Number of pixels between groups of bars at adjacent axis values.
this.barDirection = 'vertical'
‘vertical’ = up and down bars, ‘horizontal’ = side to side bars
this.barWidth = null
Width of the bar in pixels (auto by devaul).
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowAlpha = 0.08
transparency of the shadow (0 = transparent, 1 = opaque)
this.waterfall = false
true to enable waterfall plot.
this.groups = 1
group bars into this many groups
this.varyBarColor = false
true to color each bar of a series separately rather than have every bar of a given series the same color.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightColors = []
an array of colors to use when highlighting a bar.
this.transposedData = true
NOT IMPLEMENTED YET.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html deleted file mode 100644 index df38cb41..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html +++ /dev/null @@ -1,53 +0,0 @@ - - -$.jqplot.BlockRenderer - - - - - - - - - -

Plugin renderer to draw a x-y block chart.  A Block chart has data points displayed as colored squares with a text label inside.  Data must be supplied in the form:

[[x1, y1, "label 1", {css}], [x2, y2, "label 2", {css}], ...]

The label and css object are optional.  If the label is ommitted, the box will collapse unless a css height and/or width is specified.

The css object is an object specifying css properties such as:

{background:'#4f98a5', border:'3px solid gray', padding:'1px'}

Note that css properties specified with the data point override defaults specified with the series.

Summary
$.jqplot.BlockRendererPlugin renderer to draw a x-y block chart.
Properties
cssdefault css styles that will be applied to all data blocks.
escapeHtmltrue to escape html in the box label.
insertBreakstrue to turn spaces in data block label into html breaks <br />.
varyBlockColorstrue to vary the color of each block in this series according to the seriesColors array.
Methods
moveBlockMoves an individual block.
- -

Properties

- -

css

this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}

default css styles that will be applied to all data blocks. these values will be overridden by css styles supplied with the individulal data points.

- -

escapeHtml

this.escapeHtml = false

true to escape html in the box label.

- -

insertBreaks

this.insertBreaks = true

true to turn spaces in data block label into html breaks <br />.

- -

varyBlockColors

this.varyBlockColors = false

true to vary the color of each block in this series according to the seriesColors array.  False to set each block to the color specified on this series.  This has no effect if a css background color option is specified in the renderer css options.

- -

Methods

- -

moveBlock

this.moveBlock = function (idx,
x,
y,
duration)

Moves an individual block.  More efficient than redrawing the whole series by calling plot.drawSeries().  Properties: idx - the 0 based index of the block or point in this series. x - the x coordinate in data units (value on x axis) to move the block to. y - the y coordinate in data units (value on the y axis) to move the block to. duration - optional parameter to create an animated movement.  Can be a number (higher is slower animation) or ‘fast’, ‘normal’ or ‘slow’.  If not provided, the element is moved without any animation.

- -
- - - - - - - - - - -
this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}
default css styles that will be applied to all data blocks.
this.escapeHtml = false
true to escape html in the box label.
this.insertBreaks = true
true to turn spaces in data block label into html breaks br /.
this.varyBlockColors = false
true to vary the color of each block in this series according to the seriesColors array.
this.moveBlock = function (idx,
x,
y,
duration)
Moves an individual block.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html deleted file mode 100644 index 519071ab..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html +++ /dev/null @@ -1,71 +0,0 @@ - - -$.jqplot.BubbleRenderer - - - - - - - - - -

Plugin renderer to draw a bubble chart.  A Bubble chart has data points displayed as colored circles with an optional text label inside.  To use the bubble renderer, you must include the bubble renderer like:

<script language="javascript" type="text/javascript" src="../src/plugins/jqplot.bubbleRenderer.js"></script>

Data must be supplied in the form:

[[x1, y1, r1, <label or {label:'text', color:color}>], ...]

where the label or options object is optional.

Note that all bubble colors will be the same unless the “varyBubbleColors” option is set to true.  Colors can be specified in the data array or in the seriesColors array option on the series.  If no colors are defined, the default jqPlot series of 16 colors are used.  Colors are automatically cycled around again if there are more bubbles than colors.

Bubbles are autoscaled by default to fit within the chart area while maintaining relative sizes.  If the “autoscaleBubbles” option is set to false, the r(adius) values in the data array a treated as literal pixel values for the radii of the bubbles.

Properties are passed into the bubble renderer in the rendererOptions object of the series options like:

seriesDefaults: {
-    renderer: $.jqplot.BubbleRenderer,
-    rendererOptions: {
-        bubbleAlpha: 0.7,
-        varyBubbleColors: false
-    }
-}
Summary
$.jqplot.BubbleRendererPlugin renderer to draw a bubble chart.
Properties
varyBubbleColorsTrue to vary the color of each bubble in this series according to the seriesColors array.
autoscaleBubblesTrue to scale the bubble radius based on plot size.
autoscaleMultiplierMultiplier the bubble size if autoscaleBubbles is true.
autoscalePointsFactorFactor which decreases bubble size based on how many bubbles on on the chart.
escapeHtmlTrue to escape html in bubble label text.
highlightMouseOverTrue to highlight bubbles when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a bubble.
highlightColorsAn array of colors to use when highlighting a slice.
bubbleAlphaAlpha transparency to apply to all bubbles in this series.
highlightAlphaAlpha transparency to apply when highlighting bubble.
bubbleGradientsTrue to color the bubbles with gradient fills instead of flat colors.
showLabelsTrue to show labels on bubbles (if any), false to not show.
- -

Properties

- -

varyBubbleColors

this.varyBubbleColors = true

True to vary the color of each bubble in this series according to the seriesColors array.  False to set each bubble to the color specified on this series.  This has no effect if a css background color option is specified in the renderer css options.

- -

autoscaleBubbles

this.autoscaleBubbles = true

True to scale the bubble radius based on plot size.  False will use the radius value as provided as a raw pixel value for bubble radius.

- -

autoscaleMultiplier

this.autoscaleMultiplier = 1.0

Multiplier the bubble size if autoscaleBubbles is true.

- -

autoscalePointsFactor

this.autoscalePointsFactor = -0.07

Factor which decreases bubble size based on how many bubbles on on the chart.  0 means no adjustment for number of bubbles.  Negative values will decrease size of bubbles as more bubbles are added.  Values between 0 and -0.2 should work well.

- -

escapeHtml

this.escapeHtml = true

True to escape html in bubble label text.

- -

highlightMouseOver

this.highlightMouseOver = true

True to highlight bubbles when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

- -

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a bubble.  This will be disabled if highlightMouseOver is true.

- -

highlightColors

this.highlightColors = []

An array of colors to use when highlighting a slice.  Calculated automatically if not supplied.

- -

bubbleAlpha

this.bubbleAlpha = 1.0

Alpha transparency to apply to all bubbles in this series.

- -

highlightAlpha

this.highlightAlpha = null

Alpha transparency to apply when highlighting bubble.  Set to value of bubbleAlpha by default.

- -

bubbleGradients

this.bubbleGradients = false

True to color the bubbles with gradient fills instead of flat colors.  NOT AVAILABLE IN IE due to lack of excanvas support for radial gradient fills. will be ignored in IE.

- -

showLabels

this.showLabels = true

True to show labels on bubbles (if any), false to not show.

- -
- - - - - - - - - - -
this.varyBubbleColors = true
True to vary the color of each bubble in this series according to the seriesColors array.
this.autoscaleBubbles = true
True to scale the bubble radius based on plot size.
this.autoscaleMultiplier = 1.0
Multiplier the bubble size if autoscaleBubbles is true.
this.autoscalePointsFactor = -0.07
Factor which decreases bubble size based on how many bubbles on on the chart.
this.escapeHtml = true
True to escape html in bubble label text.
this.highlightMouseOver = true
True to highlight bubbles when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a bubble.
this.highlightColors = []
An array of colors to use when highlighting a slice.
this.bubbleAlpha = 1.0
Alpha transparency to apply to all bubbles in this series.
this.highlightAlpha = null
Alpha transparency to apply when highlighting bubble.
this.bubbleGradients = false
True to color the bubbles with gradient fills instead of flat colors.
this.showLabels = true
True to show labels on bubbles (if any), false to not show.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html deleted file mode 100644 index 3c8da0cc..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html +++ /dev/null @@ -1,63 +0,0 @@ - - -$.jqplot.CanvasAxisLabelRenderer - - - - - - - - - -

Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.  This renderer uses a separate rendering engine to draw the text on the canvas.  Two modes of rendering the text are available.  If the browser has native font support for canvas fonts (currently Mozila 3.5 and Safari 4), you can enable text rendering with the canvas fillText method.  You do so by setting the “enableFontSupport” option to true.

Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.  Even if the “enableFontSupport” option is true non-supporting browsers will still render with the Hershey font.

Summary
$.jqplot.CanvasAxisLabelRendererRenderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.
Properties
angleangle of text, measured clockwise from x axis.
showwether or not to show the tick (mark and label).
showLabelwether or not to show the label.
labellabel for the axis.
fontFamilyCSS spec for the font-family css attribute.
fontSizeCSS spec for font size.
fontWeight
fontStretchMultiplier to condense or expand font width.
textColorcss spec for the color attribute.
enableFontSupporttrue to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
pt2pxPoint to pixel scaling factor, used for computing height of bounding box around a label.
- -

Properties

- -

angle

this.angle = 0

angle of text, measured clockwise from x axis.

- -

show

this.show = true

wether or not to show the tick (mark and label).

- -

showLabel

this.showLabel = true

wether or not to show the label.

- -

label

this.label = ''

label for the axis.

- -

fontFamily

this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'

CSS spec for the font-family css attribute.  Applies only to browsers supporting native font rendering in the canvas tag.  Currently Mozilla 3.5 and Safari 4.

- -

fontSize

this.fontSize = '11pt'

CSS spec for font size.

- -

fontWeight

this.fontWeight = 'normal'
CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100900
- -

fontStretch

this.fontStretch = 1.0

Multiplier to condense or expand font width.  Applies only to browsers which don’t support canvas native font rendering.

- -

textColor

this.textColor = '#666666'

css spec for the color attribute.

- -

enableFontSupport

this.enableFontSupport = true

true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.  If true, label will be drawn with canvas tag native support for fonts.  If false, label will be drawn with Hershey font metrics.

- -

pt2px

this.pt2px = null

Point to pixel scaling factor, used for computing height of bounding box around a label.  The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.  Leave as null to use default.  If tops of letters appear clipped, increase this.  If bounding box seems too big, decrease.  This is an issue only with the native font renderering capabilities of Mozilla 3.5 and Safari 4 since they do not provide a method to determine the font height.

- -
- - - - - - - - - - -
this.angle = 0
angle of text, measured clockwise from x axis.
this.show = true
wether or not to show the tick (mark and label).
this.showLabel = true
wether or not to show the label.
this.label = ''
label for the axis.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
CSS spec for the font-family css attribute.
this.fontSize = '11pt'
CSS spec for font size.
this.fontWeight = 'normal'
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.textColor = '#666666'
css spec for the color attribute.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html deleted file mode 100644 index bb303eea..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html +++ /dev/null @@ -1,79 +0,0 @@ - - -$.jqplot.CanvasAxisTickRenderer - - - - - - - - - -

Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.  This renderer uses a separate rendering engine to draw the text on the canvas.  Two modes of rendering the text are available.  If the browser has native font support for canvas fonts (currently Mozila 3.5 and Safari 4), you can enable text rendering with the canvas fillText method.  You do so by setting the “enableFontSupport” option to true.

Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.  Even if the “enableFontSupport” option is true non-supporting browsers will still render with the Hershey font.

Summary
$.jqplot.CanvasAxisTickRendererRenderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.
Properties
marktick mark on the axis.
showMarkwether or not to show the mark on the axis.
showGridlinewether or not to draw the gridline on the grid at this tick.
isMinorTickif this is a minor tick.
angleangle of text, measured clockwise from x axis.
markSizeLength of the tick marks in pixels.
showwether or not to show the tick (mark and label).
showLabelwether or not to show the label.
labelPosition‘auto’, ‘start’, ‘middle’ or ‘end’.
formatterA class of a formatter for the tick text.
formatStringstring passed to the formatter.
prefixString to prepend to the tick label.
fontFamilycss spec for the font-family css attribute.
fontSizeCSS spec for font size.
fontWeightCSS spec for fontWeight
fontStretchMultiplier to condense or expand font width.
textColorcss spec for the color attribute.
enableFontSupporttrue to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
pt2pxPoint to pixel scaling factor, used for computing height of bounding box around a label.
- -

Properties

- -

mark

this.mark = 'outside'

tick mark on the axis.  One of ‘inside’, ‘outside’, ‘cross’, ‘’ or null.

- -

showMark

this.showMark = true

wether or not to show the mark on the axis.

- -

showGridline

this.showGridline = true

wether or not to draw the gridline on the grid at this tick.

- -

isMinorTick

this.isMinorTick = false

if this is a minor tick.

- -

angle

this.angle = 0

angle of text, measured clockwise from x axis.

- -

markSize

this.markSize = 4

Length of the tick marks in pixels.  For ‘cross’ style, length will be stoked above and below axis, so total length will be twice this.

- -

show

this.show = true

wether or not to show the tick (mark and label).

- -

showLabel

this.showLabel = true

wether or not to show the label.

- -

labelPosition

this.labelPosition = 'auto'

’auto’, ‘start’, ‘middle’ or ‘end’.  Whether tick label should be positioned so the start, middle, or end of the tick mark.

- -

formatter

this.formatter = $.jqplot.DefaultTickFormatter

A class of a formatter for the tick text.  The default $.jqplot.DefaultTickFormatter uses sprintf.

- -

formatString

this.formatString = ''

string passed to the formatter.

- -

prefix

this.prefix = ''

String to prepend to the tick label.  Prefix is prepended to the formatted tick label.

- -

fontFamily

this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'

css spec for the font-family css attribute.

- -

fontSize

this.fontSize = '10pt'

CSS spec for font size.

- -

fontWeight

this.fontWeight = 'normal'

CSS spec for fontWeight

- -

fontStretch

this.fontStretch = 1.0

Multiplier to condense or expand font width.  Applies only to browsers which don’t support canvas native font rendering.

- -

textColor

this.textColor = '#666666'

css spec for the color attribute.

- -

enableFontSupport

this.enableFontSupport = true

true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.  If true, tick label will be drawn with canvas tag native support for fonts.  If false, tick label will be drawn with Hershey font metrics.

- -

pt2px

this.pt2px = null

Point to pixel scaling factor, used for computing height of bounding box around a label.  The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.  Leave as null to use default.  If tops of letters appear clipped, increase this.  If bounding box seems too big, decrease.  This is an issue only with the native font renderering capabilities of Mozilla 3.5 and Safari 4 since they do not provide a method to determine the font height.

- -
- - - - - - - - - - -
this.mark = 'outside'
tick mark on the axis.
this.showMark = true
wether or not to show the mark on the axis.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.isMinorTick = false
if this is a minor tick.
this.angle = 0
angle of text, measured clockwise from x axis.
this.markSize = 4
Length of the tick marks in pixels.
this.show = true
wether or not to show the tick (mark and label).
this.showLabel = true
wether or not to show the label.
this.labelPosition = 'auto'
‘auto’, ‘start’, ‘middle’ or ‘end’.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatString = ''
string passed to the formatter.
this.prefix = ''
String to prepend to the tick label.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
css spec for the font-family css attribute.
this.fontSize = '10pt'
CSS spec for font size.
this.fontWeight = 'normal'
CSS spec for fontWeight
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.textColor = '#666666'
css spec for the color attribute.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html deleted file mode 100644 index d5998a1c..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html +++ /dev/null @@ -1,113 +0,0 @@ - - -$.jqplot.CanvasOverlay - - - - - - - - - -
Summary
$.jqplot.CanvasOverlay
Properties
objects
nameOptional name for the overlay object.
showtrue to show (draw), false to not draw.
lineWidthWidth of the line.
lineCapType of ending placed on the line [‘round’, ‘butt’, ‘square’]
colorcolor of the line
shadowwether or not to draw a shadow on the line
shadowAngleShadow angle in degrees
shadowOffsetShadow offset from line in pixels
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowAlphaAlpha channel transparency of shadow.
xaxisX axis to use for positioning/scaling the line.
yaxisY axis to use for positioning/scaling the line.
showTooltipShow a tooltip with data point values.
showTooltipPrecisionControls how close to line cursor must be to show tooltip.
tooltipLocationWhere to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
fadeTooltiptrue = fade in/out tooltip, flase = show/hide tooltip
tooltipFadeSpeed‘slow’, ‘def’, ‘fast’, or number of milliseconds.
tooltipOffsetPixel offset of tooltip from the highlight.
tooltipFormatStringFormat string passed the x and y values of the cursor on the line.
LineA straight line.
Properties
start[x, y] coordinates for the start of the line.
stop[x, y] coordinates for the end of the line.
HorizontalLineA straight horizontal line.
Properties
yy value to position the line
xminx value for the start of the line, null to scale to axis min.
xmaxx value for the end of the line, null to scale to axis max.
DashedHorizontalLineA straight dashed horizontal line.
Properties
dashPatternArray of line, space settings in pixels.
VerticalLineA straight vertical line.
DashedVerticalLineA straight dashed vertical line.
Properties
dashPatternArray of line, space settings in pixels.
- -

Properties

- -

objects

this.objects = []
- -

name

Optional name for the overlay object.  Can be later used to retrieve the object by name.

- -

show

true to show (draw), false to not draw.

- -

lineWidth

Width of the line.

- -

lineCap

Type of ending placed on the line [‘round’, ‘butt’, ‘square’]

- -

color

color of the line

- -

shadow

wether or not to draw a shadow on the line

- -

shadowAngle

Shadow angle in degrees

- -

shadowOffset

Shadow offset from line in pixels

- -

shadowDepth

Number of times shadow is stroked, each stroke offset shadowOffset from the last.

- -

shadowAlpha

Alpha channel transparency of shadow.  0 = transparent.

- -

xaxis

X axis to use for positioning/scaling the line.

- -

yaxis

Y axis to use for positioning/scaling the line.

- -

showTooltip

Show a tooltip with data point values.

- -

showTooltipPrecision

Controls how close to line cursor must be to show tooltip.  Higher number = closer to line, lower number = farther from line.  1.0 = cursor must be over line.

- -

tooltipLocation

Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’

- -

fadeTooltip

true = fade in/out tooltip, flase = show/hide tooltip

- -

tooltipFadeSpeed

’slow’, ‘def’, ‘fast’, or number of milliseconds.

- -

tooltipOffset

Pixel offset of tooltip from the highlight.

- -

tooltipFormatString

tooltipFormatString: '%d, %d' }

Format string passed the x and y values of the cursor on the line. e.g., ‘Dogs: %.2f, Cats: %d’.

- -

Line

A straight line.

Summary
Properties
start[x, y] coordinates for the start of the line.
stop[x, y] coordinates for the end of the line.
- -

Properties

- -

start

[x, y] coordinates for the start of the line.

- -

stop

stop: [] }

[x, y] coordinates for the end of the line.

- -

HorizontalLine

A straight horizontal line.

Summary
Properties
yy value to position the line
xminx value for the start of the line, null to scale to axis min.
xmaxx value for the end of the line, null to scale to axis max.
- -

Properties

- -

y

y value to position the line

- -

xmin

x value for the start of the line, null to scale to axis min.

- -

xmax

x value for the end of the line, null to scale to axis max.

- -

DashedHorizontalLine

A straight dashed horizontal line.

Summary
Properties
dashPatternArray of line, space settings in pixels.
- -

Properties

- -

dashPattern

dashPattern: [8,8] }

Array of line, space settings in pixels.  Default is 8 pixel of line, 8 pixel of space.  Note, limit to a 2 element array b/c of bug with higher order arrays.

- -

VerticalLine

A straight vertical line.

- -

DashedVerticalLine

A straight dashed vertical line.

Summary
Properties
dashPatternArray of line, space settings in pixels.
- -

Properties

- -

dashPattern

dashPattern: [8,8] }

Array of line, space settings in pixels.  Default is 8 pixel of line, 8 pixel of space.  Note, limit to a 2 element array b/c of bug with higher order arrays.

- -
- - - - - - - - - - -
this.objects = []
tooltipFormatString: '%d, %d' }
Format string passed the x and y values of the cursor on the line.
stop: [] }
[x, y] coordinates for the end of the line.
dashPattern: [8,8] }
Array of line, space settings in pixels.
dashPattern: [8,8] }
Array of line, space settings in pixels.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html deleted file mode 100644 index 993845a7..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html +++ /dev/null @@ -1,46 +0,0 @@ - - -$.jqplot.CategoryAxisRenderer - - - - - - - - - -

A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.

To use this renderer, include the plugin in your source

<script type="text/javascript" language="javascript" src="plugins/jqplot.categoryAxisRenderer.js"></script>

and supply the appropriate options to your plot

{axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}}
Summary
$.jqplot.CategoryAxisRendererA plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
Properties
sortMergedLabelsTrue to sort tick labels when labels are created by merging x axis values from multiple series.
tickRendererA class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
- -

Properties

- -

sortMergedLabels

this.sortMergedLabels = false

True to sort tick labels when labels are created by merging x axis values from multiple series.  That is, say you have two series like:

line1 = [[2006, 4],            [2008, 9], [2009, 16]];
-line2 = [[2006, 3], [2007, 7], [2008, 6]];

If no label array is specified, tick labels will be collected from the x values of the series.  With sortMergedLabels set to true, tick labels will be:

[2006, 2007, 2008, 2009]

With sortMergedLabels set to false, tick labels will be:

[2006, 2008, 2009, 2007]

Note, this property is specified on the renderOptions for the axes when creating a plot:

axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}}
- -

tickRenderer

A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;

- -
- - - - - - - - - - -
this.sortMergedLabels = false
True to sort tick labels when labels are created by merging x axis values from multiple series.
A “tick” object showing the value of a tick/gridline on the plot.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html deleted file mode 100644 index de2638ae..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html +++ /dev/null @@ -1,39 +0,0 @@ - - -$.jqplot.ciParser - - - - - - - - - -

Data Renderer function which converts a custom JSON data object into jqPlot data format.  Set this as a callable on the jqplot dataRenderer plot option:

plot = $.jqplot('mychart', [data], { dataRenderer: $.jqplot.ciParser, ... });

Where data is an object in JSON format or a JSON encoded string conforming to the City Index API spec.

Note that calling the renderer function is handled internally by jqPlot.  The user does not have to call the function.  The parameters described below will automatically be passed to the ciParser function.

Parameters

dataJSON encoded string or object.
plotreference to jqPlot Plot object.

Returns

data array in jqPlot format.

- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html deleted file mode 100644 index 1bfe3285..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html +++ /dev/null @@ -1,93 +0,0 @@ - - -$.jqplot.Cursor - - - - - - - - - -

Plugin class representing the cursor as displayed on the plot.

Summary
$.jqplot.CursorPlugin class representing the cursor as displayed on the plot.
Properties
styleCSS spec for cursor style
showwether to show the cursor or not.
showTooltipshow a cursor position tooltip.
followMouseTooltip follows the mouse, it is not at a fixed location.
tooltipLocationWhere to position tooltip.
tooltipOffsetPixel offset of tooltip from the grid boudaries or cursor center.
showTooltipGridPositionshow the grid pixel coordinates of the mouse.
showTooltipUnitPositionshow the unit (data) coordinates of the mouse.
showTooltipDataPositionUsed with showVerticalLine to show intersecting data points in the tooltip.
tooltipFormatStringsprintf format string for the tooltip.
useAxesFormattersUse the x and y axes formatters to format the text in the tooltip.
tooltipAxisGroupsShow position for the specified axes.
zoomEnable plot zooming.
looseZoomWill expand zoom range to provide more rounded tick values.
clickResetWill reset plot zoom if single click on plot without drag.
dblClickResetWill reset plot zoom if double click on plot without drag.
showVerticalLinedraw a vertical line across the plot which follows the cursor.
showHorizontalLinedraw a horizontal line across the plot which follows the cursor.
constrainZoomTo‘none’, ‘x’ or ‘y’
intersectionThresholdpixel distance from data point or marker to consider cursor lines intersecting with point.
showCursorLegendReplace the plot legend with an enhanced legend displaying intersection information.
cursorLegendFormatStringFormat string used in the cursor legend.
constrainOutsideZoomTrue to limit actual zoom area to edges of grid, even when zooming outside of plot area.
showTooltipOutsideZoomTrue will keep updating the tooltip when zooming of the grid.
methods
$.jqplot.Cursor.zoomProxylinks targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot.
- -

Properties

- -

style

this.style = 'crosshair'

CSS spec for cursor style

- -

show

this.show = $.jqplot.config.enablePlugins

wether to show the cursor or not.

- -

showTooltip

this.showTooltip = true

show a cursor position tooltip.  Location of the tooltip will be controlled by followMouse and tooltipLocation.

- -

followMouse

this.followMouse = false

Tooltip follows the mouse, it is not at a fixed location.  Tooltip will show on the grid at the location given by tooltipLocation, offset from the grid edge by tooltipOffset.

- -

tooltipLocation

this.tooltipLocation = 'se'

Where to position tooltip.  If followMouse is true, this is relative to the cursor, otherwise, it is relative to the grid.  One of ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’

- -

tooltipOffset

this.tooltipOffset = 6

Pixel offset of tooltip from the grid boudaries or cursor center.

- -

showTooltipGridPosition

this.showTooltipGridPosition = false

show the grid pixel coordinates of the mouse.

- -

showTooltipUnitPosition

this.showTooltipUnitPosition = true

show the unit (data) coordinates of the mouse.

- -

showTooltipDataPosition

this.showTooltipDataPosition = false

Used with showVerticalLine to show intersecting data points in the tooltip.

- -

tooltipFormatString

this.tooltipFormatString = '%.4P, %.4P'

sprintf format string for the tooltip.  Uses Ash Searle’s javascript sprintf implementation found here: http://hexmen.com/blog/2007/03/printf-sprintf/ See http://perldoc.perl.org/functions/sprintf.html for reference Note, if showTooltipDataPosition is true, the default tooltipFormatString will be set to the cursorLegendFormatString, not the default given here.

- -

useAxesFormatters

this.useAxesFormatters = true

Use the x and y axes formatters to format the text in the tooltip.

- -

tooltipAxisGroups

this.tooltipAxisGroups = []

Show position for the specified axes.  This is an array like [[‘xaxis’, ‘yaxis’], [‘xaxis’, ‘y2axis’]] Default is to compute automatically for all visible axes.

- -

zoom

this.zoom = false

Enable plot zooming.

- -

looseZoom

this.looseZoom = true

Will expand zoom range to provide more rounded tick values.  Works only with linear, log and date axes.

- -

clickReset

this.clickReset = false

Will reset plot zoom if single click on plot without drag.

- -

dblClickReset

this.dblClickReset = true

Will reset plot zoom if double click on plot without drag.

- -

showVerticalLine

this.showVerticalLine = false

draw a vertical line across the plot which follows the cursor.  When the line is near a data point, a special legend and/or tooltip can be updated with the data values.

- -

showHorizontalLine

this.showHorizontalLine = false

draw a horizontal line across the plot which follows the cursor.

- -

constrainZoomTo

this.constrainZoomTo = 'none'

’none’, ‘x’ or ‘y’

- -

intersectionThreshold

this.intersectionThreshold = 2

pixel distance from data point or marker to consider cursor lines intersecting with point.  If data point markers are not shown, this should be >= 1 or will often miss point intersections.

- -

showCursorLegend

this.showCursorLegend = false

Replace the plot legend with an enhanced legend displaying intersection information.

- -

cursorLegendFormatString

this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString

Format string used in the cursor legend.  If showTooltipDataPosition is true, this will also be the default format string used by tooltipFormatString.

- -

constrainOutsideZoom

this.constrainOutsideZoom = true

True to limit actual zoom area to edges of grid, even when zooming outside of plot area.  That is, can’t zoom out by mousing outside plot.

- -

showTooltipOutsideZoom

this.showTooltipOutsideZoom = false

True will keep updating the tooltip when zooming of the grid.

- -

methods

- -

$.jqplot.Cursor.zoomProxy

$.jqplot.Cursor.zoomProxy = function(targetPlot,
controllerPlot)

links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. controllerPlot will not actually zoom, but acts as an overview plot.  Note, the zoom options must be set to true for zoomProxy to work.

- -
- - - - - - - - - - -
this.style = 'crosshair'
CSS spec for cursor style
this.show = $.jqplot.config.enablePlugins
wether to show the cursor or not.
this.showTooltip = true
show a cursor position tooltip.
this.followMouse = false
Tooltip follows the mouse, it is not at a fixed location.
this.tooltipLocation = 'se'
Where to position tooltip.
this.tooltipOffset = 6
Pixel offset of tooltip from the grid boudaries or cursor center.
this.showTooltipGridPosition = false
show the grid pixel coordinates of the mouse.
this.showTooltipUnitPosition = true
show the unit (data) coordinates of the mouse.
this.showTooltipDataPosition = false
Used with showVerticalLine to show intersecting data points in the tooltip.
this.tooltipFormatString = '%.4P, %.4P'
sprintf format string for the tooltip.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.tooltipAxisGroups = []
Show position for the specified axes.
this.zoom = false
Enable plot zooming.
this.looseZoom = true
Will expand zoom range to provide more rounded tick values.
this.clickReset = false
Will reset plot zoom if single click on plot without drag.
this.dblClickReset = true
Will reset plot zoom if double click on plot without drag.
this.showVerticalLine = false
draw a vertical line across the plot which follows the cursor.
this.showHorizontalLine = false
draw a horizontal line across the plot which follows the cursor.
this.constrainZoomTo = 'none'
‘none’, ‘x’ or ‘y’
this.intersectionThreshold = 2
pixel distance from data point or marker to consider cursor lines intersecting with point.
this.showCursorLegend = false
Replace the plot legend with an enhanced legend displaying intersection information.
this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString
Format string used in the cursor legend.
this.constrainOutsideZoom = true
True to limit actual zoom area to edges of grid, even when zooming outside of plot area.
this.showTooltipOutsideZoom = false
True will keep updating the tooltip when zooming of the grid.
$.jqplot.Cursor.zoomProxy = function(targetPlot,
controllerPlot)
links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html deleted file mode 100644 index f87d8274..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html +++ /dev/null @@ -1,101 +0,0 @@ - - -$.jqplot.DateAxisRenderer - - - - - - - - - -

A plugin for a jqPlot to render an axis as a series of date values.  This renderer has no options beyond those supplied by the Axis class.  It supplies it’s own tick formatter, so the tickOptions.formatter option should not be overridden.

Thanks to Ken Synder for his enhanced Date instance methods which are included with this code http://kendsnyder.com/sandbox/date/.

To use this renderer, include the plugin in your source

<script type="text/javascript" language="javascript" src="plugins/jqplot.dateAxisRenderer.js"></script>

and supply the appropriate options to your plot

{axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}}

Dates can be passed into the axis in almost any recognizable value and will be parsed.  They will be rendered on the axis in the format specified by tickOptions.formatString.  e.g. tickOptions.formatString = ‘%Y-%m-%d’.

Accecptable format codes are:

Code    Result                  Description
-            == Years ==
-%Y      2008                Four-digit year
-%y      08                  Two-digit year
-            == Months ==
-%m      09                  Two-digit month
-%#m     9                   One or two-digit month
-%B      September           Full month name
-%b      Sep                 Abbreviated month name
-            == Days ==
-%d      05                  Two-digit day of month
-%#d     5                   One or two-digit day of month
-%e      5                   One or two-digit day of month
-%A      Sunday              Full name of the day of the week
-%a      Sun                 Abbreviated name of the day of the week
-%w      0                   Number of the day of the week (0 = Sunday, 6 = Saturday)
-%o      th                  The ordinal suffix string following the day of the month
-            == Hours ==
-%H      23                  Hours in 24-hour format (two digits)
-%#H     3                   Hours in 24-hour integer format (one or two digits)
-%I      11                  Hours in 12-hour format (two digits)
-%#I     3                   Hours in 12-hour integer format (one or two digits)
-%p      PM                  AM or PM
-            == Minutes ==
-%M      09                  Minutes (two digits)
-%#M     9                   Minutes (one or two digits)
-            == Seconds ==
-%S      02                  Seconds (two digits)
-%#S     2                   Seconds (one or two digits)
-%s      1206567625723       Unix timestamp (Seconds past 1970-01-01 00:00:00)
-            == Milliseconds ==
-%N      008                 Milliseconds (three digits)
-%#N     8                   Milliseconds (one to three digits)
-            == Timezone ==
-%O      360                 difference in minutes between local time and GMT
-%Z      Mountain Standard Time  Name of timezone as reported by browser
-%G      -06:00              Hours and minutes between GMT
-            == Shortcuts ==
-%F      2008-03-26          %Y-%m-%d
-%T      05:06:30            %H:%M:%S
-%X      05:06:30            %H:%M:%S
-%x      03/26/08            %m/%d/%y
-%D      03/26/08            %m/%d/%y
-%#c     Wed Mar 26 15:31:00 2008  %a %b %e %H:%M:%S %Y
-%v      3-Sep-2008          %e-%b-%Y
-%R      15:31               %H:%M
-%r      3:31:00 PM          %I:%M:%S %p
-            == Characters ==
-%n      \n                  Newline
-%t      \t                  Tab
-%%      %                   Percent Symbol
Summary
$.jqplot.DateAxisRendererA plugin for a jqPlot to render an axis as a series of date values.
Properties
tickRendererA class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
tickInsetControls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
drawBaselineTrue to draw the axis baseline.
baselineWidthwidth of the baseline in pixels.
baselineColorCSS color spec for the baseline.
- -

Properties

- -

tickRenderer

A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;

- -

tickInset

this.tickInset = 0

Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.  0 is no inset, 0.5 is one half a tick interval, 1 is a full tick interval, etc.

- -

drawBaseline

this.drawBaseline = true

True to draw the axis baseline.

- -

baselineWidth

this.baselineWidth = null

width of the baseline in pixels.

- -

baselineColor

this.baselineColor = null

CSS color spec for the baseline.

- -
- - - - - - - - - - -
A “tick” object showing the value of a tick/gridline on the plot.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.drawBaseline = true
True to draw the axis baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineColor = null
CSS color spec for the baseline.
An individual axis object.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html deleted file mode 100644 index a45f0227..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html +++ /dev/null @@ -1,98 +0,0 @@ - - -$.jqplot.DonutRenderer - - - - - - - - - -

Plugin renderer to draw a donut chart. x values, if present, will be used as slice labels. y values give slice size.

To use this renderer, you need to include the donut renderer plugin, for example:

<script type="text/javascript" src="plugins/jqplot.donutRenderer.js"></script>

Properties described here are passed into the $.jqplot function as options on the series renderer.  For example:

plot2 = $.jqplot('chart2', [s1, s2], {
-    seriesDefaults: {
-        renderer:$.jqplot.DonutRenderer,
-        rendererOptions:{
-             sliceMargin: 2,
-             innerDiameter: 110,
-             startAngle: -90
-         }
-     }
-});

A donut plot will trigger events on the plot target according to user interaction.  All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.

’jqplotDataMouseOver’triggered when user mouseing over a slice.
’jqplotDataHighlight’triggered the first time user mouses over a slice, if highlighting is enabled.
’jqplotDataUnhighlight’triggered when a user moves the mouse out of a highlighted slice.
’jqplotDataClick’triggered when the user clicks on a slice.
’jqplotDataRightClick’tiggered when the user right clicks on a slice if the “captureRightClick” option is set to true on the plot.
Summary
$.jqplot.DonutRendererPlugin renderer to draw a donut chart.
Properties
diameterOuter diameter of the donut, auto computed by default
innerDiameterInner diameter of the donut, auto calculated by default.
thicknessthickness of the donut, auto computed by default Overridden by if innerDiameter is specified.
paddingpadding between the donut and plot edges, legend, etc.
sliceMarginangular spacing between donut slices in degrees.
ringMarginpixel distance between rings, or multiple series in a donut plot.
filltrue or false, wether to fil the slices.
shadowOffsetoffset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
highlightMouseOverTrue to highlight slice when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a slice.
highlightColorsan array of colors to use when highlighting a slice.
dataLabelsEither ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
showDataLabelstrue to show data labels on slices.
dataLabelFormatStringFormat string for data labels.
dataLabelThreshold
dataLabelPositionFactorA Multiplier (0-1) of the pie radius which controls position of label on slice.
dataLabelNudgeNumber of pixels to slide the label away from (+) or toward (-) the center of the pie.
startAngleAngle to start drawing donut in degrees.
$.jqplot.DonutLegendRendererLegend Renderer specific to donut plots.
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
- -

Properties

- -

diameter

this.diameter = null

Outer diameter of the donut, auto computed by default

- -

innerDiameter

this.innerDiameter = null

Inner diameter of the donut, auto calculated by default.  If specified will override thickness value.

- -

thickness

this.thickness = null

thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.

- -

padding

this.padding = 20

padding between the donut and plot edges, legend, etc.

- -

sliceMargin

this.sliceMargin = 0

angular spacing between donut slices in degrees.

- -

ringMargin

this.ringMargin = null

pixel distance between rings, or multiple series in a donut plot. null will compute ringMargin based on sliceMargin.

- -

fill

this.fill = true

true or false, wether to fil the slices.

- -

shadowOffset

this.shadowOffset = 2

offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.

- -

shadowAlpha

this.shadowAlpha = 0.07

transparency of the shadow (0 = transparent, 1 = opaque)

- -

shadowDepth

this.shadowDepth = 5

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

- -

highlightMouseOver

this.highlightMouseOver = true

True to highlight slice when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

- -

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a slice.  This will be disabled if highlightMouseOver is true.

- -

highlightColors

this.highlightColors = []

an array of colors to use when highlighting a slice.

- -

dataLabels

this.dataLabels = 'percent'

Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.  Defaults to percentage of each pie slice.

- -

showDataLabels

this.showDataLabels = false

true to show data labels on slices.

- -

dataLabelFormatString

this.dataLabelFormatString = null

Format string for data labels.  If none, ‘%s’ is used for “label” and for arrays, ‘%d’ for value and ‘%d%%’ for percentage.

- -

dataLabelThreshold

this.dataLabelThreshold = 3
Threshhold in percentage (0100) of pie area, below which no label will be displayed.  This applies to all label types, not just to percentage labels.
- -

dataLabelPositionFactor

this.dataLabelPositionFactor = 0.4

A Multiplier (0-1) of the pie radius which controls position of label on slice.  Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.

- -

dataLabelNudge

this.dataLabelNudge = 0

Number of pixels to slide the label away from (+) or toward (-) the center of the pie.

- -

startAngle

this.startAngle = 0

Angle to start drawing donut in degrees.  According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.  90 = on the negaive y axis.  180 or - 180 = on the negative x axis.

- -

$.jqplot.DonutLegendRenderer

Legend Renderer specific to donut plots.  Set by default when user creates a donut plot.

Summary
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
- -

Properties

- -

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

- -

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

- -
- - - - - - - - - - -
this.diameter = null
Outer diameter of the donut, auto computed by default
this.innerDiameter = null
Inner diameter of the donut, auto calculated by default.
this.thickness = null
thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.
this.padding = 20
padding between the donut and plot edges, legend, etc.
this.sliceMargin = 0
angular spacing between donut slices in degrees.
this.ringMargin = null
pixel distance between rings, or multiple series in a donut plot.
this.fill = true
true or false, wether to fil the slices.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.showDataLabels = false
true to show data labels on slices.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelThreshold = 3
this.dataLabelPositionFactor = 0.4
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabelNudge = 0
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.startAngle = 0
Angle to start drawing donut in degrees.
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html deleted file mode 100644 index 3479e655..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html +++ /dev/null @@ -1,45 +0,0 @@ - - -$.jqplot.Dragable - - - - - - - - - -

Plugin to make plotted points dragable by the user.

Summary
$.jqplot.DragablePlugin to make plotted points dragable by the user.
Properties
colorCSS color spec for the dragged point (and adjacent line segment or bar).
constrainToConstrain dragging motion to an axis or to none.
- -

Properties

- -

color

this.color

CSS color spec for the dragged point (and adjacent line segment or bar).

- -

constrainTo

this.constrainTo = 'none'

Constrain dragging motion to an axis or to none.  Allowable values are ‘none’, ‘x’, ‘y’

- -
- - - - - - - - - - -
this.color
CSS color spec for the dragged point (and adjacent line segment or bar).
this.constrainTo = 'none'
Constrain dragging motion to an axis or to none.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html deleted file mode 100644 index b5f5d109..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html +++ /dev/null @@ -1,51 +0,0 @@ - - -/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.enhancedLegendRenderer.js - - - - - - - - - -
Summary
jqplot.enhancedLegendRenderer.js
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
seriesTogglefalse to not enable series on/off toggling on the legend.
seriesToggleReplotTrue to replot the chart after toggling series on/off.
disableIEFadingtrue to toggle series with a show/hide method only and not allow fading in/out.
- -

Properties

- -

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

- -

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

- -

seriesToggle

this.seriesToggle = 'normal'

false to not enable series on/off toggling on the legend. true or a fadein/fadeout speed (number of milliseconds or ‘fast’, ‘normal’, ‘slow’) to enable show/hide of series on click of legend item.

- -

seriesToggleReplot

this.seriesToggleReplot = false

True to replot the chart after toggling series on/off.  This will set the series show property to false.  This allows for rescaling or other maniplation of chart.  Set to an options object (e.g.  {resetAxes: true}) for replot options.

- -

disableIEFading

this.disableIEFading = true

true to toggle series with a show/hide method only and not allow fading in/out.  This is to overcome poor performance of fade in some versions of IE.

- -
- - - - - - - - - - -
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.seriesToggle = 'normal'
false to not enable series on/off toggling on the legend.
this.seriesToggleReplot = false
True to replot the chart after toggling series on/off.
this.disableIEFading = true
true to toggle series with a show/hide method only and not allow fading in/out.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html deleted file mode 100644 index 17d2cf54..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html +++ /dev/null @@ -1,87 +0,0 @@ - - -$.jqplot.FunnelRenderer - - - - - - - - - -

Plugin renderer to draw a funnel chart. x values, if present, will be used as labels. y values give area size.

Funnel charts will draw a single series only.

To use this renderer, you need to include the funnel renderer plugin, for example:

<script type="text/javascript" src="plugins/jqplot.funnelRenderer.js"></script>

Properties described here are passed into the $.jqplot function as options on the series renderer.  For example:

plot2 = $.jqplot('chart2', [s1, s2], {
-    seriesDefaults: {
-        renderer:$.jqplot.FunnelRenderer,
-        rendererOptions:{
-             sectionMargin: 12,
-             widthRatio: 0.3
-         }
-     }
-});

IMPORTANT

The funnel renderer will reorder data in descending order so the largest value in the data set is first and displayed on top of the funnel.  Data will then be displayed in descending order down the funnel.  The area of each funnel section will correspond to the value of each data point relative to the sum of all values.  That is section area is proportional to section value divided by sum of all section values.

If your data is not in descending order when passed into the plot, it will be reordered when stored in the series.data property.  A copy of the unordered data is kept in the series._unorderedData property.

A funnel plot will trigger events on the plot target according to user interaction.  All events return the event object, the series index, the point (section) index, and the point data for the appropriate section.  Note the point index will referr to the ordered data, not the original unordered data.

’jqplotDataMouseOver’triggered when mousing over a section.
’jqplotDataHighlight’triggered the first time user mouses over a section, if highlighting is enabled.
’jqplotDataUnhighlight’triggered when a user moves the mouse out of a highlighted section.
’jqplotDataClick’triggered when the user clicks on a section.
’jqplotDataRightClick’tiggered when the user right clicks on a section if the “captureRightClick” option is set to true on the plot.
Summary
$.jqplot.FunnelRendererPlugin renderer to draw a funnel chart.
Properties
paddingpadding between the funnel and plot edges, legend, etc.
sectionMarginspacing between funnel sections in pixels.
filltrue or false, wether to fill the areas.
shadowOffsetoffset of the shadow from the area and offset of each succesive stroke of the shadow from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
highlightMouseOverTrue to highlight area when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a area.
highlightColorsarray of colors to use when highlighting an area.
widthRatioThe ratio of the width of the top of the funnel to the bottom.
lineWidthwidth of line if areas are stroked and not filled.
dataLabelsEither ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
showDataLabelstrue to show data labels on slices.
dataLabelFormatStringFormat string for data labels.
dataLabelThreshold
$.jqplot.FunnelLegendRendererLegend Renderer specific to funnel plots.
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
- -

Properties

- -

padding

this.padding = {top: 20, right: 20, bottom: 20, left: 20}

padding between the funnel and plot edges, legend, etc.

- -

sectionMargin

this.sectionMargin = 6

spacing between funnel sections in pixels.

- -

fill

this.fill = true

true or false, wether to fill the areas.

- -

shadowOffset

this.shadowOffset = 2

offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.

- -

shadowAlpha

this.shadowAlpha = 0.07

transparency of the shadow (0 = transparent, 1 = opaque)

- -

shadowDepth

this.shadowDepth = 5

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

- -

highlightMouseOver

this.highlightMouseOver = true

True to highlight area when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a area.

- -

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a area.  This will be disabled if highlightMouseOver is true.

- -

highlightColors

this.highlightColors = []

array of colors to use when highlighting an area.

- -

widthRatio

this.widthRatio = 0.2

The ratio of the width of the top of the funnel to the bottom. a ratio of 0 will make an upside down pyramid.

- -

lineWidth

this.lineWidth = 2

width of line if areas are stroked and not filled.

- -

dataLabels

this.dataLabels = 'percent'

Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.  Defaults to percentage of each pie slice.

- -

showDataLabels

this.showDataLabels = false

true to show data labels on slices.

- -

dataLabelFormatString

this.dataLabelFormatString = null

Format string for data labels.  If none, ‘%s’ is used for “label” and for arrays, ‘%d’ for value and ‘%d%%’ for percentage.

- -

dataLabelThreshold

this.dataLabelThreshold = 3
Threshhold in percentage (0100) of pie area, below which no label will be displayed.  This applies to all label types, not just to percentage labels.
- -

$.jqplot.FunnelLegendRenderer

Legend Renderer specific to funnel plots.  Set by default when the user creates a funnel plot.

Summary
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
- -

Properties

- -

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

- -

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

- -
- - - - - - - - - - -
this.padding = {top: 20, right: 20, bottom: 20, left: 20}
padding between the funnel and plot edges, legend, etc.
this.sectionMargin = 6
spacing between funnel sections in pixels.
this.fill = true
true or false, wether to fill the areas.
this.shadowOffset = 2
offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.highlightMouseOver = true
True to highlight area when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a area.
this.highlightColors = []
array of colors to use when highlighting an area.
this.widthRatio = 0.2
The ratio of the width of the top of the funnel to the bottom.
this.lineWidth = 2
width of line if areas are stroked and not filled.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.showDataLabels = false
true to show data labels on slices.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelThreshold = 3
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html deleted file mode 100644 index daa8806b..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html +++ /dev/null @@ -1,80 +0,0 @@ - - -$.jqplot.Highlighter - - - - - - - - - -

Plugin which will highlight data points when they are moused over.

To use this plugin, include the js file in your source:

<script type="text/javascript" src="plugins/jqplot.highlighter.js"></script>

A tooltip providing information about the data point is enabled by default.  To disable the tooltip, set “showTooltip” to false.

You can control what data is displayed in the tooltip with various options.  The “tooltipAxes” option controls wether the x, y or both data values are displayed.

Some chart types (e.g. hi-low-close) have more than one y value per data point.  To display the additional values in the tooltip, set the “yvalues” option to the desired number of y values present (3 for a hlc chart).

By default, data values will be formatted with the same formatting specifiers as used to format the axis ticks.  A custom format code can be supplied with the tooltipFormatString option.  This will apply to all values in the tooltip.

For more complete control, the “formatString” option can be set.  This Allows conplete control over tooltip formatting.  Values are passed to the format string in an order determined by the “tooltipAxes” and “yvalues” options.  So, if you have a hi-low-close chart and you just want to display the hi-low-close values in the tooltip, you could set a formatString like:

highlighter: {
-    tooltipAxes: 'y',
-    yvalues: 3,
-    formatString:'<table class="jqplot-highlighter">
-        <tr><td>hi:</td><td>%s</td></tr>
-        <tr><td>low:</td><td>%s</td></tr>
-        <tr><td>close:</td><td>%s</td></tr></table>'
-}
Summary
$.jqplot.HighlighterPlugin which will highlight data points when they are moused over.
Properties
showtrue to show the highlight.
markerRendererRenderer used to draw the marker of the highlighted point.
showMarkertrue to show the marker
lineWidthAdjustPixels to add to the lineWidth of the highlight.
sizeAdjustPixels to add to the overall size of the highlight.
showTooltipShow a tooltip with data point values.
tooltipLocationWhere to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
fadeTooltiptrue = fade in/out tooltip, flase = show/hide tooltip
tooltipFadeSpeed‘slow’, ‘def’, ‘fast’, or number of milliseconds.
tooltipOffsetPixel offset of tooltip from the highlight.
tooltipAxesWhich axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.
useAxesFormattersUse the x and y axes formatters to format the text in the tooltip.
tooltipFormatStringsprintf format string for the tooltip.
formatStringalternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.
yvaluesNumber of y values to expect in the data point array.
bringSeriesToFrontThis option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.
- -

Properties

- -

show

this.show = $.jqplot.config.enablePlugins

true to show the highlight.

- -

markerRenderer

this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false})

Renderer used to draw the marker of the highlighted point.  Renderer will assimilate attributes from the data point being highlighted, so no attributes need set on the renderer directly.  Default is to turn off shadow drawing on the highlighted point.

- -

showMarker

this.showMarker = true

true to show the marker

- -

lineWidthAdjust

this.lineWidthAdjust = 2.5

Pixels to add to the lineWidth of the highlight.

- -

sizeAdjust

this.sizeAdjust = 5

Pixels to add to the overall size of the highlight.

- -

showTooltip

this.showTooltip = true

Show a tooltip with data point values.

- -

tooltipLocation

this.tooltipLocation = 'nw'

Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’

- -

fadeTooltip

this.fadeTooltip = true

true = fade in/out tooltip, flase = show/hide tooltip

- -

tooltipFadeSpeed

this.tooltipFadeSpeed = "fast"

’slow’, ‘def’, ‘fast’, or number of milliseconds.

- -

tooltipOffset

this.tooltipOffset = 2

Pixel offset of tooltip from the highlight.

- -

tooltipAxes

this.tooltipAxes = 'both'

Which axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.

- -

useAxesFormatters

this.useAxesFormatters = true

Use the x and y axes formatters to format the text in the tooltip.

- -

tooltipFormatString

this.tooltipFormatString = '%.5P'

sprintf format string for the tooltip.  Uses Ash Searle’s javascript sprintf implementation found here: http://hexmen.com/blog/2007/03/printf-sprintf/ See http://perldoc.perl.org/functions/sprintf.html for reference.  Additional “p” and “P” format specifiers added by Chris Leonello.

- -

formatString

this.formatString = null

alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.  So, you could have a tooltip like: ‘Date: %s, number of cats: %d’ to format the whole tooltip at one go.  If useAxesFormatters is true, values will be formatted according to Axes formatters and you can populate your tooltip string with %s placeholders.

- -

yvalues

this.yvalues = 1

Number of y values to expect in the data point array.  Typically this is 1.  Certain plots, like OHLC, will have more y values in each data point array.

- -

bringSeriesToFront

this.bringSeriesToFront = false

This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.

- -
- - - - - - - - - - -
this.show = $.jqplot.config.enablePlugins
true to show the highlight.
this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false})
Renderer used to draw the marker of the highlighted point.
this.showMarker = true
true to show the marker
this.lineWidthAdjust = 2.5
Pixels to add to the lineWidth of the highlight.
this.sizeAdjust = 5
Pixels to add to the overall size of the highlight.
this.showTooltip = true
Show a tooltip with data point values.
this.tooltipLocation = 'nw'
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
this.fadeTooltip = true
true = fade in/out tooltip, flase = show/hide tooltip
this.tooltipFadeSpeed = "fast"
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
this.tooltipOffset = 2
Pixel offset of tooltip from the highlight.
this.tooltipAxes = 'both'
Which axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.tooltipFormatString = '%.5P'
sprintf format string for the tooltip.
this.formatString = null
alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.
this.yvalues = 1
Number of y values to expect in the data point array.
this.bringSeriesToFront = false
This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html deleted file mode 100644 index 4e7317e7..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html +++ /dev/null @@ -1,47 +0,0 @@ - - -$.jqplot.LogAxisRenderer - - - - - - - - - -

A plugin for a jqPlot to render a logarithmic axis.

To use this renderer, include the plugin in your source

<script type="text/javascript" language="javascript" src="plugins/jqplot.logAxisRenderer.js"></script>

and supply the appropriate options to your plot

{axes:{xaxis:{renderer:$.jqplot.LogAxisRenderer}}}
Summary
$.jqplot.LogAxisRendererA plugin for a jqPlot to render a logarithmic axis.
axisDefaultsDefault properties which will be applied directly to the series.
PropertiesProperties
drawBaselineTrue to draw the axis baseline.
minorTicksNumber of ticks to add between “major” ticks.
- -

axisDefaults

Default properties which will be applied directly to the series.

- -

Properties

Properties

basethe logarithmic base, commonly 2, 10 or Math.E
tickDistributionDeprecated.  “power” distribution of ticks always used.  Option has no effect.
- -

drawBaseline

this.drawBaseline = true

True to draw the axis baseline.

- -

minorTicks

this.minorTicks = 'auto'

Number of ticks to add between “major” ticks.  Major ticks are ticks supplied by user or auto computed.  Minor ticks cannot be created by user.

- -
- - - - - - - - - - -
this.drawBaseline = true
True to draw the axis baseline.
this.minorTicks = 'auto'
Number of ticks to add between “major” ticks.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html deleted file mode 100644 index 4dfef14c..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html +++ /dev/null @@ -1,49 +0,0 @@ - - -$.jqplot.MekkoAxisRenderer - - - - - - - - - -

An axis renderer for a Mekko chart.  Should be used with a Mekko chart where the mekkoRenderer is used on the series.  Displays the Y axis as a range from 0 to 1 (0 to 100%) and the x axis with a tick for each series scaled to the sum of all the y values.

Summary
$.jqplot.MekkoAxisRendererAn axis renderer for a Mekko chart.
Properties
tickModeHow to space the ticks on the axis.
barLabelRendererrenderer to use to draw labels under each bar.
barLabelsarray of labels to put under each bar.
barLabelOptionsoptions object to pass to the bar label renderer.
- -

Properties

- -

tickMode

this.tickMode

How to space the ticks on the axis.  ‘bar’ will place a tick at the width of each bar.  This is the default for the x axis.  ‘even’ will place ticks at even intervals.  This is the default for x2 axis and y axis.  y axis cannot be changed.

- -

barLabelRenderer

this.barLabelRenderer = $.jqplot.AxisLabelRenderer

renderer to use to draw labels under each bar.

- -

barLabels

this.barLabels = this.barLabels || []

array of labels to put under each bar.

- -

barLabelOptions

this.barLabelOptions = {}

options object to pass to the bar label renderer.

- -
- - - - - - - - - - -
this.tickMode
How to space the ticks on the axis.
this.barLabelRenderer = $.jqplot.AxisLabelRenderer
renderer to use to draw labels under each bar.
this.barLabels = this.barLabels || []
array of labels to put under each bar.
this.barLabelOptions = {}
options object to pass to the bar label renderer.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html deleted file mode 100644 index dbe71812..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html +++ /dev/null @@ -1,62 +0,0 @@ - - -$.jqplot.MekkoRenderer - - - - - - - - - -

Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. the $.jqplot.MekkoAxisRenderer should be used with mekko charts.  The mekko renderer overrides the default legend renderer with it’s own $.jqplot.MekkoLegendRenderer which allows more flexibility to specify number of rows and columns in the legend.

Data is specified per bar in the chart.  You can specify data as an array of y values, or as an array of [label, value] pairs.  Note that labels are used only on the first series.  Labels on subsequent series are ignored:

bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
-bar2 = [15,6,9,13,6];
-bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];

If you want to place labels for each bar under the axis, you use the barLabels option on the axes.  The bar labels can be styled with the “.jqplot-mekko-barLabel” css class.

barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
-axes:{xaxis:{barLabels:barLabels}}
Summary
$.jqplot.MekkoRendererDraws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph.
Properties
borderColorcolor of the borders between areas on the chart
showBordersTrue to draw borders lines between areas on the chart.
Functions
setGridDataconverts the user data values to grid coordinates and stores them in the gridData array.
makeGridDataconverts any arbitrary data values to grid coordinates and returns them.
$.jqplot.MekkoLegendRendererLegend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
- -

Properties

- -

borderColor

this.borderColor = null

color of the borders between areas on the chart

- -

showBorders

this.showBorders = true

True to draw borders lines between areas on the chart.  False will draw borders lines with the same color as the area.

- -

Functions

- -

setGridData

$.jqplot.MekkoRenderer.prototype.setGridData = function(plot)

converts the user data values to grid coordinates and stores them in the gridData array.  Will convert user data into appropriate rectangles.  Called with scope of a series.

- -

makeGridData

$.jqplot.MekkoRenderer.prototype.makeGridData = function(data,
plot)

converts any arbitrary data values to grid coordinates and returns them.  This method exists so that plugins can use a series’ linerenderer to generate grid data points without overwriting the grid data associated with that series.  Called with scope of a series.

- -

$.jqplot.MekkoLegendRenderer

Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.

Summary
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
- -

Properties

- -

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

- -

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

- -
- - - - - - - - - - -
this.borderColor = null
color of the borders between areas on the chart
this.showBorders = true
True to draw borders lines between areas on the chart.
$.jqplot.MekkoRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
$.jqplot.MekkoRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
An axis renderer for a Mekko chart.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html deleted file mode 100644 index cce6835f..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html +++ /dev/null @@ -1,103 +0,0 @@ - - -$.jqplot.MeterGaugeRenderer - - - - - - - - - -

Plugin renderer to draw a meter gauge chart.

Data consists of a single series with 1 data point to position the gauge needle.

To use this renderer, you need to include the meter gauge renderer plugin, for example:

<script type="text/javascript" src="plugins/jqplot.meterGaugeRenderer.js"></script>

Properties described here are passed into the $.jqplot function as options on the series renderer.  For example:

plot0 = $.jqplot('chart0',[[18]],{
-    title: 'Network Speed',
-    seriesDefaults: {
-        renderer: $.jqplot.MeterGaugeRenderer,
-        rendererOptions: {
-            label: 'MB/s'
-        }
-    }
-});

A meterGauge plot does not support events.

Summary
$.jqplot.MeterGaugeRendererPlugin renderer to draw a meter gauge chart.
Properties
diameterOuter diameter of the meterGauge, auto computed by default
paddingpadding between the meterGauge and plot edges, auto calculated by default.
shadowOffsetoffset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
backgroundbackground color of the inside of the gauge.
ringColorcolor of the outer ring, hub, and needle of the gauge.
tickColorcolor of the tick marks around the gauge.
ringWidthwidth of the ring around the gauge.
minMinimum value on the gauge.
maxMaximum value on the gauge.
ticksArray of tick values.
showTickstrue to show ticks around gauge.
showTickLabelstrue to show tick labels next to ticks.
labelA gauge label like ‘kph’ or ‘Volts’
labelHeightAdjustNumber of Pixels to offset the label up (-) or down (+) from its default position.
labelPositionWhere to position the label, either ‘inside’ or ‘bottom’.
intervalsArray of ranges to be drawn around the gauge.
intervalColorsArray of colors to use for the intervals.
intervalInnerRadiusRadius of the inner circle of the interval ring.
intervalOuterRadiusRadius of the outer circle of the interval ring.
tickSpacingDegrees between ticks.
hubRadiusRadius of the hub at the bottom center of gauge which the needle attaches to.
tickPaddingpadding of the tick marks to the outer ring and the tick labels to marks.
needleThicknessMaximum thickness the needle.
needlePadPadding between needle and inner edge of the ring when the needle is at the min or max gauge value.
pegNeedleTrue will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.
- -

Properties

- -

diameter

this.diameter = null

Outer diameter of the meterGauge, auto computed by default

- -

padding

this.padding = null

padding between the meterGauge and plot edges, auto calculated by default.

- -

shadowOffset

this.shadowOffset = 2

offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.

- -

shadowAlpha

this.shadowAlpha = 0.07

transparency of the shadow (0 = transparent, 1 = opaque)

- -

shadowDepth

this.shadowDepth = 4

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

- -

background

this.background = "#efefef"

background color of the inside of the gauge.

- -

ringColor

this.ringColor = "#BBC6D0"

color of the outer ring, hub, and needle of the gauge.

- -

tickColor

this.tickColor = "989898"

color of the tick marks around the gauge.

- -

ringWidth

this.ringWidth = null

width of the ring around the gauge.  Auto computed by default.

- -

min

this.min

Minimum value on the gauge.  Auto computed by default

- -

max

this.max

Maximum value on the gauge.  Auto computed by default

- -

ticks

this.ticks = []

Array of tick values.  Auto computed by default.

- -

showTicks

this.showTicks = true

true to show ticks around gauge.

- -

showTickLabels

this.showTickLabels = true

true to show tick labels next to ticks.

- -

label

this.label = null

A gauge label like ‘kph’ or ‘Volts’

- -

labelHeightAdjust

this.labelHeightAdjust = 0

Number of Pixels to offset the label up (-) or down (+) from its default position.

- -

labelPosition

this.labelPosition = 'inside'

Where to position the label, either ‘inside’ or ‘bottom’.

- -

intervals

this.intervals = []

Array of ranges to be drawn around the gauge.  Array of form:

[value1, value2, ...]

indicating the values for the first, second, ... intervals.

- -

intervalColors

this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]

Array of colors to use for the intervals.

- -

intervalInnerRadius

this.intervalInnerRadius = null

Radius of the inner circle of the interval ring.

- -

intervalOuterRadius

this.intervalOuterRadius = null

Radius of the outer circle of the interval ring.

- -

tickSpacing

this.tickSpacing = 30

Degrees between ticks.  This is a target number, if incompatible span and ticks are supplied, a suitable spacing close to this value will be computed.

- -

hubRadius

this.hubRadius = null

Radius of the hub at the bottom center of gauge which the needle attaches to.  Auto computed by default

- -

tickPadding

this.tickPadding = null

padding of the tick marks to the outer ring and the tick labels to marks.  Auto computed by default.

- -

needleThickness

this.needleThickness = null

Maximum thickness the needle.  Auto computed by default.

- -

needlePad

this.needlePad = 6

Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.

- -

pegNeedle

this.pegNeedle = true

True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.

- -
- - - - - - - - - - -
this.diameter = null
Outer diameter of the meterGauge, auto computed by default
this.padding = null
padding between the meterGauge and plot edges, auto calculated by default.
this.shadowOffset = 2
offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowDepth = 4
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.background = "#efefef"
background color of the inside of the gauge.
this.ringColor = "#BBC6D0"
color of the outer ring, hub, and needle of the gauge.
this.tickColor = "989898"
color of the tick marks around the gauge.
this.ringWidth = null
width of the ring around the gauge.
this.min
Minimum value on the gauge.
this.max
Maximum value on the gauge.
this.ticks = []
Array of tick values.
this.showTicks = true
true to show ticks around gauge.
this.showTickLabels = true
true to show tick labels next to ticks.
this.label = null
A gauge label like ‘kph’ or ‘Volts’
this.labelHeightAdjust = 0
Number of Pixels to offset the label up (-) or down (+) from its default position.
this.labelPosition = 'inside'
Where to position the label, either ‘inside’ or ‘bottom’.
this.intervals = []
Array of ranges to be drawn around the gauge.
this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]
Array of colors to use for the intervals.
this.intervalInnerRadius = null
Radius of the inner circle of the interval ring.
this.intervalOuterRadius = null
Radius of the outer circle of the interval ring.
this.tickSpacing = 30
Degrees between ticks.
this.hubRadius = null
Radius of the hub at the bottom center of gauge which the needle attaches to.
this.tickPadding = null
padding of the tick marks to the outer ring and the tick labels to marks.
this.needleThickness = null
Maximum thickness the needle.
this.needlePad = 6
Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
this.pegNeedle = true
True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html deleted file mode 100644 index 2a200898..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html +++ /dev/null @@ -1,65 +0,0 @@ - - -$.jqplot.OHLCRenderer - - - - - - - - - -

jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.

To use this plugin, include the renderer js file in your source:

<script type="text/javascript" src="plugins/jqplot.ohlcRenderer.js"></script>

You will most likely want to use a date axis renderer for the x axis also, so include the date axis render js file also:

<script type="text/javascript" src="plugins/jqplot.dateAxisRenderer.js"></script>

Then you set the renderer in the series options on your plot

series: [{renderer:$.jqplot.OHLCRenderer}]

For OHLC and candlestick charts, data should be specified like so:

dat = [['07/06/2009',138.7,139.68,135.18,135.4], ['06/29/2009',143.46,144.66,139.79,140.02], ...]

If the data array has only 4 values per point instead of 5, the renderer will create a Hi Low Close chart instead.  In that case, data should be supplied like:

dat = [['07/06/2009',139.68,135.18,135.4], ['06/29/2009',144.66,139.79,140.02], ...]

To generate a candlestick chart instead of an OHLC chart, set the “candlestick” option to true:

series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
Summary
$.jqplot.OHLCRendererjqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.
Properties
candleSticktrue to render chart as candleStick.
tickLengthlength of the line in pixels indicating open and close price.
bodyWidthwidth of the candlestick body in pixels.
openColorcolor of the open price tick mark.
closeColorcolor of the close price tick mark.
wickColorcolor of the hi-lo line thorugh the candlestick body.
fillUpBodytrue to render an “up” day (close price greater than open price) with a filled candlestick body.
fillDownBodytrue to render a “down” day (close price lower than open price) with a filled candlestick body.
upBodyColorColor of candlestick body of an “up” day.
downBodyColorColor of candlestick body on a “down” day.
hlctrue if is a hi-low-close chart (no open price).
lineWidthWidth of the hi-low line and open/close ticks.
- -

Properties

- -

candleStick

this.candleStick = false

true to render chart as candleStick.  Must have an open price, cannot be a hlc chart.

- -

tickLength

this.tickLength = 'auto'

length of the line in pixels indicating open and close price.  Default will auto calculate based on plot width and number of points displayed.

- -

bodyWidth

this.bodyWidth = 'auto'

width of the candlestick body in pixels.  Default will auto calculate based on plot width and number of candlesticks displayed.

- -

openColor

this.openColor = null

color of the open price tick mark.  Default is series color.

- -

closeColor

this.closeColor = null

color of the close price tick mark.  Default is series color.

- -

wickColor

this.wickColor = null

color of the hi-lo line thorugh the candlestick body.  Default is the series color.

- -

fillUpBody

this.fillUpBody = false

true to render an “up” day (close price greater than open price) with a filled candlestick body.

- -

fillDownBody

this.fillDownBody = true

true to render a “down” day (close price lower than open price) with a filled candlestick body.

- -

upBodyColor

this.upBodyColor = null

Color of candlestick body of an “up” day.  Default is series color.

- -

downBodyColor

this.downBodyColor = null

Color of candlestick body on a “down” day.  Default is series color.

- -

hlc

this.hlc = false

true if is a hi-low-close chart (no open price).  This is determined automatically from the series data.

- -

lineWidth

this.lineWidth = 1.5

Width of the hi-low line and open/close ticks.  Must be set in the rendererOptions for the series.

- -
- - - - - - - - - - -
this.candleStick = false
true to render chart as candleStick.
this.tickLength = 'auto'
length of the line in pixels indicating open and close price.
this.bodyWidth = 'auto'
width of the candlestick body in pixels.
this.openColor = null
color of the open price tick mark.
this.closeColor = null
color of the close price tick mark.
this.wickColor = null
color of the hi-lo line thorugh the candlestick body.
this.fillUpBody = false
true to render an “up” day (close price greater than open price) with a filled candlestick body.
this.fillDownBody = true
true to render a “down” day (close price lower than open price) with a filled candlestick body.
this.upBodyColor = null
Color of candlestick body of an “up” day.
this.downBodyColor = null
Color of candlestick body on a “down” day.
this.hlc = false
true if is a hi-low-close chart (no open price).
this.lineWidth = 1.5
Width of the hi-low line and open/close ticks.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html deleted file mode 100644 index 5e254102..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html +++ /dev/null @@ -1,93 +0,0 @@ - - -$.jqplot.PieRenderer - - - - - - - - - -

Plugin renderer to draw a pie chart. x values, if present, will be used as slice labels. y values give slice size.

To use this renderer, you need to include the pie renderer plugin, for example:

<script type="text/javascript" src="plugins/jqplot.pieRenderer.js"></script>

Properties described here are passed into the $.jqplot function as options on the series renderer.  For example:

plot2 = $.jqplot('chart2', [s1, s2], {
-    seriesDefaults: {
-        renderer:$.jqplot.PieRenderer,
-        rendererOptions:{
-             sliceMargin: 2,
-             startAngle: -90
-         }
-     }
-});

A pie plot will trigger events on the plot target according to user interaction.  All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.

’jqplotDataMouseOver’triggered when user mouseing over a slice.
’jqplotDataHighlight’triggered the first time user mouses over a slice, if highlighting is enabled.
’jqplotDataUnhighlight’triggered when a user moves the mouse out of a highlighted slice.
’jqplotDataClick’triggered when the user clicks on a slice.
’jqplotDataRightClick’tiggered when the user right clicks on a slice if the “captureRightClick” option is set to true on the plot.
Summary
$.jqplot.PieRendererPlugin renderer to draw a pie chart.
Properties
diameterOuter diameter of the pie, auto computed by default
paddingpadding between the pie and plot edges, legend, etc.
sliceMarginangular spacing between pie slices in degrees.
filltrue or false, wether to fil the slices.
shadowOffsetoffset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
highlightMouseOverTrue to highlight slice when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a slice.
highlightColorsan array of colors to use when highlighting a slice.
dataLabelsEither ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
showDataLabelstrue to show data labels on slices.
dataLabelFormatStringFormat string for data labels.
dataLabelThresholdThreshhold in percentage (0-100) of pie area, below which no label will be displayed.
dataLabelPositionFactorA Multiplier (0-1) of the pie radius which controls position of label on slice.
dataLabelNudgeNumber of pixels to slide the label away from (+) or toward (-) the center of the pie.
dataLabelCenterOnTrue to center the data label at its position.
startAngleAngle to start drawing pie in degrees.
$.jqplot.PieLegendRendererLegend Renderer specific to pie plots.
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
- -

Properties

- -

diameter

this.diameter = null

Outer diameter of the pie, auto computed by default

- -

padding

this.padding = 20

padding between the pie and plot edges, legend, etc.

- -

sliceMargin

this.sliceMargin = 0

angular spacing between pie slices in degrees.

- -

fill

this.fill = true

true or false, wether to fil the slices.

- -

shadowOffset

this.shadowOffset = 2

offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.

- -

shadowAlpha

this.shadowAlpha = 0.07

transparency of the shadow (0 = transparent, 1 = opaque)

- -

shadowDepth

this.shadowDepth = 5

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

- -

highlightMouseOver

this.highlightMouseOver = true

True to highlight slice when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

- -

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a slice.  This will be disabled if highlightMouseOver is true.

- -

highlightColors

this.highlightColors = []

an array of colors to use when highlighting a slice.

- -

dataLabels

this.dataLabels = 'percent'

Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.  Defaults to percentage of each pie slice.

- -

showDataLabels

this.showDataLabels = false

true to show data labels on slices.

- -

dataLabelFormatString

this.dataLabelFormatString = null

Format string for data labels.  If none, ‘%s’ is used for “label” and for arrays, ‘%d’ for value and ‘%d%%’ for percentage.

- -

dataLabelThreshold

this.dataLabelThreshold = 3

Threshhold in percentage (0-100) of pie area, below which no label will be displayed.  This applies to all label types, not just to percentage labels.

- -

dataLabelPositionFactor

this.dataLabelPositionFactor = 0.52

A Multiplier (0-1) of the pie radius which controls position of label on slice.  Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.

- -

dataLabelNudge

this.dataLabelNudge = 2

Number of pixels to slide the label away from (+) or toward (-) the center of the pie.

- -

dataLabelCenterOn

this.dataLabelCenterOn = true

True to center the data label at its position.  False to set the inside facing edge of the label at its position.

- -

startAngle

this.startAngle = 0

Angle to start drawing pie in degrees.  According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.  90 = on the negaive y axis.  180 or - 180 = on the negative x axis.

- -

$.jqplot.PieLegendRenderer

Legend Renderer specific to pie plots.  Set by default when user creates a pie plot.

Summary
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
- -

Properties

- -

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

- -

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

- -
- - - - - - - - - - -
this.diameter = null
Outer diameter of the pie, auto computed by default
this.padding = 20
padding between the pie and plot edges, legend, etc.
this.sliceMargin = 0
angular spacing between pie slices in degrees.
this.fill = true
true or false, wether to fil the slices.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.showDataLabels = false
true to show data labels on slices.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelThreshold = 3
Threshhold in percentage (0-100) of pie area, below which no label will be displayed.
this.dataLabelPositionFactor = 0.52
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabelNudge = 2
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelCenterOn = true
True to center the data label at its position.
this.startAngle = 0
Angle to start drawing pie in degrees.
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html deleted file mode 100644 index 36d309c8..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html +++ /dev/null @@ -1,72 +0,0 @@ - - -$.jqplot.PointLabels - - - - - - - - - -

Plugin for putting labels at the data points.

To use this plugin, include the js file in your source:

<script type="text/javascript" src="plugins/jqplot.pointLabels.js"></script>

By default, the last value in the data ponit array in the data series is used for the label.  For most series renderers, extra data can be added to the data point arrays and the last value will be used as the label.

For instance, this series:

[[1,4], [3,5], [7,2]]

Would, by default, use the y values in the labels.  Extra data can be added to the series like so:

[[1,4,'mid'], [3 5,'hi'], [7,2,'low']]

And now the point labels would be ‘mid’, ‘low’, and ‘hi’.

Options to the point labels and a custom labels array can be passed into the “pointLabels” option on the series option like so:

series:[{pointLabels:{
-   labels:['mid', 'hi', 'low'],
-   location:'se',
-   ypadding: 12
-   }
-}]

A custom labels array in the options takes precendence over any labels in the series data.  If you have a custom labels array in the options, but still want to use values from the series array as labels, set the “labelsFromSeries” option to true.

By default, html entities (<, >, etc.) are escaped in point labels.  If you want to include actual html markup in the labels, set the “escapeHTML” option to false.

Summary
$.jqplot.PointLabelsPlugin for putting labels at the data points.
Properties
showshow the labels or not.
locationcompass location where to position the label around the point.
labelsFromSeriestrue to use labels within data point arrays.
seriesLabelIndexarray index for location of labels within data point arrays.
labelsarray of arrays of labels, one array for each series.
stackedValuetrue to display value as stacked in a stacked plot.
ypaddingvertical padding in pixels between point and label
xpaddinghorizontal padding in pixels between point and label
escapeHTMLtrue to escape html entities in the labels.
edgeToleranceNumber of pixels that the label must be away from an axis boundary in order to be drawn.
formatterA class of a formatter for the tick text.
formatStringstring passed to the formatter.
hideZerostrue to not show a label for a value which is 0.
- -

Properties

- -

show

this.show = $.jqplot.config.enablePlugins

show the labels or not.

- -

location

this.location = 'n'

compass location where to position the label around the point.  ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’

- -

labelsFromSeries

this.labelsFromSeries = false

true to use labels within data point arrays.

- -

seriesLabelIndex

this.seriesLabelIndex = null

array index for location of labels within data point arrays. if null, will use the last element of the data point array.

- -

labels

this.labels = []

array of arrays of labels, one array for each series.

- -

stackedValue

this.stackedValue = false

true to display value as stacked in a stacked plot. no effect if labels is specified.

- -

ypadding

this.ypadding = 6

vertical padding in pixels between point and label

- -

xpadding

this.xpadding = 6

horizontal padding in pixels between point and label

- -

escapeHTML

this.escapeHTML = true

true to escape html entities in the labels.  If you want to include markup in the labels, set to false.

- -

edgeTolerance

this.edgeTolerance = -5

Number of pixels that the label must be away from an axis boundary in order to be drawn.  Negative values will allow overlap with the grid boundaries.

- -

formatter

this.formatter = $.jqplot.DefaultTickFormatter

A class of a formatter for the tick text.  sprintf by default.

- -

formatString

this.formatString = ''

string passed to the formatter.

- -

hideZeros

this.hideZeros = false

true to not show a label for a value which is 0.

- -
- - - - - - - - - - -
this.show = $.jqplot.config.enablePlugins
show the labels or not.
this.location = 'n'
compass location where to position the label around the point.
this.labelsFromSeries = false
true to use labels within data point arrays.
this.seriesLabelIndex = null
array index for location of labels within data point arrays.
this.labels = []
array of arrays of labels, one array for each series.
this.stackedValue = false
true to display value as stacked in a stacked plot.
this.ypadding = 6
vertical padding in pixels between point and label
this.xpadding = 6
horizontal padding in pixels between point and label
this.escapeHTML = true
true to escape html entities in the labels.
this.edgeTolerance = -5
Number of pixels that the label must be away from an axis boundary in order to be drawn.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatString = ''
string passed to the formatter.
this.hideZeros = false
true to not show a label for a value which is 0.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html deleted file mode 100644 index 4cf690b7..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html +++ /dev/null @@ -1,49 +0,0 @@ - - -/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.pyramidAxisRenderer.js - - - - - - - - - -
Summary
jqplot.pyramidAxisRenderer.js
Properties
positionPosition of axis.
drawBaselineTrue to draw the axis baseline.
baselineWidthwidth of the baseline in pixels.
baselineColorCSS color spec for the baseline.
- -

Properties

- -

position

this.position = null

Position of axis.  Values are: top, bottom , left, center, right.  By default, x and x2 axes are bottom, y axis is center.

- -

drawBaseline

this.drawBaseline = true

True to draw the axis baseline.

- -

baselineWidth

this.baselineWidth = null

width of the baseline in pixels.

- -

baselineColor

this.baselineColor = null

CSS color spec for the baseline.

- -
- - - - - - - - - - -
this.position = null
Position of axis.
this.drawBaseline = true
True to draw the axis baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineColor = null
CSS color spec for the baseline.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html deleted file mode 100644 index 2755c0ec..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html +++ /dev/null @@ -1,39 +0,0 @@ - - -$.jqplot.CanvasGridRenderer - - - - - - - - - -

The default jqPlot grid renderer, creating a grid on a canvas element.  The renderer has no additional options beyond the Grid class.

- -
- - - - - - - - - - -
Object representing the grid on which the plot is drawn.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html deleted file mode 100644 index 3ff6678d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html +++ /dev/null @@ -1,55 +0,0 @@ - - -/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.pyramidRenderer.js - - - - - - - - - -
Summary
jqplot.pyramidRenderer.js
Properties
barPadding
fillTrue to fill the bars.
highlightMouseOverTrue to highlight slice when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a slice.
highlightColorsan array of colors to use when highlighting a slice.
synchronizeHighlightIndex of another series to highlight when this series is highlighted.
offsetBarsFalse will center bars on their y value.
- -

Properties

- -

barPadding

this.barPadding = 10
- -

fill

this.fill = true

True to fill the bars.

- -

highlightMouseOver

this.highlightMouseOver = true

True to highlight slice when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

- -

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a slice.  This will be disabled if highlightMouseOver is true.

- -

highlightColors

this.highlightColors = []

an array of colors to use when highlighting a slice.

- -

synchronizeHighlight

this.synchronizeHighlight = false

Index of another series to highlight when this series is highlighted. null or false to not synchronize.

- -

offsetBars

this.offsetBars = false

False will center bars on their y value.  True will push bars up by 1/2 bar width to fill between their y values.  If true, there needs to be 1 more tick than there are bars.

- -
- - - - - - - - - - -
this.barPadding = 10
this.fill = true
True to fill the bars.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.synchronizeHighlight = false
Index of another series to highlight when this series is highlighted.
this.offsetBars = false
False will center bars on their y value.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html deleted file mode 100644 index e773b711..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html +++ /dev/null @@ -1,67 +0,0 @@ - - -$.jqplot.Trendline - - - - - - - - - -

Plugin which will automatically compute and draw trendlines for plotted data.

Summary
$.jqplot.TrendlinePlugin which will automatically compute and draw trendlines for plotted data.
Properties
showWether or not to show the trend line.
colorCSS color spec for the trend line.
rendererRenderer to use to draw the trend line.
rendererOptionsOptions to pass to the line renderer.
labelLabel for the trend line to use in the legend.
typeEither ‘exponential’, ‘exp’, or ‘linear’.
shadowtrue or false, wether or not to show the shadow.
markerRendererRenderer to use to draw markers on the line.
lineWidthWidth of the trend line.
shadowAngleAngle of the shadow on the trend line.
shadowOffsetpixel offset for each stroke of the shadow.
shadowAlphaAlpha transparency of the shadow.
shadowDepthnumber of strokes to make of the shadow.
- -

Properties

- -

show

this.show = $.jqplot.config.enablePlugins

Wether or not to show the trend line.

- -

color

this.color = '#666666'

CSS color spec for the trend line.  By default this wil be the same color as the primary line.

- -

renderer

this.renderer = new $.jqplot.LineRenderer()

Renderer to use to draw the trend line.  The data series that is plotted may not be rendered as a line.  Therefore, we use our own line renderer here to draw a trend line.

- -

rendererOptions

this.rendererOptions = {marker:{show:false}}

Options to pass to the line renderer.  By default, markers are not shown on trend lines.

- -

label

this.label = ''

Label for the trend line to use in the legend.

- -

type

this.type = 'linear'

Either ‘exponential’, ‘exp’, or ‘linear’.

- -

shadow

this.shadow = true

true or false, wether or not to show the shadow.

- -

markerRenderer

this.markerRenderer = {show:false}

Renderer to use to draw markers on the line.  I think this is wrong.

- -

lineWidth

this.lineWidth = 1.5

Width of the trend line.

- -

shadowAngle

this.shadowAngle = 45

Angle of the shadow on the trend line.

- -

shadowOffset

this.shadowOffset = 1.0

pixel offset for each stroke of the shadow.

- -

shadowAlpha

this.shadowAlpha = 0.07

Alpha transparency of the shadow.

- -

shadowDepth

this.shadowDepth = 3

number of strokes to make of the shadow.

- -
- - - - - - - - - - -
this.show = $.jqplot.config.enablePlugins
Wether or not to show the trend line.
this.color = '#666666'
CSS color spec for the trend line.
this.renderer = new $.jqplot.LineRenderer()
Renderer to use to draw the trend line.
this.rendererOptions = {marker:{show:false}}
Options to pass to the line renderer.
this.label = ''
Label for the trend line to use in the legend.
this.type = 'linear'
Either ‘exponential’, ‘exp’, or ‘linear’.
this.shadow = true
true or false, wether or not to show the shadow.
this.markerRenderer = {show:false}
Renderer to use to draw markers on the line.
this.lineWidth = 1.5
Width of the trend line.
this.shadowAngle = 45
Angle of the shadow on the trend line.
this.shadowOffset = 1.0
pixel offset for each stroke of the shadow.
this.shadowAlpha = 0.07
Alpha transparency of the shadow.
this.shadowDepth = 3
number of strokes to make of the shadow.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html deleted file mode 100644 index d4d40098..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html +++ /dev/null @@ -1,58 +0,0 @@ - - -jqPlot Usage - - - - - - - - - -

Usage Documentation

Introduction

jqPlot is a jQuery plugin to generate pure client-side javascript charts in your web pages.

The jqPlot home page is at http://www.jqplot.com/.

The project page and downloads are at http://www.bitbucket.org/cleonello/jqplot/.

Below are a few examples to demonstrate jqPlot usage.  These plots are shown as static images.  Many more examples of dynamically rendered plots can be seen on the test and examples pages here: ../../tests/.

Include the Files

jqPlot requires jQuery (1.4+ required for certain features). jQuery is included in the distribution.  To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas script for IE support in your web page.  Note, excanvas is required only for IE versions below 9.  IE 9 includes native support for the canvas element and does not require excanvas:

<!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
-<script language="javascript" type="text/javascript" src="jquery.min.js"></script>
-<script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
-<link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />

Add a plot container

Add a container (target) to your web page where you want your plot to show up.  Be sure to give your target a width and a height:

<div id="chartdiv" style="height:400px;width:300px; "></div>

Create a plot

Then, create the actual plot by calling the $.jqplot plugin with the id of your target and some data:

$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);

Which will produce a chart like:

Plot Options

You can customize the plot by passing options to the $.jqplot function.  Options are described in jqPlot Options in the jqPlotOptions.txt file.  An example of options usage:

$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
-{ title:'Exponential Line',
-  axes:{yaxis:{min:-10, max:240}},
-  series:[{color:'#5FAB78'}]
-});

Which will produce a plot like:

Using Plugins

You can use jqPlot plugins (that is, plugins to the jqPlot plugin) by including them in your html after you include the jqPlot plugin.  Here is how to include the log axis plugin:

<link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
-<!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
-<script language="javascript" type="text/javascript" src="jquery.min.js"></script>
-<script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
-<script language="javascript" type="text/javascript" src="jqplot.logAxisRenderer.js"></script>

Important note: For jqplot builds r529 and above (0.9.7r529 and higher), you must explicitly enable plugins via either the { show: true } plugin option to the plot or by using the $.jqplot.config.enablePlugins = true; config options set on the page before plot creation.  Only plugins that can be immediately active upon loading are affected.  This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.

Here is a the same $.jqplot call but with a log y axis:

$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
-{ title:'Exponential Line',
-  axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer}},
-  series:[{color:'#5FAB78'}]
-});

Which produces a plot like:

You can further customize with options specific to the log axis plugin:

$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
-{ title:'Exponential Line',
-  axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer, tickDistribution:'power'}},
-  series:[{color:'#5FAB78'}]
-});

Which makes a plot like:

For a full list of options, see jqPlot Options in the jqPlotOptions.txt file.

You can add as many plugins as you wish.  Order is generally not important.  Some plugins, like the highlighter plugin which highlights data points near the mouse, don’t need any extra options or setup to function.  Highlighter does have additional options which the user can set.

Other plugins, the barRenderer for example, provide functionality the must be specified in the chart options object.  To render a series as a bar graph with the bar renderer, you would first include the plugin after jqPlot:

<script language="javascript" type="text/javascript" src="plugins/jqplot.barRenderer.min.js"></script>

Then you would create a chart like:

$.jqplot('chartdiv',  [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]});

Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series.

- -
- - - - - - - - - - -
This document is out of date.
- - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index.html b/wqflask/wqflask/static/packages/jqplot/docs/index.html deleted file mode 100644 index 295fd4a6..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html deleted file mode 100644 index f34f9a3e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html +++ /dev/null @@ -1,70 +0,0 @@ - - -Class Index - - - - - - - - - -
Class Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
$#!
 $.fn
 $.jqplot
 $.jqplot.AxisLabelRenderer
 $.jqplot.AxisTickRenderer
 $.jqplot.BarRenderer
 $.jqplot.BezierCurveRenderer.js
 $.jqplot.BlockRenderer
 $.jqplot.BubbleRenderer
 $.jqplot.CanvasAxisLabelRenderer
 $.jqplot.CanvasAxisTickRenderer
 $.jqplot.CanvasGridRenderer
 $.jqplot.CanvasOverlay
 $.jqplot.CategoryAxisRenderer
 $.jqplot.ciParser
 $.jqplot.Cursor
 $.jqplot.DateAxisRenderer
 $.jqplot.DivTitleRenderer
 $.jqplot.DonutLegendRenderer
 $.jqplot.DonutRenderer
 $.jqplot.Dragable
 $.jqplot.FunnelLegendRenderer
 $.jqplot.FunnelRenderer
 $.jqplot.Highlighter
 $.jqplot.LinearAxisRenderer
 $.jqplot.LineRenderer
 $.jqplot.LogAxisRenderer
 $.jqplot.MarkerRenderer
 $.jqplot.MekkoAxisRenderer
 $.jqplot.MekkoLegendRenderer
 $.jqplot.MekkoRenderer
 $.jqplot.MeterGaugeRenderer
 $.jqplot.OHLCRenderer
 $.jqplot.PieLegendRenderer
 $.jqplot.PieRenderer
 $.jqplot.PointLabels
 $.jqplot.shadowRenderer
 $.jqplot.shapeRenderer
 $.jqplot.ThemeEngine
 $.jqplot.Trendline
A
 Axis
D
 DashedHorizontalLine
 DashedVerticalLine
G
 Grid
H
 HorizontalLine
J
 jqPlot
L
 Legend
 Line
S
 Series
T
 Title
V
 VerticalLine
- -
jQuery namespace to attach functions to jQuery elements.
jQuery function called by the user to create a plot.
Renderer to place labels on the axes.
A “tick” object showing the value of a tick/gridline on the plot.
A plugin renderer for jqPlot to draw a bar plot.
Renderer which draws lines as stacked bezier curves.
Plugin renderer to draw a x-y block chart.
Plugin renderer to draw a bubble chart.
Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.
Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.
The default jqPlot grid renderer, creating a grid on a canvas element.
A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
Data Renderer function which converts a custom JSON data object into jqPlot data format.
Plugin class representing the cursor as displayed on the plot.
A plugin for a jqPlot to render an axis as a series of date values.
The default title renderer for jqPlot.
Legend Renderer specific to donut plots.
Plugin renderer to draw a donut chart.
Plugin to make plotted points dragable by the user.
Legend Renderer specific to funnel plots.
Plugin renderer to draw a funnel chart.
Plugin which will highlight data points when they are moused over.
The default jqPlot axis renderer, creating a numeric axis.
The default line renderer for jqPlot, this class has no options beyond the Series class.
A plugin for a jqPlot to render a logarithmic axis.
The default jqPlot marker renderer, rendering the points on the line.
An axis renderer for a Mekko chart.
Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.
Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph.
Plugin renderer to draw a meter gauge chart.
jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.
Legend Renderer specific to pie plots.
Plugin renderer to draw a pie chart.
Plugin for putting labels at the data points.
The default jqPlot shadow renderer, rendering shadows behind shapes.
The default jqPlot shape renderer.
Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.
Plugin which will automatically compute and draw trendlines for plotted data.
- - - -
An individual axis object.
- - - -
A straight dashed horizontal line.
A straight dashed vertical line.
- - - -
Object representing the grid on which the plot is drawn.
- - - -
A straight horizontal line.
- - - -
Plot object returned by call to $.jqplot.
- - - -
Legend object.
A straight line.
- - - -
An individual data series object.
- - - -
Plot Title object.
- - - -
A straight vertical line.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html deleted file mode 100644 index 9198c422..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html +++ /dev/null @@ -1,34 +0,0 @@ - - -File Index - - - - - - - - - -
File Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
J
 jqplot.enhancedLegendRenderer.js
 jqplot.pyramidAxisRenderer.js
 jqplot.pyramidRenderer.js
- - - -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html deleted file mode 100644 index dbc1d7cf..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html +++ /dev/null @@ -1,70 +0,0 @@ - - -Function Index - - - - - - - - - -
Function Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
C
 copy, $.jqplot.ThemeEngine
D
 destroy, jqPlot
 draw
 drawSeries, jqPlot
G
 get, $.jqplot.ThemeEngine
 getThemeNames, $.jqplot.ThemeEngine
 getThemes, $.jqplot.ThemeEngine
I
 init, jqPlot
M
 makeGridData
 moveBlock, $.jqplot.BlockRenderer
 moveSeriesToBack, jqPlot
 moveSeriesToFront, jqPlot
N
 newTheme, $.jqplot.ThemeEngine
Q
 quickInit, jqPlot
R
 redraw, jqPlot
 reInitialize, jqPlot
 remove, $.jqplot.ThemeEngine
 rename, $.jqplot.ThemeEngine
 replot, jqPlot
 resetAxesScale, jqPlot
 restoreOriginalSeriesOrder, jqPlot
 restorePreviousSeriesOrder, jqPlot
S
 setGridData
Z
 zoomProxy, $.jqplot.Cursor.$.jqplot.Cursor
- -
$.jqplot.ThemeEngine.prototype.copy = function (sourceName,
targetName,
obj)
Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
- - - -
this.destroy = function()
Releases all resources occupied by the plot
$.jqplot.ShadowRenderer.prototype.draw = function(ctx,
points,
options)
draws an transparent black (i.e.
$.jqplot.ShapeRenderer.prototype.draw = function(ctx,
points,
options)
draws the shape.
this.draw = function()
Draws all elements of the plot into the container.
this.drawSeries = function(options,
idx)
Redraws all or just one series on the plot.
- - - -
$.jqplot.ThemeEngine.prototype.get = function(name)
Get and return the named theme or the active theme if no name given.
$.jqplot.ThemeEngine.prototype.getThemeNames = function()
Return the list of theme names in this manager in alpha-numerical order.
$.jqplot.ThemeEngine.prototype.getThemes = function()
Return a list of themes in alpha-numerical order by name.
- - - -
this.init = function(target,
data,
options)
sets the plot target, checks data and applies user options to plot.
- - - -
$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
$.jqplot.MekkoRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
this.moveBlock = function (idx,
x,
y,
duration)
Moves an individual block.
this.moveSeriesToBack = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
this.moveSeriesToFront = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
- - - -
$.jqplot.ThemeEngine.prototype.newTheme = function(name,
obj)
Create a new theme based on the default theme, adding it the themeEngine.
- - - -
this.quickInit = function ()
Quick reinitialization plot for replotting.
- - - -
this.redraw = function(clear)
Empties the plot target div and redraws the plot.
this.reInitialize = function (data,
opts)
reinitialize plot for replotting.
$.jqplot.ThemeEngine.prototype.remove = function(name)
Remove the given theme from the themeEngine.
$.jqplot.ThemeEngine.prototype.rename = function (oldName,
newName)
Rename a theme.
this.replot = function(options)
Does a reinitialization of the plot followed by a redraw.
this.resetAxesScale = function(axes,
options)
Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
this.restoreOriginalSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
this.restorePreviousSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its previous state.
- - - -
$.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
$.jqplot.MekkoRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
- - - -
$.jqplot.Cursor.zoomProxy = function(targetPlot,
controllerPlot)
links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General.html deleted file mode 100644 index d9450d7a..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/General.html +++ /dev/null @@ -1,42 +0,0 @@ - - -Index - - - - - - - - - -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
$#!
 $.fn
 $.jqplot
 $.jqplot.AxisLabelRenderer
 $.jqplot.AxisTickRenderer
 $.jqplot.BarRenderer
 $.jqplot.BezierCurveRenderer.js
 $.jqplot.BlockRenderer
 $.jqplot.BubbleRenderer
 $.jqplot.CanvasAxisLabelRenderer
 $.jqplot.CanvasAxisTickRenderer
 $.jqplot.CanvasGridRenderer
 $.jqplot.CanvasOverlay
 $.jqplot.CategoryAxisRenderer
 $.jqplot.ciParser
 $.jqplot.Cursor
 $.jqplot.DateAxisRenderer
 $.jqplot.DivTitleRenderer
 $.jqplot.DonutLegendRenderer
 $.jqplot.DonutRenderer
 $.jqplot.Dragable
 $.jqplot.FunnelLegendRenderer
 $.jqplot.FunnelRenderer
 $.jqplot.Highlighter
 $.jqplot.LinearAxisRenderer
 $.jqplot.LineRenderer
 $.jqplot.LogAxisRenderer
 $.jqplot.MarkerRenderer
 $.jqplot.MekkoAxisRenderer
 $.jqplot.MekkoLegendRenderer
 $.jqplot.MekkoRenderer
 $.jqplot.MeterGaugeRenderer
 $.jqplot.OHLCRenderer
 $.jqplot.PieLegendRenderer
 $.jqplot.PieRenderer
 $.jqplot.PointLabels
 $.jqplot.shadowRenderer
 $.jqplot.shapeRenderer
 $.jqplot.ThemeEngine
 $.jqplot.Trendline
A
 activeTheme, $.jqplot.ThemeEngine
 addLegendRowHooks, $.jqplot.$.jqplot
 alignTicks, $.jqplot.LinearAxisRenderer
 alpha, $.jqplot.shadowRenderer
 angle
 animate, jqPlot
 animateReplot, jqPlot
 autoscale, Axis
 autoscaleBubbles, $.jqplot.BubbleRenderer
 autoscaleMultiplier, $.jqplot.BubbleRenderer
 autoscalePointsFactor, $.jqplot.BubbleRenderer
 Available Options
 axes, jqPlot
 axesDefaults, jqPlot
 Axis
 axisDefaults, $.jqplot.LogAxisRenderer
B
 background
 bandData, $.jqplot.LineRenderer
 bands, $.jqplot.LineRenderer
 barDirection, $.jqplot.BarRenderer
 barLabelOptions, $.jqplot.MekkoAxisRenderer
 barLabelRenderer, $.jqplot.MekkoAxisRenderer
 barLabels, $.jqplot.MekkoAxisRenderer
 barMargin, $.jqplot.BarRenderer
 barPadding
 barWidth, $.jqplot.BarRenderer
 baselineColor
 baselineWidth
 bodyWidth, $.jqplot.OHLCRenderer
 border, Legend
 borderColor
 borderWidth
 breakOnNull, Series
 breakPoints, $.jqplot.LinearAxisRenderer
 breakTickLabel, $.jqplot.LinearAxisRenderer
 bringSeriesToFront, $.jqplot.Highlighter
 bubbleAlpha, $.jqplot.BubbleRenderer
 bubbleGradients, $.jqplot.BubbleRenderer
- -
jQuery namespace to attach functions to jQuery elements.
jQuery function called by the user to create a plot.
Renderer to place labels on the axes.
A “tick” object showing the value of a tick/gridline on the plot.
A plugin renderer for jqPlot to draw a bar plot.
Renderer which draws lines as stacked bezier curves.
Plugin renderer to draw a x-y block chart.
Plugin renderer to draw a bubble chart.
Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.
Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.
The default jqPlot grid renderer, creating a grid on a canvas element.
A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
Data Renderer function which converts a custom JSON data object into jqPlot data format.
Plugin class representing the cursor as displayed on the plot.
A plugin for a jqPlot to render an axis as a series of date values.
The default title renderer for jqPlot.
Legend Renderer specific to donut plots.
Plugin renderer to draw a donut chart.
Plugin to make plotted points dragable by the user.
Legend Renderer specific to funnel plots.
Plugin renderer to draw a funnel chart.
Plugin which will highlight data points when they are moused over.
The default jqPlot axis renderer, creating a numeric axis.
The default line renderer for jqPlot, this class has no options beyond the Series class.
A plugin for a jqPlot to render a logarithmic axis.
The default jqPlot marker renderer, rendering the points on the line.
An axis renderer for a Mekko chart.
Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.
Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph.
Plugin renderer to draw a meter gauge chart.
jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.
Legend Renderer specific to pie plots.
Plugin renderer to draw a pie chart.
Plugin for putting labels at the data points.
The default jqPlot shadow renderer, rendering shadows behind shapes.
The default jqPlot shape renderer.
Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.
Plugin which will automatically compute and draw trendlines for plotted data.
- - - -
this.activeTheme=null
Pointer to currently active theme
called at the end of legend draw, so plugins can add rows to the legend table.
this.alignTicks = false
true to align tick marks across opposed axes such as from the y2axis to yaxis.
this.alpha = 0.07
alpha transparency of shadow stroke.
this.angle = 0
angle of text, measured clockwise from x axis.
this.angle = 0
angle of text, measured clockwise from x axis.
this.angle = 45
Angle of the shadow in degrees.
this.animate = false
True to animate the series on initial plot draw (renderer dependent).
this.animateReplot = false
True to animate series after a call to the replot() method.
this.autoscale = false
DEPRECATED the default scaling algorithm produces superior results.
this.autoscaleBubbles = true
True to scale the bubble radius based on plot size.
this.autoscaleMultiplier = 1.0
Multiplier the bubble size if autoscaleBubbles is true.
this.autoscalePointsFactor = -0.07
Factor which decreases bubble size based on how many bubbles on on the chart.
See jqPlot Options for a list of options available thorugh the options object (not complete yet!)
this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}
up to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
default options that will be applied to all axes.
An individual axis object.
Default properties which will be applied directly to the series.
- - - -
this.background = "#efefef"
background color of the inside of the gauge.
this.background = '#fffdf6'
css spec for the background color.
this.background
css spec for the background of the legend box.
this.renderer.bandData = []
Data used to draw error bands or confidence intervals above/below a line.
Banding around line, e.g error bands or confidence intervals.
this.barDirection = 'vertical'
‘vertical’ = up and down bars, ‘horizontal’ = side to side bars
this.barLabelOptions = {}
options object to pass to the bar label renderer.
this.barLabelRenderer = $.jqplot.AxisLabelRenderer
renderer to use to draw labels under each bar.
this.barLabels = this.barLabels || []
array of labels to put under each bar.
this.barMargin = 10
Number of pixels between groups of bars at adjacent axis values.
this.barPadding = 10
this.barPadding = 8
Number of pixels between adjacent bars at the same axis value.
this.barWidth = null
Width of the bar in pixels (auto by devaul).
this.baselineColor = null
CSS color spec for the baseline.
this.baselineColor = null
CSS color spec for the baseline.
this.baselineColor = null
CSS color spec for the baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineWidth = null
width of the baseline in pixels.
this.bodyWidth = 'auto'
width of the candlestick body in pixels.
this.border
css spec for the border around the legend box.
this.borderColor = null
color of the borders between areas on the chart
this.borderColor = null
color of the border adjacent to the axis.
this.borderColor = '#999999'
css spec for the color of the grid border.
this.borderWidth = null
width of line stroked at the border of the axis.
this.borderWidth = 2.0
width of the border in pixels.
this.breakOnNull = false
Wether line segments should be be broken at null value.
this.breakPoints = null
EXPERIMENTAL!! 
this.breakTickLabel = "&asymp
Label to use at the axis break if breakPoints are specified.
this.bringSeriesToFront = false
This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.
this.bubbleAlpha = 1.0
Alpha transparency to apply to all bubbles in this series.
this.bubbleGradients = false
True to color the bubbles with gradient fills instead of flat colors.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html deleted file mode 100644 index 3332307e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html +++ /dev/null @@ -1,42 +0,0 @@ - - -Index - - - - - - - - - -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
C
 candleStick, $.jqplot.OHLCRenderer
 Change Log
 Changes
 clearRect, $.jqplot.shapeRenderer
 clickReset, $.jqplot.Cursor
 closeColor, $.jqplot.OHLCRenderer
 color
 constrainOutsideZoom, $.jqplot.Cursor
 constrainSmoothing, $.jqplot.LineRenderer
 constrainTo, $.jqplot.Dragable
 constrainZoomTo, $.jqplot.Cursor
 copy, $.jqplot.ThemeEngine
 Copyright&License
 css, $.jqplot.BlockRenderer
 cursorLegendFormatString, $.jqplot.Cursor
D
 DashedHorizontalLine
 DashedVerticalLine
 dashPattern
 data, jqPlot
 dataLabelCenterOn, $.jqplot.PieRenderer
 dataLabelFormatString
 dataLabelNudge
 dataLabelPositionFactor
 dataLabels
 dataLabelThreshold
 dataRenderer, jqPlot
 dataRendererOptions, jqPlot
 dblClickReset, $.jqplot.Cursor
 defaultAxisStart, jqPlot
 depth, $.jqplot.shadowRenderer
 destroy, jqPlot
 diameter
 disableIEFading
 disableStack, Series
 downBodyColor, $.jqplot.OHLCRenderer
 draw
 drawBaseline
 drawBorder, Grid
 drawGridlines, Grid
 drawMajorGridlines, Axis
 drawMajorTickMarks, Axis
 drawMinorGridlines, Axis
 drawMinorTickMarks, Axis
 drawSeries, jqPlot
E
 edgeTolerance, $.jqplot.PointLabels
 enableFontSupport
 escapeHtml
 escapeHTML
 eventListenerHooks, $.jqplot.$.jqplot
- -
this.candleStick = false
true to render chart as candleStick.
See Change Log
this.clearRect = false
true to cear a rectangle.
this.clickReset = false
Will reset plot zoom if single click on plot without drag.
this.closeColor = null
color of the close price tick mark.
color of the line
this.color
CSS color spec for the dragged point (and adjacent line segment or bar).
color of lines at top and bottom of bands [default: series color].
this.color = '#666666'
color of marker.
this.color = '#666666'
CSS color spec for the trend line.
this.color
css color spec for the series
this.constrainOutsideZoom = true
True to limit actual zoom area to edges of grid, even when zooming outside of plot area.
this.renderer.constrainSmoothing = true
True to use a more accurate smoothing algorithm that will not overshoot any data points.
this.constrainTo = 'none'
Constrain dragging motion to an axis or to none.
this.constrainZoomTo = 'none'
‘none’, ‘x’ or ‘y’
$.jqplot.ThemeEngine.prototype.copy = function (sourceName,
targetName,
obj)
Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
Copyright © 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses.
this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}
default css styles that will be applied to all data blocks.
this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString
Format string used in the cursor legend.
- - - -
A straight dashed horizontal line.
A straight dashed vertical line.
dashPattern: [8,8] }
Array of line, space settings in pixels.
dashPattern: [8,8] }
Array of line, space settings in pixels.
this.data = []
user’s data.
this.dataLabelCenterOn = true
True to center the data label at its position.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelNudge = 0
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelNudge = 2
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelPositionFactor = 0.4
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabelPositionFactor = 0.52
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabelThreshold = 3
this.dataLabelThreshold = 3
this.dataLabelThreshold = 3
Threshhold in percentage (0-100) of pie area, below which no label will be displayed.
this.dataRenderer
A callable which can be used to preprocess data passed into the plot.
this.dataRendererOptions
Options that will be passed to the dataRenderer.
this.dblClickReset = true
Will reset plot zoom if double click on plot without drag.
this.defaultAxisStart = 1
1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
this.depth = 3
how many times the shadow is stroked.
this.destroy = function()
Releases all resources occupied by the plot
this.diameter = null
Outer diameter of the donut, auto computed by default
this.diameter = null
Outer diameter of the meterGauge, auto computed by default
this.diameter = null
Outer diameter of the pie, auto computed by default
this.disableIEFading = true
true to toggle series with a show/hide method only and not allow fading in/out.
this.disableStack = false
true to not stack this series with other series in the plot.
this.downBodyColor = null
Color of candlestick body on a “down” day.
$.jqplot.ShadowRenderer.prototype.draw = function(ctx,
points,
options)
draws an transparent black (i.e.
$.jqplot.ShapeRenderer.prototype.draw = function(ctx,
points,
options)
draws the shape.
this.draw = function()
Draws all elements of the plot into the container.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBorder = true
True to draw border around grid.
this.drawGridlines = true
wether to draw the gridlines on the plot.
this.drawMajorGridlines = true
True to draw gridlines for major axis ticks.
this.drawMajorTickMarks = true
True to draw tick marks for major axis ticks.
this.drawMinorGridlines = false
True to draw gridlines for minor ticks.
this.drawMinorTickMarks = true
True to draw tick marks for minor ticks.
this.drawSeries = function(options,
idx)
Redraws all or just one series on the plot.
- - - -
this.edgeTolerance = -5
Number of pixels that the label must be away from an axis boundary in order to be drawn.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.escapeHtml = false
true to escape html in the box label.
this.escapeHtml = true
True to escape html in bubble label text.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in legend text.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in title text.
this.escapeHTML = false
true to escape HTML entities in the label.
this.escapeHTML = false
true to escape HTML entities in the label.
this.escapeHTML = true
true to escape html entities in the labels.
called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html deleted file mode 100644 index 031f05c2..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html +++ /dev/null @@ -1,42 +0,0 @@ - - -Index - - - - - - - - - -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
F
 fadeTooltip
 fill
 fillAlpha, Series
 fillAndStroke, Series
 fillAxis, Series
 fillBetween, jqPlot
 fillColor
 fillDownBody, $.jqplot.OHLCRenderer
 fillRect, $.jqplot.shapeRenderer
 fillStyle, $.jqplot.shapeRenderer
 fillToValue, Series
 fillToZero, Series
 fillUpBody, $.jqplot.OHLCRenderer
 followMouse, $.jqplot.Cursor
 fontFamily
 fontSize
 fontStretch
 fontWeight
 forceTickAt0, $.jqplot.LinearAxisRenderer
 forceTickAt100, $.jqplot.LinearAxisRenderer
 formatString
 formatter
 Functions
G
 get, $.jqplot.ThemeEngine
 getThemeNames, $.jqplot.ThemeEngine
 getThemes, $.jqplot.ThemeEngine
 GPL Version 2
 grid, jqPlot
 Grid
 gridLineColor, Grid
 gridLineWidth, Grid
 groups, $.jqplot.BarRenderer
H
 hideZeros, $.jqplot.PointLabels
 highlightAlpha, $.jqplot.BubbleRenderer
 highlightColor, $.jqplot.LineRenderer
 highlightColors
 highlightMouseDown
 highlightMouseOver
 hlc, $.jqplot.OHLCRenderer
 Hooks, $.jqplot
 HorizontalLine
 hubRadius, $.jqplot.MeterGaugeRenderer
- -
true = fade in/out tooltip, flase = show/hide tooltip
this.fadeTooltip = true
true = fade in/out tooltip, flase = show/hide tooltip
this.fill = true
True to fill the bars.
this.fill = true
true or false, wether to fil the slices.
this.fill = true
true or false, wether to fill the areas.
True to fill area between bands [default: true].
this.fill = true
true or false, wether to fil the slices.
this.fill = false
whether to fill the shape.
this.fill = false
whether to fill the shape.
this.fill = false
true or false, wether to fill under lines or in bars.
this.fillAlpha
Alpha transparency to apply to the fill under the line.
this.fillAndStroke = false
If true will stroke the line (with color this.color) as well as fill under it.
this.fillAxis = 'y'
Either ‘x’ or ‘y’.
this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }
Fill between 2 line series in a plot.
css color spec for filled area.
this.fillColor
CSS color spec to use for fill under line.
this.fillDownBody = true
true to render a “down” day (close price lower than open price) with a filled candlestick body.
this.fillRect = false
true to draw shape as a filled rectangle.
this.fillStyle = '#999999'
css color spec for the fill style.
this.fillToValue = 0
fill a filled series to this value on the fill axis.
this.fillToZero = false
true will force bar and filled series to fill toward zero on the fill Axis.
this.fillUpBody = false
true to render an “up” day (close price greater than open price) with a filled candlestick body.
this.followMouse = false
Tooltip follows the mouse, it is not at a fixed location.
this.fontFamily
css spec for the font-family css attribute.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
CSS spec for the font-family css attribute.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
css spec for the font-family css attribute.
this.fontFamily
css font-family spec for the legend text.
this.fontFamily
css font-family spec for the text.
this.fontSize
css spec for the font-size css attribute.
this.fontSize = '11pt'
CSS spec for font size.
this.fontSize = '10pt'
CSS spec for font size.
this.fontSize
css spec for the font-size attribute.
this.fontSize
css font-size spec for the legend text.
this.fontSize
css font-size spec for the text.
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.fontWeight = 'normal'
this.fontWeight = 'normal'
CSS spec for fontWeight
this.forceTickAt0 = false
This will ensure that there is always a tick mark at 0.
this.forceTickAt100 = false
This will ensure that there is always a tick mark at 100.
this.formatString = ''
string passed to the formatter.
this.formatString = ''
string passed to the formatter.
this.formatString = null
alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.
this.formatString = ''
string passed to the formatter.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
- - - -
$.jqplot.ThemeEngine.prototype.get = function(name)
Get and return the named theme or the active theme if no name given.
$.jqplot.ThemeEngine.prototype.getThemeNames = function()
Return the list of theme names in this manager in alpha-numerical order.
$.jqplot.ThemeEngine.prototype.getThemes = function()
Return a list of themes in alpha-numerical order by name.
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
this.grid = new Grid()
See Grid for grid specific options.
Object representing the grid on which the plot is drawn.
this.gridLineColor = '#cccccc'
color of the grid lines.
this.gridLineWidth = 1.0
width of the grid lines.
this.groups = 1
group bars into this many groups
- - - -
this.hideZeros = false
true to not show a label for a value which is 0.
this.highlightAlpha = null
Alpha transparency to apply when highlighting bubble.
this.highlightColor = null
color to use when highlighting an area on a filled plot.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightColors = []
an array of colors to use when highlighting a bar.
this.highlightColors = []
An array of colors to use when highlighting a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightColors = []
array of colors to use when highlighting an area.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a bubble.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a area.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over an area on a filled plot.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight bubbles when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight area when moused over.
this.highlightMouseOver = true
True to highlight area on a filled plot when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.hlc = false
true if is a hi-low-close chart (no open price).
A straight horizontal line.
this.hubRadius = null
Radius of the hub at the bottom center of gauge which the needle attaches to.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html deleted file mode 100644 index 4798c87d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html +++ /dev/null @@ -1,46 +0,0 @@ - - -Index - - - - - - - - - -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
I
 index, Series
 init, jqPlot
 innerDiameter, $.jqplot.DonutRenderer
 insertBreaks, $.jqplot.BlockRenderer
 intersectionThreshold, $.jqplot.Cursor
 interval, $.jqplot.LineRenderer
 intervalColors, $.jqplot.MeterGaugeRenderer
 intervalInnerRadius, $.jqplot.MeterGaugeRenderer
 intervalOuterRadius, $.jqplot.MeterGaugeRenderer
 intervals, $.jqplot.MeterGaugeRenderer
 Introduction
 isarc
 isMinorTick
J
 jqPlot
 jqPlot Charts
 jqPlot CSS Customization
 jqPlot Options
 jqPlot Pugin Hooks, $.jqplot
 jqPlot Usage
 jqplot.enhancedLegendRenderer.js
 jqplot.pyramidAxisRenderer.js
 jqplot.pyramidRenderer.js
L
 label
 labelHeightAdjust, $.jqplot.MeterGaugeRenderer
 labelOptions, Axis
 labelPosition
 labelRenderer, Axis
 labels
 labelsFromSeries, $.jqplot.PointLabels
 legend, jqPlot
 Legend
 Line
 lineCap
 lineJoin
 linePattern
 lineWidth
 lineWidthAdjust, $.jqplot.Highlighter
 location
 looseZoom, $.jqplot.Cursor
M
 makeGridData
 marginBottom, Legend
 marginLeft, Legend
 marginRight, Legend
 marginTop, Legend
 mark
 markerOptions, Series
 markerRenderer
 markSize
 max
 methods
 Methods, $.jqplot.BlockRenderer
 min
 minorTicks
 MIT License
 moveBlock, $.jqplot.BlockRenderer
 moveSeriesToBack, jqPlot
 moveSeriesToFront, jqPlot
- -
this.index
0 based index of this series in the plot series array.
this.init = function(target,
data,
options)
sets the plot target, checks data and applies user options to plot.
this.innerDiameter = null
Inner diameter of the donut, auto calculated by default.
this.insertBreaks = true
true to turn spaces in data block label into html breaks br /.
this.intersectionThreshold = 2
pixel distance from data point or marker to consider cursor lines intersecting with point.
interval: '3%' }
User specified interval above and below line for bands [default: ‘3%’’].
this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]
Array of colors to use for the intervals.
this.intervalInnerRadius = null
Radius of the inner circle of the interval ring.
this.intervalOuterRadius = null
Radius of the outer circle of the interval ring.
this.intervals = []
Array of ranges to be drawn around the gauge.
jqPlot requires jQuery (1.4+ required for certain features).
this.isarc = false
wether the shadow is an arc or not.
this.isarc = false
wether the shadow is an arc or not.
this.isMinorTick = false
if this is a minor tick.
this.isMinorTick = false
if this is a minor tick.
- - - -
Plot object returned by call to $.jqplot.
Pure JavaScript plotting plugin for jQuery.
Much of the styling of jqPlot is done by css.
This document is out of date.
- - - -
this.label = ''
The text or html for the label.
this.label = ''
label for the axis.
this.label = null
A gauge label like ‘kph’ or ‘Volts’
this.label = ''
Label for the trend line to use in the legend.
this.label = null
Label for the axis
this.label = ''
Line label to use in the legend.
this.labelHeightAdjust = 0
Number of Pixels to offset the label up (-) or down (+) from its default position.
this.labelOptions = {}
Options passed to the label renderer.
this.labelPosition = 'auto'
‘auto’, ‘start’, ‘middle’ or ‘end’.
this.labelPosition = 'inside'
Where to position the label, either ‘inside’ or ‘bottom’.
this.labelRenderer = $.jqplot.AxisLabelRenderer
A class of a rendering engine for creating an axis label.
this.labels = []
array of arrays of labels, one array for each series.
this.labels = []
Array of labels to use.
this.labelsFromSeries = false
true to use labels within data point arrays.
this.legend = new Legend()
see $.jqplot.TableLegendRenderer
Legend object.
A straight line.
Type of ending placed on the line [‘round’, ‘butt’, ‘square’]
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.lineCap = 'round'
Canvas lineCap style at ends of line.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineJoin = 'round'
Canvas lineJoin style between segments of series.
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
Width of the line.
this.lineWidth = 2
width of line if areas are stroked and not filled.
this.lineWidth = 2
size of the line for non-filled markers.
this.lineWidth = 1.5
Width of the hi-low line and open/close ticks.
this.lineWidth = 1.5
width of the shadow line stroke.
this.lineWidth = 1.5
Width of the trend line.
this.lineWidth = 2.5
width of the line in pixels.
this.lineWidthAdjust = 2.5
Pixels to add to the lineWidth of the highlight.
this.location = 'n'
compass location where to position the label around the point.
this.location = 'ne'
Placement of the legend.
this.looseZoom = true
Will expand zoom range to provide more rounded tick values.
- - - -
$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
$.jqplot.MekkoRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
this.marginBottom = null
CSS margin for the legend DOM element.
this.marginLeft = null
CSS margin for the legend DOM element.
this.marginRight = null
CSS margin for the legend DOM element.
this.marginTop = null
CSS margin for the legend DOM element.
this.mark = 'outside'
tick mark on the axis.
this.mark = 'outside'
tick mark on the axis.
this.markerOptions = {}
renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false})
Renderer used to draw the marker of the highlighted point.
this.markerRenderer = {show:false}
Renderer to use to draw markers on the line.
this.markerRenderer = $.jqplot.MarkerRenderer
A class of a renderer which will draw marker (e.g.
this.markSize = 6
Length of the tick marks in pixels.
this.markSize = 4
Length of the tick marks in pixels.
this.max
Maximum value on the gauge.
this.max = null
maximum value of the axis (in data units, not pixels).
this.min
Minimum value on the gauge.
this.min = null
minimum value of the axis (in data units, not pixels).
this.minorTicks = 0
Number of ticks to add between “major” ticks.
this.minorTicks = 'auto'
Number of ticks to add between “major” ticks.
Copyright © 2009-2012 Chris Leonello
this.moveBlock = function (idx,
x,
y,
duration)
Moves an individual block.
this.moveSeriesToBack = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
this.moveSeriesToFront = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html deleted file mode 100644 index 05064f8b..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html +++ /dev/null @@ -1,50 +0,0 @@ - - -Index - - - - - - - - - -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
N
 name, $.jqplot.CanvasOverlay
 needlePad, $.jqplot.MeterGaugeRenderer
 needleThickness, $.jqplot.MeterGaugeRenderer
 negativeColor, Series
 neighborThreshold, Series
 newTheme, $.jqplot.ThemeEngine
 noDataIndicator, jqPlot
 numberColumns
 numberRows
 numberTicks, Axis
O
 objects, $.jqplot.CanvasOverlay
 offset, $.jqplot.shadowRenderer
 offsetBars
 openColor, $.jqplot.OHLCRenderer
 Options Tutorial
 Options Usage
P
 pad, Axis
 padding
 padMax, Axis
 padMin, Axis
 pegNeedle, $.jqplot.MeterGaugeRenderer
 placement, Legend
 position
 postDrawHooks, $.jqplot.$.jqplot
 postDrawSeriesHooks, $.jqplot.$.jqplot
 postDrawSeriesShadowHooks, $.jqplot.$.jqplot
 postInitHooks, $.jqplot.$.jqplot
 postParseOptionsHooks, $.jqplot.$.jqplot
 postParseSeriesOptionsHooks, $.jqplot.$.jqplot
 postSeriesInitHooks, $.jqplot.$.jqplot
 predraw, Legend
 preDrawHooks, $.jqplot.$.jqplot
 preDrawLegendHooks, $.jqplot.$.jqplot
 preDrawSeriesHooks, $.jqplot.$.jqplot
 preDrawSeriesShadowHooks, $.jqplot.$.jqplot
 prefix
 preInitHooks, $.jqplot.$.jqplot
 preParseOptionsHooks, $.jqplot.$.jqplot
 preParseSeriesOptionsHooks, $.jqplot.$.jqplot
 preSeriesInitHooks, $.jqplot.$.jqplot
 Properties
 pt2px
Q
 quickInit, jqPlot
R
 redraw, jqPlot
 reInitialize, jqPlot
 remove, $.jqplot.ThemeEngine
 rename, $.jqplot.ThemeEngine
 renderer
 rendererOptions
 replot, jqPlot
 resetAxesScale, jqPlot
 restoreOriginalSeriesOrder, jqPlot
 restorePreviousSeriesOrder, jqPlot
 ringColor, $.jqplot.MeterGaugeRenderer
 ringMargin, $.jqplot.DonutRenderer
 ringWidth, $.jqplot.MeterGaugeRenderer
 rowSpacing, Legend
- -
Optional name for the overlay object.
this.needlePad = 6
Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
this.needleThickness = null
Maximum thickness the needle.
this.negativeColor
css color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
this.neighborThreshold = 4
how close or far (in pixels) the cursor must be from a point marker to detect the point.
$.jqplot.ThemeEngine.prototype.newTheme = function(name,
obj)
Create a new theme based on the default theme, adding it the themeEngine.
Options to set up a mock plot with a data loading indicator if no data is specified.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberTicks
Desired number of ticks.
- - - -
this.objects = []
this.offset = 1
Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
this.offsetBars = false
False will center bars on their y value.
this.openColor = null
color of the open price tick mark.
This document will help you understand how jqPlot’s options relate to the API documentation and the jqPlot object itself.
See Options Tutorial
- - - -
this.pad = 1.2
Padding to extend the range above and below the data bounds.
this.padding = 20
padding between the donut and plot edges, legend, etc.
this.padding = {top: 20, right: 20, bottom: 20, left: 20}
padding between the funnel and plot edges, legend, etc.
this.padding = null
padding between the meterGauge and plot edges, auto calculated by default.
this.padding = 20
padding between the pie and plot edges, legend, etc.
this.padMax = null
Padding to extend the range above data bounds.
this.padMin = null
Padding to extend the range below data bounds.
this.pegNeedle = true
True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.
this.placement = "insideGrid"
“insideGrid” places legend inside the grid area of the plot.
this.position = null
Position of axis.
called after plot draw.
called after each series is drawn.
called after series shadows are drawn.
called after initialization.
called after user options are parsed.
called after series related options are parsed.
called after series is initialized.
Wether to draw the legend before the series or not.
called before plot draw.
called before the legend is drawn.
called before each series is drawn.
called before series shadows are drawn.
this.prefix = ''
String to prepend to the tick label.
this.prefix = ''
String to prepend to the tick label.
called before initialization.
called before user options are parsed.
called before series related options are parsed.
called before series is initialized.
Properties
Axes options are specified within an axes object at the top level of the plot options like so:
These properties are specified at the top of the options object like so:
Properties will be assigned from a series array at the top level of the options.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
- - - -
this.quickInit = function ()
Quick reinitialization plot for replotting.
- - - -
this.redraw = function(clear)
Empties the plot target div and redraws the plot.
this.reInitialize = function (data,
opts)
reinitialize plot for replotting.
$.jqplot.ThemeEngine.prototype.remove = function(name)
Remove the given theme from the themeEngine.
$.jqplot.ThemeEngine.prototype.rename = function (oldName,
newName)
Rename a theme.
this.renderer = new $.jqplot.LineRenderer()
Renderer to use to draw the trend line.
this.renderer = $.jqplot.LinearAxisRenderer
A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
this.renderer = $.jqplot.CanvasGridRenderer
Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
this.renderer = $.jqplot.LineRenderer
A class of a renderer which will draw the series, see $.jqplot.LineRenderer.
this.renderer = $.jqplot.DivTitleRenderer
A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
this.rendererOptions = {marker:{show:false}}
Options to pass to the line renderer.
this.rendererOptions = {}
renderer specific options.
this.rendererOptions = {}
Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.rendererOptions = {}
Options to pass on to the renderer.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.replot = function(options)
Does a reinitialization of the plot followed by a redraw.
this.resetAxesScale = function(axes,
options)
Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
this.restoreOriginalSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
this.restorePreviousSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its previous state.
this.ringColor = "#BBC6D0"
color of the outer ring, hub, and needle of the gauge.
this.ringMargin = null
pixel distance between rings, or multiple series in a donut plot.
this.ringWidth = null
width of the ring around the gauge.
this.rowSpacing = '0.5em'
css padding-top spec for the rows in the legend.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html deleted file mode 100644 index 9070e89c..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html +++ /dev/null @@ -1,34 +0,0 @@ - - -Index - - - - - - - - - -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
S
 scaleToHiddenSeries, Axis
 sectionMargin, $.jqplot.FunnelRenderer
 series, jqPlot
 Series
 seriesColors, jqPlot
 seriesDefaults, jqPlot
 seriesLabelIndex, $.jqplot.PointLabels
 seriesToggle
 seriesToggleReplot
 setGridData
 shadow
 shadowAlpha
 shadowAngle
 shadowColor, Grid
 shadowDepth
 shadowOffset
 shadowRenderer, $.jqplot.MarkerRenderer
 shadowWidth, Grid
 shapeRenderer, $.jqplot.MarkerRenderer
 show
 showBorders, $.jqplot.MekkoRenderer
 showCursorLegend, $.jqplot.Cursor
 showDataLabels
 showGridline
 showHorizontalLine, $.jqplot.Cursor
 showLabel
 showLabels
 showLine, Series
 showLines, $.jqplot.LineRenderer
 showMark
 showMarker
 showMinorTicks, Axis
 showSwatch, Legend
 showTickLabels, $.jqplot.MeterGaugeRenderer
 showTickMarks, Axis
 showTicks
 showTooltip
 showTooltipDataPosition, $.jqplot.Cursor
 showTooltipGridPosition, $.jqplot.Cursor
 showTooltipOutsideZoom, $.jqplot.Cursor
 showTooltipPrecision, $.jqplot.CanvasOverlay
 showTooltipUnitPosition, $.jqplot.Cursor
 showVerticalLine, $.jqplot.Cursor
 size
 sizeAdjust, $.jqplot.Highlighter
 sliceMargin
 smooth, $.jqplot.LineRenderer
 sortData, jqPlot
 sortMergedLabels, $.jqplot.CategoryAxisRenderer
 stackedValue, $.jqplot.PointLabels
 stackSeries, jqPlot
 start, Line
 startAngle
 stop, Line
 strokeRect, $.jqplot.shapeRenderer
 strokeStyle, $.jqplot.shapeRenderer
 style
 suffix, $.jqplot.AxisTickRenderer
 synchronizeHighlight
 syncTicks, Axis
- -
this.scaleToHiddenSeries = false
True to include hidden series when computing axes bounds and scaling.
this.sectionMargin = 6
spacing between funnel sections in pixels.
this.series = []
Array of series object options.
An individual data series object.
this.seriesColors = $.jqplot.config.defaultColors
Ann array of CSS color specifications that will be applied, in order, to the series in the plot.
seriesDefaults: {}, series:[] }
default options that will be applied to all series.
this.seriesLabelIndex = null
array index for location of labels within data point arrays.
this.seriesToggle = 'normal'
false to not enable series on/off toggling on the legend.
this.seriesToggleReplot = false
True to replot the chart after toggling series on/off.
$.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
$.jqplot.MekkoRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
wether or not to draw a shadow on the line
this.shadow = true
wether or not to draw a shadow on the line
this.shadow = true
true or false, wether or not to show the shadow.
this.shadow = true
wether to show a shadow behind the grid.
this.shadowAlpha = 0.08
transparency of the shadow (0 = transparent, 1 = opaque)
Alpha channel transparency of shadow.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
Alpha transparency of the shadow.
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowAlpha = '0.1'
Alpha channel transparency of shadow.
Shadow angle in degrees
this.shadowAngle = 45
Shadow angle in degrees
this.shadowAngle = 45
Angle of the shadow on the trend line.
this.shadowAngle = 45
shadow angle in degrees
this.shadowAngle = 45
Shadow angle in degrees
this.shadowColor = null
an optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 4
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
number of strokes to make of the shadow.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
Shadow offset from line in pixels
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 2
offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 1
Shadow offset from line in pixels
this.shadowOffset = 2
offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 1.0
pixel offset for each stroke of the shadow.
this.shadowOffset = 1.5
Offset of each shadow stroke from the border in pixels
this.shadowOffset = 1.25
Shadow offset from line in pixels
this.shadowRenderer = new $.jqplot.ShadowRenderer()
Renderer that will draws the shadows on the marker.
this.shadowWidth = 3
width of the stoke for the shadow
this.shapeRenderer = new $.jqplot.ShapeRenderer()
Renderer that will draw the marker.
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
true to show (draw), false to not draw.
this.show = $.jqplot.config.enablePlugins
wether to show the cursor or not.
this.show = $.jqplot.config.enablePlugins
true to show the highlight.
true to show the bands.
this.show = true
wether or not to show the marker.
this.show = $.jqplot.config.enablePlugins
show the labels or not.
this.show = $.jqplot.config.enablePlugins
Wether or not to show the trend line.
this.show = false
Wether to display the axis on the graph.
this.show = false
Wether to display the legend on the graph.
this.show = true
wether or not to draw the series.
this.show = true
wether or not to show the title
this.showBorders = true
True to draw borders lines between areas on the chart.
this.showCursorLegend = false
Replace the plot legend with an enhanced legend displaying intersection information.
this.showDataLabels = false
true to show data labels on slices.
this.showDataLabels = false
true to show data labels on slices.
this.showDataLabels = false
true to show data labels on slices.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.showHorizontalLine = false
draw a horizontal line across the plot which follows the cursor.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
true to show the axis label.
this.showLabel = true
true to show label for this series in the legend.
this.showLabels = true
True to show labels on bubbles (if any), false to not show.
this.showLabels = true
true to show the label text on the legend.
this.showLine = true
wether to actually draw the line or not.
True to show lines at top and bottom of bands [default: false].
this.showMark = true
wether or not to show the mark on the axis.
this.showMark = true
wether or not to show the mark on the axis.
this.showMarker = true
true to show the marker
this.showMarker = true
wether or not to show the markers at the data points.
this.showMinorTicks = true
Wether or not to show minor ticks.
this.showSwatches = true
true to show the color swatches on the legend.
this.showTickLabels = true
true to show tick labels next to ticks.
this.showTickMarks = true
Wether to show the tick marks (line crossing grid) or not.
this.showTicks = true
true to show ticks around gauge.
this.showTicks = true
Wether to show the ticks (both marks and labels) or not.
Show a tooltip with data point values.
this.showTooltip = true
show a cursor position tooltip.
this.showTooltip = true
Show a tooltip with data point values.
this.showTooltipDataPosition = false
Used with showVerticalLine to show intersecting data points in the tooltip.
this.showTooltipGridPosition = false
show the grid pixel coordinates of the mouse.
this.showTooltipOutsideZoom = false
True will keep updating the tooltip when zooming of the grid.
Controls how close to line cursor must be to show tooltip.
this.showTooltipUnitPosition = true
show the unit (data) coordinates of the mouse.
this.showVerticalLine = false
draw a vertical line across the plot which follows the cursor.
this.size = 4
Length of the tick beyond the grid in pixels.
this.size = 9.0
Size of the marker (diameter or circle, length of edge of square, etc.)
this.sizeAdjust = 5
Pixels to add to the overall size of the highlight.
this.sliceMargin = 0
angular spacing between donut slices in degrees.
this.sliceMargin = 0
angular spacing between pie slices in degrees.
this.renderer.smooth = false
True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.
this.sortData = true
false to not sort the data passed in by the user.
this.sortMergedLabels = false
True to sort tick labels when labels are created by merging x axis values from multiple series.
this.stackedValue = false
true to display value as stacked in a stacked plot.
this.stackSeries = false
true or false, creates a stack or “mountain” plot.
[x, y] coordinates for the start of the line.
this.startAngle = 0
Angle to start drawing donut in degrees.
this.startAngle = 0
Angle to start drawing pie in degrees.
stop: [] }
[x, y] coordinates for the end of the line.
this.strokeRect = false
true to draw shape as a stroked rectangle.
this.strokeStyle = '#999999'
css color spec for the stoke style
this.style = 'crosshair'
CSS spec for cursor style
this.style = 'filledCircle'
One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
this.suffix = ''
String to append to the tick label.
this.synchronizeHighlight = false
Index of another series to highlight when this series is highlighted.
this.syncTicks = null
true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html deleted file mode 100644 index 3eeb2422..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html +++ /dev/null @@ -1,58 +0,0 @@ - - -Index - - - - - - - - - -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
T
 text, Title
 textAlign, Title
 textColor
 themes, $.jqplot.ThemeEngine
 thickness, $.jqplot.DonutRenderer
 tickColor, $.jqplot.MeterGaugeRenderer
 tickInset
 tickInterval, Axis
 tickLength, $.jqplot.OHLCRenderer
 tickMode, $.jqplot.MekkoAxisRenderer
 tickOptions, Axis
 tickPadding, $.jqplot.MeterGaugeRenderer
 tickRenderer
 ticks
 tickSpacing
 title, jqPlot
 Title
 tooltipAxes, $.jqplot.Highlighter
 tooltipAxisGroups, $.jqplot.Cursor
 tooltipFadeSpeed
 tooltipFormatString
 tooltipLocation
 tooltipOffset
 transposedData, $.jqplot.BarRenderer
 type, $.jqplot.Trendline
U
 upBodyColor, $.jqplot.OHLCRenderer
 Usage
 useAxesFormatters
 useNegativeColors, Series
 useSeriesColor, Axis
V
 varyBarColor, $.jqplot.BarRenderer
 varyBlockColors, $.jqplot.BlockRenderer
 varyBubbleColors, $.jqplot.BubbleRenderer
 Version
 VerticalLine
W
 waterfall, $.jqplot.BarRenderer
 wickColor, $.jqplot.OHLCRenderer
 widthRatio, $.jqplot.FunnelRenderer
X
 xaxis
 xmax, HorizontalLine
 xmin, HorizontalLine
 xoffset, Legend
 xpadding, $.jqplot.PointLabels
Y
 y, HorizontalLine
 yaxis
 yoffset, Legend
 ypadding, $.jqplot.PointLabels
 yvalues, $.jqplot.Highlighter
Z
 zoom, $.jqplot.Cursor
 zoomProxy, $.jqplot.Cursor.$.jqplot.Cursor
- -
this.text = text
text of the title;
this.textAlign
css text-align spec for the text.
this.textColor
css spec for the color attribute.
this.textColor = '#666666'
css spec for the color attribute.
this.textColor = '#666666'
css spec for the color attribute.
this.textColor
css color spec for the legend text.
this.textColor
css color spec for the text.
this.themes = {}
hash of themes managed by the theme engine.
this.thickness = null
thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.
this.tickColor = "989898"
color of the tick marks around the gauge.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.tickInterval
number of units between ticks.
this.tickLength = 'auto'
length of the line in pixels indicating open and close price.
this.tickMode
How to space the ticks on the axis.
this.tickOptions = {}
Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
this.tickPadding = null
padding of the tick marks to the outer ring and the tick labels to marks.
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
this.tickRenderer = $.jqplot.AxisTickRenderer
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
this.ticks = []
Array of tick values.
this.ticks = []
1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
this.tickSpacing = 30
Degrees between ticks.
this.tickSpacing = 75
Approximate pixel spacing between ticks on graph.
this.title = new Title()
Title object.
Plot Title object.
this.tooltipAxes = 'both'
Which axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.
this.tooltipAxisGroups = []
Show position for the specified axes.
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
this.tooltipFadeSpeed = "fast"
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
tooltipFormatString: '%d, %d' }
Format string passed the x and y values of the cursor on the line.
this.tooltipFormatString = '%.4P, %.4P'
sprintf format string for the tooltip.
this.tooltipFormatString = '%.5P'
sprintf format string for the tooltip.
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
this.tooltipLocation = 'se'
Where to position tooltip.
this.tooltipLocation = 'nw'
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
Pixel offset of tooltip from the highlight.
this.tooltipOffset = 6
Pixel offset of tooltip from the grid boudaries or cursor center.
this.tooltipOffset = 2
Pixel offset of tooltip from the highlight.
this.transposedData = true
NOT IMPLEMENTED YET.
this.type = 'linear'
Either ‘exponential’, ‘exp’, or ‘linear’.
- - - -
this.upBodyColor = null
Color of candlestick body of an “up” day.
See jqPlot Usage
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.useNegativeColors = true
true to color negative values differently in filled and bar charts.
this.useSeriesColor = false
Use the color of the first series associated with this axis for the tick marks and line bordering this axis.
- - - -
this.varyBarColor = false
true to color each bar of a series separately rather than have every bar of a given series the same color.
this.varyBlockColors = false
true to vary the color of each block in this series according to the seriesColors array.
this.varyBubbleColors = true
True to vary the color of each bubble in this series according to the seriesColors array.
version: 1.0.4 revision: 1121
A straight vertical line.
- - - -
this.waterfall = false
true to enable waterfall plot.
this.wickColor = null
color of the hi-lo line thorugh the candlestick body.
this.widthRatio = 0.2
The ratio of the width of the top of the funnel to the bottom.
- - - -
X axis to use for positioning/scaling the line.
this.xaxis = 'xaxis'
which x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
x value for the end of the line, null to scale to axis max.
x value for the start of the line, null to scale to axis min.
this.xoffset = 0
DEPRECATED.
this.xpadding = 6
horizontal padding in pixels between point and label
- - - -
y value to position the line
Y axis to use for positioning/scaling the line.
this.yaxis = 'yaxis'
which y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
this.yoffset = 0
DEPRECATED.
this.ypadding = 6
vertical padding in pixels between point and label
this.yvalues = 1
Number of y values to expect in the data point array.
- - - -
this.zoom = false
Enable plot zooming.
$.jqplot.Cursor.zoomProxy = function(targetPlot,
controllerPlot)
links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html deleted file mode 100644 index 8b1a49f5..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html +++ /dev/null @@ -1,46 +0,0 @@ - - -Hook Index - - - - - - - - - -
Hook Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
A
 addLegendRowHooks, $.jqplot.$.jqplot
E
 eventListenerHooks, $.jqplot.$.jqplot
J
 jqPlot Pugin Hooks, $.jqplot
P
 postDrawHooks, $.jqplot.$.jqplot
 postDrawSeriesHooks, $.jqplot.$.jqplot
 postDrawSeriesShadowHooks, $.jqplot.$.jqplot
 postInitHooks, $.jqplot.$.jqplot
 postParseOptionsHooks, $.jqplot.$.jqplot
 postParseSeriesOptionsHooks, $.jqplot.$.jqplot
 postSeriesInitHooks, $.jqplot.$.jqplot
 preDrawHooks, $.jqplot.$.jqplot
 preDrawLegendHooks, $.jqplot.$.jqplot
 preDrawSeriesHooks, $.jqplot.$.jqplot
 preDrawSeriesShadowHooks, $.jqplot.$.jqplot
 preInitHooks, $.jqplot.$.jqplot
 preParseOptionsHooks, $.jqplot.$.jqplot
 preParseSeriesOptionsHooks, $.jqplot.$.jqplot
 preSeriesInitHooks, $.jqplot.$.jqplot
- -
called at the end of legend draw, so plugins can add rows to the legend table.
- - - -
called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.
- - - - - - - -
called after plot draw.
called after each series is drawn.
called after series shadows are drawn.
called after initialization.
called after user options are parsed.
called after series related options are parsed.
called after series is initialized.
called before plot draw.
called before the legend is drawn.
called before each series is drawn.
called before series shadows are drawn.
called before initialization.
called before user options are parsed.
called before series related options are parsed.
called before series is initialized.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html deleted file mode 100644 index 24ad3fdf..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html +++ /dev/null @@ -1,42 +0,0 @@ - - -Property Index - - - - - - - - - -
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
A
 activeTheme, $.jqplot.ThemeEngine
 alignTicks, $.jqplot.LinearAxisRenderer
 alpha, $.jqplot.shadowRenderer
 angle
 animate, jqPlot
 animateReplot, jqPlot
 autoscale, Axis
 autoscaleBubbles, $.jqplot.BubbleRenderer
 autoscaleMultiplier, $.jqplot.BubbleRenderer
 autoscalePointsFactor, $.jqplot.BubbleRenderer
 axes, jqPlot
 axesDefaults, jqPlot
 axisDefaults, $.jqplot.LogAxisRenderer
B
 background
 bandData, $.jqplot.LineRenderer
 barDirection, $.jqplot.BarRenderer
 barLabelOptions, $.jqplot.MekkoAxisRenderer
 barLabelRenderer, $.jqplot.MekkoAxisRenderer
 barLabels, $.jqplot.MekkoAxisRenderer
 barMargin, $.jqplot.BarRenderer
 barPadding
 barWidth, $.jqplot.BarRenderer
 baselineColor
 baselineWidth
 bodyWidth, $.jqplot.OHLCRenderer
 border, Legend
 borderColor
 borderWidth
 breakOnNull, Series
 breakPoints, $.jqplot.LinearAxisRenderer
 breakTickLabel, $.jqplot.LinearAxisRenderer
 bringSeriesToFront, $.jqplot.Highlighter
 bubbleAlpha, $.jqplot.BubbleRenderer
 bubbleGradients, $.jqplot.BubbleRenderer
C
 candleStick, $.jqplot.OHLCRenderer
 clearRect, $.jqplot.shapeRenderer
 clickReset, $.jqplot.Cursor
 closeColor, $.jqplot.OHLCRenderer
 color
 constrainOutsideZoom, $.jqplot.Cursor
 constrainSmoothing, $.jqplot.LineRenderer
 constrainTo, $.jqplot.Dragable
 constrainZoomTo, $.jqplot.Cursor
 css, $.jqplot.BlockRenderer
 cursorLegendFormatString, $.jqplot.Cursor
- -
this.activeTheme=null
Pointer to currently active theme
this.alignTicks = false
true to align tick marks across opposed axes such as from the y2axis to yaxis.
this.alpha = 0.07
alpha transparency of shadow stroke.
this.angle = 0
angle of text, measured clockwise from x axis.
this.angle = 0
angle of text, measured clockwise from x axis.
this.angle = 45
Angle of the shadow in degrees.
this.animate = false
True to animate the series on initial plot draw (renderer dependent).
this.animateReplot = false
True to animate series after a call to the replot() method.
this.autoscale = false
DEPRECATED the default scaling algorithm produces superior results.
this.autoscaleBubbles = true
True to scale the bubble radius based on plot size.
this.autoscaleMultiplier = 1.0
Multiplier the bubble size if autoscaleBubbles is true.
this.autoscalePointsFactor = -0.07
Factor which decreases bubble size based on how many bubbles on on the chart.
this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}
up to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
default options that will be applied to all axes.
Default properties which will be applied directly to the series.
- - - -
this.background = "#efefef"
background color of the inside of the gauge.
this.background = '#fffdf6'
css spec for the background color.
this.background
css spec for the background of the legend box.
this.renderer.bandData = []
Data used to draw error bands or confidence intervals above/below a line.
this.barDirection = 'vertical'
‘vertical’ = up and down bars, ‘horizontal’ = side to side bars
this.barLabelOptions = {}
options object to pass to the bar label renderer.
this.barLabelRenderer = $.jqplot.AxisLabelRenderer
renderer to use to draw labels under each bar.
this.barLabels = this.barLabels || []
array of labels to put under each bar.
this.barMargin = 10
Number of pixels between groups of bars at adjacent axis values.
this.barPadding = 10
this.barPadding = 8
Number of pixels between adjacent bars at the same axis value.
this.barWidth = null
Width of the bar in pixels (auto by devaul).
this.baselineColor = null
CSS color spec for the baseline.
this.baselineColor = null
CSS color spec for the baseline.
this.baselineColor = null
CSS color spec for the baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineWidth = null
width of the baseline in pixels.
this.bodyWidth = 'auto'
width of the candlestick body in pixels.
this.border
css spec for the border around the legend box.
this.borderColor = null
color of the borders between areas on the chart
this.borderColor = null
color of the border adjacent to the axis.
this.borderColor = '#999999'
css spec for the color of the grid border.
this.borderWidth = null
width of line stroked at the border of the axis.
this.borderWidth = 2.0
width of the border in pixels.
this.breakOnNull = false
Wether line segments should be be broken at null value.
this.breakPoints = null
EXPERIMENTAL!! 
this.breakTickLabel = "&asymp
Label to use at the axis break if breakPoints are specified.
this.bringSeriesToFront = false
This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.
this.bubbleAlpha = 1.0
Alpha transparency to apply to all bubbles in this series.
this.bubbleGradients = false
True to color the bubbles with gradient fills instead of flat colors.
- - - -
this.candleStick = false
true to render chart as candleStick.
this.clearRect = false
true to cear a rectangle.
this.clickReset = false
Will reset plot zoom if single click on plot without drag.
this.closeColor = null
color of the close price tick mark.
color of the line
this.color
CSS color spec for the dragged point (and adjacent line segment or bar).
color of lines at top and bottom of bands [default: series color].
this.color = '#666666'
color of marker.
this.color = '#666666'
CSS color spec for the trend line.
this.color
css color spec for the series
this.constrainOutsideZoom = true
True to limit actual zoom area to edges of grid, even when zooming outside of plot area.
this.renderer.constrainSmoothing = true
True to use a more accurate smoothing algorithm that will not overshoot any data points.
this.constrainTo = 'none'
Constrain dragging motion to an axis or to none.
this.constrainZoomTo = 'none'
‘none’, ‘x’ or ‘y’
this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}
default css styles that will be applied to all data blocks.
this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString
Format string used in the cursor legend.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html deleted file mode 100644 index 60336a39..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html +++ /dev/null @@ -1,42 +0,0 @@ - - -Property Index - - - - - - - - - -
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
D
 dashPattern
 data, jqPlot
 dataLabelCenterOn, $.jqplot.PieRenderer
 dataLabelFormatString
 dataLabelNudge
 dataLabelPositionFactor
 dataLabels
 dataLabelThreshold
 dataRenderer, jqPlot
 dataRendererOptions, jqPlot
 dblClickReset, $.jqplot.Cursor
 defaultAxisStart, jqPlot
 depth, $.jqplot.shadowRenderer
 diameter
 disableIEFading
 disableStack, Series
 downBodyColor, $.jqplot.OHLCRenderer
 drawBaseline
 drawBorder, Grid
 drawGridlines, Grid
 drawMajorGridlines, Axis
 drawMajorTickMarks, Axis
 drawMinorGridlines, Axis
 drawMinorTickMarks, Axis
E
 edgeTolerance, $.jqplot.PointLabels
 enableFontSupport
 escapeHtml
 escapeHTML
F
 fadeTooltip
 fill
 fillAlpha, Series
 fillAndStroke, Series
 fillAxis, Series
 fillBetween, jqPlot
 fillColor
 fillDownBody, $.jqplot.OHLCRenderer
 fillRect, $.jqplot.shapeRenderer
 fillStyle, $.jqplot.shapeRenderer
 fillToValue, Series
 fillToZero, Series
 fillUpBody, $.jqplot.OHLCRenderer
 followMouse, $.jqplot.Cursor
 fontFamily
 fontSize
 fontStretch
 fontWeight
 forceTickAt0, $.jqplot.LinearAxisRenderer
 forceTickAt100, $.jqplot.LinearAxisRenderer
 formatString
 formatter
- -
dashPattern: [8,8] }
Array of line, space settings in pixels.
dashPattern: [8,8] }
Array of line, space settings in pixels.
this.data = []
user’s data.
this.dataLabelCenterOn = true
True to center the data label at its position.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelNudge = 0
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelNudge = 2
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelPositionFactor = 0.4
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabelPositionFactor = 0.52
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabelThreshold = 3
this.dataLabelThreshold = 3
this.dataLabelThreshold = 3
Threshhold in percentage (0-100) of pie area, below which no label will be displayed.
this.dataRenderer
A callable which can be used to preprocess data passed into the plot.
this.dataRendererOptions
Options that will be passed to the dataRenderer.
this.dblClickReset = true
Will reset plot zoom if double click on plot without drag.
this.defaultAxisStart = 1
1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
this.depth = 3
how many times the shadow is stroked.
this.diameter = null
Outer diameter of the donut, auto computed by default
this.diameter = null
Outer diameter of the meterGauge, auto computed by default
this.diameter = null
Outer diameter of the pie, auto computed by default
this.disableIEFading = true
true to toggle series with a show/hide method only and not allow fading in/out.
this.disableStack = false
true to not stack this series with other series in the plot.
this.downBodyColor = null
Color of candlestick body on a “down” day.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBorder = true
True to draw border around grid.
this.drawGridlines = true
wether to draw the gridlines on the plot.
this.drawMajorGridlines = true
True to draw gridlines for major axis ticks.
this.drawMajorTickMarks = true
True to draw tick marks for major axis ticks.
this.drawMinorGridlines = false
True to draw gridlines for minor ticks.
this.drawMinorTickMarks = true
True to draw tick marks for minor ticks.
- - - -
this.edgeTolerance = -5
Number of pixels that the label must be away from an axis boundary in order to be drawn.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.escapeHtml = false
true to escape html in the box label.
this.escapeHtml = true
True to escape html in bubble label text.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in legend text.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in title text.
this.escapeHTML = false
true to escape HTML entities in the label.
this.escapeHTML = false
true to escape HTML entities in the label.
this.escapeHTML = true
true to escape html entities in the labels.
- - - -
true = fade in/out tooltip, flase = show/hide tooltip
this.fadeTooltip = true
true = fade in/out tooltip, flase = show/hide tooltip
this.fill = true
True to fill the bars.
this.fill = true
true or false, wether to fil the slices.
this.fill = true
true or false, wether to fill the areas.
True to fill area between bands [default: true].
this.fill = true
true or false, wether to fil the slices.
this.fill = false
whether to fill the shape.
this.fill = false
whether to fill the shape.
this.fill = false
true or false, wether to fill under lines or in bars.
this.fillAlpha
Alpha transparency to apply to the fill under the line.
this.fillAndStroke = false
If true will stroke the line (with color this.color) as well as fill under it.
this.fillAxis = 'y'
Either ‘x’ or ‘y’.
this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }
Fill between 2 line series in a plot.
css color spec for filled area.
this.fillColor
CSS color spec to use for fill under line.
this.fillDownBody = true
true to render a “down” day (close price lower than open price) with a filled candlestick body.
this.fillRect = false
true to draw shape as a filled rectangle.
this.fillStyle = '#999999'
css color spec for the fill style.
this.fillToValue = 0
fill a filled series to this value on the fill axis.
this.fillToZero = false
true will force bar and filled series to fill toward zero on the fill Axis.
this.fillUpBody = false
true to render an “up” day (close price greater than open price) with a filled candlestick body.
this.followMouse = false
Tooltip follows the mouse, it is not at a fixed location.
this.fontFamily
css spec for the font-family css attribute.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
CSS spec for the font-family css attribute.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
css spec for the font-family css attribute.
this.fontFamily
css font-family spec for the legend text.
this.fontFamily
css font-family spec for the text.
this.fontSize
css spec for the font-size css attribute.
this.fontSize = '11pt'
CSS spec for font size.
this.fontSize = '10pt'
CSS spec for font size.
this.fontSize
css spec for the font-size attribute.
this.fontSize
css font-size spec for the legend text.
this.fontSize
css font-size spec for the text.
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.fontWeight = 'normal'
this.fontWeight = 'normal'
CSS spec for fontWeight
this.forceTickAt0 = false
This will ensure that there is always a tick mark at 0.
this.forceTickAt100 = false
This will ensure that there is always a tick mark at 100.
this.formatString = ''
string passed to the formatter.
this.formatString = ''
string passed to the formatter.
this.formatString = null
alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.
this.formatString = ''
string passed to the formatter.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html deleted file mode 100644 index a3549331..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html +++ /dev/null @@ -1,46 +0,0 @@ - - -Property Index - - - - - - - - - -
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
G
 grid, jqPlot
 gridLineColor, Grid
 gridLineWidth, Grid
 groups, $.jqplot.BarRenderer
H
 hideZeros, $.jqplot.PointLabels
 highlightAlpha, $.jqplot.BubbleRenderer
 highlightColor, $.jqplot.LineRenderer
 highlightColors
 highlightMouseDown
 highlightMouseOver
 hlc, $.jqplot.OHLCRenderer
 hubRadius, $.jqplot.MeterGaugeRenderer
I
 index, Series
 innerDiameter, $.jqplot.DonutRenderer
 insertBreaks, $.jqplot.BlockRenderer
 intersectionThreshold, $.jqplot.Cursor
 interval, $.jqplot.LineRenderer
 intervalColors, $.jqplot.MeterGaugeRenderer
 intervalInnerRadius, $.jqplot.MeterGaugeRenderer
 intervalOuterRadius, $.jqplot.MeterGaugeRenderer
 intervals, $.jqplot.MeterGaugeRenderer
 isarc
 isMinorTick
L
 label
 labelHeightAdjust, $.jqplot.MeterGaugeRenderer
 labelOptions, Axis
 labelPosition
 labelRenderer, Axis
 labels
 labelsFromSeries, $.jqplot.PointLabels
 legend, jqPlot
 lineCap
 lineJoin
 linePattern
 lineWidth
 lineWidthAdjust, $.jqplot.Highlighter
 location
 looseZoom, $.jqplot.Cursor
- -
this.grid = new Grid()
See Grid for grid specific options.
this.gridLineColor = '#cccccc'
color of the grid lines.
this.gridLineWidth = 1.0
width of the grid lines.
this.groups = 1
group bars into this many groups
- - - -
this.hideZeros = false
true to not show a label for a value which is 0.
this.highlightAlpha = null
Alpha transparency to apply when highlighting bubble.
this.highlightColor = null
color to use when highlighting an area on a filled plot.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightColors = []
an array of colors to use when highlighting a bar.
this.highlightColors = []
An array of colors to use when highlighting a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightColors = []
array of colors to use when highlighting an area.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a bubble.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a area.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over an area on a filled plot.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight bubbles when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight area when moused over.
this.highlightMouseOver = true
True to highlight area on a filled plot when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.hlc = false
true if is a hi-low-close chart (no open price).
this.hubRadius = null
Radius of the hub at the bottom center of gauge which the needle attaches to.
- - - -
this.index
0 based index of this series in the plot series array.
this.innerDiameter = null
Inner diameter of the donut, auto calculated by default.
this.insertBreaks = true
true to turn spaces in data block label into html breaks br /.
this.intersectionThreshold = 2
pixel distance from data point or marker to consider cursor lines intersecting with point.
interval: '3%' }
User specified interval above and below line for bands [default: ‘3%’’].
this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]
Array of colors to use for the intervals.
this.intervalInnerRadius = null
Radius of the inner circle of the interval ring.
this.intervalOuterRadius = null
Radius of the outer circle of the interval ring.
this.intervals = []
Array of ranges to be drawn around the gauge.
this.isarc = false
wether the shadow is an arc or not.
this.isarc = false
wether the shadow is an arc or not.
this.isMinorTick = false
if this is a minor tick.
this.isMinorTick = false
if this is a minor tick.
- - - -
this.label = ''
The text or html for the label.
this.label = ''
label for the axis.
this.label = null
A gauge label like ‘kph’ or ‘Volts’
this.label = ''
Label for the trend line to use in the legend.
this.label = null
Label for the axis
this.label = ''
Line label to use in the legend.
this.labelHeightAdjust = 0
Number of Pixels to offset the label up (-) or down (+) from its default position.
this.labelOptions = {}
Options passed to the label renderer.
this.labelPosition = 'auto'
‘auto’, ‘start’, ‘middle’ or ‘end’.
this.labelPosition = 'inside'
Where to position the label, either ‘inside’ or ‘bottom’.
this.labelRenderer = $.jqplot.AxisLabelRenderer
A class of a rendering engine for creating an axis label.
this.labels = []
array of arrays of labels, one array for each series.
this.labels = []
Array of labels to use.
this.labelsFromSeries = false
true to use labels within data point arrays.
this.legend = new Legend()
see $.jqplot.TableLegendRenderer
Type of ending placed on the line [‘round’, ‘butt’, ‘square’]
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.lineCap = 'round'
Canvas lineCap style at ends of line.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineJoin = 'round'
Canvas lineJoin style between segments of series.
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
Width of the line.
this.lineWidth = 2
width of line if areas are stroked and not filled.
this.lineWidth = 2
size of the line for non-filled markers.
this.lineWidth = 1.5
Width of the hi-low line and open/close ticks.
this.lineWidth = 1.5
width of the shadow line stroke.
this.lineWidth = 1.5
Width of the trend line.
this.lineWidth = 2.5
width of the line in pixels.
this.lineWidthAdjust = 2.5
Pixels to add to the lineWidth of the highlight.
this.location = 'n'
compass location where to position the label around the point.
this.location = 'ne'
Placement of the legend.
this.looseZoom = true
Will expand zoom range to provide more rounded tick values.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html deleted file mode 100644 index f802eb57..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html +++ /dev/null @@ -1,50 +0,0 @@ - - -Property Index - - - - - - - - - -
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
M
 marginBottom, Legend
 marginLeft, Legend
 marginRight, Legend
 marginTop, Legend
 mark
 markerOptions, Series
 markerRenderer
 markSize
 max
 min
 minorTicks
N
 name, $.jqplot.CanvasOverlay
 needlePad, $.jqplot.MeterGaugeRenderer
 needleThickness, $.jqplot.MeterGaugeRenderer
 negativeColor, Series
 neighborThreshold, Series
 noDataIndicator, jqPlot
 numberColumns
 numberRows
 numberTicks, Axis
O
 objects, $.jqplot.CanvasOverlay
 offset, $.jqplot.shadowRenderer
 offsetBars
 openColor, $.jqplot.OHLCRenderer
P
 pad, Axis
 padding
 padMax, Axis
 padMin, Axis
 pegNeedle, $.jqplot.MeterGaugeRenderer
 placement, Legend
 position
 predraw, Legend
 prefix
 pt2px
R
 renderer
 rendererOptions
 ringColor, $.jqplot.MeterGaugeRenderer
 ringMargin, $.jqplot.DonutRenderer
 ringWidth, $.jqplot.MeterGaugeRenderer
 rowSpacing, Legend
- -
this.marginBottom = null
CSS margin for the legend DOM element.
this.marginLeft = null
CSS margin for the legend DOM element.
this.marginRight = null
CSS margin for the legend DOM element.
this.marginTop = null
CSS margin for the legend DOM element.
this.mark = 'outside'
tick mark on the axis.
this.mark = 'outside'
tick mark on the axis.
this.markerOptions = {}
renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false})
Renderer used to draw the marker of the highlighted point.
this.markerRenderer = {show:false}
Renderer to use to draw markers on the line.
this.markerRenderer = $.jqplot.MarkerRenderer
A class of a renderer which will draw marker (e.g.
this.markSize = 6
Length of the tick marks in pixels.
this.markSize = 4
Length of the tick marks in pixels.
this.max
Maximum value on the gauge.
this.max = null
maximum value of the axis (in data units, not pixels).
this.min
Minimum value on the gauge.
this.min = null
minimum value of the axis (in data units, not pixels).
this.minorTicks = 0
Number of ticks to add between “major” ticks.
this.minorTicks = 'auto'
Number of ticks to add between “major” ticks.
- - - -
Optional name for the overlay object.
this.needlePad = 6
Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
this.needleThickness = null
Maximum thickness the needle.
this.negativeColor
css color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
this.neighborThreshold = 4
how close or far (in pixels) the cursor must be from a point marker to detect the point.
Options to set up a mock plot with a data loading indicator if no data is specified.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberTicks
Desired number of ticks.
- - - -
this.objects = []
this.offset = 1
Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
this.offsetBars = false
False will center bars on their y value.
this.openColor = null
color of the open price tick mark.
- - - -
this.pad = 1.2
Padding to extend the range above and below the data bounds.
this.padding = 20
padding between the donut and plot edges, legend, etc.
this.padding = {top: 20, right: 20, bottom: 20, left: 20}
padding between the funnel and plot edges, legend, etc.
this.padding = null
padding between the meterGauge and plot edges, auto calculated by default.
this.padding = 20
padding between the pie and plot edges, legend, etc.
this.padMax = null
Padding to extend the range above data bounds.
this.padMin = null
Padding to extend the range below data bounds.
this.pegNeedle = true
True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.
this.placement = "insideGrid"
“insideGrid” places legend inside the grid area of the plot.
this.position = null
Position of axis.
Wether to draw the legend before the series or not.
this.prefix = ''
String to prepend to the tick label.
this.prefix = ''
String to prepend to the tick label.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
- - - -
this.renderer = new $.jqplot.LineRenderer()
Renderer to use to draw the trend line.
this.renderer = $.jqplot.LinearAxisRenderer
A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
this.renderer = $.jqplot.CanvasGridRenderer
Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
this.renderer = $.jqplot.LineRenderer
A class of a renderer which will draw the series, see $.jqplot.LineRenderer.
this.renderer = $.jqplot.DivTitleRenderer
A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
this.rendererOptions = {marker:{show:false}}
Options to pass to the line renderer.
this.rendererOptions = {}
renderer specific options.
this.rendererOptions = {}
Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.rendererOptions = {}
Options to pass on to the renderer.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.ringColor = "#BBC6D0"
color of the outer ring, hub, and needle of the gauge.
this.ringMargin = null
pixel distance between rings, or multiple series in a donut plot.
this.ringWidth = null
width of the ring around the gauge.
this.rowSpacing = '0.5em'
css padding-top spec for the rows in the legend.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html deleted file mode 100644 index 088d73b5..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html +++ /dev/null @@ -1,34 +0,0 @@ - - -Property Index - - - - - - - - - -
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
S
 scaleToHiddenSeries, Axis
 sectionMargin, $.jqplot.FunnelRenderer
 series, jqPlot
 seriesColors, jqPlot
 seriesDefaults, jqPlot
 seriesLabelIndex, $.jqplot.PointLabels
 seriesToggle
 seriesToggleReplot
 shadow
 shadowAlpha
 shadowAngle
 shadowColor, Grid
 shadowDepth
 shadowOffset
 shadowRenderer, $.jqplot.MarkerRenderer
 shadowWidth, Grid
 shapeRenderer, $.jqplot.MarkerRenderer
 show
 showBorders, $.jqplot.MekkoRenderer
 showCursorLegend, $.jqplot.Cursor
 showDataLabels
 showGridline
 showHorizontalLine, $.jqplot.Cursor
 showLabel
 showLabels
 showLine, Series
 showLines, $.jqplot.LineRenderer
 showMark
 showMarker
 showMinorTicks, Axis
 showSwatch, Legend
 showTickLabels, $.jqplot.MeterGaugeRenderer
 showTickMarks, Axis
 showTicks
 showTooltip
 showTooltipDataPosition, $.jqplot.Cursor
 showTooltipGridPosition, $.jqplot.Cursor
 showTooltipOutsideZoom, $.jqplot.Cursor
 showTooltipPrecision, $.jqplot.CanvasOverlay
 showTooltipUnitPosition, $.jqplot.Cursor
 showVerticalLine, $.jqplot.Cursor
 size
 sizeAdjust, $.jqplot.Highlighter
 sliceMargin
 smooth, $.jqplot.LineRenderer
 sortData, jqPlot
 sortMergedLabels, $.jqplot.CategoryAxisRenderer
 stackedValue, $.jqplot.PointLabels
 stackSeries, jqPlot
 start, Line
 startAngle
 stop, Line
 strokeRect, $.jqplot.shapeRenderer
 strokeStyle, $.jqplot.shapeRenderer
 style
 suffix, $.jqplot.AxisTickRenderer
 synchronizeHighlight
 syncTicks, Axis
- -
this.scaleToHiddenSeries = false
True to include hidden series when computing axes bounds and scaling.
this.sectionMargin = 6
spacing between funnel sections in pixels.
this.series = []
Array of series object options.
this.seriesColors = $.jqplot.config.defaultColors
Ann array of CSS color specifications that will be applied, in order, to the series in the plot.
seriesDefaults: {}, series:[] }
default options that will be applied to all series.
this.seriesLabelIndex = null
array index for location of labels within data point arrays.
this.seriesToggle = 'normal'
false to not enable series on/off toggling on the legend.
this.seriesToggleReplot = false
True to replot the chart after toggling series on/off.
wether or not to draw a shadow on the line
this.shadow = true
wether or not to draw a shadow on the line
this.shadow = true
true or false, wether or not to show the shadow.
this.shadow = true
wether to show a shadow behind the grid.
this.shadowAlpha = 0.08
transparency of the shadow (0 = transparent, 1 = opaque)
Alpha channel transparency of shadow.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
Alpha transparency of the shadow.
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowAlpha = '0.1'
Alpha channel transparency of shadow.
Shadow angle in degrees
this.shadowAngle = 45
Shadow angle in degrees
this.shadowAngle = 45
Angle of the shadow on the trend line.
this.shadowAngle = 45
shadow angle in degrees
this.shadowAngle = 45
Shadow angle in degrees
this.shadowColor = null
an optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 4
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
number of strokes to make of the shadow.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
Shadow offset from line in pixels
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 2
offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 1
Shadow offset from line in pixels
this.shadowOffset = 2
offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 1.0
pixel offset for each stroke of the shadow.
this.shadowOffset = 1.5
Offset of each shadow stroke from the border in pixels
this.shadowOffset = 1.25
Shadow offset from line in pixels
this.shadowRenderer = new $.jqplot.ShadowRenderer()
Renderer that will draws the shadows on the marker.
this.shadowWidth = 3
width of the stoke for the shadow
this.shapeRenderer = new $.jqplot.ShapeRenderer()
Renderer that will draw the marker.
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
true to show (draw), false to not draw.
this.show = $.jqplot.config.enablePlugins
wether to show the cursor or not.
this.show = $.jqplot.config.enablePlugins
true to show the highlight.
true to show the bands.
this.show = true
wether or not to show the marker.
this.show = $.jqplot.config.enablePlugins
show the labels or not.
this.show = $.jqplot.config.enablePlugins
Wether or not to show the trend line.
this.show = false
Wether to display the axis on the graph.
this.show = false
Wether to display the legend on the graph.
this.show = true
wether or not to draw the series.
this.show = true
wether or not to show the title
this.showBorders = true
True to draw borders lines between areas on the chart.
this.showCursorLegend = false
Replace the plot legend with an enhanced legend displaying intersection information.
this.showDataLabels = false
true to show data labels on slices.
this.showDataLabels = false
true to show data labels on slices.
this.showDataLabels = false
true to show data labels on slices.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.showHorizontalLine = false
draw a horizontal line across the plot which follows the cursor.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
true to show the axis label.
this.showLabel = true
true to show label for this series in the legend.
this.showLabels = true
True to show labels on bubbles (if any), false to not show.
this.showLabels = true
true to show the label text on the legend.
this.showLine = true
wether to actually draw the line or not.
True to show lines at top and bottom of bands [default: false].
this.showMark = true
wether or not to show the mark on the axis.
this.showMark = true
wether or not to show the mark on the axis.
this.showMarker = true
true to show the marker
this.showMarker = true
wether or not to show the markers at the data points.
this.showMinorTicks = true
Wether or not to show minor ticks.
this.showSwatches = true
true to show the color swatches on the legend.
this.showTickLabels = true
true to show tick labels next to ticks.
this.showTickMarks = true
Wether to show the tick marks (line crossing grid) or not.
this.showTicks = true
true to show ticks around gauge.
this.showTicks = true
Wether to show the ticks (both marks and labels) or not.
Show a tooltip with data point values.
this.showTooltip = true
show a cursor position tooltip.
this.showTooltip = true
Show a tooltip with data point values.
this.showTooltipDataPosition = false
Used with showVerticalLine to show intersecting data points in the tooltip.
this.showTooltipGridPosition = false
show the grid pixel coordinates of the mouse.
this.showTooltipOutsideZoom = false
True will keep updating the tooltip when zooming of the grid.
Controls how close to line cursor must be to show tooltip.
this.showTooltipUnitPosition = true
show the unit (data) coordinates of the mouse.
this.showVerticalLine = false
draw a vertical line across the plot which follows the cursor.
this.size = 4
Length of the tick beyond the grid in pixels.
this.size = 9.0
Size of the marker (diameter or circle, length of edge of square, etc.)
this.sizeAdjust = 5
Pixels to add to the overall size of the highlight.
this.sliceMargin = 0
angular spacing between donut slices in degrees.
this.sliceMargin = 0
angular spacing between pie slices in degrees.
this.renderer.smooth = false
True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.
this.sortData = true
false to not sort the data passed in by the user.
this.sortMergedLabels = false
True to sort tick labels when labels are created by merging x axis values from multiple series.
this.stackedValue = false
true to display value as stacked in a stacked plot.
this.stackSeries = false
true or false, creates a stack or “mountain” plot.
[x, y] coordinates for the start of the line.
this.startAngle = 0
Angle to start drawing donut in degrees.
this.startAngle = 0
Angle to start drawing pie in degrees.
stop: [] }
[x, y] coordinates for the end of the line.
this.strokeRect = false
true to draw shape as a stroked rectangle.
this.strokeStyle = '#999999'
css color spec for the stoke style
this.style = 'crosshair'
CSS spec for cursor style
this.style = 'filledCircle'
One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
this.suffix = ''
String to append to the tick label.
this.synchronizeHighlight = false
Index of another series to highlight when this series is highlighted.
this.syncTicks = null
true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html deleted file mode 100644 index 985ab8eb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html +++ /dev/null @@ -1,58 +0,0 @@ - - -Property Index - - - - - - - - - -
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
T
 text, Title
 textAlign, Title
 textColor
 themes, $.jqplot.ThemeEngine
 thickness, $.jqplot.DonutRenderer
 tickColor, $.jqplot.MeterGaugeRenderer
 tickInset
 tickInterval, Axis
 tickLength, $.jqplot.OHLCRenderer
 tickMode, $.jqplot.MekkoAxisRenderer
 tickOptions, Axis
 tickPadding, $.jqplot.MeterGaugeRenderer
 tickRenderer
 ticks
 tickSpacing
 title, jqPlot
 tooltipAxes, $.jqplot.Highlighter
 tooltipAxisGroups, $.jqplot.Cursor
 tooltipFadeSpeed
 tooltipFormatString
 tooltipLocation
 tooltipOffset
 transposedData, $.jqplot.BarRenderer
 type, $.jqplot.Trendline
U
 upBodyColor, $.jqplot.OHLCRenderer
 useAxesFormatters
 useNegativeColors, Series
 useSeriesColor, Axis
V
 varyBarColor, $.jqplot.BarRenderer
 varyBlockColors, $.jqplot.BlockRenderer
 varyBubbleColors, $.jqplot.BubbleRenderer
W
 waterfall, $.jqplot.BarRenderer
 wickColor, $.jqplot.OHLCRenderer
 widthRatio, $.jqplot.FunnelRenderer
X
 xaxis
 xmax, HorizontalLine
 xmin, HorizontalLine
 xoffset, Legend
 xpadding, $.jqplot.PointLabels
Y
 y, HorizontalLine
 yaxis
 yoffset, Legend
 ypadding, $.jqplot.PointLabels
 yvalues, $.jqplot.Highlighter
Z
 zoom, $.jqplot.Cursor
- -
this.text = text
text of the title;
this.textAlign
css text-align spec for the text.
this.textColor
css spec for the color attribute.
this.textColor = '#666666'
css spec for the color attribute.
this.textColor = '#666666'
css spec for the color attribute.
this.textColor
css color spec for the legend text.
this.textColor
css color spec for the text.
this.themes = {}
hash of themes managed by the theme engine.
this.thickness = null
thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.
this.tickColor = "989898"
color of the tick marks around the gauge.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.tickInterval
number of units between ticks.
this.tickLength = 'auto'
length of the line in pixels indicating open and close price.
this.tickMode
How to space the ticks on the axis.
this.tickOptions = {}
Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
this.tickPadding = null
padding of the tick marks to the outer ring and the tick labels to marks.
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
this.tickRenderer = $.jqplot.AxisTickRenderer
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
this.ticks = []
Array of tick values.
this.ticks = []
1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
this.tickSpacing = 30
Degrees between ticks.
this.tickSpacing = 75
Approximate pixel spacing between ticks on graph.
this.title = new Title()
Title object.
this.tooltipAxes = 'both'
Which axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.
this.tooltipAxisGroups = []
Show position for the specified axes.
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
this.tooltipFadeSpeed = "fast"
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
tooltipFormatString: '%d, %d' }
Format string passed the x and y values of the cursor on the line.
this.tooltipFormatString = '%.4P, %.4P'
sprintf format string for the tooltip.
this.tooltipFormatString = '%.5P'
sprintf format string for the tooltip.
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
this.tooltipLocation = 'se'
Where to position tooltip.
this.tooltipLocation = 'nw'
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
Pixel offset of tooltip from the highlight.
this.tooltipOffset = 6
Pixel offset of tooltip from the grid boudaries or cursor center.
this.tooltipOffset = 2
Pixel offset of tooltip from the highlight.
this.transposedData = true
NOT IMPLEMENTED YET.
this.type = 'linear'
Either ‘exponential’, ‘exp’, or ‘linear’.
- - - -
this.upBodyColor = null
Color of candlestick body of an “up” day.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.useNegativeColors = true
true to color negative values differently in filled and bar charts.
this.useSeriesColor = false
Use the color of the first series associated with this axis for the tick marks and line bordering this axis.
- - - -
this.varyBarColor = false
true to color each bar of a series separately rather than have every bar of a given series the same color.
this.varyBlockColors = false
true to vary the color of each block in this series according to the seriesColors array.
this.varyBubbleColors = true
True to vary the color of each bubble in this series according to the seriesColors array.
- - - -
this.waterfall = false
true to enable waterfall plot.
this.wickColor = null
color of the hi-lo line thorugh the candlestick body.
this.widthRatio = 0.2
The ratio of the width of the top of the funnel to the bottom.
- - - -
X axis to use for positioning/scaling the line.
this.xaxis = 'xaxis'
which x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
x value for the end of the line, null to scale to axis max.
x value for the start of the line, null to scale to axis min.
this.xoffset = 0
DEPRECATED.
this.xpadding = 6
horizontal padding in pixels between point and label
- - - -
y value to position the line
Y axis to use for positioning/scaling the line.
this.yaxis = 'yaxis'
which y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
this.yoffset = 0
DEPRECATED.
this.ypadding = 6
vertical padding in pixels between point and label
this.yvalues = 1
Number of y values to expect in the data point array.
- - - -
this.zoom = false
Enable plot zooming.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js b/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js deleted file mode 100644 index efcdca96..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js +++ /dev/null @@ -1,836 +0,0 @@ -// This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure -// Natural Docs is licensed under the GPL - - -// -// Browser Styles -// ____________________________________________________________________________ - -var agt=navigator.userAgent.toLowerCase(); -var browserType; -var browserVer; - -if (agt.indexOf("opera") != -1) - { - browserType = "Opera"; - - if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1) - { browserVer = "Opera7"; } - else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1) - { browserVer = "Opera8"; } - else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1) - { browserVer = "Opera9"; } - } - -else if (agt.indexOf("applewebkit") != -1) - { - browserType = "Safari"; - - if (agt.indexOf("version/3") != -1) - { browserVer = "Safari3"; } - else if (agt.indexOf("safari/4") != -1) - { browserVer = "Safari2"; } - } - -else if (agt.indexOf("khtml") != -1) - { - browserType = "Konqueror"; - } - -else if (agt.indexOf("msie") != -1) - { - browserType = "IE"; - - if (agt.indexOf("msie 6") != -1) - { browserVer = "IE6"; } - else if (agt.indexOf("msie 7") != -1) - { browserVer = "IE7"; } - } - -else if (agt.indexOf("gecko") != -1) - { - browserType = "Firefox"; - - if (agt.indexOf("rv:1.7") != -1) - { browserVer = "Firefox1"; } - else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1) - { browserVer = "Firefox15"; } - else if (agt.indexOf("rv:1.8.1") != -1) - { browserVer = "Firefox2"; } - } - - -// -// Support Functions -// ____________________________________________________________________________ - - -function GetXPosition(item) - { - var position = 0; - - if (item.offsetWidth != null) - { - while (item != document.body && item != null) - { - position += item.offsetLeft; - item = item.offsetParent; - }; - }; - - return position; - }; - - -function GetYPosition(item) - { - var position = 0; - - if (item.offsetWidth != null) - { - while (item != document.body && item != null) - { - position += item.offsetTop; - item = item.offsetParent; - }; - }; - - return position; - }; - - -function MoveToPosition(item, x, y) - { - // Opera 5 chokes on the px extension, so it can use the Microsoft one instead. - - if (item.style.left != null) - { - item.style.left = x + "px"; - item.style.top = y + "px"; - } - else if (item.style.pixelLeft != null) - { - item.style.pixelLeft = x; - item.style.pixelTop = y; - }; - }; - - -// -// Menu -// ____________________________________________________________________________ - - -function ToggleMenu(id) - { - if (!window.document.getElementById) - { return; }; - - var display = window.document.getElementById(id).style.display; - - if (display == "none") - { display = "block"; } - else - { display = "none"; } - - window.document.getElementById(id).style.display = display; - } - -function HideAllBut(ids, max) - { - if (document.getElementById) - { - ids.sort( function(a,b) { return a - b; } ); - var number = 1; - - while (number < max) - { - if (ids.length > 0 && number == ids[0]) - { ids.shift(); } - else - { - document.getElementById("MGroupContent" + number).style.display = "none"; - }; - - number++; - }; - }; - } - - -// -// Tooltips -// ____________________________________________________________________________ - - -var tooltipTimer = 0; - -function ShowTip(event, tooltipID, linkID) - { - if (tooltipTimer) - { clearTimeout(tooltipTimer); }; - - var docX = event.clientX + window.pageXOffset; - var docY = event.clientY + window.pageYOffset; - - var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")"; - - tooltipTimer = setTimeout(showCommand, 1000); - } - -function ReallyShowTip(tooltipID, linkID, docX, docY) - { - tooltipTimer = 0; - - var tooltip; - var link; - - if (document.getElementById) - { - tooltip = document.getElementById(tooltipID); - link = document.getElementById(linkID); - } -/* else if (document.all) - { - tooltip = eval("document.all['" + tooltipID + "']"); - link = eval("document.all['" + linkID + "']"); - } -*/ - if (tooltip) - { - var left = GetXPosition(link); - var top = GetYPosition(link); - top += link.offsetHeight; - - - // The fallback method is to use the mouse X and Y relative to the document. We use a separate if and test if its a number - // in case some browser snuck through the above if statement but didn't support everything. - - if (!isFinite(top) || top == 0) - { - left = docX; - top = docY; - } - - // Some spacing to get it out from under the cursor. - - top += 10; - - // Make sure the tooltip doesnt get smushed by being too close to the edge, or in some browsers, go off the edge of the - // page. We do it here because Konqueror does get offsetWidth right even if it doesnt get the positioning right. - - if (tooltip.offsetWidth != null) - { - var width = tooltip.offsetWidth; - var docWidth = document.body.clientWidth; - - if (left + width > docWidth) - { left = docWidth - width - 1; } - - // If there's a horizontal scroll bar we could go past zero because it's using the page width, not the window width. - if (left < 0) - { left = 0; }; - } - - MoveToPosition(tooltip, left, top); - tooltip.style.visibility = "visible"; - } - } - -function HideTip(tooltipID) - { - if (tooltipTimer) - { - clearTimeout(tooltipTimer); - tooltipTimer = 0; - } - - var tooltip; - - if (document.getElementById) - { tooltip = document.getElementById(tooltipID); } - else if (document.all) - { tooltip = eval("document.all['" + tooltipID + "']"); } - - if (tooltip) - { tooltip.style.visibility = "hidden"; } - } - - -// -// Blockquote fix for IE -// ____________________________________________________________________________ - - -function NDOnLoad() - { - if (browserVer == "IE6") - { - var scrollboxes = document.getElementsByTagName('blockquote'); - - if (scrollboxes.item(0)) - { - NDDoResize(); - window.onresize=NDOnResize; - }; - }; - }; - - -var resizeTimer = 0; - -function NDOnResize() - { - if (resizeTimer != 0) - { clearTimeout(resizeTimer); }; - - resizeTimer = setTimeout(NDDoResize, 250); - }; - - -function NDDoResize() - { - var scrollboxes = document.getElementsByTagName('blockquote'); - - var i; - var item; - - i = 0; - while (item = scrollboxes.item(i)) - { - item.style.width = 100; - i++; - }; - - i = 0; - while (item = scrollboxes.item(i)) - { - item.style.width = item.parentNode.offsetWidth; - i++; - }; - - clearTimeout(resizeTimer); - resizeTimer = 0; - } - - - -/* ________________________________________________________________________________________________________ - - Class: SearchPanel - ________________________________________________________________________________________________________ - - A class handling everything associated with the search panel. - - Parameters: - - name - The name of the global variable that will be storing this instance. Is needed to be able to set timeouts. - mode - The mode the search is going to work in. Pass CommandLineOption()>, so the - value will be something like "HTML" or "FramedHTML". - - ________________________________________________________________________________________________________ -*/ - - -function SearchPanel(name, mode, resultsPath) - { - if (!name || !mode || !resultsPath) - { alert("Incorrect parameters to SearchPanel."); }; - - - // Group: Variables - // ________________________________________________________________________ - - /* - var: name - The name of the global variable that will be storing this instance of the class. - */ - this.name = name; - - /* - var: mode - The mode the search is going to work in, such as "HTML" or "FramedHTML". - */ - this.mode = mode; - - /* - var: resultsPath - The relative path from the current HTML page to the results page directory. - */ - this.resultsPath = resultsPath; - - /* - var: keyTimeout - The timeout used between a keystroke and when a search is performed. - */ - this.keyTimeout = 0; - - /* - var: keyTimeoutLength - The length of in thousandths of a second. - */ - this.keyTimeoutLength = 500; - - /* - var: lastSearchValue - The last search string executed, or an empty string if none. - */ - this.lastSearchValue = ""; - - /* - var: lastResultsPage - The last results page. The value is only relevant if is set. - */ - this.lastResultsPage = ""; - - /* - var: deactivateTimeout - - The timeout used between when a control is deactivated and when the entire panel is deactivated. Is necessary - because a control may be deactivated in favor of another control in the same panel, in which case it should stay - active. - */ - this.deactivateTimout = 0; - - /* - var: deactivateTimeoutLength - The length of in thousandths of a second. - */ - this.deactivateTimeoutLength = 200; - - - - - // Group: DOM Elements - // ________________________________________________________________________ - - - // Function: DOMSearchField - this.DOMSearchField = function() - { return document.getElementById("MSearchField"); }; - - // Function: DOMSearchType - this.DOMSearchType = function() - { return document.getElementById("MSearchType"); }; - - // Function: DOMPopupSearchResults - this.DOMPopupSearchResults = function() - { return document.getElementById("MSearchResults"); }; - - // Function: DOMPopupSearchResultsWindow - this.DOMPopupSearchResultsWindow = function() - { return document.getElementById("MSearchResultsWindow"); }; - - // Function: DOMSearchPanel - this.DOMSearchPanel = function() - { return document.getElementById("MSearchPanel"); }; - - - - - // Group: Event Handlers - // ________________________________________________________________________ - - - /* - Function: OnSearchFieldFocus - Called when focus is added or removed from the search field. - */ - this.OnSearchFieldFocus = function(isActive) - { - this.Activate(isActive); - }; - - - /* - Function: OnSearchFieldChange - Called when the content of the search field is changed. - */ - this.OnSearchFieldChange = function() - { - if (this.keyTimeout) - { - clearTimeout(this.keyTimeout); - this.keyTimeout = 0; - }; - - var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); - - if (searchValue != this.lastSearchValue) - { - if (searchValue != "") - { - this.keyTimeout = setTimeout(this.name + ".Search()", this.keyTimeoutLength); - } - else - { - if (this.mode == "HTML") - { this.DOMPopupSearchResultsWindow().style.display = "none"; }; - this.lastSearchValue = ""; - }; - }; - }; - - - /* - Function: OnSearchTypeFocus - Called when focus is added or removed from the search type. - */ - this.OnSearchTypeFocus = function(isActive) - { - this.Activate(isActive); - }; - - - /* - Function: OnSearchTypeChange - Called when the search type is changed. - */ - this.OnSearchTypeChange = function() - { - var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); - - if (searchValue != "") - { - this.Search(); - }; - }; - - - - // Group: Action Functions - // ________________________________________________________________________ - - - /* - Function: CloseResultsWindow - Closes the results window. - */ - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = "none"; - this.Activate(false, true); - }; - - - /* - Function: Search - Performs a search. - */ - this.Search = function() - { - this.keyTimeout = 0; - - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - var searchTopic = this.DOMSearchType().value; - - var pageExtension = searchValue.substr(0,1); - - if (pageExtension.match(/^[a-z]/i)) - { pageExtension = pageExtension.toUpperCase(); } - else if (pageExtension.match(/^[0-9]/)) - { pageExtension = 'Numbers'; } - else - { pageExtension = "Symbols"; }; - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - // indexSectionsWithContent is defined in searchdata.js - if (indexSectionsWithContent[searchTopic][pageExtension] == true) - { - resultsPage = this.resultsPath + '/' + searchTopic + pageExtension + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else - { - resultsPage = this.resultsPath + '/NoResults.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - }; - - var resultsFrame; - if (this.mode == "HTML") - { resultsFrame = window.frames.MSearchResults; } - else if (this.mode == "FramedHTML") - { resultsFrame = window.top.frames['Content']; }; - - - if (resultsPage != this.lastResultsPage || - - // Bug in IE. If everything becomes hidden in a run, none of them will be able to be reshown in the next for some - // reason. It counts the right number of results, and you can even read the display as "block" after setting it, but it - // just doesn't work in IE 6 or IE 7. So if we're on the right page but the previous search had no results, reload the - // page anyway to get around the bug. - (browserType == "IE" && hasResultsPage && - (!resultsFrame.searchResults || resultsFrame.searchResults.lastMatchCount == 0)) ) - - { - resultsFrame.location.href = resultsPageWithSearch; - } - - // So if the results page is right and there's no IE bug, reperform the search on the existing page. We have to check if there - // are results because NoResults.html doesn't have any JavaScript, and it would be useless to do anything on that page even - // if it did. - else if (hasResultsPage) - { - // We need to check if this exists in case the frame is present but didn't finish loading. - if (resultsFrame.searchResults) - { resultsFrame.searchResults.Search(searchValue); } - - // Otherwise just reload instead of waiting. - else - { resultsFrame.location.href = resultsPageWithSearch; }; - }; - - - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block") - { - var domSearchType = this.DOMSearchType(); - - var left = GetXPosition(domSearchType); - var top = GetYPosition(domSearchType) + domSearchType.offsetHeight; - - MoveToPosition(domPopupSearchResultsWindow, left, top); - domPopupSearchResultsWindow.style.display = 'block'; - }; - - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - }; - - - - // Group: Activation Functions - // Functions that handle whether the entire panel is active or not. - // ________________________________________________________________________ - - - /* - Function: Activate - - Activates or deactivates the search panel, resetting things to their default values if necessary. You can call this on every - control's OnBlur() and it will handle not deactivating the entire panel when focus is just switching between them transparently. - - Parameters: - - isActive - Whether you're activating or deactivating the panel. - ignoreDeactivateDelay - Set if you're positive the action will deactivate the panel and thus want to skip the delay. - */ - this.Activate = function(isActive, ignoreDeactivateDelay) - { - // We want to ignore isActive being false while the results window is open. - if (isActive || (this.mode == "HTML" && this.DOMPopupSearchResultsWindow().style.display == "block")) - { - if (this.inactivateTimeout) - { - clearTimeout(this.inactivateTimeout); - this.inactivateTimeout = 0; - }; - - this.DOMSearchPanel().className = 'MSearchPanelActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == 'Search') - { searchField.value = ""; } - } - else if (!ignoreDeactivateDelay) - { - this.inactivateTimeout = setTimeout(this.name + ".InactivateAfterTimeout()", this.inactivateTimeoutLength); - } - else - { - this.InactivateAfterTimeout(); - }; - }; - - - /* - Function: InactivateAfterTimeout - - Called by , which is set by . Inactivation occurs on a timeout because a control may - receive OnBlur() when focus is really transferring to another control in the search panel. In this case we don't want to - actually deactivate the panel because not only would that cause a visible flicker but it could also reset the search value. - So by doing it on a timeout instead, there's a short period where the second control's OnFocus() can cancel the deactivation. - */ - this.InactivateAfterTimeout = function() - { - this.inactivateTimeout = 0; - - this.DOMSearchPanel().className = 'MSearchPanelInactive'; - this.DOMSearchField().value = "Search"; - - this.lastSearchValue = ""; - this.lastResultsPage = ""; - }; - }; - - - - -/* ________________________________________________________________________________________________________ - - Class: SearchResults - _________________________________________________________________________________________________________ - - The class that handles everything on the search results page. - _________________________________________________________________________________________________________ -*/ - - -function SearchResults(name, mode) - { - /* - var: mode - The mode the search is going to work in, such as "HTML" or "FramedHTML". - */ - this.mode = mode; - - /* - var: lastMatchCount - The number of matches from the last run of . - */ - this.lastMatchCount = 0; - - - /* - Function: Toggle - Toggles the visibility of the passed element ID. - */ - this.Toggle = function(id) - { - if (this.mode == "FramedHTML") - { return; }; - - var parentElement = document.getElementById(id); - - var element = parentElement.firstChild; - - while (element && element != parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'ISubIndex') - { - if (element.style.display == 'block') - { element.style.display = "none"; } - else - { element.style.display = 'block'; } - }; - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { element = element.firstChild; } - else if (element.nextSibling) - { element = element.nextSibling; } - else - { - do - { - element = element.parentNode; - } - while (element && element != parentElement && !element.nextSibling); - - if (element && element != parentElement) - { element = element.nextSibling; }; - }; - }; - }; - - - /* - Function: Search - - Searches for the passed string. If there is no parameter, it takes it from the URL query. - - Always returns true, since other documents may try to call it and that may or may not be possible. - */ - this.Search = function(search) - { - if (!search) - { - search = window.location.search; - search = search.substring(1); // Remove the leading ? - search = unescape(search); - }; - - search = search.replace(/^ +/, ""); - search = search.replace(/ +$/, ""); - search = search.toLowerCase(); - - if (search.match(/[^a-z0-9]/)) // Just a little speedup so it doesn't have to go through the below unnecessarily. - { - search = search.replace(/\_/g, "_und"); - search = search.replace(/\ +/gi, "_spc"); - search = search.replace(/\~/g, "_til"); - search = search.replace(/\!/g, "_exc"); - search = search.replace(/\@/g, "_att"); - search = search.replace(/\#/g, "_num"); - search = search.replace(/\$/g, "_dol"); - search = search.replace(/\%/g, "_pct"); - search = search.replace(/\^/g, "_car"); - search = search.replace(/\&/g, "_amp"); - search = search.replace(/\*/g, "_ast"); - search = search.replace(/\(/g, "_lpa"); - search = search.replace(/\)/g, "_rpa"); - search = search.replace(/\-/g, "_min"); - search = search.replace(/\+/g, "_plu"); - search = search.replace(/\=/g, "_equ"); - search = search.replace(/\{/g, "_lbc"); - search = search.replace(/\}/g, "_rbc"); - search = search.replace(/\[/g, "_lbk"); - search = search.replace(/\]/g, "_rbk"); - search = search.replace(/\:/g, "_col"); - search = search.replace(/\;/g, "_sco"); - search = search.replace(/\"/g, "_quo"); - search = search.replace(/\'/g, "_apo"); - search = search.replace(/\/g, "_ran"); - search = search.replace(/\,/g, "_com"); - search = search.replace(/\./g, "_per"); - search = search.replace(/\?/g, "_que"); - search = search.replace(/\//g, "_sla"); - search = search.replace(/[^a-z0-9\_]i/gi, "_zzz"); - }; - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); - - if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search) - { - row.style.display = "block"; - matches++; - } - else - { row.style.display = "none"; }; - }; - - i++; - }; - - document.getElementById("Searching").style.display="none"; - - if (matches == 0) - { document.getElementById("NoMatches").style.display="block"; } - else - { document.getElementById("NoMatches").style.display="none"; } - - this.lastMatchCount = matches; - - return true; - }; - }; - diff --git a/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js b/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js deleted file mode 100644 index 72083b4e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js +++ /dev/null @@ -1,182 +0,0 @@ -var indexSectionsWithContent = { - "General": { - "Symbols": true, - "Numbers": false, - "A": true, - "B": true, - "C": true, - "D": true, - "E": true, - "F": true, - "G": true, - "H": true, - "I": true, - "J": true, - "K": false, - "L": true, - "M": true, - "N": true, - "O": true, - "P": true, - "Q": true, - "R": true, - "S": true, - "T": true, - "U": true, - "V": true, - "W": true, - "X": true, - "Y": true, - "Z": true - }, - "Functions": { - "Symbols": false, - "Numbers": false, - "A": false, - "B": false, - "C": true, - "D": true, - "E": false, - "F": false, - "G": true, - "H": false, - "I": true, - "J": false, - "K": false, - "L": false, - "M": true, - "N": true, - "O": false, - "P": false, - "Q": true, - "R": true, - "S": true, - "T": false, - "U": false, - "V": false, - "W": false, - "X": false, - "Y": false, - "Z": true - }, - "Files": { - "Symbols": false, - "Numbers": false, - "A": false, - "B": false, - "C": false, - "D": false, - "E": false, - "F": false, - "G": false, - "H": false, - "I": false, - "J": true, - "K": false, - "L": false, - "M": false, - "N": false, - "O": false, - "P": false, - "Q": false, - "R": false, - "S": false, - "T": false, - "U": false, - "V": false, - "W": false, - "X": false, - "Y": false, - "Z": false - }, - "Classes": { - "Symbols": true, - "Numbers": false, - "A": true, - "B": false, - "C": false, - "D": true, - "E": false, - "F": false, - "G": true, - "H": true, - "I": false, - "J": true, - "K": false, - "L": true, - "M": false, - "N": false, - "O": false, - "P": false, - "Q": false, - "R": false, - "S": true, - "T": true, - "U": false, - "V": true, - "W": false, - "X": false, - "Y": false, - "Z": false - }, - "Hooks": { - "Symbols": false, - "Numbers": false, - "A": true, - "B": false, - "C": false, - "D": false, - "E": true, - "F": false, - "G": false, - "H": false, - "I": false, - "J": true, - "K": false, - "L": false, - "M": false, - "N": false, - "O": false, - "P": true, - "Q": false, - "R": false, - "S": false, - "T": false, - "U": false, - "V": false, - "W": false, - "X": false, - "Y": false, - "Z": false - }, - "Properties": { - "Symbols": false, - "Numbers": false, - "A": true, - "B": true, - "C": true, - "D": true, - "E": true, - "F": true, - "G": true, - "H": true, - "I": true, - "J": false, - "K": false, - "L": true, - "M": true, - "N": true, - "O": true, - "P": true, - "Q": false, - "R": true, - "S": true, - "T": true, - "U": true, - "V": true, - "W": true, - "X": true, - "Y": true, - "Z": true - } - } \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html deleted file mode 100644 index 2f4dab57..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html deleted file mode 100644 index 135eeb6a..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html deleted file mode 100644 index 36f121b0..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html deleted file mode 100644 index c411b320..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html deleted file mode 100644 index b2250098..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html deleted file mode 100644 index 6a93b819..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html deleted file mode 100644 index 53823e7d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html deleted file mode 100644 index 53396614..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html deleted file mode 100644 index 782f11db..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html deleted file mode 100644 index 62d2e7cb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html deleted file mode 100644 index 3c66afa0..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html deleted file mode 100644 index 40135d3a..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
copy, $.jqplot.ThemeEngine
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html deleted file mode 100644 index 2c2bed5d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
destroy, jqPlot
drawSeries, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html deleted file mode 100644 index 561eabc0..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
get, $.jqplot.ThemeEngine
getThemeNames, $.jqplot.ThemeEngine
getThemes, $.jqplot.ThemeEngine
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html deleted file mode 100644 index 45090983..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
init, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html deleted file mode 100644 index 0b6446cb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
moveBlock, $.jqplot.BlockRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html deleted file mode 100644 index 7cc60bfe..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
newTheme, $.jqplot.ThemeEngine
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html deleted file mode 100644 index 9d06ebc0..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
quickInit, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html deleted file mode 100644 index fac0dbcc..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
redraw, jqPlot
reInitialize, jqPlot
remove, $.jqplot.ThemeEngine
rename, $.jqplot.ThemeEngine
replot, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html deleted file mode 100644 index bab767cf..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html deleted file mode 100644 index 4b364e98..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
zoomProxy, $.jqplot.Cursor.$.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html deleted file mode 100644 index f62a230b..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
activeTheme, $.jqplot.ThemeEngine
addLegendRowHooks, $.jqplot.$.jqplot
alignTicks, $.jqplot.LinearAxisRenderer
alpha, $.jqplot.shadowRenderer
animate, jqPlot
autoscale, Axis
autoscaleBubbles, $.jqplot.BubbleRenderer
autoscaleMultiplier, $.jqplot.BubbleRenderer
autoscalePointsFactor, $.jqplot.BubbleRenderer
axes, jqPlot
axesDefaults, jqPlot
axisDefaults, $.jqplot.LogAxisRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html deleted file mode 100644 index 06a97030..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
bandData, $.jqplot.LineRenderer
bands, $.jqplot.LineRenderer
barDirection, $.jqplot.BarRenderer
barLabelOptions, $.jqplot.MekkoAxisRenderer
barLabelRenderer, $.jqplot.MekkoAxisRenderer
barLabels, $.jqplot.MekkoAxisRenderer
barMargin, $.jqplot.BarRenderer
barWidth, $.jqplot.BarRenderer
bodyWidth, $.jqplot.OHLCRenderer
border, Legend
breakOnNull, Series
breakPoints, $.jqplot.LinearAxisRenderer
breakTickLabel, $.jqplot.LinearAxisRenderer
bringSeriesToFront, $.jqplot.Highlighter
bubbleAlpha, $.jqplot.BubbleRenderer
bubbleGradients, $.jqplot.BubbleRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html deleted file mode 100644 index 20bb76ec..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
candleStick, $.jqplot.OHLCRenderer
clearRect, $.jqplot.shapeRenderer
clickReset, $.jqplot.Cursor
closeColor, $.jqplot.OHLCRenderer
constrainOutsideZoom, $.jqplot.Cursor
constrainSmoothing, $.jqplot.LineRenderer
constrainTo, $.jqplot.Dragable
constrainZoomTo, $.jqplot.Cursor
copy, $.jqplot.ThemeEngine
css, $.jqplot.BlockRenderer
cursorLegendFormatString, $.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html deleted file mode 100644 index 3c759ce2..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html deleted file mode 100644 index 5f3a9205..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
edgeTolerance, $.jqplot.PointLabels
eventListenerHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html deleted file mode 100644 index c1af77c8..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html deleted file mode 100644 index 092df150..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
get, $.jqplot.ThemeEngine
getThemeNames, $.jqplot.ThemeEngine
getThemes, $.jqplot.ThemeEngine
grid, jqPlot
groups, $.jqplot.BarRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html deleted file mode 100644 index ff6d0676..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
hideZeros, $.jqplot.PointLabels
highlightAlpha, $.jqplot.BubbleRenderer
highlightColor, $.jqplot.LineRenderer
hlc, $.jqplot.OHLCRenderer
Hooks, $.jqplot
hubRadius, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html deleted file mode 100644 index 7873ee40..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
index, Series
init, jqPlot
innerDiameter, $.jqplot.DonutRenderer
insertBreaks, $.jqplot.BlockRenderer
intersectionThreshold, $.jqplot.Cursor
interval, $.jqplot.LineRenderer
intervalColors, $.jqplot.MeterGaugeRenderer
intervalInnerRadius, $.jqplot.MeterGaugeRenderer
intervalOuterRadius, $.jqplot.MeterGaugeRenderer
intervals, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html deleted file mode 100644 index fe560304..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html deleted file mode 100644 index 0fc12896..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html deleted file mode 100644 index 53789fac..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html deleted file mode 100644 index d282c788..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
name, $.jqplot.CanvasOverlay
needlePad, $.jqplot.MeterGaugeRenderer
needleThickness, $.jqplot.MeterGaugeRenderer
newTheme, $.jqplot.ThemeEngine
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html deleted file mode 100644 index bac068d9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
objects, $.jqplot.CanvasOverlay
offset, $.jqplot.shadowRenderer
openColor, $.jqplot.OHLCRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html deleted file mode 100644 index 25e44059..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
pad, Axis
padMax, Axis
padMin, Axis
pegNeedle, $.jqplot.MeterGaugeRenderer
placement, Legend
postDrawHooks, $.jqplot.$.jqplot
postDrawSeriesHooks, $.jqplot.$.jqplot
postDrawSeriesShadowHooks, $.jqplot.$.jqplot
postInitHooks, $.jqplot.$.jqplot
postParseOptionsHooks, $.jqplot.$.jqplot
postParseSeriesOptionsHooks, $.jqplot.$.jqplot
postSeriesInitHooks, $.jqplot.$.jqplot
predraw, Legend
preDrawHooks, $.jqplot.$.jqplot
preDrawLegendHooks, $.jqplot.$.jqplot
preDrawSeriesHooks, $.jqplot.$.jqplot
preDrawSeriesShadowHooks, $.jqplot.$.jqplot
preInitHooks, $.jqplot.$.jqplot
preParseOptionsHooks, $.jqplot.$.jqplot
preParseSeriesOptionsHooks, $.jqplot.$.jqplot
preSeriesInitHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html deleted file mode 100644 index 9d06ebc0..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
quickInit, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html deleted file mode 100644 index 830dac93..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
redraw, jqPlot
reInitialize, jqPlot
remove, $.jqplot.ThemeEngine
rename, $.jqplot.ThemeEngine
replot, jqPlot
ringColor, $.jqplot.MeterGaugeRenderer
ringMargin, $.jqplot.DonutRenderer
ringWidth, $.jqplot.MeterGaugeRenderer
rowSpacing, Legend
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html deleted file mode 100644 index 4cfc8650..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
sectionMargin, $.jqplot.FunnelRenderer
series, jqPlot
seriesColors, jqPlot
seriesLabelIndex, $.jqplot.PointLabels
shadowRenderer, $.jqplot.MarkerRenderer
shapeRenderer, $.jqplot.MarkerRenderer
showBorders, $.jqplot.MekkoRenderer
showCursorLegend, $.jqplot.Cursor
showHorizontalLine, $.jqplot.Cursor
showLine, Series
showLines, $.jqplot.LineRenderer
showSwatch, Legend
showTickLabels, $.jqplot.MeterGaugeRenderer
showTooltipDataPosition, $.jqplot.Cursor
showTooltipGridPosition, $.jqplot.Cursor
showTooltipOutsideZoom, $.jqplot.Cursor
showTooltipPrecision, $.jqplot.CanvasOverlay
showTooltipUnitPosition, $.jqplot.Cursor
showVerticalLine, $.jqplot.Cursor
sizeAdjust, $.jqplot.Highlighter
smooth, $.jqplot.LineRenderer
sortData, jqPlot
sortMergedLabels, $.jqplot.CategoryAxisRenderer
stackedValue, $.jqplot.PointLabels
stackSeries, jqPlot
start, Line
stop, Line
strokeRect, $.jqplot.shapeRenderer
strokeStyle, $.jqplot.shapeRenderer
suffix, $.jqplot.AxisTickRenderer
syncTicks, Axis
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html deleted file mode 100644 index 53396614..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html deleted file mode 100644 index 20f4ead9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
text, Title
textAlign, Title
themes, $.jqplot.ThemeEngine
thickness, $.jqplot.DonutRenderer
tickColor, $.jqplot.MeterGaugeRenderer
tickLength, $.jqplot.OHLCRenderer
tickMode, $.jqplot.MekkoAxisRenderer
tickPadding, $.jqplot.MeterGaugeRenderer
title, jqPlot
tooltipAxes, $.jqplot.Highlighter
tooltipAxisGroups, $.jqplot.Cursor
transposedData, $.jqplot.BarRenderer
type, $.jqplot.Trendline
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html deleted file mode 100644 index 31bcbf12..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
upBodyColor, $.jqplot.OHLCRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html deleted file mode 100644 index 51af427e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
varyBarColor, $.jqplot.BarRenderer
varyBlockColors, $.jqplot.BlockRenderer
varyBubbleColors, $.jqplot.BubbleRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html deleted file mode 100644 index ce589762..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
waterfall, $.jqplot.BarRenderer
wickColor, $.jqplot.OHLCRenderer
widthRatio, $.jqplot.FunnelRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html deleted file mode 100644 index 443e98c4..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
xmax, HorizontalLine
xmin, HorizontalLine
xoffset, Legend
xpadding, $.jqplot.PointLabels
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html deleted file mode 100644 index 8f6ea7a6..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
y, HorizontalLine
yoffset, Legend
ypadding, $.jqplot.PointLabels
yvalues, $.jqplot.Highlighter
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html deleted file mode 100644 index 1e8baa08..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
zoom, $.jqplot.Cursor
zoomProxy, $.jqplot.Cursor.$.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html deleted file mode 100644 index 82b17cda..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
addLegendRowHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html deleted file mode 100644 index fe464932..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
eventListenerHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html deleted file mode 100644 index f94e0036..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html deleted file mode 100644 index eb28c716..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
postDrawHooks, $.jqplot.$.jqplot
postDrawSeriesHooks, $.jqplot.$.jqplot
postDrawSeriesShadowHooks, $.jqplot.$.jqplot
postInitHooks, $.jqplot.$.jqplot
postParseOptionsHooks, $.jqplot.$.jqplot
postParseSeriesOptionsHooks, $.jqplot.$.jqplot
postSeriesInitHooks, $.jqplot.$.jqplot
preDrawHooks, $.jqplot.$.jqplot
preDrawLegendHooks, $.jqplot.$.jqplot
preDrawSeriesHooks, $.jqplot.$.jqplot
preDrawSeriesShadowHooks, $.jqplot.$.jqplot
preInitHooks, $.jqplot.$.jqplot
preParseOptionsHooks, $.jqplot.$.jqplot
preParseSeriesOptionsHooks, $.jqplot.$.jqplot
preSeriesInitHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html b/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html deleted file mode 100644 index d2459c05..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - -
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html deleted file mode 100644 index 386d9e89..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
activeTheme, $.jqplot.ThemeEngine
alignTicks, $.jqplot.LinearAxisRenderer
alpha, $.jqplot.shadowRenderer
animate, jqPlot
autoscale, Axis
autoscaleBubbles, $.jqplot.BubbleRenderer
autoscaleMultiplier, $.jqplot.BubbleRenderer
autoscalePointsFactor, $.jqplot.BubbleRenderer
axes, jqPlot
axesDefaults, jqPlot
axisDefaults, $.jqplot.LogAxisRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html deleted file mode 100644 index a6cef468..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
bandData, $.jqplot.LineRenderer
barDirection, $.jqplot.BarRenderer
barLabelOptions, $.jqplot.MekkoAxisRenderer
barLabelRenderer, $.jqplot.MekkoAxisRenderer
barLabels, $.jqplot.MekkoAxisRenderer
barMargin, $.jqplot.BarRenderer
barWidth, $.jqplot.BarRenderer
bodyWidth, $.jqplot.OHLCRenderer
border, Legend
breakOnNull, Series
breakPoints, $.jqplot.LinearAxisRenderer
breakTickLabel, $.jqplot.LinearAxisRenderer
bringSeriesToFront, $.jqplot.Highlighter
bubbleAlpha, $.jqplot.BubbleRenderer
bubbleGradients, $.jqplot.BubbleRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html deleted file mode 100644 index a30bf3da..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
candleStick, $.jqplot.OHLCRenderer
clearRect, $.jqplot.shapeRenderer
clickReset, $.jqplot.Cursor
closeColor, $.jqplot.OHLCRenderer
constrainOutsideZoom, $.jqplot.Cursor
constrainSmoothing, $.jqplot.LineRenderer
constrainTo, $.jqplot.Dragable
constrainZoomTo, $.jqplot.Cursor
css, $.jqplot.BlockRenderer
cursorLegendFormatString, $.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html deleted file mode 100644 index e0380eae..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html deleted file mode 100644 index 5bb760ff..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
edgeTolerance, $.jqplot.PointLabels
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html deleted file mode 100644 index cf90670b..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html deleted file mode 100644 index 3a7573d1..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
grid, jqPlot
groups, $.jqplot.BarRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html deleted file mode 100644 index ca8f802e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
hideZeros, $.jqplot.PointLabels
highlightAlpha, $.jqplot.BubbleRenderer
highlightColor, $.jqplot.LineRenderer
hlc, $.jqplot.OHLCRenderer
hubRadius, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html deleted file mode 100644 index 289adc8d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
index, Series
innerDiameter, $.jqplot.DonutRenderer
insertBreaks, $.jqplot.BlockRenderer
intersectionThreshold, $.jqplot.Cursor
interval, $.jqplot.LineRenderer
intervalColors, $.jqplot.MeterGaugeRenderer
intervalInnerRadius, $.jqplot.MeterGaugeRenderer
intervalOuterRadius, $.jqplot.MeterGaugeRenderer
intervals, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html deleted file mode 100644 index 2465230d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html deleted file mode 100644 index 80a53cbf..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
marginBottom, Legend
marginLeft, Legend
marginRight, Legend
marginTop, Legend
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html deleted file mode 100644 index c6018830..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
name, $.jqplot.CanvasOverlay
needlePad, $.jqplot.MeterGaugeRenderer
needleThickness, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html deleted file mode 100644 index e3e5f594..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
objects, $.jqplot.CanvasOverlay
offset, $.jqplot.shadowRenderer
openColor, $.jqplot.OHLCRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html deleted file mode 100644 index f1a4b167..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
pad, Axis
padMax, Axis
padMin, Axis
pegNeedle, $.jqplot.MeterGaugeRenderer
placement, Legend
predraw, Legend
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html deleted file mode 100644 index a462e099..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
ringColor, $.jqplot.MeterGaugeRenderer
ringMargin, $.jqplot.DonutRenderer
ringWidth, $.jqplot.MeterGaugeRenderer
rowSpacing, Legend
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html deleted file mode 100644 index 712da7fb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
sectionMargin, $.jqplot.FunnelRenderer
series, jqPlot
seriesColors, jqPlot
seriesLabelIndex, $.jqplot.PointLabels
shadowRenderer, $.jqplot.MarkerRenderer
shapeRenderer, $.jqplot.MarkerRenderer
showBorders, $.jqplot.MekkoRenderer
showCursorLegend, $.jqplot.Cursor
showHorizontalLine, $.jqplot.Cursor
showLine, Series
showLines, $.jqplot.LineRenderer
showSwatch, Legend
showTickLabels, $.jqplot.MeterGaugeRenderer
showTooltipDataPosition, $.jqplot.Cursor
showTooltipGridPosition, $.jqplot.Cursor
showTooltipOutsideZoom, $.jqplot.Cursor
showTooltipPrecision, $.jqplot.CanvasOverlay
showTooltipUnitPosition, $.jqplot.Cursor
showVerticalLine, $.jqplot.Cursor
sizeAdjust, $.jqplot.Highlighter
smooth, $.jqplot.LineRenderer
sortData, jqPlot
sortMergedLabels, $.jqplot.CategoryAxisRenderer
stackedValue, $.jqplot.PointLabels
stackSeries, jqPlot
start, Line
stop, Line
strokeRect, $.jqplot.shapeRenderer
strokeStyle, $.jqplot.shapeRenderer
suffix, $.jqplot.AxisTickRenderer
syncTicks, Axis
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html deleted file mode 100644 index bc107de4..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
text, Title
textAlign, Title
themes, $.jqplot.ThemeEngine
thickness, $.jqplot.DonutRenderer
tickColor, $.jqplot.MeterGaugeRenderer
tickLength, $.jqplot.OHLCRenderer
tickMode, $.jqplot.MekkoAxisRenderer
tickPadding, $.jqplot.MeterGaugeRenderer
title, jqPlot
tooltipAxes, $.jqplot.Highlighter
tooltipAxisGroups, $.jqplot.Cursor
transposedData, $.jqplot.BarRenderer
type, $.jqplot.Trendline
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html deleted file mode 100644 index df97c192..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
upBodyColor, $.jqplot.OHLCRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html deleted file mode 100644 index ebd8349e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
varyBarColor, $.jqplot.BarRenderer
varyBlockColors, $.jqplot.BlockRenderer
varyBubbleColors, $.jqplot.BubbleRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html deleted file mode 100644 index ce589762..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
waterfall, $.jqplot.BarRenderer
wickColor, $.jqplot.OHLCRenderer
widthRatio, $.jqplot.FunnelRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html deleted file mode 100644 index 443e98c4..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
xmax, HorizontalLine
xmin, HorizontalLine
xoffset, Legend
xpadding, $.jqplot.PointLabels
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html deleted file mode 100644 index 8f6ea7a6..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
y, HorizontalLine
yoffset, Legend
ypadding, $.jqplot.PointLabels
yvalues, $.jqplot.Highlighter
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html deleted file mode 100644 index 9da6ccfc..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
zoom, $.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css deleted file mode 100644 index 17e9cbc3..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css +++ /dev/null @@ -1,767 +0,0 @@ -/* - IMPORTANT: If you're editing this file in the output directory of one of - your projects, your changes will be overwritten the next time you run - Natural Docs. Instead, copy this file to your project directory, make your - changes, and you can use it with -s. Even better would be to make a CSS - file in your project directory with only your changes, which you can then - use with -s [original style] [your changes]. - - On the other hand, if you're editing this file in the Natural Docs styles - directory, the changes will automatically be applied to all your projects - that use this style the next time Natural Docs is run on them. - - This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure - Natural Docs is licensed under the GPL -*/ - -body { - font: 10pt Verdana, Arial, sans-serif; - color: #000000; - margin: 0; padding: 0; - } - -.ContentPage, -.IndexPage, -.FramedMenuPage { - background-color: #E8E8E8; - } -.FramedContentPage, -.FramedIndexPage, -.FramedSearchResultsPage, -.PopupSearchResultsPage { - background-color: #FFFFFF; - } - - -a:link, -a:visited { color: #900000; text-decoration: none } -a:hover { color: #900000; text-decoration: underline } -a:active { color: #FF0000; text-decoration: underline } - -td { - vertical-align: top } - -img { border: 0; } - - -/* - Comment out this line to use web-style paragraphs (blank line between - paragraphs, no indent) instead of print-style paragraphs (no blank line, - indented.) -*/ -p { - text-indent: 5ex; margin: 0 } - - -/* Opera doesn't break with just wbr, but will if you add this. */ -.Opera wbr:after { - content: "\00200B"; - } - - -/* Blockquotes are used as containers for things that may need to scroll. */ -blockquote { - padding: 0; - margin: 0; - overflow: auto; - } - - -.Firefox1 blockquote { - padding-bottom: .5em; - } - -/* Turn off scrolling when printing. */ -@media print { - blockquote { - overflow: visible; - } - .IE blockquote { - width: auto; - } - } - - - -#Menu { - font-size: 9pt; - padding: 10px 0 0 0; - } -.ContentPage #Menu, -.IndexPage #Menu { - position: absolute; - top: 0; - left: 0; - width: 31ex; - overflow: hidden; - } -.ContentPage .Firefox #Menu, -.IndexPage .Firefox #Menu { - width: 27ex; - } - - - .MTitle { - font-size: 16pt; font-weight: bold; font-variant: small-caps; - text-align: center; - padding: 5px 10px 15px 10px; - border-bottom: 1px dotted #000000; - margin-bottom: 15px } - - .MSubTitle { - font-size: 9pt; font-weight: normal; font-variant: normal; - margin-top: 1ex; margin-bottom: 5px } - - - .MEntry a:link, - .MEntry a:hover, - .MEntry a:visited { color: #606060; margin-right: 0 } - .MEntry a:active { color: #A00000; margin-right: 0 } - - - .MGroup { - font-variant: small-caps; font-weight: bold; - margin: 1em 0 1em 10px; - } - - .MGroupContent { - font-variant: normal; font-weight: normal } - - .MGroup a:link, - .MGroup a:hover, - .MGroup a:visited { color: #545454; margin-right: 10px } - .MGroup a:active { color: #A00000; margin-right: 10px } - - - .MFile, - .MText, - .MLink, - .MIndex { - padding: 1px 17px 2px 10px; - margin: .25em 0 .25em 0; - } - - .MText { - font-size: 8pt; font-style: italic } - - .MLink { - font-style: italic } - - #MSelected { - color: #000000; background-color: #FFFFFF; - /* Replace padding with border. */ - padding: 0 10px 0 10px; - border-width: 1px 2px 2px 0; border-style: solid; border-color: #000000; - margin-right: 5px; - } - - /* Close off the left side when its in a group. */ - .MGroup #MSelected { - padding-left: 9px; border-left-width: 1px } - - /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */ - .Firefox #MSelected { - -moz-border-radius-topright: 10px; - -moz-border-radius-bottomright: 10px } - .Firefox .MGroup #MSelected { - -moz-border-radius-topleft: 10px; - -moz-border-radius-bottomleft: 10px } - - - #MSearchPanel { - padding: 0px 6px; - margin: .25em 0; - } - - - #MSearchField { - font: italic 9pt Verdana, sans-serif; - color: #606060; - background-color: #E8E8E8; - border: none; - padding: 2px 4px; - width: 100%; - } - /* Only Opera gets it right. */ - .Firefox #MSearchField, - .IE #MSearchField, - .Safari #MSearchField { - width: 94%; - } - .Opera9 #MSearchField, - .Konqueror #MSearchField { - width: 97%; - } - .FramedMenuPage .Firefox #MSearchField, - .FramedMenuPage .Safari #MSearchField, - .FramedMenuPage .Konqueror #MSearchField { - width: 98%; - } - - /* Firefox doesn't do this right in frames without #MSearchPanel added on. - It's presence doesn't hurt anything other browsers. */ - #MSearchPanel.MSearchPanelInactive:hover #MSearchField { - background-color: #FFFFFF; - border: 1px solid #C0C0C0; - padding: 1px 3px; - } - .MSearchPanelActive #MSearchField { - background-color: #FFFFFF; - border: 1px solid #C0C0C0; - font-style: normal; - padding: 1px 3px; - } - - #MSearchType { - visibility: hidden; - font: 8pt Verdana, sans-serif; - width: 98%; - padding: 0; - border: 1px solid #C0C0C0; - } - .MSearchPanelActive #MSearchType, - /* As mentioned above, Firefox doesn't do this right in frames without #MSearchPanel added on. */ - #MSearchPanel.MSearchPanelInactive:hover #MSearchType, - #MSearchType:focus { - visibility: visible; - color: #606060; - } - #MSearchType option#MSearchEverything { - font-weight: bold; - } - - .Opera8 .MSearchPanelInactive:hover, - .Opera8 .MSearchPanelActive { - margin-left: -1px; - } - - - iframe#MSearchResults { - width: 60ex; - height: 15em; - } - #MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000000; - background-color: #E8E8E8; - } - #MSearchResultsWindowClose { - font-weight: bold; - font-size: 8pt; - display: block; - padding: 2px 5px; - } - #MSearchResultsWindowClose:link, - #MSearchResultsWindowClose:visited { - color: #000000; - text-decoration: none; - } - #MSearchResultsWindowClose:active, - #MSearchResultsWindowClose:hover { - color: #800000; - text-decoration: none; - background-color: #F4F4F4; - } - - - - -#Content { - padding-bottom: 15px; - } - -.ContentPage #Content { - border-width: 0 0 1px 1px; - border-style: solid; - border-color: #000000; - background-color: #FFFFFF; - font-size: 9pt; /* To make 31ex match the menu's 31ex. */ - margin-left: 31ex; - } -.ContentPage .Firefox #Content { - margin-left: 27ex; - } - - - - .CTopic { - font-size: 10pt; - margin-bottom: 3em; - } - - - .CTitle { - font-size: 12pt; font-weight: bold; - border-width: 0 0 1px 0; border-style: solid; border-color: #A0A0A0; - margin: 0 15px .5em 15px } - - .CGroup .CTitle { - font-size: 16pt; font-variant: small-caps; - padding-left: 15px; padding-right: 15px; - border-width: 0 0 2px 0; border-color: #000000; - margin-left: 0; margin-right: 0 } - - .CClass .CTitle, - .CInterface .CTitle, - .CDatabase .CTitle, - .CDatabaseTable .CTitle, - .CSection .CTitle { - font-size: 18pt; - color: #FFFFFF; background-color: #A0A0A0; - padding: 10px 15px 10px 15px; - border-width: 2px 0; border-color: #000000; - margin-left: 0; margin-right: 0 } - - #MainTopic .CTitle { - font-size: 20pt; - color: #FFFFFF; background-color: #7070C0; - padding: 10px 15px 10px 15px; - border-width: 0 0 3px 0; border-color: #000000; - margin-left: 0; margin-right: 0 } - - .CBody { - margin-left: 15px; margin-right: 15px } - - - .CToolTip { - position: absolute; visibility: hidden; - left: 0; top: 0; - background-color: #FFFFE0; - padding: 5px; - border-width: 1px 2px 2px 1px; border-style: solid; border-color: #000000; - font-size: 8pt; - } - - .Opera .CToolTip { - max-width: 98%; - } - - /* Scrollbars would be useless. */ - .CToolTip blockquote { - overflow: hidden; - } - .IE6 .CToolTip blockquote { - overflow: visible; - } - - .CHeading { - font-weight: bold; font-size: 10pt; - margin: 1.5em 0 .5em 0; - } - - .CBody pre { - font: 10pt "Courier New", Courier, monospace; - margin: 1em 0; - } - - .CBody ul { - /* I don't know why CBody's margin doesn't apply, but it's consistent across browsers so whatever. - Reapply it here as padding. */ - padding-left: 15px; padding-right: 15px; - margin: .5em 5ex .5em 5ex; - } - - .CDescriptionList { - margin: .5em 5ex 0 5ex } - - .CDLEntry { - font: 10pt "Courier New", Courier, monospace; color: #808080; - padding-bottom: .25em; - white-space: nowrap } - - .CDLDescription { - font-size: 10pt; /* For browsers that don't inherit correctly, like Opera 5. */ - padding-bottom: .5em; padding-left: 5ex } - - - .CTopic img { - text-align: center; - display: block; - margin: 1em auto; - } - .CImageCaption { - font-variant: small-caps; - font-size: 8pt; - color: #808080; - text-align: center; - position: relative; - top: 1em; - } - - .CImageLink { - color: #808080; - font-style: italic; - } - a.CImageLink:link, - a.CImageLink:visited, - a.CImageLink:hover { color: #808080 } - - - - - -.Prototype { - font: 10pt "Courier New", Courier, monospace; - padding: 5px 3ex; - border-width: 1px; border-style: solid; - margin: 0 5ex 1.5em 5ex; - } - - .Prototype td { - font-size: 10pt; - } - - .PDefaultValue, - .PDefaultValuePrefix, - .PTypePrefix { - color: #8F8F8F; - } - .PTypePrefix { - text-align: right; - } - .PAfterParameters { - vertical-align: bottom; - } - - .IE .Prototype table { - padding: 0; - } - - .CFunction .Prototype { - background-color: #F4F4F4; border-color: #D0D0D0 } - .CProperty .Prototype { - background-color: #F4F4FF; border-color: #C0C0E8 } - .CVariable .Prototype { - background-color: #FFFFF0; border-color: #E0E0A0 } - - .CClass .Prototype { - border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0; - background-color: #F4F4F4; - } - .CInterface .Prototype { - border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0D0; - background-color: #F4F4FF; - } - - .CDatabaseIndex .Prototype, - .CConstant .Prototype { - background-color: #D0D0D0; border-color: #000000 } - .CType .Prototype, - .CEnumeration .Prototype { - background-color: #FAF0F0; border-color: #E0B0B0; - } - .CDatabaseTrigger .Prototype, - .CEvent .Prototype, - .CDelegate .Prototype { - background-color: #F0FCF0; border-color: #B8E4B8 } - - .CToolTip .Prototype { - margin: 0 0 .5em 0; - white-space: nowrap; - } - - - - - -.Summary { - margin: 1.5em 5ex 0 5ex } - - .STitle { - font-size: 12pt; font-weight: bold; - margin-bottom: .5em } - - - .SBorder { - background-color: #FFFFF0; - padding: 15px; - border: 1px solid #C0C060 } - - /* In a frame IE 6 will make them too long unless you set the width to 100%. Without frames it will be correct without a width - or slightly too long (but not enough to scroll) with a width. This arbitrary weirdness simply astounds me. IE 7 has the same - problem with frames, haven't tested it without. */ - .FramedContentPage .IE .SBorder { - width: 100% } - - /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */ - .Firefox .SBorder { - -moz-border-radius: 20px } - - - .STable { - font-size: 9pt; width: 100% } - - .SEntry { - width: 30% } - .SDescription { - width: 70% } - - - .SMarked { - background-color: #F8F8D8 } - - .SDescription { padding-left: 2ex } - .SIndent1 .SEntry { padding-left: 1.5ex } .SIndent1 .SDescription { padding-left: 3.5ex } - .SIndent2 .SEntry { padding-left: 3.0ex } .SIndent2 .SDescription { padding-left: 5.0ex } - .SIndent3 .SEntry { padding-left: 4.5ex } .SIndent3 .SDescription { padding-left: 6.5ex } - .SIndent4 .SEntry { padding-left: 6.0ex } .SIndent4 .SDescription { padding-left: 8.0ex } - .SIndent5 .SEntry { padding-left: 7.5ex } .SIndent5 .SDescription { padding-left: 9.5ex } - - .SDescription a { color: #800000} - .SDescription a:active { color: #A00000 } - - .SGroup td { - padding-top: .5em; padding-bottom: .25em } - - .SGroup .SEntry { - font-weight: bold; font-variant: small-caps } - - .SGroup .SEntry a { color: #800000 } - .SGroup .SEntry a:active { color: #F00000 } - - - .SMain td, - .SClass td, - .SDatabase td, - .SDatabaseTable td, - .SSection td { - font-size: 10pt; - padding-bottom: .25em } - - .SClass td, - .SDatabase td, - .SDatabaseTable td, - .SSection td { - padding-top: 1em } - - .SMain .SEntry, - .SClass .SEntry, - .SDatabase .SEntry, - .SDatabaseTable .SEntry, - .SSection .SEntry { - font-weight: bold; - } - - .SMain .SEntry a, - .SClass .SEntry a, - .SDatabase .SEntry a, - .SDatabaseTable .SEntry a, - .SSection .SEntry a { color: #000000 } - - .SMain .SEntry a:active, - .SClass .SEntry a:active, - .SDatabase .SEntry a:active, - .SDatabaseTable .SEntry a:active, - .SSection .SEntry a:active { color: #A00000 } - - - - - -.ClassHierarchy { - margin: 0 15px 1em 15px } - - .CHEntry { - border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0; - margin-bottom: 3px; - padding: 2px 2ex; - font-size: 10pt; - background-color: #F4F4F4; color: #606060; - } - - .Firefox .CHEntry { - -moz-border-radius: 4px; - } - - .CHCurrent .CHEntry { - font-weight: bold; - border-color: #000000; - color: #000000; - } - - .CHChildNote .CHEntry { - font-style: italic; - font-size: 8pt; - } - - .CHIndent { - margin-left: 3ex; - } - - .CHEntry a:link, - .CHEntry a:visited, - .CHEntry a:hover { - color: #606060; - } - .CHEntry a:active { - color: #800000; - } - - - - - -#Index { - background-color: #FFFFFF; - } - -/* As opposed to .PopupSearchResultsPage #Index */ -.IndexPage #Index, -.FramedIndexPage #Index, -.FramedSearchResultsPage #Index { - padding: 15px; - } - -.IndexPage #Index { - border-width: 0 0 1px 1px; - border-style: solid; - border-color: #000000; - font-size: 9pt; /* To make 27ex match the menu's 27ex. */ - margin-left: 27ex; - } - - - .IPageTitle { - font-size: 20pt; font-weight: bold; - color: #FFFFFF; background-color: #7070C0; - padding: 10px 15px 10px 15px; - border-width: 0 0 3px 0; border-color: #000000; border-style: solid; - margin: -15px -15px 0 -15px } - - .FramedSearchResultsPage .IPageTitle { - margin-bottom: 15px; - } - - .INavigationBar { - font-size: 10pt; - text-align: center; - background-color: #FFFFF0; - padding: 5px; - border-bottom: solid 1px black; - margin: 0 -15px 15px -15px; - } - - .INavigationBar a { - font-weight: bold } - - .IHeading { - font-size: 16pt; font-weight: bold; - padding: 2.5em 0 .5em 0; - text-align: center; - width: 3.5ex; - } - #IFirstHeading { - padding-top: 0; - } - - .IEntry { - font-size: 10pt; - padding-left: 1ex; - } - .PopupSearchResultsPage .IEntry { - font-size: 8pt; - padding: 1px 5px; - } - .PopupSearchResultsPage .Opera9 .IEntry, - .FramedSearchResultsPage .Opera9 .IEntry { - text-align: left; - } - .FramedSearchResultsPage .IEntry { - padding: 0; - } - - .ISubIndex { - padding-left: 3ex; padding-bottom: .5em } - .PopupSearchResultsPage .ISubIndex { - display: none; - } - - /* While it may cause some entries to look like links when they aren't, I found it's much easier to read the - index if everything's the same color. */ - .ISymbol { - font-weight: bold; color: #900000 } - - .IndexPage .ISymbolPrefix, - .FramedIndexPage .ISymbolPrefix { - font-size: 10pt; - text-align: right; - color: #C47C7C; - background-color: #F8F8F8; - border-right: 3px solid #E0E0E0; - border-left: 1px solid #E0E0E0; - padding: 0 1px 0 2px; - } - .PopupSearchResultsPage .ISymbolPrefix, - .FramedSearchResultsPage .ISymbolPrefix { - color: #900000; - } - .PopupSearchResultsPage .ISymbolPrefix { - font-size: 8pt; - } - - .IndexPage #IFirstSymbolPrefix, - .FramedIndexPage #IFirstSymbolPrefix { - border-top: 1px solid #E0E0E0; - } - .IndexPage #ILastSymbolPrefix, - .FramedIndexPage #ILastSymbolPrefix { - border-bottom: 1px solid #E0E0E0; - } - .IndexPage #IOnlySymbolPrefix, - .FramedIndexPage #IOnlySymbolPrefix { - border-top: 1px solid #E0E0E0; - border-bottom: 1px solid #E0E0E0; - } - - a.IParent, - a.IFile { - display: block; - } - - .PopupSearchResultsPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; - } - .FramedSearchResultsPage .SRStatus { - font-size: 10pt; - font-style: italic; - } - - .SRResult { - display: none; - } - - - -#Footer { - font-size: 8pt; - color: #989898; - text-align: right; - } - -#Footer p { - text-indent: 0; - margin-bottom: .5em; - } - -.ContentPage #Footer, -.IndexPage #Footer { - text-align: right; - margin: 2px; - } - -.FramedMenuPage #Footer { - text-align: center; - margin: 5em 10px 10px 10px; - padding-top: 1em; - border-top: 1px solid #C8C8C8; - } - - #Footer a:link, - #Footer a:hover, - #Footer a:visited { color: #989898 } - #Footer a:active { color: #A00000 } - diff --git a/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css deleted file mode 100644 index 12117d4e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css +++ /dev/null @@ -1,174 +0,0 @@ -html, body { - height: 100%; -} - -/* -div.Firefox { - height: 100%; -} -*/ - -.MTitle { - font-variant: normal; -} - -.MLink { - font-style: normal; -} - -.CBody { -margin-left: 30px; -margin-right: 30px; -} - -p { - text-indent: 0; - margin-bottom: 1em; - } - -.CBody p { -/* - padding-top: 4px; - padding-bottom: 4px; -*/ -} - -#Menu { - margin-top: 94px; - border: 0px; -} - -body.ContentPage { - background-image: url('../../images/background.jpg'); - background-color: #818181; - background-position: left top; - background-repeat: repeat-x; -} - -.MGroup a:link, -.MGroup a:hover, -.MGroup a:visited { color: #bfbfbf; margin-right: 10px } -.MGroup a:active { color: #f58f07; margin-right: 10px } - - -.MEntry a:link, -.MEntry a:hover, -.MEntry a:visited { color: #bfbfbf; margin-right: 0 } -.MEntry a:active { color: #f58f07; margin-right: 0 } - -#Footer { - color: #bfbfbf; -} - -#Footer a:link, #Footer a:hover, #Footer a:visited { - color: #5c93f0; -} - -#MainTopic div.CTitle.logo { - color: #292929; - font-size: 0px; - font-style: normal; - font-weight: normal; - border-width: 0px; - padding: 0px; - margin: 0px; - background-position: left top; - background-repeat: no-repeat; - background-image: url('../../images/logo.jpg'); - background-color: #292929; - height: 94px; - position: relative; - -} - -#MainTopic h1.CTitle a { - display: none; -} - - -#MainTopic div.CBody p:first-child { - margin-top: 24px; -} - -.ContentPage #Content { - border: 0px; -/* height: 100%; */ -} - -#IPageLogo { - width: 780px; - color: #292929; - font-style: normal; - font-weight: normal; - border-width: 0px; - padding: 0px; - margin: 0px; - background-position: left top; - background-repeat: no-repeat; - background-image: url('../../images/logo.jpg'); - background-color: #292929; - height: 94px; - position: relative; - left: 27ex; -} - -#Menu, #IPageLogo { - font-size: 9pt; -} - -body.IndexPage { - background-image: url('../../images/background.jpg'); -} - -/*#IPageLogo:hover { - cursor: pointer; -}*/ - -.IPageTitle { - background-color:#FFFFF0; - color: #333333; - border: 0px; -} - - - -div.nav { - position:relative; - top: 70px; - text-align: right; -} - -a.nav span { - font-size: 11px; - position: relative; - bottom: 2px; -} - -a.nav:visited { - text-decoration: none; - border: 0px; - color: #aaaaaa; -} - -a.nav, a.nav:link { - border: 0px; - text-decoration: none; - font-family: Tahoma, "Helvetica Neue", "Trebuchet MS", Verdana, Arial, sans-serif; - font-size: 16px; - color: #aaaaaa; - margin-right: 11px; -} - -a.nav:hover { - text-decoration: none; - border: 0px; - color: #E0771C; -} - -a.nav:active { - text-decoration: none; - border: 0px; - color: #E0771C; -} - - diff --git a/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css deleted file mode 100644 index a672a949..00000000 --- a/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css +++ /dev/null @@ -1,2 +0,0 @@ -@import URL("1.css"); -@import URL("2.css"); diff --git a/wqflask/wqflask/static/packages/jqplot/excanvas.js b/wqflask/wqflask/static/packages/jqplot/excanvas.js deleted file mode 100644 index 75b2f65f..00000000 --- a/wqflask/wqflask/static/packages/jqplot/excanvas.js +++ /dev/null @@ -1,1438 +0,0 @@ -// Memory Leaks patch from http://explorercanvas.googlecode.com/svn/trunk/ -// svn : r73 -// ------------------------------------------------------------------ -// Copyright 2006 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - -// Known Issues: -// -// * Patterns only support repeat. -// * Radial gradient are not implemented. The VML version of these look very -// different from the canvas one. -// * Clipping paths are not implemented. -// * Coordsize. The width and height attribute have higher priority than the -// width and height style values which isn't correct. -// * Painting mode isn't implemented. -// * Canvas width/height should is using content-box by default. IE in -// Quirks mode will draw the canvas using border-box. Either change your -// doctype to HTML5 -// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) -// or use Box Sizing Behavior from WebFX -// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) -// * Non uniform scaling does not correctly scale strokes. -// * Optimize. There is always room for speed improvements. - -// Only add this code if we do not already have a canvas implementation -if (!document.createElement('canvas').getContext) { - -(function() { - - // alias some functions to make (compiled) code shorter - var m = Math; - var mr = m.round; - var ms = m.sin; - var mc = m.cos; - var abs = m.abs; - var sqrt = m.sqrt; - - // this is used for sub pixel precision - var Z = 10; - var Z2 = Z / 2; - - var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1]; - - /** - * This funtion is assigned to the elements as element.getContext(). - * @this {HTMLElement} - * @return {CanvasRenderingContext2D_} - */ - function getContext() { - return this.context_ || - (this.context_ = new CanvasRenderingContext2D_(this)); - } - - var slice = Array.prototype.slice; - - /** - * Binds a function to an object. The returned function will always use the - * passed in {@code obj} as {@code this}. - * - * Example: - * - * g = bind(f, obj, a, b) - * g(c, d) // will do f.call(obj, a, b, c, d) - * - * @param {Function} f The function to bind the object to - * @param {Object} obj The object that should act as this when the function - * is called - * @param {*} var_args Rest arguments that will be used as the initial - * arguments when the function is called - * @return {Function} A new function that has bound this - */ - function bind(f, obj, var_args) { - var a = slice.call(arguments, 2); - return function() { - return f.apply(obj, a.concat(slice.call(arguments))); - }; - } - - function encodeHtmlAttribute(s) { - return String(s).replace(/&/g, '&').replace(/"/g, '"'); - } - - function addNamespace(doc, prefix, urn) { - if (!doc.namespaces[prefix]) { - doc.namespaces.add(prefix, urn, '#default#VML'); - } - } - - function addNamespacesAndStylesheet(doc) { - addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml'); - addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office'); - - // Setup default CSS. Only add one style sheet per document - if (!doc.styleSheets['ex_canvas_']) { - var ss = doc.createStyleSheet(); - ss.owningElement.id = 'ex_canvas_'; - ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + - // default size is 300x150 in Gecko and Opera - 'text-align:left;width:300px;height:150px}'; - } - } - - // Add namespaces and stylesheet at startup. - addNamespacesAndStylesheet(document); - - var G_vmlCanvasManager_ = { - init: function(opt_doc) { - var doc = opt_doc || document; - // Create a dummy element so that IE will allow canvas elements to be - // recognized. - doc.createElement('canvas'); - doc.attachEvent('onreadystatechange', bind(this.init_, this, doc)); - }, - - init_: function(doc) { - // find all canvas elements - var els = doc.getElementsByTagName('canvas'); - for (var i = 0; i < els.length; i++) { - this.initElement(els[i]); - } - }, - - /** - * Public initializes a canvas element so that it can be used as canvas - * element from now on. This is called automatically before the page is - * loaded but if you are creating elements using createElement you need to - * make sure this is called on the element. - * @param {HTMLElement} el The canvas element to initialize. - * @return {HTMLElement} the element that was created. - */ - initElement: function(el) { - if (!el.getContext) { - el.getContext = getContext; - - // Add namespaces and stylesheet to document of the element. - addNamespacesAndStylesheet(el.ownerDocument); - - // Remove fallback content. There is no way to hide text nodes so we - // just remove all childNodes. We could hide all elements and remove - // text nodes but who really cares about the fallback content. - el.innerHTML = ''; - - // do not use inline function because that will leak memory - el.attachEvent('onpropertychange', onPropertyChange); - el.attachEvent('onresize', onResize); - - var attrs = el.attributes; - if (attrs.width && attrs.width.specified) { - // TODO: use runtimeStyle and coordsize - // el.getContext().setWidth_(attrs.width.nodeValue); - el.style.width = attrs.width.nodeValue + 'px'; - } else { - el.width = el.clientWidth; - } - if (attrs.height && attrs.height.specified) { - // TODO: use runtimeStyle and coordsize - // el.getContext().setHeight_(attrs.height.nodeValue); - el.style.height = attrs.height.nodeValue + 'px'; - } else { - el.height = el.clientHeight; - } - //el.getContext().setCoordsize_() - } - return el; - }, - - // Memory Leaks patch : see http://code.google.com/p/explorercanvas/issues/detail?id=82 - uninitElement: function(el){ - if (el.getContext) { - var ctx = el.getContext(); - delete ctx.element_; - delete ctx.canvas; - el.innerHTML = ""; - //el.outerHTML = ""; - el.context_ = null; - el.getContext = null; - el.detachEvent("onpropertychange", onPropertyChange); - el.detachEvent("onresize", onResize); - } - } - }; - - function onPropertyChange(e) { - var el = e.srcElement; - - switch (e.propertyName) { - case 'width': - el.getContext().clearRect(); - el.style.width = el.attributes.width.nodeValue + 'px'; - // In IE8 this does not trigger onresize. - el.firstChild.style.width = el.clientWidth + 'px'; - break; - case 'height': - el.getContext().clearRect(); - el.style.height = el.attributes.height.nodeValue + 'px'; - el.firstChild.style.height = el.clientHeight + 'px'; - break; - } - } - - function onResize(e) { - var el = e.srcElement; - if (el.firstChild) { - el.firstChild.style.width = el.clientWidth + 'px'; - el.firstChild.style.height = el.clientHeight + 'px'; - } - } - - G_vmlCanvasManager_.init(); - - // precompute "00" to "FF" - var decToHex = []; - for (var i = 0; i < 16; i++) { - for (var j = 0; j < 16; j++) { - decToHex[i * 16 + j] = i.toString(16) + j.toString(16); - } - } - - function createMatrixIdentity() { - return [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ]; - } - - function matrixMultiply(m1, m2) { - var result = createMatrixIdentity(); - - for (var x = 0; x < 3; x++) { - for (var y = 0; y < 3; y++) { - var sum = 0; - - for (var z = 0; z < 3; z++) { - sum += m1[x][z] * m2[z][y]; - } - - result[x][y] = sum; - } - } - return result; - } - - function copyState(o1, o2) { - o2.fillStyle = o1.fillStyle; - o2.lineCap = o1.lineCap; - o2.lineJoin = o1.lineJoin; - o2.lineWidth = o1.lineWidth; - o2.miterLimit = o1.miterLimit; - o2.shadowBlur = o1.shadowBlur; - o2.shadowColor = o1.shadowColor; - o2.shadowOffsetX = o1.shadowOffsetX; - o2.shadowOffsetY = o1.shadowOffsetY; - o2.strokeStyle = o1.strokeStyle; - o2.globalAlpha = o1.globalAlpha; - o2.font = o1.font; - o2.textAlign = o1.textAlign; - o2.textBaseline = o1.textBaseline; - o2.arcScaleX_ = o1.arcScaleX_; - o2.arcScaleY_ = o1.arcScaleY_; - o2.lineScale_ = o1.lineScale_; - } - - var colorData = { - aliceblue: '#F0F8FF', - antiquewhite: '#FAEBD7', - aquamarine: '#7FFFD4', - azure: '#F0FFFF', - beige: '#F5F5DC', - bisque: '#FFE4C4', - black: '#000000', - blanchedalmond: '#FFEBCD', - blueviolet: '#8A2BE2', - brown: '#A52A2A', - burlywood: '#DEB887', - cadetblue: '#5F9EA0', - chartreuse: '#7FFF00', - chocolate: '#D2691E', - coral: '#FF7F50', - cornflowerblue: '#6495ED', - cornsilk: '#FFF8DC', - crimson: '#DC143C', - cyan: '#00FFFF', - darkblue: '#00008B', - darkcyan: '#008B8B', - darkgoldenrod: '#B8860B', - darkgray: '#A9A9A9', - darkgreen: '#006400', - darkgrey: '#A9A9A9', - darkkhaki: '#BDB76B', - darkmagenta: '#8B008B', - darkolivegreen: '#556B2F', - darkorange: '#FF8C00', - darkorchid: '#9932CC', - darkred: '#8B0000', - darksalmon: '#E9967A', - darkseagreen: '#8FBC8F', - darkslateblue: '#483D8B', - darkslategray: '#2F4F4F', - darkslategrey: '#2F4F4F', - darkturquoise: '#00CED1', - darkviolet: '#9400D3', - deeppink: '#FF1493', - deepskyblue: '#00BFFF', - dimgray: '#696969', - dimgrey: '#696969', - dodgerblue: '#1E90FF', - firebrick: '#B22222', - floralwhite: '#FFFAF0', - forestgreen: '#228B22', - gainsboro: '#DCDCDC', - ghostwhite: '#F8F8FF', - gold: '#FFD700', - goldenrod: '#DAA520', - grey: '#808080', - greenyellow: '#ADFF2F', - honeydew: '#F0FFF0', - hotpink: '#FF69B4', - indianred: '#CD5C5C', - indigo: '#4B0082', - ivory: '#FFFFF0', - khaki: '#F0E68C', - lavender: '#E6E6FA', - lavenderblush: '#FFF0F5', - lawngreen: '#7CFC00', - lemonchiffon: '#FFFACD', - lightblue: '#ADD8E6', - lightcoral: '#F08080', - lightcyan: '#E0FFFF', - lightgoldenrodyellow: '#FAFAD2', - lightgreen: '#90EE90', - lightgrey: '#D3D3D3', - lightpink: '#FFB6C1', - lightsalmon: '#FFA07A', - lightseagreen: '#20B2AA', - lightskyblue: '#87CEFA', - lightslategray: '#778899', - lightslategrey: '#778899', - lightsteelblue: '#B0C4DE', - lightyellow: '#FFFFE0', - limegreen: '#32CD32', - linen: '#FAF0E6', - magenta: '#FF00FF', - mediumaquamarine: '#66CDAA', - mediumblue: '#0000CD', - mediumorchid: '#BA55D3', - mediumpurple: '#9370DB', - mediumseagreen: '#3CB371', - mediumslateblue: '#7B68EE', - mediumspringgreen: '#00FA9A', - mediumturquoise: '#48D1CC', - mediumvioletred: '#C71585', - midnightblue: '#191970', - mintcream: '#F5FFFA', - mistyrose: '#FFE4E1', - moccasin: '#FFE4B5', - navajowhite: '#FFDEAD', - oldlace: '#FDF5E6', - olivedrab: '#6B8E23', - orange: '#FFA500', - orangered: '#FF4500', - orchid: '#DA70D6', - palegoldenrod: '#EEE8AA', - palegreen: '#98FB98', - paleturquoise: '#AFEEEE', - palevioletred: '#DB7093', - papayawhip: '#FFEFD5', - peachpuff: '#FFDAB9', - peru: '#CD853F', - pink: '#FFC0CB', - plum: '#DDA0DD', - powderblue: '#B0E0E6', - rosybrown: '#BC8F8F', - royalblue: '#4169E1', - saddlebrown: '#8B4513', - salmon: '#FA8072', - sandybrown: '#F4A460', - seagreen: '#2E8B57', - seashell: '#FFF5EE', - sienna: '#A0522D', - skyblue: '#87CEEB', - slateblue: '#6A5ACD', - slategray: '#708090', - slategrey: '#708090', - snow: '#FFFAFA', - springgreen: '#00FF7F', - steelblue: '#4682B4', - tan: '#D2B48C', - thistle: '#D8BFD8', - tomato: '#FF6347', - turquoise: '#40E0D0', - violet: '#EE82EE', - wheat: '#F5DEB3', - whitesmoke: '#F5F5F5', - yellowgreen: '#9ACD32' - }; - - - function getRgbHslContent(styleString) { - var start = styleString.indexOf('(', 3); - var end = styleString.indexOf(')', start + 1); - var parts = styleString.substring(start + 1, end).split(','); - // add alpha if needed - if (parts.length != 4 || styleString.charAt(3) != 'a') { - parts[3] = 1; - } - return parts; - } - - function percent(s) { - return parseFloat(s) / 100; - } - - function clamp(v, min, max) { - return Math.min(max, Math.max(min, v)); - } - - function hslToRgb(parts){ - var r, g, b, h, s, l; - h = parseFloat(parts[0]) / 360 % 360; - if (h < 0) - h++; - s = clamp(percent(parts[1]), 0, 1); - l = clamp(percent(parts[2]), 0, 1); - if (s == 0) { - r = g = b = l; // achromatic - } else { - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = hueToRgb(p, q, h + 1 / 3); - g = hueToRgb(p, q, h); - b = hueToRgb(p, q, h - 1 / 3); - } - - return '#' + decToHex[Math.floor(r * 255)] + - decToHex[Math.floor(g * 255)] + - decToHex[Math.floor(b * 255)]; - } - - function hueToRgb(m1, m2, h) { - if (h < 0) - h++; - if (h > 1) - h--; - - if (6 * h < 1) - return m1 + (m2 - m1) * 6 * h; - else if (2 * h < 1) - return m2; - else if (3 * h < 2) - return m1 + (m2 - m1) * (2 / 3 - h) * 6; - else - return m1; - } - - var processStyleCache = {}; - - function processStyle(styleString) { - if (styleString in processStyleCache) { - return processStyleCache[styleString]; - } - - var str, alpha = 1; - - styleString = String(styleString); - if (styleString.charAt(0) == '#') { - str = styleString; - } else if (/^rgb/.test(styleString)) { - var parts = getRgbHslContent(styleString); - var str = '#', n; - for (var i = 0; i < 3; i++) { - if (parts[i].indexOf('%') != -1) { - n = Math.floor(percent(parts[i]) * 255); - } else { - n = +parts[i]; - } - str += decToHex[clamp(n, 0, 255)]; - } - alpha = +parts[3]; - } else if (/^hsl/.test(styleString)) { - var parts = getRgbHslContent(styleString); - str = hslToRgb(parts); - alpha = parts[3]; - } else { - str = colorData[styleString] || styleString; - } - return processStyleCache[styleString] = {color: str, alpha: alpha}; - } - - var DEFAULT_STYLE = { - style: 'normal', - variant: 'normal', - weight: 'normal', - size: 10, - family: 'sans-serif' - }; - - // Internal text style cache - var fontStyleCache = {}; - - function processFontStyle(styleString) { - if (fontStyleCache[styleString]) { - return fontStyleCache[styleString]; - } - - var el = document.createElement('div'); - var style = el.style; - try { - style.font = styleString; - } catch (ex) { - // Ignore failures to set to invalid font. - } - - return fontStyleCache[styleString] = { - style: style.fontStyle || DEFAULT_STYLE.style, - variant: style.fontVariant || DEFAULT_STYLE.variant, - weight: style.fontWeight || DEFAULT_STYLE.weight, - size: style.fontSize || DEFAULT_STYLE.size, - family: style.fontFamily || DEFAULT_STYLE.family - }; - } - - function getComputedStyle(style, element) { - var computedStyle = {}; - - for (var p in style) { - computedStyle[p] = style[p]; - } - - // Compute the size - var canvasFontSize = parseFloat(element.currentStyle.fontSize), - fontSize = parseFloat(style.size); - - if (typeof style.size == 'number') { - computedStyle.size = style.size; - } else if (style.size.indexOf('px') != -1) { - computedStyle.size = fontSize; - } else if (style.size.indexOf('em') != -1) { - computedStyle.size = canvasFontSize * fontSize; - } else if(style.size.indexOf('%') != -1) { - computedStyle.size = (canvasFontSize / 100) * fontSize; - } else if (style.size.indexOf('pt') != -1) { - computedStyle.size = fontSize / .75; - } else { - computedStyle.size = canvasFontSize; - } - - // Different scaling between normal text and VML text. This was found using - // trial and error to get the same size as non VML text. - computedStyle.size *= 0.981; - - // Fix for VML handling of bare font family names. Add a '' around font family names. - computedStyle.family = "'" + computedStyle.family.replace(/(\'|\")/g,'').replace(/\s*,\s*/g, "', '") + "'"; - - return computedStyle; - } - - function buildStyle(style) { - return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + - style.size + 'px ' + style.family; - } - - var lineCapMap = { - 'butt': 'flat', - 'round': 'round' - }; - - function processLineCap(lineCap) { - return lineCapMap[lineCap] || 'square'; - } - - /** - * This class implements CanvasRenderingContext2D interface as described by - * the WHATWG. - * @param {HTMLElement} canvasElement The element that the 2D context should - * be associated with - */ - function CanvasRenderingContext2D_(canvasElement) { - this.m_ = createMatrixIdentity(); - - this.mStack_ = []; - this.aStack_ = []; - this.currentPath_ = []; - - // Canvas context properties - this.strokeStyle = '#000'; - this.fillStyle = '#000'; - - this.lineWidth = 1; - this.lineJoin = 'miter'; - this.lineCap = 'butt'; - this.miterLimit = Z * 1; - this.globalAlpha = 1; - this.font = '10px sans-serif'; - this.textAlign = 'left'; - this.textBaseline = 'alphabetic'; - this.canvas = canvasElement; - - var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' + - canvasElement.clientHeight + 'px;overflow:hidden;position:absolute'; - var el = canvasElement.ownerDocument.createElement('div'); - el.style.cssText = cssText; - canvasElement.appendChild(el); - - var overlayEl = el.cloneNode(false); - // Use a non transparent background. - overlayEl.style.backgroundColor = 'red'; - overlayEl.style.filter = 'alpha(opacity=0)'; - canvasElement.appendChild(overlayEl); - - this.element_ = el; - this.arcScaleX_ = 1; - this.arcScaleY_ = 1; - this.lineScale_ = 1; - } - - var contextPrototype = CanvasRenderingContext2D_.prototype; - contextPrototype.clearRect = function() { - if (this.textMeasureEl_) { - this.textMeasureEl_.removeNode(true); - this.textMeasureEl_ = null; - } - this.element_.innerHTML = ''; - }; - - contextPrototype.beginPath = function() { - // TODO: Branch current matrix so that save/restore has no effect - // as per safari docs. - this.currentPath_ = []; - }; - - contextPrototype.moveTo = function(aX, aY) { - var p = getCoords(this, aX, aY); - this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y}); - this.currentX_ = p.x; - this.currentY_ = p.y; - }; - - contextPrototype.lineTo = function(aX, aY) { - var p = getCoords(this, aX, aY); - this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y}); - - this.currentX_ = p.x; - this.currentY_ = p.y; - }; - - contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, - aCP2x, aCP2y, - aX, aY) { - var p = getCoords(this, aX, aY); - var cp1 = getCoords(this, aCP1x, aCP1y); - var cp2 = getCoords(this, aCP2x, aCP2y); - bezierCurveTo(this, cp1, cp2, p); - }; - - // Helper function that takes the already fixed cordinates. - function bezierCurveTo(self, cp1, cp2, p) { - self.currentPath_.push({ - type: 'bezierCurveTo', - cp1x: cp1.x, - cp1y: cp1.y, - cp2x: cp2.x, - cp2y: cp2.y, - x: p.x, - y: p.y - }); - self.currentX_ = p.x; - self.currentY_ = p.y; - } - - contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { - // the following is lifted almost directly from - // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes - - var cp = getCoords(this, aCPx, aCPy); - var p = getCoords(this, aX, aY); - - var cp1 = { - x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_), - y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_) - }; - var cp2 = { - x: cp1.x + (p.x - this.currentX_) / 3.0, - y: cp1.y + (p.y - this.currentY_) / 3.0 - }; - - bezierCurveTo(this, cp1, cp2, p); - }; - - contextPrototype.arc = function(aX, aY, aRadius, - aStartAngle, aEndAngle, aClockwise) { - aRadius *= Z; - var arcType = aClockwise ? 'at' : 'wa'; - - var xStart = aX + mc(aStartAngle) * aRadius - Z2; - var yStart = aY + ms(aStartAngle) * aRadius - Z2; - - var xEnd = aX + mc(aEndAngle) * aRadius - Z2; - var yEnd = aY + ms(aEndAngle) * aRadius - Z2; - - // IE won't render arches drawn counter clockwise if xStart == xEnd. - if (xStart == xEnd && !aClockwise) { - xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something - // that can be represented in binary - } - - var p = getCoords(this, aX, aY); - var pStart = getCoords(this, xStart, yStart); - var pEnd = getCoords(this, xEnd, yEnd); - - this.currentPath_.push({type: arcType, - x: p.x, - y: p.y, - radius: aRadius, - xStart: pStart.x, - yStart: pStart.y, - xEnd: pEnd.x, - yEnd: pEnd.y}); - - }; - - contextPrototype.rect = function(aX, aY, aWidth, aHeight) { - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - }; - - contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { - var oldPath = this.currentPath_; - this.beginPath(); - - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - this.stroke(); - - this.currentPath_ = oldPath; - }; - - contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { - var oldPath = this.currentPath_; - this.beginPath(); - - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - this.fill(); - - this.currentPath_ = oldPath; - }; - - contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { - var gradient = new CanvasGradient_('gradient'); - gradient.x0_ = aX0; - gradient.y0_ = aY0; - gradient.x1_ = aX1; - gradient.y1_ = aY1; - return gradient; - }; - - contextPrototype.createRadialGradient = function(aX0, aY0, aR0, - aX1, aY1, aR1) { - var gradient = new CanvasGradient_('gradientradial'); - gradient.x0_ = aX0; - gradient.y0_ = aY0; - gradient.r0_ = aR0; - gradient.x1_ = aX1; - gradient.y1_ = aY1; - gradient.r1_ = aR1; - return gradient; - }; - - contextPrototype.drawImage = function(image, var_args) { - var dx, dy, dw, dh, sx, sy, sw, sh; - - // to find the original width we overide the width and height - var oldRuntimeWidth = image.runtimeStyle.width; - var oldRuntimeHeight = image.runtimeStyle.height; - image.runtimeStyle.width = 'auto'; - image.runtimeStyle.height = 'auto'; - - // get the original size - var w = image.width; - var h = image.height; - - // and remove overides - image.runtimeStyle.width = oldRuntimeWidth; - image.runtimeStyle.height = oldRuntimeHeight; - - if (arguments.length == 3) { - dx = arguments[1]; - dy = arguments[2]; - sx = sy = 0; - sw = dw = w; - sh = dh = h; - } else if (arguments.length == 5) { - dx = arguments[1]; - dy = arguments[2]; - dw = arguments[3]; - dh = arguments[4]; - sx = sy = 0; - sw = w; - sh = h; - } else if (arguments.length == 9) { - sx = arguments[1]; - sy = arguments[2]; - sw = arguments[3]; - sh = arguments[4]; - dx = arguments[5]; - dy = arguments[6]; - dw = arguments[7]; - dh = arguments[8]; - } else { - throw Error('Invalid number of arguments'); - } - - var d = getCoords(this, dx, dy); - - var w2 = sw / 2; - var h2 = sh / 2; - - var vmlStr = []; - - var W = 10; - var H = 10; - - // For some reason that I've now forgotten, using divs didn't work - vmlStr.push(' ' , - '', - ''); - - this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join('')); - }; - - contextPrototype.stroke = function(aFill) { - var lineStr = []; - var lineOpen = false; - - var W = 10; - var H = 10; - - lineStr.push(''); - - if (!aFill) { - appendStroke(this, lineStr); - } else { - appendFill(this, lineStr, min, max); - } - - lineStr.push(''); - - this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); - }; - - function appendStroke(ctx, lineStr) { - var a = processStyle(ctx.strokeStyle); - var color = a.color; - var opacity = a.alpha * ctx.globalAlpha; - var lineWidth = ctx.lineScale_ * ctx.lineWidth; - - // VML cannot correctly render a line if the width is less than 1px. - // In that case, we dilute the color to make the line look thinner. - if (lineWidth < 1) { - opacity *= lineWidth; - } - - lineStr.push( - '' - ); - } - - function appendFill(ctx, lineStr, min, max) { - var fillStyle = ctx.fillStyle; - var arcScaleX = ctx.arcScaleX_; - var arcScaleY = ctx.arcScaleY_; - var width = max.x - min.x; - var height = max.y - min.y; - if (fillStyle instanceof CanvasGradient_) { - // TODO: Gradients transformed with the transformation matrix. - var angle = 0; - var focus = {x: 0, y: 0}; - - // additional offset - var shift = 0; - // scale factor for offset - var expansion = 1; - - if (fillStyle.type_ == 'gradient') { - var x0 = fillStyle.x0_ / arcScaleX; - var y0 = fillStyle.y0_ / arcScaleY; - var x1 = fillStyle.x1_ / arcScaleX; - var y1 = fillStyle.y1_ / arcScaleY; - var p0 = getCoords(ctx, x0, y0); - var p1 = getCoords(ctx, x1, y1); - var dx = p1.x - p0.x; - var dy = p1.y - p0.y; - angle = Math.atan2(dx, dy) * 180 / Math.PI; - - // The angle should be a non-negative number. - if (angle < 0) { - angle += 360; - } - - // Very small angles produce an unexpected result because they are - // converted to a scientific notation string. - if (angle < 1e-6) { - angle = 0; - } - } else { - var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_); - focus = { - x: (p0.x - min.x) / width, - y: (p0.y - min.y) / height - }; - - width /= arcScaleX * Z; - height /= arcScaleY * Z; - var dimension = m.max(width, height); - shift = 2 * fillStyle.r0_ / dimension; - expansion = 2 * fillStyle.r1_ / dimension - shift; - } - - // We need to sort the color stops in ascending order by offset, - // otherwise IE won't interpret it correctly. - var stops = fillStyle.colors_; - stops.sort(function(cs1, cs2) { - return cs1.offset - cs2.offset; - }); - - var length = stops.length; - var color1 = stops[0].color; - var color2 = stops[length - 1].color; - var opacity1 = stops[0].alpha * ctx.globalAlpha; - var opacity2 = stops[length - 1].alpha * ctx.globalAlpha; - - var colors = []; - for (var i = 0; i < length; i++) { - var stop = stops[i]; - colors.push(stop.offset * expansion + shift + ' ' + stop.color); - } - - // When colors attribute is used, the meanings of opacity and o:opacity2 - // are reversed. - lineStr.push(''); - } else if (fillStyle instanceof CanvasPattern_) { - if (width && height) { - var deltaLeft = -min.x; - var deltaTop = -min.y; - lineStr.push(''); - } - } else { - var a = processStyle(ctx.fillStyle); - var color = a.color; - var opacity = a.alpha * ctx.globalAlpha; - lineStr.push(''); - } - } - - contextPrototype.fill = function() { - this.stroke(true); - }; - - contextPrototype.closePath = function() { - this.currentPath_.push({type: 'close'}); - }; - - function getCoords(ctx, aX, aY) { - var m = ctx.m_; - return { - x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2, - y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2 - }; - }; - - contextPrototype.save = function() { - var o = {}; - copyState(this, o); - this.aStack_.push(o); - this.mStack_.push(this.m_); - this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); - }; - - contextPrototype.restore = function() { - if (this.aStack_.length) { - copyState(this.aStack_.pop(), this); - this.m_ = this.mStack_.pop(); - } - }; - - function matrixIsFinite(m) { - return isFinite(m[0][0]) && isFinite(m[0][1]) && - isFinite(m[1][0]) && isFinite(m[1][1]) && - isFinite(m[2][0]) && isFinite(m[2][1]); - } - - function setM(ctx, m, updateLineScale) { - if (!matrixIsFinite(m)) { - return; - } - ctx.m_ = m; - - if (updateLineScale) { - // Get the line scale. - // Determinant of this.m_ means how much the area is enlarged by the - // transformation. So its square root can be used as a scale factor - // for width. - var det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; - ctx.lineScale_ = sqrt(abs(det)); - } - } - - contextPrototype.translate = function(aX, aY) { - var m1 = [ - [1, 0, 0], - [0, 1, 0], - [aX, aY, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), false); - }; - - contextPrototype.rotate = function(aRot) { - var c = mc(aRot); - var s = ms(aRot); - - var m1 = [ - [c, s, 0], - [-s, c, 0], - [0, 0, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), false); - }; - - contextPrototype.scale = function(aX, aY) { - this.arcScaleX_ *= aX; - this.arcScaleY_ *= aY; - var m1 = [ - [aX, 0, 0], - [0, aY, 0], - [0, 0, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), true); - }; - - contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) { - var m1 = [ - [m11, m12, 0], - [m21, m22, 0], - [dx, dy, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), true); - }; - - contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) { - var m = [ - [m11, m12, 0], - [m21, m22, 0], - [dx, dy, 1] - ]; - - setM(this, m, true); - }; - - /** - * The text drawing function. - * The maxWidth argument isn't taken in account, since no browser supports - * it yet. - */ - contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) { - var m = this.m_, - delta = 1000, - left = 0, - right = delta, - offset = {x: 0, y: 0}, - lineStr = []; - - var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_); - - var fontStyleString = buildStyle(fontStyle); - - var elementStyle = this.element_.currentStyle; - var textAlign = this.textAlign.toLowerCase(); - switch (textAlign) { - case 'left': - case 'center': - case 'right': - break; - case 'end': - textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left'; - break; - case 'start': - textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left'; - break; - default: - textAlign = 'left'; - } - - // 1.75 is an arbitrary number, as there is no info about the text baseline - switch (this.textBaseline) { - case 'hanging': - case 'top': - offset.y = fontStyle.size / 1.75; - break; - case 'middle': - break; - default: - case null: - case 'alphabetic': - case 'ideographic': - case 'bottom': - offset.y = -fontStyle.size / 2.25; - break; - } - - switch(textAlign) { - case 'right': - left = delta; - right = 0.05; - break; - case 'center': - left = right = delta / 2; - break; - } - - var d = getCoords(this, x + offset.x, y + offset.y); - - lineStr.push(''); - - if (stroke) { - appendStroke(this, lineStr); - } else { - // TODO: Fix the min and max params. - appendFill(this, lineStr, {x: -left, y: 0}, - {x: right, y: fontStyle.size}); - } - - var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + - m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0'; - - var skewOffset = mr(d.x / Z + 1 - m[0][0]) + ',' + mr(d.y / Z - 2 * m[1][0]); - - - lineStr.push('', - '', - ''); - - this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); - }; - - contextPrototype.fillText = function(text, x, y, maxWidth) { - this.drawText_(text, x, y, maxWidth, false); - }; - - contextPrototype.strokeText = function(text, x, y, maxWidth) { - this.drawText_(text, x, y, maxWidth, true); - }; - - contextPrototype.measureText = function(text) { - if (!this.textMeasureEl_) { - var s = ''; - this.element_.insertAdjacentHTML('beforeEnd', s); - this.textMeasureEl_ = this.element_.lastChild; - } - var doc = this.element_.ownerDocument; - this.textMeasureEl_.innerHTML = ''; - this.textMeasureEl_.style.font = this.font; - // Don't use innerHTML or innerText because they allow markup/whitespace. - this.textMeasureEl_.appendChild(doc.createTextNode(text)); - return {width: this.textMeasureEl_.offsetWidth}; - }; - - /******** STUBS ********/ - contextPrototype.clip = function() { - // TODO: Implement - }; - - contextPrototype.arcTo = function() { - // TODO: Implement - }; - - contextPrototype.createPattern = function(image, repetition) { - return new CanvasPattern_(image, repetition); - }; - - // Gradient / Pattern Stubs - function CanvasGradient_(aType) { - this.type_ = aType; - this.x0_ = 0; - this.y0_ = 0; - this.r0_ = 0; - this.x1_ = 0; - this.y1_ = 0; - this.r1_ = 0; - this.colors_ = []; - } - - CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { - aColor = processStyle(aColor); - this.colors_.push({offset: aOffset, - color: aColor.color, - alpha: aColor.alpha}); - }; - - function CanvasPattern_(image, repetition) { - assertImageIsValid(image); - switch (repetition) { - case 'repeat': - case null: - case '': - this.repetition_ = 'repeat'; - break; - case 'repeat-x': - case 'repeat-y': - case 'no-repeat': - this.repetition_ = repetition; - break; - default: - throwException('SYNTAX_ERR'); - } - - this.src_ = image.src; - this.width_ = image.width; - this.height_ = image.height; - } - - function throwException(s) { - throw new DOMException_(s); - } - - function assertImageIsValid(img) { - if (!img || img.nodeType != 1 || img.tagName != 'IMG') { - throwException('TYPE_MISMATCH_ERR'); - } - if (img.readyState != 'complete') { - throwException('INVALID_STATE_ERR'); - } - } - - function DOMException_(s) { - this.code = this[s]; - this.message = s +': DOM Exception ' + this.code; - } - var p = DOMException_.prototype = new Error; - p.INDEX_SIZE_ERR = 1; - p.DOMSTRING_SIZE_ERR = 2; - p.HIERARCHY_REQUEST_ERR = 3; - p.WRONG_DOCUMENT_ERR = 4; - p.INVALID_CHARACTER_ERR = 5; - p.NO_DATA_ALLOWED_ERR = 6; - p.NO_MODIFICATION_ALLOWED_ERR = 7; - p.NOT_FOUND_ERR = 8; - p.NOT_SUPPORTED_ERR = 9; - p.INUSE_ATTRIBUTE_ERR = 10; - p.INVALID_STATE_ERR = 11; - p.SYNTAX_ERR = 12; - p.INVALID_MODIFICATION_ERR = 13; - p.NAMESPACE_ERR = 14; - p.INVALID_ACCESS_ERR = 15; - p.VALIDATION_ERR = 16; - p.TYPE_MISMATCH_ERR = 17; - - // set up externs - G_vmlCanvasManager = G_vmlCanvasManager_; - CanvasRenderingContext2D = CanvasRenderingContext2D_; - CanvasGradient = CanvasGradient_; - CanvasPattern = CanvasPattern_; - DOMException = DOMException_; - G_vmlCanvasManager._version = 888; -})(); - -} // if diff --git a/wqflask/wqflask/static/packages/jqplot/excanvas.min.js b/wqflask/wqflask/static/packages/jqplot/excanvas.min.js deleted file mode 100644 index a2b2c22e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/excanvas.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: @VERSION - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -if(!document.createElement("canvas").getContext){(function(){var ab=Math;var n=ab.round;var l=ab.sin;var A=ab.cos;var H=ab.abs;var N=ab.sqrt;var d=10;var f=d/2;var z=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];function y(){return this.context_||(this.context_=new D(this))}var t=Array.prototype.slice;function g(j,m,p){var i=t.call(arguments,2);return function(){return j.apply(m,i.concat(t.call(arguments)))}}function af(i){return String(i).replace(/&/g,"&").replace(/"/g,""")}function Y(m,j,i){if(!m.namespaces[j]){m.namespaces.add(j,i,"#default#VML")}}function R(j){Y(j,"g_vml_","urn:schemas-microsoft-com:vml");Y(j,"g_o_","urn:schemas-microsoft-com:office:office");if(!j.styleSheets.ex_canvas_){var i=j.createStyleSheet();i.owningElement.id="ex_canvas_";i.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}R(document);var e={init:function(i){var j=i||document;j.createElement("canvas");j.attachEvent("onreadystatechange",g(this.init_,this,j))},init_:function(p){var m=p.getElementsByTagName("canvas");for(var j=0;j1){m--}if(6*m<1){return j+(i-j)*6*m}else{if(2*m<1){return i}else{if(3*m<2){return j+(i-j)*(2/3-m)*6}else{return j}}}}var C={};function F(j){if(j in C){return C[j]}var ag,Z=1;j=String(j);if(j.charAt(0)=="#"){ag=j}else{if(/^rgb/.test(j)){var p=M(j);var ag="#",ah;for(var m=0;m<3;m++){if(p[m].indexOf("%")!=-1){ah=Math.floor(c(p[m])*255)}else{ah=+p[m]}ag+=k[r(ah,0,255)]}Z=+p[3]}else{if(/^hsl/.test(j)){var p=M(j);ag=I(p);Z=p[3]}else{ag=b[j]||j}}}return C[j]={color:ag,alpha:Z}}var o={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var L={};function E(i){if(L[i]){return L[i]}var p=document.createElement("div");var m=p.style;try{m.font=i}catch(j){}return L[i]={style:m.fontStyle||o.style,variant:m.fontVariant||o.variant,weight:m.fontWeight||o.weight,size:m.fontSize||o.size,family:m.fontFamily||o.family}}function u(m,j){var i={};for(var ah in m){i[ah]=m[ah]}var ag=parseFloat(j.currentStyle.fontSize),Z=parseFloat(m.size);if(typeof m.size=="number"){i.size=m.size}else{if(m.size.indexOf("px")!=-1){i.size=Z}else{if(m.size.indexOf("em")!=-1){i.size=ag*Z}else{if(m.size.indexOf("%")!=-1){i.size=(ag/100)*Z}else{if(m.size.indexOf("pt")!=-1){i.size=Z/0.75}else{i.size=ag}}}}}i.size*=0.981;i.family="'"+i.family.replace(/(\'|\")/g,"").replace(/\s*,\s*/g,"', '")+"'";return i}function ac(i){return i.style+" "+i.variant+" "+i.weight+" "+i.size+"px "+i.family}var s={butt:"flat",round:"round"};function S(i){return s[i]||"square"}function D(i){this.m_=B();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=d*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var m="width:"+i.clientWidth+"px;height:"+i.clientHeight+"px;overflow:hidden;position:absolute";var j=i.ownerDocument.createElement("div");j.style.cssText=m;i.appendChild(j);var p=j.cloneNode(false);p.style.backgroundColor="red";p.style.filter="alpha(opacity=0)";i.appendChild(p);this.element_=j;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var q=D.prototype;q.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};q.beginPath=function(){this.currentPath_=[]};q.moveTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"moveTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.lineTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"lineTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.bezierCurveTo=function(m,j,ak,aj,ai,ag){var i=V(this,ai,ag);var ah=V(this,m,j);var Z=V(this,ak,aj);K(this,ah,Z,i)};function K(i,Z,m,j){i.currentPath_.push({type:"bezierCurveTo",cp1x:Z.x,cp1y:Z.y,cp2x:m.x,cp2y:m.y,x:j.x,y:j.y});i.currentX_=j.x;i.currentY_=j.y}q.quadraticCurveTo=function(ai,m,j,i){var ah=V(this,ai,m);var ag=V(this,j,i);var aj={x:this.currentX_+2/3*(ah.x-this.currentX_),y:this.currentY_+2/3*(ah.y-this.currentY_)};var Z={x:aj.x+(ag.x-this.currentX_)/3,y:aj.y+(ag.y-this.currentY_)/3};K(this,aj,Z,ag)};q.arc=function(al,aj,ak,ag,j,m){ak*=d;var ap=m?"at":"wa";var am=al+A(ag)*ak-f;var ao=aj+l(ag)*ak-f;var i=al+A(j)*ak-f;var an=aj+l(j)*ak-f;if(am==i&&!m){am+=0.125}var Z=V(this,al,aj);var ai=V(this,am,ao);var ah=V(this,i,an);this.currentPath_.push({type:ap,x:Z.x,y:Z.y,radius:ak,xStart:ai.x,yStart:ai.y,xEnd:ah.x,yEnd:ah.y})};q.rect=function(m,j,i,p){this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath()};q.strokeRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.stroke();this.currentPath_=Z};q.fillRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.fill();this.currentPath_=Z};q.createLinearGradient=function(j,p,i,m){var Z=new U("gradient");Z.x0_=j;Z.y0_=p;Z.x1_=i;Z.y1_=m;return Z};q.createRadialGradient=function(p,ag,m,j,Z,i){var ah=new U("gradientradial");ah.x0_=p;ah.y0_=ag;ah.r0_=m;ah.x1_=j;ah.y1_=Z;ah.r1_=i;return ah};q.drawImage=function(aq,m){var aj,ah,al,ay,ao,am,at,aA;var ak=aq.runtimeStyle.width;var ap=aq.runtimeStyle.height;aq.runtimeStyle.width="auto";aq.runtimeStyle.height="auto";var ai=aq.width;var aw=aq.height;aq.runtimeStyle.width=ak;aq.runtimeStyle.height=ap;if(arguments.length==3){aj=arguments[1];ah=arguments[2];ao=am=0;at=al=ai;aA=ay=aw}else{if(arguments.length==5){aj=arguments[1];ah=arguments[2];al=arguments[3];ay=arguments[4];ao=am=0;at=ai;aA=aw}else{if(arguments.length==9){ao=arguments[1];am=arguments[2];at=arguments[3];aA=arguments[4];aj=arguments[5];ah=arguments[6];al=arguments[7];ay=arguments[8]}else{throw Error("Invalid number of arguments")}}}var az=V(this,aj,ah);var p=at/2;var j=aA/2;var ax=[];var i=10;var ag=10;ax.push(" ','","");this.element_.insertAdjacentHTML("BeforeEnd",ax.join(""))};q.stroke=function(al){var aj=[];var Z=false;var m=10;var am=10;aj.push("ak.x){ak.x=j.x}if(ag.y==null||j.yak.y){ak.y=j.y}}}aj.push(' ">');if(!al){w(this,aj)}else{G(this,aj,ag,ak)}aj.push("");this.element_.insertAdjacentHTML("beforeEnd",aj.join(""))};function w(m,ag){var j=F(m.strokeStyle);var p=j.color;var Z=j.alpha*m.globalAlpha;var i=m.lineScale_*m.lineWidth;if(i<1){Z*=i}ag.push("')}function G(aq,ai,aK,ar){var aj=aq.fillStyle;var aB=aq.arcScaleX_;var aA=aq.arcScaleY_;var j=ar.x-aK.x;var p=ar.y-aK.y;if(aj instanceof U){var an=0;var aF={x:0,y:0};var ax=0;var am=1;if(aj.type_=="gradient"){var al=aj.x0_/aB;var m=aj.y0_/aA;var ak=aj.x1_/aB;var aM=aj.y1_/aA;var aJ=V(aq,al,m);var aI=V(aq,ak,aM);var ag=aI.x-aJ.x;var Z=aI.y-aJ.y;an=Math.atan2(ag,Z)*180/Math.PI;if(an<0){an+=360}if(an<0.000001){an=0}}else{var aJ=V(aq,aj.x0_,aj.y0_);aF={x:(aJ.x-aK.x)/j,y:(aJ.y-aK.y)/p};j/=aB*d;p/=aA*d;var aD=ab.max(j,p);ax=2*aj.r0_/aD;am=2*aj.r1_/aD-ax}var av=aj.colors_;av.sort(function(aN,i){return aN.offset-i.offset});var ap=av.length;var au=av[0].color;var at=av[ap-1].color;var az=av[0].alpha*aq.globalAlpha;var ay=av[ap-1].alpha*aq.globalAlpha;var aE=[];for(var aH=0;aH')}else{if(aj instanceof T){if(j&&p){var ah=-aK.x;var aC=-aK.y;ai.push("')}}else{var aL=F(aq.fillStyle);var aw=aL.color;var aG=aL.alpha*aq.globalAlpha;ai.push('')}}}q.fill=function(){this.stroke(true)};q.closePath=function(){this.currentPath_.push({type:"close"})};function V(j,Z,p){var i=j.m_;return{x:d*(Z*i[0][0]+p*i[1][0]+i[2][0])-f,y:d*(Z*i[0][1]+p*i[1][1]+i[2][1])-f}}q.save=function(){var i={};v(this,i);this.aStack_.push(i);this.mStack_.push(this.m_);this.m_=J(B(),this.m_)};q.restore=function(){if(this.aStack_.length){v(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function h(i){return isFinite(i[0][0])&&isFinite(i[0][1])&&isFinite(i[1][0])&&isFinite(i[1][1])&&isFinite(i[2][0])&&isFinite(i[2][1])}function aa(j,i,p){if(!h(i)){return}j.m_=i;if(p){var Z=i[0][0]*i[1][1]-i[0][1]*i[1][0];j.lineScale_=N(H(Z))}}q.translate=function(m,j){var i=[[1,0,0],[0,1,0],[m,j,1]];aa(this,J(i,this.m_),false)};q.rotate=function(j){var p=A(j);var m=l(j);var i=[[p,m,0],[-m,p,0],[0,0,1]];aa(this,J(i,this.m_),false)};q.scale=function(m,j){this.arcScaleX_*=m;this.arcScaleY_*=j;var i=[[m,0,0],[0,j,0],[0,0,1]];aa(this,J(i,this.m_),true)};q.transform=function(Z,p,ah,ag,j,i){var m=[[Z,p,0],[ah,ag,0],[j,i,1]];aa(this,J(m,this.m_),true)};q.setTransform=function(ag,Z,ai,ah,p,j){var i=[[ag,Z,0],[ai,ah,0],[p,j,1]];aa(this,i,true)};q.drawText_=function(am,ak,aj,ap,ai){var ao=this.m_,at=1000,j=0,ar=at,ah={x:0,y:0},ag=[];var i=u(E(this.font),this.element_);var p=ac(i);var au=this.element_.currentStyle;var Z=this.textAlign.toLowerCase();switch(Z){case"left":case"center":case"right":break;case"end":Z=au.direction=="ltr"?"right":"left";break;case"start":Z=au.direction=="rtl"?"right":"left";break;default:Z="left"}switch(this.textBaseline){case"hanging":case"top":ah.y=i.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":ah.y=-i.size/2.25;break}switch(Z){case"right":j=at;ar=0.05;break;case"center":j=ar=at/2;break}var aq=V(this,ak+ah.x,aj+ah.y);ag.push('');if(ai){w(this,ag)}else{G(this,ag,{x:-j,y:0},{x:ar,y:i.size})}var an=ao[0][0].toFixed(3)+","+ao[1][0].toFixed(3)+","+ao[0][1].toFixed(3)+","+ao[1][1].toFixed(3)+",0,0";var al=n(aq.x/d+1-ao[0][0])+","+n(aq.y/d-2*ao[1][0]);ag.push('','','');this.element_.insertAdjacentHTML("beforeEnd",ag.join(""))};q.fillText=function(m,i,p,j){this.drawText_(m,i,p,j,false)};q.strokeText=function(m,i,p,j){this.drawText_(m,i,p,j,true)};q.measureText=function(m){if(!this.textMeasureEl_){var i='';this.element_.insertAdjacentHTML("beforeEnd",i);this.textMeasureEl_=this.element_.lastChild}var j=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(j.createTextNode(m));return{width:this.textMeasureEl_.offsetWidth}};q.clip=function(){};q.arcTo=function(){};q.createPattern=function(j,i){return new T(j,i)};function U(i){this.type_=i;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}U.prototype.addColorStop=function(j,i){i=F(i);this.colors_.push({offset:j,color:i.color,alpha:i.alpha})};function T(j,i){Q(j);switch(i){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=i;break;default:O("SYNTAX_ERR")}this.src_=j.src;this.width_=j.width;this.height_=j.height}function O(i){throw new P(i)}function Q(i){if(!i||i.nodeType!=1||i.tagName!="IMG"){O("TYPE_MISMATCH_ERR")}if(i.readyState!="complete"){O("INVALID_STATE_ERR")}}function P(i){this.code=this[i];this.message=i+": DOM Exception "+this.code}var X=P.prototype=new Error;X.INDEX_SIZE_ERR=1;X.DOMSTRING_SIZE_ERR=2;X.HIERARCHY_REQUEST_ERR=3;X.WRONG_DOCUMENT_ERR=4;X.INVALID_CHARACTER_ERR=5;X.NO_DATA_ALLOWED_ERR=6;X.NO_MODIFICATION_ALLOWED_ERR=7;X.NOT_FOUND_ERR=8;X.NOT_SUPPORTED_ERR=9;X.INUSE_ATTRIBUTE_ERR=10;X.INVALID_STATE_ERR=11;X.SYNTAX_ERR=12;X.INVALID_MODIFICATION_ERR=13;X.NAMESPACE_ERR=14;X.INVALID_ACCESS_ERR=15;X.VALIDATION_ERR=16;X.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=e;CanvasRenderingContext2D=D;CanvasGradient=U;CanvasPattern=T;DOMException=P;G_vmlCanvasManager._version=888})()}; \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt b/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt deleted file mode 100644 index 864c6b8b..00000000 --- a/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt +++ /dev/null @@ -1,280 +0,0 @@ -Title: GPL Version 2 - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt b/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt deleted file mode 100644 index 041035d2..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt +++ /dev/null @@ -1,53 +0,0 @@ -Title: jqPlot CSS Customization - -Much of the styling of jqPlot is done by css. The jqPlot css file is, unremarkably, -jquery.jqplot.css and resides in the same directory as jqPlot itself. - -There exist some styling related javascript properties on the plot objects themselves -(like fontStyle, fontSize, etc.). These can be set with the options object at plot creation. -Generally, setting these options is *NOT* the preferred way to customize the look of the -plot. Use the css file instead. *These options are deprecated and may disappear*. The -exceptions are certain background and color options which control attributes of something -renderered on a canvas. This would be line color, grid background, etc. These must -be set by the options object. For a list of available options, see . - -Objects in the plot that can be customized by css are given a css class like ".jqplot-*". -For example, the plot title will have a ".jqplot-title" class, the axes ".jqplot-axis", etc. - -Currently assigned classes in jqPlot -are as follows: - -.jqplot-target - Styles for the plot target div. These will be cascaded down -to all plot elements according to css rules. - -.jqplot-axis - Styles for all axes - -.jqplot-xaxis - Styles applied to the primary x axis only. - -.jqplot-yaxis - Styles applied to the primary y axis only. - -.jqplot-x2axis, .jqplot-x3axis, ... - Styles applied to the 2nd, 3rd, etc. x axis only. - -.jqplot-y2axis, .jqplot-y3axis, ... - Styles applied to the 2nd, 3rd, etc.y axis only. - -.jqplot-axis-tick - Styles applied to all axis ticks - -.jqplot-xaxis-tick - Styles applied to primary x axis ticks only. - -.jqplot-x2axis-tick - Styles applied to secondary x axis ticks only. - -.jqplot-yaxis-tick - Styles applied to primary y axis ticks only. - -.jqplot-y2axis-tick - Styles applied to secondary y axis ticks only. - -table.jqplot-table-legend - Styles applied to the legend box table. - -.jqplot-title - Styles applied to the title. - -.jqplot-cursor-tooltip - Styles applied to the cursor tooltip - -.jqplot-highlighter-tooltip - Styles applied to the highlighter tooltip. - -div.jqplot-table-legend-swatch - the div element used for the colored swatch on the legend. - -Note that axes will be assigned 2 classes like: class=".jqplot-axis .jqplot-xaxis". \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt b/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt deleted file mode 100644 index d2d1e68c..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt +++ /dev/null @@ -1,276 +0,0 @@ -Title: jqPlot Options - -**This document is out of date. While the options described here should still be -relavent and valid, it has not been updated for many new options. Sorry for -this inconvenience.** - -This document describes the options available to jqPlot. These are set with the -third argument to the $.jqplot('target', data, options) function. Options are -using the following convention: - -{{{ -property: default, // notes -}}} - -This document is not complete! Not all options are shown! Also, Options marked -with ** in the notes are post 0.7.1 additions. They will be available in the next -release. Further information about the options can be found in the online API -documentation. For details on how the options relate to the API documentation, -see the in the optionsTutorial.txt file. - -{{{ -options = -{ - seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12", - "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"], // colors that will - // be assigned to the series. If there are more series than colors, colors - // will wrap around and start at the beginning again. - - stackSeries: false, // if true, will create a stack plot. - // Currently supported by line and bar graphs. - - title: '', // Title for the plot. Can also be specified as an object like: - - title: { - text: '', // title for the plot, - show: true, - }, - - axesDefaults: { - show: false, // wether or not to renderer the axis. Determined automatically. - min: null, // minimum numerical value of the axis. Determined automatically. - max: null, // maximum numverical value of the axis. Determined automatically. - pad: 1.2, // a factor multiplied by the data range on the axis to give the - // axis range so that data points don't fall on the edges of the axis. - ticks: [], // a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...] - // array of ticks to use. Computed automatically. - numberTicks: undefined, - renderer: $.jqplot.LinearAxisRenderer, // renderer to use to draw the axis, - rendererOptions: {}, // options to pass to the renderer. LinearAxisRenderer - // has no options, - tickOptions: { - mark: 'outside', // Where to put the tick mark on the axis - // 'outside', 'inside' or 'cross', - showMark: true, - showGridline: true, // wether to draw a gridline (across the whole grid) at this tick, - markSize: 4, // length the tick will extend beyond the grid in pixels. For - // 'cross', length will be added above and below the grid boundary, - show: true, // wether to show the tick (mark and label), - showLabel: true, // wether to show the text label at the tick, - formatString: '', // format string to use with the axis tick formatter - } - showTicks: true, // wether or not to show the tick labels, - showTickMarks: true, // wether or not to show the tick marks - }, - - axes: { - xaxis: { - // same options as axesDefaults - }, - yaxis: { - // same options as axesDefaults - }, - x2axis: { - // same options as axesDefaults - }, - y2axis: { - // same options as axesDefaults - } - }, - - seriesDefaults: { - show: true, // wether to render the series. - xaxis: 'xaxis', // either 'xaxis' or 'x2axis'. - yaxis: 'yaxis', // either 'yaxis' or 'y2axis'. - label: '', // label to use in the legend for this line. - color: '', // CSS color spec to use for the line. Determined automatically. - lineWidth: 2.5, // Width of the line in pixels. - shadow: true, // show shadow or not. - shadowAngle: 45, // angle (degrees) of the shadow, clockwise from x axis. - shadowOffset: 1.25, // offset from the line of the shadow. - shadowDepth: 3, // Number of strokes to make when drawing shadow. Each - // stroke offset by shadowOffset from the last. - shadowAlpha: 0.1, // Opacity of the shadow. - showLine: true, // whether to render the line segments or not. - showMarker: true, // render the data point markers or not. - fill: false, // fill under the line, - fillAndStroke: false, // **stroke a line at top of fill area. - fillColor: undefined, // **custom fill color for filled lines (default is line color). - fillAlpha: undefined, // **custom alpha to apply to fillColor. - renderer: $.jqplot.LineRenderer], // renderer used to draw the series. - rendererOptions: {}, // options passed to the renderer. LineRenderer has no options. - markerRenderer: $.jqplot.MarkerRenderer, // renderer to use to draw the data - // point markers. - markerOptions: { - show: true, // wether to show data point markers. - style: 'filledCircle', // circle, diamond, square, filledCircle. - // filledDiamond or filledSquare. - lineWidth: 2, // width of the stroke drawing the marker. - size: 9, // size (diameter, edge length, etc.) of the marker. - color: '#666666' // color of marker, set to color of line by default. - shadow: true, // wether to draw shadow on marker or not. - shadowAngle: 45, // angle of the shadow. Clockwise from x axis. - shadowOffset: 1, // offset from the line of the shadow, - shadowDepth: 3, // Number of strokes to make when drawing shadow. Each stroke - // offset by shadowOffset from the last. - shadowAlpha: 0.07 // Opacity of the shadow - } - }, - - series:[ - {Each series has same options as seriesDefaults}, - {You can override each series individually here} - ], - - legend: { - show: false, - location: 'ne', // compass direction, nw, n, ne, e, se, s, sw, w. - xoffset: 12, // pixel offset of the legend box from the x (or x2) axis. - yoffset: 12, // pixel offset of the legend box from the y (or y2) axis. - }, - - grid: { - drawGridLines: true, // wether to draw lines across the grid or not. - gridLineColor: '#cccccc' // **Color of the grid lines. - background: '#fffdf6', // CSS color spec for background color of grid. - borderColor: '#999999', // CSS color spec for border around grid. - borderWidth: 2.0, // pixel width of border around grid. - shadow: true, // draw a shadow for grid. - shadowAngle: 45, // angle of the shadow. Clockwise from x axis. - shadowOffset: 1.5, // offset from the line of the shadow. - shadowWidth: 3, // width of the stroke for the shadow. - shadowDepth: 3, // Number of strokes to make when drawing shadow. - // Each stroke offset by shadowOffset from the last. - shadowAlpha: 0.07 // Opacity of the shadow - renderer: $.jqplot.CanvasGridRenderer, // renderer to use to draw the grid. - rendererOptions: {} // options to pass to the renderer. Note, the default - // CanvasGridRenderer takes no additional options. - }, - - // Plugin and renderer options. - - // BarRenderer. - // With BarRenderer, you can specify additional options in the rendererOptions object - // on the series or on the seriesDefaults object. Note, some options are respecified - // (like shadowDepth) to override lineRenderer defaults from which BarRenderer inherits. - - seriesDefaults: { - rendererOptions: { - barPadding: 8, // number of pixels between adjacent bars in the same - // group (same category or bin). - barMargin: 10, // number of pixels between adjacent groups of bars. - barDirection: 'vertical', // vertical or horizontal. - barWidth: null, // width of the bars. null to calculate automatically. - shadowOffset: 2, // offset from the bar edge to stroke the shadow. - shadowDepth: 5, // nuber of strokes to make for the shadow. - shadowAlpha: 0.8, // transparency of the shadow. - } - }, - - // Cursor - // Options are passed to the cursor plugin through the "cursor" object at the top - // level of the options object. - - cursor: { - style: 'crosshair', // A CSS spec for the cursor type to change the - // cursor to when over plot. - show: true, - showTooltip: true, // show a tooltip showing cursor position. - followMouse: false, // wether tooltip should follow the mouse or be stationary. - tooltipLocation: 'se', // location of the tooltip either relative to the mouse - // (followMouse=true) or relative to the plot. One of - // the compass directions, n, ne, e, se, etc. - tooltipOffset: 6, // pixel offset of the tooltip from the mouse or the axes. - showTooltipGridPosition: false, // show the grid pixel coordinates of the mouse - // in the tooltip. - showTooltipUnitPosition: true, // show the coordinates in data units of the mouse - // in the tooltip. - tooltipFormatString: '%.4P', // sprintf style format string for tooltip values. - useAxesFormatters: true, // wether to use the same formatter and formatStrings - // as used by the axes, or to use the formatString - // specified on the cursor with sprintf. - tooltipAxesGroups: [], // show only specified axes groups in tooltip. Would specify like: - // [['xaxis', 'yaxis'], ['xaxis', 'y2axis']]. By default, all axes - // combinations with for the series in the plot are shown. - - }, - - // Dragable - // Dragable options are specified with the "dragable" object at the top level - // of the options object. - - dragable: { - color: undefined, // custom color to use for the dragged point and dragged line - // section. default will use a transparent variant of the line color. - constrainTo: 'none', // Constrain dragging motion to an axis: 'x', 'y', or 'none'. - }, - - // Highlighter - // Highlighter options are specified with the "highlighter" object at the top level - // of the options object. - - highlighter: { - lineWidthAdjust: 2.5, // pixels to add to the size line stroking the data point marker - // when showing highlight. Only affects non filled data point markers. - sizeAdjust: 5, // pixels to add to the size of filled markers when drawing highlight. - showTooltip: true, // show a tooltip with data point values. - tooltipLocation: 'nw', // location of tooltip: n, ne, e, se, s, sw, w, nw. - fadeTooltip: true, // use fade effect to show/hide tooltip. - tooltipFadeSpeed: "fast"// slow, def, fast, or a number of milliseconds. - tooltipOffset: 2, // pixel offset of tooltip from the highlight. - tooltipAxes: 'both', // which axis values to display in the tooltip, x, y or both. - tooltipSeparator: ', ' // separator between values in the tooltip. - useAxesFormatters: true // use the same format string and formatters as used in the axes to - // display values in the tooltip. - tooltipFormatString: '%.5P' // sprintf format string for the tooltip. only used if - // useAxesFormatters is false. Will use sprintf formatter with - // this string, not the axes formatters. - }, - - // LogAxisRenderer - // LogAxisRenderer add 2 options to the axes object. These options are specified directly on - // the axes or axesDefaults object. - - axesDefaults: { - base: 10, // the logarithmic base. - tickDistribution: 'even', // 'even' or 'power'. 'even' will produce with even visiual (pixel) - // spacing on the axis. 'power' will produce ticks spaced by - // increasing powers of the log base. - }, - - // PieRenderer - // PieRenderer accepts options from the rendererOptions object of the series or seriesDefaults object. - - seriesDefaults: { - rendererOptions: { - diameter: undefined, // diameter of pie, auto computed by default. - padding: 20, // padding between pie and neighboring legend or plot margin. - sliceMargin: 0, // gap between slices. - fill: true, // render solid (filled) slices. - shadowOffset: 2, // offset of the shadow from the chart. - shadowDepth: 5, // Number of strokes to make when drawing shadow. Each stroke - // offset by shadowOffset from the last. - shadowAlpha: 0.07 // Opacity of the shadow - } - }, - - // Trendline - // Trendline takes options on the trendline object of the series or seriesDefaults object. - - seriesDefaults: { - trendline: { - show: true, // show the trend line - color: '#666666', // CSS color spec for the trend line. - label: '', // label for the trend line. - type: 'linear', // 'linear', 'exponential' or 'exp' - shadow: true, // show the trend line shadow. - lineWidth: 1.5, // width of the trend line. - shadowAngle: 45, // angle of the shadow. Clockwise from x axis. - shadowOffset: 1.5, // offset from the line of the shadow. - shadowDepth: 3, // Number of strokes to make when drawing shadow. - // Each stroke offset by shadowOffset from the last. - shadowAlpha: 0.07 // Opacity of the shadow - } - } -} -}}} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css deleted file mode 100644 index d30bafb1..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css +++ /dev/null @@ -1,259 +0,0 @@ -/*rules for the plot target div. These will be cascaded down to all plot elements according to css rules*/ -.jqplot-target { - position: relative; - color: #666666; - font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; - font-size: 1em; -/* height: 300px; - width: 400px;*/ -} - -/*rules applied to all axes*/ -.jqplot-axis { - font-size: 0.75em; -} - -.jqplot-xaxis { - margin-top: 10px; -} - -.jqplot-x2axis { - margin-bottom: 10px; -} - -.jqplot-yaxis { - margin-right: 10px; -} - -.jqplot-y2axis, .jqplot-y3axis, .jqplot-y4axis, .jqplot-y5axis, .jqplot-y6axis, .jqplot-y7axis, .jqplot-y8axis, .jqplot-y9axis, .jqplot-yMidAxis { - margin-left: 10px; - margin-right: 10px; -} - -/*rules applied to all axis tick divs*/ -.jqplot-axis-tick, .jqplot-xaxis-tick, .jqplot-yaxis-tick, .jqplot-x2axis-tick, .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick, .jqplot-yMidAxis-tick { - position: absolute; - white-space: pre; -} - - -.jqplot-xaxis-tick { - top: 0px; - /* initial position untill tick is drawn in proper place */ - left: 15px; -/* padding-top: 10px;*/ - vertical-align: top; -} - -.jqplot-x2axis-tick { - bottom: 0px; - /* initial position untill tick is drawn in proper place */ - left: 15px; -/* padding-bottom: 10px;*/ - vertical-align: bottom; -} - -.jqplot-yaxis-tick { - right: 0px; - /* initial position untill tick is drawn in proper place */ - top: 15px; -/* padding-right: 10px;*/ - text-align: right; -} - -.jqplot-yaxis-tick.jqplot-breakTick { - right: -20px; - margin-right: 0px; - padding:1px 5px 1px 5px; -/* background-color: white;*/ - z-index: 2; - font-size: 1.5em; -} - -.jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick { - left: 0px; - /* initial position untill tick is drawn in proper place */ - top: 15px; -/* padding-left: 10px;*/ -/* padding-right: 15px;*/ - text-align: left; -} - -.jqplot-yMidAxis-tick { - text-align: center; - white-space: nowrap; -} - -.jqplot-xaxis-label { - margin-top: 10px; - font-size: 11pt; - position: absolute; -} - -.jqplot-x2axis-label { - margin-bottom: 10px; - font-size: 11pt; - position: absolute; -} - -.jqplot-yaxis-label { - margin-right: 10px; -/* text-align: center;*/ - font-size: 11pt; - position: absolute; -} - -.jqplot-yMidAxis-label { - font-size: 11pt; - position: absolute; -} - -.jqplot-y2axis-label, .jqplot-y3axis-label, .jqplot-y4axis-label, .jqplot-y5axis-label, .jqplot-y6axis-label, .jqplot-y7axis-label, .jqplot-y8axis-label, .jqplot-y9axis-label { -/* text-align: center;*/ - font-size: 11pt; - margin-left: 10px; - position: absolute; -} - -.jqplot-meterGauge-tick { - font-size: 0.75em; - color: #999999; -} - -.jqplot-meterGauge-label { - font-size: 1em; - color: #999999; -} - -table.jqplot-table-legend { - margin-top: 12px; - margin-bottom: 12px; - margin-left: 12px; - margin-right: 12px; -} - -table.jqplot-table-legend, table.jqplot-cursor-legend { - background-color: rgba(255,255,255,0.6); - border: 1px solid #cccccc; - position: absolute; - font-size: 0.75em; -} - -td.jqplot-table-legend { - vertical-align:middle; -} - -/* -These rules could be used instead of assigning -element styles and relying on js object properties. -*/ - -/* -td.jqplot-table-legend-swatch { - padding-top: 0.5em; - text-align: center; -} - -tr.jqplot-table-legend:first td.jqplot-table-legend-swatch { - padding-top: 0px; -} -*/ - -td.jqplot-seriesToggle:hover, td.jqplot-seriesToggle:active { - cursor: pointer; -} - -.jqplot-table-legend .jqplot-series-hidden { - text-decoration: line-through; -} - -div.jqplot-table-legend-swatch-outline { - border: 1px solid #cccccc; - padding:1px; -} - -div.jqplot-table-legend-swatch { - width:0px; - height:0px; - border-top-width: 5px; - border-bottom-width: 5px; - border-left-width: 6px; - border-right-width: 6px; - border-top-style: solid; - border-bottom-style: solid; - border-left-style: solid; - border-right-style: solid; -} - -.jqplot-title { - top: 0px; - left: 0px; - padding-bottom: 0.5em; - font-size: 1.2em; -} - -table.jqplot-cursor-tooltip { - border: 1px solid #cccccc; - font-size: 0.75em; -} - - -.jqplot-cursor-tooltip { - border: 1px solid #cccccc; - font-size: 0.75em; - white-space: nowrap; - background: rgba(208,208,208,0.5); - padding: 1px; -} - -.jqplot-highlighter-tooltip, .jqplot-canvasOverlay-tooltip { - border: 1px solid #cccccc; - font-size: 0.75em; - white-space: nowrap; - background: rgba(208,208,208,0.5); - padding: 1px; -} - -.jqplot-point-label { - font-size: 0.75em; - z-index: 2; -} - -td.jqplot-cursor-legend-swatch { - vertical-align: middle; - text-align: center; -} - -div.jqplot-cursor-legend-swatch { - width: 1.2em; - height: 0.7em; -} - -.jqplot-error { -/* Styles added to the plot target container when there is an error go here.*/ - text-align: center; -} - -.jqplot-error-message { -/* Styling of the custom error message div goes here.*/ - position: relative; - top: 46%; - display: inline-block; -} - -div.jqplot-bubble-label { - font-size: 0.8em; -/* background: rgba(90%, 90%, 90%, 0.15);*/ - padding-left: 2px; - padding-right: 2px; - color: rgb(20%, 20%, 20%); -} - -div.jqplot-bubble-label.jqplot-bubble-label-highlight { - background: rgba(90%, 90%, 90%, 0.7); -} - -div.jqplot-noData-container { - text-align: center; - background-color: rgba(96%, 96%, 96%, 0.3); -} diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js deleted file mode 100644 index c77c353d..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js +++ /dev/null @@ -1,11381 +0,0 @@ -/** - * Title: jqPlot Charts - * - * Pure JavaScript plotting plugin for jQuery. - * - * About: Version - * - * version: 1.0.4 - * revision: 1121 - * - * About: Copyright & License - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * See and contained within this distribution for further information. - * - * The author would appreciate an email letting him know of any substantial - * use of jqPlot. You can reach the author at: chris at jqplot dot com - * or see http://www.jqplot.com/info.php. This is, of course, not required. - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php. - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * - * About: Introduction - * - * jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.2 is included in the distribution. - * To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and optionally - * the excanvas script for IE support in your web page: - * - * > - * > - * > - * > - * - * jqPlot can be customized by overriding the defaults of any of the objects which make - * up the plot. The general usage of jqplot is: - * - * > chart = $.jqplot('targetElemId', [dataArray,...], {optionsObject}); - * - * The options available to jqplot are detailed in in the jqPlotOptions.txt file. - * - * An actual call to $.jqplot() may look like the - * examples below: - * - * > chart = $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]); - * - * or - * - * > dataArray = [34,12,43,55,77]; - * > chart = $.jqplot('targetElemId', [dataArray, ...], {title:'My Plot', axes:{yaxis:{min:20, max:100}}}); - * - * For more inforrmation, see . - * - * About: Usage - * - * See - * - * About: Available Options - * - * See for a list of options available thorugh the options object (not complete yet!) - * - * About: Options Usage - * - * See - * - * About: Changes - * - * See - * - */ - -(function($) { - // make sure undefined is undefined - var undefined; - - $.fn.emptyForce = function() { - for ( var i = 0, elem; (elem = $(this)[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - $.cleanData( elem.getElementsByTagName("*") ); - } - - // Remove any remaining nodes - if ($.jqplot.use_excanvas) { - elem.outerHTML = ""; - } - else { - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - } - - elem = null; - } - - return $(this); - }; - - $.fn.removeChildForce = function(parent) { - while ( parent.firstChild ) { - this.removeChildForce( parent.firstChild ); - parent.removeChild( parent.firstChild ); - } - }; - - $.fn.jqplot = function() { - var datas = []; - var options = []; - // see how many data arrays we have - for (var i=0, l=arguments.length; i'+msg+''); - $('#'+target).addClass('jqplot-error'); - document.getElementById(target).style.background = $.jqplot.config.errorBackground; - document.getElementById(target).style.border = $.jqplot.config.errorBorder; - document.getElementById(target).style.fontFamily = $.jqplot.config.errorFontFamily; - document.getElementById(target).style.fontSize = $.jqplot.config.errorFontSize; - document.getElementById(target).style.fontStyle = $.jqplot.config.errorFontStyle; - document.getElementById(target).style.fontWeight = $.jqplot.config.errorFontWeight; - } - } - else { - plot.init(target, _data, _options); - plot.draw(); - plot.themeEngine.init.call(plot); - return plot; - } - }; - - $.jqplot.version = "1.0.4"; - $.jqplot.revision = "1121"; - - $.jqplot.targetCounter = 1; - - // canvas manager to reuse canvases on the plot. - // Should help solve problem of canvases not being freed and - // problem of waiting forever for firefox to decide to free memory. - $.jqplot.CanvasManager = function() { - // canvases are managed globally so that they can be reused - // across plots after they have been freed - if (typeof $.jqplot.CanvasManager.canvases == 'undefined') { - $.jqplot.CanvasManager.canvases = []; - $.jqplot.CanvasManager.free = []; - } - - var myCanvases = []; - - this.getCanvas = function() { - var canvas; - var makeNew = true; - - if (!$.jqplot.use_excanvas) { - for (var i = 0, l = $.jqplot.CanvasManager.canvases.length; i < l; i++) { - if ($.jqplot.CanvasManager.free[i] === true) { - makeNew = false; - canvas = $.jqplot.CanvasManager.canvases[i]; - // $(canvas).removeClass('jqplot-canvasManager-free').addClass('jqplot-canvasManager-inuse'); - $.jqplot.CanvasManager.free[i] = false; - myCanvases.push(i); - break; - } - } - } - - if (makeNew) { - canvas = document.createElement('canvas'); - myCanvases.push($.jqplot.CanvasManager.canvases.length); - $.jqplot.CanvasManager.canvases.push(canvas); - $.jqplot.CanvasManager.free.push(false); - } - - return canvas; - }; - - // this method has to be used after settings the dimesions - // on the element returned by getCanvas() - this.initCanvas = function(canvas) { - if ($.jqplot.use_excanvas) { - return window.G_vmlCanvasManager.initElement(canvas); - } - return canvas; - }; - - this.freeAllCanvases = function() { - for (var i = 0, l=myCanvases.length; i < l; i++) { - this.freeCanvas(myCanvases[i]); - } - myCanvases = []; - }; - - this.freeCanvas = function(idx) { - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - // excanvas can't be reused, but properly unset - window.G_vmlCanvasManager.uninitElement($.jqplot.CanvasManager.canvases[idx]); - $.jqplot.CanvasManager.canvases[idx] = null; - } - else { - var canvas = $.jqplot.CanvasManager.canvases[idx]; - canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height); - $(canvas).unbind().removeAttr('class').removeAttr('style'); - // Style attributes seemed to be still hanging around. wierd. Some ticks - // still retained a left: 0px attribute after reusing a canvas. - $(canvas).css({left: '', top: '', position: ''}); - // setting size to 0 may save memory of unused canvases? - canvas.width = 0; - canvas.height = 0; - $.jqplot.CanvasManager.free[idx] = true; - } - }; - - }; - - - // Convienence function that won't hang IE or FF without FireBug. - $.jqplot.log = function() { - if (window.console) { - window.console.log.apply(window.console, arguments); - } - }; - - $.jqplot.config = { - addDomReference: false, - enablePlugins:false, - defaultHeight:300, - defaultWidth:400, - UTCAdjust:false, - timezoneOffset: new Date(new Date().getTimezoneOffset() * 60000), - errorMessage: '', - errorBackground: '', - errorBorder: '', - errorFontFamily: '', - errorFontSize: '', - errorFontStyle: '', - errorFontWeight: '', - catchErrors: false, - defaultTickFormatString: "%.1f", - defaultColors: [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], - defaultNegativeColors: [ "#498991", "#C08840", "#9F9274", "#546D61", "#646C4A", "#6F6621", "#6E3F5F", "#4F64B0", "#A89050", "#C45923", "#187399", "#945381", "#959E5C", "#C7AF7B", "#478396", "#907294"], - dashLength: 4, - gapLength: 4, - dotGapLength: 2.5, - srcLocation: 'jqplot/src/', - pluginLocation: 'jqplot/src/plugins/' - }; - - - $.jqplot.arrayMax = function( array ){ - return Math.max.apply( Math, array ); - }; - - $.jqplot.arrayMin = function( array ){ - return Math.min.apply( Math, array ); - }; - - $.jqplot.enablePlugins = $.jqplot.config.enablePlugins; - - // canvas related tests taken from modernizer: - // Copyright (c) 2009 - 2010 Faruk Ates. - // http://www.modernizr.com - - $.jqplot.support_canvas = function() { - if (typeof $.jqplot.support_canvas.result == 'undefined') { - $.jqplot.support_canvas.result = !!document.createElement('canvas').getContext; - } - return $.jqplot.support_canvas.result; - }; - - $.jqplot.support_canvas_text = function() { - if (typeof $.jqplot.support_canvas_text.result == 'undefined') { - if (window.G_vmlCanvasManager !== undefined && window.G_vmlCanvasManager._version > 887) { - $.jqplot.support_canvas_text.result = true; - } - else { - $.jqplot.support_canvas_text.result = !!(document.createElement('canvas').getContext && typeof document.createElement('canvas').getContext('2d').fillText == 'function'); - } - - } - return $.jqplot.support_canvas_text.result; - }; - - $.jqplot.use_excanvas = ($.browser.msie && !$.jqplot.support_canvas()) ? true : false; - - /** - * - * Hooks: jqPlot Pugin Hooks - * - * $.jqplot.preInitHooks - called before initialization. - * $.jqplot.postInitHooks - called after initialization. - * $.jqplot.preParseOptionsHooks - called before user options are parsed. - * $.jqplot.postParseOptionsHooks - called after user options are parsed. - * $.jqplot.preDrawHooks - called before plot draw. - * $.jqplot.postDrawHooks - called after plot draw. - * $.jqplot.preDrawSeriesHooks - called before each series is drawn. - * $.jqplot.postDrawSeriesHooks - called after each series is drawn. - * $.jqplot.preDrawLegendHooks - called before the legend is drawn. - * $.jqplot.addLegendRowHooks - called at the end of legend draw, so plugins - * can add rows to the legend table. - * $.jqplot.preSeriesInitHooks - called before series is initialized. - * $.jqplot.postSeriesInitHooks - called after series is initialized. - * $.jqplot.preParseSeriesOptionsHooks - called before series related options - * are parsed. - * $.jqplot.postParseSeriesOptionsHooks - called after series related options - * are parsed. - * $.jqplot.eventListenerHooks - called at the end of plot drawing, binds - * listeners to the event canvas which lays on top of the grid area. - * $.jqplot.preDrawSeriesShadowHooks - called before series shadows are drawn. - * $.jqplot.postDrawSeriesShadowHooks - called after series shadows are drawn. - * - */ - - $.jqplot.preInitHooks = []; - $.jqplot.postInitHooks = []; - $.jqplot.preParseOptionsHooks = []; - $.jqplot.postParseOptionsHooks = []; - $.jqplot.preDrawHooks = []; - $.jqplot.postDrawHooks = []; - $.jqplot.preDrawSeriesHooks = []; - $.jqplot.postDrawSeriesHooks = []; - $.jqplot.preDrawLegendHooks = []; - $.jqplot.addLegendRowHooks = []; - $.jqplot.preSeriesInitHooks = []; - $.jqplot.postSeriesInitHooks = []; - $.jqplot.preParseSeriesOptionsHooks = []; - $.jqplot.postParseSeriesOptionsHooks = []; - $.jqplot.eventListenerHooks = []; - $.jqplot.preDrawSeriesShadowHooks = []; - $.jqplot.postDrawSeriesShadowHooks = []; - - // A superclass holding some common properties and methods. - $.jqplot.ElemContainer = function() { - this._elem; - this._plotWidth; - this._plotHeight; - this._plotDimensions = {height:null, width:null}; - }; - - $.jqplot.ElemContainer.prototype.createElement = function(el, offsets, clss, cssopts, attrib) { - this._offsets = offsets; - var klass = clss || 'jqplot'; - var elem = document.createElement(el); - this._elem = $(elem); - this._elem.addClass(klass); - this._elem.css(cssopts); - this._elem.attr(attrib); - // avoid memory leak; - elem = null; - return this._elem; - }; - - $.jqplot.ElemContainer.prototype.getWidth = function() { - if (this._elem) { - return this._elem.outerWidth(true); - } - else { - return null; - } - }; - - $.jqplot.ElemContainer.prototype.getHeight = function() { - if (this._elem) { - return this._elem.outerHeight(true); - } - else { - return null; - } - }; - - $.jqplot.ElemContainer.prototype.getPosition = function() { - if (this._elem) { - return this._elem.position(); - } - else { - return {top:null, left:null, bottom:null, right:null}; - } - }; - - $.jqplot.ElemContainer.prototype.getTop = function() { - return this.getPosition().top; - }; - - $.jqplot.ElemContainer.prototype.getLeft = function() { - return this.getPosition().left; - }; - - $.jqplot.ElemContainer.prototype.getBottom = function() { - return this._elem.css('bottom'); - }; - - $.jqplot.ElemContainer.prototype.getRight = function() { - return this._elem.css('right'); - }; - - - /** - * Class: Axis - * An individual axis object. Cannot be instantiated directly, but created - * by the Plot oject. Axis properties can be set or overriden by the - * options passed in from the user. - * - */ - function Axis(name) { - $.jqplot.ElemContainer.call(this); - // Group: Properties - // - // Axes options are specified within an axes object at the top level of the - // plot options like so: - // > { - // > axes: { - // > xaxis: {min: 5}, - // > yaxis: {min: 2, max: 8, numberTicks:4}, - // > x2axis: {pad: 1.5}, - // > y2axis: {ticks:[22, 44, 66, 88]} - // > } - // > } - // There are 2 x axes, 'xaxis' and 'x2axis', and - // 9 yaxes, 'yaxis', 'y2axis'. 'y3axis', ... Any or all of which may be specified. - this.name = name; - this._series = []; - // prop: show - // Wether to display the axis on the graph. - this.show = false; - // prop: tickRenderer - // A class of a rendering engine for creating the ticks labels displayed on the plot, - // See <$.jqplot.AxisTickRenderer>. - this.tickRenderer = $.jqplot.AxisTickRenderer; - // prop: tickOptions - // Options that will be passed to the tickRenderer, see <$.jqplot.AxisTickRenderer> options. - this.tickOptions = {}; - // prop: labelRenderer - // A class of a rendering engine for creating an axis label. - this.labelRenderer = $.jqplot.AxisLabelRenderer; - // prop: labelOptions - // Options passed to the label renderer. - this.labelOptions = {}; - // prop: label - // Label for the axis - this.label = null; - // prop: showLabel - // true to show the axis label. - this.showLabel = true; - // prop: min - // minimum value of the axis (in data units, not pixels). - this.min = null; - // prop: max - // maximum value of the axis (in data units, not pixels). - this.max = null; - // prop: autoscale - // DEPRECATED - // the default scaling algorithm produces superior results. - this.autoscale = false; - // prop: pad - // Padding to extend the range above and below the data bounds. - // The data range is multiplied by this factor to determine minimum and maximum axis bounds. - // A value of 0 will be interpreted to mean no padding, and pad will be set to 1.0. - this.pad = 1.2; - // prop: padMax - // Padding to extend the range above data bounds. - // The top of the data range is multiplied by this factor to determine maximum axis bounds. - // A value of 0 will be interpreted to mean no padding, and padMax will be set to 1.0. - this.padMax = null; - // prop: padMin - // Padding to extend the range below data bounds. - // The bottom of the data range is multiplied by this factor to determine minimum axis bounds. - // A value of 0 will be interpreted to mean no padding, and padMin will be set to 1.0. - this.padMin = null; - // prop: ticks - // 1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. - // If no label is specified, the value is formatted into an appropriate label. - this.ticks = []; - // prop: numberTicks - // Desired number of ticks. Default is to compute automatically. - this.numberTicks; - // prop: tickInterval - // number of units between ticks. Mutually exclusive with numberTicks. - this.tickInterval; - // prop: renderer - // A class of a rendering engine that handles tick generation, - // scaling input data to pixel grid units and drawing the axis element. - this.renderer = $.jqplot.LinearAxisRenderer; - // prop: rendererOptions - // renderer specific options. See <$.jqplot.LinearAxisRenderer> for options. - this.rendererOptions = {}; - // prop: showTicks - // Wether to show the ticks (both marks and labels) or not. - // Will not override showMark and showLabel options if specified on the ticks themselves. - this.showTicks = true; - // prop: showTickMarks - // Wether to show the tick marks (line crossing grid) or not. - // Overridden by showTicks and showMark option of tick itself. - this.showTickMarks = true; - // prop: showMinorTicks - // Wether or not to show minor ticks. This is renderer dependent. - this.showMinorTicks = true; - // prop: drawMajorGridlines - // True to draw gridlines for major axis ticks. - this.drawMajorGridlines = true; - // prop: drawMinorGridlines - // True to draw gridlines for minor ticks. - this.drawMinorGridlines = false; - // prop: drawMajorTickMarks - // True to draw tick marks for major axis ticks. - this.drawMajorTickMarks = true; - // prop: drawMinorTickMarks - // True to draw tick marks for minor ticks. This is renderer dependent. - this.drawMinorTickMarks = true; - // prop: useSeriesColor - // Use the color of the first series associated with this axis for the - // tick marks and line bordering this axis. - this.useSeriesColor = false; - // prop: borderWidth - // width of line stroked at the border of the axis. Defaults - // to the width of the grid boarder. - this.borderWidth = null; - // prop: borderColor - // color of the border adjacent to the axis. Defaults to grid border color. - this.borderColor = null; - // prop: scaleToHiddenSeries - // True to include hidden series when computing axes bounds and scaling. - this.scaleToHiddenSeries = false; - // minimum and maximum values on the axis. - this._dataBounds = {min:null, max:null}; - // statistics (min, max, mean) as well as actual data intervals for each series attached to axis. - // holds collection of {intervals:[], min:, max:, mean: } objects for each series on axis. - this._intervalStats = []; - // pixel position from the top left of the min value and max value on the axis. - this._offsets = {min:null, max:null}; - this._ticks=[]; - this._label = null; - // prop: syncTicks - // true to try and synchronize tick spacing across multiple axes so that ticks and - // grid lines line up. This has an impact on autoscaling algorithm, however. - // In general, autoscaling an individual axis will work better if it does not - // have to sync ticks. - this.syncTicks = null; - // prop: tickSpacing - // Approximate pixel spacing between ticks on graph. Used during autoscaling. - // This number will be an upper bound, actual spacing will be less. - this.tickSpacing = 75; - // Properties to hold the original values for min, max, ticks, tickInterval and numberTicks - // so they can be restored if altered by plugins. - this._min = null; - this._max = null; - this._tickInterval = null; - this._numberTicks = null; - this.__ticks = null; - // hold original user options. - this._options = {}; - } - - Axis.prototype = new $.jqplot.ElemContainer(); - Axis.prototype.constructor = Axis; - - Axis.prototype.init = function() { - if ($.isFunction(this.renderer)) { - this.renderer = new this.renderer(); - } - // set the axis name - this.tickOptions.axis = this.name; - // if showMark or showLabel tick options not specified, use value of axis option. - // showTicks overrides showTickMarks. - if (this.tickOptions.showMark == null) { - this.tickOptions.showMark = this.showTicks; - } - if (this.tickOptions.showMark == null) { - this.tickOptions.showMark = this.showTickMarks; - } - if (this.tickOptions.showLabel == null) { - this.tickOptions.showLabel = this.showTicks; - } - - if (this.label == null || this.label == '') { - this.showLabel = false; - } - else { - this.labelOptions.label = this.label; - } - if (this.showLabel == false) { - this.labelOptions.show = false; - } - // set the default padMax, padMin if not specified - // special check, if no padding desired, padding - // should be set to 1.0 - if (this.pad == 0) { - this.pad = 1.0; - } - if (this.padMax == 0) { - this.padMax = 1.0; - } - if (this.padMin == 0) { - this.padMin = 1.0; - } - if (this.padMax == null) { - this.padMax = (this.pad-1)/2 + 1; - } - if (this.padMin == null) { - this.padMin = (this.pad-1)/2 + 1; - } - // now that padMin and padMax are correctly set, reset pad in case user has supplied - // padMin and/or padMax - this.pad = this.padMax + this.padMin - 1; - if (this.min != null || this.max != null) { - this.autoscale = false; - } - // if not set, sync ticks for y axes but not x by default. - if (this.syncTicks == null && this.name.indexOf('y') > -1) { - this.syncTicks = true; - } - else if (this.syncTicks == null){ - this.syncTicks = false; - } - this.renderer.init.call(this, this.rendererOptions); - - }; - - Axis.prototype.draw = function(ctx, plot) { - // Memory Leaks patch - if (this.__ticks) { - this.__ticks = null; - } - - return this.renderer.draw.call(this, ctx, plot); - - }; - - Axis.prototype.set = function() { - this.renderer.set.call(this); - }; - - Axis.prototype.pack = function(pos, offsets) { - if (this.show) { - this.renderer.pack.call(this, pos, offsets); - } - // these properties should all be available now. - if (this._min == null) { - this._min = this.min; - this._max = this.max; - this._tickInterval = this.tickInterval; - this._numberTicks = this.numberTicks; - this.__ticks = this._ticks; - } - }; - - // reset the axis back to original values if it has been scaled, zoomed, etc. - Axis.prototype.reset = function() { - this.renderer.reset.call(this); - }; - - Axis.prototype.resetScale = function(opts) { - $.extend(true, this, {min: null, max: null, numberTicks: null, tickInterval: null, _ticks: [], ticks: []}, opts); - this.resetDataBounds(); - }; - - Axis.prototype.resetDataBounds = function() { - // Go through all the series attached to this axis and find - // the min/max bounds for this axis. - var db = this._dataBounds; - db.min = null; - db.max = null; - var l, s, d; - // check for when to force min 0 on bar series plots. - var doforce = (this.show) ? true : false; - for (var i=0; i db.max) || db.max == null) { - db.max = d[j][0]; - } - } - else { - if ((d[j][minyidx] != null && d[j][minyidx] < db.min) || db.min == null) { - db.min = d[j][minyidx]; - } - if ((d[j][maxyidx] != null && d[j][maxyidx] > db.max) || db.max == null) { - db.max = d[j][maxyidx]; - } - } - } - - // Hack to not pad out bottom of bar plots unless user has specified a padding. - // every series will have a chance to set doforce to false. once it is set to - // false, it cannot be reset to true. - // If any series attached to axis is not a bar, wont force 0. - if (doforce && s.renderer.constructor !== $.jqplot.BarRenderer) { - doforce = false; - } - - else if (doforce && this._options.hasOwnProperty('forceTickAt0') && this._options.forceTickAt0 == false) { - doforce = false; - } - - else if (doforce && s.renderer.constructor === $.jqplot.BarRenderer) { - if (s.barDirection == 'vertical' && this.name != 'xaxis' && this.name != 'x2axis') { - if (this._options.pad != null || this._options.padMin != null) { - doforce = false; - } - } - - else if (s.barDirection == 'horizontal' && (this.name == 'xaxis' || this.name == 'x2axis')) { - if (this._options.pad != null || this._options.padMin != null) { - doforce = false; - } - } - - } - } - } - - if (doforce && this.renderer.constructor === $.jqplot.LinearAxisRenderer && db.min >= 0) { - this.padMin = 1.0; - this.forceTickAt0 = true; - } - }; - - /** - * Class: Legend - * Legend object. Cannot be instantiated directly, but created - * by the Plot oject. Legend properties can be set or overriden by the - * options passed in from the user. - */ - function Legend(options) { - $.jqplot.ElemContainer.call(this); - // Group: Properties - - // prop: show - // Wether to display the legend on the graph. - this.show = false; - // prop: location - // Placement of the legend. one of the compass directions: nw, n, ne, e, se, s, sw, w - this.location = 'ne'; - // prop: labels - // Array of labels to use. By default the renderer will look for labels on the series. - // Labels specified in this array will override labels specified on the series. - this.labels = []; - // prop: showLabels - // true to show the label text on the legend. - this.showLabels = true; - // prop: showSwatch - // true to show the color swatches on the legend. - this.showSwatches = true; - // prop: placement - // "insideGrid" places legend inside the grid area of the plot. - // "outsideGrid" places the legend outside the grid but inside the plot container, - // shrinking the grid to accomodate the legend. - // "inside" synonym for "insideGrid", - // "outside" places the legend ouside the grid area, but does not shrink the grid which - // can cause the legend to overflow the plot container. - this.placement = "insideGrid"; - // prop: xoffset - // DEPRECATED. Set the margins on the legend using the marginTop, marginLeft, etc. - // properties or via CSS margin styling of the .jqplot-table-legend class. - this.xoffset = 0; - // prop: yoffset - // DEPRECATED. Set the margins on the legend using the marginTop, marginLeft, etc. - // properties or via CSS margin styling of the .jqplot-table-legend class. - this.yoffset = 0; - // prop: border - // css spec for the border around the legend box. - this.border; - // prop: background - // css spec for the background of the legend box. - this.background; - // prop: textColor - // css color spec for the legend text. - this.textColor; - // prop: fontFamily - // css font-family spec for the legend text. - this.fontFamily; - // prop: fontSize - // css font-size spec for the legend text. - this.fontSize ; - // prop: rowSpacing - // css padding-top spec for the rows in the legend. - this.rowSpacing = '0.5em'; - // renderer - // A class that will create a DOM object for the legend, - // see <$.jqplot.TableLegendRenderer>. - this.renderer = $.jqplot.TableLegendRenderer; - // prop: rendererOptions - // renderer specific options passed to the renderer. - this.rendererOptions = {}; - // prop: predraw - // Wether to draw the legend before the series or not. - // Used with series specific legend renderers for pie, donut, mekko charts, etc. - this.preDraw = false; - // prop: marginTop - // CSS margin for the legend DOM element. This will set an element - // CSS style for the margin which will override any style sheet setting. - // The default will be taken from the stylesheet. - this.marginTop = null; - // prop: marginRight - // CSS margin for the legend DOM element. This will set an element - // CSS style for the margin which will override any style sheet setting. - // The default will be taken from the stylesheet. - this.marginRight = null; - // prop: marginBottom - // CSS margin for the legend DOM element. This will set an element - // CSS style for the margin which will override any style sheet setting. - // The default will be taken from the stylesheet. - this.marginBottom = null; - // prop: marginLeft - // CSS margin for the legend DOM element. This will set an element - // CSS style for the margin which will override any style sheet setting. - // The default will be taken from the stylesheet. - this.marginLeft = null; - // prop: escapeHtml - // True to escape special characters with their html entity equivalents - // in legend text. "<" becomes < and so on, so html tags are not rendered. - this.escapeHtml = false; - this._series = []; - - $.extend(true, this, options); - } - - Legend.prototype = new $.jqplot.ElemContainer(); - Legend.prototype.constructor = Legend; - - Legend.prototype.setOptions = function(options) { - $.extend(true, this, options); - - // Try to emulate deprecated behaviour - // if user has specified xoffset or yoffset, copy these to - // the margin properties. - - if (this.placement == 'inside') { - this.placement = 'insideGrid'; - } - - if (this.xoffset >0) { - if (this.placement == 'insideGrid') { - switch (this.location) { - case 'nw': - case 'w': - case 'sw': - if (this.marginLeft == null) { - this.marginLeft = this.xoffset + 'px'; - } - this.marginRight = '0px'; - break; - case 'ne': - case 'e': - case 'se': - default: - if (this.marginRight == null) { - this.marginRight = this.xoffset + 'px'; - } - this.marginLeft = '0px'; - break; - } - } - else if (this.placement == 'outside') { - switch (this.location) { - case 'nw': - case 'w': - case 'sw': - if (this.marginRight == null) { - this.marginRight = this.xoffset + 'px'; - } - this.marginLeft = '0px'; - break; - case 'ne': - case 'e': - case 'se': - default: - if (this.marginLeft == null) { - this.marginLeft = this.xoffset + 'px'; - } - this.marginRight = '0px'; - break; - } - } - this.xoffset = 0; - } - - if (this.yoffset >0) { - if (this.placement == 'outside') { - switch (this.location) { - case 'sw': - case 's': - case 'se': - if (this.marginTop == null) { - this.marginTop = this.yoffset + 'px'; - } - this.marginBottom = '0px'; - break; - case 'ne': - case 'n': - case 'nw': - default: - if (this.marginBottom == null) { - this.marginBottom = this.yoffset + 'px'; - } - this.marginTop = '0px'; - break; - } - } - else if (this.placement == 'insideGrid') { - switch (this.location) { - case 'sw': - case 's': - case 'se': - if (this.marginBottom == null) { - this.marginBottom = this.yoffset + 'px'; - } - this.marginTop = '0px'; - break; - case 'ne': - case 'n': - case 'nw': - default: - if (this.marginTop == null) { - this.marginTop = this.yoffset + 'px'; - } - this.marginBottom = '0px'; - break; - } - } - this.yoffset = 0; - } - - // TO-DO: - // Handle case where offsets are < 0. - // - }; - - Legend.prototype.init = function() { - if ($.isFunction(this.renderer)) { - this.renderer = new this.renderer(); - } - this.renderer.init.call(this, this.rendererOptions); - }; - - Legend.prototype.draw = function(offsets, plot) { - for (var i=0; i<$.jqplot.preDrawLegendHooks.length; i++){ - $.jqplot.preDrawLegendHooks[i].call(this, offsets); - } - return this.renderer.draw.call(this, offsets, plot); - }; - - Legend.prototype.pack = function(offsets) { - this.renderer.pack.call(this, offsets); - }; - - /** - * Class: Title - * Plot Title object. Cannot be instantiated directly, but created - * by the Plot oject. Title properties can be set or overriden by the - * options passed in from the user. - * - * Parameters: - * text - text of the title. - */ - function Title(text) { - $.jqplot.ElemContainer.call(this); - // Group: Properties - - // prop: text - // text of the title; - this.text = text; - // prop: show - // wether or not to show the title - this.show = true; - // prop: fontFamily - // css font-family spec for the text. - this.fontFamily; - // prop: fontSize - // css font-size spec for the text. - this.fontSize ; - // prop: textAlign - // css text-align spec for the text. - this.textAlign; - // prop: textColor - // css color spec for the text. - this.textColor; - // prop: renderer - // A class for creating a DOM element for the title, - // see <$.jqplot.DivTitleRenderer>. - this.renderer = $.jqplot.DivTitleRenderer; - // prop: rendererOptions - // renderer specific options passed to the renderer. - this.rendererOptions = {}; - // prop: escapeHtml - // True to escape special characters with their html entity equivalents - // in title text. "<" becomes < and so on, so html tags are not rendered. - this.escapeHtml = false; - } - - Title.prototype = new $.jqplot.ElemContainer(); - Title.prototype.constructor = Title; - - Title.prototype.init = function() { - if ($.isFunction(this.renderer)) { - this.renderer = new this.renderer(); - } - this.renderer.init.call(this, this.rendererOptions); - }; - - Title.prototype.draw = function(width) { - return this.renderer.draw.call(this, width); - }; - - Title.prototype.pack = function() { - this.renderer.pack.call(this); - }; - - - /** - * Class: Series - * An individual data series object. Cannot be instantiated directly, but created - * by the Plot oject. Series properties can be set or overriden by the - * options passed in from the user. - */ - function Series(options) { - options = options || {}; - $.jqplot.ElemContainer.call(this); - // Group: Properties - // Properties will be assigned from a series array at the top level of the - // options. If you had two series and wanted to change the color and line - // width of the first and set the second to use the secondary y axis with - // no shadow and supply custom labels for each: - // > { - // > series:[ - // > {color: '#ff4466', lineWidth: 5, label:'good line'}, - // > {yaxis: 'y2axis', shadow: false, label:'bad line'} - // > ] - // > } - - // prop: show - // wether or not to draw the series. - this.show = true; - // prop: xaxis - // which x axis to use with this series, either 'xaxis' or 'x2axis'. - this.xaxis = 'xaxis'; - this._xaxis; - // prop: yaxis - // which y axis to use with this series, either 'yaxis' or 'y2axis'. - this.yaxis = 'yaxis'; - this._yaxis; - this.gridBorderWidth = 2.0; - // prop: renderer - // A class of a renderer which will draw the series, - // see <$.jqplot.LineRenderer>. - this.renderer = $.jqplot.LineRenderer; - // prop: rendererOptions - // Options to pass on to the renderer. - this.rendererOptions = {}; - this.data = []; - this.gridData = []; - // prop: label - // Line label to use in the legend. - this.label = ''; - // prop: showLabel - // true to show label for this series in the legend. - this.showLabel = true; - // prop: color - // css color spec for the series - this.color; - // prop: negativeColor - // css color spec used for filled (area) plots that are filled to zero and - // the "useNegativeColors" option is true. - this.negativeColor; - // prop: lineWidth - // width of the line in pixels. May have different meanings depending on renderer. - this.lineWidth = 2.5; - // prop: lineJoin - // Canvas lineJoin style between segments of series. - this.lineJoin = 'round'; - // prop: lineCap - // Canvas lineCap style at ends of line. - this.lineCap = 'round'; - // prop: linePattern - // line pattern 'dashed', 'dotted', 'solid', some combination - // of '-' and '.' characters such as '.-.' or a numerical array like - // [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, - // [1, 10, 20, 10] to draw a dot-dash line, and so on. - this.linePattern = 'solid'; - this.shadow = true; - // prop: shadowAngle - // Shadow angle in degrees - this.shadowAngle = 45; - // prop: shadowOffset - // Shadow offset from line in pixels - this.shadowOffset = 1.25; - // prop: shadowDepth - // Number of times shadow is stroked, each stroke offset shadowOffset from the last. - this.shadowDepth = 3; - // prop: shadowAlpha - // Alpha channel transparency of shadow. 0 = transparent. - this.shadowAlpha = '0.1'; - // prop: breakOnNull - // Wether line segments should be be broken at null value. - // False will join point on either side of line. - this.breakOnNull = false; - // prop: markerRenderer - // A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points, - // see <$.jqplot.MarkerRenderer>. - this.markerRenderer = $.jqplot.MarkerRenderer; - // prop: markerOptions - // renderer specific options to pass to the markerRenderer, - // see <$.jqplot.MarkerRenderer>. - this.markerOptions = {}; - // prop: showLine - // wether to actually draw the line or not. Series will still be renderered, even if no line is drawn. - this.showLine = true; - // prop: showMarker - // wether or not to show the markers at the data points. - this.showMarker = true; - // prop: index - // 0 based index of this series in the plot series array. - this.index; - // prop: fill - // true or false, wether to fill under lines or in bars. - // May not be implemented in all renderers. - this.fill = false; - // prop: fillColor - // CSS color spec to use for fill under line. Defaults to line color. - this.fillColor; - // prop: fillAlpha - // Alpha transparency to apply to the fill under the line. - // Use this to adjust alpha separate from fill color. - this.fillAlpha; - // prop: fillAndStroke - // If true will stroke the line (with color this.color) as well as fill under it. - // Applies only when fill is true. - this.fillAndStroke = false; - // prop: disableStack - // true to not stack this series with other series in the plot. - // To render properly, non-stacked series must come after any stacked series - // in the plot's data series array. So, the plot's data series array would look like: - // > [stackedSeries1, stackedSeries2, ..., nonStackedSeries1, nonStackedSeries2, ...] - // disableStack will put a gap in the stacking order of series, and subsequent - // stacked series will not fill down through the non-stacked series and will - // most likely not stack properly on top of the non-stacked series. - this.disableStack = false; - // _stack is set by the Plot if the plot is a stacked chart. - // will stack lines or bars on top of one another to build a "mountain" style chart. - // May not be implemented in all renderers. - this._stack = false; - // prop: neighborThreshold - // how close or far (in pixels) the cursor must be from a point marker to detect the point. - this.neighborThreshold = 4; - // prop: fillToZero - // true will force bar and filled series to fill toward zero on the fill Axis. - this.fillToZero = false; - // prop: fillToValue - // fill a filled series to this value on the fill axis. - // Works in conjunction with fillToZero, so that must be true. - this.fillToValue = 0; - // prop: fillAxis - // Either 'x' or 'y'. Which axis to fill the line toward if fillToZero is true. - // 'y' means fill up/down to 0 on the y axis for this series. - this.fillAxis = 'y'; - // prop: useNegativeColors - // true to color negative values differently in filled and bar charts. - this.useNegativeColors = true; - this._stackData = []; - // _plotData accounts for stacking. If plots not stacked, _plotData and data are same. If - // stacked, _plotData is accumulation of stacking data. - this._plotData = []; - // _plotValues hold the individual x and y values that will be plotted for this series. - this._plotValues = {x:[], y:[]}; - // statistics about the intervals between data points. Used for auto scaling. - this._intervals = {x:{}, y:{}}; - // data from the previous series, for stacked charts. - this._prevPlotData = []; - this._prevGridData = []; - this._stackAxis = 'y'; - this._primaryAxis = '_xaxis'; - // give each series a canvas to draw on. This should allow for redrawing speedups. - this.canvas = new $.jqplot.GenericCanvas(); - this.shadowCanvas = new $.jqplot.GenericCanvas(); - this.plugins = {}; - // sum of y values in this series. - this._sumy = 0; - this._sumx = 0; - this._type = ''; - } - - Series.prototype = new $.jqplot.ElemContainer(); - Series.prototype.constructor = Series; - - Series.prototype.init = function(index, gridbw, plot) { - // weed out any null values in the data. - this.index = index; - this.gridBorderWidth = gridbw; - var d = this.data; - var temp = [], i, l; - for (i=0, l=d.length; i. - this.renderer = $.jqplot.CanvasGridRenderer; - // prop: rendererOptions - // Options to pass on to the renderer, - // see <$.jqplot.CanvasGridRenderer>. - this.rendererOptions = {}; - this._offsets = {top:null, bottom:null, left:null, right:null}; - } - - Grid.prototype = new $.jqplot.ElemContainer(); - Grid.prototype.constructor = Grid; - - Grid.prototype.init = function() { - if ($.isFunction(this.renderer)) { - this.renderer = new this.renderer(); - } - this.renderer.init.call(this, this.rendererOptions); - }; - - Grid.prototype.createElement = function(offsets,plot) { - this._offsets = offsets; - return this.renderer.createElement.call(this, plot); - }; - - Grid.prototype.draw = function() { - this.renderer.draw.call(this); - }; - - $.jqplot.GenericCanvas = function() { - $.jqplot.ElemContainer.call(this); - this._ctx; - }; - - $.jqplot.GenericCanvas.prototype = new $.jqplot.ElemContainer(); - $.jqplot.GenericCanvas.prototype.constructor = $.jqplot.GenericCanvas; - - $.jqplot.GenericCanvas.prototype.createElement = function(offsets, clss, plotDimensions, plot) { - this._offsets = offsets; - var klass = 'jqplot'; - if (clss != undefined) { - klass = clss; - } - var elem; - - elem = plot.canvasManager.getCanvas(); - - // if new plotDimensions supplied, use them. - if (plotDimensions != null) { - this._plotDimensions = plotDimensions; - } - - elem.width = this._plotDimensions.width - this._offsets.left - this._offsets.right; - elem.height = this._plotDimensions.height - this._offsets.top - this._offsets.bottom; - this._elem = $(elem); - this._elem.css({ position: 'absolute', left: this._offsets.left, top: this._offsets.top }); - - this._elem.addClass(klass); - - elem = plot.canvasManager.initCanvas(elem); - - elem = null; - return this._elem; - }; - - $.jqplot.GenericCanvas.prototype.setContext = function() { - this._ctx = this._elem.get(0).getContext("2d"); - return this._ctx; - }; - - // Memory Leaks patch - $.jqplot.GenericCanvas.prototype.resetCanvas = function() { - if (this._elem) { - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - window.G_vmlCanvasManager.uninitElement(this._elem.get(0)); - } - - //this._elem.remove(); - this._elem.emptyForce(); - } - - this._ctx = null; - }; - - $.jqplot.HooksManager = function () { - this.hooks =[]; - this.args = []; - }; - - $.jqplot.HooksManager.prototype.addOnce = function(fn, args) { - args = args || []; - var havehook = false; - for (var i=0, l=this.hooks.length; i { - // > axesDefaults:{min:0}, - // > series:[{color:'#6633dd'}], - // > title: 'A Plot' - // > } - // - - // prop: animate - // True to animate the series on initial plot draw (renderer dependent). - // Actual animation functionality must be supported in the renderer. - this.animate = false; - // prop: animateReplot - // True to animate series after a call to the replot() method. - // Use with caution! Replots can happen very frequently under - // certain circumstances (e.g. resizing, dragging points) and - // animation in these situations can cause problems. - this.animateReplot = false; - // prop: axes - // up to 4 axes are supported, each with it's own options, - // See for axis specific options. - this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}; - this.baseCanvas = new $.jqplot.GenericCanvas(); - // true to intercept right click events and fire a 'jqplotRightClick' event. - // this will also block the context menu. - this.captureRightClick = false; - // prop: data - // user's data. Data should *NOT* be specified in the options object, - // but be passed in as the second argument to the $.jqplot() function. - // The data property is described here soley for reference. - // The data should be in the form of an array of 2D or 1D arrays like - // > [ [[x1, y1], [x2, y2],...], [y1, y2, ...] ]. - this.data = []; - // prop: dataRenderer - // A callable which can be used to preprocess data passed into the plot. - // Will be called with 2 arguments, the plot data and a reference to the plot. - this.dataRenderer; - // prop: dataRendererOptions - // Options that will be passed to the dataRenderer. - // Can be of any type. - this.dataRendererOptions; - this.defaults = { - // prop: axesDefaults - // default options that will be applied to all axes. - // see for axes options. - axesDefaults: {}, - axes: {xaxis:{}, yaxis:{}, x2axis:{}, y2axis:{}, y3axis:{}, y4axis:{}, y5axis:{}, y6axis:{}, y7axis:{}, y8axis:{}, y9axis:{}, yMidAxis:{}}, - // prop: seriesDefaults - // default options that will be applied to all series. - // see for series options. - seriesDefaults: {}, - series:[] - }; - // prop: defaultAxisStart - // 1-D data series are internally converted into 2-D [x,y] data point arrays - // by jqPlot. This is the default starting value for the missing x or y value. - // The added data will be a monotonically increasing series (e.g. [1, 2, 3, ...]) - // starting at this value. - this.defaultAxisStart = 1; - // this.doCustomEventBinding = true; - // prop: drawIfHidden - // True to execute the draw method even if the plot target is hidden. - // Generally, this should be false. Most plot elements will not be sized/ - // positioned correclty if renderered into a hidden container. To render into - // a hidden container, call the replot method when the container is shown. - this.drawIfHidden = false; - this.eventCanvas = new $.jqplot.GenericCanvas(); - // prop: fillBetween - // Fill between 2 line series in a plot. - // Options object: - // { - // series1: first index (0 based) of series in fill - // series2: second index (0 based) of series in fill - // color: color of fill [default fillColor of series1] - // baseSeries: fill will be drawn below this series (0 based index) - // fill: false to turn off fill [default true]. - // } - this.fillBetween = { - series1: null, - series2: null, - color: null, - baseSeries: 0, - fill: true - }; - // prop; fontFamily - // css spec for the font-family attribute. Default for the entire plot. - this.fontFamily; - // prop: fontSize - // css spec for the font-size attribute. Default for the entire plot. - this.fontSize; - // prop: grid - // See for grid specific options. - this.grid = new Grid(); - // prop: legend - // see <$.jqplot.TableLegendRenderer> - this.legend = new Legend(); - // prop: noDataIndicator - // Options to set up a mock plot with a data loading indicator if no data is specified. - this.negativeSeriesColors = $.jqplot.config.defaultNegativeColors; - this.noDataIndicator = { - show: false, - indicator: 'Loading Data...', - axes: { - xaxis: { - min: 0, - max: 10, - tickInterval: 2, - show: true - }, - yaxis: { - min: 0, - max: 12, - tickInterval: 3, - show: true - } - } - }; - // container to hold all of the merged options. Convienence for plugins. - this.options = {}; - this.previousSeriesStack = []; - // Namespece to hold plugins. Generally non-renderer plugins add themselves to here. - this.plugins = {}; - // prop: series - // Array of series object options. - // see for series specific options. - this.series = []; - // array of series indicies. Keep track of order - // which series canvases are displayed, lowest - // to highest, back to front. - this.seriesStack = []; - // prop: seriesColors - // Ann array of CSS color specifications that will be applied, in order, - // to the series in the plot. Colors will wrap around so, if their - // are more series than colors, colors will be reused starting at the - // beginning. For pie charts, this specifies the colors of the slices. - this.seriesColors = $.jqplot.config.defaultColors; - // prop: sortData - // false to not sort the data passed in by the user. - // Many bar, stakced and other graphs as well as many plugins depend on - // having sorted data. - this.sortData = true; - // prop: stackSeries - // true or false, creates a stack or "mountain" plot. - // Not all series renderers may implement this option. - this.stackSeries = false; - // a shortcut for axis syncTicks options. Not implemented yet. - this.syncXTicks = true; - // a shortcut for axis syncTicks options. Not implemented yet. - this.syncYTicks = true; - // the jquery object for the dom target. - this.target = null; - // The id of the dom element to render the plot into - this.targetId = null; - // prop textColor - // css spec for the css color attribute. Default for the entire plot. - this.textColor; - // prop: title - // Title object. See for specific options. As a shortcut, you - // can specify the title option as just a string like: title: 'My Plot' - // and this will create a new title object with the specified text. - this.title = new Title(); - // Count how many times the draw method has been called while the plot is visible. - // Mostly used to test if plot has never been dran (=0), has been successfully drawn - // into a visible container once (=1) or draw more than once into a visible container. - // Can use this in tests to see if plot has been visibly drawn at least one time. - // After plot has been visibly drawn once, it generally doesn't need redrawn if its - // container is hidden and shown. - this._drawCount = 0; - // sum of y values for all series in plot. - // used in mekko chart. - this._sumy = 0; - this._sumx = 0; - // array to hold the cumulative stacked series data. - // used to ajust the individual series data, which won't have access to other - // series data. - this._stackData = []; - // array that holds the data to be plotted. This will be the series data - // merged with the the appropriate data from _stackData according to the stackAxis. - this._plotData = []; - this._width = null; - this._height = null; - this._plotDimensions = {height:null, width:null}; - this._gridPadding = {top:null, right:null, bottom:null, left:null}; - this._defaultGridPadding = {top:10, right:10, bottom:23, left:10}; - - this._addDomReference = $.jqplot.config.addDomReference; - - this.preInitHooks = new $.jqplot.HooksManager(); - this.postInitHooks = new $.jqplot.HooksManager(); - this.preParseOptionsHooks = new $.jqplot.HooksManager(); - this.postParseOptionsHooks = new $.jqplot.HooksManager(); - this.preDrawHooks = new $.jqplot.HooksManager(); - this.postDrawHooks = new $.jqplot.HooksManager(); - this.preDrawSeriesHooks = new $.jqplot.HooksManager(); - this.postDrawSeriesHooks = new $.jqplot.HooksManager(); - this.preDrawLegendHooks = new $.jqplot.HooksManager(); - this.addLegendRowHooks = new $.jqplot.HooksManager(); - this.preSeriesInitHooks = new $.jqplot.HooksManager(); - this.postSeriesInitHooks = new $.jqplot.HooksManager(); - this.preParseSeriesOptionsHooks = new $.jqplot.HooksManager(); - this.postParseSeriesOptionsHooks = new $.jqplot.HooksManager(); - this.eventListenerHooks = new $.jqplot.EventListenerManager(); - this.preDrawSeriesShadowHooks = new $.jqplot.HooksManager(); - this.postDrawSeriesShadowHooks = new $.jqplot.HooksManager(); - - this.colorGenerator = new $.jqplot.ColorGenerator(); - this.negativeColorGenerator = new $.jqplot.ColorGenerator(); - - this.canvasManager = new $.jqplot.CanvasManager(); - - this.themeEngine = new $.jqplot.ThemeEngine(); - - var seriesColorsIndex = 0; - - // Group: methods - // - // method: init - // sets the plot target, checks data and applies user - // options to plot. - this.init = function(target, data, options) { - options = options || {}; - for (var i=0; i<$.jqplot.preInitHooks.length; i++) { - $.jqplot.preInitHooks[i].call(this, target, data, options); - } - - for (var i=0; i<this.preInitHooks.hooks.length; i++) { - this.preInitHooks.hooks[i].call(this, target, data, options); - } - - this.targetId = '#'+target; - this.target = $('#'+target); - - ////// - // Add a reference to plot - ////// - if (this._addDomReference) { - this.target.data('jqplot', this); - } - // remove any error class that may be stuck on target. - this.target.removeClass('jqplot-error'); - if (!this.target.get(0)) { - throw "No plot target specified"; - } - - // make sure the target is positioned by some means and set css - if (this.target.css('position') == 'static') { - this.target.css('position', 'relative'); - } - if (!this.target.hasClass('jqplot-target')) { - this.target.addClass('jqplot-target'); - } - - // if no height or width specified, use a default. - if (!this.target.height()) { - var h; - if (options && options.height) { - h = parseInt(options.height, 10); - } - else if (this.target.attr('data-height')) { - h = parseInt(this.target.attr('data-height'), 10); - } - else { - h = parseInt($.jqplot.config.defaultHeight, 10); - } - this._height = h; - this.target.css('height', h+'px'); - } - else { - this._height = h = this.target.height(); - } - if (!this.target.width()) { - var w; - if (options && options.width) { - w = parseInt(options.width, 10); - } - else if (this.target.attr('data-width')) { - w = parseInt(this.target.attr('data-width'), 10); - } - else { - w = parseInt($.jqplot.config.defaultWidth, 10); - } - this._width = w; - this.target.css('width', w+'px'); - } - else { - this._width = w = this.target.width(); - } - - for (var i=0, l=_axisNames.length; i<l; i++) { - this.axes[_axisNames[i]] = new Axis(_axisNames[i]); - } - - this._plotDimensions.height = this._height; - this._plotDimensions.width = this._width; - this.grid._plotDimensions = this._plotDimensions; - this.title._plotDimensions = this._plotDimensions; - this.baseCanvas._plotDimensions = this._plotDimensions; - this.eventCanvas._plotDimensions = this._plotDimensions; - this.legend._plotDimensions = this._plotDimensions; - if (this._height <=0 || this._width <=0 || !this._height || !this._width) { - throw "Canvas dimension not set"; - } - - if (options.dataRenderer && $.isFunction(options.dataRenderer)) { - if (options.dataRendererOptions) { - this.dataRendererOptions = options.dataRendererOptions; - } - this.dataRenderer = options.dataRenderer; - data = this.dataRenderer(data, this, this.dataRendererOptions); - } - - if (options.noDataIndicator && $.isPlainObject(options.noDataIndicator)) { - $.extend(true, this.noDataIndicator, options.noDataIndicator); - } - - if (data == null || $.isArray(data) == false || data.length == 0 || $.isArray(data[0]) == false || data[0].length == 0) { - - if (this.noDataIndicator.show == false) { - throw "No Data"; - } - - else { - // have to be descructive here in order for plot to not try and render series. - // This means that $.jqplot() will have to be called again when there is data. - //delete options.series; - - for (var ax in this.noDataIndicator.axes) { - for (var prop in this.noDataIndicator.axes[ax]) { - this.axes[ax][prop] = this.noDataIndicator.axes[ax][prop]; - } - } - - this.postDrawHooks.add(function() { - var eh = this.eventCanvas.getHeight(); - var ew = this.eventCanvas.getWidth(); - var temp = $('<div class="jqplot-noData-container" style="position:absolute;"></div>'); - this.target.append(temp); - temp.height(eh); - temp.width(ew); - temp.css('top', this.eventCanvas._offsets.top); - temp.css('left', this.eventCanvas._offsets.left); - - var temp2 = $('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>'); - temp.append(temp2); - temp2.html(this.noDataIndicator.indicator); - var th = temp2.height(); - var tw = temp2.width(); - temp2.height(th); - temp2.width(tw); - temp2.css('top', (eh - th)/2 + 'px'); - }); - - } - } - - // make a copy of the data - this.data = $.extend(true, [], data); - - this.parseOptions(options); - - if (this.textColor) { - this.target.css('color', this.textColor); - } - if (this.fontFamily) { - this.target.css('font-family', this.fontFamily); - } - if (this.fontSize) { - this.target.css('font-size', this.fontSize); - } - - this.title.init(); - this.legend.init(); - this._sumy = 0; - this._sumx = 0; - this.computePlotData(); - for (var i=0; i<this.series.length; i++) { - // set default stacking order for series canvases - this.seriesStack.push(i); - this.previousSeriesStack.push(i); - this.series[i].shadowCanvas._plotDimensions = this._plotDimensions; - this.series[i].canvas._plotDimensions = this._plotDimensions; - for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) { - $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); - } - for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) { - this.preSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); - } - // this.populatePlotData(this.series[i], i); - this.series[i]._plotDimensions = this._plotDimensions; - this.series[i].init(i, this.grid.borderWidth, this); - for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) { - $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); - } - for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) { - this.postSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); - } - this._sumy += this.series[i]._sumy; - this._sumx += this.series[i]._sumx; - } - - var name, - axis; - for (var i=0, l=_axisNames.length; i<l; i++) { - name = _axisNames[i]; - axis = this.axes[name]; - axis._plotDimensions = this._plotDimensions; - axis.init(); - if (this.axes[name].borderColor == null) { - if (name.charAt(0) !== 'x' && axis.useSeriesColor === true && axis.show) { - axis.borderColor = axis._series[0].color; - } - else { - axis.borderColor = this.grid.borderColor; - } - } - } - - if (this.sortData) { - sortData(this.series); - } - this.grid.init(); - this.grid._axes = this.axes; - - this.legend._series = this.series; - - for (var i=0; i<$.jqplot.postInitHooks.length; i++) { - $.jqplot.postInitHooks[i].call(this, target, this.data, options); - } - - for (var i=0; i<this.postInitHooks.hooks.length; i++) { - this.postInitHooks.hooks[i].call(this, target, this.data, options); - } - }; - - // method: resetAxesScale - // Reset the specified axes min, max, numberTicks and tickInterval properties to null - // or reset these properties on all axes if no list of axes is provided. - // - // Parameters: - // axes - Boolean to reset or not reset all axes or an array or object of axis names to reset. - this.resetAxesScale = function(axes, options) { - var opts = options || {}; - var ax = axes || this.axes; - if (ax === true) { - ax = this.axes; - } - if ($.isArray(ax)) { - for (var i = 0; i < ax.length; i++) { - this.axes[ax[i]].resetScale(opts[ax[i]]); - } - } - else if (typeof(ax) === 'object') { - for (var name in ax) { - this.axes[name].resetScale(opts[name]); - } - } - }; - // method: reInitialize - // reinitialize plot for replotting. - // not called directly. - this.reInitialize = function (data, opts) { - // Plot should be visible and have a height and width. - // If plot doesn't have height and width for some - // reason, set it by other means. Plot must not have - // a display:none attribute, however. - - var options = $.extend(true, {}, this.options, opts); - - var target = this.targetId.substr(1); - var tdata = (data == null) ? this.data : data; - - for (var i=0; i<$.jqplot.preInitHooks.length; i++) { - $.jqplot.preInitHooks[i].call(this, target, tdata, options); - } - - for (var i=0; i<this.preInitHooks.hooks.length; i++) { - this.preInitHooks.hooks[i].call(this, target, tdata, options); - } - - this._height = this.target.height(); - this._width = this.target.width(); - - if (this._height <=0 || this._width <=0 || !this._height || !this._width) { - throw "Target dimension not set"; - } - - this._plotDimensions.height = this._height; - this._plotDimensions.width = this._width; - this.grid._plotDimensions = this._plotDimensions; - this.title._plotDimensions = this._plotDimensions; - this.baseCanvas._plotDimensions = this._plotDimensions; - this.eventCanvas._plotDimensions = this._plotDimensions; - this.legend._plotDimensions = this._plotDimensions; - - var name, - t, - j, - axis; - - for (var i=0, l=_axisNames.length; i<l; i++) { - name = _axisNames[i]; - axis = this.axes[name]; - - // Memory Leaks patch : clear ticks elements - t = axis._ticks; - for (var j = 0, tlen = t.length; j < tlen; j++) { - var el = t[j]._elem; - if (el) { - // if canvas renderer - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - window.G_vmlCanvasManager.uninitElement(el.get(0)); - } - el.emptyForce(); - el = null; - t._elem = null; - } - } - t = null; - - delete axis.ticks; - delete axis._ticks; - this.axes[name] = new Axis(name); - this.axes[name]._plotWidth = this._width; - this.axes[name]._plotHeight = this._height; - } - - if (data) { - if (options.dataRenderer && $.isFunction(options.dataRenderer)) { - if (options.dataRendererOptions) { - this.dataRendererOptions = options.dataRendererOptions; - } - this.dataRenderer = options.dataRenderer; - data = this.dataRenderer(data, this, this.dataRendererOptions); - } - - // make a copy of the data - this.data = $.extend(true, [], data); - } - - if (opts) { - this.parseOptions(options); - } - - this.title._plotWidth = this._width; - - if (this.textColor) { - this.target.css('color', this.textColor); - } - if (this.fontFamily) { - this.target.css('font-family', this.fontFamily); - } - if (this.fontSize) { - this.target.css('font-size', this.fontSize); - } - - this.title.init(); - this.legend.init(); - this._sumy = 0; - this._sumx = 0; - - this.seriesStack = []; - this.previousSeriesStack = []; - - this.computePlotData(); - for (var i=0, l=this.series.length; i<l; i++) { - // set default stacking order for series canvases - this.seriesStack.push(i); - this.previousSeriesStack.push(i); - this.series[i].shadowCanvas._plotDimensions = this._plotDimensions; - this.series[i].canvas._plotDimensions = this._plotDimensions; - for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) { - $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); - } - for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) { - this.preSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); - } - // this.populatePlotData(this.series[i], i); - this.series[i]._plotDimensions = this._plotDimensions; - this.series[i].init(i, this.grid.borderWidth, this); - for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) { - $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); - } - for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) { - this.postSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); - } - this._sumy += this.series[i]._sumy; - this._sumx += this.series[i]._sumx; - } - - for (var i=0, l=_axisNames.length; i<l; i++) { - name = _axisNames[i]; - axis = this.axes[name]; - - axis._plotDimensions = this._plotDimensions; - axis.init(); - if (axis.borderColor == null) { - if (name.charAt(0) !== 'x' && axis.useSeriesColor === true && axis.show) { - axis.borderColor = axis._series[0].color; - } - else { - axis.borderColor = this.grid.borderColor; - } - } - } - - if (this.sortData) { - sortData(this.series); - } - this.grid.init(); - this.grid._axes = this.axes; - - this.legend._series = this.series; - - for (var i=0, l=$.jqplot.postInitHooks.length; i<l; i++) { - $.jqplot.postInitHooks[i].call(this, target, this.data, options); - } - - for (var i=0, l=this.postInitHooks.hooks.length; i<l; i++) { - this.postInitHooks.hooks[i].call(this, target, this.data, options); - } - }; - - - - // method: quickInit - // - // Quick reinitialization plot for replotting. - // Does not parse options ore recreate axes and series. - // not called directly. - this.quickInit = function () { - // Plot should be visible and have a height and width. - // If plot doesn't have height and width for some - // reason, set it by other means. Plot must not have - // a display:none attribute, however. - - this._height = this.target.height(); - this._width = this.target.width(); - - if (this._height <=0 || this._width <=0 || !this._height || !this._width) { - throw "Target dimension not set"; - } - - this._plotDimensions.height = this._height; - this._plotDimensions.width = this._width; - this.grid._plotDimensions = this._plotDimensions; - this.title._plotDimensions = this._plotDimensions; - this.baseCanvas._plotDimensions = this._plotDimensions; - this.eventCanvas._plotDimensions = this._plotDimensions; - this.legend._plotDimensions = this._plotDimensions; - - for (var n in this.axes) { - this.axes[n]._plotWidth = this._width; - this.axes[n]._plotHeight = this._height; - } - - this.title._plotWidth = this._width; - - if (this.textColor) { - this.target.css('color', this.textColor); - } - if (this.fontFamily) { - this.target.css('font-family', this.fontFamily); - } - if (this.fontSize) { - this.target.css('font-size', this.fontSize); - } - - this._sumy = 0; - this._sumx = 0; - this.computePlotData(); - for (var i=0; i<this.series.length; i++) { - // this.populatePlotData(this.series[i], i); - if (this.series[i]._type === 'line' && this.series[i].renderer.bands.show) { - this.series[i].renderer.initBands.call(this.series[i], this.series[i].renderer.options, this); - } - this.series[i]._plotDimensions = this._plotDimensions; - this.series[i].canvas._plotDimensions = this._plotDimensions; - //this.series[i].init(i, this.grid.borderWidth); - this._sumy += this.series[i]._sumy; - this._sumx += this.series[i]._sumx; - } - - var name; - - for (var j=0; j<12; j++) { - name = _axisNames[j]; - // Memory Leaks patch : clear ticks elements - var t = this.axes[name]._ticks; - for (var i = 0; i < t.length; i++) { - var el = t[i]._elem; - if (el) { - // if canvas renderer - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - window.G_vmlCanvasManager.uninitElement(el.get(0)); - } - el.emptyForce(); - el = null; - t._elem = null; - } - } - t = null; - - this.axes[name]._plotDimensions = this._plotDimensions; - this.axes[name]._ticks = []; - // this.axes[name].renderer.init.call(this.axes[name], {}); - } - - if (this.sortData) { - sortData(this.series); - } - - this.grid._axes = this.axes; - - this.legend._series = this.series; - }; - - // sort the series data in increasing order. - function sortData(series) { - var d, sd, pd, ppd, ret; - for (var i=0; i<series.length; i++) { - var check; - var bat = [series[i].data, series[i]._stackData, series[i]._plotData, series[i]._prevPlotData]; - for (var n=0; n<4; n++) { - check = true; - d = bat[n]; - if (series[i]._stackAxis == 'x') { - for (var j = 0; j < d.length; j++) { - if (typeof(d[j][1]) != "number") { - check = false; - break; - } - } - if (check) { - d.sort(function(a,b) { return a[1] - b[1]; }); - } - } - else { - for (var j = 0; j < d.length; j++) { - if (typeof(d[j][0]) != "number") { - check = false; - break; - } - } - if (check) { - d.sort(function(a,b) { return a[0] - b[0]; }); - } - } - } - - } - } - - this.computePlotData = function() { - this._plotData = []; - this._stackData = []; - var series, - index, - l; - - - for (index=0, l=this.series.length; index<l; index++) { - series = this.series[index]; - this._plotData.push([]); - this._stackData.push([]); - var cd = series.data; - this._plotData[index] = $.extend(true, [], cd); - this._stackData[index] = $.extend(true, [], cd); - series._plotData = this._plotData[index]; - series._stackData = this._stackData[index]; - var plotValues = {x:[], y:[]}; - - if (this.stackSeries && !series.disableStack) { - series._stack = true; - /////////////////////////// - // have to check for nulls - /////////////////////////// - var sidx = (series._stackAxis === 'x') ? 0 : 1; - - for (var k=0, cdl=cd.length; k<cdl; k++) { - var temp = cd[k][sidx]; - if (temp == null) { - temp = 0; - } - this._plotData[index][k][sidx] = temp; - this._stackData[index][k][sidx] = temp; - - if (index > 0) { - for (var j=index; j--;) { - var prevval = this._plotData[j][k][sidx]; - // only need to sum up the stack axis column of data - // and only sum if it is of same sign. - // if previous series isn't same sign, keep looking - // at earlier series untill we find one of same sign. - if (temp * prevval >= 0) { - this._plotData[index][k][sidx] += prevval; - this._stackData[index][k][sidx] += prevval; - break; - } - } - } - } - - } - else { - for (var i=0; i<series.data.length; i++) { - plotValues.x.push(series.data[i][0]); - plotValues.y.push(series.data[i][1]); - } - this._stackData.push(series.data); - this.series[index]._stackData = series.data; - this._plotData.push(series.data); - series._plotData = series.data; - series._plotValues = plotValues; - } - if (index>0) { - series._prevPlotData = this.series[index-1]._plotData; - } - series._sumy = 0; - series._sumx = 0; - for (i=series.data.length-1; i>-1; i--) { - series._sumy += series.data[i][1]; - series._sumx += series.data[i][0]; - } - } - - }; - - // populate the _stackData and _plotData arrays for the plot and the series. - this.populatePlotData = function(series, index) { - // if a stacked chart, compute the stacked data - this._plotData = []; - this._stackData = []; - series._stackData = []; - series._plotData = []; - var plotValues = {x:[], y:[]}; - if (this.stackSeries && !series.disableStack) { - series._stack = true; - var sidx = (series._stackAxis === 'x') ? 0 : 1; - // var idx = sidx ? 0 : 1; - // push the current data into stackData - //this._stackData.push(this.series[i].data); - var temp = $.extend(true, [], series.data); - // create the data that will be plotted for this series - var plotdata = $.extend(true, [], series.data); - var tempx, tempy, dval, stackval, comparator; - // for first series, nothing to add to stackData. - for (var j=0; j<index; j++) { - var cd = this.series[j].data; - for (var k=0; k<cd.length; k++) { - dval = cd[k]; - tempx = (dval[0] != null) ? dval[0] : 0; - tempy = (dval[1] != null) ? dval[1] : 0; - temp[k][0] += tempx; - temp[k][1] += tempy; - stackval = (sidx) ? tempy : tempx; - // only need to sum up the stack axis column of data - // and only sum if it is of same sign. - if (series.data[k][sidx] * stackval >= 0) { - plotdata[k][sidx] += stackval; - } - } - } - for (var i=0; i<plotdata.length; i++) { - plotValues.x.push(plotdata[i][0]); - plotValues.y.push(plotdata[i][1]); - } - this._plotData.push(plotdata); - this._stackData.push(temp); - series._stackData = temp; - series._plotData = plotdata; - series._plotValues = plotValues; - } - else { - for (var i=0; i<series.data.length; i++) { - plotValues.x.push(series.data[i][0]); - plotValues.y.push(series.data[i][1]); - } - this._stackData.push(series.data); - this.series[index]._stackData = series.data; - this._plotData.push(series.data); - series._plotData = series.data; - series._plotValues = plotValues; - } - if (index>0) { - series._prevPlotData = this.series[index-1]._plotData; - } - series._sumy = 0; - series._sumx = 0; - for (i=series.data.length-1; i>-1; i--) { - series._sumy += series.data[i][1]; - series._sumx += series.data[i][0]; - } - }; - - // function to safely return colors from the color array and wrap around at the end. - this.getNextSeriesColor = (function(t) { - var idx = 0; - var sc = t.seriesColors; - - return function () { - if (idx < sc.length) { - return sc[idx++]; - } - else { - idx = 0; - return sc[idx++]; - } - }; - })(this); - - this.parseOptions = function(options){ - for (var i=0; i<this.preParseOptionsHooks.hooks.length; i++) { - this.preParseOptionsHooks.hooks[i].call(this, options); - } - for (var i=0; i<$.jqplot.preParseOptionsHooks.length; i++) { - $.jqplot.preParseOptionsHooks[i].call(this, options); - } - this.options = $.extend(true, {}, this.defaults, options); - var opts = this.options; - this.animate = opts.animate; - this.animateReplot = opts.animateReplot; - this.stackSeries = opts.stackSeries; - if ($.isPlainObject(opts.fillBetween)) { - - var temp = ['series1', 'series2', 'color', 'baseSeries', 'fill'], - tempi; - - for (var i=0, l=temp.length; i<l; i++) { - tempi = temp[i]; - if (opts.fillBetween[tempi] != null) { - this.fillBetween[tempi] = opts.fillBetween[tempi]; - } - } - } - - if (opts.seriesColors) { - this.seriesColors = opts.seriesColors; - } - if (opts.negativeSeriesColors) { - this.negativeSeriesColors = opts.negativeSeriesColors; - } - if (opts.captureRightClick) { - this.captureRightClick = opts.captureRightClick; - } - this.defaultAxisStart = (options && options.defaultAxisStart != null) ? options.defaultAxisStart : this.defaultAxisStart; - this.colorGenerator.setColors(this.seriesColors); - this.negativeColorGenerator.setColors(this.negativeSeriesColors); - // var cg = new this.colorGenerator(this.seriesColors); - // var ncg = new this.colorGenerator(this.negativeSeriesColors); - // this._gridPadding = this.options.gridPadding; - $.extend(true, this._gridPadding, opts.gridPadding); - this.sortData = (opts.sortData != null) ? opts.sortData : this.sortData; - for (var i=0; i<12; i++) { - var n = _axisNames[i]; - var axis = this.axes[n]; - axis._options = $.extend(true, {}, opts.axesDefaults, opts.axes[n]); - $.extend(true, axis, opts.axesDefaults, opts.axes[n]); - axis._plotWidth = this._width; - axis._plotHeight = this._height; - } - // if (this.data.length == 0) { - // this.data = []; - // for (var i=0; i<this.options.series.length; i++) { - // this.data.push(this.options.series.data); - // } - // } - - var normalizeData = function(data, dir, start) { - // return data as an array of point arrays, - // in form [[x1,y1...], [x2,y2...], ...] - var temp = []; - var i, l; - dir = dir || 'vertical'; - if (!$.isArray(data[0])) { - // we have a series of scalars. One line with just y values. - // turn the scalar list of data into a data array of form: - // [[1, data[0]], [2, data[1]], ...] - for (i=0, l=data.length; i<l; i++) { - if (dir == 'vertical') { - temp.push([start + i, data[i]]); - } - else { - temp.push([data[i], start+i]); - } - } - } - else { - // we have a properly formatted data series, copy it. - $.extend(true, temp, data); - } - return temp; - }; - - var colorIndex = 0; - this.series = []; - for (var i=0; i<this.data.length; i++) { - var sopts = $.extend(true, {index: i}, {seriesColors:this.seriesColors, negativeSeriesColors:this.negativeSeriesColors}, this.options.seriesDefaults, this.options.series[i], {rendererOptions:{animation:{show: this.animate}}}); - // pass in options in case something needs set prior to initialization. - var temp = new Series(sopts); - for (var j=0; j<$.jqplot.preParseSeriesOptionsHooks.length; j++) { - $.jqplot.preParseSeriesOptionsHooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]); - } - for (var j=0; j<this.preParseSeriesOptionsHooks.hooks.length; j++) { - this.preParseSeriesOptionsHooks.hooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]); - } - // Now go back and apply the options to the series. Really should just do this during initializaiton, but don't want to - // mess up preParseSeriesOptionsHooks at this point. - $.extend(true, temp, sopts); - var dir = 'vertical'; - if (temp.renderer === $.jqplot.BarRenderer && temp.rendererOptions && temp.rendererOptions.barDirection == 'horizontal') { - dir = 'horizontal'; - temp._stackAxis = 'x'; - temp._primaryAxis = '_yaxis'; - } - temp.data = normalizeData(this.data[i], dir, this.defaultAxisStart); - switch (temp.xaxis) { - case 'xaxis': - temp._xaxis = this.axes.xaxis; - break; - case 'x2axis': - temp._xaxis = this.axes.x2axis; - break; - default: - break; - } - temp._yaxis = this.axes[temp.yaxis]; - temp._xaxis._series.push(temp); - temp._yaxis._series.push(temp); - if (temp.show) { - temp._xaxis.show = true; - temp._yaxis.show = true; - } - else { - if (temp._xaxis.scaleToHiddenSeries) { - temp._xaxis.show = true; - } - if (temp._yaxis.scaleToHiddenSeries) { - temp._yaxis.show = true; - } - } - - // // parse the renderer options and apply default colors if not provided - // if (!temp.color && temp.show != false) { - // temp.color = cg.next(); - // colorIndex = cg.getIndex() - 1;; - // } - // if (!temp.negativeColor && temp.show != false) { - // temp.negativeColor = ncg.get(colorIndex); - // ncg.setIndex(colorIndex); - // } - if (!temp.label) { - temp.label = 'Series '+ (i+1).toString(); - } - // temp.rendererOptions.show = temp.show; - // $.extend(true, temp.renderer, {color:this.seriesColors[i]}, this.rendererOptions); - this.series.push(temp); - for (var j=0; j<$.jqplot.postParseSeriesOptionsHooks.length; j++) { - $.jqplot.postParseSeriesOptionsHooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]); - } - for (var j=0; j<this.postParseSeriesOptionsHooks.hooks.length; j++) { - this.postParseSeriesOptionsHooks.hooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]); - } - } - - // copy the grid and title options into this object. - $.extend(true, this.grid, this.options.grid); - // if axis border properties aren't set, set default. - for (var i=0, l=_axisNames.length; i<l; i++) { - var n = _axisNames[i]; - var axis = this.axes[n]; - if (axis.borderWidth == null) { - axis.borderWidth =this.grid.borderWidth; - } - } - - if (typeof this.options.title == 'string') { - this.title.text = this.options.title; - } - else if (typeof this.options.title == 'object') { - $.extend(true, this.title, this.options.title); - } - this.title._plotWidth = this._width; - this.legend.setOptions(this.options.legend); - - for (var i=0; i<$.jqplot.postParseOptionsHooks.length; i++) { - $.jqplot.postParseOptionsHooks[i].call(this, options); - } - for (var i=0; i<this.postParseOptionsHooks.hooks.length; i++) { - this.postParseOptionsHooks.hooks[i].call(this, options); - } - }; - - // method: destroy - // Releases all resources occupied by the plot - this.destroy = function() { - this.canvasManager.freeAllCanvases(); - if (this.eventCanvas && this.eventCanvas._elem) { - this.eventCanvas._elem.unbind(); - } - // Couple of posts on Stack Overflow indicate that empty() doesn't - // always cear up the dom and release memory. Sometimes setting - // innerHTML property to null is needed. Particularly on IE, may - // have to directly set it to null, bypassing $. - this.target.empty(); - - this.target[0].innerHTML = ''; - }; - - // method: replot - // Does a reinitialization of the plot followed by - // a redraw. Method could be used to interactively - // change plot characteristics and then replot. - // - // Parameters: - // options - Options used for replotting. - // - // Properties: - // clear - false to not clear (empty) the plot container before replotting (default: true). - // resetAxes - true to reset all axes min, max, numberTicks and tickInterval setting so axes will rescale themselves. - // optionally pass in list of axes to reset (e.g. ['xaxis', 'y2axis']) (default: false). - this.replot = function(options) { - var opts = options || {}; - var data = opts.data || null; - var clear = (opts.clear === false) ? false : true; - var resetAxes = opts.resetAxes || false; - delete opts.data; - delete opts.clear; - delete opts.resetAxes; - - this.target.trigger('jqplotPreReplot'); - - if (clear) { - this.destroy(); - } - // if have data or other options, full reinit. - // otherwise, quickinit. - if (data || !$.isEmptyObject(opts)) { - this.reInitialize(data, opts); - } - else { - this.quickInit(); - } - - if (resetAxes) { - this.resetAxesScale(resetAxes, opts.axes); - } - this.draw(); - this.target.trigger('jqplotPostReplot'); - }; - - // method: redraw - // Empties the plot target div and redraws the plot. - // This enables plot data and properties to be changed - // and then to comletely clear the plot and redraw. - // redraw *will not* reinitialize any plot elements. - // That is, axes will not be autoscaled and defaults - // will not be reapplied to any plot elements. redraw - // is used primarily with zooming. - // - // Parameters: - // clear - false to not clear (empty) the plot container before redrawing (default: true). - this.redraw = function(clear) { - clear = (clear != null) ? clear : true; - this.target.trigger('jqplotPreRedraw'); - if (clear) { - this.canvasManager.freeAllCanvases(); - this.eventCanvas._elem.unbind(); - // Dont think I bind any events to the target, this shouldn't be necessary. - // It will remove user's events. - // this.target.unbind(); - this.target.empty(); - } - for (var ax in this.axes) { - this.axes[ax]._ticks = []; - } - this.computePlotData(); - // for (var i=0; i<this.series.length; i++) { - // this.populatePlotData(this.series[i], i); - // } - this._sumy = 0; - this._sumx = 0; - for (var i=0, tsl = this.series.length; i<tsl; i++) { - this._sumy += this.series[i]._sumy; - this._sumx += this.series[i]._sumx; - } - this.draw(); - this.target.trigger('jqplotPostRedraw'); - }; - - // method: draw - // Draws all elements of the plot into the container. - // Does not clear the container before drawing. - this.draw = function(){ - if (this.drawIfHidden || this.target.is(':visible')) { - this.target.trigger('jqplotPreDraw'); - var i, - j, - l, - tempseries; - for (i=0, l=$.jqplot.preDrawHooks.length; i<l; i++) { - $.jqplot.preDrawHooks[i].call(this); - } - for (i=0, l=this.preDrawHooks.length; i<l; i++) { - this.preDrawHooks.hooks[i].apply(this, this.preDrawSeriesHooks.args[i]); - } - // create an underlying canvas to be used for special features. - this.target.append(this.baseCanvas.createElement({left:0, right:0, top:0, bottom:0}, 'jqplot-base-canvas', null, this)); - this.baseCanvas.setContext(); - this.target.append(this.title.draw()); - this.title.pack({top:0, left:0}); - - // make room for the legend between the grid and the edge. - // pass a dummy offsets object and a reference to the plot. - var legendElem = this.legend.draw({}, this); - - var gridPadding = {top:0, left:0, bottom:0, right:0}; - - if (this.legend.placement == "outsideGrid") { - // temporarily append the legend to get dimensions - this.target.append(legendElem); - switch (this.legend.location) { - case 'n': - gridPadding.top += this.legend.getHeight(); - break; - case 's': - gridPadding.bottom += this.legend.getHeight(); - break; - case 'ne': - case 'e': - case 'se': - gridPadding.right += this.legend.getWidth(); - break; - case 'nw': - case 'w': - case 'sw': - gridPadding.left += this.legend.getWidth(); - break; - default: // same as 'ne' - gridPadding.right += this.legend.getWidth(); - break; - } - legendElem = legendElem.detach(); - } - - var ax = this.axes; - var name; - // draw the yMidAxis first, so xaxis of pyramid chart can adjust itself if needed. - for (i=0; i<12; i++) { - name = _axisNames[i]; - this.target.append(ax[name].draw(this.baseCanvas._ctx, this)); - ax[name].set(); - } - if (ax.yaxis.show) { - gridPadding.left += ax.yaxis.getWidth(); - } - var ra = ['y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis']; - var rapad = [0, 0, 0, 0, 0, 0, 0, 0]; - var gpr = 0; - var n; - for (n=0; n<8; n++) { - if (ax[ra[n]].show) { - gpr += ax[ra[n]].getWidth(); - rapad[n] = gpr; - } - } - gridPadding.right += gpr; - if (ax.x2axis.show) { - gridPadding.top += ax.x2axis.getHeight(); - } - if (this.title.show) { - gridPadding.top += this.title.getHeight(); - } - if (ax.xaxis.show) { - gridPadding.bottom += ax.xaxis.getHeight(); - } - - // end of gridPadding adjustments. - - // if user passed in gridDimensions option, check against calculated gridPadding - if (this.options.gridDimensions && $.isPlainObject(this.options.gridDimensions)) { - var gdw = parseInt(this.options.gridDimensions.width, 10) || 0; - var gdh = parseInt(this.options.gridDimensions.height, 10) || 0; - var widthAdj = (this._width - gridPadding.left - gridPadding.right - gdw)/2; - var heightAdj = (this._height - gridPadding.top - gridPadding.bottom - gdh)/2; - - if (heightAdj >= 0 && widthAdj >= 0) { - gridPadding.top += heightAdj; - gridPadding.bottom += heightAdj; - gridPadding.left += widthAdj; - gridPadding.right += widthAdj; - } - } - var arr = ['top', 'bottom', 'left', 'right']; - for (var n in arr) { - if (this._gridPadding[arr[n]] == null && gridPadding[arr[n]] > 0) { - this._gridPadding[arr[n]] = gridPadding[arr[n]]; - } - else if (this._gridPadding[arr[n]] == null) { - this._gridPadding[arr[n]] = this._defaultGridPadding[arr[n]]; - } - } - - var legendPadding = this._gridPadding; - - if (this.legend.placement === 'outsideGrid') { - legendPadding = {top:this.title.getHeight(), left: 0, right: 0, bottom: 0}; - if (this.legend.location === 's') { - legendPadding.left = this._gridPadding.left; - legendPadding.right = this._gridPadding.right; - } - } - - ax.xaxis.pack({position:'absolute', bottom:this._gridPadding.bottom - ax.xaxis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right}); - ax.yaxis.pack({position:'absolute', top:0, left:this._gridPadding.left - ax.yaxis.getWidth(), height:this._height}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top}); - ax.x2axis.pack({position:'absolute', top:this._gridPadding.top - ax.x2axis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right}); - for (i=8; i>0; i--) { - ax[ra[i-1]].pack({position:'absolute', top:0, right:this._gridPadding.right - rapad[i-1]}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top}); - } - var ltemp = (this._width - this._gridPadding.left - this._gridPadding.right)/2.0 + this._gridPadding.left - ax.yMidAxis.getWidth()/2.0; - ax.yMidAxis.pack({position:'absolute', top:0, left:ltemp, zIndex:9, textAlign: 'center'}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top}); - - this.target.append(this.grid.createElement(this._gridPadding, this)); - this.grid.draw(); - - var series = this.series; - var seriesLength = series.length; - // put the shadow canvases behind the series canvases so shadows don't overlap on stacked bars. - for (i=0, l=seriesLength; i<l; i++) { - // draw series in order of stacking. This affects only - // order in which canvases are added to dom. - j = this.seriesStack[i]; - this.target.append(series[j].shadowCanvas.createElement(this._gridPadding, 'jqplot-series-shadowCanvas', null, this)); - series[j].shadowCanvas.setContext(); - series[j].shadowCanvas._elem.data('seriesIndex', j); - } - - for (i=0, l=seriesLength; i<l; i++) { - // draw series in order of stacking. This affects only - // order in which canvases are added to dom. - j = this.seriesStack[i]; - this.target.append(series[j].canvas.createElement(this._gridPadding, 'jqplot-series-canvas', null, this)); - series[j].canvas.setContext(); - series[j].canvas._elem.data('seriesIndex', j); - } - // Need to use filled canvas to capture events in IE. - // Also, canvas seems to block selection of other elements in document on FF. - this.target.append(this.eventCanvas.createElement(this._gridPadding, 'jqplot-event-canvas', null, this)); - this.eventCanvas.setContext(); - this.eventCanvas._ctx.fillStyle = 'rgba(0,0,0,0)'; - this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width, this.eventCanvas._ctx.canvas.height); - - // bind custom event handlers to regular events. - this.bindCustomEvents(); - - // draw legend before series if the series needs to know the legend dimensions. - if (this.legend.preDraw) { - this.eventCanvas._elem.before(legendElem); - this.legend.pack(legendPadding); - if (this.legend._elem) { - this.drawSeries({legendInfo:{location:this.legend.location, placement:this.legend.placement, width:this.legend.getWidth(), height:this.legend.getHeight(), xoffset:this.legend.xoffset, yoffset:this.legend.yoffset}}); - } - else { - this.drawSeries(); - } - } - else { // draw series before legend - this.drawSeries(); - if (seriesLength) { - $(series[seriesLength-1].canvas._elem).after(legendElem); - } - this.legend.pack(legendPadding); - } - - // register event listeners on the overlay canvas - for (var i=0, l=$.jqplot.eventListenerHooks.length; i<l; i++) { - // in the handler, this will refer to the eventCanvas dom element. - // make sure there are references back into plot objects. - this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]); - } - - // register event listeners on the overlay canvas - for (var i=0, l=this.eventListenerHooks.hooks.length; i<l; i++) { - // in the handler, this will refer to the eventCanvas dom element. - // make sure there are references back into plot objects. - this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[i][0], {plot:this}, this.eventListenerHooks.hooks[i][1]); - } - - var fb = this.fillBetween; - if (fb.fill && fb.series1 !== fb.series2 && fb.series1 < seriesLength && fb.series2 < seriesLength && series[fb.series1]._type === 'line' && series[fb.series2]._type === 'line') { - this.doFillBetweenLines(); - } - - for (var i=0, l=$.jqplot.postDrawHooks.length; i<l; i++) { - $.jqplot.postDrawHooks[i].call(this); - } - - for (var i=0, l=this.postDrawHooks.hooks.length; i<l; i++) { - this.postDrawHooks.hooks[i].apply(this, this.postDrawHooks.args[i]); - } - - if (this.target.is(':visible')) { - this._drawCount += 1; - } - - var temps, - tempr, - sel, - _els; - // ughh. ideally would hide all series then show them. - for (i=0, l=seriesLength; i<l; i++) { - temps = series[i]; - tempr = temps.renderer; - sel = '.jqplot-point-label.jqplot-series-'+i; - if (tempr.animation && tempr.animation._supported && tempr.animation.show && (this._drawCount < 2 || this.animateReplot)) { - _els = this.target.find(sel); - _els.stop(true, true).hide(); - temps.canvas._elem.stop(true, true).hide(); - temps.shadowCanvas._elem.stop(true, true).hide(); - temps.canvas._elem.jqplotEffect('blind', {mode: 'show', direction: tempr.animation.direction}, tempr.animation.speed); - temps.shadowCanvas._elem.jqplotEffect('blind', {mode: 'show', direction: tempr.animation.direction}, tempr.animation.speed); - _els.fadeIn(tempr.animation.speed*0.8); - } - } - _els = null; - - this.target.trigger('jqplotPostDraw', [this]); - } - }; - - jqPlot.prototype.doFillBetweenLines = function () { - var fb = this.fillBetween; - var sid1 = fb.series1; - var sid2 = fb.series2; - // first series should always be lowest index - var id1 = (sid1 < sid2) ? sid1 : sid2; - var id2 = (sid2 > sid1) ? sid2 : sid1; - - var series1 = this.series[id1]; - var series2 = this.series[id2]; - - if (series2.renderer.smooth) { - var tempgd = series2.renderer._smoothedData.slice(0).reverse(); - } - else { - var tempgd = series2.gridData.slice(0).reverse(); - } - - if (series1.renderer.smooth) { - var gd = series1.renderer._smoothedData.concat(tempgd); - } - else { - var gd = series1.gridData.concat(tempgd); - } - - var color = (fb.color !== null) ? fb.color : this.series[sid1].fillColor; - var baseSeries = (fb.baseSeries !== null) ? fb.baseSeries : id1; - - // now apply a fill to the shape on the lower series shadow canvas, - // so it is behind both series. - var sr = this.series[baseSeries].renderer.shapeRenderer; - var opts = {fillStyle: color, fill: true, closePath: true}; - sr.draw(series1.shadowCanvas._ctx, gd, opts); - }; - - this.bindCustomEvents = function() { - this.eventCanvas._elem.bind('click', {plot:this}, this.onClick); - this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick); - this.eventCanvas._elem.bind('mousedown', {plot:this}, this.onMouseDown); - this.eventCanvas._elem.bind('mousemove', {plot:this}, this.onMouseMove); - this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave); - if (this.captureRightClick) { - this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onRightClick); - this.eventCanvas._elem.get(0).oncontextmenu = function() { - return false; - }; - } - else { - this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onMouseUp); - } - }; - - function getEventPosition(ev) { - var plot = ev.data.plot; - var go = plot.eventCanvas._elem.offset(); - var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top}; - var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null, yMidAxis:null}; - var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis']; - var ax = plot.axes; - var n, axis; - for (n=11; n>0; n--) { - axis = an[n-1]; - if (ax[axis].show) { - dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]); - } - } - - return {offsets:go, gridPos:gridPos, dataPos:dataPos}; - } - - - // function to check if event location is over a area area - function checkIntersection(gridpos, plot) { - var series = plot.series; - var i, j, k, s, r, x, y, theta, sm, sa, minang, maxang; - var d0, d, p, pp, points, bw, hp; - var threshold, t; - for (k=plot.seriesStack.length-1; k>=0; k--) { - i = plot.seriesStack[k]; - s = series[i]; - hp = s._highlightThreshold; - switch (s.renderer.constructor) { - case $.jqplot.BarRenderer: - x = gridpos.x; - y = gridpos.y; - for (j=0; j<s._barPoints.length; j++) { - points = s._barPoints[j]; - p = s.gridData[j]; - if (x>points[0][0] && x<points[2][0] && y>points[2][1] && y<points[0][1]) { - return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]}; - } - } - break; - case $.jqplot.PyramidRenderer: - x = gridpos.x; - y = gridpos.y; - for (j=0; j<s._barPoints.length; j++) { - points = s._barPoints[j]; - p = s.gridData[j]; - if (x > points[0][0] + hp[0][0] && x < points[2][0] + hp[2][0] && y > points[2][1] && y < points[0][1]) { - return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]}; - } - } - break; - - case $.jqplot.DonutRenderer: - sa = s.startAngle/180*Math.PI; - x = gridpos.x - s._center[0]; - y = gridpos.y - s._center[1]; - r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); - if (x > 0 && -y >= 0) { - theta = 2*Math.PI - Math.atan(-y/x); - } - else if (x > 0 && -y < 0) { - theta = -Math.atan(-y/x); - } - else if (x < 0) { - theta = Math.PI - Math.atan(-y/x); - } - else if (x == 0 && -y > 0) { - theta = 3*Math.PI/2; - } - else if (x == 0 && -y < 0) { - theta = Math.PI/2; - } - else if (x == 0 && y == 0) { - theta = 0; - } - if (sa) { - theta -= sa; - if (theta < 0) { - theta += 2*Math.PI; - } - else if (theta > 2*Math.PI) { - theta -= 2*Math.PI; - } - } - - sm = s.sliceMargin/180*Math.PI; - if (r < s._radius && r > s._innerRadius) { - for (j=0; j<s.gridData.length; j++) { - minang = (j>0) ? s.gridData[j-1][1]+sm : sm; - maxang = s.gridData[j][1]; - if (theta > minang && theta < maxang) { - return {seriesIndex:s.index, pointIndex:j, gridData:s.gridData[j], data:s.data[j]}; - } - } - } - break; - - case $.jqplot.PieRenderer: - sa = s.startAngle/180*Math.PI; - x = gridpos.x - s._center[0]; - y = gridpos.y - s._center[1]; - r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); - if (x > 0 && -y >= 0) { - theta = 2*Math.PI - Math.atan(-y/x); - } - else if (x > 0 && -y < 0) { - theta = -Math.atan(-y/x); - } - else if (x < 0) { - theta = Math.PI - Math.atan(-y/x); - } - else if (x == 0 && -y > 0) { - theta = 3*Math.PI/2; - } - else if (x == 0 && -y < 0) { - theta = Math.PI/2; - } - else if (x == 0 && y == 0) { - theta = 0; - } - if (sa) { - theta -= sa; - if (theta < 0) { - theta += 2*Math.PI; - } - else if (theta > 2*Math.PI) { - theta -= 2*Math.PI; - } - } - - sm = s.sliceMargin/180*Math.PI; - if (r < s._radius) { - for (j=0; j<s.gridData.length; j++) { - minang = (j>0) ? s.gridData[j-1][1]+sm : sm; - maxang = s.gridData[j][1]; - if (theta > minang && theta < maxang) { - return {seriesIndex:s.index, pointIndex:j, gridData:s.gridData[j], data:s.data[j]}; - } - } - } - break; - - case $.jqplot.BubbleRenderer: - x = gridpos.x; - y = gridpos.y; - var ret = null; - - if (s.show) { - for (var j=0; j<s.gridData.length; j++) { - p = s.gridData[j]; - d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) ); - if (d <= p[2] && (d <= d0 || d0 == null)) { - d0 = d; - ret = {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - if (ret != null) { - return ret; - } - } - break; - - case $.jqplot.FunnelRenderer: - x = gridpos.x; - y = gridpos.y; - var v = s._vertices, - vfirst = v[0], - vlast = v[v.length-1], - lex, - rex, - cv; - - // equations of right and left sides, returns x, y values given height of section (y value and 2 points) - - function findedge (l, p1 , p2) { - var m = (p1[1] - p2[1])/(p1[0] - p2[0]); - var b = p1[1] - m*p1[0]; - var y = l + p1[1]; - - return [(y - b)/m, y]; - } - - // check each section - lex = findedge(y, vfirst[0], vlast[3]); - rex = findedge(y, vfirst[1], vlast[2]); - for (j=0; j<v.length; j++) { - cv = v[j]; - if (y >= cv[0][1] && y <= cv[3][1] && x >= lex[0] && x <= rex[0]) { - return {seriesIndex:s.index, pointIndex:j, gridData:null, data:s.data[j]}; - } - } - break; - - case $.jqplot.LineRenderer: - x = gridpos.x; - y = gridpos.y; - r = s.renderer; - if (s.show) { - if ((s.fill || (s.renderer.bands.show && s.renderer.bands.fill)) && (!plot.plugins.highlighter || !plot.plugins.highlighter.show)) { - // first check if it is in bounding box - var inside = false; - if (x>s._boundingBox[0][0] && x<s._boundingBox[1][0] && y>s._boundingBox[1][1] && y<s._boundingBox[0][1]) { - // now check the crossing number - - var numPoints = s._areaPoints.length; - var ii; - var j = numPoints-1; - - for(var ii=0; ii < numPoints; ii++) { - var vertex1 = [s._areaPoints[ii][0], s._areaPoints[ii][1]]; - var vertex2 = [s._areaPoints[j][0], s._areaPoints[j][1]]; - - if (vertex1[1] < y && vertex2[1] >= y || vertex2[1] < y && vertex1[1] >= y) { - if (vertex1[0] + (y - vertex1[1]) / (vertex2[1] - vertex1[1]) * (vertex2[0] - vertex1[0]) < x) { - inside = !inside; - } - } - - j = ii; - } - } - if (inside) { - return {seriesIndex:i, pointIndex:null, gridData:s.gridData, data:s.data, points:s._areaPoints}; - } - break; - - } - - else { - t = s.markerRenderer.size/2+s.neighborThreshold; - threshold = (t > 0) ? t : 0; - for (var j=0; j<s.gridData.length; j++) { - p = s.gridData[j]; - // neighbor looks different to OHLC chart. - if (r.constructor == $.jqplot.OHLCRenderer) { - if (r.candleStick) { - var yp = s._yaxis.series_u2p; - if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) { - return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - // if an open hi low close chart - else if (!r.hlc){ - var yp = s._yaxis.series_u2p; - if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) { - return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - // a hi low close chart - else { - var yp = s._yaxis.series_u2p; - if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) { - return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - - } - else if (p[0] != null && p[1] != null){ - d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) ); - if (d <= threshold && (d <= d0 || d0 == null)) { - d0 = d; - return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - } - } - } - break; - - default: - x = gridpos.x; - y = gridpos.y; - r = s.renderer; - if (s.show) { - t = s.markerRenderer.size/2+s.neighborThreshold; - threshold = (t > 0) ? t : 0; - for (var j=0; j<s.gridData.length; j++) { - p = s.gridData[j]; - // neighbor looks different to OHLC chart. - if (r.constructor == $.jqplot.OHLCRenderer) { - if (r.candleStick) { - var yp = s._yaxis.series_u2p; - if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) { - return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - // if an open hi low close chart - else if (!r.hlc){ - var yp = s._yaxis.series_u2p; - if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) { - return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - // a hi low close chart - else { - var yp = s._yaxis.series_u2p; - if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) { - return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - - } - else { - d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) ); - if (d <= threshold && (d <= d0 || d0 == null)) { - d0 = d; - return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; - } - } - } - } - break; - } - } - - return null; - } - - - - this.onClick = function(ev) { - // Event passed in is normalized and will have data attribute. - // Event passed out is unnormalized. - var positions = getEventPosition(ev); - var p = ev.data.plot; - var neighbor = checkIntersection(positions.gridPos, p); - var evt = $.Event('jqplotClick'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); - }; - - this.onDblClick = function(ev) { - // Event passed in is normalized and will have data attribute. - // Event passed out is unnormalized. - var positions = getEventPosition(ev); - var p = ev.data.plot; - var neighbor = checkIntersection(positions.gridPos, p); - var evt = $.Event('jqplotDblClick'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); - }; - - this.onMouseDown = function(ev) { - var positions = getEventPosition(ev); - var p = ev.data.plot; - var neighbor = checkIntersection(positions.gridPos, p); - var evt = $.Event('jqplotMouseDown'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); - }; - - this.onMouseUp = function(ev) { - var positions = getEventPosition(ev); - var evt = $.Event('jqplotMouseUp'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, ev.data.plot]); - }; - - this.onRightClick = function(ev) { - var positions = getEventPosition(ev); - var p = ev.data.plot; - var neighbor = checkIntersection(positions.gridPos, p); - if (p.captureRightClick) { - if (ev.which == 3) { - var evt = $.Event('jqplotRightClick'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); - } - else { - var evt = $.Event('jqplotMouseUp'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); - } - } - }; - - this.onMouseMove = function(ev) { - var positions = getEventPosition(ev); - var p = ev.data.plot; - var neighbor = checkIntersection(positions.gridPos, p); - var evt = $.Event('jqplotMouseMove'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); - }; - - this.onMouseEnter = function(ev) { - var positions = getEventPosition(ev); - var p = ev.data.plot; - var evt = $.Event('jqplotMouseEnter'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - evt.relatedTarget = ev.relatedTarget; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]); - }; - - this.onMouseLeave = function(ev) { - var positions = getEventPosition(ev); - var p = ev.data.plot; - var evt = $.Event('jqplotMouseLeave'); - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - evt.relatedTarget = ev.relatedTarget; - $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]); - }; - - // method: drawSeries - // Redraws all or just one series on the plot. No axis scaling - // is performed and no other elements on the plot are redrawn. - // options is an options object to pass on to the series renderers. - // It can be an empty object {}. idx is the series index - // to redraw if only one series is to be redrawn. - this.drawSeries = function(options, idx){ - var i, series, ctx; - // if only one argument passed in and it is a number, use it ad idx. - idx = (typeof(options) === "number" && idx == null) ? options : idx; - options = (typeof(options) === "object") ? options : {}; - // draw specified series - if (idx != undefined) { - series = this.series[idx]; - ctx = series.shadowCanvas._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - series.drawShadow(ctx, options, this); - ctx = series.canvas._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - series.draw(ctx, options, this); - if (series.renderer.constructor == $.jqplot.BezierCurveRenderer) { - if (idx < this.series.length - 1) { - this.drawSeries(idx+1); - } - } - } - - else { - // if call series drawShadow method first, in case all series shadows - // should be drawn before any series. This will ensure, like for - // stacked bar plots, that shadows don't overlap series. - for (i=0; i<this.series.length; i++) { - // first clear the canvas - series = this.series[i]; - ctx = series.shadowCanvas._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - series.drawShadow(ctx, options, this); - ctx = series.canvas._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - series.draw(ctx, options, this); - } - } - options = idx = i = series = ctx = null; - }; - - // method: moveSeriesToFront - // This method requires jQuery 1.4+ - // Moves the specified series canvas in front of all other series canvases. - // This effectively "draws" the specified series on top of all other series, - // although it is performed through DOM manipulation, no redrawing is performed. - // - // Parameters: - // idx - 0 based index of the series to move. This will be the index of the series - // as it was first passed into the jqplot function. - this.moveSeriesToFront = function (idx) { - idx = parseInt(idx, 10); - var stackIndex = $.inArray(idx, this.seriesStack); - // if already in front, return - if (stackIndex == -1) { - return; - } - if (stackIndex == this.seriesStack.length -1) { - this.previousSeriesStack = this.seriesStack.slice(0); - return; - } - var opidx = this.seriesStack[this.seriesStack.length -1]; - var serelem = this.series[idx].canvas._elem.detach(); - var shadelem = this.series[idx].shadowCanvas._elem.detach(); - this.series[opidx].shadowCanvas._elem.after(shadelem); - this.series[opidx].canvas._elem.after(serelem); - this.previousSeriesStack = this.seriesStack.slice(0); - this.seriesStack.splice(stackIndex, 1); - this.seriesStack.push(idx); - }; - - // method: moveSeriesToBack - // This method requires jQuery 1.4+ - // Moves the specified series canvas behind all other series canvases. - // - // Parameters: - // idx - 0 based index of the series to move. This will be the index of the series - // as it was first passed into the jqplot function. - this.moveSeriesToBack = function (idx) { - idx = parseInt(idx, 10); - var stackIndex = $.inArray(idx, this.seriesStack); - // if already in back, return - if (stackIndex == 0 || stackIndex == -1) { - return; - } - var opidx = this.seriesStack[0]; - var serelem = this.series[idx].canvas._elem.detach(); - var shadelem = this.series[idx].shadowCanvas._elem.detach(); - this.series[opidx].shadowCanvas._elem.before(shadelem); - this.series[opidx].canvas._elem.before(serelem); - this.previousSeriesStack = this.seriesStack.slice(0); - this.seriesStack.splice(stackIndex, 1); - this.seriesStack.unshift(idx); - }; - - // method: restorePreviousSeriesOrder - // This method requires jQuery 1.4+ - // Restore the series canvas order to its previous state. - // Useful to put a series back where it belongs after moving - // it to the front. - this.restorePreviousSeriesOrder = function () { - var i, j, serelem, shadelem, temp, move, keep; - // if no change, return. - if (this.seriesStack == this.previousSeriesStack) { - return; - } - for (i=1; i<this.previousSeriesStack.length; i++) { - move = this.previousSeriesStack[i]; - keep = this.previousSeriesStack[i-1]; - serelem = this.series[move].canvas._elem.detach(); - shadelem = this.series[move].shadowCanvas._elem.detach(); - this.series[keep].shadowCanvas._elem.after(shadelem); - this.series[keep].canvas._elem.after(serelem); - } - temp = this.seriesStack.slice(0); - this.seriesStack = this.previousSeriesStack.slice(0); - this.previousSeriesStack = temp; - }; - - // method: restoreOriginalSeriesOrder - // This method requires jQuery 1.4+ - // Restore the series canvas order to its original order - // when the plot was created. - this.restoreOriginalSeriesOrder = function () { - var i, j, arr=[], serelem, shadelem; - for (i=0; i<this.series.length; i++) { - arr.push(i); - } - if (this.seriesStack == arr) { - return; - } - this.previousSeriesStack = this.seriesStack.slice(0); - this.seriesStack = arr; - for (i=1; i<this.seriesStack.length; i++) { - serelem = this.series[i].canvas._elem.detach(); - shadelem = this.series[i].shadowCanvas._elem.detach(); - this.series[i-1].shadowCanvas._elem.after(shadelem); - this.series[i-1].canvas._elem.after(serelem); - } - }; - - this.activateTheme = function (name) { - this.themeEngine.activate(this, name); - }; - } - - - // conpute a highlight color or array of highlight colors from given colors. - $.jqplot.computeHighlightColors = function(colors) { - var ret; - if ($.isArray(colors)) { - ret = []; - for (var i=0; i<colors.length; i++){ - var rgba = $.jqplot.getColorComponents(colors[i]); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - newrgb[j] = (sum > 660) ? newrgb[j] * 0.85 : 0.73 * newrgb[j] + 90; - newrgb[j] = parseInt(newrgb[j], 10); - (newrgb[j] > 255) ? 255 : newrgb[j]; - } - // newrgb[3] = (rgba[3] > 0.4) ? rgba[3] * 0.4 : rgba[3] * 1.5; - // newrgb[3] = (rgba[3] > 0.5) ? 0.8 * rgba[3] - .1 : rgba[3] + 0.2; - newrgb[3] = 0.3 + 0.35 * rgba[3]; - ret.push('rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+newrgb[3]+')'); - } - } - else { - var rgba = $.jqplot.getColorComponents(colors); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - // newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]); - // newrgb[j] = parseInt(newrgb[j], 10); - newrgb[j] = (sum > 660) ? newrgb[j] * 0.85 : 0.73 * newrgb[j] + 90; - newrgb[j] = parseInt(newrgb[j], 10); - (newrgb[j] > 255) ? 255 : newrgb[j]; - } - // newrgb[3] = (rgba[3] > 0.4) ? rgba[3] * 0.4 : rgba[3] * 1.5; - // newrgb[3] = (rgba[3] > 0.5) ? 0.8 * rgba[3] - .1 : rgba[3] + 0.2; - newrgb[3] = 0.3 + 0.35 * rgba[3]; - ret = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+newrgb[3]+')'; - } - return ret; - }; - - $.jqplot.ColorGenerator = function(colors) { - colors = colors || $.jqplot.config.defaultColors; - var idx = 0; - - this.next = function () { - if (idx < colors.length) { - return colors[idx++]; - } - else { - idx = 0; - return colors[idx++]; - } - }; - - this.previous = function () { - if (idx > 0) { - return colors[idx--]; - } - else { - idx = colors.length-1; - return colors[idx]; - } - }; - - // get a color by index without advancing pointer. - this.get = function(i) { - var idx = i - colors.length * Math.floor(i/colors.length); - return colors[idx]; - }; - - this.setColors = function(c) { - colors = c; - }; - - this.reset = function() { - idx = 0; - }; - - this.getIndex = function() { - return idx; - }; - - this.setIndex = function(index) { - idx = index; - }; - }; - - // convert a hex color string to rgb string. - // h - 3 or 6 character hex string, with or without leading # - // a - optional alpha - $.jqplot.hex2rgb = function(h, a) { - h = h.replace('#', ''); - if (h.length == 3) { - h = h.charAt(0)+h.charAt(0)+h.charAt(1)+h.charAt(1)+h.charAt(2)+h.charAt(2); - } - var rgb; - rgb = 'rgba('+parseInt(h.slice(0,2), 16)+', '+parseInt(h.slice(2,4), 16)+', '+parseInt(h.slice(4,6), 16); - if (a) { - rgb += ', '+a; - } - rgb += ')'; - return rgb; - }; - - // convert an rgb color spec to a hex spec. ignore any alpha specification. - $.jqplot.rgb2hex = function(s) { - var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/; - var m = s.match(pat); - var h = '#'; - for (var i=1; i<4; i++) { - var temp; - if (m[i].search(/%/) != -1) { - temp = parseInt(255*m[i]/100, 10).toString(16); - if (temp.length == 1) { - temp = '0'+temp; - } - } - else { - temp = parseInt(m[i], 10).toString(16); - if (temp.length == 1) { - temp = '0'+temp; - } - } - h += temp; - } - return h; - }; - - // given a css color spec, return an rgb css color spec - $.jqplot.normalize2rgb = function(s, a) { - if (s.search(/^ *rgba?\(/) != -1) { - return s; - } - else if (s.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/) != -1) { - return $.jqplot.hex2rgb(s, a); - } - else { - throw 'invalid color spec'; - } - }; - - // extract the r, g, b, a color components out of a css color spec. - $.jqplot.getColorComponents = function(s) { - // check to see if a color keyword. - s = $.jqplot.colorKeywordMap[s] || s; - var rgb = $.jqplot.normalize2rgb(s); - var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/; - var m = rgb.match(pat); - var ret = []; - for (var i=1; i<4; i++) { - if (m[i].search(/%/) != -1) { - ret[i-1] = parseInt(255*m[i]/100, 10); - } - else { - ret[i-1] = parseInt(m[i], 10); - } - } - ret[3] = parseFloat(m[4]) ? parseFloat(m[4]) : 1.0; - return ret; - }; - - $.jqplot.colorKeywordMap = { - aliceblue: 'rgb(240, 248, 255)', - antiquewhite: 'rgb(250, 235, 215)', - aqua: 'rgb( 0, 255, 255)', - aquamarine: 'rgb(127, 255, 212)', - azure: 'rgb(240, 255, 255)', - beige: 'rgb(245, 245, 220)', - bisque: 'rgb(255, 228, 196)', - black: 'rgb( 0, 0, 0)', - blanchedalmond: 'rgb(255, 235, 205)', - blue: 'rgb( 0, 0, 255)', - blueviolet: 'rgb(138, 43, 226)', - brown: 'rgb(165, 42, 42)', - burlywood: 'rgb(222, 184, 135)', - cadetblue: 'rgb( 95, 158, 160)', - chartreuse: 'rgb(127, 255, 0)', - chocolate: 'rgb(210, 105, 30)', - coral: 'rgb(255, 127, 80)', - cornflowerblue: 'rgb(100, 149, 237)', - cornsilk: 'rgb(255, 248, 220)', - crimson: 'rgb(220, 20, 60)', - cyan: 'rgb( 0, 255, 255)', - darkblue: 'rgb( 0, 0, 139)', - darkcyan: 'rgb( 0, 139, 139)', - darkgoldenrod: 'rgb(184, 134, 11)', - darkgray: 'rgb(169, 169, 169)', - darkgreen: 'rgb( 0, 100, 0)', - darkgrey: 'rgb(169, 169, 169)', - darkkhaki: 'rgb(189, 183, 107)', - darkmagenta: 'rgb(139, 0, 139)', - darkolivegreen: 'rgb( 85, 107, 47)', - darkorange: 'rgb(255, 140, 0)', - darkorchid: 'rgb(153, 50, 204)', - darkred: 'rgb(139, 0, 0)', - darksalmon: 'rgb(233, 150, 122)', - darkseagreen: 'rgb(143, 188, 143)', - darkslateblue: 'rgb( 72, 61, 139)', - darkslategray: 'rgb( 47, 79, 79)', - darkslategrey: 'rgb( 47, 79, 79)', - darkturquoise: 'rgb( 0, 206, 209)', - darkviolet: 'rgb(148, 0, 211)', - deeppink: 'rgb(255, 20, 147)', - deepskyblue: 'rgb( 0, 191, 255)', - dimgray: 'rgb(105, 105, 105)', - dimgrey: 'rgb(105, 105, 105)', - dodgerblue: 'rgb( 30, 144, 255)', - firebrick: 'rgb(178, 34, 34)', - floralwhite: 'rgb(255, 250, 240)', - forestgreen: 'rgb( 34, 139, 34)', - fuchsia: 'rgb(255, 0, 255)', - gainsboro: 'rgb(220, 220, 220)', - ghostwhite: 'rgb(248, 248, 255)', - gold: 'rgb(255, 215, 0)', - goldenrod: 'rgb(218, 165, 32)', - gray: 'rgb(128, 128, 128)', - grey: 'rgb(128, 128, 128)', - green: 'rgb( 0, 128, 0)', - greenyellow: 'rgb(173, 255, 47)', - honeydew: 'rgb(240, 255, 240)', - hotpink: 'rgb(255, 105, 180)', - indianred: 'rgb(205, 92, 92)', - indigo: 'rgb( 75, 0, 130)', - ivory: 'rgb(255, 255, 240)', - khaki: 'rgb(240, 230, 140)', - lavender: 'rgb(230, 230, 250)', - lavenderblush: 'rgb(255, 240, 245)', - lawngreen: 'rgb(124, 252, 0)', - lemonchiffon: 'rgb(255, 250, 205)', - lightblue: 'rgb(173, 216, 230)', - lightcoral: 'rgb(240, 128, 128)', - lightcyan: 'rgb(224, 255, 255)', - lightgoldenrodyellow: 'rgb(250, 250, 210)', - lightgray: 'rgb(211, 211, 211)', - lightgreen: 'rgb(144, 238, 144)', - lightgrey: 'rgb(211, 211, 211)', - lightpink: 'rgb(255, 182, 193)', - lightsalmon: 'rgb(255, 160, 122)', - lightseagreen: 'rgb( 32, 178, 170)', - lightskyblue: 'rgb(135, 206, 250)', - lightslategray: 'rgb(119, 136, 153)', - lightslategrey: 'rgb(119, 136, 153)', - lightsteelblue: 'rgb(176, 196, 222)', - lightyellow: 'rgb(255, 255, 224)', - lime: 'rgb( 0, 255, 0)', - limegreen: 'rgb( 50, 205, 50)', - linen: 'rgb(250, 240, 230)', - magenta: 'rgb(255, 0, 255)', - maroon: 'rgb(128, 0, 0)', - mediumaquamarine: 'rgb(102, 205, 170)', - mediumblue: 'rgb( 0, 0, 205)', - mediumorchid: 'rgb(186, 85, 211)', - mediumpurple: 'rgb(147, 112, 219)', - mediumseagreen: 'rgb( 60, 179, 113)', - mediumslateblue: 'rgb(123, 104, 238)', - mediumspringgreen: 'rgb( 0, 250, 154)', - mediumturquoise: 'rgb( 72, 209, 204)', - mediumvioletred: 'rgb(199, 21, 133)', - midnightblue: 'rgb( 25, 25, 112)', - mintcream: 'rgb(245, 255, 250)', - mistyrose: 'rgb(255, 228, 225)', - moccasin: 'rgb(255, 228, 181)', - navajowhite: 'rgb(255, 222, 173)', - navy: 'rgb( 0, 0, 128)', - oldlace: 'rgb(253, 245, 230)', - olive: 'rgb(128, 128, 0)', - olivedrab: 'rgb(107, 142, 35)', - orange: 'rgb(255, 165, 0)', - orangered: 'rgb(255, 69, 0)', - orchid: 'rgb(218, 112, 214)', - palegoldenrod: 'rgb(238, 232, 170)', - palegreen: 'rgb(152, 251, 152)', - paleturquoise: 'rgb(175, 238, 238)', - palevioletred: 'rgb(219, 112, 147)', - papayawhip: 'rgb(255, 239, 213)', - peachpuff: 'rgb(255, 218, 185)', - peru: 'rgb(205, 133, 63)', - pink: 'rgb(255, 192, 203)', - plum: 'rgb(221, 160, 221)', - powderblue: 'rgb(176, 224, 230)', - purple: 'rgb(128, 0, 128)', - red: 'rgb(255, 0, 0)', - rosybrown: 'rgb(188, 143, 143)', - royalblue: 'rgb( 65, 105, 225)', - saddlebrown: 'rgb(139, 69, 19)', - salmon: 'rgb(250, 128, 114)', - sandybrown: 'rgb(244, 164, 96)', - seagreen: 'rgb( 46, 139, 87)', - seashell: 'rgb(255, 245, 238)', - sienna: 'rgb(160, 82, 45)', - silver: 'rgb(192, 192, 192)', - skyblue: 'rgb(135, 206, 235)', - slateblue: 'rgb(106, 90, 205)', - slategray: 'rgb(112, 128, 144)', - slategrey: 'rgb(112, 128, 144)', - snow: 'rgb(255, 250, 250)', - springgreen: 'rgb( 0, 255, 127)', - steelblue: 'rgb( 70, 130, 180)', - tan: 'rgb(210, 180, 140)', - teal: 'rgb( 0, 128, 128)', - thistle: 'rgb(216, 191, 216)', - tomato: 'rgb(255, 99, 71)', - turquoise: 'rgb( 64, 224, 208)', - violet: 'rgb(238, 130, 238)', - wheat: 'rgb(245, 222, 179)', - white: 'rgb(255, 255, 255)', - whitesmoke: 'rgb(245, 245, 245)', - yellow: 'rgb(255, 255, 0)', - yellowgreen: 'rgb(154, 205, 50)' - }; - - - - // class: $.jqplot.AxisLabelRenderer - // Renderer to place labels on the axes. - $.jqplot.AxisLabelRenderer = function(options) { - // Group: Properties - $.jqplot.ElemContainer.call(this); - // name of the axis associated with this tick - this.axis; - // prop: show - // wether or not to show the tick (mark and label). - this.show = true; - // prop: label - // The text or html for the label. - this.label = ''; - this.fontFamily = null; - this.fontSize = null; - this.textColor = null; - this._elem; - // prop: escapeHTML - // true to escape HTML entities in the label. - this.escapeHTML = false; - - $.extend(true, this, options); - }; - - $.jqplot.AxisLabelRenderer.prototype = new $.jqplot.ElemContainer(); - $.jqplot.AxisLabelRenderer.prototype.constructor = $.jqplot.AxisLabelRenderer; - - $.jqplot.AxisLabelRenderer.prototype.init = function(options) { - $.extend(true, this, options); - }; - - $.jqplot.AxisLabelRenderer.prototype.draw = function(ctx, plot) { - // Memory Leaks patch - if (this._elem) { - this._elem.emptyForce(); - this._elem = null; - } - - this._elem = $('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>'); - - if (Number(this.label)) { - this._elem.css('white-space', 'nowrap'); - } - - if (!this.escapeHTML) { - this._elem.html(this.label); - } - else { - this._elem.text(this.label); - } - if (this.fontFamily) { - this._elem.css('font-family', this.fontFamily); - } - if (this.fontSize) { - this._elem.css('font-size', this.fontSize); - } - if (this.textColor) { - this._elem.css('color', this.textColor); - } - - return this._elem; - }; - - $.jqplot.AxisLabelRenderer.prototype.pack = function() { - }; - - // class: $.jqplot.AxisTickRenderer - // A "tick" object showing the value of a tick/gridline on the plot. - $.jqplot.AxisTickRenderer = function(options) { - // Group: Properties - $.jqplot.ElemContainer.call(this); - // prop: mark - // tick mark on the axis. One of 'inside', 'outside', 'cross', '' or null. - this.mark = 'outside'; - // name of the axis associated with this tick - this.axis; - // prop: showMark - // wether or not to show the mark on the axis. - this.showMark = true; - // prop: showGridline - // wether or not to draw the gridline on the grid at this tick. - this.showGridline = true; - // prop: isMinorTick - // if this is a minor tick. - this.isMinorTick = false; - // prop: size - // Length of the tick beyond the grid in pixels. - // DEPRECATED: This has been superceeded by markSize - this.size = 4; - // prop: markSize - // Length of the tick marks in pixels. For 'cross' style, length - // will be stoked above and below axis, so total length will be twice this. - this.markSize = 6; - // prop: show - // wether or not to show the tick (mark and label). - // Setting this to false requires more testing. It is recommended - // to set showLabel and showMark to false instead. - this.show = true; - // prop: showLabel - // wether or not to show the label. - this.showLabel = true; - this.label = null; - this.value = null; - this._styles = {}; - // prop: formatter - // A class of a formatter for the tick text. sprintf by default. - this.formatter = $.jqplot.DefaultTickFormatter; - // prop: prefix - // String to prepend to the tick label. - // Prefix is prepended to the formatted tick label. - this.prefix = ''; - // prop: suffix - // String to append to the tick label. - // Suffix is appended to the formatted tick label. - this.suffix = ''; - // prop: formatString - // string passed to the formatter. - this.formatString = ''; - // prop: fontFamily - // css spec for the font-family css attribute. - this.fontFamily; - // prop: fontSize - // css spec for the font-size css attribute. - this.fontSize; - // prop: textColor - // css spec for the color attribute. - this.textColor; - // prop: escapeHTML - // true to escape HTML entities in the label. - this.escapeHTML = false; - this._elem; - this._breakTick = false; - - $.extend(true, this, options); - }; - - $.jqplot.AxisTickRenderer.prototype.init = function(options) { - $.extend(true, this, options); - }; - - $.jqplot.AxisTickRenderer.prototype = new $.jqplot.ElemContainer(); - $.jqplot.AxisTickRenderer.prototype.constructor = $.jqplot.AxisTickRenderer; - - $.jqplot.AxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) { - this.value = value; - this.axis = axisName; - if (isMinor) { - this.isMinorTick = true; - } - return this; - }; - - $.jqplot.AxisTickRenderer.prototype.draw = function() { - if (this.label === null) { - this.label = this.prefix + this.formatter(this.formatString, this.value) + this.suffix; - } - var style = {position: 'absolute'}; - if (Number(this.label)) { - style['whitSpace'] = 'nowrap'; - } - - // Memory Leaks patch - if (this._elem) { - this._elem.emptyForce(); - this._elem = null; - } - - this._elem = $(document.createElement('div')); - this._elem.addClass("jqplot-"+this.axis+"-tick"); - - if (!this.escapeHTML) { - this._elem.html(this.label); - } - else { - this._elem.text(this.label); - } - - this._elem.css(style); - - for (var s in this._styles) { - this._elem.css(s, this._styles[s]); - } - if (this.fontFamily) { - this._elem.css('font-family', this.fontFamily); - } - if (this.fontSize) { - this._elem.css('font-size', this.fontSize); - } - if (this.textColor) { - this._elem.css('color', this.textColor); - } - if (this._breakTick) { - this._elem.addClass('jqplot-breakTick'); - } - - return this._elem; - }; - - $.jqplot.DefaultTickFormatter = function (format, val) { - if (typeof val == 'number') { - if (!format) { - format = $.jqplot.config.defaultTickFormatString; - } - return $.jqplot.sprintf(format, val); - } - else { - return String(val); - } - }; - - $.jqplot.PercentTickFormatter = function (format, val) { - if (typeof val == 'number') { - val = 100 * val; - if (!format) { - format = $.jqplot.config.defaultTickFormatString; - } - return $.jqplot.sprintf(format, val); - } - else { - return String(val); - } - }; - - $.jqplot.AxisTickRenderer.prototype.pack = function() { - }; - - // Class: $.jqplot.CanvasGridRenderer - // The default jqPlot grid renderer, creating a grid on a canvas element. - // The renderer has no additional options beyond the <Grid> class. - $.jqplot.CanvasGridRenderer = function(){ - this.shadowRenderer = new $.jqplot.ShadowRenderer(); - }; - - // called with context of Grid object - $.jqplot.CanvasGridRenderer.prototype.init = function(options) { - this._ctx; - $.extend(true, this, options); - // set the shadow renderer options - var sopts = {lineJoin:'miter', lineCap:'round', fill:false, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.shadowWidth, closePath:false, strokeStyle:this.shadowColor}; - this.renderer.shadowRenderer.init(sopts); - }; - - // called with context of Grid. - $.jqplot.CanvasGridRenderer.prototype.createElement = function(plot) { - var elem; - // Memory Leaks patch - if (this._elem) { - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - elem = this._elem.get(0); - window.G_vmlCanvasManager.uninitElement(elem); - elem = null; - } - - this._elem.emptyForce(); - this._elem = null; - } - - elem = plot.canvasManager.getCanvas(); - - var w = this._plotDimensions.width; - var h = this._plotDimensions.height; - elem.width = w; - elem.height = h; - this._elem = $(elem); - this._elem.addClass('jqplot-grid-canvas'); - this._elem.css({ position: 'absolute', left: 0, top: 0 }); - - elem = plot.canvasManager.initCanvas(elem); - - this._top = this._offsets.top; - this._bottom = h - this._offsets.bottom; - this._left = this._offsets.left; - this._right = w - this._offsets.right; - this._width = this._right - this._left; - this._height = this._bottom - this._top; - // avoid memory leak - elem = null; - return this._elem; - }; - - $.jqplot.CanvasGridRenderer.prototype.draw = function() { - this._ctx = this._elem.get(0).getContext("2d"); - var ctx = this._ctx; - var axes = this._axes; - // Add the grid onto the grid canvas. This is the bottom most layer. - ctx.save(); - ctx.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height); - ctx.fillStyle = this.backgroundColor || this.background; - ctx.fillRect(this._left, this._top, this._width, this._height); - - ctx.save(); - ctx.lineJoin = 'miter'; - ctx.lineCap = 'butt'; - ctx.lineWidth = this.gridLineWidth; - ctx.strokeStyle = this.gridLineColor; - var b, e, s, m; - var ax = ['xaxis', 'yaxis', 'x2axis', 'y2axis']; - for (var i=4; i>0; i--) { - var name = ax[i-1]; - var axis = axes[name]; - var ticks = axis._ticks; - var numticks = ticks.length; - if (axis.show) { - if (axis.drawBaseline) { - var bopts = {}; - if (axis.baselineWidth !== null) { - bopts.lineWidth = axis.baselineWidth; - } - if (axis.baselineColor !== null) { - bopts.strokeStyle = axis.baselineColor; - } - switch (name) { - case 'xaxis': - drawLine (this._left, this._bottom, this._right, this._bottom, bopts); - break; - case 'yaxis': - drawLine (this._left, this._bottom, this._left, this._top, bopts); - break; - case 'x2axis': - drawLine (this._left, this._bottom, this._right, this._bottom, bopts); - break; - case 'y2axis': - drawLine (this._right, this._bottom, this._right, this._top, bopts); - break; - } - } - for (var j=numticks; j>0; j--) { - var t = ticks[j-1]; - if (t.show) { - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (name) { - case 'xaxis': - // draw the grid line if we should - if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) { - drawLine(pos, this._top, pos, this._bottom); - } - // draw the mark - if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (m) { - case 'outside': - b = this._bottom; - e = this._bottom+s; - break; - case 'inside': - b = this._bottom-s; - e = this._bottom; - break; - case 'cross': - b = this._bottom-s; - e = this._bottom+s; - break; - default: - b = this._bottom; - e = this._bottom+s; - break; - } - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false}); - } - // draw the line - drawLine(pos, b, pos, e); - } - break; - case 'yaxis': - // draw the grid line - if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) { - drawLine(this._right, pos, this._left, pos); - } - // draw the mark - if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (m) { - case 'outside': - b = this._left-s; - e = this._left; - break; - case 'inside': - b = this._left; - e = this._left+s; - break; - case 'cross': - b = this._left-s; - e = this._left+s; - break; - default: - b = this._left-s; - e = this._left; - break; - } - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); - } - drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); - } - break; - case 'x2axis': - // draw the grid line - if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) { - drawLine(pos, this._bottom, pos, this._top); - } - // draw the mark - if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (m) { - case 'outside': - b = this._top-s; - e = this._top; - break; - case 'inside': - b = this._top; - e = this._top+s; - break; - case 'cross': - b = this._top-s; - e = this._top+s; - break; - default: - b = this._top-s; - e = this._top; - break; - } - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false}); - } - drawLine(pos, b, pos, e); - } - break; - case 'y2axis': - // draw the grid line - if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) { - drawLine(this._left, pos, this._right, pos); - } - // draw the mark - if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (m) { - case 'outside': - b = this._right; - e = this._right+s; - break; - case 'inside': - b = this._right-s; - e = this._right; - break; - case 'cross': - b = this._right-s; - e = this._right+s; - break; - default: - b = this._right; - e = this._right+s; - break; - } - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); - } - drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); - } - break; - default: - break; - } - } - } - t = null; - } - axis = null; - ticks = null; - } - // Now draw grid lines for additional y axes - ////// - // TO DO: handle yMidAxis - ////// - ax = ['y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis']; - for (var i=7; i>0; i--) { - var axis = axes[ax[i-1]]; - var ticks = axis._ticks; - if (axis.show) { - var tn = ticks[axis.numberTicks-1]; - var t0 = ticks[0]; - var left = axis.getLeft(); - var points = [[left, tn.getTop() + tn.getHeight()/2], [left, t0.getTop() + t0.getHeight()/2 + 1.0]]; - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', fill:false, closePath:false}); - } - // draw the line - drawLine(points[0][0], points[0][1], points[1][0], points[1][1], {lineCap:'butt', strokeStyle:axis.borderColor, lineWidth:axis.borderWidth}); - // draw the tick marks - for (var j=ticks.length; j>0; j--) { - var t = ticks[j-1]; - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - if (t.showMark && t.mark) { - switch (m) { - case 'outside': - b = left; - e = left+s; - break; - case 'inside': - b = left-s; - e = left; - break; - case 'cross': - b = left-s; - e = left+s; - break; - default: - b = left; - e = left+s; - break; - } - points = [[b,pos], [e,pos]]; - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); - } - // draw the line - drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); - } - t = null; - } - t0 = null; - } - axis = null; - ticks = null; - } - - ctx.restore(); - - function drawLine(bx, by, ex, ey, opts) { - ctx.save(); - opts = opts || {}; - if (opts.lineWidth == null || opts.lineWidth != 0){ - $.extend(true, ctx, opts); - ctx.beginPath(); - ctx.moveTo(bx, by); - ctx.lineTo(ex, ey); - ctx.stroke(); - ctx.restore(); - } - } - - if (this.shadow) { - var points = [[this._left, this._bottom], [this._right, this._bottom], [this._right, this._top]]; - this.renderer.shadowRenderer.draw(ctx, points); - } - // Now draw border around grid. Use axis border definitions. start at - // upper left and go clockwise. - if (this.borderWidth != 0 && this.drawBorder) { - drawLine (this._left, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth}); - drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth}); - drawLine (this._right, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth}); - drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth}); - } - // ctx.lineWidth = this.borderWidth; - // ctx.strokeStyle = this.borderColor; - // ctx.strokeRect(this._left, this._top, this._width, this._height); - - ctx.restore(); - ctx = null; - axes = null; - }; - - // Class: $.jqplot.DivTitleRenderer - // The default title renderer for jqPlot. This class has no options beyond the <Title> class. - $.jqplot.DivTitleRenderer = function() { - }; - - $.jqplot.DivTitleRenderer.prototype.init = function(options) { - $.extend(true, this, options); - }; - - $.jqplot.DivTitleRenderer.prototype.draw = function() { - // Memory Leaks patch - if (this._elem) { - this._elem.emptyForce(); - this._elem = null; - } - - var r = this.renderer; - var elem = document.createElement('div'); - this._elem = $(elem); - this._elem.addClass('jqplot-title'); - - if (!this.text) { - this.show = false; - this._elem.height(0); - this._elem.width(0); - } - else if (this.text) { - var color; - if (this.color) { - color = this.color; - } - else if (this.textColor) { - color = this.textColor; - } - - // don't trust that a stylesheet is present, set the position. - var styles = {position:'absolute', top:'0px', left:'0px'}; - - if (this._plotWidth) { - styles['width'] = this._plotWidth+'px'; - } - if (this.fontSize) { - styles['fontSize'] = this.fontSize; - } - if (typeof this.textAlign === 'string') { - styles['textAlign'] = this.textAlign; - } - else { - styles['textAlign'] = 'center'; - } - if (color) { - styles['color'] = color; - } - if (this.paddingBottom) { - styles['paddingBottom'] = this.paddingBottom; - } - if (this.fontFamily) { - styles['fontFamily'] = this.fontFamily; - } - - this._elem.css(styles); - if (this.escapeHtml) { - this._elem.text(this.text); - } - else { - this._elem.html(this.text); - } - - - // styletext += (this._plotWidth) ? 'width:'+this._plotWidth+'px;' : ''; - // styletext += (this.fontSize) ? 'font-size:'+this.fontSize+';' : ''; - // styletext += (this.textAlign) ? 'text-align:'+this.textAlign+';' : 'text-align:center;'; - // styletext += (color) ? 'color:'+color+';' : ''; - // styletext += (this.paddingBottom) ? 'padding-bottom:'+this.paddingBottom+';' : ''; - // this._elem = $('<div class="jqplot-title" style="'+styletext+'">'+this.text+'</div>'); - // if (this.fontFamily) { - // this._elem.css('font-family', this.fontFamily); - // } - } - - elem = null; - - return this._elem; - }; - - $.jqplot.DivTitleRenderer.prototype.pack = function() { - // nothing to do here - }; - - - var dotlen = 0.1; - - $.jqplot.LinePattern = function (ctx, pattern) { - - var defaultLinePatterns = { - dotted: [ dotlen, $.jqplot.config.dotGapLength ], - dashed: [ $.jqplot.config.dashLength, $.jqplot.config.gapLength ], - solid: null - }; - - if (typeof pattern === 'string') { - if (pattern[0] === '.' || pattern[0] === '-') { - var s = pattern; - pattern = []; - for (var i=0, imax=s.length; i<imax; i++) { - if (s[i] === '.') { - pattern.push( dotlen ); - } - else if (s[i] === '-') { - pattern.push( $.jqplot.config.dashLength ); - } - else { - continue; - } - pattern.push( $.jqplot.config.gapLength ); - } - } - else { - pattern = defaultLinePatterns[pattern]; - } - } - - if (!(pattern && pattern.length)) { - return ctx; - } - - var patternIndex = 0; - var patternDistance = pattern[0]; - var px = 0; - var py = 0; - var pathx0 = 0; - var pathy0 = 0; - - var moveTo = function (x, y) { - ctx.moveTo( x, y ); - px = x; - py = y; - pathx0 = x; - pathy0 = y; - }; - - var lineTo = function (x, y) { - var scale = ctx.lineWidth; - var dx = x - px; - var dy = y - py; - var dist = Math.sqrt(dx*dx+dy*dy); - if ((dist > 0) && (scale > 0)) { - dx /= dist; - dy /= dist; - while (true) { - var dp = scale * patternDistance; - if (dp < dist) { - px += dp * dx; - py += dp * dy; - if ((patternIndex & 1) == 0) { - ctx.lineTo( px, py ); - } - else { - ctx.moveTo( px, py ); - } - dist -= dp; - patternIndex++; - if (patternIndex >= pattern.length) { - patternIndex = 0; - } - patternDistance = pattern[patternIndex]; - } - else { - px = x; - py = y; - if ((patternIndex & 1) == 0) { - ctx.lineTo( px, py ); - } - else { - ctx.moveTo( px, py ); - } - patternDistance -= dist / scale; - break; - } - } - } - }; - - var beginPath = function () { - ctx.beginPath(); - }; - - var closePath = function () { - lineTo( pathx0, pathy0 ); - }; - - return { - moveTo: moveTo, - lineTo: lineTo, - beginPath: beginPath, - closePath: closePath - }; - }; - - // Class: $.jqplot.LineRenderer - // The default line renderer for jqPlot, this class has no options beyond the <Series> class. - // Draws series as a line. - $.jqplot.LineRenderer = function(){ - this.shapeRenderer = new $.jqplot.ShapeRenderer(); - this.shadowRenderer = new $.jqplot.ShadowRenderer(); - }; - - // called with scope of series. - $.jqplot.LineRenderer.prototype.init = function(options, plot) { - // Group: Properties - // - options = options || {}; - this._type='line'; - this.renderer.animation = { - show: false, - direction: 'left', - speed: 2500, - _supported: true - }; - // prop: smooth - // True to draw a smoothed (interpolated) line through the data points - // with automatically computed number of smoothing points. - // Set to an integer number > 2 to specify number of smoothing points - // to use between each data point. - this.renderer.smooth = false; // true or a number > 2 for smoothing. - this.renderer.tension = null; // null to auto compute or a number typically > 6. Fewer points requires higher tension. - // prop: constrainSmoothing - // True to use a more accurate smoothing algorithm that will - // not overshoot any data points. False to allow overshoot but - // produce a smoother looking line. - this.renderer.constrainSmoothing = true; - // this is smoothed data in grid coordinates, like gridData - this.renderer._smoothedData = []; - // this is smoothed data in plot units (plot coordinates), like plotData. - this.renderer._smoothedPlotData = []; - this.renderer._hiBandGridData = []; - this.renderer._lowBandGridData = []; - this.renderer._hiBandSmoothedData = []; - this.renderer._lowBandSmoothedData = []; - - // prop: bandData - // Data used to draw error bands or confidence intervals above/below a line. - // - // bandData can be input in 3 forms. jqPlot will figure out which is the - // low band line and which is the high band line for all forms: - // - // A 2 dimensional array like [[yl1, yl2, ...], [yu1, yu2, ...]] where - // [yl1, yl2, ...] are y values of the lower line and - // [yu1, yu2, ...] are y values of the upper line. - // In this case there must be the same number of y data points as data points - // in the series and the bands will inherit the x values of the series. - // - // A 2 dimensional array like [[[xl1, yl1], [xl2, yl2], ...], [[xh1, yh1], [xh2, yh2], ...]] - // where [xl1, yl1] are x,y data points for the lower line and - // [xh1, yh1] are x,y data points for the high line. - // x values do not have to correspond to the x values of the series and can - // be of any arbitrary length. - // - // Can be of form [[yl1, yu1], [yl2, yu2], [yl3, yu3], ...] where - // there must be 3 or more arrays and there must be the same number of arrays - // as there are data points in the series. In this case, - // [yl1, yu1] specifies the lower and upper y values for the 1st - // data point and so on. The bands will inherit the x - // values from the series. - this.renderer.bandData = []; - - // Group: bands - // Banding around line, e.g error bands or confidence intervals. - this.renderer.bands = { - // prop: show - // true to show the bands. If bandData or interval is - // supplied, show will be set to true by default. - show: false, - hiData: [], - lowData: [], - // prop: color - // color of lines at top and bottom of bands [default: series color]. - color: this.color, - // prop: showLines - // True to show lines at top and bottom of bands [default: false]. - showLines: false, - // prop: fill - // True to fill area between bands [default: true]. - fill: true, - // prop: fillColor - // css color spec for filled area. [default: series color]. - fillColor: null, - _min: null, - _max: null, - // prop: interval - // User specified interval above and below line for bands [default: '3%'']. - // Can be a value like 3 or a string like '3%' - // or an upper/lower array like [1, -2] or ['2%', '-1.5%'] - interval: '3%' - }; - - - var lopts = {highlightMouseOver: options.highlightMouseOver, highlightMouseDown: options.highlightMouseDown, highlightColor: options.highlightColor}; - - delete (options.highlightMouseOver); - delete (options.highlightMouseDown); - delete (options.highlightColor); - - $.extend(true, this.renderer, options); - - this.renderer.options = options; - - // if we are given some band data, and bands aren't explicity set to false in options, turn them on. - if (this.renderer.bandData.length > 1 && (!options.bands || options.bands.show == null)) { - this.renderer.bands.show = true; - } - - // if we are given an interval, and bands aren't explicity set to false in options, turn them on. - else if (options.bands && options.bands.show == null && options.bands.interval != null) { - this.renderer.bands.show = true; - } - - // if plot is filled, turn off bands. - if (this.fill) { - this.renderer.bands.show = false; - } - - if (this.renderer.bands.show) { - this.renderer.initBands.call(this, this.renderer.options, plot); - } - - - // smoothing is not compatible with stacked lines, disable - if (this._stack) { - this.renderer.smooth = false; - } - - // set the shape renderer options - var opts = {lineJoin:this.lineJoin, lineCap:this.lineCap, fill:this.fill, isarc:false, strokeStyle:this.color, fillStyle:this.fillColor, lineWidth:this.lineWidth, linePattern:this.linePattern, closePath:this.fill}; - this.renderer.shapeRenderer.init(opts); - - var shadow_offset = options.shadowOffset; - // set the shadow renderer options - if (shadow_offset == null) { - // scale the shadowOffset to the width of the line. - if (this.lineWidth > 2.5) { - shadow_offset = 1.25 * (1 + (Math.atan((this.lineWidth/2.5))/0.785398163 - 1)*0.6); - // var shadow_offset = this.shadowOffset; - } - // for skinny lines, don't make such a big shadow. - else { - shadow_offset = 1.25 * Math.atan((this.lineWidth/2.5))/0.785398163; - } - } - - var sopts = {lineJoin:this.lineJoin, lineCap:this.lineCap, fill:this.fill, isarc:false, angle:this.shadowAngle, offset:shadow_offset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.lineWidth, linePattern:this.linePattern, closePath:this.fill}; - this.renderer.shadowRenderer.init(sopts); - this._areaPoints = []; - this._boundingBox = [[],[]]; - - if (!this.isTrendline && this.fill || this.renderer.bands.show) { - // Group: Properties - // - // prop: highlightMouseOver - // True to highlight area on a filled plot when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over an area on a filled plot. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColor - // color to use when highlighting an area on a filled plot. - this.highlightColor = null; - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (lopts.highlightMouseDown && lopts.highlightMouseOver == null) { - lopts.highlightMouseOver = false; - } - - $.extend(true, this, {highlightMouseOver: lopts.highlightMouseOver, highlightMouseDown: lopts.highlightMouseDown, highlightColor: lopts.highlightColor}); - - if (!this.highlightColor) { - var fc = (this.renderer.bands.show) ? this.renderer.bands.fillColor : this.fillColor; - this.highlightColor = $.jqplot.computeHighlightColors(fc); - } - // turn off (disable) the highlighter plugin - if (this.highlighter) { - this.highlighter.show = false; - } - } - - if (!this.isTrendline && plot) { - plot.plugins.lineRenderer = {}; - plot.postInitHooks.addOnce(postInit); - plot.postDrawHooks.addOnce(postPlotDraw); - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); - plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); - plot.eventListenerHooks.addOnce('jqplotClick', handleClick); - plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); - } - - }; - - $.jqplot.LineRenderer.prototype.initBands = function(options, plot) { - // use bandData if no data specified in bands option - //var bd = this.renderer.bandData; - var bd = options.bandData || []; - var bands = this.renderer.bands; - bands.hiData = []; - bands.lowData = []; - var data = this.data; - bands._max = null; - bands._min = null; - // If 2 arrays, and each array greater than 2 elements, assume it is hi and low data bands of y values. - if (bd.length == 2) { - // Do we have an array of x,y values? - // like [[[1,1], [2,4], [3,3]], [[1,3], [2,6], [3,5]]] - if ($.isArray(bd[0][0])) { - // since an arbitrary array of points, spin through all of them to determine max and min lines. - - var p; - var bdminidx = 0, bdmaxidx = 0; - for (var i = 0, l = bd[0].length; i<l; i++) { - p = bd[0][i]; - if ((p[1] != null && p[1] > bands._max) || bands._max == null) { - bands._max = p[1]; - } - if ((p[1] != null && p[1] < bands._min) || bands._min == null) { - bands._min = p[1]; - } - } - for (var i = 0, l = bd[1].length; i<l; i++) { - p = bd[1][i]; - if ((p[1] != null && p[1] > bands._max) || bands._max == null) { - bands._max = p[1]; - bdmaxidx = 1; - } - if ((p[1] != null && p[1] < bands._min) || bands._min == null) { - bands._min = p[1]; - bdminidx = 1; - } - } - - if (bdmaxidx === bdminidx) { - bands.show = false; - } - - bands.hiData = bd[bdmaxidx]; - bands.lowData = bd[bdminidx]; - } - // else data is arrays of y values - // like [[1,4,3], [3,6,5]] - // must have same number of band data points as points in series - else if (bd[0].length === data.length && bd[1].length === data.length) { - var hi = (bd[0][0] > bd[1][0]) ? 0 : 1; - var low = (hi) ? 0 : 1; - for (var i=0, l=data.length; i < l; i++) { - bands.hiData.push([data[i][0], bd[hi][i]]); - bands.lowData.push([data[i][0], bd[low][i]]); - } - } - - // we don't have proper data array, don't show bands. - else { - bands.show = false; - } - } - - // if more than 2 arrays, have arrays of [ylow, yhi] values. - // note, can't distinguish case of [[ylow, yhi], [ylow, yhi]] from [[ylow, ylow], [yhi, yhi]] - // this is assumed to be of the latter form. - else if (bd.length > 2 && !$.isArray(bd[0][0])) { - var hi = (bd[0][0] > bd[0][1]) ? 0 : 1; - var low = (hi) ? 0 : 1; - for (var i=0, l=bd.length; i<l; i++) { - bands.hiData.push([data[i][0], bd[i][hi]]); - bands.lowData.push([data[i][0], bd[i][low]]); - } - } - - // don't have proper data, auto calculate - else { - var intrv = bands.interval; - var a = null; - var b = null; - var afunc = null; - var bfunc = null; - - if ($.isArray(intrv)) { - a = intrv[0]; - b = intrv[1]; - } - else { - a = intrv; - } - - if (isNaN(a)) { - // we have a string - if (a.charAt(a.length - 1) === '%') { - afunc = 'multiply'; - a = parseFloat(a)/100 + 1; - } - } - - else { - a = parseFloat(a); - afunc = 'add'; - } - - if (b !== null && isNaN(b)) { - // we have a string - if (b.charAt(b.length - 1) === '%') { - bfunc = 'multiply'; - b = parseFloat(b)/100 + 1; - } - } - - else if (b !== null) { - b = parseFloat(b); - bfunc = 'add'; - } - - if (a !== null) { - if (b === null) { - b = -a; - bfunc = afunc; - if (bfunc === 'multiply') { - b += 2; - } - } - - // make sure a always applies to hi band. - if (a < b) { - var temp = a; - a = b; - b = temp; - temp = afunc; - afunc = bfunc; - bfunc = temp; - } - - for (var i=0, l = data.length; i < l; i++) { - switch (afunc) { - case 'add': - bands.hiData.push([data[i][0], data[i][1] + a]); - break; - case 'multiply': - bands.hiData.push([data[i][0], data[i][1] * a]); - break; - } - switch (bfunc) { - case 'add': - bands.lowData.push([data[i][0], data[i][1] + b]); - break; - case 'multiply': - bands.lowData.push([data[i][0], data[i][1] * b]); - break; - } - } - } - - else { - bands.show = false; - } - } - - var hd = bands.hiData; - var ld = bands.lowData; - for (var i = 0, l = hd.length; i<l; i++) { - if ((hd[i][1] != null && hd[i][1] > bands._max) || bands._max == null) { - bands._max = hd[i][1]; - } - } - for (var i = 0, l = ld.length; i<l; i++) { - if ((ld[i][1] != null && ld[i][1] < bands._min) || bands._min == null) { - bands._min = ld[i][1]; - } - } - - // one last check for proper data - // these don't apply any more since allowing arbitrary x,y values - // if (bands.hiData.length != bands.lowData.length) { - // bands.show = false; - // } - - // if (bands.hiData.length != this.data.length) { - // bands.show = false; - // } - - if (bands.fillColor === null) { - var c = $.jqplot.getColorComponents(bands.color); - // now adjust alpha to differentiate fill - c[3] = c[3] * 0.5; - bands.fillColor = 'rgba(' + c[0] +', '+ c[1] +', '+ c[2] +', '+ c[3] + ')'; - } - }; - - function getSteps (d, f) { - return (3.4182054+f) * Math.pow(d, -0.3534992); - } - - function computeSteps (d1, d2) { - var s = Math.sqrt(Math.pow((d2[0]- d1[0]), 2) + Math.pow ((d2[1] - d1[1]), 2)); - return 5.7648 * Math.log(s) + 7.4456; - } - - function tanh (x) { - var a = (Math.exp(2*x) - 1) / (Math.exp(2*x) + 1); - return a; - } - - ////////// - // computeConstrainedSmoothedData - // An implementation of the constrained cubic spline interpolation - // method as presented in: - // - // Kruger, CJC, Constrained Cubic Spine Interpolation for Chemical Engineering Applications - // http://www.korf.co.uk/spline.pdf - // - // The implementation below borrows heavily from the sample Visual Basic - // implementation by CJC Kruger found in http://www.korf.co.uk/spline.xls - // - ///////// - - // called with scope of series - function computeConstrainedSmoothedData (gd) { - var smooth = this.renderer.smooth; - var dim = this.canvas.getWidth(); - var xp = this._xaxis.series_p2u; - var yp = this._yaxis.series_p2u; - var steps =null; - var _steps = null; - var dist = gd.length/dim; - var _smoothedData = []; - var _smoothedPlotData = []; - - if (!isNaN(parseFloat(smooth))) { - steps = parseFloat(smooth); - } - else { - steps = getSteps(dist, 0.5); - } - - var yy = []; - var xx = []; - - for (var i=0, l = gd.length; i<l; i++) { - yy.push(gd[i][1]); - xx.push(gd[i][0]); - } - - function dxx(x1, x0) { - if (x1 - x0 == 0) { - return Math.pow(10,10); - } - else { - return x1 - x0; - } - } - - var A, B, C, D; - // loop through each line segment. Have # points - 1 line segments. Nmber segments starting at 1. - var nmax = gd.length - 1; - for (var num = 1, gdl = gd.length; num<gdl; num++) { - var gxx = []; - var ggxx = []; - // point at each end of segment. - for (var j = 0; j < 2; j++) { - var i = num - 1 + j; // point number, 0 to # points. - - if (i == 0 || i == nmax) { - gxx[j] = Math.pow(10, 10); - } - else if (yy[i+1] - yy[i] == 0 || yy[i] - yy[i-1] == 0) { - gxx[j] = 0; - } - else if (((xx[i+1] - xx[i]) / (yy[i+1] - yy[i]) + (xx[i] - xx[i-1]) / (yy[i] - yy[i-1])) == 0 ) { - gxx[j] = 0; - } - else if ( (yy[i+1] - yy[i]) * (yy[i] - yy[i-1]) < 0 ) { - gxx[j] = 0; - } - - else { - gxx[j] = 2 / (dxx(xx[i + 1], xx[i]) / (yy[i + 1] - yy[i]) + dxx(xx[i], xx[i - 1]) / (yy[i] - yy[i - 1])); - } - } - - // Reset first derivative (slope) at first and last point - if (num == 1) { - // First point has 0 2nd derivative - gxx[0] = 3 / 2 * (yy[1] - yy[0]) / dxx(xx[1], xx[0]) - gxx[1] / 2; - } - else if (num == nmax) { - // Last point has 0 2nd derivative - gxx[1] = 3 / 2 * (yy[nmax] - yy[nmax - 1]) / dxx(xx[nmax], xx[nmax - 1]) - gxx[0] / 2; - } - - // Calc second derivative at points - ggxx[0] = -2 * (gxx[1] + 2 * gxx[0]) / dxx(xx[num], xx[num - 1]) + 6 * (yy[num] - yy[num - 1]) / Math.pow(dxx(xx[num], xx[num - 1]), 2); - ggxx[1] = 2 * (2 * gxx[1] + gxx[0]) / dxx(xx[num], xx[num - 1]) - 6 * (yy[num] - yy[num - 1]) / Math.pow(dxx(xx[num], xx[num - 1]), 2); - - // Calc constants for cubic interpolation - D = 1 / 6 * (ggxx[1] - ggxx[0]) / dxx(xx[num], xx[num - 1]); - C = 1 / 2 * (xx[num] * ggxx[0] - xx[num - 1] * ggxx[1]) / dxx(xx[num], xx[num - 1]); - B = (yy[num] - yy[num - 1] - C * (Math.pow(xx[num], 2) - Math.pow(xx[num - 1], 2)) - D * (Math.pow(xx[num], 3) - Math.pow(xx[num - 1], 3))) / dxx(xx[num], xx[num - 1]); - A = yy[num - 1] - B * xx[num - 1] - C * Math.pow(xx[num - 1], 2) - D * Math.pow(xx[num - 1], 3); - - var increment = (xx[num] - xx[num - 1]) / steps; - var temp, tempx; - - for (var j = 0, l = steps; j < l; j++) { - temp = []; - tempx = xx[num - 1] + j * increment; - temp.push(tempx); - temp.push(A + B * tempx + C * Math.pow(tempx, 2) + D * Math.pow(tempx, 3)); - _smoothedData.push(temp); - _smoothedPlotData.push([xp(temp[0]), yp(temp[1])]); - } - } - - _smoothedData.push(gd[i]); - _smoothedPlotData.push([xp(gd[i][0]), yp(gd[i][1])]); - - return [_smoothedData, _smoothedPlotData]; - } - - /////// - // computeHermiteSmoothedData - // A hermite spline smoothing of the plot data. - // This implementation is derived from the one posted - // by krypin on the jqplot-users mailing list: - // - // http://groups.google.com/group/jqplot-users/browse_thread/thread/748be6a445723cea?pli=1 - // - // with a blog post: - // - // http://blog.statscollector.com/a-plugin-renderer-for-jqplot-to-draw-a-hermite-spline/ - // - // and download of the original plugin: - // - // http://blog.statscollector.com/wp-content/uploads/2010/02/jqplot.hermiteSplineRenderer.js - ////////// - - // called with scope of series - function computeHermiteSmoothedData (gd) { - var smooth = this.renderer.smooth; - var tension = this.renderer.tension; - var dim = this.canvas.getWidth(); - var xp = this._xaxis.series_p2u; - var yp = this._yaxis.series_p2u; - var steps =null; - var _steps = null; - var a = null; - var a1 = null; - var a2 = null; - var slope = null; - var slope2 = null; - var temp = null; - var t, s, h1, h2, h3, h4; - var TiX, TiY, Ti1X, Ti1Y; - var pX, pY, p; - var sd = []; - var spd = []; - var dist = gd.length/dim; - var min, max, stretch, scale, shift; - var _smoothedData = []; - var _smoothedPlotData = []; - if (!isNaN(parseFloat(smooth))) { - steps = parseFloat(smooth); - } - else { - steps = getSteps(dist, 0.5); - } - if (!isNaN(parseFloat(tension))) { - tension = parseFloat(tension); - } - - for (var i=0, l = gd.length-1; i < l; i++) { - - if (tension === null) { - slope = Math.abs((gd[i+1][1] - gd[i][1]) / (gd[i+1][0] - gd[i][0])); - - min = 0.3; - max = 0.6; - stretch = (max - min)/2.0; - scale = 2.5; - shift = -1.4; - - temp = slope/scale + shift; - - a1 = stretch * tanh(temp) - stretch * tanh(shift) + min; - - // if have both left and right line segments, will use minimum tension. - if (i > 0) { - slope2 = Math.abs((gd[i][1] - gd[i-1][1]) / (gd[i][0] - gd[i-1][0])); - } - temp = slope2/scale + shift; - - a2 = stretch * tanh(temp) - stretch * tanh(shift) + min; - - a = (a1 + a2)/2.0; - - } - else { - a = tension; - } - for (t=0; t < steps; t++) { - s = t / steps; - h1 = (1 + 2*s)*Math.pow((1-s),2); - h2 = s*Math.pow((1-s),2); - h3 = Math.pow(s,2)*(3-2*s); - h4 = Math.pow(s,2)*(s-1); - - if (gd[i-1]) { - TiX = a * (gd[i+1][0] - gd[i-1][0]); - TiY = a * (gd[i+1][1] - gd[i-1][1]); - } else { - TiX = a * (gd[i+1][0] - gd[i][0]); - TiY = a * (gd[i+1][1] - gd[i][1]); - } - if (gd[i+2]) { - Ti1X = a * (gd[i+2][0] - gd[i][0]); - Ti1Y = a * (gd[i+2][1] - gd[i][1]); - } else { - Ti1X = a * (gd[i+1][0] - gd[i][0]); - Ti1Y = a * (gd[i+1][1] - gd[i][1]); - } - - pX = h1*gd[i][0] + h3*gd[i+1][0] + h2*TiX + h4*Ti1X; - pY = h1*gd[i][1] + h3*gd[i+1][1] + h2*TiY + h4*Ti1Y; - p = [pX, pY]; - - _smoothedData.push(p); - _smoothedPlotData.push([xp(pX), yp(pY)]); - } - } - _smoothedData.push(gd[l]); - _smoothedPlotData.push([xp(gd[l][0]), yp(gd[l][1])]); - - return [_smoothedData, _smoothedPlotData]; - } - - // setGridData - // converts the user data values to grid coordinates and stores them - // in the gridData array. - // Called with scope of a series. - $.jqplot.LineRenderer.prototype.setGridData = function(plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var data = this._plotData; - var pdata = this._prevPlotData; - this.gridData = []; - this._prevGridData = []; - this.renderer._smoothedData = []; - this.renderer._smoothedPlotData = []; - this.renderer._hiBandGridData = []; - this.renderer._lowBandGridData = []; - this.renderer._hiBandSmoothedData = []; - this.renderer._lowBandSmoothedData = []; - var bands = this.renderer.bands; - var hasNull = false; - for (var i=0, l=data.length; i < l; i++) { - // if not a line series or if no nulls in data, push the converted point onto the array. - if (data[i][0] != null && data[i][1] != null) { - this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]); - } - // else if there is a null, preserve it. - else if (data[i][0] == null) { - hasNull = true; - this.gridData.push([null, yp.call(this._yaxis, data[i][1])]); - } - else if (data[i][1] == null) { - hasNull = true; - this.gridData.push([xp.call(this._xaxis, data[i][0]), null]); - } - // if not a line series or if no nulls in data, push the converted point onto the array. - if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] != null) { - this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), yp.call(this._yaxis, pdata[i][1])]); - } - // else if there is a null, preserve it. - else if (pdata[i] != null && pdata[i][0] == null) { - this._prevGridData.push([null, yp.call(this._yaxis, pdata[i][1])]); - } - else if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] == null) { - this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), null]); - } - } - - // don't do smoothing or bands on broken lines. - if (hasNull) { - this.renderer.smooth = false; - if (this._type === 'line') { - bands.show = false; - } - } - - if (this._type === 'line' && bands.show) { - for (var i=0, l=bands.hiData.length; i<l; i++) { - this.renderer._hiBandGridData.push([xp.call(this._xaxis, bands.hiData[i][0]), yp.call(this._yaxis, bands.hiData[i][1])]); - } - for (var i=0, l=bands.lowData.length; i<l; i++) { - this.renderer._lowBandGridData.push([xp.call(this._xaxis, bands.lowData[i][0]), yp.call(this._yaxis, bands.lowData[i][1])]); - } - } - - // calculate smoothed data if enough points and no nulls - if (this._type === 'line' && this.renderer.smooth && this.gridData.length > 2) { - var ret; - if (this.renderer.constrainSmoothing) { - ret = computeConstrainedSmoothedData.call(this, this.gridData); - this.renderer._smoothedData = ret[0]; - this.renderer._smoothedPlotData = ret[1]; - - if (bands.show) { - ret = computeConstrainedSmoothedData.call(this, this.renderer._hiBandGridData); - this.renderer._hiBandSmoothedData = ret[0]; - ret = computeConstrainedSmoothedData.call(this, this.renderer._lowBandGridData); - this.renderer._lowBandSmoothedData = ret[0]; - } - - ret = null; - } - else { - ret = computeHermiteSmoothedData.call(this, this.gridData); - this.renderer._smoothedData = ret[0]; - this.renderer._smoothedPlotData = ret[1]; - - if (bands.show) { - ret = computeHermiteSmoothedData.call(this, this.renderer._hiBandGridData); - this.renderer._hiBandSmoothedData = ret[0]; - ret = computeHermiteSmoothedData.call(this, this.renderer._lowBandGridData); - this.renderer._lowBandSmoothedData = ret[0]; - } - - ret = null; - } - } - }; - - // makeGridData - // converts any arbitrary data values to grid coordinates and - // returns them. This method exists so that plugins can use a series' - // linerenderer to generate grid data points without overwriting the - // grid data associated with that series. - // Called with scope of a series. - $.jqplot.LineRenderer.prototype.makeGridData = function(data, plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var gd = []; - var pgd = []; - this.renderer._smoothedData = []; - this.renderer._smoothedPlotData = []; - this.renderer._hiBandGridData = []; - this.renderer._lowBandGridData = []; - this.renderer._hiBandSmoothedData = []; - this.renderer._lowBandSmoothedData = []; - var bands = this.renderer.bands; - var hasNull = false; - for (var i=0; i<data.length; i++) { - // if not a line series or if no nulls in data, push the converted point onto the array. - if (data[i][0] != null && data[i][1] != null) { - gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]); - } - // else if there is a null, preserve it. - else if (data[i][0] == null) { - hasNull = true; - gd.push([null, yp.call(this._yaxis, data[i][1])]); - } - else if (data[i][1] == null) { - hasNull = true; - gd.push([xp.call(this._xaxis, data[i][0]), null]); - } - } - - // don't do smoothing or bands on broken lines. - if (hasNull) { - this.renderer.smooth = false; - if (this._type === 'line') { - bands.show = false; - } - } - - if (this._type === 'line' && bands.show) { - for (var i=0, l=bands.hiData.length; i<l; i++) { - this.renderer._hiBandGridData.push([xp.call(this._xaxis, bands.hiData[i][0]), yp.call(this._yaxis, bands.hiData[i][1])]); - } - for (var i=0, l=bands.lowData.length; i<l; i++) { - this.renderer._lowBandGridData.push([xp.call(this._xaxis, bands.lowData[i][0]), yp.call(this._yaxis, bands.lowData[i][1])]); - } - } - - if (this._type === 'line' && this.renderer.smooth && gd.length > 2) { - var ret; - if (this.renderer.constrainSmoothing) { - ret = computeConstrainedSmoothedData.call(this, gd); - this.renderer._smoothedData = ret[0]; - this.renderer._smoothedPlotData = ret[1]; - - if (bands.show) { - ret = computeConstrainedSmoothedData.call(this, this.renderer._hiBandGridData); - this.renderer._hiBandSmoothedData = ret[0]; - ret = computeConstrainedSmoothedData.call(this, this.renderer._lowBandGridData); - this.renderer._lowBandSmoothedData = ret[0]; - } - - ret = null; - } - else { - ret = computeHermiteSmoothedData.call(this, gd); - this.renderer._smoothedData = ret[0]; - this.renderer._smoothedPlotData = ret[1]; - - if (bands.show) { - ret = computeHermiteSmoothedData.call(this, this.renderer._hiBandGridData); - this.renderer._hiBandSmoothedData = ret[0]; - ret = computeHermiteSmoothedData.call(this, this.renderer._lowBandGridData); - this.renderer._lowBandSmoothedData = ret[0]; - } - - ret = null; - } - } - return gd; - }; - - - // called within scope of series. - $.jqplot.LineRenderer.prototype.draw = function(ctx, gd, options, plot) { - var i; - // get a copy of the options, so we don't modify the original object. - var opts = $.extend(true, {}, options); - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke; - var xmin, ymin, xmax, ymax; - ctx.save(); - if (gd.length) { - if (showLine) { - // if we fill, we'll have to add points to close the curve. - if (fill) { - if (this.fillToZero) { - // have to break line up into shapes at axis crossings - var negativeColor = this.negativeColor; - if (! this.useNegativeColors) { - negativeColor = opts.fillStyle; - } - var isnegative = false; - var posfs = opts.fillStyle; - - // if stoking line as well as filling, get a copy of line data. - if (fillAndStroke) { - var fasgd = gd.slice(0); - } - // if not stacked, fill down to axis - if (this.index == 0 || !this._stack) { - - var tempgd = []; - var pd = (this.renderer.smooth) ? this.renderer._smoothedPlotData : this._plotData; - this._areaPoints = []; - var pyzero = this._yaxis.series_u2p(this.fillToValue); - var pxzero = this._xaxis.series_u2p(this.fillToValue); - - opts.closePath = true; - - if (this.fillAxis == 'y') { - tempgd.push([gd[0][0], pyzero]); - this._areaPoints.push([gd[0][0], pyzero]); - - for (var i=0; i<gd.length-1; i++) { - tempgd.push(gd[i]); - this._areaPoints.push(gd[i]); - // do we have an axis crossing? - if (pd[i][1] * pd[i+1][1] < 0) { - if (pd[i][1] < 0) { - isnegative = true; - opts.fillStyle = negativeColor; - } - else { - isnegative = false; - opts.fillStyle = posfs; - } - - var xintercept = gd[i][0] + (gd[i+1][0] - gd[i][0]) * (pyzero-gd[i][1])/(gd[i+1][1] - gd[i][1]); - tempgd.push([xintercept, pyzero]); - this._areaPoints.push([xintercept, pyzero]); - // now draw this shape and shadow. - if (shadow) { - this.renderer.shadowRenderer.draw(ctx, tempgd, opts); - } - this.renderer.shapeRenderer.draw(ctx, tempgd, opts); - // now empty temp array and continue - tempgd = [[xintercept, pyzero]]; - // this._areaPoints = [[xintercept, pyzero]]; - } - } - if (pd[gd.length-1][1] < 0) { - isnegative = true; - opts.fillStyle = negativeColor; - } - else { - isnegative = false; - opts.fillStyle = posfs; - } - tempgd.push(gd[gd.length-1]); - this._areaPoints.push(gd[gd.length-1]); - tempgd.push([gd[gd.length-1][0], pyzero]); - this._areaPoints.push([gd[gd.length-1][0], pyzero]); - } - // now draw the last area. - if (shadow) { - this.renderer.shadowRenderer.draw(ctx, tempgd, opts); - } - this.renderer.shapeRenderer.draw(ctx, tempgd, opts); - - - // var gridymin = this._yaxis.series_u2p(0); - // // IE doesn't return new length on unshift - // gd.unshift([gd[0][0], gridymin]); - // len = gd.length; - // gd.push([gd[len - 1][0], gridymin]); - } - // if stacked, fill to line below - else { - var prev = this._prevGridData; - for (var i=prev.length; i>0; i--) { - gd.push(prev[i-1]); - // this._areaPoints.push(prev[i-1]); - } - if (shadow) { - this.renderer.shadowRenderer.draw(ctx, gd, opts); - } - this._areaPoints = gd; - this.renderer.shapeRenderer.draw(ctx, gd, opts); - } - } - ///////////////////////// - // Not filled to zero - //////////////////////// - else { - // if stoking line as well as filling, get a copy of line data. - if (fillAndStroke) { - var fasgd = gd.slice(0); - } - // if not stacked, fill down to axis - if (this.index == 0 || !this._stack) { - // var gridymin = this._yaxis.series_u2p(this._yaxis.min) - this.gridBorderWidth / 2; - var gridymin = ctx.canvas.height; - // IE doesn't return new length on unshift - gd.unshift([gd[0][0], gridymin]); - var len = gd.length; - gd.push([gd[len - 1][0], gridymin]); - } - // if stacked, fill to line below - else { - var prev = this._prevGridData; - for (var i=prev.length; i>0; i--) { - gd.push(prev[i-1]); - } - } - this._areaPoints = gd; - - if (shadow) { - this.renderer.shadowRenderer.draw(ctx, gd, opts); - } - - this.renderer.shapeRenderer.draw(ctx, gd, opts); - } - if (fillAndStroke) { - var fasopts = $.extend(true, {}, opts, {fill:false, closePath:false}); - this.renderer.shapeRenderer.draw(ctx, fasgd, fasopts); - ////////// - // TODO: figure out some way to do shadows nicely - // if (shadow) { - // this.renderer.shadowRenderer.draw(ctx, fasgd, fasopts); - // } - // now draw the markers - if (this.markerRenderer.show) { - if (this.renderer.smooth) { - fasgd = this.gridData; - } - for (i=0; i<fasgd.length; i++) { - this.markerRenderer.draw(fasgd[i][0], fasgd[i][1], ctx, opts.markerOptions); - } - } - } - } - else { - - if (this.renderer.bands.show) { - var bdat; - var bopts = $.extend(true, {}, opts); - if (this.renderer.bands.showLines) { - bdat = (this.renderer.smooth) ? this.renderer._hiBandSmoothedData : this.renderer._hiBandGridData; - this.renderer.shapeRenderer.draw(ctx, bdat, opts); - bdat = (this.renderer.smooth) ? this.renderer._lowBandSmoothedData : this.renderer._lowBandGridData; - this.renderer.shapeRenderer.draw(ctx, bdat, bopts); - } - - if (this.renderer.bands.fill) { - if (this.renderer.smooth) { - bdat = this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse()); - } - else { - bdat = this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse()); - } - this._areaPoints = bdat; - bopts.closePath = true; - bopts.fill = true; - bopts.fillStyle = this.renderer.bands.fillColor; - this.renderer.shapeRenderer.draw(ctx, bdat, bopts); - } - } - - if (shadow) { - this.renderer.shadowRenderer.draw(ctx, gd, opts); - } - - this.renderer.shapeRenderer.draw(ctx, gd, opts); - } - } - // calculate the bounding box - var xmin = xmax = ymin = ymax = null; - for (i=0; i<this._areaPoints.length; i++) { - var p = this._areaPoints[i]; - if (xmin > p[0] || xmin == null) { - xmin = p[0]; - } - if (ymax < p[1] || ymax == null) { - ymax = p[1]; - } - if (xmax < p[0] || xmax == null) { - xmax = p[0]; - } - if (ymin > p[1] || ymin == null) { - ymin = p[1]; - } - } - - if (this.type === 'line' && this.renderer.bands.show) { - ymax = this._yaxis.series_u2p(this.renderer.bands._min); - ymin = this._yaxis.series_u2p(this.renderer.bands._max); - } - - this._boundingBox = [[xmin, ymax], [xmax, ymin]]; - - // now draw the markers - if (this.markerRenderer.show && !fill) { - if (this.renderer.smooth) { - gd = this.gridData; - } - for (i=0; i<gd.length; i++) { - if (gd[i][0] != null && gd[i][1] != null) { - this.markerRenderer.draw(gd[i][0], gd[i][1], ctx, opts.markerOptions); - } - } - } - } - - ctx.restore(); - }; - - $.jqplot.LineRenderer.prototype.drawShadow = function(ctx, gd, options) { - // This is a no-op, shadows drawn with lines. - }; - - // called with scope of plot. - // make sure to not leave anything highlighted. - function postInit(target, data, options) { - for (var i=0; i<this.series.length; i++) { - if (this.series[i].renderer.constructor == $.jqplot.LineRenderer) { - // don't allow mouseover and mousedown at same time. - if (this.series[i].highlightMouseOver) { - this.series[i].highlightMouseDown = false; - } - } - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.lineRenderer && this.plugins.lineRenderer.highlightCanvas) { - this.plugins.lineRenderer.highlightCanvas.resetCanvas(); - this.plugins.lineRenderer.highlightCanvas = null; - } - - this.plugins.lineRenderer.highlightedSeriesIndex = null; - this.plugins.lineRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - - this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-lineRenderer-highlight-canvas', this._plotDimensions, this)); - this.plugins.lineRenderer.highlightCanvas.setContext(); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); - } - - function highlight (plot, sidx, pidx, points) { - var s = plot.series[sidx]; - var canvas = plot.plugins.lineRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.lineRenderer.highlightedSeriesIndex = sidx; - var opts = {fillStyle: s.highlightColor}; - if (s.type === 'line' && s.renderer.bands.show) { - opts.fill = true; - opts.closePath = true; - } - s.renderer.shapeRenderer.draw(canvas._ctx, points, opts); - canvas = null; - } - - function unhighlight (plot) { - var canvas = plot.plugins.lineRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.lineRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - canvas = null; - } - - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { - var idx = plot.plugins.lineRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - } - - function handleClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt = jQuery.Event('jqplotDataClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - function handleRightClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var idx = plot.plugins.lineRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - var evt = jQuery.Event('jqplotDataRightClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - - // class: $.jqplot.LinearAxisRenderer - // The default jqPlot axis renderer, creating a numeric axis. - $.jqplot.LinearAxisRenderer = function() { - }; - - // called with scope of axis object. - $.jqplot.LinearAxisRenderer.prototype.init = function(options){ - // prop: breakPoints - // EXPERIMENTAL!! Use at your own risk! - // Works only with linear axes and the default tick renderer. - // Array of [start, stop] points to create a broken axis. - // Broken axes have a "jump" in them, which is an immediate - // transition from a smaller value to a larger value. - // Currently, axis ticks MUST be manually assigned if using breakPoints - // by using the axis ticks array option. - this.breakPoints = null; - // prop: breakTickLabel - // Label to use at the axis break if breakPoints are specified. - this.breakTickLabel = "≈"; - // prop: drawBaseline - // True to draw the axis baseline. - this.drawBaseline = true; - // prop: baselineWidth - // width of the baseline in pixels. - this.baselineWidth = null; - // prop: baselineColor - // CSS color spec for the baseline. - this.baselineColor = null; - // prop: forceTickAt0 - // This will ensure that there is always a tick mark at 0. - // If data range is strictly positive or negative, - // this will force 0 to be inside the axis bounds unless - // the appropriate axis pad (pad, padMin or padMax) is set - // to 0, then this will force an axis min or max value at 0. - // This has know effect when any of the following options - // are set: autoscale, min, max, numberTicks or tickInterval. - this.forceTickAt0 = false; - // prop: forceTickAt100 - // This will ensure that there is always a tick mark at 100. - // If data range is strictly above or below 100, - // this will force 100 to be inside the axis bounds unless - // the appropriate axis pad (pad, padMin or padMax) is set - // to 0, then this will force an axis min or max value at 100. - // This has know effect when any of the following options - // are set: autoscale, min, max, numberTicks or tickInterval. - this.forceTickAt100 = false; - // prop: tickInset - // Controls the amount to inset the first and last ticks from - // the edges of the grid, in multiples of the tick interval. - // 0 is no inset, 0.5 is one half a tick interval, 1 is a full - // tick interval, etc. - this.tickInset = 0; - // prop: minorTicks - // Number of ticks to add between "major" ticks. - // Major ticks are ticks supplied by user or auto computed. - // Minor ticks cannot be created by user. - this.minorTicks = 0; - // prop: alignTicks - // true to align tick marks across opposed axes - // such as from the y2axis to yaxis. - this.alignTicks = false; - this._autoFormatString = ''; - this._overrideFormatString = false; - this._scalefact = 1.0; - $.extend(true, this, options); - if (this.breakPoints) { - if (!$.isArray(this.breakPoints)) { - this.breakPoints = null; - } - else if (this.breakPoints.length < 2 || this.breakPoints[1] <= this.breakPoints[0]) { - this.breakPoints = null; - } - } - if (this.numberTicks != null && this.numberTicks < 2) { - this.numberTicks = 2; - } - this.resetDataBounds(); - }; - - // called with scope of axis - $.jqplot.LinearAxisRenderer.prototype.draw = function(ctx, plot) { - if (this.show) { - // populate the axis label and value properties. - // createTicks is a method on the renderer, but - // call it within the scope of the axis. - this.renderer.createTicks.call(this, plot); - // fill a div with axes labels in the right direction. - // Need to pregenerate each axis to get it's bounds and - // position it and the labels correctly on the plot. - var dim=0; - var temp; - // Added for theming. - if (this._elem) { - // Memory Leaks patch - //this._elem.empty(); - this._elem.emptyForce(); - this._elem = null; - } - - this._elem = $(document.createElement('div')); - this._elem.addClass('jqplot-axis jqplot-'+this.name); - this._elem.css('position', 'absolute'); - - - if (this.name == 'xaxis' || this.name == 'x2axis') { - this._elem.width(this._plotDimensions.width); - } - else { - this._elem.height(this._plotDimensions.height); - } - - // create a _label object. - this.labelOptions.axis = this.name; - this._label = new this.labelRenderer(this.labelOptions); - if (this._label.show) { - var elem = this._label.draw(ctx, plot); - elem.appendTo(this._elem); - elem = null; - } - - var t = this._ticks; - var tick; - for (var i=0; i<t.length; i++) { - tick = t[i]; - if (tick.show && tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { - this._elem.append(tick.draw(ctx, plot)); - } - } - tick = null; - t = null; - } - return this._elem; - }; - - // called with scope of an axis - $.jqplot.LinearAxisRenderer.prototype.reset = function() { - this.min = this._options.min; - this.max = this._options.max; - this.tickInterval = this._options.tickInterval; - this.numberTicks = this._options.numberTicks; - this._autoFormatString = ''; - if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) { - this.tickOptions.formatString = ''; - } - - // this._ticks = this.__ticks; - }; - - // called with scope of axis - $.jqplot.LinearAxisRenderer.prototype.set = function() { - var dim = 0; - var temp; - var w = 0; - var h = 0; - var lshow = (this._label == null) ? false : this._label.show; - if (this.show) { - var t = this._ticks; - var tick; - for (var i=0; i<t.length; i++) { - tick = t[i]; - if (!tick._breakTick && tick.show && tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - temp = tick._elem.outerHeight(true); - } - else { - temp = tick._elem.outerWidth(true); - } - if (temp > dim) { - dim = temp; - } - } - } - tick = null; - t = null; - - if (lshow) { - w = this._label._elem.outerWidth(true); - h = this._label._elem.outerHeight(true); - } - if (this.name == 'xaxis') { - dim = dim + h; - this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'}); - } - else if (this.name == 'x2axis') { - dim = dim + h; - this._elem.css({'height':dim+'px', left:'0px', top:'0px'}); - } - else if (this.name == 'yaxis') { - dim = dim + w; - this._elem.css({'width':dim+'px', left:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - else { - dim = dim + w; - this._elem.css({'width':dim+'px', right:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - } - }; - - // called with scope of axis - $.jqplot.LinearAxisRenderer.prototype.createTicks = function(plot) { - // we're are operating on an axis here - var ticks = this._ticks; - var userTicks = this.ticks; - var name = this.name; - // databounds were set on axis initialization. - var db = this._dataBounds; - var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height; - var interval; - var min, max; - var pos1, pos2; - var tt, i; - // get a copy of user's settings for min/max. - var userMin = this.min; - var userMax = this.max; - var userNT = this.numberTicks; - var userTI = this.tickInterval; - - var threshold = 30; - this._scalefact = (Math.max(dim, threshold+1) - threshold)/300.0; - - // if we already have ticks, use them. - // ticks must be in order of increasing value. - - if (userTicks.length) { - // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed - for (i=0; i<userTicks.length; i++){ - var ut = userTicks[i]; - var t = new this.tickRenderer(this.tickOptions); - if ($.isArray(ut)) { - t.value = ut[0]; - if (this.breakPoints) { - if (ut[0] == this.breakPoints[0]) { - t.label = this.breakTickLabel; - t._breakTick = true; - t.showGridline = false; - t.showMark = false; - } - else if (ut[0] > this.breakPoints[0] && ut[0] <= this.breakPoints[1]) { - t.show = false; - t.showGridline = false; - t.label = ut[1]; - } - else { - t.label = ut[1]; - } - } - else { - t.label = ut[1]; - } - t.setTick(ut[0], this.name); - this._ticks.push(t); - } - - else if ($.isPlainObject(ut)) { - $.extend(true, t, ut); - t.axis = this.name; - this._ticks.push(t); - } - - else { - t.value = ut; - if (this.breakPoints) { - if (ut == this.breakPoints[0]) { - t.label = this.breakTickLabel; - t._breakTick = true; - t.showGridline = false; - t.showMark = false; - } - else if (ut > this.breakPoints[0] && ut <= this.breakPoints[1]) { - t.show = false; - t.showGridline = false; - } - } - t.setTick(ut, this.name); - this._ticks.push(t); - } - } - this.numberTicks = userTicks.length; - this.min = this._ticks[0].value; - this.max = this._ticks[this.numberTicks-1].value; - this.tickInterval = (this.max - this.min) / (this.numberTicks - 1); - } - - // we don't have any ticks yet, let's make some! - else { - if (name == 'xaxis' || name == 'x2axis') { - dim = this._plotDimensions.width; - } - else { - dim = this._plotDimensions.height; - } - - var _numberTicks = this.numberTicks; - - // if aligning this axis, use number of ticks from previous axis. - // Do I need to reset somehow if alignTicks is changed and then graph is replotted?? - if (this.alignTicks) { - if (this.name === 'x2axis' && plot.axes.xaxis.show) { - _numberTicks = plot.axes.xaxis.numberTicks; - } - else if (this.name.charAt(0) === 'y' && this.name !== 'yaxis' && this.name !== 'yMidAxis' && plot.axes.yaxis.show) { - _numberTicks = plot.axes.yaxis.numberTicks; - } - } - - min = ((this.min != null) ? this.min : db.min); - max = ((this.max != null) ? this.max : db.max); - - var range = max - min; - var rmin, rmax; - var temp; - - if (this.tickOptions == null || !this.tickOptions.formatString) { - this._overrideFormatString = true; - } - - // Doing complete autoscaling - if (this.min == null || this.max == null && this.tickInterval == null && !this.autoscale) { - // Check if user must have tick at 0 or 100 and ensure they are in range. - // The autoscaling algorithm will always place ticks at 0 and 100 if they are in range. - if (this.forceTickAt0) { - if (min > 0) { - min = 0; - } - if (max < 0) { - max = 0; - } - } - - if (this.forceTickAt100) { - if (min > 100) { - min = 100; - } - if (max < 100) { - max = 100; - } - } - - var keepMin = false, - keepMax = false; - - if (this.min != null) { - keepMin = true; - } - - else if (this.max != null) { - keepMax = true; - } - - // var threshold = 30; - // var tdim = Math.max(dim, threshold+1); - // this._scalefact = (tdim-threshold)/300.0; - var ret = $.jqplot.LinearTickGenerator(min, max, this._scalefact, _numberTicks, keepMin, keepMax); - // calculate a padded max and min, points should be less than these - // so that they aren't too close to the edges of the plot. - // User can adjust how much padding is allowed with pad, padMin and PadMax options. - // If min or max is set, don't pad that end of axis. - var tumin = (this.min != null) ? min : min + range*(this.padMin - 1); - var tumax = (this.max != null) ? max : max - range*(this.padMax - 1); - - // if they're equal, we shouldn't have to do anything, right? - // if (min <=tumin || max >= tumax) { - if (min <tumin || max > tumax) { - tumin = (this.min != null) ? min : min - range*(this.padMin - 1); - tumax = (this.max != null) ? max : max + range*(this.padMax - 1); - ret = $.jqplot.LinearTickGenerator(tumin, tumax, this._scalefact, _numberTicks, keepMin, keepMax); - } - - this.min = ret[0]; - this.max = ret[1]; - // if numberTicks specified, it should return the same. - this.numberTicks = ret[2]; - this._autoFormatString = ret[3]; - this.tickInterval = ret[4]; - } - - // User has specified some axis scale related option, can use auto algorithm - else { - - // if min and max are same, space them out a bit - if (min == max) { - var adj = 0.05; - if (min > 0) { - adj = Math.max(Math.log(min)/Math.LN10, 0.05); - } - min -= adj; - max += adj; - } - - // autoscale. Can't autoscale if min or max is supplied. - // Will use numberTicks and tickInterval if supplied. Ticks - // across multiple axes may not line up depending on how - // bars are to be plotted. - if (this.autoscale && this.min == null && this.max == null) { - var rrange, ti, margin; - var forceMinZero = false; - var forceZeroLine = false; - var intervals = {min:null, max:null, average:null, stddev:null}; - // if any series are bars, or if any are fill to zero, and if this - // is the axis to fill toward, check to see if we can start axis at zero. - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - var faname = (s.fillAxis == 'x') ? s._xaxis.name : s._yaxis.name; - // check to see if this is the fill axis - if (this.name == faname) { - var vals = s._plotValues[s.fillAxis]; - var vmin = vals[0]; - var vmax = vals[0]; - for (var j=1; j<vals.length; j++) { - if (vals[j] < vmin) { - vmin = vals[j]; - } - else if (vals[j] > vmax) { - vmax = vals[j]; - } - } - var dp = (vmax - vmin) / vmax; - // is this sries a bar? - if (s.renderer.constructor == $.jqplot.BarRenderer) { - // if no negative values and could also check range. - if (vmin >= 0 && (s.fillToZero || dp > 0.1)) { - forceMinZero = true; - } - else { - forceMinZero = false; - if (s.fill && s.fillToZero && vmin < 0 && vmax > 0) { - forceZeroLine = true; - } - else { - forceZeroLine = false; - } - } - } - - // if not a bar and filling, use appropriate method. - else if (s.fill) { - if (vmin >= 0 && (s.fillToZero || dp > 0.1)) { - forceMinZero = true; - } - else if (vmin < 0 && vmax > 0 && s.fillToZero) { - forceMinZero = false; - forceZeroLine = true; - } - else { - forceMinZero = false; - forceZeroLine = false; - } - } - - // if not a bar and not filling, only change existing state - // if it doesn't make sense - else if (vmin < 0) { - forceMinZero = false; - } - } - } - - // check if we need make axis min at 0. - if (forceMinZero) { - // compute number of ticks - this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing); - this.min = 0; - userMin = 0; - // what order is this range? - // what tick interval does that give us? - ti = max/(this.numberTicks-1); - temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10))); - if (ti/temp == parseInt(ti/temp, 10)) { - ti += temp; - } - this.tickInterval = Math.ceil(ti/temp) * temp; - this.max = this.tickInterval * (this.numberTicks - 1); - } - - // check if we need to make sure there is a tick at 0. - else if (forceZeroLine) { - // compute number of ticks - this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing); - var ntmin = Math.ceil(Math.abs(min)/range*(this.numberTicks-1)); - var ntmax = this.numberTicks - 1 - ntmin; - ti = Math.max(Math.abs(min/ntmin), Math.abs(max/ntmax)); - temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10))); - this.tickInterval = Math.ceil(ti/temp) * temp; - this.max = this.tickInterval * ntmax; - this.min = -this.tickInterval * ntmin; - } - - // if nothing else, do autoscaling which will try to line up ticks across axes. - else { - if (this.numberTicks == null){ - if (this.tickInterval) { - this.numberTicks = 3 + Math.ceil(range / this.tickInterval); - } - else { - this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing); - } - } - - if (this.tickInterval == null) { - // get a tick interval - ti = range/(this.numberTicks - 1); - - if (ti < 1) { - temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10))); - } - else { - temp = 1; - } - this.tickInterval = Math.ceil(ti*temp*this.pad)/temp; - } - else { - temp = 1 / this.tickInterval; - } - - // try to compute a nicer, more even tick interval - // temp = Math.pow(10, Math.floor(Math.log(ti)/Math.LN10)); - // this.tickInterval = Math.ceil(ti/temp) * temp; - rrange = this.tickInterval * (this.numberTicks - 1); - margin = (rrange - range)/2; - - if (this.min == null) { - this.min = Math.floor(temp*(min-margin))/temp; - } - if (this.max == null) { - this.max = this.min + rrange; - } - } - - // Compute a somewhat decent format string if it is needed. - // get precision of interval and determine a format string. - var sf = $.jqplot.getSignificantFigures(this.tickInterval); - - var fstr; - - // if we have only a whole number, use integer formatting - if (sf.digitsLeft >= sf.significantDigits) { - fstr = '%d'; - } - - else { - var temp = Math.max(0, 5 - sf.digitsLeft); - temp = Math.min(temp, sf.digitsRight); - fstr = '%.'+ temp + 'f'; - } - - this._autoFormatString = fstr; - } - - // Use the default algorithm which pads each axis to make the chart - // centered nicely on the grid. - else { - - rmin = (this.min != null) ? this.min : min - range*(this.padMin - 1); - rmax = (this.max != null) ? this.max : max + range*(this.padMax - 1); - range = rmax - rmin; - - if (this.numberTicks == null){ - // if tickInterval is specified by user, we will ignore computed maximum. - // max will be equal or greater to fit even # of ticks. - if (this.tickInterval != null) { - this.numberTicks = Math.ceil((rmax - rmin)/this.tickInterval)+1; - } - else if (dim > 100) { - this.numberTicks = parseInt(3+(dim-100)/75, 10); - } - else { - this.numberTicks = 2; - } - } - - if (this.tickInterval == null) { - this.tickInterval = range / (this.numberTicks-1); - } - - if (this.max == null) { - rmax = rmin + this.tickInterval*(this.numberTicks - 1); - } - if (this.min == null) { - rmin = rmax - this.tickInterval*(this.numberTicks - 1); - } - - // get precision of interval and determine a format string. - var sf = $.jqplot.getSignificantFigures(this.tickInterval); - - var fstr; - - // if we have only a whole number, use integer formatting - if (sf.digitsLeft >= sf.significantDigits) { - fstr = '%d'; - } - - else { - var temp = Math.max(0, 5 - sf.digitsLeft); - temp = Math.min(temp, sf.digitsRight); - fstr = '%.'+ temp + 'f'; - } - - - this._autoFormatString = fstr; - - this.min = rmin; - this.max = rmax; - } - - if (this.renderer.constructor == $.jqplot.LinearAxisRenderer && this._autoFormatString == '') { - // fix for misleading tick display with small range and low precision. - range = this.max - this.min; - // figure out precision - var temptick = new this.tickRenderer(this.tickOptions); - // use the tick formatString or, the default. - var fs = temptick.formatString || $.jqplot.config.defaultTickFormatString; - var fs = fs.match($.jqplot.sprintf.regex)[0]; - var precision = 0; - if (fs) { - if (fs.search(/[fFeEgGpP]/) > -1) { - var m = fs.match(/\%\.(\d{0,})?[eEfFgGpP]/); - if (m) { - precision = parseInt(m[1], 10); - } - else { - precision = 6; - } - } - else if (fs.search(/[di]/) > -1) { - precision = 0; - } - // fact will be <= 1; - var fact = Math.pow(10, -precision); - if (this.tickInterval < fact) { - // need to correct underrange - if (userNT == null && userTI == null) { - this.tickInterval = fact; - if (userMax == null && userMin == null) { - // this.min = Math.floor((this._dataBounds.min - this.tickInterval)/fact) * fact; - this.min = Math.floor(this._dataBounds.min/fact) * fact; - if (this.min == this._dataBounds.min) { - this.min = this._dataBounds.min - this.tickInterval; - } - // this.max = Math.ceil((this._dataBounds.max + this.tickInterval)/fact) * fact; - this.max = Math.ceil(this._dataBounds.max/fact) * fact; - if (this.max == this._dataBounds.max) { - this.max = this._dataBounds.max + this.tickInterval; - } - var n = (this.max - this.min)/this.tickInterval; - n = n.toFixed(11); - n = Math.ceil(n); - this.numberTicks = n + 1; - } - else if (userMax == null) { - // add one tick for top of range. - var n = (this._dataBounds.max - this.min) / this.tickInterval; - n = n.toFixed(11); - this.numberTicks = Math.ceil(n) + 2; - this.max = this.min + this.tickInterval * (this.numberTicks-1); - } - else if (userMin == null) { - // add one tick for bottom of range. - var n = (this.max - this._dataBounds.min) / this.tickInterval; - n = n.toFixed(11); - this.numberTicks = Math.ceil(n) + 2; - this.min = this.max - this.tickInterval * (this.numberTicks-1); - } - else { - // calculate a number of ticks so max is within axis scale - this.numberTicks = Math.ceil((userMax - userMin)/this.tickInterval) + 1; - // if user's min and max don't fit evenly in ticks, adjust. - // This takes care of cases such as user min set to 0, max set to 3.5 but tick - // format string set to %d (integer ticks) - this.min = Math.floor(userMin*Math.pow(10, precision))/Math.pow(10, precision); - this.max = Math.ceil(userMax*Math.pow(10, precision))/Math.pow(10, precision); - // this.max = this.min + this.tickInterval*(this.numberTicks-1); - this.numberTicks = Math.ceil((this.max - this.min)/this.tickInterval) + 1; - } - } - } - } - } - - } - - if (this._overrideFormatString && this._autoFormatString != '') { - this.tickOptions = this.tickOptions || {}; - this.tickOptions.formatString = this._autoFormatString; - } - - var t, to; - for (var i=0; i<this.numberTicks; i++){ - tt = this.min + i * this.tickInterval; - t = new this.tickRenderer(this.tickOptions); - // var t = new $.jqplot.AxisTickRenderer(this.tickOptions); - - t.setTick(tt, this.name); - this._ticks.push(t); - - if (i < this.numberTicks - 1) { - for (var j=0; j<this.minorTicks; j++) { - tt += this.tickInterval/(this.minorTicks+1); - to = $.extend(true, {}, this.tickOptions, {name:this.name, value:tt, label:'', isMinorTick:true}); - t = new this.tickRenderer(to); - this._ticks.push(t); - } - } - t = null; - } - } - - if (this.tickInset) { - this.min = this.min - this.tickInset * this.tickInterval; - this.max = this.max + this.tickInset * this.tickInterval; - } - - ticks = null; - }; - - // Used to reset just the values of the ticks and then repack, which will - // recalculate the positioning functions. It is assuemd that the - // number of ticks is the same and the values of the new array are at the - // proper interval. - // This method needs to be called with the scope of an axis object, like: - // - // > plot.axes.yaxis.renderer.resetTickValues.call(plot.axes.yaxis, yarr); - // - $.jqplot.LinearAxisRenderer.prototype.resetTickValues = function(opts) { - if ($.isArray(opts) && opts.length == this._ticks.length) { - var t; - for (var i=0; i<opts.length; i++) { - t = this._ticks[i]; - t.value = opts[i]; - t.label = t.formatter(t.formatString, opts[i]); - t.label = t.prefix + t.label; - t._elem.html(t.label); - } - t = null; - this.min = $.jqplot.arrayMin(opts); - this.max = $.jqplot.arrayMax(opts); - this.pack(); - } - // Not implemented yet. - // else if ($.isPlainObject(opts)) { - // - // } - }; - - // called with scope of axis - $.jqplot.LinearAxisRenderer.prototype.pack = function(pos, offsets) { - // Add defaults for repacking from resetTickValues function. - pos = pos || {}; - offsets = offsets || this._offsets; - - var ticks = this._ticks; - var max = this.max; - var min = this.min; - var offmax = offsets.max; - var offmin = offsets.min; - var lshow = (this._label == null) ? false : this._label.show; - - for (var p in pos) { - this._elem.css(p, pos[p]); - } - - this._offsets = offsets; - // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left. - var pixellength = offmax - offmin; - var unitlength = max - min; - - // point to unit and unit to point conversions references to Plot DOM element top left corner. - if (this.breakPoints) { - unitlength = unitlength - this.breakPoints[1] + this.breakPoints[0]; - - this.p2u = function(p){ - return (p - offmin) * unitlength / pixellength + min; - }; - - this.u2p = function(u){ - if (u > this.breakPoints[0] && u < this.breakPoints[1]){ - u = this.breakPoints[0]; - } - if (u <= this.breakPoints[0]) { - return (u - min) * pixellength / unitlength + offmin; - } - else { - return (u - this.breakPoints[1] + this.breakPoints[0] - min) * pixellength / unitlength + offmin; - } - }; - - if (this.name.charAt(0) == 'x'){ - this.series_u2p = function(u){ - if (u > this.breakPoints[0] && u < this.breakPoints[1]){ - u = this.breakPoints[0]; - } - if (u <= this.breakPoints[0]) { - return (u - min) * pixellength / unitlength; - } - else { - return (u - this.breakPoints[1] + this.breakPoints[0] - min) * pixellength / unitlength; - } - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - - else { - this.series_u2p = function(u){ - if (u > this.breakPoints[0] && u < this.breakPoints[1]){ - u = this.breakPoints[0]; - } - if (u >= this.breakPoints[1]) { - return (u - max) * pixellength / unitlength; - } - else { - return (u + this.breakPoints[1] - this.breakPoints[0] - max) * pixellength / unitlength; - } - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + max; - }; - } - } - else { - this.p2u = function(p){ - return (p - offmin) * unitlength / pixellength + min; - }; - - this.u2p = function(u){ - return (u - min) * pixellength / unitlength + offmin; - }; - - if (this.name == 'xaxis' || this.name == 'x2axis'){ - this.series_u2p = function(u){ - return (u - min) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - - else { - this.series_u2p = function(u){ - return (u - max) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + max; - }; - } - } - - if (this.show) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - for (var i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'xaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - if (temp * t.angle < 0) { - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - } - // position at start - else { - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - } - break; - case 'end': - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - case 'start': - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - break; - case 'middle': - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - default: - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - } - } - else { - shim = -t.getWidth()/2; - } - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('left', val); - t.pack(); - } - } - if (lshow) { - var w = this._label._elem.outerWidth(true); - this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px'); - if (this.name == 'xaxis') { - this._label._elem.css('bottom', '0px'); - } - else { - this._label._elem.css('top', '0px'); - } - this._label.pack(); - } - } - else { - for (var i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'yaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - case 'end': - if (temp * t.angle < 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'start': - if (t.angle > 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'middle': - // if (t.angle > 0) { - // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - // } - // else { - // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - // } - shim = -t.getHeight()/2; - break; - default: - shim = -t.getHeight()/2; - break; - } - } - else { - shim = -t.getHeight()/2; - } - - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('top', val); - t.pack(); - } - } - if (lshow) { - var h = this._label._elem.outerHeight(true); - this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px'); - if (this.name == 'yaxis') { - this._label._elem.css('left', '0px'); - } - else { - this._label._elem.css('right', '0px'); - } - this._label.pack(); - } - } - } - - ticks = null; - }; - - - /** - * The following code was generaously given to me a while back by Scott Prahl. - * He did a good job at computing axes min, max and number of ticks for the - * case where the user has not set any scale related parameters (tickInterval, - * numberTicks, min or max). I had ignored this use case for a long time, - * focusing on the more difficult case where user has set some option controlling - * tick generation. Anyway, about time I got this into jqPlot. - * Thanks Scott!! - */ - - /** - * Copyright (c) 2010 Scott Prahl - * The next three routines are currently available for use in all personal - * or commercial projects under both the MIT and GPL version 2.0 licenses. - * This means that you can choose the license that best suits your project - * and use it accordingly. - */ - - // A good format string depends on the interval. If the interval is greater - // than 1 then there is no need to show any decimal digits. If it is < 1.0, then - // use the magnitude of the interval to determine the number of digits to show. - function bestFormatString (interval) - { - var fstr; - interval = Math.abs(interval); - if (interval >= 10) { - fstr = '%d'; - } - - else if (interval > 1) { - if (interval === parseInt(interval, 10)) { - fstr = '%d'; - } - else { - fstr = '%.1f'; - } - } - - else { - var expv = -Math.floor(Math.log(interval)/Math.LN10); - fstr = '%.' + expv + 'f'; - } - - return fstr; - } - - var _factors = [0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 1, 2, 3, 4, 5]; - - var _getLowerFactor = function(f) { - var i = _factors.indexOf(f); - if (i > 0) { - return _factors[i-1]; - } - else { - return _factors[_factors.length - 1] / 100; - } - }; - - var _getHigherFactor = function(f) { - var i = _factors.indexOf(f); - if (i < _factors.length-1) { - return _factors[i+1]; - } - else { - return _factors[0] * 100; - } - }; - - // Given a fixed minimum and maximum and a target number ot ticks - // figure out the best interval and - // return min, max, number ticks, format string and tick interval - function bestConstrainedInterval(min, max, nttarget) { - // run through possible number to ticks and see which interval is best - var low = Math.floor(nttarget/2); - var hi = Math.ceil(nttarget*1.5); - var badness = Number.MAX_VALUE; - var r = (max - min); - var temp; - var sd; - var bestNT; - var gsf = $.jqplot.getSignificantFigures; - var fsd; - var fs; - var currentNT; - var bestPrec; - - for (var i=0, l=hi-low+1; i<l; i++) { - currentNT = low + i; - temp = r/(currentNT-1); - sd = gsf(temp); - - temp = Math.abs(nttarget - currentNT) + sd.digitsRight; - if (temp < badness) { - badness = temp; - bestNT = currentNT; - bestPrec = sd.digitsRight; - } - else if (temp === badness) { - // let nicer ticks trump number ot ticks - if (sd.digitsRight < bestPrec) { - bestNT = currentNT; - bestPrec = sd.digitsRight; - } - } - - } - - fsd = Math.max(bestPrec, Math.max(gsf(min).digitsRight, gsf(max).digitsRight)); - if (fsd === 0) { - fs = '%d'; - } - else { - fs = '%.' + fsd + 'f'; - } - temp = r / (bestNT - 1); - // min, max, number ticks, format string, tick interval - return [min, max, bestNT, fs, temp]; - } - - // This will return an interval of form 2 * 10^n, 5 * 10^n or 10 * 10^n - // it is based soley on the range and number of ticks. So if user specifies - // number of ticks, use this. - function bestInterval(range, numberTicks) { - numberTicks = numberTicks || 7; - var minimum = range / (numberTicks - 1); - var magnitude = Math.pow(10, Math.floor(Math.log(minimum) / Math.LN10)); - var residual = minimum / magnitude; - var interval; - // "nicest" ranges are 1, 2, 5 or powers of these. - // for magnitudes below 1, only allow these. - if (magnitude < 1) { - if (residual > 5) { - interval = 10 * magnitude; - } - else if (residual > 2) { - interval = 5 * magnitude; - } - else if (residual > 1) { - interval = 2 * magnitude; - } - else { - interval = magnitude; - } - } - // for large ranges (whole integers), allow intervals like 3, 4 or powers of these. - // this helps a lot with poor choices for number of ticks. - else { - if (residual > 5) { - interval = 10 * magnitude; - } - else if (residual > 4) { - interval = 5 * magnitude; - } - else if (residual > 3) { - interval = 4 * magnitude; - } - else if (residual > 2) { - interval = 3 * magnitude; - } - else if (residual > 1) { - interval = 2 * magnitude; - } - else { - interval = magnitude; - } - } - - return interval; - } - - // This will return an interval of form 2 * 10^n, 5 * 10^n or 10 * 10^n - // it is based soley on the range of data, number of ticks must be computed later. - function bestLinearInterval(range, scalefact) { - scalefact = scalefact || 1; - var expv = Math.floor(Math.log(range)/Math.LN10); - var magnitude = Math.pow(10, expv); - // 0 < f < 10 - var f = range / magnitude; - var fact; - // for large plots, scalefact will decrease f and increase number of ticks. - // for small plots, scalefact will increase f and decrease number of ticks. - f = f/scalefact; - - // for large plots, smaller interval, more ticks. - if (f<=0.38) { - fact = 0.1; - } - else if (f<=1.6) { - fact = 0.2; - } - else if (f<=4.0) { - fact = 0.5; - } - else if (f<=8.0) { - fact = 1.0; - } - // for very small plots, larger interval, less ticks in number ticks - else if (f<=16.0) { - fact = 2; - } - else { - fact = 5; - } - - return fact*magnitude; - } - - function bestLinearComponents(range, scalefact) { - var expv = Math.floor(Math.log(range)/Math.LN10); - var magnitude = Math.pow(10, expv); - // 0 < f < 10 - var f = range / magnitude; - var interval; - var fact; - // for large plots, scalefact will decrease f and increase number of ticks. - // for small plots, scalefact will increase f and decrease number of ticks. - f = f/scalefact; - - // for large plots, smaller interval, more ticks. - if (f<=0.38) { - fact = 0.1; - } - else if (f<=1.6) { - fact = 0.2; - } - else if (f<=4.0) { - fact = 0.5; - } - else if (f<=8.0) { - fact = 1.0; - } - // for very small plots, larger interval, less ticks in number ticks - else if (f<=16.0) { - fact = 2; - } - // else if (f<=20.0) { - // fact = 3; - // } - // else if (f<=24.0) { - // fact = 4; - // } - else { - fact = 5; - } - - interval = fact * magnitude; - - return [interval, fact, magnitude]; - } - - // Given the min and max for a dataset, return suitable endpoints - // for the graphing, a good number for the number of ticks, and a - // format string so that extraneous digits are not displayed. - // returned is an array containing [min, max, nTicks, format] - $.jqplot.LinearTickGenerator = function(axis_min, axis_max, scalefact, numberTicks, keepMin, keepMax) { - // Set to preserve EITHER min OR max. - // If min is preserved, max must be free. - keepMin = (keepMin === null) ? false : keepMin; - keepMax = (keepMax === null || keepMin) ? false : keepMax; - // if endpoints are equal try to include zero otherwise include one - if (axis_min === axis_max) { - axis_max = (axis_max) ? 0 : 1; - } - - scalefact = scalefact || 1.0; - - // make sure range is positive - if (axis_max < axis_min) { - var a = axis_max; - axis_max = axis_min; - axis_min = a; - } - - var r = []; - var ss = bestLinearInterval(axis_max - axis_min, scalefact); - - var gsf = $.jqplot.getSignificantFigures; - - if (numberTicks == null) { - - // Figure out the axis min, max and number of ticks - // the min and max will be some multiple of the tick interval, - // 1*10^n, 2*10^n or 5*10^n. This gaurantees that, if the - // axis min is negative, 0 will be a tick. - if (!keepMin && !keepMax) { - r[0] = Math.floor(axis_min / ss) * ss; // min - r[1] = Math.ceil(axis_max / ss) * ss; // max - r[2] = Math.round((r[1]-r[0])/ss+1.0); // number of ticks - r[3] = bestFormatString(ss); // format string - r[4] = ss; // tick Interval - } - - else if (keepMin) { - r[0] = axis_min; // min - r[2] = Math.ceil((axis_max - axis_min) / ss + 1.0); // number of ticks - r[1] = axis_min + (r[2] - 1) * ss; // max - var digitsMin = gsf(axis_min).digitsRight; - var digitsSS = gsf(ss).digitsRight; - if (digitsMin < digitsSS) { - r[3] = bestFormatString(ss); // format string - } - else { - r[3] = '%.' + digitsMin + 'f'; - } - r[4] = ss; // tick Interval - } - - else if (keepMax) { - r[1] = axis_max; // max - r[2] = Math.ceil((axis_max - axis_min) / ss + 1.0); // number of ticks - r[0] = axis_max - (r[2] - 1) * ss; // min - var digitsMax = gsf(axis_max).digitsRight; - var digitsSS = gsf(ss).digitsRight; - if (digitsMax < digitsSS) { - r[3] = bestFormatString(ss); // format string - } - else { - r[3] = '%.' + digitsMax + 'f'; - } - r[4] = ss; // tick Interval - } - } - - else { - var tempr = []; - - // Figure out the axis min, max and number of ticks - // the min and max will be some multiple of the tick interval, - // 1*10^n, 2*10^n or 5*10^n. This gaurantees that, if the - // axis min is negative, 0 will be a tick. - tempr[0] = Math.floor(axis_min / ss) * ss; // min - tempr[1] = Math.ceil(axis_max / ss) * ss; // max - tempr[2] = Math.round((tempr[1]-tempr[0])/ss+1.0); // number of ticks - tempr[3] = bestFormatString(ss); // format string - tempr[4] = ss; // tick Interval - - // first, see if we happen to get the right number of ticks - if (tempr[2] === numberTicks) { - r = tempr; - } - - else { - - var newti = bestInterval(tempr[1] - tempr[0], numberTicks); - - r[0] = tempr[0]; // min - r[2] = numberTicks; // number of ticks - r[4] = newti; // tick interval - r[3] = bestFormatString(newti); // format string - r[1] = r[0] + (r[2] - 1) * r[4]; // max - } - } - - return r; - }; - - $.jqplot.LinearTickGenerator.bestLinearInterval = bestLinearInterval; - $.jqplot.LinearTickGenerator.bestInterval = bestInterval; - $.jqplot.LinearTickGenerator.bestLinearComponents = bestLinearComponents; - $.jqplot.LinearTickGenerator.bestConstrainedInterval = bestConstrainedInterval; - - - // class: $.jqplot.MarkerRenderer - // The default jqPlot marker renderer, rendering the points on the line. - $.jqplot.MarkerRenderer = function(options){ - // Group: Properties - - // prop: show - // wether or not to show the marker. - this.show = true; - // prop: style - // One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare - this.style = 'filledCircle'; - // prop: lineWidth - // size of the line for non-filled markers. - this.lineWidth = 2; - // prop: size - // Size of the marker (diameter or circle, length of edge of square, etc.) - this.size = 9.0; - // prop: color - // color of marker. Will be set to color of series by default on init. - this.color = '#666666'; - // prop: shadow - // wether or not to draw a shadow on the line - this.shadow = true; - // prop: shadowAngle - // Shadow angle in degrees - this.shadowAngle = 45; - // prop: shadowOffset - // Shadow offset from line in pixels - this.shadowOffset = 1; - // prop: shadowDepth - // Number of times shadow is stroked, each stroke offset shadowOffset from the last. - this.shadowDepth = 3; - // prop: shadowAlpha - // Alpha channel transparency of shadow. 0 = transparent. - this.shadowAlpha = '0.07'; - // prop: shadowRenderer - // Renderer that will draws the shadows on the marker. - this.shadowRenderer = new $.jqplot.ShadowRenderer(); - // prop: shapeRenderer - // Renderer that will draw the marker. - this.shapeRenderer = new $.jqplot.ShapeRenderer(); - - $.extend(true, this, options); - }; - - $.jqplot.MarkerRenderer.prototype.init = function(options) { - $.extend(true, this, options); - var sdopt = {angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, lineWidth:this.lineWidth, depth:this.shadowDepth, closePath:true}; - if (this.style.indexOf('filled') != -1) { - sdopt.fill = true; - } - if (this.style.indexOf('ircle') != -1) { - sdopt.isarc = true; - sdopt.closePath = false; - } - this.shadowRenderer.init(sdopt); - - var shopt = {fill:false, isarc:false, strokeStyle:this.color, fillStyle:this.color, lineWidth:this.lineWidth, closePath:true}; - if (this.style.indexOf('filled') != -1) { - shopt.fill = true; - } - if (this.style.indexOf('ircle') != -1) { - shopt.isarc = true; - shopt.closePath = false; - } - this.shapeRenderer.init(shopt); - }; - - $.jqplot.MarkerRenderer.prototype.drawDiamond = function(x, y, ctx, fill, options) { - var stretch = 1.2; - var dx = this.size/2/stretch; - var dy = this.size/2*stretch; - var points = [[x-dx, y], [x, y+dy], [x+dx, y], [x, y-dy]]; - if (this.shadow) { - this.shadowRenderer.draw(ctx, points); - } - this.shapeRenderer.draw(ctx, points, options); - }; - - $.jqplot.MarkerRenderer.prototype.drawPlus = function(x, y, ctx, fill, options) { - var stretch = 1.0; - var dx = this.size/2*stretch; - var dy = this.size/2*stretch; - var points1 = [[x, y-dy], [x, y+dy]]; - var points2 = [[x+dx, y], [x-dx, y]]; - var opts = $.extend(true, {}, this.options, {closePath:false}); - if (this.shadow) { - this.shadowRenderer.draw(ctx, points1, {closePath:false}); - this.shadowRenderer.draw(ctx, points2, {closePath:false}); - } - this.shapeRenderer.draw(ctx, points1, opts); - this.shapeRenderer.draw(ctx, points2, opts); - }; - - $.jqplot.MarkerRenderer.prototype.drawX = function(x, y, ctx, fill, options) { - var stretch = 1.0; - var dx = this.size/2*stretch; - var dy = this.size/2*stretch; - var opts = $.extend(true, {}, this.options, {closePath:false}); - var points1 = [[x-dx, y-dy], [x+dx, y+dy]]; - var points2 = [[x-dx, y+dy], [x+dx, y-dy]]; - if (this.shadow) { - this.shadowRenderer.draw(ctx, points1, {closePath:false}); - this.shadowRenderer.draw(ctx, points2, {closePath:false}); - } - this.shapeRenderer.draw(ctx, points1, opts); - this.shapeRenderer.draw(ctx, points2, opts); - }; - - $.jqplot.MarkerRenderer.prototype.drawDash = function(x, y, ctx, fill, options) { - var stretch = 1.0; - var dx = this.size/2*stretch; - var dy = this.size/2*stretch; - var points = [[x-dx, y], [x+dx, y]]; - if (this.shadow) { - this.shadowRenderer.draw(ctx, points); - } - this.shapeRenderer.draw(ctx, points, options); - }; - - $.jqplot.MarkerRenderer.prototype.drawLine = function(p1, p2, ctx, fill, options) { - var points = [p1, p2]; - if (this.shadow) { - this.shadowRenderer.draw(ctx, points); - } - this.shapeRenderer.draw(ctx, points, options); - }; - - $.jqplot.MarkerRenderer.prototype.drawSquare = function(x, y, ctx, fill, options) { - var stretch = 1.0; - var dx = this.size/2/stretch; - var dy = this.size/2*stretch; - var points = [[x-dx, y-dy], [x-dx, y+dy], [x+dx, y+dy], [x+dx, y-dy]]; - if (this.shadow) { - this.shadowRenderer.draw(ctx, points); - } - this.shapeRenderer.draw(ctx, points, options); - }; - - $.jqplot.MarkerRenderer.prototype.drawCircle = function(x, y, ctx, fill, options) { - var radius = this.size/2; - var end = 2*Math.PI; - var points = [x, y, radius, 0, end, true]; - if (this.shadow) { - this.shadowRenderer.draw(ctx, points); - } - this.shapeRenderer.draw(ctx, points, options); - }; - - $.jqplot.MarkerRenderer.prototype.draw = function(x, y, ctx, options) { - options = options || {}; - // hack here b/c shape renderer uses canvas based color style options - // and marker uses css style names. - if (options.show == null || options.show != false) { - if (options.color && !options.fillStyle) { - options.fillStyle = options.color; - } - if (options.color && !options.strokeStyle) { - options.strokeStyle = options.color; - } - switch (this.style) { - case 'diamond': - this.drawDiamond(x,y,ctx, false, options); - break; - case 'filledDiamond': - this.drawDiamond(x,y,ctx, true, options); - break; - case 'circle': - this.drawCircle(x,y,ctx, false, options); - break; - case 'filledCircle': - this.drawCircle(x,y,ctx, true, options); - break; - case 'square': - this.drawSquare(x,y,ctx, false, options); - break; - case 'filledSquare': - this.drawSquare(x,y,ctx, true, options); - break; - case 'x': - this.drawX(x,y,ctx, true, options); - break; - case 'plus': - this.drawPlus(x,y,ctx, true, options); - break; - case 'dash': - this.drawDash(x,y,ctx, true, options); - break; - case 'line': - this.drawLine(x, y, ctx, false, options); - break; - default: - this.drawDiamond(x,y,ctx, false, options); - break; - } - } - }; - - // class: $.jqplot.shadowRenderer - // The default jqPlot shadow renderer, rendering shadows behind shapes. - $.jqplot.ShadowRenderer = function(options){ - // Group: Properties - - // prop: angle - // Angle of the shadow in degrees. Measured counter-clockwise from the x axis. - this.angle = 45; - // prop: offset - // Pixel offset at the given shadow angle of each shadow stroke from the last stroke. - this.offset = 1; - // prop: alpha - // alpha transparency of shadow stroke. - this.alpha = 0.07; - // prop: lineWidth - // width of the shadow line stroke. - this.lineWidth = 1.5; - // prop: lineJoin - // How line segments of the shadow are joined. - this.lineJoin = 'miter'; - // prop: lineCap - // how ends of the shadow line are rendered. - this.lineCap = 'round'; - // prop; closePath - // whether line path segment is closed upon itself. - this.closePath = false; - // prop: fill - // whether to fill the shape. - this.fill = false; - // prop: depth - // how many times the shadow is stroked. Each stroke will be offset by offset at angle degrees. - this.depth = 3; - this.strokeStyle = 'rgba(0,0,0,0.1)'; - // prop: isarc - // wether the shadow is an arc or not. - this.isarc = false; - - $.extend(true, this, options); - }; - - $.jqplot.ShadowRenderer.prototype.init = function(options) { - $.extend(true, this, options); - }; - - // function: draw - // draws an transparent black (i.e. gray) shadow. - // - // ctx - canvas drawing context - // points - array of points or [x, y, radius, start angle (rad), end angle (rad)] - $.jqplot.ShadowRenderer.prototype.draw = function(ctx, points, options) { - ctx.save(); - var opts = (options != null) ? options : {}; - var fill = (opts.fill != null) ? opts.fill : this.fill; - var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect; - var closePath = (opts.closePath != null) ? opts.closePath : this.closePath; - var offset = (opts.offset != null) ? opts.offset : this.offset; - var alpha = (opts.alpha != null) ? opts.alpha : this.alpha; - var depth = (opts.depth != null) ? opts.depth : this.depth; - var isarc = (opts.isarc != null) ? opts.isarc : this.isarc; - var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern; - ctx.lineWidth = (opts.lineWidth != null) ? opts.lineWidth : this.lineWidth; - ctx.lineJoin = (opts.lineJoin != null) ? opts.lineJoin : this.lineJoin; - ctx.lineCap = (opts.lineCap != null) ? opts.lineCap : this.lineCap; - ctx.strokeStyle = opts.strokeStyle || this.strokeStyle || 'rgba(0,0,0,'+alpha+')'; - ctx.fillStyle = opts.fillStyle || this.fillStyle || 'rgba(0,0,0,'+alpha+')'; - for (var j=0; j<depth; j++) { - var ctxPattern = $.jqplot.LinePattern(ctx, linePattern); - ctx.translate(Math.cos(this.angle*Math.PI/180)*offset, Math.sin(this.angle*Math.PI/180)*offset); - ctxPattern.beginPath(); - if (isarc) { - ctx.arc(points[0], points[1], points[2], points[3], points[4], true); - } - else if (fillRect) { - if (fillRect) { - ctx.fillRect(points[0], points[1], points[2], points[3]); - } - } - else if (points && points.length){ - var move = true; - for (var i=0; i<points.length; i++) { - // skip to the first non-null point and move to it. - if (points[i][0] != null && points[i][1] != null) { - if (move) { - ctxPattern.moveTo(points[i][0], points[i][1]); - move = false; - } - else { - ctxPattern.lineTo(points[i][0], points[i][1]); - } - } - else { - move = true; - } - } - - } - if (closePath) { - ctxPattern.closePath(); - } - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - } - ctx.restore(); - }; - - // class: $.jqplot.shapeRenderer - // The default jqPlot shape renderer. Given a set of points will - // plot them and either stroke a line (fill = false) or fill them (fill = true). - // If a filled shape is desired, closePath = true must also be set to close - // the shape. - $.jqplot.ShapeRenderer = function(options){ - - this.lineWidth = 1.5; - // prop: linePattern - // line pattern 'dashed', 'dotted', 'solid', some combination - // of '-' and '.' characters such as '.-.' or a numerical array like - // [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, - // [1, 10, 20, 10] to draw a dot-dash line, and so on. - this.linePattern = 'solid'; - // prop: lineJoin - // How line segments of the shadow are joined. - this.lineJoin = 'miter'; - // prop: lineCap - // how ends of the shadow line are rendered. - this.lineCap = 'round'; - // prop; closePath - // whether line path segment is closed upon itself. - this.closePath = false; - // prop: fill - // whether to fill the shape. - this.fill = false; - // prop: isarc - // wether the shadow is an arc or not. - this.isarc = false; - // prop: fillRect - // true to draw shape as a filled rectangle. - this.fillRect = false; - // prop: strokeRect - // true to draw shape as a stroked rectangle. - this.strokeRect = false; - // prop: clearRect - // true to cear a rectangle. - this.clearRect = false; - // prop: strokeStyle - // css color spec for the stoke style - this.strokeStyle = '#999999'; - // prop: fillStyle - // css color spec for the fill style. - this.fillStyle = '#999999'; - - $.extend(true, this, options); - }; - - $.jqplot.ShapeRenderer.prototype.init = function(options) { - $.extend(true, this, options); - }; - - // function: draw - // draws the shape. - // - // ctx - canvas drawing context - // points - array of points for shapes or - // [x, y, width, height] for rectangles or - // [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs. - $.jqplot.ShapeRenderer.prototype.draw = function(ctx, points, options) { - ctx.save(); - var opts = (options != null) ? options : {}; - var fill = (opts.fill != null) ? opts.fill : this.fill; - var closePath = (opts.closePath != null) ? opts.closePath : this.closePath; - var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect; - var strokeRect = (opts.strokeRect != null) ? opts.strokeRect : this.strokeRect; - var clearRect = (opts.clearRect != null) ? opts.clearRect : this.clearRect; - var isarc = (opts.isarc != null) ? opts.isarc : this.isarc; - var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern; - var ctxPattern = $.jqplot.LinePattern(ctx, linePattern); - ctx.lineWidth = opts.lineWidth || this.lineWidth; - ctx.lineJoin = opts.lineJoin || this.lineJoin; - ctx.lineCap = opts.lineCap || this.lineCap; - ctx.strokeStyle = (opts.strokeStyle || opts.color) || this.strokeStyle; - ctx.fillStyle = opts.fillStyle || this.fillStyle; - ctx.beginPath(); - if (isarc) { - ctx.arc(points[0], points[1], points[2], points[3], points[4], true); - if (closePath) { - ctx.closePath(); - } - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - ctx.restore(); - return; - } - else if (clearRect) { - ctx.clearRect(points[0], points[1], points[2], points[3]); - ctx.restore(); - return; - } - else if (fillRect || strokeRect) { - if (fillRect) { - ctx.fillRect(points[0], points[1], points[2], points[3]); - } - if (strokeRect) { - ctx.strokeRect(points[0], points[1], points[2], points[3]); - ctx.restore(); - return; - } - } - else if (points && points.length){ - var move = true; - for (var i=0; i<points.length; i++) { - // skip to the first non-null point and move to it. - if (points[i][0] != null && points[i][1] != null) { - if (move) { - ctxPattern.moveTo(points[i][0], points[i][1]); - move = false; - } - else { - ctxPattern.lineTo(points[i][0], points[i][1]); - } - } - else { - move = true; - } - } - if (closePath) { - ctxPattern.closePath(); - } - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - } - ctx.restore(); - }; - - // class $.jqplot.TableLegendRenderer - // The default legend renderer for jqPlot. - $.jqplot.TableLegendRenderer = function(){ - // - }; - - $.jqplot.TableLegendRenderer.prototype.init = function(options) { - $.extend(true, this, options); - }; - - $.jqplot.TableLegendRenderer.prototype.addrow = function (label, color, pad, reverse) { - var rs = (pad) ? this.rowSpacing+'px' : '0px'; - var tr; - var td; - var elem; - var div0; - var div1; - elem = document.createElement('tr'); - tr = $(elem); - tr.addClass('jqplot-table-legend'); - elem = null; - - if (reverse){ - tr.prependTo(this._elem); - } - - else{ - tr.appendTo(this._elem); - } - - if (this.showSwatches) { - td = $(document.createElement('td')); - td.addClass('jqplot-table-legend jqplot-table-legend-swatch'); - td.css({textAlign: 'center', paddingTop: rs}); - - div0 = $(document.createElement('div')); - div0.addClass('jqplot-table-legend-swatch-outline'); - div1 = $(document.createElement('div')); - div1.addClass('jqplot-table-legend-swatch'); - div1.css({backgroundColor: color, borderColor: color}); - - tr.append(td.append(div0.append(div1))); - - // $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+ - // '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+ - // '</div></td>').appendTo(tr); - } - if (this.showLabels) { - td = $(document.createElement('td')); - td.addClass('jqplot-table-legend jqplot-table-legend-label'); - td.css('paddingTop', rs); - tr.append(td); - - // elem = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>'); - // elem.appendTo(tr); - if (this.escapeHtml) { - td.text(label); - } - else { - td.html(label); - } - } - td = null; - div0 = null; - div1 = null; - tr = null; - elem = null; - }; - - // called with scope of legend - $.jqplot.TableLegendRenderer.prototype.draw = function() { - if (this._elem) { - this._elem.emptyForce(); - this._elem = null; - } - - if (this.show) { - var series = this._series; - // make a table. one line label per row. - var elem = document.createElement('table'); - this._elem = $(elem); - this._elem.addClass('jqplot-table-legend'); - - var ss = {position:'absolute'}; - if (this.background) { - ss['background'] = this.background; - } - if (this.border) { - ss['border'] = this.border; - } - if (this.fontSize) { - ss['fontSize'] = this.fontSize; - } - if (this.fontFamily) { - ss['fontFamily'] = this.fontFamily; - } - if (this.textColor) { - ss['textColor'] = this.textColor; - } - if (this.marginTop != null) { - ss['marginTop'] = this.marginTop; - } - if (this.marginBottom != null) { - ss['marginBottom'] = this.marginBottom; - } - if (this.marginLeft != null) { - ss['marginLeft'] = this.marginLeft; - } - if (this.marginRight != null) { - ss['marginRight'] = this.marginRight; - } - - - var pad = false, - reverse = false, - s; - for (var i = 0; i< series.length; i++) { - s = series[i]; - if (s._stack || s.renderer.constructor == $.jqplot.BezierCurveRenderer){ - reverse = true; - } - if (s.show && s.showLabel) { - var lt = this.labels[i] || s.label.toString(); - if (lt) { - var color = s.color; - if (reverse && i < series.length - 1){ - pad = true; - } - else if (reverse && i == series.length - 1){ - pad = false; - } - this.renderer.addrow.call(this, lt, color, pad, reverse); - pad = true; - } - // let plugins add more rows to legend. Used by trend line plugin. - for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) { - var item = $.jqplot.addLegendRowHooks[j].call(this, s); - if (item) { - this.renderer.addrow.call(this, item.label, item.color, pad); - pad = true; - } - } - lt = null; - } - } - } - return this._elem; - }; - - $.jqplot.TableLegendRenderer.prototype.pack = function(offsets) { - if (this.show) { - if (this.placement == 'insideGrid') { - switch (this.location) { - case 'nw': - var a = offsets.left; - var b = offsets.top; - this._elem.css('left', a); - this._elem.css('top', b); - break; - case 'n': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - var b = offsets.top; - this._elem.css('left', a); - this._elem.css('top', b); - break; - case 'ne': - var a = offsets.right; - var b = offsets.top; - this._elem.css({right:a, top:b}); - break; - case 'e': - var a = offsets.right; - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({right:a, top:b}); - break; - case 'se': - var a = offsets.right; - var b = offsets.bottom; - this._elem.css({right:a, bottom:b}); - break; - case 's': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - var b = offsets.bottom; - this._elem.css({left:a, bottom:b}); - break; - case 'sw': - var a = offsets.left; - var b = offsets.bottom; - this._elem.css({left:a, bottom:b}); - break; - case 'w': - var a = offsets.left; - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({left:a, top:b}); - break; - default: // same as 'se' - var a = offsets.right; - var b = offsets.bottom; - this._elem.css({right:a, bottom:b}); - break; - } - - } - else if (this.placement == 'outside'){ - switch (this.location) { - case 'nw': - var a = this._plotDimensions.width - offsets.left; - var b = offsets.top; - this._elem.css('right', a); - this._elem.css('top', b); - break; - case 'n': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - var b = this._plotDimensions.height - offsets.top; - this._elem.css('left', a); - this._elem.css('bottom', b); - break; - case 'ne': - var a = this._plotDimensions.width - offsets.right; - var b = offsets.top; - this._elem.css({left:a, top:b}); - break; - case 'e': - var a = this._plotDimensions.width - offsets.right; - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({left:a, top:b}); - break; - case 'se': - var a = this._plotDimensions.width - offsets.right; - var b = offsets.bottom; - this._elem.css({left:a, bottom:b}); - break; - case 's': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - var b = this._plotDimensions.height - offsets.bottom; - this._elem.css({left:a, top:b}); - break; - case 'sw': - var a = this._plotDimensions.width - offsets.left; - var b = offsets.bottom; - this._elem.css({right:a, bottom:b}); - break; - case 'w': - var a = this._plotDimensions.width - offsets.left; - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({right:a, top:b}); - break; - default: // same as 'se' - var a = offsets.right; - var b = offsets.bottom; - this._elem.css({right:a, bottom:b}); - break; - } - } - else { - switch (this.location) { - case 'nw': - this._elem.css({left:0, top:offsets.top}); - break; - case 'n': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - this._elem.css({left: a, top:offsets.top}); - break; - case 'ne': - this._elem.css({right:0, top:offsets.top}); - break; - case 'e': - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({right:offsets.right, top:b}); - break; - case 'se': - this._elem.css({right:offsets.right, bottom:offsets.bottom}); - break; - case 's': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - this._elem.css({left: a, bottom:offsets.bottom}); - break; - case 'sw': - this._elem.css({left:offsets.left, bottom:offsets.bottom}); - break; - case 'w': - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({left:offsets.left, top:b}); - break; - default: // same as 'se' - this._elem.css({right:offsets.right, bottom:offsets.bottom}); - break; - } - } - } - }; - - /** - * Class: $.jqplot.ThemeEngine - * Theme Engine provides a programatic way to change some of the more - * common jqplot styling options such as fonts, colors and grid options. - * A theme engine instance is created with each plot. The theme engine - * manages a collection of themes which can be modified, added to, or - * applied to the plot. - * - * The themeEngine class is not instantiated directly. - * When a plot is initialized, the current plot options are scanned - * an a default theme named "Default" is created. This theme is - * used as the basis for other themes added to the theme engine and - * is always available. - * - * A theme is a simple javascript object with styling parameters for - * various entities of the plot. A theme has the form: - * - * - * > { - * > _name:f "Default", - * > target: { - * > backgroundColor: "transparent" - * > }, - * > legend: { - * > textColor: null, - * > fontFamily: null, - * > fontSize: null, - * > border: null, - * > background: null - * > }, - * > title: { - * > textColor: "rgb(102, 102, 102)", - * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif", - * > fontSize: "19.2px", - * > textAlign: "center" - * > }, - * > seriesStyles: {}, - * > series: [{ - * > color: "#4bb2c5", - * > lineWidth: 2.5, - * > linePattern: "solid", - * > shadow: true, - * > fillColor: "#4bb2c5", - * > showMarker: true, - * > markerOptions: { - * > color: "#4bb2c5", - * > show: true, - * > style: 'filledCircle', - * > lineWidth: 1.5, - * > size: 4, - * > shadow: true - * > } - * > }], - * > grid: { - * > drawGridlines: true, - * > gridLineColor: "#cccccc", - * > gridLineWidth: 1, - * > backgroundColor: "#fffdf6", - * > borderColor: "#999999", - * > borderWidth: 2, - * > shadow: true - * > }, - * > axesStyles: { - * > label: {}, - * > ticks: {} - * > }, - * > axes: { - * > xaxis: { - * > borderColor: "#999999", - * > borderWidth: 2, - * > ticks: { - * > show: true, - * > showGridline: true, - * > showLabel: true, - * > showMark: true, - * > size: 4, - * > textColor: "", - * > whiteSpace: "nowrap", - * > fontSize: "12px", - * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif" - * > }, - * > label: { - * > textColor: "rgb(102, 102, 102)", - * > whiteSpace: "normal", - * > fontSize: "14.6667px", - * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif", - * > fontWeight: "400" - * > } - * > }, - * > yaxis: { - * > borderColor: "#999999", - * > borderWidth: 2, - * > ticks: { - * > show: true, - * > showGridline: true, - * > showLabel: true, - * > showMark: true, - * > size: 4, - * > textColor: "", - * > whiteSpace: "nowrap", - * > fontSize: "12px", - * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif" - * > }, - * > label: { - * > textColor: null, - * > whiteSpace: null, - * > fontSize: null, - * > fontFamily: null, - * > fontWeight: null - * > } - * > }, - * > x2axis: {... - * > }, - * > ... - * > y9axis: {... - * > } - * > } - * > } - * - * "seriesStyles" is a style object that will be applied to all series in the plot. - * It will forcibly override any styles applied on the individual series. "axesStyles" is - * a style object that will be applied to all axes in the plot. It will also forcibly - * override any styles on the individual axes. - * - * The example shown above has series options for a line series. Options for other - * series types are shown below: - * - * Bar Series: - * - * > { - * > color: "#4bb2c5", - * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], - * > lineWidth: 2.5, - * > shadow: true, - * > barPadding: 2, - * > barMargin: 10, - * > barWidth: 15.09375, - * > highlightColors: ["rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)"] - * > } - * - * Pie Series: - * - * > { - * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], - * > padding: 20, - * > sliceMargin: 0, - * > fill: true, - * > shadow: true, - * > startAngle: 0, - * > lineWidth: 2.5, - * > highlightColors: ["rgb(129,201,214)", "rgb(240,189,104)", "rgb(214,202,165)", "rgb(137,180,158)", "rgb(168,180,137)", "rgb(180,174,89)", "rgb(180,113,161)", "rgb(129,141,236)", "rgb(227,205,120)", "rgb(255,138,76)", "rgb(76,169,219)", "rgb(215,126,190)", "rgb(220,232,135)", "rgb(200,167,96)", "rgb(103,202,235)", "rgb(208,154,215)"] - * > } - * - * Funnel Series: - * - * > { - * > color: "#4bb2c5", - * > lineWidth: 2, - * > shadow: true, - * > padding: { - * > top: 20, - * > right: 20, - * > bottom: 20, - * > left: 20 - * > }, - * > sectionMargin: 6, - * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], - * > highlightColors: ["rgb(147,208,220)", "rgb(242,199,126)", "rgb(220,210,178)", "rgb(154,191,172)", "rgb(180,191,154)", "rgb(191,186,112)", "rgb(191,133,174)", "rgb(147,157,238)", "rgb(231,212,139)", "rgb(255,154,102)", "rgb(102,181,224)", "rgb(221,144,199)", "rgb(225,235,152)", "rgb(200,167,96)", "rgb(124,210,238)", "rgb(215,169,221)"] - * > } - * - */ - $.jqplot.ThemeEngine = function(){ - // Group: Properties - // - // prop: themes - // hash of themes managed by the theme engine. - // Indexed by theme name. - this.themes = {}; - // prop: activeTheme - // Pointer to currently active theme - this.activeTheme=null; - - }; - - // called with scope of plot - $.jqplot.ThemeEngine.prototype.init = function() { - // get the Default theme from the current plot settings. - var th = new $.jqplot.Theme({_name:'Default'}); - var n, i, nn; - - for (n in th.target) { - if (n == "textColor") { - th.target[n] = this.target.css('color'); - } - else { - th.target[n] = this.target.css(n); - } - } - - if (this.title.show && this.title._elem) { - for (n in th.title) { - if (n == "textColor") { - th.title[n] = this.title._elem.css('color'); - } - else { - th.title[n] = this.title._elem.css(n); - } - } - } - - for (n in th.grid) { - th.grid[n] = this.grid[n]; - } - if (th.grid.backgroundColor == null && this.grid.background != null) { - th.grid.backgroundColor = this.grid.background; - } - if (this.legend.show && this.legend._elem) { - for (n in th.legend) { - if (n == 'textColor') { - th.legend[n] = this.legend._elem.css('color'); - } - else { - th.legend[n] = this.legend._elem.css(n); - } - } - } - var s; - - for (i=0; i<this.series.length; i++) { - s = this.series[i]; - if (s.renderer.constructor == $.jqplot.LineRenderer) { - th.series.push(new LineSeriesProperties()); - } - else if (s.renderer.constructor == $.jqplot.BarRenderer) { - th.series.push(new BarSeriesProperties()); - } - else if (s.renderer.constructor == $.jqplot.PieRenderer) { - th.series.push(new PieSeriesProperties()); - } - else if (s.renderer.constructor == $.jqplot.DonutRenderer) { - th.series.push(new DonutSeriesProperties()); - } - else if (s.renderer.constructor == $.jqplot.FunnelRenderer) { - th.series.push(new FunnelSeriesProperties()); - } - else if (s.renderer.constructor == $.jqplot.MeterGaugeRenderer) { - th.series.push(new MeterSeriesProperties()); - } - else { - th.series.push({}); - } - for (n in th.series[i]) { - th.series[i][n] = s[n]; - } - } - var a, ax; - for (n in this.axes) { - ax = this.axes[n]; - a = th.axes[n] = new AxisProperties(); - a.borderColor = ax.borderColor; - a.borderWidth = ax.borderWidth; - if (ax._ticks && ax._ticks[0]) { - for (nn in a.ticks) { - if (ax._ticks[0].hasOwnProperty(nn)) { - a.ticks[nn] = ax._ticks[0][nn]; - } - else if (ax._ticks[0]._elem){ - a.ticks[nn] = ax._ticks[0]._elem.css(nn); - } - } - } - if (ax._label && ax._label.show) { - for (nn in a.label) { - // a.label[nn] = ax._label._elem.css(nn); - if (ax._label[nn]) { - a.label[nn] = ax._label[nn]; - } - else if (ax._label._elem){ - if (nn == 'textColor') { - a.label[nn] = ax._label._elem.css('color'); - } - else { - a.label[nn] = ax._label._elem.css(nn); - } - } - } - } - } - this.themeEngine._add(th); - this.themeEngine.activeTheme = this.themeEngine.themes[th._name]; - }; - /** - * Group: methods - * - * method: get - * - * Get and return the named theme or the active theme if no name given. - * - * parameter: - * - * name - name of theme to get. - * - * returns: - * - * Theme instance of given name. - */ - $.jqplot.ThemeEngine.prototype.get = function(name) { - if (!name) { - // return the active theme - return this.activeTheme; - } - else { - return this.themes[name]; - } - }; - - function numericalOrder(a,b) { return a-b; } - - /** - * method: getThemeNames - * - * Return the list of theme names in this manager in alpha-numerical order. - * - * parameter: - * - * None - * - * returns: - * - * A the list of theme names in this manager in alpha-numerical order. - */ - $.jqplot.ThemeEngine.prototype.getThemeNames = function() { - var tn = []; - for (var n in this.themes) { - tn.push(n); - } - return tn.sort(numericalOrder); - }; - - /** - * method: getThemes - * - * Return a list of themes in alpha-numerical order by name. - * - * parameter: - * - * None - * - * returns: - * - * A list of themes in alpha-numerical order by name. - */ - $.jqplot.ThemeEngine.prototype.getThemes = function() { - var tn = []; - var themes = []; - for (var n in this.themes) { - tn.push(n); - } - tn.sort(numericalOrder); - for (var i=0; i<tn.length; i++) { - themes.push(this.themes[tn[i]]); - } - return themes; - }; - - $.jqplot.ThemeEngine.prototype.activate = function(plot, name) { - // sometimes need to redraw whole plot. - var redrawPlot = false; - if (!name && this.activeTheme && this.activeTheme._name) { - name = this.activeTheme._name; - } - if (!this.themes.hasOwnProperty(name)) { - throw new Error("No theme of that name"); - } - else { - var th = this.themes[name]; - this.activeTheme = th; - var val, checkBorderColor = false, checkBorderWidth = false; - var arr = ['xaxis', 'x2axis', 'yaxis', 'y2axis']; - - for (i=0; i<arr.length; i++) { - var ax = arr[i]; - if (th.axesStyles.borderColor != null) { - plot.axes[ax].borderColor = th.axesStyles.borderColor; - } - if (th.axesStyles.borderWidth != null) { - plot.axes[ax].borderWidth = th.axesStyles.borderWidth; - } - } - - for (var axname in plot.axes) { - var axis = plot.axes[axname]; - if (axis.show) { - var thaxis = th.axes[axname] || {}; - var thaxstyle = th.axesStyles; - var thax = $.jqplot.extend(true, {}, thaxis, thaxstyle); - val = (th.axesStyles.borderColor != null) ? th.axesStyles.borderColor : thax.borderColor; - if (thax.borderColor != null) { - axis.borderColor = thax.borderColor; - redrawPlot = true; - } - val = (th.axesStyles.borderWidth != null) ? th.axesStyles.borderWidth : thax.borderWidth; - if (thax.borderWidth != null) { - axis.borderWidth = thax.borderWidth; - redrawPlot = true; - } - if (axis._ticks && axis._ticks[0]) { - for (var nn in thax.ticks) { - // val = null; - // if (th.axesStyles.ticks && th.axesStyles.ticks[nn] != null) { - // val = th.axesStyles.ticks[nn]; - // } - // else if (thax.ticks[nn] != null){ - // val = thax.ticks[nn] - // } - val = thax.ticks[nn]; - if (val != null) { - axis.tickOptions[nn] = val; - axis._ticks = []; - redrawPlot = true; - } - } - } - if (axis._label && axis._label.show) { - for (var nn in thax.label) { - // val = null; - // if (th.axesStyles.label && th.axesStyles.label[nn] != null) { - // val = th.axesStyles.label[nn]; - // } - // else if (thax.label && thax.label[nn] != null){ - // val = thax.label[nn] - // } - val = thax.label[nn]; - if (val != null) { - axis.labelOptions[nn] = val; - redrawPlot = true; - } - } - } - - } - } - - for (var n in th.grid) { - if (th.grid[n] != null) { - plot.grid[n] = th.grid[n]; - } - } - if (!redrawPlot) { - plot.grid.draw(); - } - - if (plot.legend.show) { - for (n in th.legend) { - if (th.legend[n] != null) { - plot.legend[n] = th.legend[n]; - } - } - } - if (plot.title.show) { - for (n in th.title) { - if (th.title[n] != null) { - plot.title[n] = th.title[n]; - } - } - } - - var i; - for (i=0; i<th.series.length; i++) { - var opts = {}; - var redrawSeries = false; - for (n in th.series[i]) { - val = (th.seriesStyles[n] != null) ? th.seriesStyles[n] : th.series[i][n]; - if (val != null) { - opts[n] = val; - if (n == 'color') { - plot.series[i].renderer.shapeRenderer.fillStyle = val; - plot.series[i].renderer.shapeRenderer.strokeStyle = val; - plot.series[i][n] = val; - } - else if ((n == 'lineWidth') || (n == 'linePattern')) { - plot.series[i].renderer.shapeRenderer[n] = val; - plot.series[i][n] = val; - } - else if (n == 'markerOptions') { - merge (plot.series[i].markerOptions, val); - merge (plot.series[i].markerRenderer, val); - } - else { - plot.series[i][n] = val; - } - redrawPlot = true; - } - } - } - - if (redrawPlot) { - plot.target.empty(); - plot.draw(); - } - - for (n in th.target) { - if (th.target[n] != null) { - plot.target.css(n, th.target[n]); - } - } - } - - }; - - $.jqplot.ThemeEngine.prototype._add = function(theme, name) { - if (name) { - theme._name = name; - } - if (!theme._name) { - theme._name = Date.parse(new Date()); - } - if (!this.themes.hasOwnProperty(theme._name)) { - this.themes[theme._name] = theme; - } - else { - throw new Error("jqplot.ThemeEngine Error: Theme already in use"); - } - }; - - // method remove - // Delete the named theme, return true on success, false on failure. - - - /** - * method: remove - * - * Remove the given theme from the themeEngine. - * - * parameters: - * - * name - name of the theme to remove. - * - * returns: - * - * true on success, false on failure. - */ - $.jqplot.ThemeEngine.prototype.remove = function(name) { - if (name == 'Default') { - return false; - } - return delete this.themes[name]; - }; - - /** - * method: newTheme - * - * Create a new theme based on the default theme, adding it the themeEngine. - * - * parameters: - * - * name - name of the new theme. - * obj - optional object of styles to be applied to this new theme. - * - * returns: - * - * new Theme object. - */ - $.jqplot.ThemeEngine.prototype.newTheme = function(name, obj) { - if (typeof(name) == 'object') { - obj = obj || name; - name = null; - } - if (obj && obj._name) { - name = obj._name; - } - else { - name = name || Date.parse(new Date()); - } - // var th = new $.jqplot.Theme(name); - var th = this.copy(this.themes['Default']._name, name); - $.jqplot.extend(th, obj); - return th; - }; - - // function clone(obj) { - // return eval(obj.toSource()); - // } - - function clone(obj){ - if(obj == null || typeof(obj) != 'object'){ - return obj; - } - - var temp = new obj.constructor(); - for(var key in obj){ - temp[key] = clone(obj[key]); - } - return temp; - } - - $.jqplot.clone = clone; - - function merge(obj1, obj2) { - if (obj2 == null || typeof(obj2) != 'object') { - return; - } - for (var key in obj2) { - if (key == 'highlightColors') { - obj1[key] = clone(obj2[key]); - } - if (obj2[key] != null && typeof(obj2[key]) == 'object') { - if (!obj1.hasOwnProperty(key)) { - obj1[key] = {}; - } - merge(obj1[key], obj2[key]); - } - else { - obj1[key] = obj2[key]; - } - } - } - - $.jqplot.merge = merge; - - // Use the jQuery 1.3.2 extend function since behaviour in jQuery 1.4 seems problematic - $.jqplot.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !toString.call(target) === "[object Function]" ) { - target = {}; - } - - for ( ; i < length; i++ ){ - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( var name in options ) { - var src = target[ name ], copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging object values - if ( deep && copy && typeof copy === "object" && !copy.nodeType ) { - target[ name ] = $.jqplot.extend( deep, - // Never move original objects, clone them - src || ( copy.length != null ? [ ] : { } ) - , copy ); - } - // Don't bring in undefined values - else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - // Return the modified object - return target; - }; - - /** - * method: rename - * - * Rename a theme. - * - * parameters: - * - * oldName - current name of the theme. - * newName - desired name of the theme. - * - * returns: - * - * new Theme object. - */ - $.jqplot.ThemeEngine.prototype.rename = function (oldName, newName) { - if (oldName == 'Default' || newName == 'Default') { - throw new Error ("jqplot.ThemeEngine Error: Cannot rename from/to Default"); - } - if (this.themes.hasOwnProperty(newName)) { - throw new Error ("jqplot.ThemeEngine Error: New name already in use."); - } - else if (this.themes.hasOwnProperty(oldName)) { - var th = this.copy (oldName, newName); - this.remove(oldName); - return th; - } - throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid"); - }; - - /** - * method: copy - * - * Create a copy of an existing theme in the themeEngine, adding it the themeEngine. - * - * parameters: - * - * sourceName - name of the existing theme. - * targetName - name of the copy. - * obj - optional object of style parameter to apply to the new theme. - * - * returns: - * - * new Theme object. - */ - $.jqplot.ThemeEngine.prototype.copy = function (sourceName, targetName, obj) { - if (targetName == 'Default') { - throw new Error ("jqplot.ThemeEngine Error: Cannot copy over Default theme"); - } - if (!this.themes.hasOwnProperty(sourceName)) { - var s = "jqplot.ThemeEngine Error: Source name invalid"; - throw new Error(s); - } - if (this.themes.hasOwnProperty(targetName)) { - var s = "jqplot.ThemeEngine Error: Target name invalid"; - throw new Error(s); - } - else { - var th = clone(this.themes[sourceName]); - th._name = targetName; - $.jqplot.extend(true, th, obj); - this._add(th); - return th; - } - }; - - - $.jqplot.Theme = function(name, obj) { - if (typeof(name) == 'object') { - obj = obj || name; - name = null; - } - name = name || Date.parse(new Date()); - this._name = name; - this.target = { - backgroundColor: null - }; - this.legend = { - textColor: null, - fontFamily: null, - fontSize: null, - border: null, - background: null - }; - this.title = { - textColor: null, - fontFamily: null, - fontSize: null, - textAlign: null - }; - this.seriesStyles = {}; - this.series = []; - this.grid = { - drawGridlines: null, - gridLineColor: null, - gridLineWidth: null, - backgroundColor: null, - borderColor: null, - borderWidth: null, - shadow: null - }; - this.axesStyles = {label:{}, ticks:{}}; - this.axes = {}; - if (typeof(obj) == 'string') { - this._name = obj; - } - else if(typeof(obj) == 'object') { - $.jqplot.extend(true, this, obj); - } - }; - - var AxisProperties = function() { - this.borderColor = null; - this.borderWidth = null; - this.ticks = new AxisTicks(); - this.label = new AxisLabel(); - }; - - var AxisTicks = function() { - this.show = null; - this.showGridline = null; - this.showLabel = null; - this.showMark = null; - this.size = null; - this.textColor = null; - this.whiteSpace = null; - this.fontSize = null; - this.fontFamily = null; - }; - - var AxisLabel = function() { - this.textColor = null; - this.whiteSpace = null; - this.fontSize = null; - this.fontFamily = null; - this.fontWeight = null; - }; - - var LineSeriesProperties = function() { - this.color=null; - this.lineWidth=null; - this.linePattern=null; - this.shadow=null; - this.fillColor=null; - this.showMarker=null; - this.markerOptions = new MarkerOptions(); - }; - - var MarkerOptions = function() { - this.show = null; - this.style = null; - this.lineWidth = null; - this.size = null; - this.color = null; - this.shadow = null; - }; - - var BarSeriesProperties = function() { - this.color=null; - this.seriesColors=null; - this.lineWidth=null; - this.shadow=null; - this.barPadding=null; - this.barMargin=null; - this.barWidth=null; - this.highlightColors=null; - }; - - var PieSeriesProperties = function() { - this.seriesColors=null; - this.padding=null; - this.sliceMargin=null; - this.fill=null; - this.shadow=null; - this.startAngle=null; - this.lineWidth=null; - this.highlightColors=null; - }; - - var DonutSeriesProperties = function() { - this.seriesColors=null; - this.padding=null; - this.sliceMargin=null; - this.fill=null; - this.shadow=null; - this.startAngle=null; - this.lineWidth=null; - this.innerDiameter=null; - this.thickness=null; - this.ringMargin=null; - this.highlightColors=null; - }; - - var FunnelSeriesProperties = function() { - this.color=null; - this.lineWidth=null; - this.shadow=null; - this.padding=null; - this.sectionMargin=null; - this.seriesColors=null; - this.highlightColors=null; - }; - - var MeterSeriesProperties = function() { - this.padding=null; - this.backgroundColor=null; - this.ringColor=null; - this.tickColor=null; - this.ringWidth=null; - this.intervalColors=null; - this.intervalInnerRadius=null; - this.intervalOuterRadius=null; - this.hubRadius=null; - this.needleThickness=null; - this.needlePad=null; - }; - - - - - $.fn.jqplotChildText = function() { - return $(this).contents().filter(function() { - return this.nodeType == 3; // Node.TEXT_NODE not defined in I7 - }).text(); - }; - - // Returns font style as abbreviation for "font" property. - $.fn.jqplotGetComputedFontStyle = function() { - var css = window.getComputedStyle ? window.getComputedStyle(this[0], "") : this[0].currentStyle; - var attrs = css['font-style'] ? ['font-style', 'font-weight', 'font-size', 'font-family'] : ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily']; - var style = []; - - for (var i=0 ; i < attrs.length; ++i) { - var attr = String(css[attrs[i]]); - - if (attr && attr != 'normal') { - style.push(attr); - } - } - return style.join(' '); - }; - - /** - * Namespace: $.fn - * jQuery namespace to attach functions to jQuery elements. - * - */ - - $.fn.jqplotToImageCanvas = function(options) { - - options = options || {}; - var x_offset = (options.x_offset == null) ? 0 : options.x_offset; - var y_offset = (options.y_offset == null) ? 0 : options.y_offset; - var backgroundColor = (options.backgroundColor == null) ? 'rgb(255,255,255)' : options.backgroundColor; - - if ($(this).width() == 0 || $(this).height() == 0) { - return null; - } - - // excanvas and hence IE < 9 do not support toDataURL and cannot export images. - if ($.jqplot.use_excanvas) { - return null; - } - - var newCanvas = document.createElement("canvas"); - var h = $(this).outerHeight(true); - var w = $(this).outerWidth(true); - var offs = $(this).offset(); - var plotleft = offs.left; - var plottop = offs.top; - var transx = 0, transy = 0; - - // have to check if any elements are hanging outside of plot area before rendering, - // since changing width of canvas will erase canvas. - - var clses = ['jqplot-table-legend', 'jqplot-xaxis-tick', 'jqplot-x2axis-tick', 'jqplot-yaxis-tick', 'jqplot-y2axis-tick', 'jqplot-y3axis-tick', - 'jqplot-y4axis-tick', 'jqplot-y5axis-tick', 'jqplot-y6axis-tick', 'jqplot-y7axis-tick', 'jqplot-y8axis-tick', 'jqplot-y9axis-tick', - 'jqplot-xaxis-label', 'jqplot-x2axis-label', 'jqplot-yaxis-label', 'jqplot-y2axis-label', 'jqplot-y3axis-label', 'jqplot-y4axis-label', - 'jqplot-y5axis-label', 'jqplot-y6axis-label', 'jqplot-y7axis-label', 'jqplot-y8axis-label', 'jqplot-y9axis-label' ]; - - var temptop, templeft, tempbottom, tempright; - - for (var i = 0; i < clses.length; i++) { - $(this).find('.'+clses[i]).each(function() { - temptop = $(this).offset().top - plottop; - templeft = $(this).offset().left - plotleft; - tempright = templeft + $(this).outerWidth(true) + transx; - tempbottom = temptop + $(this).outerHeight(true) + transy; - if (templeft < -transx) { - w = w - transx - templeft; - transx = -templeft; - } - if (temptop < -transy) { - h = h - transy - temptop; - transy = - temptop; - } - if (tempright > w) { - w = tempright; - } - if (tempbottom > h) { - h = tempbottom; - } - }); - } - - newCanvas.width = w + Number(x_offset); - newCanvas.height = h + Number(y_offset); - - var newContext = newCanvas.getContext("2d"); - - newContext.save(); - newContext.fillStyle = backgroundColor; - newContext.fillRect(0,0, newCanvas.width, newCanvas.height); - newContext.restore(); - - newContext.translate(transx, transy); - newContext.textAlign = 'left'; - newContext.textBaseline = 'top'; - - function getLineheight(el) { - var lineheight = parseInt($(el).css('line-height'), 10); - - if (isNaN(lineheight)) { - lineheight = parseInt($(el).css('font-size'), 10) * 1.2; - } - return lineheight; - } - - function writeWrappedText (el, context, text, left, top, canvasWidth) { - var lineheight = getLineheight(el); - var tagwidth = $(el).innerWidth(); - var tagheight = $(el).innerHeight(); - var words = text.split(/\s+/); - var wl = words.length; - var w = ''; - var breaks = []; - var temptop = top; - var templeft = left; - - for (var i=0; i<wl; i++) { - w += words[i]; - if (context.measureText(w).width > tagwidth) { - breaks.push(i); - w = ''; - i--; - } - } - if (breaks.length === 0) { - // center text if necessary - if ($(el).css('textAlign') === 'center') { - templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx; - } - context.fillText(text, templeft, top); - } - else { - w = words.slice(0, breaks[0]).join(' '); - // center text if necessary - if ($(el).css('textAlign') === 'center') { - templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx; - } - context.fillText(w, templeft, temptop); - temptop += lineheight; - for (var i=1, l=breaks.length; i<l; i++) { - w = words.slice(breaks[i-1], breaks[i]).join(' '); - // center text if necessary - if ($(el).css('textAlign') === 'center') { - templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx; - } - context.fillText(w, templeft, temptop); - temptop += lineheight; - } - w = words.slice(breaks[i-1], words.length).join(' '); - // center text if necessary - if ($(el).css('textAlign') === 'center') { - templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx; - } - context.fillText(w, templeft, temptop); - } - - } - - function _jqpToImage(el, x_offset, y_offset) { - var tagname = el.tagName.toLowerCase(); - var p = $(el).position(); - var css = window.getComputedStyle ? window.getComputedStyle(el, "") : el.currentStyle; // for IE < 9 - var left = x_offset + p.left + parseInt(css.marginLeft, 10) + parseInt(css.borderLeftWidth, 10) + parseInt(css.paddingLeft, 10); - var top = y_offset + p.top + parseInt(css.marginTop, 10) + parseInt(css.borderTopWidth, 10)+ parseInt(css.paddingTop, 10); - var w = newCanvas.width; - // var left = x_offset + p.left + $(el).css('marginLeft') + $(el).css('borderLeftWidth') - - // somehow in here, for divs within divs, the width of the inner div should be used instead of the canvas. - - if ((tagname == 'div' || tagname == 'span') && !$(el).hasClass('jqplot-highlighter-tooltip')) { - $(el).children().each(function() { - _jqpToImage(this, left, top); - }); - var text = $(el).jqplotChildText(); - - if (text) { - newContext.font = $(el).jqplotGetComputedFontStyle(); - newContext.fillStyle = $(el).css('color'); - - writeWrappedText(el, newContext, text, left, top, w); - } - } - - // handle the standard table legend - - else if (tagname === 'table' && $(el).hasClass('jqplot-table-legend')) { - newContext.strokeStyle = $(el).css('border-top-color'); - newContext.fillStyle = $(el).css('background-color'); - newContext.fillRect(left, top, $(el).innerWidth(), $(el).innerHeight()); - if (parseInt($(el).css('border-top-width'), 10) > 0) { - newContext.strokeRect(left, top, $(el).innerWidth(), $(el).innerHeight()); - } - - // find all the swatches - $(el).find('div.jqplot-table-legend-swatch-outline').each(function() { - // get the first div and stroke it - var elem = $(this); - newContext.strokeStyle = elem.css('border-top-color'); - var l = left + elem.position().left; - var t = top + elem.position().top; - newContext.strokeRect(l, t, elem.innerWidth(), elem.innerHeight()); - - // now fill the swatch - - l += parseInt(elem.css('padding-left'), 10); - t += parseInt(elem.css('padding-top'), 10); - var h = elem.innerHeight() - 2 * parseInt(elem.css('padding-top'), 10); - var w = elem.innerWidth() - 2 * parseInt(elem.css('padding-left'), 10); - - var swatch = elem.children('div.jqplot-table-legend-swatch'); - newContext.fillStyle = swatch.css('background-color'); - newContext.fillRect(l, t, w, h); - }); - - // now add text - - $(el).find('td.jqplot-table-legend-label').each(function(){ - var elem = $(this); - var l = left + elem.position().left; - var t = top + elem.position().top + parseInt(elem.css('padding-top'), 10); - newContext.font = elem.jqplotGetComputedFontStyle(); - newContext.fillStyle = elem.css('color'); - writeWrappedText(elem, newContext, elem.text(), l, t, w); - }); - - var elem = null; - } - - else if (tagname == 'canvas') { - newContext.drawImage(el, left, top); - } - } - $(this).children().each(function() { - _jqpToImage(this, x_offset, y_offset); - }); - return newCanvas; - }; - - // return the raw image data string. - // Should work on canvas supporting browsers. - $.fn.jqplotToImageStr = function(options) { - var imgCanvas = $(this).jqplotToImageCanvas(options); - if (imgCanvas) { - return imgCanvas.toDataURL("image/png"); - } - else { - return null; - } - }; - - // return a DOM <img> element and return it. - // Should work on canvas supporting browsers. - $.fn.jqplotToImageElem = function(options) { - var elem = document.createElement("img"); - var str = $(this).jqplotToImageStr(options); - elem.src = str; - return elem; - }; - - // return a string for an <img> element and return it. - // Should work on canvas supporting browsers. - $.fn.jqplotToImageElemStr = function(options) { - var str = '<img src='+$(this).jqplotToImageStr(options)+' />'; - return str; - }; - - // Not gauranteed to work, even on canvas supporting browsers due to - // limitations with location.href and browser support. - $.fn.jqplotSaveImage = function() { - var imgData = $(this).jqplotToImageStr({}); - if (imgData) { - window.location.href = imgData.replace("image/png", "image/octet-stream"); - } - - }; - - // Not gauranteed to work, even on canvas supporting browsers due to - // limitations with window.open and arbitrary data. - $.fn.jqplotViewImage = function() { - var imgStr = $(this).jqplotToImageElemStr({}); - var imgData = $(this).jqplotToImageStr({}); - if (imgStr) { - var w = window.open(''); - w.document.open("image/png"); - w.document.write(imgStr); - w.document.close(); - w = null; - } - }; - - - - - /** - * @description - * <p>Object with extended date parsing and formatting capabilities. - * This library borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code.</p> - * - * <p>jsDate takes a different approach by not extending the built-in - * Date Object, improving date parsing, allowing for multiple formatting - * syntaxes and multiple and more easily expandable localization.</p> - * - * @author Chris Leonello - * @date #date# - * @version #VERSION# - * @copyright (c) 2010 Chris Leonello - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * <p>Ken's origianl Date Instance Methods and copyright notice:</p> - * <pre> - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * </pre> - * - * @class - * @name jsDate - * @param {String | Number | Array | Date Object | Options Object} arguments Optional arguments, either a parsable date/time string, - * a JavaScript timestamp, an array of numbers of form [year, month, day, hours, minutes, seconds, milliseconds], - * a Date object, or an options object of form {syntax: "perl", date:some Date} where all options are optional. - */ - - var jsDate = function () { - - this.syntax = jsDate.config.syntax; - this._type = "jsDate"; - this.proxy = new Date(); - this.options = {}; - this.locale = jsDate.regional.getLocale(); - this.formatString = ''; - this.defaultCentury = jsDate.config.defaultCentury; - - switch ( arguments.length ) { - case 0: - break; - case 1: - // other objects either won't have a _type property or, - // if they do, it shouldn't be set to "jsDate", so - // assume it is an options argument. - if (get_type(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") { - var opts = this.options = arguments[0]; - this.syntax = opts.syntax || this.syntax; - this.defaultCentury = opts.defaultCentury || this.defaultCentury; - this.proxy = jsDate.createDate(opts.date); - } - else { - this.proxy = jsDate.createDate(arguments[0]); - } - break; - default: - var a = []; - for ( var i=0; i<arguments.length; i++ ) { - a.push(arguments[i]); - } - // this should be the current date/time? - this.proxy = new Date(); - this.proxy.setFullYear.apply( this.proxy, a.slice(0,3) ); - if ( a.slice(3).length ) { - this.proxy.setHours.apply( this.proxy, a.slice(3) ); - } - break; - } - }; - - /** - * @namespace Configuration options that will be used as defaults for all instances on the page. - * @property {String} defaultLocale The default locale to use [en]. - * @property {String} syntax The default syntax to use [perl]. - * @property {Number} defaultCentury The default centry for 2 digit dates. - */ - jsDate.config = { - defaultLocale: 'en', - syntax: 'perl', - defaultCentury: 1900 - }; - - /** - * Add an arbitrary amount to the currently stored date - * - * @param {Number} number - * @param {String} unit - * @returns {jsDate} - */ - - jsDate.prototype.add = function(number, unit) { - var factor = multipliers[unit] || multipliers.day; - if (typeof factor == 'number') { - this.proxy.setTime(this.proxy.getTime() + (factor * number)); - } else { - factor.add(this, number); - } - return this; - }; - - /** - * Create a new jqplot.date object with the same date - * - * @returns {jsDate} - */ - - jsDate.prototype.clone = function() { - return new jsDate(this.proxy.getTime()); - }; - - /** - * Get the UTC TimeZone Offset of this date in milliseconds. - * - * @returns {Number} - */ - - jsDate.prototype.getUtcOffset = function() { - return this.proxy.getTimezoneOffset() * 60000; - }; - - /** - * Find the difference between this jsDate and another date. - * - * @param {String| Number| Array| jsDate Object| Date Object} dateObj - * @param {String} unit - * @param {Boolean} allowDecimal - * @returns {Number} Number of units difference between dates. - */ - - jsDate.prototype.diff = function(dateObj, unit, allowDecimal) { - // ensure we have a Date object - dateObj = new jsDate(dateObj); - if (dateObj === null) { - return null; - } - // get the multiplying factor integer or factor function - var factor = multipliers[unit] || multipliers.day; - if (typeof factor == 'number') { - // multiply - var unitDiff = (this.proxy.getTime() - dateObj.proxy.getTime()) / factor; - } else { - // run function - var unitDiff = factor.diff(this.proxy, dateObj.proxy); - } - // if decimals are not allowed, round toward zero - return (allowDecimal ? unitDiff : Math[unitDiff > 0 ? 'floor' : 'ceil'](unitDiff)); - }; - - /** - * Get the abbreviated name of the current week day - * - * @returns {String} - */ - - jsDate.prototype.getAbbrDayName = function() { - return jsDate.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]; - }; - - /** - * Get the abbreviated name of the current month - * - * @returns {String} - */ - - jsDate.prototype.getAbbrMonthName = function() { - return jsDate.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]; - }; - - /** - * Get UPPER CASE AM or PM for the current time - * - * @returns {String} - */ - - jsDate.prototype.getAMPM = function() { - return this.proxy.getHours() >= 12 ? 'PM' : 'AM'; - }; - - /** - * Get lower case am or pm for the current time - * - * @returns {String} - */ - - jsDate.prototype.getAmPm = function() { - return this.proxy.getHours() >= 12 ? 'pm' : 'am'; - }; - - /** - * Get the century (19 for 20th Century) - * - * @returns {Integer} Century (19 for 20th century). - */ - jsDate.prototype.getCentury = function() { - return parseInt(this.proxy.getFullYear()/100, 10); - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getDate = function() { - return this.proxy.getDate(); - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getDay = function() { - return this.proxy.getDay(); - }; - - /** - * Get the Day of week 1 (Monday) thru 7 (Sunday) - * - * @returns {Integer} Day of week 1 (Monday) thru 7 (Sunday) - */ - jsDate.prototype.getDayOfWeek = function() { - var dow = this.proxy.getDay(); - return dow===0?7:dow; - }; - - /** - * Get the day of the year - * - * @returns {Integer} 1 - 366, day of the year - */ - jsDate.prototype.getDayOfYear = function() { - var d = this.proxy; - var ms = d - new Date('' + d.getFullYear() + '/1/1 GMT'); - ms += d.getTimezoneOffset()*60000; - d = null; - return parseInt(ms/60000/60/24, 10)+1; - }; - - /** - * Get the name of the current week day - * - * @returns {String} - */ - - jsDate.prototype.getDayName = function() { - return jsDate.regional[this.locale]["dayNames"][this.proxy.getDay()]; - }; - - /** - * Get the week number of the given year, starting with the first Sunday as the first week - * @returns {Integer} Week number (13 for the 13th full week of the year). - */ - jsDate.prototype.getFullWeekOfYear = function() { - var d = this.proxy; - var doy = this.getDayOfYear(); - var rdow = 6-d.getDay(); - var woy = parseInt((doy+rdow)/7, 10); - return woy; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getFullYear = function() { - return this.proxy.getFullYear(); - }; - - /** - * Get the GMT offset in hours and minutes (e.g. +06:30) - * - * @returns {String} - */ - - jsDate.prototype.getGmtOffset = function() { - // divide the minutes offset by 60 - var hours = this.proxy.getTimezoneOffset() / 60; - // decide if we are ahead of or behind GMT - var prefix = hours < 0 ? '+' : '-'; - // remove the negative sign if any - hours = Math.abs(hours); - // add the +/- to the padded number of hours to : to the padded minutes - return prefix + addZeros(Math.floor(hours), 2) + ':' + addZeros((hours % 1) * 60, 2); - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getHours = function() { - return this.proxy.getHours(); - }; - - /** - * Get the current hour on a 12-hour scheme - * - * @returns {Integer} - */ - - jsDate.prototype.getHours12 = function() { - var hours = this.proxy.getHours(); - return hours > 12 ? hours - 12 : (hours == 0 ? 12 : hours); - }; - - - jsDate.prototype.getIsoWeek = function() { - var d = this.proxy; - var woy = d.getWeekOfYear(); - var dow1_1 = (new Date('' + d.getFullYear() + '/1/1')).getDay(); - // First week is 01 and not 00 as in the case of %U and %W, - // so we add 1 to the final result except if day 1 of the year - // is a Monday (then %W returns 01). - // We also need to subtract 1 if the day 1 of the year is - // Friday-Sunday, so the resulting equation becomes: - var idow = woy + (dow1_1 > 4 || dow1_1 <= 1 ? 0 : 1); - if(idow == 53 && (new Date('' + d.getFullYear() + '/12/31')).getDay() < 4) - { - idow = 1; - } - else if(idow === 0) - { - d = new jsDate(new Date('' + (d.getFullYear()-1) + '/12/31')); - idow = d.getIsoWeek(); - } - d = null; - return idow; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getMilliseconds = function() { - return this.proxy.getMilliseconds(); - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getMinutes = function() { - return this.proxy.getMinutes(); - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getMonth = function() { - return this.proxy.getMonth(); - }; - - /** - * Get the name of the current month - * - * @returns {String} - */ - - jsDate.prototype.getMonthName = function() { - return jsDate.regional[this.locale]["monthNames"][this.proxy.getMonth()]; - }; - - /** - * Get the number of the current month, 1-12 - * - * @returns {Integer} - */ - - jsDate.prototype.getMonthNumber = function() { - return this.proxy.getMonth() + 1; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getSeconds = function() { - return this.proxy.getSeconds(); - }; - - /** - * Return a proper two-digit year integer - * - * @returns {Integer} - */ - - jsDate.prototype.getShortYear = function() { - return this.proxy.getYear() % 100; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getTime = function() { - return this.proxy.getTime(); - }; - - /** - * Get the timezone abbreviation - * - * @returns {String} Abbreviation for the timezone - */ - jsDate.prototype.getTimezoneAbbr = function() { - return this.proxy.toString().replace(/^.*\(([^)]+)\)$/, '$1'); - }; - - /** - * Get the browser-reported name for the current timezone (e.g. MDT, Mountain Daylight Time) - * - * @returns {String} - */ - jsDate.prototype.getTimezoneName = function() { - var match = /(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString()); - return match[1] || match[2] || 'GMT' + this.getGmtOffset(); - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getTimezoneOffset = function() { - return this.proxy.getTimezoneOffset(); - }; - - - /** - * Get the week number of the given year, starting with the first Monday as the first week - * @returns {Integer} Week number (13 for the 13th week of the year). - */ - jsDate.prototype.getWeekOfYear = function() { - var doy = this.getDayOfYear(); - var rdow = 7 - this.getDayOfWeek(); - var woy = parseInt((doy+rdow)/7, 10); - return woy; - }; - - /** - * Get the current date as a Unix timestamp - * - * @returns {Integer} - */ - - jsDate.prototype.getUnix = function() { - return Math.round(this.proxy.getTime() / 1000, 0); - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.getYear = function() { - return this.proxy.getYear(); - }; - - /** - * Return a date one day ahead (or any other unit) - * - * @param {String} unit Optional, year | month | day | week | hour | minute | second | millisecond - * @returns {jsDate} - */ - - jsDate.prototype.next = function(unit) { - unit = unit || 'day'; - return this.clone().add(1, unit); - }; - - /** - * Set the jsDate instance to a new date. - * - * @param {String | Number | Array | Date Object | jsDate Object | Options Object} arguments Optional arguments, - * either a parsable date/time string, - * a JavaScript timestamp, an array of numbers of form [year, month, day, hours, minutes, seconds, milliseconds], - * a Date object, jsDate Object or an options object of form {syntax: "perl", date:some Date} where all options are optional. - */ - jsDate.prototype.set = function() { - switch ( arguments.length ) { - case 0: - this.proxy = new Date(); - break; - case 1: - // other objects either won't have a _type property or, - // if they do, it shouldn't be set to "jsDate", so - // assume it is an options argument. - if (get_type(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") { - var opts = this.options = arguments[0]; - this.syntax = opts.syntax || this.syntax; - this.defaultCentury = opts.defaultCentury || this.defaultCentury; - this.proxy = jsDate.createDate(opts.date); - } - else { - this.proxy = jsDate.createDate(arguments[0]); - } - break; - default: - var a = []; - for ( var i=0; i<arguments.length; i++ ) { - a.push(arguments[i]); - } - // this should be the current date/time - this.proxy = new Date(); - this.proxy.setFullYear.apply( this.proxy, a.slice(0,3) ); - if ( a.slice(3).length ) { - this.proxy.setHours.apply( this.proxy, a.slice(3) ); - } - break; - } - return this; - }; - - /** - * Sets the day of the month for a specified date according to local time. - * @param {Integer} dayValue An integer from 1 to 31, representing the day of the month. - */ - jsDate.prototype.setDate = function(n) { - this.proxy.setDate(n); - return this; - }; - - /** - * Sets the full year for a specified date according to local time. - * @param {Integer} yearValue The numeric value of the year, for example, 1995. - * @param {Integer} monthValue Optional, between 0 and 11 representing the months January through December. - * @param {Integer} dayValue Optional, between 1 and 31 representing the day of the month. If you specify the dayValue parameter, you must also specify the monthValue. - */ - jsDate.prototype.setFullYear = function() { - this.proxy.setFullYear.apply(this.proxy, arguments); - return this; - }; - - /** - * Sets the hours for a specified date according to local time. - * - * @param {Integer} hoursValue An integer between 0 and 23, representing the hour. - * @param {Integer} minutesValue Optional, An integer between 0 and 59, representing the minutes. - * @param {Integer} secondsValue Optional, An integer between 0 and 59, representing the seconds. - * If you specify the secondsValue parameter, you must also specify the minutesValue. - * @param {Integer} msValue Optional, A number between 0 and 999, representing the milliseconds. - * If you specify the msValue parameter, you must also specify the minutesValue and secondsValue. - */ - jsDate.prototype.setHours = function() { - this.proxy.setHours.apply(this.proxy, arguments); - return this; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.setMilliseconds = function(n) { - this.proxy.setMilliseconds(n); - return this; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.setMinutes = function() { - this.proxy.setMinutes.apply(this.proxy, arguments); - return this; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.setMonth = function() { - this.proxy.setMonth.apply(this.proxy, arguments); - return this; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.setSeconds = function() { - this.proxy.setSeconds.apply(this.proxy, arguments); - return this; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.setTime = function(n) { - this.proxy.setTime(n); - return this; - }; - - /** - * Implements Date functionality - */ - jsDate.prototype.setYear = function() { - this.proxy.setYear.apply(this.proxy, arguments); - return this; - }; - - /** - * Provide a formatted string representation of this date. - * - * @param {String} formatString A format string. - * See: {@link jsDate.formats}. - * @returns {String} Date String. - */ - - jsDate.prototype.strftime = function(formatString) { - formatString = formatString || this.formatString || jsDate.regional[this.locale]['formatString']; - return jsDate.strftime(this, formatString, this.syntax); - }; - - /** - * Return a String representation of this jsDate object. - * @returns {String} Date string. - */ - - jsDate.prototype.toString = function() { - return this.proxy.toString(); - }; - - /** - * Convert the current date to an 8-digit integer (%Y%m%d) - * - * @returns {Integer} - */ - - jsDate.prototype.toYmdInt = function() { - return (this.proxy.getFullYear() * 10000) + (this.getMonthNumber() * 100) + this.proxy.getDate(); - }; - - /** - * @namespace Holds localizations for month/day names. - * <p>jsDate attempts to detect locale when loaded and defaults to 'en'. - * If a localization is detected which is not available, jsDate defaults to 'en'. - * Additional localizations can be added after jsDate loads. After adding a localization, - * call the jsDate.regional.getLocale() method. Currently, en, fr and de are defined.</p> - * - * <p>Localizations must be an object and have the following properties defined: monthNames, monthNamesShort, dayNames, dayNamesShort and Localizations are added like:</p> - * <pre class="code"> - * jsDate.regional['en'] = { - * monthNames : 'January February March April May June July August September October November December'.split(' '), - * monthNamesShort : 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' '), - * dayNames : 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' '), - * dayNamesShort : 'Sun Mon Tue Wed Thu Fri Sat'.split(' ') - * }; - * </pre> - * <p>After adding localizations, call <code>jsDate.regional.getLocale();</code> to update the locale setting with the - * new localizations.</p> - */ - - jsDate.regional = { - 'en': { - monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - formatString: '%Y-%m-%d %H:%M:%S' - }, - - 'fr': { - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun','Jul','Aoû','Sep','Oct','Nov','Déc'], - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], - formatString: '%Y-%m-%d %H:%M:%S' - }, - - 'de': { - monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'], - dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], - dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], - formatString: '%Y-%m-%d %H:%M:%S' - }, - - 'es': { - monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], - monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', 'Jul','Ago','Sep','Oct','Nov','Dic'], - dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], - dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], - formatString: '%Y-%m-%d %H:%M:%S' - }, - - 'ru': { - monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], - dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], - formatString: '%Y-%m-%d %H:%M:%S' - }, - - 'ar': { - monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران','تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], - monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], - dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'], - dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], - formatString: '%Y-%m-%d %H:%M:%S' - }, - - 'pt': { - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - formatString: '%Y-%m-%d %H:%M:%S' - }, - - 'pt-BR': { - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - formatString: '%Y-%m-%d %H:%M:%S' - } - - - }; - - // Set english variants to 'en' - jsDate.regional['en-US'] = jsDate.regional['en-GB'] = jsDate.regional['en']; - - /** - * Try to determine the users locale based on the lang attribute of the html page. Defaults to 'en' - * if it cannot figure out a locale of if the locale does not have a localization defined. - * @returns {String} locale - */ - - jsDate.regional.getLocale = function () { - var l = jsDate.config.defaultLocale; - - if ( document && document.getElementsByTagName('html') && document.getElementsByTagName('html')[0].lang ) { - l = document.getElementsByTagName('html')[0].lang; - if (!jsDate.regional.hasOwnProperty(l)) { - l = jsDate.config.defaultLocale; - } - } - - return l; - }; - - // ms in day - var day = 24 * 60 * 60 * 1000; - - // padd a number with zeros - var addZeros = function(num, digits) { - num = String(num); - var i = digits - num.length; - var s = String(Math.pow(10, i)).slice(1); - return s.concat(num); - }; - - // representations used for calculating differences between dates. - // This borrows heavily from Ken Snyder's work. - var multipliers = { - millisecond: 1, - second: 1000, - minute: 60 * 1000, - hour: 60 * 60 * 1000, - day: day, - week: 7 * day, - month: { - // add a number of months - add: function(d, number) { - // add any years needed (increments of 12) - multipliers.year.add(d, Math[number > 0 ? 'floor' : 'ceil'](number / 12)); - // ensure that we properly wrap betwen December and January - // 11 % 12 = 11 - // 12 % 12 = 0 - var prevMonth = d.getMonth() + (number % 12); - if (prevMonth == 12) { - prevMonth = 0; - d.setYear(d.getFullYear() + 1); - } else if (prevMonth == -1) { - prevMonth = 11; - d.setYear(d.getFullYear() - 1); - } - d.setMonth(prevMonth); - }, - // get the number of months between two Date objects (decimal to the nearest day) - diff: function(d1, d2) { - // get the number of years - var diffYears = d1.getFullYear() - d2.getFullYear(); - // get the number of remaining months - var diffMonths = d1.getMonth() - d2.getMonth() + (diffYears * 12); - // get the number of remaining days - var diffDays = d1.getDate() - d2.getDate(); - // return the month difference with the days difference as a decimal - return diffMonths + (diffDays / 30); - } - }, - year: { - // add a number of years - add: function(d, number) { - d.setYear(d.getFullYear() + Math[number > 0 ? 'floor' : 'ceil'](number)); - }, - // get the number of years between two Date objects (decimal to the nearest day) - diff: function(d1, d2) { - return multipliers.month.diff(d1, d2) / 12; - } - } - }; - // - // Alias each multiplier with an 's' to allow 'year' and 'years' for example. - // This comes from Ken Snyders work. - // - for (var unit in multipliers) { - if (unit.substring(unit.length - 1) != 's') { // IE will iterate newly added properties :| - multipliers[unit + 's'] = multipliers[unit]; - } - } - - // - // take a jsDate instance and a format code and return the formatted value. - // This is a somewhat modified version of Ken Snyder's method. - // - var format = function(d, code, syntax) { - // if shorcut codes are used, recursively expand those. - if (jsDate.formats[syntax]["shortcuts"][code]) { - return jsDate.strftime(d, jsDate.formats[syntax]["shortcuts"][code], syntax); - } else { - // get the format code function and addZeros() argument - var getter = (jsDate.formats[syntax]["codes"][code] || '').split('.'); - var nbr = d['get' + getter[0]] ? d['get' + getter[0]]() : ''; - if (getter[1]) { - nbr = addZeros(nbr, getter[1]); - } - return nbr; - } - }; - - /** - * @static - * Static function for convert a date to a string according to a given format. Also acts as namespace for strftime format codes. - * <p>strftime formatting can be accomplished without creating a jsDate object by calling jsDate.strftime():</p> - * <pre class="code"> - * var formattedDate = jsDate.strftime('Feb 8, 2006 8:48:32', '%Y-%m-%d %H:%M:%S'); - * </pre> - * @param {String | Number | Array | jsDate Object | Date Object} date A parsable date string, JavaScript time stamp, Array of form [year, month, day, hours, minutes, seconds, milliseconds], jsDate Object or Date object. - * @param {String} formatString String with embedded date formatting codes. - * See: {@link jsDate.formats}. - * @param {String} syntax Optional syntax to use [default perl]. - * @param {String} locale Optional locale to use. - * @returns {String} Formatted representation of the date. - */ - // - // Logic as implemented here is very similar to Ken Snyder's Date Instance Methods. - // - jsDate.strftime = function(d, formatString, syntax, locale) { - var syn = 'perl'; - var loc = jsDate.regional.getLocale(); - - // check if syntax and locale are available or reversed - if (syntax && jsDate.formats.hasOwnProperty(syntax)) { - syn = syntax; - } - else if (syntax && jsDate.regional.hasOwnProperty(syntax)) { - loc = syntax; - } - - if (locale && jsDate.formats.hasOwnProperty(locale)) { - syn = locale; - } - else if (locale && jsDate.regional.hasOwnProperty(locale)) { - loc = locale; - } - - if (get_type(d) != "[object Object]" || d._type != "jsDate") { - d = new jsDate(d); - d.locale = loc; - } - if (!formatString) { - formatString = d.formatString || jsDate.regional[loc]['formatString']; - } - // default the format string to year-month-day - var source = formatString || '%Y-%m-%d', - result = '', - match; - // replace each format code - while (source.length > 0) { - if (match = source.match(jsDate.formats[syn].codes.matcher)) { - result += source.slice(0, match.index); - result += (match[1] || '') + format(d, match[2], syn); - source = source.slice(match.index + match[0].length); - } else { - result += source; - source = ''; - } - } - return result; - }; - - /** - * @namespace - * Namespace to hold format codes and format shortcuts. "perl" and "php" format codes - * and shortcuts are defined by default. Additional codes and shortcuts can be - * added like: - * - * <pre class="code"> - * jsDate.formats["perl"] = { - * "codes": { - * matcher: /someregex/, - * Y: "fullYear", // name of "get" method without the "get", - * ..., // more codes - * }, - * "shortcuts": { - * F: '%Y-%m-%d', - * ..., // more shortcuts - * } - * }; - * </pre> - * - * <p>Additionally, ISO and SQL shortcuts are defined and can be accesses via: - * <code>jsDate.formats.ISO</code> and <code>jsDate.formats.SQL</code> - */ - - jsDate.formats = { - ISO:'%Y-%m-%dT%H:%M:%S.%N%G', - SQL:'%Y-%m-%d %H:%M:%S' - }; - - /** - * Perl format codes and shortcuts for strftime. - * - * A hash (object) of codes where each code must be an array where the first member is - * the name of a Date.prototype or jsDate.prototype function to call - * and optionally a second member indicating the number to pass to addZeros() - * - * <p>The following format codes are defined:</p> - * - * <pre class="code"> - * Code Result Description - * == Years == - * %Y 2008 Four-digit year - * %y 08 Two-digit year - * - * == Months == - * %m 09 Two-digit month - * %#m 9 One or two-digit month - * %B September Full month name - * %b Sep Abbreviated month name - * - * == Days == - * %d 05 Two-digit day of month - * %#d 5 One or two-digit day of month - * %e 5 One or two-digit day of month - * %A Sunday Full name of the day of the week - * %a Sun Abbreviated name of the day of the week - * %w 0 Number of the day of the week (0 = Sunday, 6 = Saturday) - * - * == Hours == - * %H 23 Hours in 24-hour format (two digits) - * %#H 3 Hours in 24-hour integer format (one or two digits) - * %I 11 Hours in 12-hour format (two digits) - * %#I 3 Hours in 12-hour integer format (one or two digits) - * %p PM AM or PM - * - * == Minutes == - * %M 09 Minutes (two digits) - * %#M 9 Minutes (one or two digits) - * - * == Seconds == - * %S 02 Seconds (two digits) - * %#S 2 Seconds (one or two digits) - * %s 1206567625723 Unix timestamp (Seconds past 1970-01-01 00:00:00) - * - * == Milliseconds == - * %N 008 Milliseconds (three digits) - * %#N 8 Milliseconds (one to three digits) - * - * == Timezone == - * %O 360 difference in minutes between local time and GMT - * %Z Mountain Standard Time Name of timezone as reported by browser - * %G 06:00 Hours and minutes between GMT - * - * == Shortcuts == - * %F 2008-03-26 %Y-%m-%d - * %T 05:06:30 %H:%M:%S - * %X 05:06:30 %H:%M:%S - * %x 03/26/08 %m/%d/%y - * %D 03/26/08 %m/%d/%y - * %#c Wed Mar 26 15:31:00 2008 %a %b %e %H:%M:%S %Y - * %v 3-Sep-2008 %e-%b-%Y - * %R 15:31 %H:%M - * %r 03:31:00 PM %I:%M:%S %p - * - * == Characters == - * %n \n Newline - * %t \t Tab - * %% % Percent Symbol - * </pre> - * - * <p>Formatting shortcuts that will be translated into their longer version. - * Be sure that format shortcuts do not refer to themselves: this will cause an infinite loop.</p> - * - * <p>Format codes and format shortcuts can be redefined after the jsDate - * module is imported.</p> - * - * <p>Note that if you redefine the whole hash (object), you must supply a "matcher" - * regex for the parser. The default matcher is:</p> - * - * <code>/()%(#?(%|[a-z]))/i</code> - * - * <p>which corresponds to the Perl syntax used by default.</p> - * - * <p>By customizing the matcher and format codes, nearly any strftime functionality is possible.</p> - */ - - jsDate.formats.perl = { - codes: { - // - // 2-part regex matcher for format codes - // - // first match must be the character before the code (to account for escaping) - // second match must be the format code character(s) - // - matcher: /()%(#?(%|[a-z]))/i, - // year - Y: 'FullYear', - y: 'ShortYear.2', - // month - m: 'MonthNumber.2', - '#m': 'MonthNumber', - B: 'MonthName', - b: 'AbbrMonthName', - // day - d: 'Date.2', - '#d': 'Date', - e: 'Date', - A: 'DayName', - a: 'AbbrDayName', - w: 'Day', - // hours - H: 'Hours.2', - '#H': 'Hours', - I: 'Hours12.2', - '#I': 'Hours12', - p: 'AMPM', - // minutes - M: 'Minutes.2', - '#M': 'Minutes', - // seconds - S: 'Seconds.2', - '#S': 'Seconds', - s: 'Unix', - // milliseconds - N: 'Milliseconds.3', - '#N': 'Milliseconds', - // timezone - O: 'TimezoneOffset', - Z: 'TimezoneName', - G: 'GmtOffset' - }, - - shortcuts: { - // date - F: '%Y-%m-%d', - // time - T: '%H:%M:%S', - X: '%H:%M:%S', - // local format date - x: '%m/%d/%y', - D: '%m/%d/%y', - // local format extended - '#c': '%a %b %e %H:%M:%S %Y', - // local format short - v: '%e-%b-%Y', - R: '%H:%M', - r: '%I:%M:%S %p', - // tab and newline - t: '\t', - n: '\n', - '%': '%' - } - }; - - /** - * PHP format codes and shortcuts for strftime. - * - * A hash (object) of codes where each code must be an array where the first member is - * the name of a Date.prototype or jsDate.prototype function to call - * and optionally a second member indicating the number to pass to addZeros() - * - * <p>The following format codes are defined:</p> - * - * <pre class="code"> - * Code Result Description - * === Days === - * %a Sun through Sat An abbreviated textual representation of the day - * %A Sunday - Saturday A full textual representation of the day - * %d 01 to 31 Two-digit day of the month (with leading zeros) - * %e 1 to 31 Day of the month, with a space preceding single digits. - * %j 001 to 366 Day of the year, 3 digits with leading zeros - * %u 1 - 7 (Mon - Sun) ISO-8601 numeric representation of the day of the week - * %w 0 - 6 (Sun - Sat) Numeric representation of the day of the week - * - * === Week === - * %U 13 Full Week number, starting with the first Sunday as the first week - * %V 01 through 53 ISO-8601:1988 week number, starting with the first week of the year - * with at least 4 weekdays, with Monday being the start of the week - * %W 46 A numeric representation of the week of the year, - * starting with the first Monday as the first week - * === Month === - * %b Jan through Dec Abbreviated month name, based on the locale - * %B January - December Full month name, based on the locale - * %h Jan through Dec Abbreviated month name, based on the locale (an alias of %b) - * %m 01 - 12 (Jan - Dec) Two digit representation of the month - * - * === Year === - * %C 19 Two digit century (year/100, truncated to an integer) - * %y 09 for 2009 Two digit year - * %Y 2038 Four digit year - * - * === Time === - * %H 00 through 23 Two digit representation of the hour in 24-hour format - * %I 01 through 12 Two digit representation of the hour in 12-hour format - * %l 1 through 12 Hour in 12-hour format, with a space preceeding single digits - * %M 00 through 59 Two digit representation of the minute - * %p AM/PM UPPER-CASE 'AM' or 'PM' based on the given time - * %P am/pm lower-case 'am' or 'pm' based on the given time - * %r 09:34:17 PM Same as %I:%M:%S %p - * %R 00:35 Same as %H:%M - * %S 00 through 59 Two digit representation of the second - * %T 21:34:17 Same as %H:%M:%S - * %X 03:59:16 Preferred time representation based on locale, without the date - * %z -0500 or EST Either the time zone offset from UTC or the abbreviation - * %Z -0500 or EST The time zone offset/abbreviation option NOT given by %z - * - * === Time and Date === - * %D 02/05/09 Same as %m/%d/%y - * %F 2009-02-05 Same as %Y-%m-%d (commonly used in database datestamps) - * %s 305815200 Unix Epoch Time timestamp (same as the time() function) - * %x 02/05/09 Preferred date representation, without the time - * - * === Miscellaneous === - * %n --- A newline character (\n) - * %t --- A Tab character (\t) - * %% --- A literal percentage character (%) - * </pre> - */ - - jsDate.formats.php = { - codes: { - // - // 2-part regex matcher for format codes - // - // first match must be the character before the code (to account for escaping) - // second match must be the format code character(s) - // - matcher: /()%((%|[a-z]))/i, - // day - a: 'AbbrDayName', - A: 'DayName', - d: 'Date.2', - e: 'Date', - j: 'DayOfYear.3', - u: 'DayOfWeek', - w: 'Day', - // week - U: 'FullWeekOfYear.2', - V: 'IsoWeek.2', - W: 'WeekOfYear.2', - // month - b: 'AbbrMonthName', - B: 'MonthName', - m: 'MonthNumber.2', - h: 'AbbrMonthName', - // year - C: 'Century.2', - y: 'ShortYear.2', - Y: 'FullYear', - // time - H: 'Hours.2', - I: 'Hours12.2', - l: 'Hours12', - p: 'AMPM', - P: 'AmPm', - M: 'Minutes.2', - S: 'Seconds.2', - s: 'Unix', - O: 'TimezoneOffset', - z: 'GmtOffset', - Z: 'TimezoneAbbr' - }, - - shortcuts: { - D: '%m/%d/%y', - F: '%Y-%m-%d', - T: '%H:%M:%S', - X: '%H:%M:%S', - x: '%m/%d/%y', - R: '%H:%M', - r: '%I:%M:%S %p', - t: '\t', - n: '\n', - '%': '%' - } - }; - // - // Conceptually, the logic implemented here is similar to Ken Snyder's Date Instance Methods. - // I use his idea of a set of parsers which can be regular expressions or functions, - // iterating through those, and then seeing if Date.parse() will create a date. - // The parser expressions and functions are a little different and some bugs have been - // worked out. Also, a lot of "pre-parsing" is done to fix implementation - // variations of Date.parse() between browsers. - // - jsDate.createDate = function(date) { - // if passing in multiple arguments, try Date constructor - if (date == null) { - return new Date(); - } - // If the passed value is already a date object, return it - if (date instanceof Date) { - return date; - } - // if (typeof date == 'number') return new Date(date * 1000); - // If the passed value is an integer, interpret it as a javascript timestamp - if (typeof date == 'number') { - return new Date(date); - } - - // Before passing strings into Date.parse(), have to normalize them for certain conditions. - // If strings are not formatted staccording to the EcmaScript spec, results from Date parse will be implementation dependent. - // - // For example: - // * FF and Opera assume 2 digit dates are pre y2k, Chome assumes <50 is pre y2k, 50+ is 21st century. - // * Chrome will correctly parse '1984-1-25' into localtime, FF and Opera will not parse. - // * Both FF, Chrome and Opera will parse '1984/1/25' into localtime. - - // remove leading and trailing spaces - var parsable = String(date).replace(/^\s*(.+)\s*$/g, '$1'); - - // replace dahses (-) with slashes (/) in dates like n[nnn]/n[n]/n[nnn] - parsable = parsable.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/, "$1/$2/$3"); - - ///////// - // Need to check for '15-Dec-09' also. - // FF will not parse, but Chrome will. - // Chrome will set date to 2009 as well. - ///////// - - // first check for 'dd-mmm-yyyy' or 'dd/mmm/yyyy' like '15-Dec-2010' - parsable = parsable.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i, "$1 $2 $3"); - - // Now check for 'dd-mmm-yy' or 'dd/mmm/yy' and normalize years to default century. - var match = parsable.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i); - if (match && match.length > 3) { - var m3 = parseFloat(match[3]); - var ny = jsDate.config.defaultCentury + m3; - ny = String(ny); - - // now replace 2 digit year with 4 digit year - parsable = parsable.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i, match[1] +' '+ match[2] +' '+ ny); - - } - - // Check for '1/19/70 8:14PM' - // where starts with mm/dd/yy or yy/mm/dd and have something after - // Check if 1st postiion is greater than 31, assume it is year. - // Assme all 2 digit years are 1900's. - // Finally, change them into US style mm/dd/yyyy representations. - match = parsable.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/); - - function h1(parsable, match) { - var m1 = parseFloat(match[1]); - var m2 = parseFloat(match[2]); - var m3 = parseFloat(match[3]); - var cent = jsDate.config.defaultCentury; - var ny, nd, nm, str; - - if (m1 > 31) { // first number is a year - nd = m3; - nm = m2; - ny = cent + m1; - } - - else { // last number is the year - nd = m2; - nm = m1; - ny = cent + m3; - } - - str = nm+'/'+nd+'/'+ny; - - // now replace 2 digit year with 4 digit year - return parsable.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/, str); - - } - - if (match && match.length > 3) { - parsable = h1(parsable, match); - } - - // Now check for '1/19/70' with nothing after and do as above - var match = parsable.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/); - - if (match && match.length > 3) { - parsable = h1(parsable, match); - } - - - var i = 0; - var length = jsDate.matchers.length; - var pattern, - ms, - current = parsable, - obj; - while (i < length) { - ms = Date.parse(current); - if (!isNaN(ms)) { - return new Date(ms); - } - pattern = jsDate.matchers[i]; - if (typeof pattern == 'function') { - obj = pattern.call(jsDate, current); - if (obj instanceof Date) { - return obj; - } - } else { - current = parsable.replace(pattern[0], pattern[1]); - } - i++; - } - return NaN; - }; - - - /** - * @static - * Handy static utility function to return the number of days in a given month. - * @param {Integer} year Year - * @param {Integer} month Month (1-12) - * @returns {Integer} Number of days in the month. - */ - // - // handy utility method Borrowed right from Ken Snyder's Date Instance Mehtods. - // - jsDate.daysInMonth = function(year, month) { - if (month == 2) { - return new Date(year, 1, 29).getDate() == 29 ? 29 : 28; - } - return [undefined,31,undefined,31,30,31,30,31,31,30,31,30,31][month]; - }; - - - // - // An Array of regular expressions or functions that will attempt to match the date string. - // Functions are called with scope of a jsDate instance. - // - jsDate.matchers = [ - // convert dd.mmm.yyyy to mm/dd/yyyy (world date to US date). - [/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/, '$2/$1/$3'], - // convert yyyy-mm-dd to mm/dd/yyyy (ISO date to US date). - [/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/, '$2/$3/$1'], - // Handle 12 hour or 24 hour time with milliseconds am/pm and optional date part. - function(str) { - var match = str.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i); - // opt. date hour opt. minute opt. second opt. msec opt. am or pm - if (match) { - if (match[1]) { - var d = this.createDate(match[1]); - if (isNaN(d)) { - return; - } - } else { - var d = new Date(); - d.setMilliseconds(0); - } - var hour = parseFloat(match[2]); - if (match[6]) { - hour = match[6].toLowerCase() == 'am' ? (hour == 12 ? 0 : hour) : (hour == 12 ? 12 : hour + 12); - } - d.setHours(hour, parseInt(match[3] || 0, 10), parseInt(match[4] || 0, 10), ((parseFloat(match[5] || 0)) || 0)*1000); - return d; - } - else { - return str; - } - }, - // Handle ISO timestamp with time zone. - function(str) { - var match = str.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i); - if (match) { - if (match[1]) { - var d = this.createDate(match[1]); - if (isNaN(d)) { - return; - } - } else { - var d = new Date(); - d.setMilliseconds(0); - } - var hour = parseFloat(match[2]); - d.setHours(hour, parseInt(match[3], 10), parseInt(match[4], 10), parseFloat(match[5])*1000); - return d; - } - else { - return str; - } - }, - // Try to match ambiguous strings like 12/8/22. - // Use FF date assumption that 2 digit years are 20th century (i.e. 1900's). - // This may be redundant with pre processing of date already performed. - function(str) { - var match = str.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/); - if (match) { - var d = new Date(); - var cent = jsDate.config.defaultCentury; - var m1 = parseFloat(match[1]); - var m3 = parseFloat(match[3]); - var ny, nd, nm; - if (m1 > 31) { // first number is a year - nd = m3; - ny = cent + m1; - } - - else { // last number is the year - nd = m1; - ny = cent + m3; - } - - var nm = inArray(match[2], jsDate.regional[jsDate.regional.getLocale()]["monthNamesShort"]); - - if (nm == -1) { - nm = inArray(match[2], jsDate.regional[jsDate.regional.getLocale()]["monthNames"]); - } - - d.setFullYear(ny, nm, nd); - d.setHours(0,0,0,0); - return d; - } - - else { - return str; - } - } - ]; - - // - // I think John Reisig published this method on his blog, ejohn. - // - function inArray( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - } - - // - // Thanks to Kangax, Christian Sciberras and Stack Overflow for this method. - // - function get_type(thing){ - if(thing===null) return "[object Null]"; // special case - return Object.prototype.toString.call(thing); - } - - $.jsDate = jsDate; - - - /** - * JavaScript printf/sprintf functions. - * - * This code has been adapted from the publicly available sprintf methods - * by Ash Searle. His original header follows: - * - * This code is unrestricted: you are free to use it however you like. - * - * The functions should work as expected, performing left or right alignment, - * truncating strings, outputting numbers with a required precision etc. - * - * For complex cases, these functions follow the Perl implementations of - * (s)printf, allowing arguments to be passed out-of-order, and to set the - * precision or length of the output based on arguments instead of fixed - * numbers. - * - * See http://perldoc.perl.org/functions/sprintf.html for more information. - * - * Implemented: - * - zero and space-padding - * - right and left-alignment, - * - base X prefix (binary, octal and hex) - * - positive number prefix - * - (minimum) width - * - precision / truncation / maximum width - * - out of order arguments - * - * Not implemented (yet): - * - vector flag - * - size (bytes, words, long-words etc.) - * - * Will not implement: - * - %n or %p (no pass-by-reference in JavaScript) - * - * @version 2007.04.27 - * @author Ash Searle - * - * You can see the original work and comments on his blog: - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - */ - - /** - * @Modifications 2009.05.26 - * @author Chris Leonello - * - * Added %p %P specifier - * Acts like %g or %G but will not add more significant digits to the output than present in the input. - * Example: - * Format: '%.3p', Input: 0.012, Output: 0.012 - * Format: '%.3g', Input: 0.012, Output: 0.0120 - * Format: '%.4p', Input: 12.0, Output: 12.0 - * Format: '%.4g', Input: 12.0, Output: 12.00 - * Format: '%.4p', Input: 4.321e-5, Output: 4.321e-5 - * Format: '%.4g', Input: 4.321e-5, Output: 4.3210e-5 - * - * Example: - * >>> $.jqplot.sprintf('%.2f, %d', 23.3452, 43.23) - * "23.35, 43" - * >>> $.jqplot.sprintf("no value: %n, decimal with thousands separator: %'d", 23.3452, 433524) - * "no value: , decimal with thousands separator: 433,524" - */ - $.jqplot.sprintf = function() { - function pad(str, len, chr, leftJustify) { - var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr); - return leftJustify ? str + padding : padding + str; - - } - - function thousand_separate(value) { - var value_str = new String(value); - for (var i=10; i>0; i--) { - if (value_str == (value_str = value_str.replace(/^(\d+)(\d{3})/, "$1"+$.jqplot.sprintf.thousandsSeparator+"$2"))) break; - } - return value_str; - } - - function justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace) { - var diff = minWidth - value.length; - if (diff > 0) { - var spchar = ' '; - if (htmlSpace) { spchar = ' '; } - if (leftJustify || !zeroPad) { - value = pad(value, minWidth, spchar, leftJustify); - } else { - value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length); - } - } - return value; - } - - function formatBaseX(value, base, prefix, leftJustify, minWidth, precision, zeroPad, htmlSpace) { - // Note: casts negative numbers to positive ones - var number = value >>> 0; - prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || ''; - value = prefix + pad(number.toString(base), precision || 0, '0', false); - return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); - } - - function formatString(value, leftJustify, minWidth, precision, zeroPad, htmlSpace) { - if (precision != null) { - value = value.slice(0, precision); - } - return justify(value, '', leftJustify, minWidth, zeroPad, htmlSpace); - } - - var a = arguments, i = 0, format = a[i++]; - - return format.replace($.jqplot.sprintf.regex, function(substring, valueIndex, flags, minWidth, _, precision, type) { - if (substring == '%%') { return '%'; } - - // parse flags - var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, htmlSpace = false, thousandSeparation = false; - for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) { - case ' ': positivePrefix = ' '; break; - case '+': positivePrefix = '+'; break; - case '-': leftJustify = true; break; - case '0': zeroPad = true; break; - case '#': prefixBaseX = true; break; - case '&': htmlSpace = true; break; - case '\'': thousandSeparation = true; break; - } - - // parameters may be null, undefined, empty-string or real valued - // we want to ignore null, undefined and empty-string values - - if (!minWidth) { - minWidth = 0; - } - else if (minWidth == '*') { - minWidth = +a[i++]; - } - else if (minWidth.charAt(0) == '*') { - minWidth = +a[minWidth.slice(1, -1)]; - } - else { - minWidth = +minWidth; - } - - // Note: undocumented perl feature: - if (minWidth < 0) { - minWidth = -minWidth; - leftJustify = true; - } - - if (!isFinite(minWidth)) { - throw new Error('$.jqplot.sprintf: (minimum-)width must be finite'); - } - - if (!precision) { - precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0); - } - else if (precision == '*') { - precision = +a[i++]; - } - else if (precision.charAt(0) == '*') { - precision = +a[precision.slice(1, -1)]; - } - else { - precision = +precision; - } - - // grab value using valueIndex if required? - var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++]; - - switch (type) { - case 's': { - if (value == null) { - return ''; - } - return formatString(String(value), leftJustify, minWidth, precision, zeroPad, htmlSpace); - } - case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad, htmlSpace); - case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad,htmlSpace); - case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); - case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); - case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace).toUpperCase(); - case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); - case 'i': { - var number = parseInt(+value, 10); - if (isNaN(number)) { - return ''; - } - var prefix = number < 0 ? '-' : positivePrefix; - var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number)); - value = prefix + pad(number_str, precision, '0', false); - //value = prefix + pad(String(Math.abs(number)), precision, '0', false); - return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); - } - case 'd': { - var number = Math.round(+value); - if (isNaN(number)) { - return ''; - } - var prefix = number < 0 ? '-' : positivePrefix; - var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number)); - value = prefix + pad(number_str, precision, '0', false); - return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); - } - case 'e': - case 'E': - case 'f': - case 'F': - case 'g': - case 'G': - { - var number = +value; - if (isNaN(number)) { - return ''; - } - var prefix = number < 0 ? '-' : positivePrefix; - var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())]; - var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2]; - var number_str = Math.abs(number)[method](precision); - number_str = thousandSeparation ? thousand_separate(number_str): number_str; - value = prefix + number_str; - var justified = justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform](); - - if ($.jqplot.sprintf.decimalMark !== '.' && $.jqplot.sprintf.decimalMark !== $.jqplot.sprintf.thousandsSeparator) { - return justified.replace(/\./, $.jqplot.sprintf.decimalMark); - } else { - return justified; - } - } - case 'p': - case 'P': - { - // make sure number is a number - var number = +value; - if (isNaN(number)) { - return ''; - } - var prefix = number < 0 ? '-' : positivePrefix; - - var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/); - var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length; - var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0; - - if (Math.abs(number) < 1) { - if (sd + zeros <= precision) { - value = prefix + Math.abs(number).toPrecision(sd); - } - else { - if (sd <= precision - 1) { - value = prefix + Math.abs(number).toExponential(sd-1); - } - else { - value = prefix + Math.abs(number).toExponential(precision-1); - } - } - } - else { - var prec = (sd <= precision) ? sd : precision; - value = prefix + Math.abs(number).toPrecision(prec); - } - var textTransform = ['toString', 'toUpperCase']['pP'.indexOf(type) % 2]; - return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform](); - } - case 'n': return ''; - default: return substring; - } - }); - }; - - $.jqplot.sprintf.thousandsSeparator = ','; - // Specifies the decimal mark for floating point values. By default a period '.' - // is used. If you change this value to for example a comma be sure to also - // change the thousands separator or else this won't work since a simple String - // replace is used (replacing all periods with the mark specified here). - $.jqplot.sprintf.decimalMark = '.'; - - $.jqplot.sprintf.regex = /%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g; - - $.jqplot.getSignificantFigures = function(number) { - var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/); - // total significant digits - var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length; - var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0; - // exponent - var expn = parseInt(parts[1], 10); - // digits to the left of the decimal place - var dleft = (expn + 1 > 0) ? expn + 1 : 0; - // digits to the right of the decimal place - var dright = (sd <= dleft) ? 0 : sd - expn - 1; - return {significantDigits: sd, digitsLeft: dleft, digitsRight: dright, zeros: zeros, exponent: expn} ; - }; - - $.jqplot.getPrecision = function(number) { - return $.jqplot.getSignificantFigures(number).digitsRight; - }; - -})(jQuery); - - - var backCompat = $.uiBackCompat !== false; - - $.jqplot.effects = { - effect: {} - }; - - // prefix used for storing data on .data() - var dataSpace = "jqplot.storage."; - - /******************************************************************************/ - /*********************************** EFFECTS **********************************/ - /******************************************************************************/ - - $.extend( $.jqplot.effects, { - version: "1.9pre", - - // Saves a set of properties in a data storage - save: function( element, set ) { - for( var i=0; i < set.length; i++ ) { - if ( set[ i ] !== null ) { - element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); - } - } - }, - - // Restores a set of previously saved properties from a data storage - restore: function( element, set ) { - for( var i=0; i < set.length; i++ ) { - if ( set[ i ] !== null ) { - element.css( set[ i ], element.data( dataSpace + set[ i ] ) ); - } - } - }, - - setMode: function( el, mode ) { - if (mode === "toggle") { - mode = el.is( ":hidden" ) ? "show" : "hide"; - } - return mode; - }, - - // Wraps the element around a wrapper that copies position properties - createWrapper: function( element ) { - - // if the element is already wrapped, return it - if ( element.parent().is( ".ui-effects-wrapper" )) { - return element.parent(); - } - - // wrap the element - var props = { - width: element.outerWidth(true), - height: element.outerHeight(true), - "float": element.css( "float" ) - }, - wrapper = $( "<div></div>" ) - .addClass( "ui-effects-wrapper" ) - .css({ - fontSize: "100%", - background: "transparent", - border: "none", - margin: 0, - padding: 0 - }), - // Store the size in case width/height are defined in % - Fixes #5245 - size = { - width: element.width(), - height: element.height() - }, - active = document.activeElement; - - element.wrap( wrapper ); - - // Fixes #7595 - Elements lose focus when wrapped. - if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { - $( active ).focus(); - } - - wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element - - // transfer positioning properties to the wrapper - if ( element.css( "position" ) === "static" ) { - wrapper.css({ position: "relative" }); - element.css({ position: "relative" }); - } else { - $.extend( props, { - position: element.css( "position" ), - zIndex: element.css( "z-index" ) - }); - $.each([ "top", "left", "bottom", "right" ], function(i, pos) { - props[ pos ] = element.css( pos ); - if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { - props[ pos ] = "auto"; - } - }); - element.css({ - position: "relative", - top: 0, - left: 0, - right: "auto", - bottom: "auto" - }); - } - element.css(size); - - return wrapper.css( props ).show(); - }, - - removeWrapper: function( element ) { - var active = document.activeElement; - - if ( element.parent().is( ".ui-effects-wrapper" ) ) { - element.parent().replaceWith( element ); - - // Fixes #7595 - Elements lose focus when wrapped. - if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { - $( active ).focus(); - } - } - - - return element; - } - }); - - // return an effect options object for the given parameters: - function _normalizeArguments( effect, options, speed, callback ) { - - // short path for passing an effect options object: - if ( $.isPlainObject( effect ) ) { - return effect; - } - - // convert to an object - effect = { effect: effect }; - - // catch (effect) - if ( options === undefined ) { - options = {}; - } - - // catch (effect, callback) - if ( $.isFunction( options ) ) { - callback = options; - speed = null; - options = {}; - } - - // catch (effect, speed, ?) - if ( $.type( options ) === "number" || $.fx.speeds[ options ]) { - callback = speed; - speed = options; - options = {}; - } - - // catch (effect, options, callback) - if ( $.isFunction( speed ) ) { - callback = speed; - speed = null; - } - - // add options to effect - if ( options ) { - $.extend( effect, options ); - } - - speed = speed || options.duration; - effect.duration = $.fx.off ? 0 : typeof speed === "number" - ? speed : speed in $.fx.speeds ? $.fx.speeds[ speed ] : $.fx.speeds._default; - - effect.complete = callback || options.complete; - - return effect; - } - - function standardSpeed( speed ) { - // valid standard speeds - if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { - return true; - } - - // invalid strings - treat as "normal" speed - if ( typeof speed === "string" && !$.jqplot.effects.effect[ speed ] ) { - // TODO: remove in 2.0 (#7115) - if ( backCompat && $.jqplot.effects[ speed ] ) { - return false; - } - return true; - } - - return false; - } - - $.fn.extend({ - jqplotEffect: function( effect, options, speed, callback ) { - var args = _normalizeArguments.apply( this, arguments ), - mode = args.mode, - queue = args.queue, - effectMethod = $.jqplot.effects.effect[ args.effect ], - - // DEPRECATED: remove in 2.0 (#7115) - oldEffectMethod = !effectMethod && backCompat && $.jqplot.effects[ args.effect ]; - - if ( $.fx.off || !( effectMethod || oldEffectMethod ) ) { - // delegate to the original method (e.g., .show()) if possible - if ( mode ) { - return this[ mode ]( args.duration, args.complete ); - } else { - return this.each( function() { - if ( args.complete ) { - args.complete.call( this ); - } - }); - } - } - - function run( next ) { - var elem = $( this ), - complete = args.complete, - mode = args.mode; - - function done() { - if ( $.isFunction( complete ) ) { - complete.call( elem[0] ); - } - if ( $.isFunction( next ) ) { - next(); - } - } - - // if the element is hiddden and mode is hide, - // or element is visible and mode is show - if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { - done(); - } else { - effectMethod.call( elem[0], args, done ); - } - } - - // TODO: remove this check in 2.0, effectMethod will always be true - if ( effectMethod ) { - return queue === false ? this.each( run ) : this.queue( queue || "fx", run ); - } else { - // DEPRECATED: remove in 2.0 (#7115) - return oldEffectMethod.call(this, { - options: args, - duration: args.duration, - callback: args.complete, - mode: args.mode - }); - } - } - }); - - - - - var rvertical = /up|down|vertical/, - rpositivemotion = /up|left|vertical|horizontal/; - - $.jqplot.effects.effect.blind = function( o, done ) { - // Create element - var el = $( this ), - props = [ "position", "top", "bottom", "left", "right", "height", "width" ], - mode = $.jqplot.effects.setMode( el, o.mode || "hide" ), - direction = o.direction || "up", - vertical = rvertical.test( direction ), - ref = vertical ? "height" : "width", - ref2 = vertical ? "top" : "left", - motion = rpositivemotion.test( direction ), - animation = {}, - show = mode === "show", - wrapper, distance, top; - - // // if already wrapped, the wrapper's properties are my property. #6245 - if ( el.parent().is( ".ui-effects-wrapper" ) ) { - $.jqplot.effects.save( el.parent(), props ); - } else { - $.jqplot.effects.save( el, props ); - } - el.show(); - top = parseInt(el.css('top'), 10); - wrapper = $.jqplot.effects.createWrapper( el ).css({ - overflow: "hidden" - }); - - distance = vertical ? wrapper[ ref ]() + top : wrapper[ ref ](); - - animation[ ref ] = show ? String(distance) : '0'; - if ( !motion ) { - el - .css( vertical ? "bottom" : "right", 0 ) - .css( vertical ? "top" : "left", "" ) - .css({ position: "absolute" }); - animation[ ref2 ] = show ? '0' : String(distance); - } - - // // start at 0 if we are showing - if ( show ) { - wrapper.css( ref, 0 ); - if ( ! motion ) { - wrapper.css( ref2, distance ); - } - } - - // // Animate - wrapper.animate( animation, { - duration: o.duration, - easing: o.easing, - queue: false, - complete: function() { - if ( mode === "hide" ) { - el.hide(); - } - $.jqplot.effects.restore( el, props ); - $.jqplot.effects.removeWrapper( el ); - done(); - } - }); - - }; - - diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css deleted file mode 100644 index de15fff5..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css +++ /dev/null @@ -1 +0,0 @@ -.jqplot-target{position:relative;color:#666;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em;}.jqplot-axis{font-size:.75em;}.jqplot-xaxis{margin-top:10px;}.jqplot-x2axis{margin-bottom:10px;}.jqplot-yaxis{margin-right:10px;}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px;}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre;}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top;}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom;}.jqplot-yaxis-tick{right:0;top:15px;text-align:right;}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px 5px;z-index:2;font-size:1.5em;}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left;}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap;}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute;}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute;}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute;}.jqplot-yMidAxis-label{font-size:11pt;position:absolute;}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute;}.jqplot-meterGauge-tick{font-size:.75em;color:#999;}.jqplot-meterGauge-label{font-size:1em;color:#999;}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;}table.jqplot-table-legend,table.jqplot-cursor-legend{background-color:rgba(255,255,255,0.6);border:1px solid #ccc;position:absolute;font-size:.75em;}td.jqplot-table-legend{vertical-align:middle;}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer;}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through;}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px;}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid;}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em;}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;}.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-point-label{font-size:.75em;z-index:2;}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center;}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em;}.jqplot-error{text-align:center;}.jqplot-error-message{position:relative;top:46%;display:inline-block;}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%);}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,0.7);}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,0.3);} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js deleted file mode 100644 index 1def2792..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(H){var r;H.fn.emptyForce=function(){for(var ab=0,ac;(ac=H(this)[ab])!=null;ab++){if(ac.nodeType===1){H.cleanData(ac.getElementsByTagName("*"))}if(H.jqplot.use_excanvas){ac.outerHTML=""}else{while(ac.firstChild){ac.removeChild(ac.firstChild)}}ac=null}return H(this)};H.fn.removeChildForce=function(ab){while(ab.firstChild){this.removeChildForce(ab.firstChild);ab.removeChild(ab.firstChild)}};H.fn.jqplot=function(){var ab=[];var ad=[];for(var ae=0,ac=arguments.length;ae<ac;ae++){if(H.isArray(arguments[ae])){ab.push(arguments[ae])}else{if(H.isPlainObject(arguments[ae])){ad.push(arguments[ae])}}}return this.each(function(ah){var am,al,ak=H(this),ag=ab.length,af=ad.length,aj,ai;if(ah<ag){aj=ab[ah]}else{aj=ag?ab[ag-1]:null}if(ah<af){ai=ad[ah]}else{ai=af?ad[af-1]:null}am=ak.attr("id");if(am===r){am="jqplot_target_"+H.jqplot.targetCounter++;ak.attr("id",am)}al=H.jqplot(am,aj,ai);ak.data("jqplot",al)})};H.jqplot=function(ah,ae,ac){var ad=null,ab=null;if(arguments.length===3){ad=ae;ab=ac}else{if(arguments.length===2){if(H.isArray(ae)){ad=ae}else{if(H.isPlainObject(ae)){ab=ae}}}}if(ad===null&&ab!==null&&ab.data){ad=ab.data}var ag=new N();H("#"+ah).removeClass("jqplot-error");if(H.jqplot.config.catchErrors){try{ag.init(ah,ad,ab);ag.draw();ag.themeEngine.init.call(ag);return ag}catch(af){var ai=H.jqplot.config.errorMessage||af.message;H("#"+ah).append('<div class="jqplot-error-message">'+ai+"</div>");H("#"+ah).addClass("jqplot-error");document.getElementById(ah).style.background=H.jqplot.config.errorBackground;document.getElementById(ah).style.border=H.jqplot.config.errorBorder;document.getElementById(ah).style.fontFamily=H.jqplot.config.errorFontFamily;document.getElementById(ah).style.fontSize=H.jqplot.config.errorFontSize;document.getElementById(ah).style.fontStyle=H.jqplot.config.errorFontStyle;document.getElementById(ah).style.fontWeight=H.jqplot.config.errorFontWeight}}else{ag.init(ah,ad,ab);ag.draw();ag.themeEngine.init.call(ag);return ag}};H.jqplot.version="1.0.4";H.jqplot.revision="1121";H.jqplot.targetCounter=1;H.jqplot.CanvasManager=function(){if(typeof H.jqplot.CanvasManager.canvases=="undefined"){H.jqplot.CanvasManager.canvases=[];H.jqplot.CanvasManager.free=[]}var ab=[];this.getCanvas=function(){var ae;var ad=true;if(!H.jqplot.use_excanvas){for(var af=0,ac=H.jqplot.CanvasManager.canvases.length;af<ac;af++){if(H.jqplot.CanvasManager.free[af]===true){ad=false;ae=H.jqplot.CanvasManager.canvases[af];H.jqplot.CanvasManager.free[af]=false;ab.push(af);break}}}if(ad){ae=document.createElement("canvas");ab.push(H.jqplot.CanvasManager.canvases.length);H.jqplot.CanvasManager.canvases.push(ae);H.jqplot.CanvasManager.free.push(false)}return ae};this.initCanvas=function(ac){if(H.jqplot.use_excanvas){return window.G_vmlCanvasManager.initElement(ac)}return ac};this.freeAllCanvases=function(){for(var ad=0,ac=ab.length;ad<ac;ad++){this.freeCanvas(ab[ad])}ab=[]};this.freeCanvas=function(ac){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(H.jqplot.CanvasManager.canvases[ac]);H.jqplot.CanvasManager.canvases[ac]=null}else{var ad=H.jqplot.CanvasManager.canvases[ac];ad.getContext("2d").clearRect(0,0,ad.width,ad.height);H(ad).unbind().removeAttr("class").removeAttr("style");H(ad).css({left:"",top:"",position:""});ad.width=0;ad.height=0;H.jqplot.CanvasManager.free[ac]=true}}};H.jqplot.log=function(){if(window.console){window.console.log.apply(window.console,arguments)}};H.jqplot.config={addDomReference:false,enablePlugins:false,defaultHeight:300,defaultWidth:400,UTCAdjust:false,timezoneOffset:new Date(new Date().getTimezoneOffset()*60000),errorMessage:"",errorBackground:"",errorBorder:"",errorFontFamily:"",errorFontSize:"",errorFontStyle:"",errorFontWeight:"",catchErrors:false,defaultTickFormatString:"%.1f",defaultColors:["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"],defaultNegativeColors:["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"],dashLength:4,gapLength:4,dotGapLength:2.5,srcLocation:"jqplot/src/",pluginLocation:"jqplot/src/plugins/"};H.jqplot.arrayMax=function(ab){return Math.max.apply(Math,ab)};H.jqplot.arrayMin=function(ab){return Math.min.apply(Math,ab)};H.jqplot.enablePlugins=H.jqplot.config.enablePlugins;H.jqplot.support_canvas=function(){if(typeof H.jqplot.support_canvas.result=="undefined"){H.jqplot.support_canvas.result=!!document.createElement("canvas").getContext}return H.jqplot.support_canvas.result};H.jqplot.support_canvas_text=function(){if(typeof H.jqplot.support_canvas_text.result=="undefined"){if(window.G_vmlCanvasManager!==r&&window.G_vmlCanvasManager._version>887){H.jqplot.support_canvas_text.result=true}else{H.jqplot.support_canvas_text.result=!!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}}return H.jqplot.support_canvas_text.result};H.jqplot.use_excanvas=(H.browser.msie&&!H.jqplot.support_canvas())?true:false;H.jqplot.preInitHooks=[];H.jqplot.postInitHooks=[];H.jqplot.preParseOptionsHooks=[];H.jqplot.postParseOptionsHooks=[];H.jqplot.preDrawHooks=[];H.jqplot.postDrawHooks=[];H.jqplot.preDrawSeriesHooks=[];H.jqplot.postDrawSeriesHooks=[];H.jqplot.preDrawLegendHooks=[];H.jqplot.addLegendRowHooks=[];H.jqplot.preSeriesInitHooks=[];H.jqplot.postSeriesInitHooks=[];H.jqplot.preParseSeriesOptionsHooks=[];H.jqplot.postParseSeriesOptionsHooks=[];H.jqplot.eventListenerHooks=[];H.jqplot.preDrawSeriesShadowHooks=[];H.jqplot.postDrawSeriesShadowHooks=[];H.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};H.jqplot.ElemContainer.prototype.createElement=function(ae,ag,ac,ad,ah){this._offsets=ag;var ab=ac||"jqplot";var af=document.createElement(ae);this._elem=H(af);this._elem.addClass(ab);this._elem.css(ad);this._elem.attr(ah);af=null;return this._elem};H.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};H.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};H.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};H.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};H.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};H.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};H.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function s(ab){H.jqplot.ElemContainer.call(this);this.name=ab;this._series=[];this.show=false;this.tickRenderer=H.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=H.jqplot.AxisLabelRenderer;this.labelOptions={};this.label=null;this.showLabel=true;this.min=null;this.max=null;this.autoscale=false;this.pad=1.2;this.padMax=null;this.padMin=null;this.ticks=[];this.numberTicks;this.tickInterval;this.renderer=H.jqplot.LinearAxisRenderer;this.rendererOptions={};this.showTicks=true;this.showTickMarks=true;this.showMinorTicks=true;this.drawMajorGridlines=true;this.drawMinorGridlines=false;this.drawMajorTickMarks=true;this.drawMinorTickMarks=true;this.useSeriesColor=false;this.borderWidth=null;this.borderColor=null;this.scaleToHiddenSeries=false;this._dataBounds={min:null,max:null};this._intervalStats=[];this._offsets={min:null,max:null};this._ticks=[];this._label=null;this.syncTicks=null;this.tickSpacing=75;this._min=null;this._max=null;this._tickInterval=null;this._numberTicks=null;this.__ticks=null;this._options={}}s.prototype=new H.jqplot.ElemContainer();s.prototype.constructor=s;s.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.tickOptions.axis=this.name;if(this.tickOptions.showMark==null){this.tickOptions.showMark=this.showTicks}if(this.tickOptions.showMark==null){this.tickOptions.showMark=this.showTickMarks}if(this.tickOptions.showLabel==null){this.tickOptions.showLabel=this.showTicks}if(this.label==null||this.label==""){this.showLabel=false}else{this.labelOptions.label=this.label}if(this.showLabel==false){this.labelOptions.show=false}if(this.pad==0){this.pad=1}if(this.padMax==0){this.padMax=1}if(this.padMin==0){this.padMin=1}if(this.padMax==null){this.padMax=(this.pad-1)/2+1}if(this.padMin==null){this.padMin=(this.pad-1)/2+1}this.pad=this.padMax+this.padMin-1;if(this.min!=null||this.max!=null){this.autoscale=false}if(this.syncTicks==null&&this.name.indexOf("y")>-1){this.syncTicks=true}else{if(this.syncTicks==null){this.syncTicks=false}}this.renderer.init.call(this,this.rendererOptions)};s.prototype.draw=function(ab,ac){if(this.__ticks){this.__ticks=null}return this.renderer.draw.call(this,ab,ac)};s.prototype.set=function(){this.renderer.set.call(this)};s.prototype.pack=function(ac,ab){if(this.show){this.renderer.pack.call(this,ac,ab)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};s.prototype.reset=function(){this.renderer.reset.call(this)};s.prototype.resetScale=function(ab){H.extend(true,this,{min:null,max:null,numberTicks:null,tickInterval:null,_ticks:[],ticks:[]},ab);this.resetDataBounds()};s.prototype.resetDataBounds=function(){var ai=this._dataBounds;ai.min=null;ai.max=null;var ac,aj,ag;var ad=(this.show)?true:false;for(var af=0;af<this._series.length;af++){aj=this._series[af];if(aj.show||this.scaleToHiddenSeries){ag=aj._plotData;if(aj._type==="line"&&aj.renderer.bands.show&&this.name.charAt(0)!=="x"){ag=[[0,aj.renderer.bands._min],[1,aj.renderer.bands._max]]}var ab=1,ah=1;if(aj._type!=null&&aj._type=="ohlc"){ab=3;ah=2}for(var ae=0,ac=ag.length;ae<ac;ae++){if(this.name=="xaxis"||this.name=="x2axis"){if((ag[ae][0]!=null&&ag[ae][0]<ai.min)||ai.min==null){ai.min=ag[ae][0]}if((ag[ae][0]!=null&&ag[ae][0]>ai.max)||ai.max==null){ai.max=ag[ae][0]}}else{if((ag[ae][ab]!=null&&ag[ae][ab]<ai.min)||ai.min==null){ai.min=ag[ae][ab]}if((ag[ae][ah]!=null&&ag[ae][ah]>ai.max)||ai.max==null){ai.max=ag[ae][ah]}}}if(ad&&aj.renderer.constructor!==H.jqplot.BarRenderer){ad=false}else{if(ad&&this._options.hasOwnProperty("forceTickAt0")&&this._options.forceTickAt0==false){ad=false}else{if(ad&&aj.renderer.constructor===H.jqplot.BarRenderer){if(aj.barDirection=="vertical"&&this.name!="xaxis"&&this.name!="x2axis"){if(this._options.pad!=null||this._options.padMin!=null){ad=false}}else{if(aj.barDirection=="horizontal"&&(this.name=="xaxis"||this.name=="x2axis")){if(this._options.pad!=null||this._options.padMin!=null){ad=false}}}}}}}}if(ad&&this.renderer.constructor===H.jqplot.LinearAxisRenderer&&ai.min>=0){this.padMin=1;this.forceTickAt0=true}};function n(ab){H.jqplot.ElemContainer.call(this);this.show=false;this.location="ne";this.labels=[];this.showLabels=true;this.showSwatches=true;this.placement="insideGrid";this.xoffset=0;this.yoffset=0;this.border;this.background;this.textColor;this.fontFamily;this.fontSize;this.rowSpacing="0.5em";this.renderer=H.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.marginTop=null;this.marginRight=null;this.marginBottom=null;this.marginLeft=null;this.escapeHtml=false;this._series=[];H.extend(true,this,ab)}n.prototype=new H.jqplot.ElemContainer();n.prototype.constructor=n;n.prototype.setOptions=function(ab){H.extend(true,this,ab);if(this.placement=="inside"){this.placement="insideGrid"}if(this.xoffset>0){if(this.placement=="insideGrid"){switch(this.location){case"nw":case"w":case"sw":if(this.marginLeft==null){this.marginLeft=this.xoffset+"px"}this.marginRight="0px";break;case"ne":case"e":case"se":default:if(this.marginRight==null){this.marginRight=this.xoffset+"px"}this.marginLeft="0px";break}}else{if(this.placement=="outside"){switch(this.location){case"nw":case"w":case"sw":if(this.marginRight==null){this.marginRight=this.xoffset+"px"}this.marginLeft="0px";break;case"ne":case"e":case"se":default:if(this.marginLeft==null){this.marginLeft=this.xoffset+"px"}this.marginRight="0px";break}}}this.xoffset=0}if(this.yoffset>0){if(this.placement=="outside"){switch(this.location){case"sw":case"s":case"se":if(this.marginTop==null){this.marginTop=this.yoffset+"px"}this.marginBottom="0px";break;case"ne":case"n":case"nw":default:if(this.marginBottom==null){this.marginBottom=this.yoffset+"px"}this.marginTop="0px";break}}else{if(this.placement=="insideGrid"){switch(this.location){case"sw":case"s":case"se":if(this.marginBottom==null){this.marginBottom=this.yoffset+"px"}this.marginTop="0px";break;case"ne":case"n":case"nw":default:if(this.marginTop==null){this.marginTop=this.yoffset+"px"}this.marginBottom="0px";break}}}this.yoffset=0}};n.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};n.prototype.draw=function(ac,ad){for(var ab=0;ab<H.jqplot.preDrawLegendHooks.length;ab++){H.jqplot.preDrawLegendHooks[ab].call(this,ac)}return this.renderer.draw.call(this,ac,ad)};n.prototype.pack=function(ab){this.renderer.pack.call(this,ab)};function u(ab){H.jqplot.ElemContainer.call(this);this.text=ab;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=H.jqplot.DivTitleRenderer;this.rendererOptions={};this.escapeHtml=false}u.prototype=new H.jqplot.ElemContainer();u.prototype.constructor=u;u.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};u.prototype.draw=function(ab){return this.renderer.draw.call(this,ab)};u.prototype.pack=function(){this.renderer.pack.call(this)};function O(ab){ab=ab||{};H.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=H.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.negativeColor;this.lineWidth=2.5;this.lineJoin="round";this.lineCap="round";this.linePattern="solid";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=H.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillToValue=0;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new H.jqplot.GenericCanvas();this.shadowCanvas=new H.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0;this._type=""}O.prototype=new H.jqplot.ElemContainer();O.prototype.constructor=O;O.prototype.init=function(ae,ai,ag){this.index=ae;this.gridBorderWidth=ai;var ah=this.data;var ad=[],af,ab;for(af=0,ab=ah.length;af<ab;af++){if(!this.breakOnNull){if(ah[af]==null||ah[af][0]==null||ah[af][1]==null){continue}else{ad.push(ah[af])}}else{ad.push(ah[af])}}this.data=ad;if(!this.color){this.color=ag.colorGenerator.get(this.index)}if(!this.negativeColor){this.negativeColor=ag.negativeColorGenerator.get(this.index)}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var ac=H.jqplot.normalize2rgb(this.fillColor);var ac=H.jqplot.getColorComponents(ac);this.fillColor="rgba("+ac[0]+","+ac[1]+","+ac[2]+","+this.fillAlpha+")"}if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions,ag);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.showMarker=this.markerOptions.show;this.markerRenderer.init(this.markerOptions)};O.prototype.draw=function(ah,ae,ag){var ac=(ae==r)?{}:ae;ah=(ah==r)?this.canvas._ctx:ah;var ab,af,ad;for(ab=0;ab<H.jqplot.preDrawSeriesHooks.length;ab++){H.jqplot.preDrawSeriesHooks[ab].call(this,ah,ac)}if(this.show){this.renderer.setGridData.call(this,ag);if(!ac.preventJqPlotSeriesDrawTrigger){H(ah.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}af=[];if(ac.data){af=ac.data}else{if(!this._stack){af=this.data}else{af=this._plotData}}ad=ac.gridData||this.renderer.makeGridData.call(this,af,ag);if(this._type==="line"&&this.renderer.smooth&&this.renderer._smoothedData.length){ad=this.renderer._smoothedData}this.renderer.draw.call(this,ah,ad,ac,ag)}for(ab=0;ab<H.jqplot.postDrawSeriesHooks.length;ab++){H.jqplot.postDrawSeriesHooks[ab].call(this,ah,ac,ag)}ah=ae=ag=ab=af=ad=null};O.prototype.drawShadow=function(ah,ae,ag){var ac=(ae==r)?{}:ae;ah=(ah==r)?this.shadowCanvas._ctx:ah;var ab,af,ad;for(ab=0;ab<H.jqplot.preDrawSeriesShadowHooks.length;ab++){H.jqplot.preDrawSeriesShadowHooks[ab].call(this,ah,ac)}if(this.shadow){this.renderer.setGridData.call(this,ag);af=[];if(ac.data){af=ac.data}else{if(!this._stack){af=this.data}else{af=this._plotData}}ad=ac.gridData||this.renderer.makeGridData.call(this,af,ag);this.renderer.drawShadow.call(this,ah,ad,ac,ag)}for(ab=0;ab<H.jqplot.postDrawSeriesShadowHooks.length;ab++){H.jqplot.postDrawSeriesShadowHooks[ab].call(this,ah,ac)}ah=ae=ag=ab=af=ad=null};O.prototype.toggleDisplay=function(ac,ae){var ab,ad;if(ac.data.series){ab=ac.data.series}else{ab=this}if(ac.data.speed){ad=ac.data.speed}if(ad){if(ab.canvas._elem.is(":hidden")||!ab.show){ab.show=true;ab.canvas._elem.removeClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.fadeIn(ad)}ab.canvas._elem.fadeIn(ad,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).fadeIn(ad)}else{ab.show=false;ab.canvas._elem.addClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.fadeOut(ad)}ab.canvas._elem.fadeOut(ad,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).fadeOut(ad)}}else{if(ab.canvas._elem.is(":hidden")||!ab.show){ab.show=true;ab.canvas._elem.removeClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.show()}ab.canvas._elem.show(0,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).show()}else{ab.show=false;ab.canvas._elem.addClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.hide()}ab.canvas._elem.hide(0,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).hide()}}};function I(){H.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.drawBorder=true;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowColor=null;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=H.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}I.prototype=new H.jqplot.ElemContainer();I.prototype.constructor=I;I.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};I.prototype.createElement=function(ab,ac){this._offsets=ab;return this.renderer.createElement.call(this,ac)};I.prototype.draw=function(){this.renderer.draw.call(this)};H.jqplot.GenericCanvas=function(){H.jqplot.ElemContainer.call(this);this._ctx};H.jqplot.GenericCanvas.prototype=new H.jqplot.ElemContainer();H.jqplot.GenericCanvas.prototype.constructor=H.jqplot.GenericCanvas;H.jqplot.GenericCanvas.prototype.createElement=function(af,ad,ac,ag){this._offsets=af;var ab="jqplot";if(ad!=r){ab=ad}var ae;ae=ag.canvasManager.getCanvas();if(ac!=null){this._plotDimensions=ac}ae.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;ae.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=H(ae);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});this._elem.addClass(ab);ae=ag.canvasManager.initCanvas(ae);ae=null;return this._elem};H.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};H.jqplot.GenericCanvas.prototype.resetCanvas=function(){if(this._elem){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce()}this._ctx=null};H.jqplot.HooksManager=function(){this.hooks=[];this.args=[]};H.jqplot.HooksManager.prototype.addOnce=function(ae,ac){ac=ac||[];var af=false;for(var ad=0,ab=this.hooks.length;ad<ab;ad++){if(this.hooks[ad]==ae){af=true}}if(!af){this.hooks.push(ae);this.args.push(ac)}};H.jqplot.HooksManager.prototype.add=function(ac,ab){ab=ab||[];this.hooks.push(ac);this.args.push(ab)};H.jqplot.EventListenerManager=function(){this.hooks=[]};H.jqplot.EventListenerManager.prototype.addOnce=function(af,ae){var ag=false,ad,ac;for(var ac=0,ab=this.hooks.length;ac<ab;ac++){ad=this.hooks[ac];if(ad[0]==af&&ad[1]==ae){ag=true}}if(!ag){this.hooks.push([af,ae])}};H.jqplot.EventListenerManager.prototype.add=function(ac,ab){this.hooks.push([ac,ab])};var Q=["yMidAxis","xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];function N(){this.animate=false;this.animateReplot=false;this.axes={xaxis:new s("xaxis"),yaxis:new s("yaxis"),x2axis:new s("x2axis"),y2axis:new s("y2axis"),y3axis:new s("y3axis"),y4axis:new s("y4axis"),y5axis:new s("y5axis"),y6axis:new s("y6axis"),y7axis:new s("y7axis"),y8axis:new s("y8axis"),y9axis:new s("y9axis"),yMidAxis:new s("yMidAxis")};this.baseCanvas=new H.jqplot.GenericCanvas();this.captureRightClick=false;this.data=[];this.dataRenderer;this.dataRendererOptions;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{},yMidAxis:{}},seriesDefaults:{},series:[]};this.defaultAxisStart=1;this.drawIfHidden=false;this.eventCanvas=new H.jqplot.GenericCanvas();this.fillBetween={series1:null,series2:null,color:null,baseSeries:0,fill:true};this.fontFamily;this.fontSize;this.grid=new I();this.legend=new n();this.negativeSeriesColors=H.jqplot.config.defaultNegativeColors;this.noDataIndicator={show:false,indicator:"Loading Data...",axes:{xaxis:{min:0,max:10,tickInterval:2,show:true},yaxis:{min:0,max:12,tickInterval:3,show:true}}};this.options={};this.previousSeriesStack=[];this.plugins={};this.series=[];this.seriesStack=[];this.seriesColors=H.jqplot.config.defaultColors;this.sortData=true;this.stackSeries=false;this.syncXTicks=true;this.syncYTicks=true;this.target=null;this.targetId=null;this.textColor;this.title=new u();this._drawCount=0;this._sumy=0;this._sumx=0;this._stackData=[];this._plotData=[];this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:null,right:null,bottom:null,left:null};this._defaultGridPadding={top:10,right:10,bottom:23,left:10};this._addDomReference=H.jqplot.config.addDomReference;this.preInitHooks=new H.jqplot.HooksManager();this.postInitHooks=new H.jqplot.HooksManager();this.preParseOptionsHooks=new H.jqplot.HooksManager();this.postParseOptionsHooks=new H.jqplot.HooksManager();this.preDrawHooks=new H.jqplot.HooksManager();this.postDrawHooks=new H.jqplot.HooksManager();this.preDrawSeriesHooks=new H.jqplot.HooksManager();this.postDrawSeriesHooks=new H.jqplot.HooksManager();this.preDrawLegendHooks=new H.jqplot.HooksManager();this.addLegendRowHooks=new H.jqplot.HooksManager();this.preSeriesInitHooks=new H.jqplot.HooksManager();this.postSeriesInitHooks=new H.jqplot.HooksManager();this.preParseSeriesOptionsHooks=new H.jqplot.HooksManager();this.postParseSeriesOptionsHooks=new H.jqplot.HooksManager();this.eventListenerHooks=new H.jqplot.EventListenerManager();this.preDrawSeriesShadowHooks=new H.jqplot.HooksManager();this.postDrawSeriesShadowHooks=new H.jqplot.HooksManager();this.colorGenerator=new H.jqplot.ColorGenerator();this.negativeColorGenerator=new H.jqplot.ColorGenerator();this.canvasManager=new H.jqplot.CanvasManager();this.themeEngine=new H.jqplot.ThemeEngine();var ad=0;this.init=function(ao,al,aq){aq=aq||{};for(var am=0;am<H.jqplot.preInitHooks.length;am++){H.jqplot.preInitHooks[am].call(this,ao,al,aq)}for(var am=0;am<this.preInitHooks.hooks.length;am++){this.preInitHooks.hooks[am].call(this,ao,al,aq)}this.targetId="#"+ao;this.target=H("#"+ao);if(this._addDomReference){this.target.data("jqplot",this)}this.target.removeClass("jqplot-error");if(!this.target.get(0)){throw"No plot target specified"}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var an;if(aq&&aq.height){an=parseInt(aq.height,10)}else{if(this.target.attr("data-height")){an=parseInt(this.target.attr("data-height"),10)}else{an=parseInt(H.jqplot.config.defaultHeight,10)}}this._height=an;this.target.css("height",an+"px")}else{this._height=an=this.target.height()}if(!this.target.width()){var ap;if(aq&&aq.width){ap=parseInt(aq.width,10)}else{if(this.target.attr("data-width")){ap=parseInt(this.target.attr("data-width"),10)}else{ap=parseInt(H.jqplot.config.defaultWidth,10)}}this._width=ap;this.target.css("width",ap+"px")}else{this._width=ap=this.target.width()}for(var am=0,aj=Q.length;am<aj;am++){this.axes[Q[am]]=new s(Q[am])}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Canvas dimension not set"}if(aq.dataRenderer&&H.isFunction(aq.dataRenderer)){if(aq.dataRendererOptions){this.dataRendererOptions=aq.dataRendererOptions}this.dataRenderer=aq.dataRenderer;al=this.dataRenderer(al,this,this.dataRendererOptions)}if(aq.noDataIndicator&&H.isPlainObject(aq.noDataIndicator)){H.extend(true,this.noDataIndicator,aq.noDataIndicator)}if(al==null||H.isArray(al)==false||al.length==0||H.isArray(al[0])==false||al[0].length==0){if(this.noDataIndicator.show==false){throw"No Data"}else{for(var af in this.noDataIndicator.axes){for(var ah in this.noDataIndicator.axes[af]){this.axes[af][ah]=this.noDataIndicator.axes[af][ah]}}this.postDrawHooks.add(function(){var ax=this.eventCanvas.getHeight();var au=this.eventCanvas.getWidth();var at=H('<div class="jqplot-noData-container" style="position:absolute;"></div>');this.target.append(at);at.height(ax);at.width(au);at.css("top",this.eventCanvas._offsets.top);at.css("left",this.eventCanvas._offsets.left);var aw=H('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>');at.append(aw);aw.html(this.noDataIndicator.indicator);var av=aw.height();var ar=aw.width();aw.height(av);aw.width(ar);aw.css("top",(ax-av)/2+"px")})}}this.data=H.extend(true,[],al);this.parseOptions(aq);if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;this.computePlotData();for(var am=0;am<this.series.length;am++){this.seriesStack.push(am);this.previousSeriesStack.push(am);this.series[am].shadowCanvas._plotDimensions=this._plotDimensions;this.series[am].canvas._plotDimensions=this._plotDimensions;for(var ak=0;ak<H.jqplot.preSeriesInitHooks.length;ak++){H.jqplot.preSeriesInitHooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}for(var ak=0;ak<this.preSeriesInitHooks.hooks.length;ak++){this.preSeriesInitHooks.hooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}this.series[am]._plotDimensions=this._plotDimensions;this.series[am].init(am,this.grid.borderWidth,this);for(var ak=0;ak<H.jqplot.postSeriesInitHooks.length;ak++){H.jqplot.postSeriesInitHooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}for(var ak=0;ak<this.postSeriesInitHooks.hooks.length;ak++){this.postSeriesInitHooks.hooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}this._sumy+=this.series[am]._sumy;this._sumx+=this.series[am]._sumx}var ag,ai;for(var am=0,aj=Q.length;am<aj;am++){ag=Q[am];ai=this.axes[ag];ai._plotDimensions=this._plotDimensions;ai.init();if(this.axes[ag].borderColor==null){if(ag.charAt(0)!=="x"&&ai.useSeriesColor===true&&ai.show){ai.borderColor=ai._series[0].color}else{ai.borderColor=this.grid.borderColor}}}if(this.sortData){ab(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var am=0;am<H.jqplot.postInitHooks.length;am++){H.jqplot.postInitHooks[am].call(this,ao,this.data,aq)}for(var am=0;am<this.postInitHooks.hooks.length;am++){this.postInitHooks.hooks[am].call(this,ao,this.data,aq)}};this.resetAxesScale=function(ak,ag){var ai=ag||{};var aj=ak||this.axes;if(aj===true){aj=this.axes}if(H.isArray(aj)){for(var ah=0;ah<aj.length;ah++){this.axes[aj[ah]].resetScale(ai[aj[ah]])}}else{if(typeof(aj)==="object"){for(var af in aj){this.axes[af].resetScale(ai[af])}}}};this.reInitialize=function(an,af){var ar=H.extend(true,{},this.options,af);var ap=this.targetId.substr(1);var al=(an==null)?this.data:an;for(var ao=0;ao<H.jqplot.preInitHooks.length;ao++){H.jqplot.preInitHooks[ao].call(this,ap,al,ar)}for(var ao=0;ao<this.preInitHooks.hooks.length;ao++){this.preInitHooks.hooks[ao].call(this,ap,al,ar)}this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;var ag,aq,am,ai;for(var ao=0,ak=Q.length;ao<ak;ao++){ag=Q[ao];ai=this.axes[ag];aq=ai._ticks;for(var am=0,aj=aq.length;am<aj;am++){var ah=aq[am]._elem;if(ah){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(ah.get(0))}ah.emptyForce();ah=null;aq._elem=null}}aq=null;delete ai.ticks;delete ai._ticks;this.axes[ag]=new s(ag);this.axes[ag]._plotWidth=this._width;this.axes[ag]._plotHeight=this._height}if(an){if(ar.dataRenderer&&H.isFunction(ar.dataRenderer)){if(ar.dataRendererOptions){this.dataRendererOptions=ar.dataRendererOptions}this.dataRenderer=ar.dataRenderer;an=this.dataRenderer(an,this,this.dataRendererOptions)}this.data=H.extend(true,[],an)}if(af){this.parseOptions(ar)}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;this.seriesStack=[];this.previousSeriesStack=[];this.computePlotData();for(var ao=0,ak=this.series.length;ao<ak;ao++){this.seriesStack.push(ao);this.previousSeriesStack.push(ao);this.series[ao].shadowCanvas._plotDimensions=this._plotDimensions;this.series[ao].canvas._plotDimensions=this._plotDimensions;for(var am=0;am<H.jqplot.preSeriesInitHooks.length;am++){H.jqplot.preSeriesInitHooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}for(var am=0;am<this.preSeriesInitHooks.hooks.length;am++){this.preSeriesInitHooks.hooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}this.series[ao]._plotDimensions=this._plotDimensions;this.series[ao].init(ao,this.grid.borderWidth,this);for(var am=0;am<H.jqplot.postSeriesInitHooks.length;am++){H.jqplot.postSeriesInitHooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}for(var am=0;am<this.postSeriesInitHooks.hooks.length;am++){this.postSeriesInitHooks.hooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}this._sumy+=this.series[ao]._sumy;this._sumx+=this.series[ao]._sumx}for(var ao=0,ak=Q.length;ao<ak;ao++){ag=Q[ao];ai=this.axes[ag];ai._plotDimensions=this._plotDimensions;ai.init();if(ai.borderColor==null){if(ag.charAt(0)!=="x"&&ai.useSeriesColor===true&&ai.show){ai.borderColor=ai._series[0].color}else{ai.borderColor=this.grid.borderColor}}}if(this.sortData){ab(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var ao=0,ak=H.jqplot.postInitHooks.length;ao<ak;ao++){H.jqplot.postInitHooks[ao].call(this,ap,this.data,ar)}for(var ao=0,ak=this.postInitHooks.hooks.length;ao<ak;ao++){this.postInitHooks.hooks[ao].call(this,ap,this.data,ar)}};this.quickInit=function(){this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var ak in this.axes){this.axes[ak]._plotWidth=this._width;this.axes[ak]._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;this.computePlotData();for(var ai=0;ai<this.series.length;ai++){if(this.series[ai]._type==="line"&&this.series[ai].renderer.bands.show){this.series[ai].renderer.initBands.call(this.series[ai],this.series[ai].renderer.options,this)}this.series[ai]._plotDimensions=this._plotDimensions;this.series[ai].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[ai]._sumy;this._sumx+=this.series[ai]._sumx}var ag;for(var af=0;af<12;af++){ag=Q[af];var ah=this.axes[ag]._ticks;for(var ai=0;ai<ah.length;ai++){var aj=ah[ai]._elem;if(aj){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(aj.get(0))}aj.emptyForce();aj=null;ah._elem=null}}ah=null;this.axes[ag]._plotDimensions=this._plotDimensions;this.axes[ag]._ticks=[]}if(this.sortData){ab(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function ab(aj){var an,ao,ap,af,am;for(var ak=0;ak<aj.length;ak++){var ag;var al=[aj[ak].data,aj[ak]._stackData,aj[ak]._plotData,aj[ak]._prevPlotData];for(var ah=0;ah<4;ah++){ag=true;an=al[ah];if(aj[ak]._stackAxis=="x"){for(var ai=0;ai<an.length;ai++){if(typeof(an[ai][1])!="number"){ag=false;break}}if(ag){an.sort(function(ar,aq){return ar[1]-aq[1]})}}else{for(var ai=0;ai<an.length;ai++){if(typeof(an[ai][0])!="number"){ag=false;break}}if(ag){an.sort(function(ar,aq){return ar[0]-aq[0]})}}}}}this.computePlotData=function(){this._plotData=[];this._stackData=[];var am,an,ai;for(an=0,ai=this.series.length;an<ai;an++){am=this.series[an];this._plotData.push([]);this._stackData.push([]);var ag=am.data;this._plotData[an]=H.extend(true,[],ag);this._stackData[an]=H.extend(true,[],ag);am._plotData=this._plotData[an];am._stackData=this._stackData[an];var aq={x:[],y:[]};if(this.stackSeries&&!am.disableStack){am._stack=true;var ao=(am._stackAxis==="x")?0:1;for(var aj=0,af=ag.length;aj<af;aj++){var ap=ag[aj][ao];if(ap==null){ap=0}this._plotData[an][aj][ao]=ap;this._stackData[an][aj][ao]=ap;if(an>0){for(var ak=an;ak--;){var ah=this._plotData[ak][aj][ao];if(ap*ah>=0){this._plotData[an][aj][ao]+=ah;this._stackData[an][aj][ao]+=ah;break}}}}}else{for(var al=0;al<am.data.length;al++){aq.x.push(am.data[al][0]);aq.y.push(am.data[al][1])}this._stackData.push(am.data);this.series[an]._stackData=am.data;this._plotData.push(am.data);am._plotData=am.data;am._plotValues=aq}if(an>0){am._prevPlotData=this.series[an-1]._plotData}am._sumy=0;am._sumx=0;for(al=am.data.length-1;al>-1;al--){am._sumy+=am.data[al][1];am._sumx+=am.data[al][0]}}};this.populatePlotData=function(an,ao){this._plotData=[];this._stackData=[];an._stackData=[];an._plotData=[];var ar={x:[],y:[]};if(this.stackSeries&&!an.disableStack){an._stack=true;var aq=(an._stackAxis==="x")?0:1;var at=H.extend(true,[],an.data);var au=H.extend(true,[],an.data);var ah,ag,ai,ap,af;for(var al=0;al<ao;al++){var aj=this.series[al].data;for(var ak=0;ak<aj.length;ak++){ai=aj[ak];ah=(ai[0]!=null)?ai[0]:0;ag=(ai[1]!=null)?ai[1]:0;at[ak][0]+=ah;at[ak][1]+=ag;ap=(aq)?ag:ah;if(an.data[ak][aq]*ap>=0){au[ak][aq]+=ap}}}for(var am=0;am<au.length;am++){ar.x.push(au[am][0]);ar.y.push(au[am][1])}this._plotData.push(au);this._stackData.push(at);an._stackData=at;an._plotData=au;an._plotValues=ar}else{for(var am=0;am<an.data.length;am++){ar.x.push(an.data[am][0]);ar.y.push(an.data[am][1])}this._stackData.push(an.data);this.series[ao]._stackData=an.data;this._plotData.push(an.data);an._plotData=an.data;an._plotValues=ar}if(ao>0){an._prevPlotData=this.series[ao-1]._plotData}an._sumy=0;an._sumx=0;for(am=an.data.length-1;am>-1;am--){an._sumy+=an.data[am][1];an._sumx+=an.data[am][0]}};this.getNextSeriesColor=(function(ag){var af=0;var ah=ag.seriesColors;return function(){if(af<ah.length){return ah[af++]}else{af=0;return ah[af++]}}})(this);this.parseOptions=function(ar){for(var am=0;am<this.preParseOptionsHooks.hooks.length;am++){this.preParseOptionsHooks.hooks[am].call(this,ar)}for(var am=0;am<H.jqplot.preParseOptionsHooks.length;am++){H.jqplot.preParseOptionsHooks[am].call(this,ar)}this.options=H.extend(true,{},this.defaults,ar);var ag=this.options;this.animate=ag.animate;this.animateReplot=ag.animateReplot;this.stackSeries=ag.stackSeries;if(H.isPlainObject(ag.fillBetween)){var aq=["series1","series2","color","baseSeries","fill"],an;for(var am=0,ak=aq.length;am<ak;am++){an=aq[am];if(ag.fillBetween[an]!=null){this.fillBetween[an]=ag.fillBetween[an]}}}if(ag.seriesColors){this.seriesColors=ag.seriesColors}if(ag.negativeSeriesColors){this.negativeSeriesColors=ag.negativeSeriesColors}if(ag.captureRightClick){this.captureRightClick=ag.captureRightClick}this.defaultAxisStart=(ar&&ar.defaultAxisStart!=null)?ar.defaultAxisStart:this.defaultAxisStart;this.colorGenerator.setColors(this.seriesColors);this.negativeColorGenerator.setColors(this.negativeSeriesColors);H.extend(true,this._gridPadding,ag.gridPadding);this.sortData=(ag.sortData!=null)?ag.sortData:this.sortData;for(var am=0;am<12;am++){var ah=Q[am];var aj=this.axes[ah];aj._options=H.extend(true,{},ag.axesDefaults,ag.axes[ah]);H.extend(true,aj,ag.axesDefaults,ag.axes[ah]);aj._plotWidth=this._width;aj._plotHeight=this._height}var ap=function(ax,av,ay){var au=[];var aw,at;av=av||"vertical";if(!H.isArray(ax[0])){for(aw=0,at=ax.length;aw<at;aw++){if(av=="vertical"){au.push([ay+aw,ax[aw]])}else{au.push([ax[aw],ay+aw])}}}else{H.extend(true,au,ax)}return au};var ao=0;this.series=[];for(var am=0;am<this.data.length;am++){var af=H.extend(true,{index:am},{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[am],{rendererOptions:{animation:{show:this.animate}}});var aq=new O(af);for(var al=0;al<H.jqplot.preParseSeriesOptionsHooks.length;al++){H.jqplot.preParseSeriesOptionsHooks[al].call(aq,this.options.seriesDefaults,this.options.series[am])}for(var al=0;al<this.preParseSeriesOptionsHooks.hooks.length;al++){this.preParseSeriesOptionsHooks.hooks[al].call(aq,this.options.seriesDefaults,this.options.series[am])}H.extend(true,aq,af);var ai="vertical";if(aq.renderer===H.jqplot.BarRenderer&&aq.rendererOptions&&aq.rendererOptions.barDirection=="horizontal"){ai="horizontal";aq._stackAxis="x";aq._primaryAxis="_yaxis"}aq.data=ap(this.data[am],ai,this.defaultAxisStart);switch(aq.xaxis){case"xaxis":aq._xaxis=this.axes.xaxis;break;case"x2axis":aq._xaxis=this.axes.x2axis;break;default:break}aq._yaxis=this.axes[aq.yaxis];aq._xaxis._series.push(aq);aq._yaxis._series.push(aq);if(aq.show){aq._xaxis.show=true;aq._yaxis.show=true}else{if(aq._xaxis.scaleToHiddenSeries){aq._xaxis.show=true}if(aq._yaxis.scaleToHiddenSeries){aq._yaxis.show=true}}if(!aq.label){aq.label="Series "+(am+1).toString()}this.series.push(aq);for(var al=0;al<H.jqplot.postParseSeriesOptionsHooks.length;al++){H.jqplot.postParseSeriesOptionsHooks[al].call(this.series[am],this.options.seriesDefaults,this.options.series[am])}for(var al=0;al<this.postParseSeriesOptionsHooks.hooks.length;al++){this.postParseSeriesOptionsHooks.hooks[al].call(this.series[am],this.options.seriesDefaults,this.options.series[am])}}H.extend(true,this.grid,this.options.grid);for(var am=0,ak=Q.length;am<ak;am++){var ah=Q[am];var aj=this.axes[ah];if(aj.borderWidth==null){aj.borderWidth=this.grid.borderWidth}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){H.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;this.legend.setOptions(this.options.legend);for(var am=0;am<H.jqplot.postParseOptionsHooks.length;am++){H.jqplot.postParseOptionsHooks[am].call(this,ar)}for(var am=0;am<this.postParseOptionsHooks.hooks.length;am++){this.postParseOptionsHooks.hooks[am].call(this,ar)}};this.destroy=function(){this.canvasManager.freeAllCanvases();if(this.eventCanvas&&this.eventCanvas._elem){this.eventCanvas._elem.unbind()}this.target.empty();this.target[0].innerHTML=""};this.replot=function(ag){var ah=ag||{};var aj=ah.data||null;var af=(ah.clear===false)?false:true;var ai=ah.resetAxes||false;delete ah.data;delete ah.clear;delete ah.resetAxes;this.target.trigger("jqplotPreReplot");if(af){this.destroy()}if(aj||!H.isEmptyObject(ah)){this.reInitialize(aj,ah)}else{this.quickInit()}if(ai){this.resetAxesScale(ai,ah.axes)}this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(af){af=(af!=null)?af:true;this.target.trigger("jqplotPreRedraw");if(af){this.canvasManager.freeAllCanvases();this.eventCanvas._elem.unbind();this.target.empty()}for(var ah in this.axes){this.axes[ah]._ticks=[]}this.computePlotData();this._sumy=0;this._sumx=0;for(var ag=0,ai=this.series.length;ag<ai;ag++){this._sumy+=this.series[ag]._sumy;this._sumx+=this.series[ag]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var aB,az,ay,ai;for(aB=0,ay=H.jqplot.preDrawHooks.length;aB<ay;aB++){H.jqplot.preDrawHooks[aB].call(this)}for(aB=0,ay=this.preDrawHooks.length;aB<ay;aB++){this.preDrawHooks.hooks[aB].apply(this,this.preDrawSeriesHooks.args[aB])}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas",null,this));this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});var aF=this.legend.draw({},this);var af={top:0,left:0,bottom:0,right:0};if(this.legend.placement=="outsideGrid"){this.target.append(aF);switch(this.legend.location){case"n":af.top+=this.legend.getHeight();break;case"s":af.bottom+=this.legend.getHeight();break;case"ne":case"e":case"se":af.right+=this.legend.getWidth();break;case"nw":case"w":case"sw":af.left+=this.legend.getWidth();break;default:af.right+=this.legend.getWidth();break}aF=aF.detach()}var al=this.axes;var aG;for(aB=0;aB<12;aB++){aG=Q[aB];this.target.append(al[aG].draw(this.baseCanvas._ctx,this));al[aG].set()}if(al.yaxis.show){af.left+=al.yaxis.getWidth()}var aA=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var ar=[0,0,0,0,0,0,0,0];var av=0;var au;for(au=0;au<8;au++){if(al[aA[au]].show){av+=al[aA[au]].getWidth();ar[au]=av}}af.right+=av;if(al.x2axis.show){af.top+=al.x2axis.getHeight()}if(this.title.show){af.top+=this.title.getHeight()}if(al.xaxis.show){af.bottom+=al.xaxis.getHeight()}if(this.options.gridDimensions&&H.isPlainObject(this.options.gridDimensions)){var am=parseInt(this.options.gridDimensions.width,10)||0;var aC=parseInt(this.options.gridDimensions.height,10)||0;var ah=(this._width-af.left-af.right-am)/2;var aE=(this._height-af.top-af.bottom-aC)/2;if(aE>=0&&ah>=0){af.top+=aE;af.bottom+=aE;af.left+=ah;af.right+=ah}}var ag=["top","bottom","left","right"];for(var au in ag){if(this._gridPadding[ag[au]]==null&&af[ag[au]]>0){this._gridPadding[ag[au]]=af[ag[au]]}else{if(this._gridPadding[ag[au]]==null){this._gridPadding[ag[au]]=this._defaultGridPadding[ag[au]]}}}var at=this._gridPadding;if(this.legend.placement==="outsideGrid"){at={top:this.title.getHeight(),left:0,right:0,bottom:0};if(this.legend.location==="s"){at.left=this._gridPadding.left;at.right=this._gridPadding.right}}al.xaxis.pack({position:"absolute",bottom:this._gridPadding.bottom-al.xaxis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});al.yaxis.pack({position:"absolute",top:0,left:this._gridPadding.left-al.yaxis.getWidth(),height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});al.x2axis.pack({position:"absolute",top:this._gridPadding.top-al.x2axis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(aB=8;aB>0;aB--){al[aA[aB-1]].pack({position:"absolute",top:0,right:this._gridPadding.right-ar[aB-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}var an=(this._width-this._gridPadding.left-this._gridPadding.right)/2+this._gridPadding.left-al.yMidAxis.getWidth()/2;al.yMidAxis.pack({position:"absolute",top:0,left:an,zIndex:9,textAlign:"center"},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});this.target.append(this.grid.createElement(this._gridPadding,this));this.grid.draw();var ak=this.series;var aD=ak.length;for(aB=0,ay=aD;aB<ay;aB++){az=this.seriesStack[aB];this.target.append(ak[az].shadowCanvas.createElement(this._gridPadding,"jqplot-series-shadowCanvas",null,this));ak[az].shadowCanvas.setContext();ak[az].shadowCanvas._elem.data("seriesIndex",az)}for(aB=0,ay=aD;aB<ay;aB++){az=this.seriesStack[aB];this.target.append(ak[az].canvas.createElement(this._gridPadding,"jqplot-series-canvas",null,this));ak[az].canvas.setContext();ak[az].canvas._elem.data("seriesIndex",az)}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas",null,this));this.eventCanvas.setContext();this.eventCanvas._ctx.fillStyle="rgba(0,0,0,0)";this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width,this.eventCanvas._ctx.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.eventCanvas._elem.before(aF);this.legend.pack(at);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,placement:this.legend.placement,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();if(aD){H(ak[aD-1].canvas._elem).after(aF)}this.legend.pack(at)}for(var aB=0,ay=H.jqplot.eventListenerHooks.length;aB<ay;aB++){this.eventCanvas._elem.bind(H.jqplot.eventListenerHooks[aB][0],{plot:this},H.jqplot.eventListenerHooks[aB][1])}for(var aB=0,ay=this.eventListenerHooks.hooks.length;aB<ay;aB++){this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[aB][0],{plot:this},this.eventListenerHooks.hooks[aB][1])}var aq=this.fillBetween;if(aq.fill&&aq.series1!==aq.series2&&aq.series1<aD&&aq.series2<aD&&ak[aq.series1]._type==="line"&&ak[aq.series2]._type==="line"){this.doFillBetweenLines()}for(var aB=0,ay=H.jqplot.postDrawHooks.length;aB<ay;aB++){H.jqplot.postDrawHooks[aB].call(this)}for(var aB=0,ay=this.postDrawHooks.hooks.length;aB<ay;aB++){this.postDrawHooks.hooks[aB].apply(this,this.postDrawHooks.args[aB])}if(this.target.is(":visible")){this._drawCount+=1}var ao,ap,aw,aj;for(aB=0,ay=aD;aB<ay;aB++){ao=ak[aB];ap=ao.renderer;aw=".jqplot-point-label.jqplot-series-"+aB;if(ap.animation&&ap.animation._supported&&ap.animation.show&&(this._drawCount<2||this.animateReplot)){aj=this.target.find(aw);aj.stop(true,true).hide();ao.canvas._elem.stop(true,true).hide();ao.shadowCanvas._elem.stop(true,true).hide();ao.canvas._elem.jqplotEffect("blind",{mode:"show",direction:ap.animation.direction},ap.animation.speed);ao.shadowCanvas._elem.jqplotEffect("blind",{mode:"show",direction:ap.animation.direction},ap.animation.speed);aj.fadeIn(ap.animation.speed*0.8)}}aj=null;this.target.trigger("jqplotPostDraw",[this])}};N.prototype.doFillBetweenLines=function(){var ah=this.fillBetween;var aq=ah.series1;var ao=ah.series2;var ap=(aq<ao)?aq:ao;var an=(ao>aq)?ao:aq;var al=this.series[ap];var ak=this.series[an];if(ak.renderer.smooth){var aj=ak.renderer._smoothedData.slice(0).reverse()}else{var aj=ak.gridData.slice(0).reverse()}if(al.renderer.smooth){var am=al.renderer._smoothedData.concat(aj)}else{var am=al.gridData.concat(aj)}var ai=(ah.color!==null)?ah.color:this.series[aq].fillColor;var ar=(ah.baseSeries!==null)?ah.baseSeries:ap;var ag=this.series[ar].renderer.shapeRenderer;var af={fillStyle:ai,fill:true,closePath:true};ag.draw(al.shadowCanvas._ctx,am,af)};this.bindCustomEvents=function(){this.eventCanvas._elem.bind("click",{plot:this},this.onClick);this.eventCanvas._elem.bind("dblclick",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("mousedown",{plot:this},this.onMouseDown);this.eventCanvas._elem.bind("mousemove",{plot:this},this.onMouseMove);this.eventCanvas._elem.bind("mouseenter",{plot:this},this.onMouseEnter);this.eventCanvas._elem.bind("mouseleave",{plot:this},this.onMouseLeave);if(this.captureRightClick){this.eventCanvas._elem.bind("mouseup",{plot:this},this.onRightClick);this.eventCanvas._elem.get(0).oncontextmenu=function(){return false}}else{this.eventCanvas._elem.bind("mouseup",{plot:this},this.onMouseUp)}};function ac(ao){var am=ao.data.plot;var ai=am.eventCanvas._elem.offset();var al={x:ao.pageX-ai.left,y:ao.pageY-ai.top};var aj={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var ak=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var af=am.axes;var ag,ah;for(ag=11;ag>0;ag--){ah=ak[ag-1];if(af[ah].show){aj[ah]=af[ah].series_p2u(al[ah.charAt(0)])}}return{offsets:ai,gridPos:al,dataPos:aj}}function ae(af,ag){var ak=ag.series;var aQ,aO,aN,aI,aJ,aD,aC,ap,an,at,au,aE;var aM,aR,aK,al,aB,aG,aP;var ah,aH;for(aN=ag.seriesStack.length-1;aN>=0;aN--){aQ=ag.seriesStack[aN];aI=ak[aQ];aP=aI._highlightThreshold;switch(aI.renderer.constructor){case H.jqplot.BarRenderer:aD=af.x;aC=af.y;for(aO=0;aO<aI._barPoints.length;aO++){aB=aI._barPoints[aO];aK=aI.gridData[aO];if(aD>aB[0][0]&&aD<aB[2][0]&&aC>aB[2][1]&&aC<aB[0][1]){return{seriesIndex:aI.index,pointIndex:aO,gridData:aK,data:aI.data[aO],points:aI._barPoints[aO]}}}break;case H.jqplot.PyramidRenderer:aD=af.x;aC=af.y;for(aO=0;aO<aI._barPoints.length;aO++){aB=aI._barPoints[aO];aK=aI.gridData[aO];if(aD>aB[0][0]+aP[0][0]&&aD<aB[2][0]+aP[2][0]&&aC>aB[2][1]&&aC<aB[0][1]){return{seriesIndex:aI.index,pointIndex:aO,gridData:aK,data:aI.data[aO],points:aI._barPoints[aO]}}}break;case H.jqplot.DonutRenderer:at=aI.startAngle/180*Math.PI;aD=af.x-aI._center[0];aC=af.y-aI._center[1];aJ=Math.sqrt(Math.pow(aD,2)+Math.pow(aC,2));if(aD>0&&-aC>=0){ap=2*Math.PI-Math.atan(-aC/aD)}else{if(aD>0&&-aC<0){ap=-Math.atan(-aC/aD)}else{if(aD<0){ap=Math.PI-Math.atan(-aC/aD)}else{if(aD==0&&-aC>0){ap=3*Math.PI/2}else{if(aD==0&&-aC<0){ap=Math.PI/2}else{if(aD==0&&aC==0){ap=0}}}}}}if(at){ap-=at;if(ap<0){ap+=2*Math.PI}else{if(ap>2*Math.PI){ap-=2*Math.PI}}}an=aI.sliceMargin/180*Math.PI;if(aJ<aI._radius&&aJ>aI._innerRadius){for(aO=0;aO<aI.gridData.length;aO++){au=(aO>0)?aI.gridData[aO-1][1]+an:an;aE=aI.gridData[aO][1];if(ap>au&&ap<aE){return{seriesIndex:aI.index,pointIndex:aO,gridData:aI.gridData[aO],data:aI.data[aO]}}}}break;case H.jqplot.PieRenderer:at=aI.startAngle/180*Math.PI;aD=af.x-aI._center[0];aC=af.y-aI._center[1];aJ=Math.sqrt(Math.pow(aD,2)+Math.pow(aC,2));if(aD>0&&-aC>=0){ap=2*Math.PI-Math.atan(-aC/aD)}else{if(aD>0&&-aC<0){ap=-Math.atan(-aC/aD)}else{if(aD<0){ap=Math.PI-Math.atan(-aC/aD)}else{if(aD==0&&-aC>0){ap=3*Math.PI/2}else{if(aD==0&&-aC<0){ap=Math.PI/2}else{if(aD==0&&aC==0){ap=0}}}}}}if(at){ap-=at;if(ap<0){ap+=2*Math.PI}else{if(ap>2*Math.PI){ap-=2*Math.PI}}}an=aI.sliceMargin/180*Math.PI;if(aJ<aI._radius){for(aO=0;aO<aI.gridData.length;aO++){au=(aO>0)?aI.gridData[aO-1][1]+an:an;aE=aI.gridData[aO][1];if(ap>au&&ap<aE){return{seriesIndex:aI.index,pointIndex:aO,gridData:aI.gridData[aO],data:aI.data[aO]}}}}break;case H.jqplot.BubbleRenderer:aD=af.x;aC=af.y;var az=null;if(aI.show){for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=aK[2]&&(aR<=aM||aM==null)){aM=aR;az={seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}if(az!=null){return az}}break;case H.jqplot.FunnelRenderer:aD=af.x;aC=af.y;var aF=aI._vertices,aj=aF[0],ai=aF[aF.length-1],am,ay,ar;function aL(aU,aW,aV){var aT=(aW[1]-aV[1])/(aW[0]-aV[0]);var aS=aW[1]-aT*aW[0];var aX=aU+aW[1];return[(aX-aS)/aT,aX]}am=aL(aC,aj[0],ai[3]);ay=aL(aC,aj[1],ai[2]);for(aO=0;aO<aF.length;aO++){ar=aF[aO];if(aC>=ar[0][1]&&aC<=ar[3][1]&&aD>=am[0]&&aD<=ay[0]){return{seriesIndex:aI.index,pointIndex:aO,gridData:null,data:aI.data[aO]}}}break;case H.jqplot.LineRenderer:aD=af.x;aC=af.y;aJ=aI.renderer;if(aI.show){if((aI.fill||(aI.renderer.bands.show&&aI.renderer.bands.fill))&&(!ag.plugins.highlighter||!ag.plugins.highlighter.show)){var aq=false;if(aD>aI._boundingBox[0][0]&&aD<aI._boundingBox[1][0]&&aC>aI._boundingBox[1][1]&&aC<aI._boundingBox[0][1]){var ax=aI._areaPoints.length;var aA;var aO=ax-1;for(var aA=0;aA<ax;aA++){var aw=[aI._areaPoints[aA][0],aI._areaPoints[aA][1]];var av=[aI._areaPoints[aO][0],aI._areaPoints[aO][1]];if(aw[1]<aC&&av[1]>=aC||av[1]<aC&&aw[1]>=aC){if(aw[0]+(aC-aw[1])/(av[1]-aw[1])*(av[0]-aw[0])<aD){aq=!aq}}aO=aA}}if(aq){return{seriesIndex:aQ,pointIndex:null,gridData:aI.gridData,data:aI.data,points:aI._areaPoints}}break}else{aH=aI.markerRenderer.size/2+aI.neighborThreshold;ah=(aH>0)?aH:0;for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];if(aJ.constructor==H.jqplot.OHLCRenderer){if(aJ.candleStick){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._bodyWidth/2&&aD<=aK[0]+aJ._bodyWidth/2&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{if(!aJ.hlc){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][1])&&aC<=ao(aI.data[aO][2])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}else{if(aK[0]!=null&&aK[1]!=null){aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=ah&&(aR<=aM||aM==null)){aM=aR;return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}}}break;default:aD=af.x;aC=af.y;aJ=aI.renderer;if(aI.show){aH=aI.markerRenderer.size/2+aI.neighborThreshold;ah=(aH>0)?aH:0;for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];if(aJ.constructor==H.jqplot.OHLCRenderer){if(aJ.candleStick){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._bodyWidth/2&&aD<=aK[0]+aJ._bodyWidth/2&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{if(!aJ.hlc){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][1])&&aC<=ao(aI.data[aO][2])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}else{aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=ah&&(aR<=aM||aM==null)){aM=aR;return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}break}}return null}this.onClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onDblClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotDblClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseDown=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotMouseDown");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseUp=function(ah){var ag=ac(ah);var af=H.Event("jqplotMouseUp");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ah.data.plot])};this.onRightClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);if(aj.captureRightClick){if(ah.which==3){var af=H.Event("jqplotRightClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])}else{var af=H.Event("jqplotMouseUp");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])}}};this.onMouseMove=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotMouseMove");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseEnter=function(ah){var ag=ac(ah);var ai=ah.data.plot;var af=H.Event("jqplotMouseEnter");af.pageX=ah.pageX;af.pageY=ah.pageY;af.relatedTarget=ah.relatedTarget;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ai])};this.onMouseLeave=function(ah){var ag=ac(ah);var ai=ah.data.plot;var af=H.Event("jqplotMouseLeave");af.pageX=ah.pageX;af.pageY=ah.pageY;af.relatedTarget=ah.relatedTarget;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ai])};this.drawSeries=function(ah,af){var aj,ai,ag;af=(typeof(ah)==="number"&&af==null)?ah:af;ah=(typeof(ah)==="object")?ah:{};if(af!=r){ai=this.series[af];ag=ai.shadowCanvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.drawShadow(ag,ah,this);ag=ai.canvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.draw(ag,ah,this);if(ai.renderer.constructor==H.jqplot.BezierCurveRenderer){if(af<this.series.length-1){this.drawSeries(af+1)}}}else{for(aj=0;aj<this.series.length;aj++){ai=this.series[aj];ag=ai.shadowCanvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.drawShadow(ag,ah,this);ag=ai.canvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.draw(ag,ah,this)}}ah=af=aj=ai=ag=null};this.moveSeriesToFront=function(ag){ag=parseInt(ag,10);var aj=H.inArray(ag,this.seriesStack);if(aj==-1){return}if(aj==this.seriesStack.length-1){this.previousSeriesStack=this.seriesStack.slice(0);return}var af=this.seriesStack[this.seriesStack.length-1];var ai=this.series[ag].canvas._elem.detach();var ah=this.series[ag].shadowCanvas._elem.detach();this.series[af].shadowCanvas._elem.after(ah);this.series[af].canvas._elem.after(ai);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(aj,1);this.seriesStack.push(ag)};this.moveSeriesToBack=function(ag){ag=parseInt(ag,10);var aj=H.inArray(ag,this.seriesStack);if(aj==0||aj==-1){return}var af=this.seriesStack[0];var ai=this.series[ag].canvas._elem.detach();var ah=this.series[ag].shadowCanvas._elem.detach();this.series[af].shadowCanvas._elem.before(ah);this.series[af].canvas._elem.before(ai);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(aj,1);this.seriesStack.unshift(ag)};this.restorePreviousSeriesOrder=function(){var al,ak,aj,ai,ah,af,ag;if(this.seriesStack==this.previousSeriesStack){return}for(al=1;al<this.previousSeriesStack.length;al++){af=this.previousSeriesStack[al];ag=this.previousSeriesStack[al-1];aj=this.series[af].canvas._elem.detach();ai=this.series[af].shadowCanvas._elem.detach();this.series[ag].shadowCanvas._elem.after(ai);this.series[ag].canvas._elem.after(aj)}ah=this.seriesStack.slice(0);this.seriesStack=this.previousSeriesStack.slice(0);this.previousSeriesStack=ah};this.restoreOriginalSeriesOrder=function(){var aj,ai,af=[],ah,ag;for(aj=0;aj<this.series.length;aj++){af.push(aj)}if(this.seriesStack==af){return}this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack=af;for(aj=1;aj<this.seriesStack.length;aj++){ah=this.series[aj].canvas._elem.detach();ag=this.series[aj].shadowCanvas._elem.detach();this.series[aj-1].shadowCanvas._elem.after(ag);this.series[aj-1].canvas._elem.after(ah)}};this.activateTheme=function(af){this.themeEngine.activate(this,af)}}H.jqplot.computeHighlightColors=function(ac){var ae;if(H.isArray(ac)){ae=[];for(var ag=0;ag<ac.length;ag++){var af=H.jqplot.getColorComponents(ac[ag]);var ab=[af[0],af[1],af[2]];var ah=ab[0]+ab[1]+ab[2];for(var ad=0;ad<3;ad++){ab[ad]=(ah>660)?ab[ad]*0.85:0.73*ab[ad]+90;ab[ad]=parseInt(ab[ad],10);(ab[ad]>255)?255:ab[ad]}ab[3]=0.3+0.35*af[3];ae.push("rgba("+ab[0]+","+ab[1]+","+ab[2]+","+ab[3]+")")}}else{var af=H.jqplot.getColorComponents(ac);var ab=[af[0],af[1],af[2]];var ah=ab[0]+ab[1]+ab[2];for(var ad=0;ad<3;ad++){ab[ad]=(ah>660)?ab[ad]*0.85:0.73*ab[ad]+90;ab[ad]=parseInt(ab[ad],10);(ab[ad]>255)?255:ab[ad]}ab[3]=0.3+0.35*af[3];ae="rgba("+ab[0]+","+ab[1]+","+ab[2]+","+ab[3]+")"}return ae};H.jqplot.ColorGenerator=function(ac){ac=ac||H.jqplot.config.defaultColors;var ab=0;this.next=function(){if(ab<ac.length){return ac[ab++]}else{ab=0;return ac[ab++]}};this.previous=function(){if(ab>0){return ac[ab--]}else{ab=ac.length-1;return ac[ab]}};this.get=function(ae){var ad=ae-ac.length*Math.floor(ae/ac.length);return ac[ad]};this.setColors=function(ad){ac=ad};this.reset=function(){ab=0};this.getIndex=function(){return ab};this.setIndex=function(ad){ab=ad}};H.jqplot.hex2rgb=function(ad,ab){ad=ad.replace("#","");if(ad.length==3){ad=ad.charAt(0)+ad.charAt(0)+ad.charAt(1)+ad.charAt(1)+ad.charAt(2)+ad.charAt(2)}var ac;ac="rgba("+parseInt(ad.slice(0,2),16)+", "+parseInt(ad.slice(2,4),16)+", "+parseInt(ad.slice(4,6),16);if(ab){ac+=", "+ab}ac+=")";return ac};H.jqplot.rgb2hex=function(ag){var ad=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var ab=ag.match(ad);var af="#";for(var ae=1;ae<4;ae++){var ac;if(ab[ae].search(/%/)!=-1){ac=parseInt(255*ab[ae]/100,10).toString(16);if(ac.length==1){ac="0"+ac}}else{ac=parseInt(ab[ae],10).toString(16);if(ac.length==1){ac="0"+ac}}af+=ac}return af};H.jqplot.normalize2rgb=function(ac,ab){if(ac.search(/^ *rgba?\(/)!=-1){return ac}else{if(ac.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return H.jqplot.hex2rgb(ac,ab)}else{throw"invalid color spec"}}};H.jqplot.getColorComponents=function(ag){ag=H.jqplot.colorKeywordMap[ag]||ag;var ae=H.jqplot.normalize2rgb(ag);var ad=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var ab=ae.match(ad);var ac=[];for(var af=1;af<4;af++){if(ab[af].search(/%/)!=-1){ac[af-1]=parseInt(255*ab[af]/100,10)}else{ac[af-1]=parseInt(ab[af],10)}}ac[3]=parseFloat(ab[4])?parseFloat(ab[4]):1;return ac};H.jqplot.colorKeywordMap={aliceblue:"rgb(240, 248, 255)",antiquewhite:"rgb(250, 235, 215)",aqua:"rgb( 0, 255, 255)",aquamarine:"rgb(127, 255, 212)",azure:"rgb(240, 255, 255)",beige:"rgb(245, 245, 220)",bisque:"rgb(255, 228, 196)",black:"rgb( 0, 0, 0)",blanchedalmond:"rgb(255, 235, 205)",blue:"rgb( 0, 0, 255)",blueviolet:"rgb(138, 43, 226)",brown:"rgb(165, 42, 42)",burlywood:"rgb(222, 184, 135)",cadetblue:"rgb( 95, 158, 160)",chartreuse:"rgb(127, 255, 0)",chocolate:"rgb(210, 105, 30)",coral:"rgb(255, 127, 80)",cornflowerblue:"rgb(100, 149, 237)",cornsilk:"rgb(255, 248, 220)",crimson:"rgb(220, 20, 60)",cyan:"rgb( 0, 255, 255)",darkblue:"rgb( 0, 0, 139)",darkcyan:"rgb( 0, 139, 139)",darkgoldenrod:"rgb(184, 134, 11)",darkgray:"rgb(169, 169, 169)",darkgreen:"rgb( 0, 100, 0)",darkgrey:"rgb(169, 169, 169)",darkkhaki:"rgb(189, 183, 107)",darkmagenta:"rgb(139, 0, 139)",darkolivegreen:"rgb( 85, 107, 47)",darkorange:"rgb(255, 140, 0)",darkorchid:"rgb(153, 50, 204)",darkred:"rgb(139, 0, 0)",darksalmon:"rgb(233, 150, 122)",darkseagreen:"rgb(143, 188, 143)",darkslateblue:"rgb( 72, 61, 139)",darkslategray:"rgb( 47, 79, 79)",darkslategrey:"rgb( 47, 79, 79)",darkturquoise:"rgb( 0, 206, 209)",darkviolet:"rgb(148, 0, 211)",deeppink:"rgb(255, 20, 147)",deepskyblue:"rgb( 0, 191, 255)",dimgray:"rgb(105, 105, 105)",dimgrey:"rgb(105, 105, 105)",dodgerblue:"rgb( 30, 144, 255)",firebrick:"rgb(178, 34, 34)",floralwhite:"rgb(255, 250, 240)",forestgreen:"rgb( 34, 139, 34)",fuchsia:"rgb(255, 0, 255)",gainsboro:"rgb(220, 220, 220)",ghostwhite:"rgb(248, 248, 255)",gold:"rgb(255, 215, 0)",goldenrod:"rgb(218, 165, 32)",gray:"rgb(128, 128, 128)",grey:"rgb(128, 128, 128)",green:"rgb( 0, 128, 0)",greenyellow:"rgb(173, 255, 47)",honeydew:"rgb(240, 255, 240)",hotpink:"rgb(255, 105, 180)",indianred:"rgb(205, 92, 92)",indigo:"rgb( 75, 0, 130)",ivory:"rgb(255, 255, 240)",khaki:"rgb(240, 230, 140)",lavender:"rgb(230, 230, 250)",lavenderblush:"rgb(255, 240, 245)",lawngreen:"rgb(124, 252, 0)",lemonchiffon:"rgb(255, 250, 205)",lightblue:"rgb(173, 216, 230)",lightcoral:"rgb(240, 128, 128)",lightcyan:"rgb(224, 255, 255)",lightgoldenrodyellow:"rgb(250, 250, 210)",lightgray:"rgb(211, 211, 211)",lightgreen:"rgb(144, 238, 144)",lightgrey:"rgb(211, 211, 211)",lightpink:"rgb(255, 182, 193)",lightsalmon:"rgb(255, 160, 122)",lightseagreen:"rgb( 32, 178, 170)",lightskyblue:"rgb(135, 206, 250)",lightslategray:"rgb(119, 136, 153)",lightslategrey:"rgb(119, 136, 153)",lightsteelblue:"rgb(176, 196, 222)",lightyellow:"rgb(255, 255, 224)",lime:"rgb( 0, 255, 0)",limegreen:"rgb( 50, 205, 50)",linen:"rgb(250, 240, 230)",magenta:"rgb(255, 0, 255)",maroon:"rgb(128, 0, 0)",mediumaquamarine:"rgb(102, 205, 170)",mediumblue:"rgb( 0, 0, 205)",mediumorchid:"rgb(186, 85, 211)",mediumpurple:"rgb(147, 112, 219)",mediumseagreen:"rgb( 60, 179, 113)",mediumslateblue:"rgb(123, 104, 238)",mediumspringgreen:"rgb( 0, 250, 154)",mediumturquoise:"rgb( 72, 209, 204)",mediumvioletred:"rgb(199, 21, 133)",midnightblue:"rgb( 25, 25, 112)",mintcream:"rgb(245, 255, 250)",mistyrose:"rgb(255, 228, 225)",moccasin:"rgb(255, 228, 181)",navajowhite:"rgb(255, 222, 173)",navy:"rgb( 0, 0, 128)",oldlace:"rgb(253, 245, 230)",olive:"rgb(128, 128, 0)",olivedrab:"rgb(107, 142, 35)",orange:"rgb(255, 165, 0)",orangered:"rgb(255, 69, 0)",orchid:"rgb(218, 112, 214)",palegoldenrod:"rgb(238, 232, 170)",palegreen:"rgb(152, 251, 152)",paleturquoise:"rgb(175, 238, 238)",palevioletred:"rgb(219, 112, 147)",papayawhip:"rgb(255, 239, 213)",peachpuff:"rgb(255, 218, 185)",peru:"rgb(205, 133, 63)",pink:"rgb(255, 192, 203)",plum:"rgb(221, 160, 221)",powderblue:"rgb(176, 224, 230)",purple:"rgb(128, 0, 128)",red:"rgb(255, 0, 0)",rosybrown:"rgb(188, 143, 143)",royalblue:"rgb( 65, 105, 225)",saddlebrown:"rgb(139, 69, 19)",salmon:"rgb(250, 128, 114)",sandybrown:"rgb(244, 164, 96)",seagreen:"rgb( 46, 139, 87)",seashell:"rgb(255, 245, 238)",sienna:"rgb(160, 82, 45)",silver:"rgb(192, 192, 192)",skyblue:"rgb(135, 206, 235)",slateblue:"rgb(106, 90, 205)",slategray:"rgb(112, 128, 144)",slategrey:"rgb(112, 128, 144)",snow:"rgb(255, 250, 250)",springgreen:"rgb( 0, 255, 127)",steelblue:"rgb( 70, 130, 180)",tan:"rgb(210, 180, 140)",teal:"rgb( 0, 128, 128)",thistle:"rgb(216, 191, 216)",tomato:"rgb(255, 99, 71)",turquoise:"rgb( 64, 224, 208)",violet:"rgb(238, 130, 238)",wheat:"rgb(245, 222, 179)",white:"rgb(255, 255, 255)",whitesmoke:"rgb(245, 245, 245)",yellow:"rgb(255, 255, 0)",yellowgreen:"rgb(154, 205, 50)"};H.jqplot.AxisLabelRenderer=function(ab){H.jqplot.ElemContainer.call(this);this.axis;this.show=true;this.label="";this.fontFamily=null;this.fontSize=null;this.textColor=null;this._elem;this.escapeHTML=false;H.extend(true,this,ab)};H.jqplot.AxisLabelRenderer.prototype=new H.jqplot.ElemContainer();H.jqplot.AxisLabelRenderer.prototype.constructor=H.jqplot.AxisLabelRenderer;H.jqplot.AxisLabelRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.AxisLabelRenderer.prototype.draw=function(ab,ac){if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};H.jqplot.AxisLabelRenderer.prototype.pack=function(){};H.jqplot.AxisTickRenderer=function(ab){H.jqplot.ElemContainer.call(this);this.mark="outside";this.axis;this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.size=4;this.markSize=6;this.show=true;this.showLabel=true;this.label=null;this.value=null;this._styles={};this.formatter=H.jqplot.DefaultTickFormatter;this.prefix="";this.suffix="";this.formatString="";this.fontFamily;this.fontSize;this.textColor;this.escapeHTML=false;this._elem;this._breakTick=false;H.extend(true,this,ab)};H.jqplot.AxisTickRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.AxisTickRenderer.prototype=new H.jqplot.ElemContainer();H.jqplot.AxisTickRenderer.prototype.constructor=H.jqplot.AxisTickRenderer;H.jqplot.AxisTickRenderer.prototype.setTick=function(ab,ad,ac){this.value=ab;this.axis=ad;if(ac){this.isMinorTick=true}return this};H.jqplot.AxisTickRenderer.prototype.draw=function(){if(this.label===null){this.label=this.prefix+this.formatter(this.formatString,this.value)+this.suffix}var ac={position:"absolute"};if(Number(this.label)){ac.whitSpace="nowrap"}if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H(document.createElement("div"));this._elem.addClass("jqplot-"+this.axis+"-tick");if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}this._elem.css(ac);for(var ab in this._styles){this._elem.css(ab,this._styles[ab])}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}if(this._breakTick){this._elem.addClass("jqplot-breakTick")}return this._elem};H.jqplot.DefaultTickFormatter=function(ab,ac){if(typeof ac=="number"){if(!ab){ab=H.jqplot.config.defaultTickFormatString}return H.jqplot.sprintf(ab,ac)}else{return String(ac)}};H.jqplot.PercentTickFormatter=function(ab,ac){if(typeof ac=="number"){ac=100*ac;if(!ab){ab=H.jqplot.config.defaultTickFormatString}return H.jqplot.sprintf(ab,ac)}else{return String(ac)}};H.jqplot.AxisTickRenderer.prototype.pack=function(){};H.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new H.jqplot.ShadowRenderer()};H.jqplot.CanvasGridRenderer.prototype.init=function(ac){this._ctx;H.extend(true,this,ac);var ab={lineJoin:"miter",lineCap:"round",fill:false,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.shadowWidth,closePath:false,strokeStyle:this.shadowColor};this.renderer.shadowRenderer.init(ab)};H.jqplot.CanvasGridRenderer.prototype.createElement=function(ae){var ad;if(this._elem){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){ad=this._elem.get(0);window.G_vmlCanvasManager.uninitElement(ad);ad=null}this._elem.emptyForce();this._elem=null}ad=ae.canvasManager.getCanvas();var ab=this._plotDimensions.width;var ac=this._plotDimensions.height;ad.width=ab;ad.height=ac;this._elem=H(ad);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});ad=ae.canvasManager.initCanvas(ad);this._top=this._offsets.top;this._bottom=ac-this._offsets.bottom;this._left=this._offsets.left;this._right=ab-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;ad=null;return this._elem};H.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var am=this._ctx;var ap=this._axes;am.save();am.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);am.fillStyle=this.backgroundColor||this.background;am.fillRect(this._left,this._top,this._width,this._height);am.save();am.lineJoin="miter";am.lineCap="butt";am.lineWidth=this.gridLineWidth;am.strokeStyle=this.gridLineColor;var at,ar,aj,ak;var ag=["xaxis","yaxis","x2axis","y2axis"];for(var aq=4;aq>0;aq--){var aw=ag[aq-1];var ab=ap[aw];var au=ab._ticks;var al=au.length;if(ab.show){if(ab.drawBaseline){var av={};if(ab.baselineWidth!==null){av.lineWidth=ab.baselineWidth}if(ab.baselineColor!==null){av.strokeStyle=ab.baselineColor}switch(aw){case"xaxis":ai(this._left,this._bottom,this._right,this._bottom,av);break;case"yaxis":ai(this._left,this._bottom,this._left,this._top,av);break;case"x2axis":ai(this._left,this._bottom,this._right,this._bottom,av);break;case"y2axis":ai(this._right,this._bottom,this._right,this._top,av);break}}for(var an=al;an>0;an--){var ah=au[an-1];if(ah.show){var ae=Math.round(ab.u2p(ah.value))+0.5;switch(aw){case"xaxis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(ae,this._top,ae,this._bottom)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._bottom;ar=this._bottom+aj;break;case"inside":at=this._bottom-aj;ar=this._bottom;break;case"cross":at=this._bottom-aj;ar=this._bottom+aj;break;default:at=this._bottom;ar=this._bottom+aj;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[ae,at],[ae,ar]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ai(ae,at,ae,ar)}break;case"yaxis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(this._right,ae,this._left,ae)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._left-aj;ar=this._left;break;case"inside":at=this._left;ar=this._left+aj;break;case"cross":at=this._left-aj;ar=this._left+aj;break;default:at=this._left-aj;ar=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[at,ae],[ar,ae]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}break;case"x2axis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(ae,this._bottom,ae,this._top)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._top-aj;ar=this._top;break;case"inside":at=this._top;ar=this._top+aj;break;case"cross":at=this._top-aj;ar=this._top+aj;break;default:at=this._top-aj;ar=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[ae,at],[ae,ar]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ai(ae,at,ae,ar)}break;case"y2axis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(this._left,ae,this._right,ae)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._right;ar=this._right+aj;break;case"inside":at=this._right-aj;ar=this._right;break;case"cross":at=this._right-aj;ar=this._right+aj;break;default:at=this._right;ar=this._right+aj;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[at,ae],[ar,ae]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}break;default:break}}}ah=null}ab=null;au=null}ag=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];for(var aq=7;aq>0;aq--){var ab=ap[ag[aq-1]];var au=ab._ticks;if(ab.show){var ac=au[ab.numberTicks-1];var af=au[0];var ad=ab.getLeft();var ao=[[ad,ac.getTop()+ac.getHeight()/2],[ad,af.getTop()+af.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(am,ao,{lineCap:"butt",fill:false,closePath:false})}ai(ao[0][0],ao[0][1],ao[1][0],ao[1][1],{lineCap:"butt",strokeStyle:ab.borderColor,lineWidth:ab.borderWidth});for(var an=au.length;an>0;an--){var ah=au[an-1];aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;if(ah.showMark&&ah.mark){switch(ak){case"outside":at=ad;ar=ad+aj;break;case"inside":at=ad-aj;ar=ad;break;case"cross":at=ad-aj;ar=ad+aj;break;default:at=ad;ar=ad+aj;break}ao=[[at,ae],[ar,ae]];if(this.shadow){this.renderer.shadowRenderer.draw(am,ao,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}ah=null}af=null}ab=null;au=null}am.restore();function ai(aB,aA,ay,ax,az){am.save();az=az||{};if(az.lineWidth==null||az.lineWidth!=0){H.extend(true,am,az);am.beginPath();am.moveTo(aB,aA);am.lineTo(ay,ax);am.stroke();am.restore()}}if(this.shadow){var ao=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(am,ao)}if(this.borderWidth!=0&&this.drawBorder){ai(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:ap.x2axis.borderColor,lineWidth:ap.x2axis.borderWidth});ai(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:ap.y2axis.borderColor,lineWidth:ap.y2axis.borderWidth});ai(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:ap.xaxis.borderColor,lineWidth:ap.xaxis.borderWidth});ai(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:ap.yaxis.borderColor,lineWidth:ap.yaxis.borderWidth})}am.restore();am=null;ap=null};H.jqplot.DivTitleRenderer=function(){};H.jqplot.DivTitleRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.DivTitleRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}var ae=this.renderer;var ad=document.createElement("div");this._elem=H(ad);this._elem.addClass("jqplot-title");if(!this.text){this.show=false;this._elem.height(0);this._elem.width(0)}else{if(this.text){var ab;if(this.color){ab=this.color}else{if(this.textColor){ab=this.textColor}}var ac={position:"absolute",top:"0px",left:"0px"};if(this._plotWidth){ac.width=this._plotWidth+"px"}if(this.fontSize){ac.fontSize=this.fontSize}if(typeof this.textAlign==="string"){ac.textAlign=this.textAlign}else{ac.textAlign="center"}if(ab){ac.color=ab}if(this.paddingBottom){ac.paddingBottom=this.paddingBottom}if(this.fontFamily){ac.fontFamily=this.fontFamily}this._elem.css(ac);if(this.escapeHtml){this._elem.text(this.text)}else{this._elem.html(this.text)}}}ad=null;return this._elem};H.jqplot.DivTitleRenderer.prototype.pack=function(){};var o=0.1;H.jqplot.LinePattern=function(ap,ak){var aj={dotted:[o,H.jqplot.config.dotGapLength],dashed:[H.jqplot.config.dashLength,H.jqplot.config.gapLength],solid:null};if(typeof ak==="string"){if(ak[0]==="."||ak[0]==="-"){var aq=ak;ak=[];for(var ai=0,af=aq.length;ai<af;ai++){if(aq[ai]==="."){ak.push(o)}else{if(aq[ai]==="-"){ak.push(H.jqplot.config.dashLength)}else{continue}}ak.push(H.jqplot.config.gapLength)}}else{ak=aj[ak]}}if(!(ak&&ak.length)){return ap}var ae=0;var al=ak[0];var an=0;var am=0;var ah=0;var ab=0;var ao=function(ar,at){ap.moveTo(ar,at);an=ar;am=at;ah=ar;ab=at};var ad=function(ar,ay){var aw=ap.lineWidth;var au=ar-an;var at=ay-am;var av=Math.sqrt(au*au+at*at);if((av>0)&&(aw>0)){au/=av;at/=av;while(true){var ax=aw*al;if(ax<av){an+=ax*au;am+=ax*at;if((ae&1)==0){ap.lineTo(an,am)}else{ap.moveTo(an,am)}av-=ax;ae++;if(ae>=ak.length){ae=0}al=ak[ae]}else{an=ar;am=ay;if((ae&1)==0){ap.lineTo(an,am)}else{ap.moveTo(an,am)}al-=av/aw;break}}}};var ac=function(){ap.beginPath()};var ag=function(){ad(ah,ab)};return{moveTo:ao,lineTo:ad,beginPath:ac,closePath:ag}};H.jqplot.LineRenderer=function(){this.shapeRenderer=new H.jqplot.ShapeRenderer();this.shadowRenderer=new H.jqplot.ShadowRenderer()};H.jqplot.LineRenderer.prototype.init=function(ac,ah){ac=ac||{};this._type="line";this.renderer.animation={show:false,direction:"left",speed:2500,_supported:true};this.renderer.smooth=false;this.renderer.tension=null;this.renderer.constrainSmoothing=true;this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];this.renderer.bandData=[];this.renderer.bands={show:false,hiData:[],lowData:[],color:this.color,showLines:false,fill:true,fillColor:null,_min:null,_max:null,interval:"3%"};var af={highlightMouseOver:ac.highlightMouseOver,highlightMouseDown:ac.highlightMouseDown,highlightColor:ac.highlightColor};delete (ac.highlightMouseOver);delete (ac.highlightMouseDown);delete (ac.highlightColor);H.extend(true,this.renderer,ac);this.renderer.options=ac;if(this.renderer.bandData.length>1&&(!ac.bands||ac.bands.show==null)){this.renderer.bands.show=true}else{if(ac.bands&&ac.bands.show==null&&ac.bands.interval!=null){this.renderer.bands.show=true}}if(this.fill){this.renderer.bands.show=false}if(this.renderer.bands.show){this.renderer.initBands.call(this,this.renderer.options,ah)}if(this._stack){this.renderer.smooth=false}var ag={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.fillColor,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shapeRenderer.init(ag);var ad=ac.shadowOffset;if(ad==null){if(this.lineWidth>2.5){ad=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{ad=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var ab={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,angle:this.shadowAngle,offset:ad,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shadowRenderer.init(ab);this._areaPoints=[];this._boundingBox=[[],[]];if(!this.isTrendline&&this.fill||this.renderer.bands.show){this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColor=null;if(af.highlightMouseDown&&af.highlightMouseOver==null){af.highlightMouseOver=false}H.extend(true,this,{highlightMouseOver:af.highlightMouseOver,highlightMouseDown:af.highlightMouseDown,highlightColor:af.highlightColor});if(!this.highlightColor){var ae=(this.renderer.bands.show)?this.renderer.bands.fillColor:this.fillColor;this.highlightColor=H.jqplot.computeHighlightColors(ae)}if(this.highlighter){this.highlighter.show=false}}if(!this.isTrendline&&ah){ah.plugins.lineRenderer={};ah.postInitHooks.addOnce(v);ah.postDrawHooks.addOnce(Z);ah.eventListenerHooks.addOnce("jqplotMouseMove",g);ah.eventListenerHooks.addOnce("jqplotMouseDown",d);ah.eventListenerHooks.addOnce("jqplotMouseUp",Y);ah.eventListenerHooks.addOnce("jqplotClick",f);ah.eventListenerHooks.addOnce("jqplotRightClick",p)}};H.jqplot.LineRenderer.prototype.initBands=function(ae,ao){var af=ae.bandData||[];var ah=this.renderer.bands;ah.hiData=[];ah.lowData=[];var av=this.data;ah._max=null;ah._min=null;if(af.length==2){if(H.isArray(af[0][0])){var ai;var ab=0,al=0;for(var ap=0,am=af[0].length;ap<am;ap++){ai=af[0][ap];if((ai[1]!=null&&ai[1]>ah._max)||ah._max==null){ah._max=ai[1]}if((ai[1]!=null&&ai[1]<ah._min)||ah._min==null){ah._min=ai[1]}}for(var ap=0,am=af[1].length;ap<am;ap++){ai=af[1][ap];if((ai[1]!=null&&ai[1]>ah._max)||ah._max==null){ah._max=ai[1];al=1}if((ai[1]!=null&&ai[1]<ah._min)||ah._min==null){ah._min=ai[1];ab=1}}if(al===ab){ah.show=false}ah.hiData=af[al];ah.lowData=af[ab]}else{if(af[0].length===av.length&&af[1].length===av.length){var ad=(af[0][0]>af[1][0])?0:1;var aw=(ad)?0:1;for(var ap=0,am=av.length;ap<am;ap++){ah.hiData.push([av[ap][0],af[ad][ap]]);ah.lowData.push([av[ap][0],af[aw][ap]])}}else{ah.show=false}}}else{if(af.length>2&&!H.isArray(af[0][0])){var ad=(af[0][0]>af[0][1])?0:1;var aw=(ad)?0:1;for(var ap=0,am=af.length;ap<am;ap++){ah.hiData.push([av[ap][0],af[ap][ad]]);ah.lowData.push([av[ap][0],af[ap][aw]])}}else{var ak=ah.interval;var au=null;var at=null;var ac=null;var an=null;if(H.isArray(ak)){au=ak[0];at=ak[1]}else{au=ak}if(isNaN(au)){if(au.charAt(au.length-1)==="%"){ac="multiply";au=parseFloat(au)/100+1}}else{au=parseFloat(au);ac="add"}if(at!==null&&isNaN(at)){if(at.charAt(at.length-1)==="%"){an="multiply";at=parseFloat(at)/100+1}}else{if(at!==null){at=parseFloat(at);an="add"}}if(au!==null){if(at===null){at=-au;an=ac;if(an==="multiply"){at+=2}}if(au<at){var aq=au;au=at;at=aq;aq=ac;ac=an;an=aq}for(var ap=0,am=av.length;ap<am;ap++){switch(ac){case"add":ah.hiData.push([av[ap][0],av[ap][1]+au]);break;case"multiply":ah.hiData.push([av[ap][0],av[ap][1]*au]);break}switch(an){case"add":ah.lowData.push([av[ap][0],av[ap][1]+at]);break;case"multiply":ah.lowData.push([av[ap][0],av[ap][1]*at]);break}}}else{ah.show=false}}}var ag=ah.hiData;var aj=ah.lowData;for(var ap=0,am=ag.length;ap<am;ap++){if((ag[ap][1]!=null&&ag[ap][1]>ah._max)||ah._max==null){ah._max=ag[ap][1]}}for(var ap=0,am=aj.length;ap<am;ap++){if((aj[ap][1]!=null&&aj[ap][1]<ah._min)||ah._min==null){ah._min=aj[ap][1]}}if(ah.fillColor===null){var ar=H.jqplot.getColorComponents(ah.color);ar[3]=ar[3]*0.5;ah.fillColor="rgba("+ar[0]+", "+ar[1]+", "+ar[2]+", "+ar[3]+")"}};function G(ac,ab){return(3.4182054+ab)*Math.pow(ac,-0.3534992)}function k(ad,ac){var ab=Math.sqrt(Math.pow((ac[0]-ad[0]),2)+Math.pow((ac[1]-ad[1]),2));return 5.7648*Math.log(ab)+7.4456}function w(ab){var ac=(Math.exp(2*ab)-1)/(Math.exp(2*ab)+1);return ac}function F(aD){var am=this.renderer.smooth;var ax=this.canvas.getWidth();var ah=this._xaxis.series_p2u;var aA=this._yaxis.series_p2u;var az=null;var ag=null;var at=aD.length/ax;var ad=[];var ar=[];if(!isNaN(parseFloat(am))){az=parseFloat(am)}else{az=G(at,0.5)}var ap=[];var ae=[];for(var ay=0,au=aD.length;ay<au;ay++){ap.push(aD[ay][1]);ae.push(aD[ay][0])}function ao(aE,aF){if(aE-aF==0){return Math.pow(10,10)}else{return aE-aF}}var aq,al,ak,aj;var ab=aD.length-1;for(var af=1,av=aD.length;af<av;af++){var ac=[];var an=[];for(var aw=0;aw<2;aw++){var ay=af-1+aw;if(ay==0||ay==ab){ac[aw]=Math.pow(10,10)}else{if(ap[ay+1]-ap[ay]==0||ap[ay]-ap[ay-1]==0){ac[aw]=0}else{if(((ae[ay+1]-ae[ay])/(ap[ay+1]-ap[ay])+(ae[ay]-ae[ay-1])/(ap[ay]-ap[ay-1]))==0){ac[aw]=0}else{if((ap[ay+1]-ap[ay])*(ap[ay]-ap[ay-1])<0){ac[aw]=0}else{ac[aw]=2/(ao(ae[ay+1],ae[ay])/(ap[ay+1]-ap[ay])+ao(ae[ay],ae[ay-1])/(ap[ay]-ap[ay-1]))}}}}}if(af==1){ac[0]=3/2*(ap[1]-ap[0])/ao(ae[1],ae[0])-ac[1]/2}else{if(af==ab){ac[1]=3/2*(ap[ab]-ap[ab-1])/ao(ae[ab],ae[ab-1])-ac[0]/2}}an[0]=-2*(ac[1]+2*ac[0])/ao(ae[af],ae[af-1])+6*(ap[af]-ap[af-1])/Math.pow(ao(ae[af],ae[af-1]),2);an[1]=2*(2*ac[1]+ac[0])/ao(ae[af],ae[af-1])-6*(ap[af]-ap[af-1])/Math.pow(ao(ae[af],ae[af-1]),2);aj=1/6*(an[1]-an[0])/ao(ae[af],ae[af-1]);ak=1/2*(ae[af]*an[0]-ae[af-1]*an[1])/ao(ae[af],ae[af-1]);al=(ap[af]-ap[af-1]-ak*(Math.pow(ae[af],2)-Math.pow(ae[af-1],2))-aj*(Math.pow(ae[af],3)-Math.pow(ae[af-1],3)))/ao(ae[af],ae[af-1]);aq=ap[af-1]-al*ae[af-1]-ak*Math.pow(ae[af-1],2)-aj*Math.pow(ae[af-1],3);var aC=(ae[af]-ae[af-1])/az;var aB,ai;for(var aw=0,au=az;aw<au;aw++){aB=[];ai=ae[af-1]+aw*aC;aB.push(ai);aB.push(aq+al*ai+ak*Math.pow(ai,2)+aj*Math.pow(ai,3));ad.push(aB);ar.push([ah(aB[0]),aA(aB[1])])}}ad.push(aD[ay]);ar.push([ah(aD[ay][0]),aA(aD[ay][1])]);return[ad,ar]}function B(aj){var ai=this.renderer.smooth;var aO=this.renderer.tension;var ab=this.canvas.getWidth();var aB=this._xaxis.series_p2u;var ak=this._yaxis.series_p2u;var aC=null;var aD=null;var aN=null;var aI=null;var aG=null;var am=null;var aL=null;var ag=null;var aE,aF,ax,aw,au,ar;var ae,ac,ao,an;var av,at,aH;var ap=[];var ad=[];var af=aj.length/ab;var aM,aq,az,aA,ay;var al=[];var ah=[];if(!isNaN(parseFloat(ai))){aC=parseFloat(ai)}else{aC=G(af,0.5)}if(!isNaN(parseFloat(aO))){aO=parseFloat(aO)}for(var aK=0,aJ=aj.length-1;aK<aJ;aK++){if(aO===null){am=Math.abs((aj[aK+1][1]-aj[aK][1])/(aj[aK+1][0]-aj[aK][0]));aM=0.3;aq=0.6;az=(aq-aM)/2;aA=2.5;ay=-1.4;ag=am/aA+ay;aI=az*w(ag)-az*w(ay)+aM;if(aK>0){aL=Math.abs((aj[aK][1]-aj[aK-1][1])/(aj[aK][0]-aj[aK-1][0]))}ag=aL/aA+ay;aG=az*w(ag)-az*w(ay)+aM;aN=(aI+aG)/2}else{aN=aO}for(aE=0;aE<aC;aE++){aF=aE/aC;ax=(1+2*aF)*Math.pow((1-aF),2);aw=aF*Math.pow((1-aF),2);au=Math.pow(aF,2)*(3-2*aF);ar=Math.pow(aF,2)*(aF-1);if(aj[aK-1]){ae=aN*(aj[aK+1][0]-aj[aK-1][0]);ac=aN*(aj[aK+1][1]-aj[aK-1][1])}else{ae=aN*(aj[aK+1][0]-aj[aK][0]);ac=aN*(aj[aK+1][1]-aj[aK][1])}if(aj[aK+2]){ao=aN*(aj[aK+2][0]-aj[aK][0]);an=aN*(aj[aK+2][1]-aj[aK][1])}else{ao=aN*(aj[aK+1][0]-aj[aK][0]);an=aN*(aj[aK+1][1]-aj[aK][1])}av=ax*aj[aK][0]+au*aj[aK+1][0]+aw*ae+ar*ao;at=ax*aj[aK][1]+au*aj[aK+1][1]+aw*ac+ar*an;aH=[av,at];al.push(aH);ah.push([aB(av),ak(at)])}}al.push(aj[aJ]);ah.push([aB(aj[aJ][0]),ak(aj[aJ][1])]);return[al,ah]}H.jqplot.LineRenderer.prototype.setGridData=function(aj){var af=this._xaxis.series_u2p;var ab=this._yaxis.series_u2p;var ag=this._plotData;var ak=this._prevPlotData;this.gridData=[];this._prevGridData=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var ae=this.renderer.bands;var ac=false;for(var ah=0,ad=ag.length;ah<ad;ah++){if(ag[ah][0]!=null&&ag[ah][1]!=null){this.gridData.push([af.call(this._xaxis,ag[ah][0]),ab.call(this._yaxis,ag[ah][1])])}else{if(ag[ah][0]==null){ac=true;this.gridData.push([null,ab.call(this._yaxis,ag[ah][1])])}else{if(ag[ah][1]==null){ac=true;this.gridData.push([af.call(this._xaxis,ag[ah][0]),null])}}}if(ak[ah]!=null&&ak[ah][0]!=null&&ak[ah][1]!=null){this._prevGridData.push([af.call(this._xaxis,ak[ah][0]),ab.call(this._yaxis,ak[ah][1])])}else{if(ak[ah]!=null&&ak[ah][0]==null){this._prevGridData.push([null,ab.call(this._yaxis,ak[ah][1])])}else{if(ak[ah]!=null&&ak[ah][0]!=null&&ak[ah][1]==null){this._prevGridData.push([af.call(this._xaxis,ak[ah][0]),null])}}}}if(ac){this.renderer.smooth=false;if(this._type==="line"){ae.show=false}}if(this._type==="line"&&ae.show){for(var ah=0,ad=ae.hiData.length;ah<ad;ah++){this.renderer._hiBandGridData.push([af.call(this._xaxis,ae.hiData[ah][0]),ab.call(this._yaxis,ae.hiData[ah][1])])}for(var ah=0,ad=ae.lowData.length;ah<ad;ah++){this.renderer._lowBandGridData.push([af.call(this._xaxis,ae.lowData[ah][0]),ab.call(this._yaxis,ae.lowData[ah][1])])}}if(this._type==="line"&&this.renderer.smooth&&this.gridData.length>2){var ai;if(this.renderer.constrainSmoothing){ai=F.call(this,this.gridData);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}else{ai=B.call(this,this.gridData);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=B.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=B.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}}};H.jqplot.LineRenderer.prototype.makeGridData=function(ai,ak){var ag=this._xaxis.series_u2p;var ab=this._yaxis.series_u2p;var al=[];var ad=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var af=this.renderer.bands;var ac=false;for(var ah=0;ah<ai.length;ah++){if(ai[ah][0]!=null&&ai[ah][1]!=null){al.push([ag.call(this._xaxis,ai[ah][0]),ab.call(this._yaxis,ai[ah][1])])}else{if(ai[ah][0]==null){ac=true;al.push([null,ab.call(this._yaxis,ai[ah][1])])}else{if(ai[ah][1]==null){ac=true;al.push([ag.call(this._xaxis,ai[ah][0]),null])}}}}if(ac){this.renderer.smooth=false;if(this._type==="line"){af.show=false}}if(this._type==="line"&&af.show){for(var ah=0,ae=af.hiData.length;ah<ae;ah++){this.renderer._hiBandGridData.push([ag.call(this._xaxis,af.hiData[ah][0]),ab.call(this._yaxis,af.hiData[ah][1])])}for(var ah=0,ae=af.lowData.length;ah<ae;ah++){this.renderer._lowBandGridData.push([ag.call(this._xaxis,af.lowData[ah][0]),ab.call(this._yaxis,af.lowData[ah][1])])}}if(this._type==="line"&&this.renderer.smooth&&al.length>2){var aj;if(this.renderer.constrainSmoothing){aj=F.call(this,al);this.renderer._smoothedData=aj[0];this.renderer._smoothedPlotData=aj[1];if(af.show){aj=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=aj[0];aj=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=aj[0]}aj=null}else{aj=B.call(this,al);this.renderer._smoothedData=aj[0];this.renderer._smoothedPlotData=aj[1];if(af.show){aj=B.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=aj[0];aj=B.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=aj[0]}aj=null}}return al};H.jqplot.LineRenderer.prototype.draw=function(aq,aC,ac,av){var aw;var ak=H.extend(true,{},ac);var ae=(ak.shadow!=r)?ak.shadow:this.shadow;var aD=(ak.showLine!=r)?ak.showLine:this.showLine;var au=(ak.fill!=r)?ak.fill:this.fill;var ab=(ak.fillAndStroke!=r)?ak.fillAndStroke:this.fillAndStroke;var al,ar,ao,ay;aq.save();if(aC.length){if(aD){if(au){if(this.fillToZero){var az=this.negativeColor;if(!this.useNegativeColors){az=ak.fillStyle}var ai=false;var aj=ak.fillStyle;if(ab){var aB=aC.slice(0)}if(this.index==0||!this._stack){var ap=[];var aF=(this.renderer.smooth)?this.renderer._smoothedPlotData:this._plotData;this._areaPoints=[];var aA=this._yaxis.series_u2p(this.fillToValue);var ad=this._xaxis.series_u2p(this.fillToValue);ak.closePath=true;if(this.fillAxis=="y"){ap.push([aC[0][0],aA]);this._areaPoints.push([aC[0][0],aA]);for(var aw=0;aw<aC.length-1;aw++){ap.push(aC[aw]);this._areaPoints.push(aC[aw]);if(aF[aw][1]*aF[aw+1][1]<0){if(aF[aw][1]<0){ai=true;ak.fillStyle=az}else{ai=false;ak.fillStyle=aj}var ah=aC[aw][0]+(aC[aw+1][0]-aC[aw][0])*(aA-aC[aw][1])/(aC[aw+1][1]-aC[aw][1]);ap.push([ah,aA]);this._areaPoints.push([ah,aA]);if(ae){this.renderer.shadowRenderer.draw(aq,ap,ak)}this.renderer.shapeRenderer.draw(aq,ap,ak);ap=[[ah,aA]]}}if(aF[aC.length-1][1]<0){ai=true;ak.fillStyle=az}else{ai=false;ak.fillStyle=aj}ap.push(aC[aC.length-1]);this._areaPoints.push(aC[aC.length-1]);ap.push([aC[aC.length-1][0],aA]);this._areaPoints.push([aC[aC.length-1][0],aA])}if(ae){this.renderer.shadowRenderer.draw(aq,ap,ak)}this.renderer.shapeRenderer.draw(aq,ap,ak)}else{var an=this._prevGridData;for(var aw=an.length;aw>0;aw--){aC.push(an[aw-1])}if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this._areaPoints=aC;this.renderer.shapeRenderer.draw(aq,aC,ak)}}else{if(ab){var aB=aC.slice(0)}if(this.index==0||!this._stack){var af=aq.canvas.height;aC.unshift([aC[0][0],af]);var ax=aC.length;aC.push([aC[ax-1][0],af])}else{var an=this._prevGridData;for(var aw=an.length;aw>0;aw--){aC.push(an[aw-1])}}this._areaPoints=aC;if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this.renderer.shapeRenderer.draw(aq,aC,ak)}if(ab){var at=H.extend(true,{},ak,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(aq,aB,at);if(this.markerRenderer.show){if(this.renderer.smooth){aB=this.gridData}for(aw=0;aw<aB.length;aw++){this.markerRenderer.draw(aB[aw][0],aB[aw][1],aq,ak.markerOptions)}}}}else{if(this.renderer.bands.show){var ag;var aE=H.extend(true,{},ak);if(this.renderer.bands.showLines){ag=(this.renderer.smooth)?this.renderer._hiBandSmoothedData:this.renderer._hiBandGridData;this.renderer.shapeRenderer.draw(aq,ag,ak);ag=(this.renderer.smooth)?this.renderer._lowBandSmoothedData:this.renderer._lowBandGridData;this.renderer.shapeRenderer.draw(aq,ag,aE)}if(this.renderer.bands.fill){if(this.renderer.smooth){ag=this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse())}else{ag=this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse())}this._areaPoints=ag;aE.closePath=true;aE.fill=true;aE.fillStyle=this.renderer.bands.fillColor;this.renderer.shapeRenderer.draw(aq,ag,aE)}}if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this.renderer.shapeRenderer.draw(aq,aC,ak)}}var al=ao=ar=ay=null;for(aw=0;aw<this._areaPoints.length;aw++){var am=this._areaPoints[aw];if(al>am[0]||al==null){al=am[0]}if(ay<am[1]||ay==null){ay=am[1]}if(ao<am[0]||ao==null){ao=am[0]}if(ar>am[1]||ar==null){ar=am[1]}}if(this.type==="line"&&this.renderer.bands.show){ay=this._yaxis.series_u2p(this.renderer.bands._min);ar=this._yaxis.series_u2p(this.renderer.bands._max)}this._boundingBox=[[al,ay],[ao,ar]];if(this.markerRenderer.show&&!au){if(this.renderer.smooth){aC=this.gridData}for(aw=0;aw<aC.length;aw++){if(aC[aw][0]!=null&&aC[aw][1]!=null){this.markerRenderer.draw(aC[aw][0],aC[aw][1],aq,ak.markerOptions)}}}}aq.restore()};H.jqplot.LineRenderer.prototype.drawShadow=function(ab,ad,ac){};function v(ae,ad,ab){for(var ac=0;ac<this.series.length;ac++){if(this.series[ac].renderer.constructor==H.jqplot.LineRenderer){if(this.series[ac].highlightMouseOver){this.series[ac].highlightMouseDown=false}}}}function Z(){if(this.plugins.lineRenderer&&this.plugins.lineRenderer.highlightCanvas){this.plugins.lineRenderer.highlightCanvas.resetCanvas();this.plugins.lineRenderer.highlightCanvas=null}this.plugins.lineRenderer.highlightedSeriesIndex=null;this.plugins.lineRenderer.highlightCanvas=new H.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-lineRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.lineRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(ab){V(ab.data.plot)})}function X(ah,ag,ae,ad){var ac=ah.series[ag];var ab=ah.plugins.lineRenderer.highlightCanvas;ab._ctx.clearRect(0,0,ab._ctx.canvas.width,ab._ctx.canvas.height);ac._highlightedPoint=ae;ah.plugins.lineRenderer.highlightedSeriesIndex=ag;var af={fillStyle:ac.highlightColor};if(ac.type==="line"&&ac.renderer.bands.show){af.fill=true;af.closePath=true}ac.renderer.shapeRenderer.draw(ab._ctx,ad,af);ab=null}function V(ad){var ab=ad.plugins.lineRenderer.highlightCanvas;ab._ctx.clearRect(0,0,ab._ctx.canvas.width,ab._ctx.canvas.height);for(var ac=0;ac<ad.series.length;ac++){ad.series[ac]._highlightedPoint=null}ad.plugins.lineRenderer.highlightedSeriesIndex=null;ad.target.trigger("jqplotDataUnhighlight");ab=null}function g(af,ae,ai,ah,ag){if(ah){var ad=[ah.seriesIndex,ah.pointIndex,ah.data];var ac=jQuery.Event("jqplotDataMouseOver");ac.pageX=af.pageX;ac.pageY=af.pageY;ag.target.trigger(ac,ad);if(ag.series[ad[0]].highlightMouseOver&&!(ad[0]==ag.plugins.lineRenderer.highlightedSeriesIndex)){var ab=jQuery.Event("jqplotDataHighlight");ab.which=af.which;ab.pageX=af.pageX;ab.pageY=af.pageY;ag.target.trigger(ab,ad);X(ag,ah.seriesIndex,ah.pointIndex,ah.points)}}else{if(ah==null){V(ag)}}}function d(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];if(af.series[ac[0]].highlightMouseDown&&!(ac[0]==af.plugins.lineRenderer.highlightedSeriesIndex)){var ab=jQuery.Event("jqplotDataHighlight");ab.which=ae.which;ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac);X(af,ag.seriesIndex,ag.pointIndex,ag.points)}}else{if(ag==null){V(af)}}}function Y(ad,ac,ag,af,ae){var ab=ae.plugins.lineRenderer.highlightedSeriesIndex;if(ab!=null&&ae.series[ab].highlightMouseDown){V(ae)}}function f(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];var ab=jQuery.Event("jqplotDataClick");ab.which=ae.which;ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac)}}function p(af,ae,ai,ah,ag){if(ah){var ad=[ah.seriesIndex,ah.pointIndex,ah.data];var ab=ag.plugins.lineRenderer.highlightedSeriesIndex;if(ab!=null&&ag.series[ab].highlightMouseDown){V(ag)}var ac=jQuery.Event("jqplotDataRightClick");ac.which=af.which;ac.pageX=af.pageX;ac.pageY=af.pageY;ag.target.trigger(ac,ad)}}H.jqplot.LinearAxisRenderer=function(){};H.jqplot.LinearAxisRenderer.prototype.init=function(ab){this.breakPoints=null;this.breakTickLabel="≈";this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.forceTickAt0=false;this.forceTickAt100=false;this.tickInset=0;this.minorTicks=0;this.alignTicks=false;this._autoFormatString="";this._overrideFormatString=false;this._scalefact=1;H.extend(true,this,ab);if(this.breakPoints){if(!H.isArray(this.breakPoints)){this.breakPoints=null}else{if(this.breakPoints.length<2||this.breakPoints[1]<=this.breakPoints[0]){this.breakPoints=null}}}if(this.numberTicks!=null&&this.numberTicks<2){this.numberTicks=2}this.resetDataBounds()};H.jqplot.LinearAxisRenderer.prototype.draw=function(ab,ai){if(this.show){this.renderer.createTicks.call(this,ai);var ah=0;var ac;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var ag=this._label.draw(ab,ai);ag.appendTo(this._elem);ag=null}var af=this._ticks;var ae;for(var ad=0;ad<af.length;ad++){ae=af[ad];if(ae.show&&ae.showLabel&&(!ae.isMinorTick||this.showMinorTicks)){this._elem.append(ae.draw(ab,ai))}}ae=null;af=null}return this._elem};H.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}};H.jqplot.LinearAxisRenderer.prototype.set=function(){var ai=0;var ad;var ac=0;var ah=0;var ab=(this._label==null)?false:this._label.show;if(this.show){var ag=this._ticks;var af;for(var ae=0;ae<ag.length;ae++){af=ag[ae];if(!af._breakTick&&af.show&&af.showLabel&&(!af.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){ad=af._elem.outerHeight(true)}else{ad=af._elem.outerWidth(true)}if(ad>ai){ai=ad}}}af=null;ag=null;if(ab){ac=this._label._elem.outerWidth(true);ah=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){ai=ai+ah;this._elem.css({height:ai+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){ai=ai+ah;this._elem.css({height:ai+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){ai=ai+ac;this._elem.css({width:ai+"px",left:"0px",top:"0px"});if(ab&&this._label.constructor==H.jqplot.AxisLabelRenderer){this._label._elem.css("width",ac+"px")}}else{ai=ai+ac;this._elem.css({width:ai+"px",right:"0px",top:"0px"});if(ab&&this._label.constructor==H.jqplot.AxisLabelRenderer){this._label._elem.css("width",ac+"px")}}}}}};H.jqplot.LinearAxisRenderer.prototype.createTicks=function(ad){var aN=this._ticks;var aE=this.ticks;var at=this.name;var av=this._dataBounds;var ab=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var ah;var a0,aC;var aj,ai;var aY,aU;var aB=this.min;var aZ=this.max;var aQ=this.numberTicks;var a4=this.tickInterval;var ag=30;this._scalefact=(Math.max(ab,ag+1)-ag)/300;if(aE.length){for(aU=0;aU<aE.length;aU++){var aI=aE[aU];var aO=new this.tickRenderer(this.tickOptions);if(H.isArray(aI)){aO.value=aI[0];if(this.breakPoints){if(aI[0]==this.breakPoints[0]){aO.label=this.breakTickLabel;aO._breakTick=true;aO.showGridline=false;aO.showMark=false}else{if(aI[0]>this.breakPoints[0]&&aI[0]<=this.breakPoints[1]){aO.show=false;aO.showGridline=false;aO.label=aI[1]}else{aO.label=aI[1]}}}else{aO.label=aI[1]}aO.setTick(aI[0],this.name);this._ticks.push(aO)}else{if(H.isPlainObject(aI)){H.extend(true,aO,aI);aO.axis=this.name;this._ticks.push(aO)}else{aO.value=aI;if(this.breakPoints){if(aI==this.breakPoints[0]){aO.label=this.breakTickLabel;aO._breakTick=true;aO.showGridline=false;aO.showMark=false}else{if(aI>this.breakPoints[0]&&aI<=this.breakPoints[1]){aO.show=false;aO.showGridline=false}}}aO.setTick(aI,this.name);this._ticks.push(aO)}}}this.numberTicks=aE.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(at=="xaxis"||at=="x2axis"){ab=this._plotDimensions.width}else{ab=this._plotDimensions.height}var aq=this.numberTicks;if(this.alignTicks){if(this.name==="x2axis"&&ad.axes.xaxis.show){aq=ad.axes.xaxis.numberTicks}else{if(this.name.charAt(0)==="y"&&this.name!=="yaxis"&&this.name!=="yMidAxis"&&ad.axes.yaxis.show){aq=ad.axes.yaxis.numberTicks}}}a0=((this.min!=null)?this.min:av.min);aC=((this.max!=null)?this.max:av.max);var ao=aC-a0;var aM,ar;var am;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}if(this.min==null||this.max==null&&this.tickInterval==null&&!this.autoscale){if(this.forceTickAt0){if(a0>0){a0=0}if(aC<0){aC=0}}if(this.forceTickAt100){if(a0>100){a0=100}if(aC<100){aC=100}}var ay=false,aV=false;if(this.min!=null){ay=true}else{if(this.max!=null){aV=true}}var aJ=H.jqplot.LinearTickGenerator(a0,aC,this._scalefact,aq,ay,aV);var ap=(this.min!=null)?a0:a0+ao*(this.padMin-1);var aK=(this.max!=null)?aC:aC-ao*(this.padMax-1);if(a0<ap||aC>aK){ap=(this.min!=null)?a0:a0-ao*(this.padMin-1);aK=(this.max!=null)?aC:aC+ao*(this.padMax-1);aJ=H.jqplot.LinearTickGenerator(ap,aK,this._scalefact,aq,ay,aV)}this.min=aJ[0];this.max=aJ[1];this.numberTicks=aJ[2];this._autoFormatString=aJ[3];this.tickInterval=aJ[4]}else{if(a0==aC){var ac=0.05;if(a0>0){ac=Math.max(Math.log(a0)/Math.LN10,0.05)}a0-=ac;aC+=ac}if(this.autoscale&&this.min==null&&this.max==null){var ae,af,al;var aw=false;var aH=false;var au={min:null,max:null,average:null,stddev:null};for(var aU=0;aU<this._series.length;aU++){var aP=this._series[aU];var ax=(aP.fillAxis=="x")?aP._xaxis.name:aP._yaxis.name;if(this.name==ax){var aL=aP._plotValues[aP.fillAxis];var aA=aL[0];var aW=aL[0];for(var aT=1;aT<aL.length;aT++){if(aL[aT]<aA){aA=aL[aT]}else{if(aL[aT]>aW){aW=aL[aT]}}}var an=(aW-aA)/aW;if(aP.renderer.constructor==H.jqplot.BarRenderer){if(aA>=0&&(aP.fillToZero||an>0.1)){aw=true}else{aw=false;if(aP.fill&&aP.fillToZero&&aA<0&&aW>0){aH=true}else{aH=false}}}else{if(aP.fill){if(aA>=0&&(aP.fillToZero||an>0.1)){aw=true}else{if(aA<0&&aW>0&&aP.fillToZero){aw=false;aH=true}else{aw=false;aH=false}}}else{if(aA<0){aw=false}}}}}if(aw){this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing);this.min=0;aB=0;af=aC/(this.numberTicks-1);am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)));if(af/am==parseInt(af/am,10)){af+=am}this.tickInterval=Math.ceil(af/am)*am;this.max=this.tickInterval*(this.numberTicks-1)}else{if(aH){this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing);var aD=Math.ceil(Math.abs(a0)/ao*(this.numberTicks-1));var a3=this.numberTicks-1-aD;af=Math.max(Math.abs(a0/aD),Math.abs(aC/a3));am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)));this.tickInterval=Math.ceil(af/am)*am;this.max=this.tickInterval*a3;this.min=-this.tickInterval*aD}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(ao/this.tickInterval)}else{this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){af=ao/(this.numberTicks-1);if(af<1){am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)))}else{am=1}this.tickInterval=Math.ceil(af*am*this.pad)/am}else{am=1/this.tickInterval}ae=this.tickInterval*(this.numberTicks-1);al=(ae-ao)/2;if(this.min==null){this.min=Math.floor(am*(a0-al))/am}if(this.max==null){this.max=this.min+ae}}}var az=H.jqplot.getSignificantFigures(this.tickInterval);var aG;if(az.digitsLeft>=az.significantDigits){aG="%d"}else{var am=Math.max(0,5-az.digitsLeft);am=Math.min(am,az.digitsRight);aG="%."+am+"f"}this._autoFormatString=aG}else{aM=(this.min!=null)?this.min:a0-ao*(this.padMin-1);ar=(this.max!=null)?this.max:aC+ao*(this.padMax-1);ao=ar-aM;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((ar-aM)/this.tickInterval)+1}else{if(ab>100){this.numberTicks=parseInt(3+(ab-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=ao/(this.numberTicks-1)}if(this.max==null){ar=aM+this.tickInterval*(this.numberTicks-1)}if(this.min==null){aM=ar-this.tickInterval*(this.numberTicks-1)}var az=H.jqplot.getSignificantFigures(this.tickInterval);var aG;if(az.digitsLeft>=az.significantDigits){aG="%d"}else{var am=Math.max(0,5-az.digitsLeft);am=Math.min(am,az.digitsRight);aG="%."+am+"f"}this._autoFormatString=aG;this.min=aM;this.max=ar}if(this.renderer.constructor==H.jqplot.LinearAxisRenderer&&this._autoFormatString==""){ao=this.max-this.min;var a1=new this.tickRenderer(this.tickOptions);var aF=a1.formatString||H.jqplot.config.defaultTickFormatString;var aF=aF.match(H.jqplot.sprintf.regex)[0];var aX=0;if(aF){if(aF.search(/[fFeEgGpP]/)>-1){var aS=aF.match(/\%\.(\d{0,})?[eEfFgGpP]/);if(aS){aX=parseInt(aS[1],10)}else{aX=6}}else{if(aF.search(/[di]/)>-1){aX=0}}var ak=Math.pow(10,-aX);if(this.tickInterval<ak){if(aQ==null&&a4==null){this.tickInterval=ak;if(aZ==null&&aB==null){this.min=Math.floor(this._dataBounds.min/ak)*ak;if(this.min==this._dataBounds.min){this.min=this._dataBounds.min-this.tickInterval}this.max=Math.ceil(this._dataBounds.max/ak)*ak;if(this.max==this._dataBounds.max){this.max=this._dataBounds.max+this.tickInterval}var aR=(this.max-this.min)/this.tickInterval;aR=aR.toFixed(11);aR=Math.ceil(aR);this.numberTicks=aR+1}else{if(aZ==null){var aR=(this._dataBounds.max-this.min)/this.tickInterval;aR=aR.toFixed(11);this.numberTicks=Math.ceil(aR)+2;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(aB==null){var aR=(this.max-this._dataBounds.min)/this.tickInterval;aR=aR.toFixed(11);this.numberTicks=Math.ceil(aR)+2;this.min=this.max-this.tickInterval*(this.numberTicks-1)}else{this.numberTicks=Math.ceil((aZ-aB)/this.tickInterval)+1;this.min=Math.floor(aB*Math.pow(10,aX))/Math.pow(10,aX);this.max=Math.ceil(aZ*Math.pow(10,aX))/Math.pow(10,aX);this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1}}}}}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var aO,a2;for(var aU=0;aU<this.numberTicks;aU++){aY=this.min+aU*this.tickInterval;aO=new this.tickRenderer(this.tickOptions);aO.setTick(aY,this.name);this._ticks.push(aO);if(aU<this.numberTicks-1){for(var aT=0;aT<this.minorTicks;aT++){aY+=this.tickInterval/(this.minorTicks+1);a2=H.extend(true,{},this.tickOptions,{name:this.name,value:aY,label:"",isMinorTick:true});aO=new this.tickRenderer(a2);this._ticks.push(aO)}}aO=null}}if(this.tickInset){this.min=this.min-this.tickInset*this.tickInterval;this.max=this.max+this.tickInset*this.tickInterval}aN=null};H.jqplot.LinearAxisRenderer.prototype.resetTickValues=function(ad){if(H.isArray(ad)&&ad.length==this._ticks.length){var ac;for(var ab=0;ab<ad.length;ab++){ac=this._ticks[ab];ac.value=ad[ab];ac.label=ac.formatter(ac.formatString,ad[ab]);ac.label=ac.prefix+ac.label;ac._elem.html(ac.label)}ac=null;this.min=H.jqplot.arrayMin(ad);this.max=H.jqplot.arrayMax(ad);this.pack()}};H.jqplot.LinearAxisRenderer.prototype.pack=function(ad,ac){ad=ad||{};ac=ac||this._offsets;var ar=this._ticks;var an=this.max;var am=this.min;var ai=ac.max;var ag=ac.min;var ak=(this._label==null)?false:this._label.show;for(var al in ad){this._elem.css(al,ad[al])}this._offsets=ac;var ae=ai-ag;var af=an-am;if(this.breakPoints){af=af-this.breakPoints[1]+this.breakPoints[0];this.p2u=function(au){return(au-ag)*af/ae+am};this.u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au<=this.breakPoints[0]){return(au-am)*ae/af+ag}else{return(au-this.breakPoints[1]+this.breakPoints[0]-am)*ae/af+ag}};if(this.name.charAt(0)=="x"){this.series_u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au<=this.breakPoints[0]){return(au-am)*ae/af}else{return(au-this.breakPoints[1]+this.breakPoints[0]-am)*ae/af}};this.series_p2u=function(au){return au*af/ae+am}}else{this.series_u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au>=this.breakPoints[1]){return(au-an)*ae/af}else{return(au+this.breakPoints[1]-this.breakPoints[0]-an)*ae/af}};this.series_p2u=function(au){return au*af/ae+an}}}else{this.p2u=function(au){return(au-ag)*af/ae+am};this.u2p=function(au){return(au-am)*ae/af+ag};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(au){return(au-am)*ae/af};this.series_p2u=function(au){return au*af/ae+am}}else{this.series_u2p=function(au){return(au-an)*ae/af};this.series_p2u=function(au){return au*af/ae+an}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var ao=0;ao<ar.length;ao++){var aj=ar[ao];if(aj.show&&aj.showLabel){var ab;if(aj.constructor==H.jqplot.CanvasAxisTickRenderer&&aj.angle){var aq=(this.name=="xaxis")?1:-1;switch(aj.labelPosition){case"auto":if(aq*aj.angle<0){ab=-aj.getWidth()+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2}else{ab=-aj._textRenderer.height*Math.sin(aj._textRenderer.angle)/2}break;case"end":ab=-aj.getWidth()+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break;case"start":ab=-aj._textRenderer.height*Math.sin(aj._textRenderer.angle)/2;break;case"middle":ab=-aj.getWidth()/2+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break;default:ab=-aj.getWidth()/2+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break}}else{ab=-aj.getWidth()/2}var at=this.u2p(aj.value)+ab+"px";aj._elem.css("left",at);aj.pack()}}if(ak){var ah=this._label._elem.outerWidth(true);this._label._elem.css("left",ag+ae/2-ah/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var ao=0;ao<ar.length;ao++){var aj=ar[ao];if(aj.show&&aj.showLabel){var ab;if(aj.constructor==H.jqplot.CanvasAxisTickRenderer&&aj.angle){var aq=(this.name=="yaxis")?1:-1;switch(aj.labelPosition){case"auto":case"end":if(aq*aj.angle<0){ab=-aj._textRenderer.height*Math.cos(-aj._textRenderer.angle)/2}else{ab=-aj.getHeight()+aj._textRenderer.height*Math.cos(aj._textRenderer.angle)/2}break;case"start":if(aj.angle>0){ab=-aj._textRenderer.height*Math.cos(-aj._textRenderer.angle)/2}else{ab=-aj.getHeight()+aj._textRenderer.height*Math.cos(aj._textRenderer.angle)/2}break;case"middle":ab=-aj.getHeight()/2;break;default:ab=-aj.getHeight()/2;break}}else{ab=-aj.getHeight()/2}var at=this.u2p(aj.value)+ab+"px";aj._elem.css("top",at);aj.pack()}}if(ak){var ap=this._label._elem.outerHeight(true);this._label._elem.css("top",ai-ae/2-ap/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}ar=null};function h(ac){var ab;ac=Math.abs(ac);if(ac>=10){ab="%d"}else{if(ac>1){if(ac===parseInt(ac,10)){ab="%d"}else{ab="%.1f"}}else{var ad=-Math.floor(Math.log(ac)/Math.LN10);ab="%."+ad+"f"}}return ab}var a=[0.1,0.2,0.3,0.4,0.5,0.8,1,2,3,4,5];var b=function(ac){var ab=a.indexOf(ac);if(ab>0){return a[ab-1]}else{return a[a.length-1]/100}};var i=function(ac){var ab=a.indexOf(ac);if(ab<a.length-1){return a[ab+1]}else{return a[0]*100}};function c(af,an,am){var ak=Math.floor(am/2);var ac=Math.ceil(am*1.5);var ae=Number.MAX_VALUE;var ab=(an-af);var aq;var aj;var al;var ar=H.jqplot.getSignificantFigures;var ap;var ah;var ai;var ao;for(var ag=0,ad=ac-ak+1;ag<ad;ag++){ai=ak+ag;aq=ab/(ai-1);aj=ar(aq);aq=Math.abs(am-ai)+aj.digitsRight;if(aq<ae){ae=aq;al=ai;ao=aj.digitsRight}else{if(aq===ae){if(aj.digitsRight<ao){al=ai;ao=aj.digitsRight}}}}ap=Math.max(ao,Math.max(ar(af).digitsRight,ar(an).digitsRight));if(ap===0){ah="%d"}else{ah="%."+ap+"f"}aq=ab/(al-1);return[af,an,al,ah,aq]}function S(ac,af){af=af||7;var ae=ac/(af-1);var ad=Math.pow(10,Math.floor(Math.log(ae)/Math.LN10));var ag=ae/ad;var ab;if(ad<1){if(ag>5){ab=10*ad}else{if(ag>2){ab=5*ad}else{if(ag>1){ab=2*ad}else{ab=ad}}}}else{if(ag>5){ab=10*ad}else{if(ag>4){ab=5*ad}else{if(ag>3){ab=4*ad}else{if(ag>2){ab=3*ad}else{if(ag>1){ab=2*ad}else{ab=ad}}}}}}return ab}function M(ac,ab){ab=ab||1;var ae=Math.floor(Math.log(ac)/Math.LN10);var ag=Math.pow(10,ae);var af=ac/ag;var ad;af=af/ab;if(af<=0.38){ad=0.1}else{if(af<=1.6){ad=0.2}else{if(af<=4){ad=0.5}else{if(af<=8){ad=1}else{if(af<=16){ad=2}else{ad=5}}}}}return ad*ag}function t(ad,ac){var af=Math.floor(Math.log(ad)/Math.LN10);var ah=Math.pow(10,af);var ag=ad/ah;var ab;var ae;ag=ag/ac;if(ag<=0.38){ae=0.1}else{if(ag<=1.6){ae=0.2}else{if(ag<=4){ae=0.5}else{if(ag<=8){ae=1}else{if(ag<=16){ae=2}else{ae=5}}}}}ab=ae*ah;return[ab,ae,ah]}H.jqplot.LinearTickGenerator=function(ah,ak,ad,ae,ai,al){ai=(ai===null)?false:ai;al=(al===null||ai)?false:al;if(ah===ak){ak=(ak)?0:1}ad=ad||1;if(ak<ah){var am=ak;ak=ah;ah=am}var ac=[];var ap=M(ak-ah,ad);var ao=H.jqplot.getSignificantFigures;if(ae==null){if(!ai&&!al){ac[0]=Math.floor(ah/ap)*ap;ac[1]=Math.ceil(ak/ap)*ap;ac[2]=Math.round((ac[1]-ac[0])/ap+1);ac[3]=h(ap);ac[4]=ap}else{if(ai){ac[0]=ah;ac[2]=Math.ceil((ak-ah)/ap+1);ac[1]=ah+(ac[2]-1)*ap;var an=ao(ah).digitsRight;var aj=ao(ap).digitsRight;if(an<aj){ac[3]=h(ap)}else{ac[3]="%."+an+"f"}ac[4]=ap}else{if(al){ac[1]=ak;ac[2]=Math.ceil((ak-ah)/ap+1);ac[0]=ak-(ac[2]-1)*ap;var af=ao(ak).digitsRight;var aj=ao(ap).digitsRight;if(af<aj){ac[3]=h(ap)}else{ac[3]="%."+af+"f"}ac[4]=ap}}}}else{var ag=[];ag[0]=Math.floor(ah/ap)*ap;ag[1]=Math.ceil(ak/ap)*ap;ag[2]=Math.round((ag[1]-ag[0])/ap+1);ag[3]=h(ap);ag[4]=ap;if(ag[2]===ae){ac=ag}else{var ab=S(ag[1]-ag[0],ae);ac[0]=ag[0];ac[2]=ae;ac[4]=ab;ac[3]=h(ab);ac[1]=ac[0]+(ac[2]-1)*ac[4]}}return ac};H.jqplot.LinearTickGenerator.bestLinearInterval=M;H.jqplot.LinearTickGenerator.bestInterval=S;H.jqplot.LinearTickGenerator.bestLinearComponents=t;H.jqplot.LinearTickGenerator.bestConstrainedInterval=c;H.jqplot.MarkerRenderer=function(ab){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new H.jqplot.ShadowRenderer();this.shapeRenderer=new H.jqplot.ShapeRenderer();H.extend(true,this,ab)};H.jqplot.MarkerRenderer.prototype.init=function(ab){H.extend(true,this,ab);var ad={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){ad.fill=true}if(this.style.indexOf("ircle")!=-1){ad.isarc=true;ad.closePath=false}this.shadowRenderer.init(ad);var ac={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){ac.fill=true}if(this.style.indexOf("ircle")!=-1){ac.isarc=true;ac.closePath=false}this.shapeRenderer.init(ac)};H.jqplot.MarkerRenderer.prototype.drawDiamond=function(ad,ac,ag,af,ai){var ab=1.2;var aj=this.size/2/ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac],[ad,ac+ah],[ad+aj,ac],[ad,ac-ah]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawPlus=function(ae,ad,ah,ag,ak){var ac=1;var al=this.size/2*ac;var ai=this.size/2*ac;var aj=[[ae,ad-ai],[ae,ad+ai]];var af=[[ae+al,ad],[ae-al,ad]];var ab=H.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(ah,aj,{closePath:false});this.shadowRenderer.draw(ah,af,{closePath:false})}this.shapeRenderer.draw(ah,aj,ab);this.shapeRenderer.draw(ah,af,ab)};H.jqplot.MarkerRenderer.prototype.drawX=function(ae,ad,ah,ag,ak){var ac=1;var al=this.size/2*ac;var ai=this.size/2*ac;var ab=H.extend(true,{},this.options,{closePath:false});var aj=[[ae-al,ad-ai],[ae+al,ad+ai]];var af=[[ae-al,ad+ai],[ae+al,ad-ai]];if(this.shadow){this.shadowRenderer.draw(ah,aj,{closePath:false});this.shadowRenderer.draw(ah,af,{closePath:false})}this.shapeRenderer.draw(ah,aj,ab);this.shapeRenderer.draw(ah,af,ab)};H.jqplot.MarkerRenderer.prototype.drawDash=function(ad,ac,ag,af,ai){var ab=1;var aj=this.size/2*ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac],[ad+aj,ac]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawLine=function(ag,af,ab,ae,ac){var ad=[ag,af];if(this.shadow){this.shadowRenderer.draw(ab,ad)}this.shapeRenderer.draw(ab,ad,ac)};H.jqplot.MarkerRenderer.prototype.drawSquare=function(ad,ac,ag,af,ai){var ab=1;var aj=this.size/2/ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac-ah],[ad-aj,ac+ah],[ad+aj,ac+ah],[ad+aj,ac-ah]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawCircle=function(ac,ai,ae,ah,af){var ab=this.size/2;var ad=2*Math.PI;var ag=[ac,ai,ab,0,ad,true];if(this.shadow){this.shadowRenderer.draw(ae,ag)}this.shapeRenderer.draw(ae,ag,af)};H.jqplot.MarkerRenderer.prototype.draw=function(ab,ae,ac,ad){ad=ad||{};if(ad.show==null||ad.show!=false){if(ad.color&&!ad.fillStyle){ad.fillStyle=ad.color}if(ad.color&&!ad.strokeStyle){ad.strokeStyle=ad.color}switch(this.style){case"diamond":this.drawDiamond(ab,ae,ac,false,ad);break;case"filledDiamond":this.drawDiamond(ab,ae,ac,true,ad);break;case"circle":this.drawCircle(ab,ae,ac,false,ad);break;case"filledCircle":this.drawCircle(ab,ae,ac,true,ad);break;case"square":this.drawSquare(ab,ae,ac,false,ad);break;case"filledSquare":this.drawSquare(ab,ae,ac,true,ad);break;case"x":this.drawX(ab,ae,ac,true,ad);break;case"plus":this.drawPlus(ab,ae,ac,true,ad);break;case"dash":this.drawDash(ab,ae,ac,true,ad);break;case"line":this.drawLine(ab,ae,ac,false,ad);break;default:this.drawDiamond(ab,ae,ac,false,ad);break}}};H.jqplot.ShadowRenderer=function(ab){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.strokeStyle="rgba(0,0,0,0.1)";this.isarc=false;H.extend(true,this,ab)};H.jqplot.ShadowRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.ShadowRenderer.prototype.draw=function(ao,am,aq){ao.save();var ab=(aq!=null)?aq:{};var an=(ab.fill!=null)?ab.fill:this.fill;var aj=(ab.fillRect!=null)?ab.fillRect:this.fillRect;var ai=(ab.closePath!=null)?ab.closePath:this.closePath;var af=(ab.offset!=null)?ab.offset:this.offset;var ad=(ab.alpha!=null)?ab.alpha:this.alpha;var ah=(ab.depth!=null)?ab.depth:this.depth;var ap=(ab.isarc!=null)?ab.isarc:this.isarc;var ak=(ab.linePattern!=null)?ab.linePattern:this.linePattern;ao.lineWidth=(ab.lineWidth!=null)?ab.lineWidth:this.lineWidth;ao.lineJoin=(ab.lineJoin!=null)?ab.lineJoin:this.lineJoin;ao.lineCap=(ab.lineCap!=null)?ab.lineCap:this.lineCap;ao.strokeStyle=ab.strokeStyle||this.strokeStyle||"rgba(0,0,0,"+ad+")";ao.fillStyle=ab.fillStyle||this.fillStyle||"rgba(0,0,0,"+ad+")";for(var ae=0;ae<ah;ae++){var al=H.jqplot.LinePattern(ao,ak);ao.translate(Math.cos(this.angle*Math.PI/180)*af,Math.sin(this.angle*Math.PI/180)*af);al.beginPath();if(ap){ao.arc(am[0],am[1],am[2],am[3],am[4],true)}else{if(aj){if(aj){ao.fillRect(am[0],am[1],am[2],am[3])}}else{if(am&&am.length){var ac=true;for(var ag=0;ag<am.length;ag++){if(am[ag][0]!=null&&am[ag][1]!=null){if(ac){al.moveTo(am[ag][0],am[ag][1]);ac=false}else{al.lineTo(am[ag][0],am[ag][1])}}else{ac=true}}}}}if(ai){al.closePath()}if(an){ao.fill()}else{ao.stroke()}}ao.restore()};H.jqplot.ShapeRenderer=function(ab){this.lineWidth=1.5;this.linePattern="solid";this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";H.extend(true,this,ab)};H.jqplot.ShapeRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.ShapeRenderer.prototype.draw=function(am,ak,ao){am.save();var ab=(ao!=null)?ao:{};var al=(ab.fill!=null)?ab.fill:this.fill;var ag=(ab.closePath!=null)?ab.closePath:this.closePath;var ah=(ab.fillRect!=null)?ab.fillRect:this.fillRect;var ae=(ab.strokeRect!=null)?ab.strokeRect:this.strokeRect;var ac=(ab.clearRect!=null)?ab.clearRect:this.clearRect;var an=(ab.isarc!=null)?ab.isarc:this.isarc;var ai=(ab.linePattern!=null)?ab.linePattern:this.linePattern;var aj=H.jqplot.LinePattern(am,ai);am.lineWidth=ab.lineWidth||this.lineWidth;am.lineJoin=ab.lineJoin||this.lineJoin;am.lineCap=ab.lineCap||this.lineCap;am.strokeStyle=(ab.strokeStyle||ab.color)||this.strokeStyle;am.fillStyle=ab.fillStyle||this.fillStyle;am.beginPath();if(an){am.arc(ak[0],ak[1],ak[2],ak[3],ak[4],true);if(ag){am.closePath()}if(al){am.fill()}else{am.stroke()}am.restore();return}else{if(ac){am.clearRect(ak[0],ak[1],ak[2],ak[3]);am.restore();return}else{if(ah||ae){if(ah){am.fillRect(ak[0],ak[1],ak[2],ak[3])}if(ae){am.strokeRect(ak[0],ak[1],ak[2],ak[3]);am.restore();return}}else{if(ak&&ak.length){var ad=true;for(var af=0;af<ak.length;af++){if(ak[af][0]!=null&&ak[af][1]!=null){if(ad){aj.moveTo(ak[af][0],ak[af][1]);ad=false}else{aj.lineTo(ak[af][0],ak[af][1])}}else{ad=true}}if(ag){aj.closePath()}if(al){am.fill()}else{am.stroke()}}}}}am.restore()};H.jqplot.TableLegendRenderer=function(){};H.jqplot.TableLegendRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.TableLegendRenderer.prototype.addrow=function(ak,ae,ab,ai){var af=(ab)?this.rowSpacing+"px":"0px";var aj;var ad;var ac;var ah;var ag;ac=document.createElement("tr");aj=H(ac);aj.addClass("jqplot-table-legend");ac=null;if(ai){aj.prependTo(this._elem)}else{aj.appendTo(this._elem)}if(this.showSwatches){ad=H(document.createElement("td"));ad.addClass("jqplot-table-legend jqplot-table-legend-swatch");ad.css({textAlign:"center",paddingTop:af});ah=H(document.createElement("div"));ah.addClass("jqplot-table-legend-swatch-outline");ag=H(document.createElement("div"));ag.addClass("jqplot-table-legend-swatch");ag.css({backgroundColor:ae,borderColor:ae});aj.append(ad.append(ah.append(ag)))}if(this.showLabels){ad=H(document.createElement("td"));ad.addClass("jqplot-table-legend jqplot-table-legend-label");ad.css("paddingTop",af);aj.append(ad);if(this.escapeHtml){ad.text(ak)}else{ad.html(ak)}}ad=null;ah=null;ag=null;aj=null;ac=null};H.jqplot.TableLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var ag=this._series;var ac=document.createElement("table");this._elem=H(ac);this._elem.addClass("jqplot-table-legend");var al={position:"absolute"};if(this.background){al.background=this.background}if(this.border){al.border=this.border}if(this.fontSize){al.fontSize=this.fontSize}if(this.fontFamily){al.fontFamily=this.fontFamily}if(this.textColor){al.textColor=this.textColor}if(this.marginTop!=null){al.marginTop=this.marginTop}if(this.marginBottom!=null){al.marginBottom=this.marginBottom}if(this.marginLeft!=null){al.marginLeft=this.marginLeft}if(this.marginRight!=null){al.marginRight=this.marginRight}var ab=false,ai=false,ak;for(var ah=0;ah<ag.length;ah++){ak=ag[ah];if(ak._stack||ak.renderer.constructor==H.jqplot.BezierCurveRenderer){ai=true}if(ak.show&&ak.showLabel){var af=this.labels[ah]||ak.label.toString();if(af){var ad=ak.color;if(ai&&ah<ag.length-1){ab=true}else{if(ai&&ah==ag.length-1){ab=false}}this.renderer.addrow.call(this,af,ad,ab,ai);ab=true}for(var ae=0;ae<H.jqplot.addLegendRowHooks.length;ae++){var aj=H.jqplot.addLegendRowHooks[ae].call(this,ak);if(aj){this.renderer.addrow.call(this,aj.label,aj.color,ab);ab=true}}af=null}}}return this._elem};H.jqplot.TableLegendRenderer.prototype.pack=function(ad){if(this.show){if(this.placement=="insideGrid"){switch(this.location){case"nw":var ac=ad.left;var ab=ad.top;this._elem.css("left",ac);this._elem.css("top",ab);break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=ad.top;this._elem.css("left",ac);this._elem.css("top",ab);break;case"ne":var ac=ad.right;var ab=ad.top;this._elem.css({right:ac,top:ab});break;case"e":var ac=ad.right;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ac,top:ab});break;case"se":var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"sw":var ac=ad.left;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"w":var ac=ad.left;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ac,top:ab});break;default:var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break}}else{if(this.placement=="outside"){switch(this.location){case"nw":var ac=this._plotDimensions.width-ad.left;var ab=ad.top;this._elem.css("right",ac);this._elem.css("top",ab);break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=this._plotDimensions.height-ad.top;this._elem.css("left",ac);this._elem.css("bottom",ab);break;case"ne":var ac=this._plotDimensions.width-ad.right;var ab=ad.top;this._elem.css({left:ac,top:ab});break;case"e":var ac=this._plotDimensions.width-ad.right;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ac,top:ab});break;case"se":var ac=this._plotDimensions.width-ad.right;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=this._plotDimensions.height-ad.bottom;this._elem.css({left:ac,top:ab});break;case"sw":var ac=this._plotDimensions.width-ad.left;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break;case"w":var ac=this._plotDimensions.width-ad.left;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ac,top:ab});break;default:var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break}}else{switch(this.location){case"nw":this._elem.css({left:0,top:ad.top});break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;this._elem.css({left:ac,top:ad.top});break;case"ne":this._elem.css({right:0,top:ad.top});break;case"e":var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ad.right,top:ab});break;case"se":this._elem.css({right:ad.right,bottom:ad.bottom});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;this._elem.css({left:ac,bottom:ad.bottom});break;case"sw":this._elem.css({left:ad.left,bottom:ad.bottom});break;case"w":var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ad.left,top:ab});break;default:this._elem.css({right:ad.right,bottom:ad.bottom});break}}}}};H.jqplot.ThemeEngine=function(){this.themes={};this.activeTheme=null};H.jqplot.ThemeEngine.prototype.init=function(){var ae=new H.jqplot.Theme({_name:"Default"});var ah,ac,ag;for(ah in ae.target){if(ah=="textColor"){ae.target[ah]=this.target.css("color")}else{ae.target[ah]=this.target.css(ah)}}if(this.title.show&&this.title._elem){for(ah in ae.title){if(ah=="textColor"){ae.title[ah]=this.title._elem.css("color")}else{ae.title[ah]=this.title._elem.css(ah)}}}for(ah in ae.grid){ae.grid[ah]=this.grid[ah]}if(ae.grid.backgroundColor==null&&this.grid.background!=null){ae.grid.backgroundColor=this.grid.background}if(this.legend.show&&this.legend._elem){for(ah in ae.legend){if(ah=="textColor"){ae.legend[ah]=this.legend._elem.css("color")}else{ae.legend[ah]=this.legend._elem.css(ah)}}}var ad;for(ac=0;ac<this.series.length;ac++){ad=this.series[ac];if(ad.renderer.constructor==H.jqplot.LineRenderer){ae.series.push(new m())}else{if(ad.renderer.constructor==H.jqplot.BarRenderer){ae.series.push(new P())}else{if(ad.renderer.constructor==H.jqplot.PieRenderer){ae.series.push(new e())}else{if(ad.renderer.constructor==H.jqplot.DonutRenderer){ae.series.push(new C())}else{if(ad.renderer.constructor==H.jqplot.FunnelRenderer){ae.series.push(new U())}else{if(ad.renderer.constructor==H.jqplot.MeterGaugeRenderer){ae.series.push(new z())}else{ae.series.push({})}}}}}}for(ah in ae.series[ac]){ae.series[ac][ah]=ad[ah]}}var ab,af;for(ah in this.axes){af=this.axes[ah];ab=ae.axes[ah]=new L();ab.borderColor=af.borderColor;ab.borderWidth=af.borderWidth;if(af._ticks&&af._ticks[0]){for(ag in ab.ticks){if(af._ticks[0].hasOwnProperty(ag)){ab.ticks[ag]=af._ticks[0][ag]}else{if(af._ticks[0]._elem){ab.ticks[ag]=af._ticks[0]._elem.css(ag)}}}}if(af._label&&af._label.show){for(ag in ab.label){if(af._label[ag]){ab.label[ag]=af._label[ag]}else{if(af._label._elem){if(ag=="textColor"){ab.label[ag]=af._label._elem.css("color")}else{ab.label[ag]=af._label._elem.css(ag)}}}}}}this.themeEngine._add(ae);this.themeEngine.activeTheme=this.themeEngine.themes[ae._name]};H.jqplot.ThemeEngine.prototype.get=function(ab){if(!ab){return this.activeTheme}else{return this.themes[ab]}};function K(ac,ab){return ac-ab}H.jqplot.ThemeEngine.prototype.getThemeNames=function(){var ab=[];for(var ac in this.themes){ab.push(ac)}return ab.sort(K)};H.jqplot.ThemeEngine.prototype.getThemes=function(){var ac=[];var ab=[];for(var ae in this.themes){ac.push(ae)}ac.sort(K);for(var ad=0;ad<ac.length;ad++){ab.push(this.themes[ac[ad]])}return ab};H.jqplot.ThemeEngine.prototype.activate=function(ao,au){var ab=false;if(!au&&this.activeTheme&&this.activeTheme._name){au=this.activeTheme._name}if(!this.themes.hasOwnProperty(au)){throw new Error("No theme of that name")}else{var ag=this.themes[au];this.activeTheme=ag;var at,am=false,al=false;var ac=["xaxis","x2axis","yaxis","y2axis"];for(ap=0;ap<ac.length;ap++){var ah=ac[ap];if(ag.axesStyles.borderColor!=null){ao.axes[ah].borderColor=ag.axesStyles.borderColor}if(ag.axesStyles.borderWidth!=null){ao.axes[ah].borderWidth=ag.axesStyles.borderWidth}}for(var ar in ao.axes){var ae=ao.axes[ar];if(ae.show){var ak=ag.axes[ar]||{};var ai=ag.axesStyles;var af=H.jqplot.extend(true,{},ak,ai);at=(ag.axesStyles.borderColor!=null)?ag.axesStyles.borderColor:af.borderColor;if(af.borderColor!=null){ae.borderColor=af.borderColor;ab=true}at=(ag.axesStyles.borderWidth!=null)?ag.axesStyles.borderWidth:af.borderWidth;if(af.borderWidth!=null){ae.borderWidth=af.borderWidth;ab=true}if(ae._ticks&&ae._ticks[0]){for(var ad in af.ticks){at=af.ticks[ad];if(at!=null){ae.tickOptions[ad]=at;ae._ticks=[];ab=true}}}if(ae._label&&ae._label.show){for(var ad in af.label){at=af.label[ad];if(at!=null){ae.labelOptions[ad]=at;ab=true}}}}}for(var an in ag.grid){if(ag.grid[an]!=null){ao.grid[an]=ag.grid[an]}}if(!ab){ao.grid.draw()}if(ao.legend.show){for(an in ag.legend){if(ag.legend[an]!=null){ao.legend[an]=ag.legend[an]}}}if(ao.title.show){for(an in ag.title){if(ag.title[an]!=null){ao.title[an]=ag.title[an]}}}var ap;for(ap=0;ap<ag.series.length;ap++){var aj={};var aq=false;for(an in ag.series[ap]){at=(ag.seriesStyles[an]!=null)?ag.seriesStyles[an]:ag.series[ap][an];if(at!=null){aj[an]=at;if(an=="color"){ao.series[ap].renderer.shapeRenderer.fillStyle=at;ao.series[ap].renderer.shapeRenderer.strokeStyle=at;ao.series[ap][an]=at}else{if((an=="lineWidth")||(an=="linePattern")){ao.series[ap].renderer.shapeRenderer[an]=at;ao.series[ap][an]=at}else{if(an=="markerOptions"){R(ao.series[ap].markerOptions,at);R(ao.series[ap].markerRenderer,at)}else{ao.series[ap][an]=at}}}ab=true}}}if(ab){ao.target.empty();ao.draw()}for(an in ag.target){if(ag.target[an]!=null){ao.target.css(an,ag.target[an])}}}};H.jqplot.ThemeEngine.prototype._add=function(ac,ab){if(ab){ac._name=ab}if(!ac._name){ac._name=Date.parse(new Date())}if(!this.themes.hasOwnProperty(ac._name)){this.themes[ac._name]=ac}else{throw new Error("jqplot.ThemeEngine Error: Theme already in use")}};H.jqplot.ThemeEngine.prototype.remove=function(ab){if(ab=="Default"){return false}return delete this.themes[ab]};H.jqplot.ThemeEngine.prototype.newTheme=function(ab,ad){if(typeof(ab)=="object"){ad=ad||ab;ab=null}if(ad&&ad._name){ab=ad._name}else{ab=ab||Date.parse(new Date())}var ac=this.copy(this.themes.Default._name,ab);H.jqplot.extend(ac,ad);return ac};function x(ad){if(ad==null||typeof(ad)!="object"){return ad}var ab=new ad.constructor();for(var ac in ad){ab[ac]=x(ad[ac])}return ab}H.jqplot.clone=x;function R(ad,ac){if(ac==null||typeof(ac)!="object"){return}for(var ab in ac){if(ab=="highlightColors"){ad[ab]=x(ac[ab])}if(ac[ab]!=null&&typeof(ac[ab])=="object"){if(!ad.hasOwnProperty(ab)){ad[ab]={}}R(ad[ab],ac[ab])}else{ad[ab]=ac[ab]}}}H.jqplot.merge=R;H.jqplot.extend=function(){var ag=arguments[0]||{},ae=1,af=arguments.length,ab=false,ad;if(typeof ag==="boolean"){ab=ag;ag=arguments[1]||{};ae=2}if(typeof ag!=="object"&&!toString.call(ag)==="[object Function]"){ag={}}for(;ae<af;ae++){if((ad=arguments[ae])!=null){for(var ac in ad){var ah=ag[ac],ai=ad[ac];if(ag===ai){continue}if(ab&&ai&&typeof ai==="object"&&!ai.nodeType){ag[ac]=H.jqplot.extend(ab,ah||(ai.length!=null?[]:{}),ai)}else{if(ai!==r){ag[ac]=ai}}}}}return ag};H.jqplot.ThemeEngine.prototype.rename=function(ac,ab){if(ac=="Default"||ab=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot rename from/to Default")}if(this.themes.hasOwnProperty(ab)){throw new Error("jqplot.ThemeEngine Error: New name already in use.")}else{if(this.themes.hasOwnProperty(ac)){var ad=this.copy(ac,ab);this.remove(ac);return ad}}throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid")};H.jqplot.ThemeEngine.prototype.copy=function(ab,ad,af){if(ad=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot copy over Default theme")}if(!this.themes.hasOwnProperty(ab)){var ac="jqplot.ThemeEngine Error: Source name invalid";throw new Error(ac)}if(this.themes.hasOwnProperty(ad)){var ac="jqplot.ThemeEngine Error: Target name invalid";throw new Error(ac)}else{var ae=x(this.themes[ab]);ae._name=ad;H.jqplot.extend(true,ae,af);this._add(ae);return ae}};H.jqplot.Theme=function(ab,ac){if(typeof(ab)=="object"){ac=ac||ab;ab=null}ab=ab||Date.parse(new Date());this._name=ab;this.target={backgroundColor:null};this.legend={textColor:null,fontFamily:null,fontSize:null,border:null,background:null};this.title={textColor:null,fontFamily:null,fontSize:null,textAlign:null};this.seriesStyles={};this.series=[];this.grid={drawGridlines:null,gridLineColor:null,gridLineWidth:null,backgroundColor:null,borderColor:null,borderWidth:null,shadow:null};this.axesStyles={label:{},ticks:{}};this.axes={};if(typeof(ac)=="string"){this._name=ac}else{if(typeof(ac)=="object"){H.jqplot.extend(true,this,ac)}}};var L=function(){this.borderColor=null;this.borderWidth=null;this.ticks=new l();this.label=new q()};var l=function(){this.show=null;this.showGridline=null;this.showLabel=null;this.showMark=null;this.size=null;this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null};var q=function(){this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null;this.fontWeight=null};var m=function(){this.color=null;this.lineWidth=null;this.linePattern=null;this.shadow=null;this.fillColor=null;this.showMarker=null;this.markerOptions=new E()};var E=function(){this.show=null;this.style=null;this.lineWidth=null;this.size=null;this.color=null;this.shadow=null};var P=function(){this.color=null;this.seriesColors=null;this.lineWidth=null;this.shadow=null;this.barPadding=null;this.barMargin=null;this.barWidth=null;this.highlightColors=null};var e=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.highlightColors=null};var C=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.innerDiameter=null;this.thickness=null;this.ringMargin=null;this.highlightColors=null};var U=function(){this.color=null;this.lineWidth=null;this.shadow=null;this.padding=null;this.sectionMargin=null;this.seriesColors=null;this.highlightColors=null};var z=function(){this.padding=null;this.backgroundColor=null;this.ringColor=null;this.tickColor=null;this.ringWidth=null;this.intervalColors=null;this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.hubRadius=null;this.needleThickness=null;this.needlePad=null};H.fn.jqplotChildText=function(){return H(this).contents().filter(function(){return this.nodeType==3}).text()};H.fn.jqplotGetComputedFontStyle=function(){var ae=window.getComputedStyle?window.getComputedStyle(this[0],""):this[0].currentStyle;var ac=ae["font-style"]?["font-style","font-weight","font-size","font-family"]:["fontStyle","fontWeight","fontSize","fontFamily"];var af=[];for(var ad=0;ad<ac.length;++ad){var ab=String(ae[ac[ad]]);if(ab&&ab!="normal"){af.push(ab)}}return af.join(" ")};H.fn.jqplotToImageCanvas=function(ad){ad=ad||{};var ao=(ad.x_offset==null)?0:ad.x_offset;var aq=(ad.y_offset==null)?0:ad.y_offset;var af=(ad.backgroundColor==null)?"rgb(255,255,255)":ad.backgroundColor;if(H(this).width()==0||H(this).height()==0){return null}if(H.jqplot.use_excanvas){return null}var ah=document.createElement("canvas");var au=H(this).outerHeight(true);var am=H(this).outerWidth(true);var ag=H(this).offset();var ai=ag.left;var ak=ag.top;var an=0,al=0;var ar=["jqplot-table-legend","jqplot-xaxis-tick","jqplot-x2axis-tick","jqplot-yaxis-tick","jqplot-y2axis-tick","jqplot-y3axis-tick","jqplot-y4axis-tick","jqplot-y5axis-tick","jqplot-y6axis-tick","jqplot-y7axis-tick","jqplot-y8axis-tick","jqplot-y9axis-tick","jqplot-xaxis-label","jqplot-x2axis-label","jqplot-yaxis-label","jqplot-y2axis-label","jqplot-y3axis-label","jqplot-y4axis-label","jqplot-y5axis-label","jqplot-y6axis-label","jqplot-y7axis-label","jqplot-y8axis-label","jqplot-y9axis-label"];var aj,ab,ac,av;for(var at=0;at<ar.length;at++){H(this).find("."+ar[at]).each(function(){aj=H(this).offset().top-ak;ab=H(this).offset().left-ai;av=ab+H(this).outerWidth(true)+an;ac=aj+H(this).outerHeight(true)+al;if(ab<-an){am=am-an-ab;an=-ab}if(aj<-al){au=au-al-aj;al=-aj}if(av>am){am=av}if(ac>au){au=ac}})}ah.width=am+Number(ao);ah.height=au+Number(aq);var ae=ah.getContext("2d");ae.save();ae.fillStyle=af;ae.fillRect(0,0,ah.width,ah.height);ae.restore();ae.translate(an,al);ae.textAlign="left";ae.textBaseline="top";function aw(ay){var az=parseInt(H(ay).css("line-height"),10);if(isNaN(az)){az=parseInt(H(ay).css("font-size"),10)*1.2}return az}function ax(az,ay,aM,aA,aI,aB){var aK=aw(az);var aE=H(az).innerWidth();var aF=H(az).innerHeight();var aH=aM.split(/\s+/);var aL=aH.length;var aJ="";var aG=[];var aO=aI;var aN=aA;for(var aD=0;aD<aL;aD++){aJ+=aH[aD];if(ay.measureText(aJ).width>aE){aG.push(aD);aJ="";aD--}}if(aG.length===0){if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aM,aN,aI)}else{aJ=aH.slice(0,aG[0]).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO);aO+=aK;for(var aD=1,aC=aG.length;aD<aC;aD++){aJ=aH.slice(aG[aD-1],aG[aD]).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO);aO+=aK}aJ=aH.slice(aG[aD-1],aH.length).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO)}}function ap(aA,aD,ay){var aH=aA.tagName.toLowerCase();var az=H(aA).position();var aE=window.getComputedStyle?window.getComputedStyle(aA,""):aA.currentStyle;var aC=aD+az.left+parseInt(aE.marginLeft,10)+parseInt(aE.borderLeftWidth,10)+parseInt(aE.paddingLeft,10);var aF=ay+az.top+parseInt(aE.marginTop,10)+parseInt(aE.borderTopWidth,10)+parseInt(aE.paddingTop,10);var aG=ah.width;if((aH=="div"||aH=="span")&&!H(aA).hasClass("jqplot-highlighter-tooltip")){H(aA).children().each(function(){ap(this,aC,aF)});var aI=H(aA).jqplotChildText();if(aI){ae.font=H(aA).jqplotGetComputedFontStyle();ae.fillStyle=H(aA).css("color");ax(aA,ae,aI,aC,aF,aG)}}else{if(aH==="table"&&H(aA).hasClass("jqplot-table-legend")){ae.strokeStyle=H(aA).css("border-top-color");ae.fillStyle=H(aA).css("background-color");ae.fillRect(aC,aF,H(aA).innerWidth(),H(aA).innerHeight());if(parseInt(H(aA).css("border-top-width"),10)>0){ae.strokeRect(aC,aF,H(aA).innerWidth(),H(aA).innerHeight())}H(aA).find("div.jqplot-table-legend-swatch-outline").each(function(){var aO=H(this);ae.strokeStyle=aO.css("border-top-color");var aK=aC+aO.position().left;var aL=aF+aO.position().top;ae.strokeRect(aK,aL,aO.innerWidth(),aO.innerHeight());aK+=parseInt(aO.css("padding-left"),10);aL+=parseInt(aO.css("padding-top"),10);var aN=aO.innerHeight()-2*parseInt(aO.css("padding-top"),10);var aJ=aO.innerWidth()-2*parseInt(aO.css("padding-left"),10);var aM=aO.children("div.jqplot-table-legend-swatch");ae.fillStyle=aM.css("background-color");ae.fillRect(aK,aL,aJ,aN)});H(aA).find("td.jqplot-table-legend-label").each(function(){var aL=H(this);var aJ=aC+aL.position().left;var aK=aF+aL.position().top+parseInt(aL.css("padding-top"),10);ae.font=aL.jqplotGetComputedFontStyle();ae.fillStyle=aL.css("color");ax(aL,ae,aL.text(),aJ,aK,aG)});var aB=null}else{if(aH=="canvas"){ae.drawImage(aA,aC,aF)}}}}H(this).children().each(function(){ap(this,ao,aq)});return ah};H.fn.jqplotToImageStr=function(ac){var ab=H(this).jqplotToImageCanvas(ac);if(ab){return ab.toDataURL("image/png")}else{return null}};H.fn.jqplotToImageElem=function(ab){var ac=document.createElement("img");var ad=H(this).jqplotToImageStr(ab);ac.src=ad;return ac};H.fn.jqplotToImageElemStr=function(ab){var ac="<img src="+H(this).jqplotToImageStr(ab)+" />";return ac};H.fn.jqplotSaveImage=function(){var ab=H(this).jqplotToImageStr({});if(ab){window.location.href=ab.replace("image/png","image/octet-stream")}};H.fn.jqplotViewImage=function(){var ac=H(this).jqplotToImageElemStr({});var ad=H(this).jqplotToImageStr({});if(ac){var ab=window.open("");ab.document.open("image/png");ab.document.write(ac);ab.document.close();ab=null}};var aa=function(){this.syntax=aa.config.syntax;this._type="jsDate";this.proxy=new Date();this.options={};this.locale=aa.regional.getLocale();this.formatString="";this.defaultCentury=aa.config.defaultCentury;switch(arguments.length){case 0:break;case 1:if(j(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ad=this.options=arguments[0];this.syntax=ad.syntax||this.syntax;this.defaultCentury=ad.defaultCentury||this.defaultCentury;this.proxy=aa.createDate(ad.date)}else{this.proxy=aa.createDate(arguments[0])}break;default:var ab=[];for(var ac=0;ac<arguments.length;ac++){ab.push(arguments[ac])}this.proxy=new Date();this.proxy.setFullYear.apply(this.proxy,ab.slice(0,3));if(ab.slice(3).length){this.proxy.setHours.apply(this.proxy,ab.slice(3))}break}};aa.config={defaultLocale:"en",syntax:"perl",defaultCentury:1900};aa.prototype.add=function(ad,ac){var ab=A[ac]||A.day;if(typeof ab=="number"){this.proxy.setTime(this.proxy.getTime()+(ab*ad))}else{ab.add(this,ad)}return this};aa.prototype.clone=function(){return new aa(this.proxy.getTime())};aa.prototype.getUtcOffset=function(){return this.proxy.getTimezoneOffset()*60000};aa.prototype.diff=function(ac,af,ab){ac=new aa(ac);if(ac===null){return null}var ad=A[af]||A.day;if(typeof ad=="number"){var ae=(this.proxy.getTime()-ac.proxy.getTime())/ad}else{var ae=ad.diff(this.proxy,ac.proxy)}return(ab?ae:Math[ae>0?"floor":"ceil"](ae))};aa.prototype.getAbbrDayName=function(){return aa.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]};aa.prototype.getAbbrMonthName=function(){return aa.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]};aa.prototype.getAMPM=function(){return this.proxy.getHours()>=12?"PM":"AM"};aa.prototype.getAmPm=function(){return this.proxy.getHours()>=12?"pm":"am"};aa.prototype.getCentury=function(){return parseInt(this.proxy.getFullYear()/100,10)};aa.prototype.getDate=function(){return this.proxy.getDate()};aa.prototype.getDay=function(){return this.proxy.getDay()};aa.prototype.getDayOfWeek=function(){var ab=this.proxy.getDay();return ab===0?7:ab};aa.prototype.getDayOfYear=function(){var ac=this.proxy;var ab=ac-new Date(""+ac.getFullYear()+"/1/1 GMT");ab+=ac.getTimezoneOffset()*60000;ac=null;return parseInt(ab/60000/60/24,10)+1};aa.prototype.getDayName=function(){return aa.regional[this.locale]["dayNames"][this.proxy.getDay()]};aa.prototype.getFullWeekOfYear=function(){var ae=this.proxy;var ab=this.getDayOfYear();var ad=6-ae.getDay();var ac=parseInt((ab+ad)/7,10);return ac};aa.prototype.getFullYear=function(){return this.proxy.getFullYear()};aa.prototype.getGmtOffset=function(){var ab=this.proxy.getTimezoneOffset()/60;var ac=ab<0?"+":"-";ab=Math.abs(ab);return ac+J(Math.floor(ab),2)+":"+J((ab%1)*60,2)};aa.prototype.getHours=function(){return this.proxy.getHours()};aa.prototype.getHours12=function(){var ab=this.proxy.getHours();return ab>12?ab-12:(ab==0?12:ab)};aa.prototype.getIsoWeek=function(){var ae=this.proxy;var ad=ae.getWeekOfYear();var ab=(new Date(""+ae.getFullYear()+"/1/1")).getDay();var ac=ad+(ab>4||ab<=1?0:1);if(ac==53&&(new Date(""+ae.getFullYear()+"/12/31")).getDay()<4){ac=1}else{if(ac===0){ae=new aa(new Date(""+(ae.getFullYear()-1)+"/12/31"));ac=ae.getIsoWeek()}}ae=null;return ac};aa.prototype.getMilliseconds=function(){return this.proxy.getMilliseconds()};aa.prototype.getMinutes=function(){return this.proxy.getMinutes()};aa.prototype.getMonth=function(){return this.proxy.getMonth()};aa.prototype.getMonthName=function(){return aa.regional[this.locale]["monthNames"][this.proxy.getMonth()]};aa.prototype.getMonthNumber=function(){return this.proxy.getMonth()+1};aa.prototype.getSeconds=function(){return this.proxy.getSeconds()};aa.prototype.getShortYear=function(){return this.proxy.getYear()%100};aa.prototype.getTime=function(){return this.proxy.getTime()};aa.prototype.getTimezoneAbbr=function(){return this.proxy.toString().replace(/^.*\(([^)]+)\)$/,"$1")};aa.prototype.getTimezoneName=function(){var ab=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return ab[1]||ab[2]||"GMT"+this.getGmtOffset()};aa.prototype.getTimezoneOffset=function(){return this.proxy.getTimezoneOffset()};aa.prototype.getWeekOfYear=function(){var ab=this.getDayOfYear();var ad=7-this.getDayOfWeek();var ac=parseInt((ab+ad)/7,10);return ac};aa.prototype.getUnix=function(){return Math.round(this.proxy.getTime()/1000,0)};aa.prototype.getYear=function(){return this.proxy.getYear()};aa.prototype.next=function(ab){ab=ab||"day";return this.clone().add(1,ab)};aa.prototype.set=function(){switch(arguments.length){case 0:this.proxy=new Date();break;case 1:if(j(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ad=this.options=arguments[0];this.syntax=ad.syntax||this.syntax;this.defaultCentury=ad.defaultCentury||this.defaultCentury;this.proxy=aa.createDate(ad.date)}else{this.proxy=aa.createDate(arguments[0])}break;default:var ab=[];for(var ac=0;ac<arguments.length;ac++){ab.push(arguments[ac])}this.proxy=new Date();this.proxy.setFullYear.apply(this.proxy,ab.slice(0,3));if(ab.slice(3).length){this.proxy.setHours.apply(this.proxy,ab.slice(3))}break}return this};aa.prototype.setDate=function(ab){this.proxy.setDate(ab);return this};aa.prototype.setFullYear=function(){this.proxy.setFullYear.apply(this.proxy,arguments);return this};aa.prototype.setHours=function(){this.proxy.setHours.apply(this.proxy,arguments);return this};aa.prototype.setMilliseconds=function(ab){this.proxy.setMilliseconds(ab);return this};aa.prototype.setMinutes=function(){this.proxy.setMinutes.apply(this.proxy,arguments);return this};aa.prototype.setMonth=function(){this.proxy.setMonth.apply(this.proxy,arguments);return this};aa.prototype.setSeconds=function(){this.proxy.setSeconds.apply(this.proxy,arguments);return this};aa.prototype.setTime=function(ab){this.proxy.setTime(ab);return this};aa.prototype.setYear=function(){this.proxy.setYear.apply(this.proxy,arguments);return this};aa.prototype.strftime=function(ab){ab=ab||this.formatString||aa.regional[this.locale]["formatString"];return aa.strftime(this,ab,this.syntax)};aa.prototype.toString=function(){return this.proxy.toString()};aa.prototype.toYmdInt=function(){return(this.proxy.getFullYear()*10000)+(this.getMonthNumber()*100)+this.proxy.getDate()};aa.regional={en:{monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],formatString:"%Y-%m-%d %H:%M:%S"},fr:{monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],formatString:"%Y-%m-%d %H:%M:%S"},de:{monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],formatString:"%Y-%m-%d %H:%M:%S"},es:{monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mié","Juv","Vie","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"},ru:{monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],formatString:"%Y-%m-%d %H:%M:%S"},ar:{monthNames:["كانون الثاني","شباط","آذار","نيسان","آذار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["السبت","الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"],dayNamesShort:["سبت","أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة"],formatString:"%Y-%m-%d %H:%M:%S"},pt:{monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"},"pt-BR":{monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"}};aa.regional["en-US"]=aa.regional["en-GB"]=aa.regional.en;aa.regional.getLocale=function(){var ab=aa.config.defaultLocale;if(document&&document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang){ab=document.getElementsByTagName("html")[0].lang;if(!aa.regional.hasOwnProperty(ab)){ab=aa.config.defaultLocale}}return ab};var y=24*60*60*1000;var J=function(ab,ae){ab=String(ab);var ac=ae-ab.length;var ad=String(Math.pow(10,ac)).slice(1);return ad.concat(ab)};var A={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:y,week:7*y,month:{add:function(ad,ab){A.year.add(ad,Math[ab>0?"floor":"ceil"](ab/12));var ac=ad.getMonth()+(ab%12);if(ac==12){ac=0;ad.setYear(ad.getFullYear()+1)}else{if(ac==-1){ac=11;ad.setYear(ad.getFullYear()-1)}}ad.setMonth(ac)},diff:function(af,ad){var ab=af.getFullYear()-ad.getFullYear();var ac=af.getMonth()-ad.getMonth()+(ab*12);var ae=af.getDate()-ad.getDate();return ac+(ae/30)}},year:{add:function(ac,ab){ac.setYear(ac.getFullYear()+Math[ab>0?"floor":"ceil"](ab))},diff:function(ac,ab){return A.month.diff(ac,ab)/12}}};for(var T in A){if(T.substring(T.length-1)!="s"){A[T+"s"]=A[T]}}var D=function(af,ae,ac){if(aa.formats[ac]["shortcuts"][ae]){return aa.strftime(af,aa.formats[ac]["shortcuts"][ae],ac)}else{var ab=(aa.formats[ac]["codes"][ae]||"").split(".");var ad=af["get"+ab[0]]?af["get"+ab[0]]():"";if(ab[1]){ad=J(ad,ab[1])}return ad}};aa.strftime=function(ah,ae,ad,ai){var ac="perl";var ag=aa.regional.getLocale();if(ad&&aa.formats.hasOwnProperty(ad)){ac=ad}else{if(ad&&aa.regional.hasOwnProperty(ad)){ag=ad}}if(ai&&aa.formats.hasOwnProperty(ai)){ac=ai}else{if(ai&&aa.regional.hasOwnProperty(ai)){ag=ai}}if(j(ah)!="[object Object]"||ah._type!="jsDate"){ah=new aa(ah);ah.locale=ag}if(!ae){ae=ah.formatString||aa.regional[ag]["formatString"]}var ab=ae||"%Y-%m-%d",aj="",af;while(ab.length>0){if(af=ab.match(aa.formats[ac].codes.matcher)){aj+=ab.slice(0,af.index);aj+=(af[1]||"")+D(ah,af[2],ac);ab=ab.slice(af.index+af[0].length)}else{aj+=ab;ab=""}}return aj};aa.formats={ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S"};aa.formats.perl={codes:{matcher:/()%(#?(%|[a-z]))/i,Y:"FullYear",y:"ShortYear.2",m:"MonthNumber.2","#m":"MonthNumber",B:"MonthName",b:"AbbrMonthName",d:"Date.2","#d":"Date",e:"Date",A:"DayName",a:"AbbrDayName",w:"Day",H:"Hours.2","#H":"Hours",I:"Hours12.2","#I":"Hours12",p:"AMPM",M:"Minutes.2","#M":"Minutes",S:"Seconds.2","#S":"Seconds",s:"Unix",N:"Milliseconds.3","#N":"Milliseconds",O:"TimezoneOffset",Z:"TimezoneName",G:"GmtOffset"},shortcuts:{F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",D:"%m/%d/%y","#c":"%a %b %e %H:%M:%S %Y",v:"%e-%b-%Y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"}};aa.formats.php={codes:{matcher:/()%((%|[a-z]))/i,a:"AbbrDayName",A:"DayName",d:"Date.2",e:"Date",j:"DayOfYear.3",u:"DayOfWeek",w:"Day",U:"FullWeekOfYear.2",V:"IsoWeek.2",W:"WeekOfYear.2",b:"AbbrMonthName",B:"MonthName",m:"MonthNumber.2",h:"AbbrMonthName",C:"Century.2",y:"ShortYear.2",Y:"FullYear",H:"Hours.2",I:"Hours12.2",l:"Hours12",p:"AMPM",P:"AmPm",M:"Minutes.2",S:"Seconds.2",s:"Unix",O:"TimezoneOffset",z:"GmtOffset",Z:"TimezoneAbbr"},shortcuts:{D:"%m/%d/%y",F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"}};aa.createDate=function(ad){if(ad==null){return new Date()}if(ad instanceof Date){return ad}if(typeof ad=="number"){return new Date(ad)}var ai=String(ad).replace(/^\s*(.+)\s*$/g,"$1");ai=ai.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/,"$1/$2/$3");ai=ai.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i,"$1 $2 $3");var ah=ai.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);if(ah&&ah.length>3){var am=parseFloat(ah[3]);var ag=aa.config.defaultCentury+am;ag=String(ag);ai=ai.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i,ah[1]+" "+ah[2]+" "+ag)}ah=ai.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);function al(aq,ap){var aw=parseFloat(ap[1]);var av=parseFloat(ap[2]);var au=parseFloat(ap[3]);var at=aa.config.defaultCentury;var ao,an,ax,ar;if(aw>31){an=au;ax=av;ao=at+aw}else{an=av;ax=aw;ao=at+au}ar=ax+"/"+an+"/"+ao;return aq.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/,ar)}if(ah&&ah.length>3){ai=al(ai,ah)}var ah=ai.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);if(ah&&ah.length>3){ai=al(ai,ah)}var af=0;var ac=aa.matchers.length;var ak,ab,aj=ai,ae;while(af<ac){ab=Date.parse(aj);if(!isNaN(ab)){return new Date(ab)}ak=aa.matchers[af];if(typeof ak=="function"){ae=ak.call(aa,aj);if(ae instanceof Date){return ae}}else{aj=ai.replace(ak[0],ak[1])}af++}return NaN};aa.daysInMonth=function(ab,ac){if(ac==2){return new Date(ab,1,29).getDate()==29?29:28}return[r,31,r,31,30,31,30,31,31,30,31,30,31][ac]};aa.matchers=[[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(ae){var ac=ae.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(ac){if(ac[1]){var ad=this.createDate(ac[1]);if(isNaN(ad)){return}}else{var ad=new Date();ad.setMilliseconds(0)}var ab=parseFloat(ac[2]);if(ac[6]){ab=ac[6].toLowerCase()=="am"?(ab==12?0:ab):(ab==12?12:ab+12)}ad.setHours(ab,parseInt(ac[3]||0,10),parseInt(ac[4]||0,10),((parseFloat(ac[5]||0))||0)*1000);return ad}else{return ae}},function(ae){var ac=ae.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(ac){if(ac[1]){var ad=this.createDate(ac[1]);if(isNaN(ad)){return}}else{var ad=new Date();ad.setMilliseconds(0)}var ab=parseFloat(ac[2]);ad.setHours(ab,parseInt(ac[3],10),parseInt(ac[4],10),parseFloat(ac[5])*1000);return ad}else{return ae}},function(af){var ad=af.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(ad){var ae=new Date();var ag=aa.config.defaultCentury;var ai=parseFloat(ad[1]);var ah=parseFloat(ad[3]);var ac,ab,aj;if(ai>31){ab=ah;ac=ag+ai}else{ab=ai;ac=ag+ah}var aj=W(ad[2],aa.regional[aa.regional.getLocale()]["monthNamesShort"]);if(aj==-1){aj=W(ad[2],aa.regional[aa.regional.getLocale()]["monthNames"])}ae.setFullYear(ac,aj,ab);ae.setHours(0,0,0,0);return ae}else{return af}}];function W(ad,ae){if(ae.indexOf){return ae.indexOf(ad)}for(var ab=0,ac=ae.length;ab<ac;ab++){if(ae[ab]===ad){return ab}}return -1}function j(ab){if(ab===null){return"[object Null]"}return Object.prototype.toString.call(ab)}H.jsDate=aa;H.jqplot.sprintf=function(){function ah(an,aj,ak,am){var al=(an.length>=aj)?"":Array(1+aj-an.length>>>0).join(ak);return am?an+al:al+an}function ae(al){var ak=new String(al);for(var aj=10;aj>0;aj--){if(ak==(ak=ak.replace(/^(\d+)(\d{3})/,"$1"+H.jqplot.sprintf.thousandsSeparator+"$2"))){break}}return ak}function ad(ao,an,aq,al,am,ak){var ap=al-ao.length;if(ap>0){var aj=" ";if(ak){aj=" "}if(aq||!am){ao=ah(ao,al,aj,aq)}else{ao=ao.slice(0,an.length)+ah("",ap,"0",true)+ao.slice(an.length)}}return ao}function ai(ar,ak,ap,al,aj,ao,aq,an){var am=ar>>>0;ap=ap&&am&&{"2":"0b","8":"0","16":"0x"}[ak]||"";ar=ap+ah(am.toString(ak),ao||0,"0",false);return ad(ar,ap,al,aj,aq,an)}function ab(an,ao,al,aj,am,ak){if(aj!=null){an=an.slice(0,aj)}return ad(an,"",ao,al,am,ak)}var ac=arguments,af=0,ag=ac[af++];return ag.replace(H.jqplot.sprintf.regex,function(aG,aq,ar,av,aI,aD,ao){if(aG=="%%"){return"%"}var ax=false,at="",au=false,aF=false,ap=false,an=false;for(var aC=0;ar&&aC<ar.length;aC++){switch(ar.charAt(aC)){case" ":at=" ";break;case"+":at="+";break;case"-":ax=true;break;case"0":au=true;break;case"#":aF=true;break;case"&":ap=true;break;case"'":an=true;break}}if(!av){av=0}else{if(av=="*"){av=+ac[af++]}else{if(av.charAt(0)=="*"){av=+ac[av.slice(1,-1)]}else{av=+av}}}if(av<0){av=-av;ax=true}if(!isFinite(av)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!aD){aD="fFeE".indexOf(ao)>-1?6:(ao=="d")?0:void (0)}else{if(aD=="*"){aD=+ac[af++]}else{if(aD.charAt(0)=="*"){aD=+ac[aD.slice(1,-1)]}else{aD=+aD}}}var az=aq?ac[aq.slice(0,-1)]:ac[af++];switch(ao){case"s":if(az==null){return""}return ab(String(az),ax,av,aD,au,ap);case"c":return ab(String.fromCharCode(+az),ax,av,aD,au,ap);case"b":return ai(az,2,aF,ax,av,aD,au,ap);case"o":return ai(az,8,aF,ax,av,aD,au,ap);case"x":return ai(az,16,aF,ax,av,aD,au,ap);case"X":return ai(az,16,aF,ax,av,aD,au,ap).toUpperCase();case"u":return ai(az,10,aF,ax,av,aD,au,ap);case"i":var al=parseInt(+az,10);if(isNaN(al)){return""}var aB=al<0?"-":at;var aE=an?ae(String(Math.abs(al))):String(Math.abs(al));az=aB+ah(aE,aD,"0",false);return ad(az,aB,ax,av,au,ap);case"d":var al=Math.round(+az);if(isNaN(al)){return""}var aB=al<0?"-":at;var aE=an?ae(String(Math.abs(al))):String(Math.abs(al));az=aB+ah(aE,aD,"0",false);return ad(az,aB,ax,av,au,ap);case"e":case"E":case"f":case"F":case"g":case"G":var al=+az;if(isNaN(al)){return""}var aB=al<0?"-":at;var am=["toExponential","toFixed","toPrecision"]["efg".indexOf(ao.toLowerCase())];var aH=["toString","toUpperCase"]["eEfFgG".indexOf(ao)%2];var aE=Math.abs(al)[am](aD);aE=an?ae(aE):aE;az=aB+aE;var aw=ad(az,aB,ax,av,au,ap)[aH]();if(H.jqplot.sprintf.decimalMark!=="."&&H.jqplot.sprintf.decimalMark!==H.jqplot.sprintf.thousandsSeparator){return aw.replace(/\./,H.jqplot.sprintf.decimalMark)}else{return aw}case"p":case"P":var al=+az;if(isNaN(al)){return""}var aB=al<0?"-":at;var ay=String(Number(Math.abs(al)).toExponential()).split(/e|E/);var ak=(ay[0].indexOf(".")!=-1)?ay[0].length-1:ay[0].length;var aA=(ay[1]<0)?-ay[1]-1:0;if(Math.abs(al)<1){if(ak+aA<=aD){az=aB+Math.abs(al).toPrecision(ak)}else{if(ak<=aD-1){az=aB+Math.abs(al).toExponential(ak-1)}else{az=aB+Math.abs(al).toExponential(aD-1)}}}else{var aj=(ak<=aD)?ak:aD;az=aB+Math.abs(al).toPrecision(aj)}var aH=["toString","toUpperCase"]["pP".indexOf(ao)%2];return ad(az,aB,ax,av,au,ap)[aH]();case"n":return"";default:return aG}})};H.jqplot.sprintf.thousandsSeparator=",";H.jqplot.sprintf.decimalMark=".";H.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;H.jqplot.getSignificantFigures=function(af){var ah=String(Number(Math.abs(af)).toExponential()).split(/e|E/);var ag=(ah[0].indexOf(".")!=-1)?ah[0].length-1:ah[0].length;var ac=(ah[1]<0)?-ah[1]-1:0;var ab=parseInt(ah[1],10);var ad=(ab+1>0)?ab+1:0;var ae=(ag<=ad)?0:ag-ab-1;return{significantDigits:ag,digitsLeft:ad,digitsRight:ae,zeros:ac,exponent:ab}};H.jqplot.getPrecision=function(ab){return H.jqplot.getSignificantFigures(ab).digitsRight}})(jQuery);var backCompat=$.uiBackCompat!==false;$.jqplot.effects={effect:{}};var dataSpace="jqplot.storage.";$.extend($.jqplot.effects,{version:"1.9pre",save:function(b,c){for(var a=0;a<c.length;a++){if(c[a]!==null){b.data(dataSpace+c[a],b[0].style[c[a]])}}},restore:function(b,c){for(var a=0;a<c.length;a++){if(c[a]!==null){b.css(c[a],b.data(dataSpace+c[a]))}}},setMode:function(a,b){if(b==="toggle"){b=a.is(":hidden")?"show":"hide"}return b},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper")){return b.parent()}var c={width:b.outerWidth(true),height:b.outerHeight(true),"float":b.css("float")},e=$("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),a={width:b.width(),height:b.height()},d=document.activeElement;b.wrap(e);if(b[0]===d||$.contains(b[0],d)){$(d).focus()}e=b.parent();if(b.css("position")==="static"){e.css({position:"relative"});b.css({position:"relative"})}else{$.extend(c,{position:b.css("position"),zIndex:b.css("z-index")});$.each(["top","left","bottom","right"],function(f,g){c[g]=b.css(g);if(isNaN(parseInt(c[g],10))){c[g]="auto"}});b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}b.css(a);return e.css(c).show()},removeWrapper:function(a){var b=document.activeElement;if(a.parent().is(".ui-effects-wrapper")){a.parent().replaceWith(a);if(a[0]===b||$.contains(a[0],b)){$(b).focus()}}return a}});function _normalizeArguments(b,a,c,d){if($.isPlainObject(b)){return b}b={effect:b};if(a===undefined){a={}}if($.isFunction(a)){d=a;c=null;a={}}if($.type(a)==="number"||$.fx.speeds[a]){d=c;c=a;a={}}if($.isFunction(c)){d=c;c=null}if(a){$.extend(b,a)}c=c||a.duration;b.duration=$.fx.off?0:typeof c==="number"?c:c in $.fx.speeds?$.fx.speeds[c]:$.fx.speeds._default;b.complete=d||a.complete;return b}function standardSpeed(a){if(!a||typeof a==="number"||$.fx.speeds[a]){return true}if(typeof a==="string"&&!$.jqplot.effects.effect[a]){if(backCompat&&$.jqplot.effects[a]){return false}return true}return false}$.fn.extend({jqplotEffect:function(i,j,b,h){var g=_normalizeArguments.apply(this,arguments),d=g.mode,e=g.queue,f=$.jqplot.effects.effect[g.effect],a=!f&&backCompat&&$.jqplot.effects[g.effect];if($.fx.off||!(f||a)){if(d){return this[d](g.duration,g.complete)}else{return this.each(function(){if(g.complete){g.complete.call(this)}})}}function c(m){var n=$(this),l=g.complete,o=g.mode;function k(){if($.isFunction(l)){l.call(n[0])}if($.isFunction(m)){m()}}if(n.is(":hidden")?o==="hide":o==="show"){k()}else{f.call(n[0],g,k)}}if(f){return e===false?this.each(c):this.queue(e||"fx",c)}else{return a.call(this,{options:g,duration:g.duration,callback:g.complete,mode:g.mode})}}});var rvertical=/up|down|vertical/,rpositivemotion=/up|left|vertical|horizontal/;$.jqplot.effects.effect.blind=function(c,h){var d=$(this),k=["position","top","bottom","left","right","height","width"],i=$.jqplot.effects.setMode(d,c.mode||"hide"),m=c.direction||"up",f=rvertical.test(m),e=f?"height":"width",j=f?"top":"left",p=rpositivemotion.test(m),g={},n=i==="show",b,a,l;if(d.parent().is(".ui-effects-wrapper")){$.jqplot.effects.save(d.parent(),k)}else{$.jqplot.effects.save(d,k)}d.show();l=parseInt(d.css("top"),10);b=$.jqplot.effects.createWrapper(d).css({overflow:"hidden"});a=f?b[e]()+l:b[e]();g[e]=n?String(a):"0";if(!p){d.css(f?"bottom":"right",0).css(f?"top":"left","").css({position:"absolute"});g[j]=n?"0":String(a)}if(n){b.css(e,0);if(!p){b.css(j,a)}}b.animate(g,{duration:c.duration,easing:c.easing,queue:false,complete:function(){if(i==="hide"){d.hide()}$.jqplot.effects.restore(d,k);$.jqplot.effects.removeWrapper(d);h()}})}; \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.js b/wqflask/wqflask/static/packages/jqplot/jquery.js deleted file mode 100644 index 27914ea3..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jquery.js +++ /dev/null @@ -1,9046 +0,0 @@ -/*! - * jQuery JavaScript Library v1.6.4 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Sep 12 18:54:48 2011 -0400 - */ -(function( window, undefined ) { - -// Use the correct document accordingly with window argument (sandbox) -var document = window.document, - navigator = window.navigator, - location = window.location; -var jQuery = (function() { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - - // Used for trimming whitespace - trimLeft = /^\s+/, - trimRight = /\s+$/, - - // Check for digits - rdigit = /\d/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, - rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - - // Useragent RegExp - rwebkit = /(webkit)[ \/]([\w.]+)/, - ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, - rmsie = /(msie) ([\w.]+)/, - rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, - - // Matches dashed string for camelizing - rdashAlpha = /-([a-z]|[0-9])/ig, - rmsPrefix = /^-ms-/, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return ( letter + "" ).toUpperCase(); - }, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // The deferred used on DOM ready - readyList, - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - trim = String.prototype.trim, - indexOf = Array.prototype.indexOf, - - // [[Class]] -> type pairs - class2type = {}; - -jQuery.fn = jQuery.prototype = { - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // The body element only exists once, optimize finding it - if ( selector === "body" && !context && document.body ) { - this.context = document; - this[0] = document.body; - this.selector = selector; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = quickExpr.exec( selector ); - } - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - doc = (context ? context.ownerDocument || context : document); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; - } - - return jQuery.merge( this, selector ); - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return (context || rootjQuery).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if (selector.selector !== undefined) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.6.4", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return slice.call( this, 0 ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = this.constructor(); - - if ( jQuery.isArray( elems ) ) { - push.apply( ret, elems ); - - } else { - jQuery.merge( ret, elems ); - } - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + (this.selector ? " " : "") + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Attach the listeners - jQuery.bindReady(); - - // Add the callback - readyList.done( fn ); - - return this; - }, - - eq: function( i ) { - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - // Either a released hold or an DOMready/load event and not yet ready - if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 1 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger( "ready" ).unbind( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyList ) { - return; - } - - readyList = jQuery._Deferred(); - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - return setTimeout( jQuery.ready, 1 ); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", DOMContentLoaded ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - // A crude way of determining if an object is a window - isWindow: function( obj ) { - return obj && typeof obj === "object" && "setInterval" in obj; - }, - - isNaN: function( obj ) { - return obj == null || !rdigit.test( obj ) || isNaN( obj ); - }, - - type: function( obj ) { - return obj == null ? - String( obj ) : - class2type[ toString.call(obj) ] || "object"; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return (new Function( "return " + data ))(); - - } - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - parseXML: function( data ) { - var xml, tmp; - try { - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - } catch( e ) { - xml = undefined; - } - if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && rnotwhite.test( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction( object ); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { - break; - } - } - } - } - - return object; - }, - - // Use native String.trim function wherever possible - trim: trim ? - function( text ) { - return text == null ? - "" : - trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - var type = jQuery.type( array ); - - if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array ) { - if ( !array ) { - return -1; - } - - if ( indexOf ) { - return indexOf.call( array, elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - }, - - merge: function( first, second ) { - var i = first.length, - j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var ret = [], retVal; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, key, ret = [], - i = 0, - length = elems.length, - // jquery objects are treated as arrays - isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( key in elems ) { - value = callback( elems[ key ], key, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - if ( typeof context === "string" ) { - var tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - var args = slice.call( arguments, 2 ), - proxy = function() { - return fn.apply( context, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - - return proxy; - }, - - // Mutifunctional method to get and set values to a collection - // The value/s can optionally be executed if it's a function - access: function( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - jQuery.access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; - }, - - now: function() { - return (new Date()).getTime(); - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = rwebkit.exec( ua ) || - ropera.exec( ua ) || - rmsie.exec( ua ) || - ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - sub: function() { - function jQuerySub( selector, context ) { - return new jQuerySub.fn.init( selector, context ); - } - jQuery.extend( true, jQuerySub, this ); - jQuerySub.superclass = this; - jQuerySub.fn = jQuerySub.prototype = this(); - jQuerySub.fn.constructor = jQuerySub; - jQuerySub.sub = this.sub; - jQuerySub.fn.init = function init( selector, context ) { - if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { - context = jQuerySub( context ); - } - - return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); - }; - jQuerySub.fn.init.prototype = jQuerySub.fn; - var rootjQuerySub = jQuerySub(document); - return jQuerySub; - }, - - browser: {} -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} - -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} - -// IE doesn't match non-breaking spaces with \s -if ( rnotwhite.test( "\xA0" ) ) { - trimLeft = /^[\s\xA0]+/; - trimRight = /[\s\xA0]+$/; -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); - -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} - -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch(e) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -return jQuery; - -})(); - - -var // Promise methods - promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ), - // Static reference to slice - sliceDeferred = [].slice; - -jQuery.extend({ - // Create a simple deferred (one callbacks list) - _Deferred: function() { - var // callbacks list - callbacks = [], - // stored [ context , args ] - fired, - // to avoid firing when already doing so - firing, - // flag to know if the deferred has been cancelled - cancelled, - // the deferred itself - deferred = { - - // done( f1, f2, ...) - done: function() { - if ( !cancelled ) { - var args = arguments, - i, - length, - elem, - type, - _fired; - if ( fired ) { - _fired = fired; - fired = 0; - } - for ( i = 0, length = args.length; i < length; i++ ) { - elem = args[ i ]; - type = jQuery.type( elem ); - if ( type === "array" ) { - deferred.done.apply( deferred, elem ); - } else if ( type === "function" ) { - callbacks.push( elem ); - } - } - if ( _fired ) { - deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); - } - } - return this; - }, - - // resolve with given context and args - resolveWith: function( context, args ) { - if ( !cancelled && !fired && !firing ) { - // make sure args are available (#8421) - args = args || []; - firing = 1; - try { - while( callbacks[ 0 ] ) { - callbacks.shift().apply( context, args ); - } - } - finally { - fired = [ context, args ]; - firing = 0; - } - } - return this; - }, - - // resolve with this as context and given arguments - resolve: function() { - deferred.resolveWith( this, arguments ); - return this; - }, - - // Has this deferred been resolved? - isResolved: function() { - return !!( firing || fired ); - }, - - // Cancel - cancel: function() { - cancelled = 1; - callbacks = []; - return this; - } - }; - - return deferred; - }, - - // Full fledged deferred (two callbacks list) - Deferred: function( func ) { - var deferred = jQuery._Deferred(), - failDeferred = jQuery._Deferred(), - promise; - // Add errorDeferred methods, then and promise - jQuery.extend( deferred, { - then: function( doneCallbacks, failCallbacks ) { - deferred.done( doneCallbacks ).fail( failCallbacks ); - return this; - }, - always: function() { - return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments ); - }, - fail: failDeferred.done, - rejectWith: failDeferred.resolveWith, - reject: failDeferred.resolve, - isRejected: failDeferred.isResolved, - pipe: function( fnDone, fnFail ) { - return jQuery.Deferred(function( newDefer ) { - jQuery.each( { - done: [ fnDone, "resolve" ], - fail: [ fnFail, "reject" ] - }, function( handler, data ) { - var fn = data[ 0 ], - action = data[ 1 ], - returned; - if ( jQuery.isFunction( fn ) ) { - deferred[ handler ](function() { - returned = fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise().then( newDefer.resolve, newDefer.reject ); - } else { - newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); - } - }); - } else { - deferred[ handler ]( newDefer[ action ] ); - } - }); - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - if ( obj == null ) { - if ( promise ) { - return promise; - } - promise = obj = {}; - } - var i = promiseMethods.length; - while( i-- ) { - obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; - } - return obj; - } - }); - // Make sure only one callback list will be used - deferred.done( failDeferred.cancel ).fail( deferred.cancel ); - // Unexpose cancel - delete deferred.cancel; - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - return deferred; - }, - - // Deferred helper - when: function( firstParam ) { - var args = arguments, - i = 0, - length = args.length, - count = length, - deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? - firstParam : - jQuery.Deferred(); - function resolveFunc( i ) { - return function( value ) { - args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; - if ( !( --count ) ) { - // Strange bug in FF4: - // Values changed onto the arguments object sometimes end up as undefined values - // outside the $.when method. Cloning the object into a fresh array solves the issue - deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) ); - } - }; - } - if ( length > 1 ) { - for( ; i < length; i++ ) { - if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) { - args[ i ].promise().then( resolveFunc(i), deferred.reject ); - } else { - --count; - } - } - if ( !count ) { - deferred.resolveWith( deferred, args ); - } - } else if ( deferred !== firstParam ) { - deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); - } - return deferred.promise(); - } -}); - - - -jQuery.support = (function() { - - var div = document.createElement( "div" ), - documentElement = document.documentElement, - all, - a, - select, - opt, - input, - marginDiv, - support, - fragment, - body, - testElementParent, - testElement, - testElementStyle, - tds, - events, - eventName, - i, - isSupported; - - // Preliminary tests - div.setAttribute("className", "t"); - div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; - - - all = div.getElementsByTagName( "*" ); - a = div.getElementsByTagName( "a" )[ 0 ]; - - // Can't get basic test support - if ( !all || !all.length || !a ) { - return {}; - } - - // First batch of supports tests - select = document.createElement( "select" ); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName( "input" )[ 0 ]; - - support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: ( div.firstChild.nodeType === 3 ), - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName( "tbody" ).length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName( "link" ).length, - - // Get the style information from getAttribute - // (IE uses .cssText instead) - style: /top/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.55$/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: ( input.value === "on" ), - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, - - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - getSetAttribute: div.className !== "t", - - // Will be defined later - submitBubbles: true, - changeBubbles: true, - focusinBubbles: false, - deleteExpando: true, - noCloneEvent: true, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableMarginRight: true - }; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Test to see if it's possible to delete an expando from an element - // Fails in Internet Explorer - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { - div.attachEvent( "onclick", function() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - support.noCloneEvent = false; - }); - div.cloneNode( true ).fireEvent( "onclick" ); - } - - // Check if a radio maintains it's value - // after being appended to the DOM - input = document.createElement("input"); - input.value = "t"; - input.setAttribute("type", "radio"); - support.radioValue = input.value === "t"; - - input.setAttribute("checked", "checked"); - div.appendChild( input ); - fragment = document.createDocumentFragment(); - fragment.appendChild( div.firstChild ); - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - div.innerHTML = ""; - - // Figure out if the W3C box model works as expected - div.style.width = div.style.paddingLeft = "1px"; - - body = document.getElementsByTagName( "body" )[ 0 ]; - // We use our own, invisible, body unless the body is already present - // in which case we use a div (#9239) - testElement = document.createElement( body ? "div" : "body" ); - testElementStyle = { - visibility: "hidden", - width: 0, - height: 0, - border: 0, - margin: 0, - background: "none" - }; - if ( body ) { - jQuery.extend( testElementStyle, { - position: "absolute", - left: "-1000px", - top: "-1000px" - }); - } - for ( i in testElementStyle ) { - testElement.style[ i ] = testElementStyle[ i ]; - } - testElement.appendChild( div ); - testElementParent = body || documentElement; - testElementParent.insertBefore( testElement, testElementParent.firstChild ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - support.boxModel = div.offsetWidth === 2; - - if ( "zoom" in div.style ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.style.display = "inline"; - div.style.zoom = 1; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); - - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "<div style='width:4px;'></div>"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); - } - - div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>"; - tds = div.getElementsByTagName( "td" ); - - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - // (only IE 8 fails this test) - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Check if empty table cells still have offsetWidth/Height - // (IE < 8 fail this test) - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - div.innerHTML = ""; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. For more - // info see bug #3333 - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - if ( document.defaultView && document.defaultView.getComputedStyle ) { - marginDiv = document.createElement( "div" ); - marginDiv.style.width = "0"; - marginDiv.style.marginRight = "0"; - div.appendChild( marginDiv ); - support.reliableMarginRight = - ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; - } - - // Remove the body element we added - testElement.innerHTML = ""; - testElementParent.removeChild( testElement ); - - // Technique from Juriy Zaytsev - // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - // We only care about the case where non-standard event systems - // are used, namely in IE. Short-circuiting here helps us to - // avoid an eval call (in setAttribute) which can cause CSP - // to go haywire. See: https://developer.mozilla.org/en/Security/CSP - if ( div.attachEvent ) { - for( i in { - submit: 1, - change: 1, - focusin: 1 - } ) { - eventName = "on" + i; - isSupported = ( eventName in div ); - if ( !isSupported ) { - div.setAttribute( eventName, "return;" ); - isSupported = ( typeof div[ eventName ] === "function" ); - } - support[ i + "Bubbles" ] = isSupported; - } - } - - // Null connected elements to avoid leaks in IE - testElement = fragment = select = opt = body = marginDiv = div = input = null; - - return support; -})(); - -// Keep track of boxModel -jQuery.boxModel = jQuery.support.boxModel; - - - - -var rbrace = /^(?:\{.*\}|\[.*\])$/, - rmultiDash = /([A-Z])/g; - -jQuery.extend({ - cache: {}, - - // Please use with caution - uuid: 0, - - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, ret, - internalKey = jQuery.expando, - getByName = typeof name === "string", - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - elem[ jQuery.expando ] = id = ++jQuery.uuid; - } else { - id = jQuery.expando; - } - } - - if ( !cache[ id ] ) { - cache[ id ] = {}; - - // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery - // metadata on plain JS objects when the object is serialized using - // JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); - } else { - cache[ id ] = jQuery.extend(cache[ id ], name); - } - } - - thisCache = cache[ id ]; - - // Internal jQuery data is stored in a separate object inside the object's data - // cache in order to avoid key collisions between internal data and user-defined - // data - if ( pvt ) { - if ( !thisCache[ internalKey ] ) { - thisCache[ internalKey ] = {}; - } - - thisCache = thisCache[ internalKey ]; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should - // not attempt to inspect the internal events object using jQuery.data, as this - // internal data object is undocumented and subject to change. - if ( name === "events" && !thisCache[name] ) { - return thisCache[ internalKey ] && thisCache[ internalKey ].events; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( getByName ) { - - // First Try to find as-is property data - ret = thisCache[ name ]; - - // Test for null|undefined property data - if ( ret == null ) { - - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } - - return ret; - }, - - removeData: function( elem, name, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, - - // Reference to internal data cache key - internalKey = jQuery.expando, - - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - - // See jQuery.data for more information - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - - thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; - - if ( thisCache ) { - - // Support interoperable removal of hyphenated or camelcased keys - if ( !thisCache[ name ] ) { - name = jQuery.camelCase( name ); - } - - delete thisCache[ name ]; - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( !isEmptyDataObject(thisCache) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( pvt ) { - delete cache[ id ][ internalKey ]; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject(cache[ id ]) ) { - return; - } - } - - var internalCache = cache[ id ][ internalKey ]; - - // Browsers that fail expando deletion also refuse to delete expandos on - // the window, but it will allow it on all other JS objects; other browsers - // don't care - // Ensure that `cache` is not a window object #10080 - if ( jQuery.support.deleteExpando || !cache.setInterval ) { - delete cache[ id ]; - } else { - cache[ id ] = null; - } - - // We destroyed the entire user cache at once because it's faster than - // iterating through each key, but we need to continue to persist internal - // data if it existed - if ( internalCache ) { - cache[ id ] = {}; - // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery - // metadata on plain JS objects when the object is serialized using - // JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - - cache[ id ][ internalKey ] = internalCache; - - // Otherwise, we need to eliminate the expando on the node to avoid - // false lookups in the cache for entries that no longer exist - } else if ( isNode ) { - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( jQuery.support.deleteExpando ) { - delete elem[ jQuery.expando ]; - } else if ( elem.removeAttribute ) { - elem.removeAttribute( jQuery.expando ); - } else { - elem[ jQuery.expando ] = null; - } - } - }, - - // For internal use only. - _data: function( elem, name, data ) { - return jQuery.data( elem, name, data, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - if ( elem.nodeName ) { - var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; - - if ( match ) { - return !(match === true || elem.getAttribute("classid") !== match); - } - } - - return true; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var data = null; - - if ( typeof key === "undefined" ) { - if ( this.length ) { - data = jQuery.data( this[0] ); - - if ( this[0].nodeType === 1 ) { - var attr = this[0].attributes, name; - for ( var i = 0, l = attr.length; i < l; i++ ) { - name = attr[i].name; - - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.substring(5) ); - - dataAttr( this[0], name, data[ name ] ); - } - } - } - } - - return data; - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - // Try to fetch any internally stored data first - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - data = dataAttr( this[0], key, data ); - } - - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - - } else { - return this.each(function() { - var $this = jQuery( this ), - args = [ parts[0], value ]; - - $this.triggerHandler( "setData" + parts[1] + "!", args ); - jQuery.data( this, key, value ); - $this.triggerHandler( "changeData" + parts[1] + "!", args ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - !jQuery.isNaN( data ) ? parseFloat( data ) : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON -// property to be considered empty objects; this property always exists in -// order to make sure JSON.stringify does not expose internal metadata -function isEmptyDataObject( obj ) { - for ( var name in obj ) { - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} - - - - -function handleQueueMarkDefer( elem, type, src ) { - var deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - defer = jQuery.data( elem, deferDataKey, undefined, true ); - if ( defer && - ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) && - ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) { - // Give room for hard-coded callbacks to fire first - // and eventually mark/queue something else on the element - setTimeout( function() { - if ( !jQuery.data( elem, queueDataKey, undefined, true ) && - !jQuery.data( elem, markDataKey, undefined, true ) ) { - jQuery.removeData( elem, deferDataKey, true ); - defer.resolve(); - } - }, 0 ); - } -} - -jQuery.extend({ - - _mark: function( elem, type ) { - if ( elem ) { - type = (type || "fx") + "mark"; - jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true ); - } - }, - - _unmark: function( force, elem, type ) { - if ( force !== true ) { - type = elem; - elem = force; - force = false; - } - if ( elem ) { - type = type || "fx"; - var key = type + "mark", - count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 ); - if ( count ) { - jQuery.data( elem, key, count, true ); - } else { - jQuery.removeData( elem, key, true ); - handleQueueMarkDefer( elem, type, "mark" ); - } - } - }, - - queue: function( elem, type, data ) { - if ( elem ) { - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type, undefined, true ); - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !q || jQuery.isArray(data) ) { - q = jQuery.data( elem, type, jQuery.makeArray(data), true ); - } else { - q.push( data ); - } - } - return q || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - fn = queue.shift(), - defer; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift("inprogress"); - } - - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); - } - - if ( !queue.length ) { - jQuery.removeData( elem, type + "queue", true ); - handleQueueMarkDefer( elem, type, "queue" ); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function() { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; - type = type || "fx"; - - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, object ) { - if ( typeof type !== "string" ) { - object = type; - type = undefined; - } - type = type || "fx"; - var defer = jQuery.Deferred(), - elements = this, - i = elements.length, - count = 1, - deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - tmp; - function resolve() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - } - while( i-- ) { - if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || - ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || - jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && - jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) { - count++; - tmp.done( resolve ); - } - } - resolve(); - return defer.promise(); - } -}); - - - - -var rclass = /[\n\t\r]/g, - rspace = /\s+/, - rreturn = /\r/g, - rtype = /^(?:button|input)$/i, - rfocusable = /^(?:button|input|object|select|textarea)$/i, - rclickable = /^a(?:rea)?$/i, - rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - nodeHook, boolHook; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.prop ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classNames, i, l, elem, - setClass, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call(this, j, this.className) ); - }); - } - - if ( value && typeof value === "string" ) { - classNames = value.split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className && classNames.length === 1 ) { - elem.className = value; - - } else { - setClass = " " + elem.className + " "; - - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { - setClass += classNames[ c ] + " "; - } - } - elem.className = jQuery.trim( setClass ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classNames, i, l, elem, className, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call(this, j, this.className) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - classNames = (value || "").split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - className = (" " + elem.className + " ").replace( rclass, " " ); - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[ c ] + " ", " "); - } - elem.className = jQuery.trim( className ); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - state = stateVal, - classNames = value.split( rspace ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // toggle whole className - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var hooks, ret, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return undefined; - } - - var isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var self = jQuery(this), val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, self.val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - }, - select: { - get: function( elem ) { - var value, - index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - // Fixes Bug #2551 -- select.val() broken in IE after form.reset() - if ( one && !values.length && options.length ) { - return jQuery( options[ index ] ).val(); - } - - return values; - }, - - set: function( elem, value ) { - var values = jQuery.makeArray( value ); - - jQuery(elem).find("option").each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attrFix: { - // Always normalize to ensure hook usage - tabindex: "tabIndex" - }, - - attr: function( elem, name, value, pass ) { - var nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery( elem )[ name ]( value ); - } - - // Fallback to prop when attributes are not supported - if ( !("getAttribute" in elem) ) { - return jQuery.prop( elem, name, value ); - } - - var ret, hooks, - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - // Normalize the name if needed - if ( notxml ) { - name = jQuery.attrFix[ name ] || name; - - hooks = jQuery.attrHooks[ name ]; - - if ( !hooks ) { - // Use boolHook for boolean attributes - if ( rboolean.test( name ) ) { - hooks = boolHook; - - // Use nodeHook if available( IE6/7 ) - } else if ( nodeHook ) { - hooks = nodeHook; - } - } - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return undefined; - - } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, "" + value ); - return value; - } - - } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - - ret = elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return ret === null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, name ) { - var propName; - if ( elem.nodeType === 1 ) { - name = jQuery.attrFix[ name ] || name; - - jQuery.attr( elem, name, "" ); - elem.removeAttribute( name ); - - // Set corresponding property to false for boolean attributes - if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { - elem[ propName ] = false; - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to it's default in case type is set after value - // This is for element creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - }, - // Use the value property for back compat - // Use the nodeHook for button elements in IE6/7 (#1954) - value: { - get: function( elem, name ) { - if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { - return nodeHook.get( elem, name ); - } - return name in elem ? - elem.value : - null; - }, - set: function( elem, value, name ) { - if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { - return nodeHook.set( elem, value, name ); - } - // Does not return so that setAttribute is also used - elem.value = value; - } - } - }, - - propFix: { - tabindex: "tabIndex", - readonly: "readOnly", - "for": "htmlFor", - "class": "className", - maxlength: "maxLength", - cellspacing: "cellSpacing", - cellpadding: "cellPadding", - rowspan: "rowSpan", - colspan: "colSpan", - usemap: "useMap", - frameborder: "frameBorder", - contenteditable: "contentEditable" - }, - - prop: function( elem, name, value ) { - var nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return undefined; - } - - var ret, hooks, - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - return (elem[ name ] = value); - } - - } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - return elem[ name ]; - } - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabindex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - } - } -}); - -// Add the tabindex propHook to attrHooks for back-compat -jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex; - -// Hook for boolean attributes -boolHook = { - get: function( elem, name ) { - // Align boolean attributes with corresponding properties - // Fall back to attribute presence where some booleans are not supported - var attrNode; - return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ? - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - var propName; - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - // value is true since we know at this point it's type boolean and not false - // Set boolean attributes to the same name and set the DOM property - propName = jQuery.propFix[ name ] || name; - if ( propName in elem ) { - // Only set the IDL specifically if it already exists on the element - elem[ propName ] = true; - } - - elem.setAttribute( name, name.toLowerCase() ); - } - return name; - } -}; - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !jQuery.support.getSetAttribute ) { - - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = jQuery.valHooks.button = { - get: function( elem, name ) { - var ret; - ret = elem.getAttributeNode( name ); - // Return undefined if nodeValue is empty string - return ret && ret.nodeValue !== "" ? - ret.nodeValue : - undefined; - }, - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - ret = document.createAttribute( name ); - elem.setAttributeNode( ret ); - } - return (ret.nodeValue = value + ""); - } - }; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }); - }); -} - - -// Some attributes require a special call on IE -if ( !jQuery.support.hrefNormalized ) { - jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - get: function( elem ) { - var ret = elem.getAttribute( name, 2 ); - return ret === null ? undefined : ret; - } - }); - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Normalize to lowercase since IE uppercases css property names - return elem.style.cssText.toLowerCase() || undefined; - }, - set: function( elem, value ) { - return (elem.style.cssText = "" + value); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - return null; - } - }); -} - -// Radios and checkboxes getter/setter -if ( !jQuery.support.checkOn ) { - jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - get: function( elem ) { - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - } - }; - }); -} -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0); - } - } - }); -}); - - - - -var rnamespaces = /\.(.*)$/, - rformElems = /^(?:textarea|input|select)$/i, - rperiod = /\./g, - rspaces = / /g, - rescape = /[^\w\s.|`]/g, - fcleanup = function( nm ) { - return nm.replace(rescape, "\\$&"); - }; - -/* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. - */ -jQuery.event = { - - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - if ( handler === false ) { - handler = returnFalse; - } else if ( !handler ) { - // Fixes bug #7229. Fix recommended by jdalton - return; - } - - var handleObjIn, handleObj; - - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - } - - // Make sure that the function being executed has a unique ID - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure - var elemData = jQuery._data( elem ); - - // If no elemData is found then we must be trying to bind to one of the - // banned noData elements - if ( !elemData ) { - return; - } - - var events = elemData.events, - eventHandle = elemData.handle; - - if ( !events ) { - elemData.events = events = {}; - } - - if ( !eventHandle ) { - elemData.handle = eventHandle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : - undefined; - }; - } - - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native events in IE. - eventHandle.elem = elem; - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = types.split(" "); - - var type, i = 0, namespaces; - - while ( (type = types[ i++ ]) ) { - handleObj = handleObjIn ? - jQuery.extend({}, handleObjIn) : - { handler: handler, data: data }; - - // Namespaced event handlers - if ( type.indexOf(".") > -1 ) { - namespaces = type.split("."); - type = namespaces.shift(); - handleObj.namespace = namespaces.slice(0).sort().join("."); - - } else { - namespaces = []; - handleObj.namespace = ""; - } - - handleObj.type = type; - if ( !handleObj.guid ) { - handleObj.guid = handler.guid; - } - - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = jQuery.event.special[ type ] || {}; - - // Init the event handler queue - if ( !handlers ) { - handlers = events[ type ] = []; - - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add the function to the element's handler list - handlers.push( handleObj ); - - // Keep track of which events have been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, pos ) { - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - if ( handler === false ) { - handler = returnFalse; - } - - var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ), - events = elemData && elemData.events; - - if ( !elemData || !events ) { - return; - } - - // types is actually an event object here - if ( types && types.type ) { - handler = types.handler; - types = types.type; - } - - // Unbind all events for the element - if ( !types || typeof types === "string" && types.charAt(0) === "." ) { - types = types || ""; - - for ( type in events ) { - jQuery.event.remove( elem, type + types ); - } - - return; - } - - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(" "); - - while ( (type = types[ i++ ]) ) { - origType = type; - handleObj = null; - all = type.indexOf(".") < 0; - namespaces = []; - - if ( !all ) { - // Namespaced event handlers - namespaces = type.split("."); - type = namespaces.shift(); - - namespace = new RegExp("(^|\\.)" + - jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - eventType = events[ type ]; - - if ( !eventType ) { - continue; - } - - if ( !handler ) { - for ( j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( all || namespace.test( handleObj.namespace ) ) { - jQuery.event.remove( elem, origType, handleObj.handler, j ); - eventType.splice( j--, 1 ); - } - } - - continue; - } - - special = jQuery.event.special[ type ] || {}; - - for ( j = pos || 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( handler.guid === handleObj.guid ) { - // remove the given handler for the given type - if ( all || namespace.test( handleObj.namespace ) ) { - if ( pos == null ) { - eventType.splice( j--, 1 ); - } - - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - - if ( pos != null ) { - break; - } - } - } - - // remove generic event handler if no more handlers exist - if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - ret = null; - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - var handle = elemData.handle; - if ( handle ) { - handle.elem = null; - } - - delete elemData.events; - delete elemData.handle; - - if ( jQuery.isEmptyObject( elemData ) ) { - jQuery.removeData( elem, undefined, true ); - } - } - }, - - // Events that are safe to short-circuit if no handlers are attached. - // Native DOM events should not be added, they may have inline handlers. - customEvent: { - "getData": true, - "setData": true, - "changeData": true - }, - - trigger: function( event, data, elem, onlyHandlers ) { - // Event object or event type - var type = event.type || event, - namespaces = [], - exclusive; - - if ( type.indexOf("!") >= 0 ) { - // Exclusive events trigger only for the exact event (no namespaces) - type = type.slice(0, -1); - exclusive = true; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - - if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { - // No jQuery handlers for this event type, and it can't have inline handlers - return; - } - - // Caller can pass in an Event, Object, or just an event type string - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - new jQuery.Event( type, event ) : - // Just the event type (string) - new jQuery.Event( type ); - - event.type = type; - event.exclusive = exclusive; - event.namespace = namespaces.join("."); - event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); - - // triggerHandler() and global events don't bubble or run the default action - if ( onlyHandlers || !elem ) { - event.preventDefault(); - event.stopPropagation(); - } - - // Handle a global trigger - if ( !elem ) { - // TODO: Stop taunting the data cache; remove global events and always attach to document - jQuery.each( jQuery.cache, function() { - // internalKey variable is just used to make it easier to find - // and potentially change this stuff later; currently it just - // points to jQuery.expando - var internalKey = jQuery.expando, - internalCache = this[ internalKey ]; - if ( internalCache && internalCache.events && internalCache.events[ type ] ) { - jQuery.event.trigger( event, data, internalCache.handle.elem ); - } - }); - return; - } - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // Clean up the event in case it is being reused - event.result = undefined; - event.target = elem; - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data != null ? jQuery.makeArray( data ) : []; - data.unshift( event ); - - var cur = elem, - // IE doesn't like method names with a colon (#3533, #8272) - ontype = type.indexOf(":") < 0 ? "on" + type : ""; - - // Fire event on the current element, then bubble up the DOM tree - do { - var handle = jQuery._data( cur, "handle" ); - - event.currentTarget = cur; - if ( handle ) { - handle.apply( cur, data ); - } - - // Trigger an inline bound script - if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) { - event.result = false; - event.preventDefault(); - } - - // Bubble up to document, then to window - cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window; - } while ( cur && !event.isPropagationStopped() ); - - // If nobody prevented the default action, do it now - if ( !event.isDefaultPrevented() ) { - var old, - special = jQuery.event.special[ type ] || {}; - - if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) && - !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction)() check here because IE6/7 fails that test. - // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch. - try { - if ( ontype && elem[ type ] ) { - // Don't re-trigger an onFOO event when we call its FOO() method - old = elem[ ontype ]; - - if ( old ) { - elem[ ontype ] = null; - } - - jQuery.event.triggered = type; - elem[ type ](); - } - } catch ( ieError ) {} - - if ( old ) { - elem[ ontype ] = old; - } - - jQuery.event.triggered = undefined; - } - } - - return event.result; - }, - - handle: function( event ) { - event = jQuery.event.fix( event || window.event ); - // Snapshot the handlers list since a called handler may add/remove events. - var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0), - run_all = !event.exclusive && !event.namespace, - args = Array.prototype.slice.call( arguments, 0 ); - - // Use the fix-ed Event rather than the (read-only) native event - args[0] = event; - event.currentTarget = this; - - for ( var j = 0, l = handlers.length; j < l; j++ ) { - var handleObj = handlers[ j ]; - - // Triggered event must 1) be non-exclusive and have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event. - if ( run_all || event.namespace_re.test( handleObj.namespace ) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handleObj.handler; - event.data = handleObj.data; - event.handleObj = handleObj; - - var ret = handleObj.handler.apply( this, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - return event.result; - }, - - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; - event = jQuery.Event( originalEvent ); - - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary - if ( !event.target ) { - // Fixes #1925 where srcElement might not be defined either - event.target = event.srcElement || document; - } - - // check if target is a textnode (safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var eventDocument = event.target.ownerDocument || document, - doc = eventDocument.documentElement, - body = eventDocument.body; - - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { - event.which = event.charCode != null ? event.charCode : event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { - event.metaKey = event.ctrlKey; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; - }, - - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop - }, - - live: { - add: function( handleObj ) { - jQuery.event.add( this, - liveConvert( handleObj.origType, handleObj.selector ), - jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); - }, - - remove: function( handleObj ) { - jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); - } - }, - - beforeunload: { - setup: function( data, namespaces, eventHandle ) { - // We only want to do this special case on windows - if ( jQuery.isWindow( this ) ) { - this.onbeforeunload = eventHandle; - } - }, - - teardown: function( namespaces, eventHandle ) { - if ( this.onbeforeunload === eventHandle ) { - this.onbeforeunload = null; - } - } - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // otherwise set the returnValue property of the original event to false (IE) - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - - // Check if mouse(over|out) are still within the same parent element - var related = event.relatedTarget, - inside = false, - eventType = event.type; - - event.type = event.data; - - if ( related !== this ) { - - if ( related ) { - inside = jQuery.contains( this, related ); - } - - if ( !inside ) { - - jQuery.event.handle.apply( this, arguments ); - - event.type = eventType; - } - } -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); - } - }; -}); - -// submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function( data, namespaces ) { - if ( !jQuery.nodeName( this, "form" ) ) { - jQuery.event.add(this, "click.specialSubmit", function( e ) { - // Avoid triggering error on non-existent type attribute in IE VML (#7071) - var elem = e.target, - type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : ""; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit", function( e ) { - var elem = e.target, - type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : ""; - - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - trigger( "submit", this, arguments ); - } - }); - - } else { - return false; - } - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialSubmit" ); - } - }; - -} - -// change delegation, happens here so we have bind. -if ( !jQuery.support.changeBubbles ) { - - var changeFilters, - - getVal = function( elem ) { - var type = jQuery.nodeName( elem, "input" ) ? elem.type : "", - val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( jQuery.nodeName( elem, "select" ) ) { - val = elem.selectedIndex; - } - - return val; - }, - - testChange = function testChange( e ) { - var elem = e.target, data, val; - - if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery._data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery._data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - e.liveFired = undefined; - jQuery.event.trigger( e, arguments[1], elem ); - } - }; - - jQuery.event.special.change = { - filters: { - focusout: testChange, - - beforedeactivate: testChange, - - click: function( e ) { - var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; - - if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) { - testChange.call( this, e ); - } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; - - if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - testChange.call( this, e ); - } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information - beforeactivate: function( e ) { - var elem = e.target; - jQuery._data( elem, "_change_data", getVal(elem) ); - } - }, - - setup: function( data, namespaces ) { - if ( this.type === "file" ) { - return false; - } - - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); - } - - return rformElems.test( this.nodeName ); - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialChange" ); - - return rformElems.test( this.nodeName ); - } - }; - - changeFilters = jQuery.event.special.change.filters; - - // Handle when the input is .focus()'d - changeFilters.focus = changeFilters.beforeactivate; -} - -function trigger( type, elem, args ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - // Don't pass args or remember liveFired; they apply to the donor event. - var event = jQuery.extend( {}, args[ 0 ] ); - event.type = type; - event.originalEvent = {}; - event.liveFired = undefined; - jQuery.event.handle.call( elem, event ); - if ( event.isDefaultPrevented() ) { - args[ 0 ].preventDefault(); - } -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - - function handler( donor ) { - // Donor event is always a native one; fix it and switch its type. - // Let focusin/out handler cancel the donor focus/blur event. - var e = jQuery.event.fix( donor ); - e.type = fix; - e.originalEvent = {}; - jQuery.event.trigger( e, null, e.target ); - if ( e.isDefaultPrevented() ) { - donor.preventDefault(); - } - } - }); -} - -jQuery.each(["bind", "one"], function( i, name ) { - jQuery.fn[ name ] = function( type, data, fn ) { - var handler; - - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ name ](key, data, type[key], fn); - } - return this; - } - - if ( arguments.length === 2 || data === false ) { - fn = data; - data = undefined; - } - - if ( name === "one" ) { - handler = function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }; - handler.guid = fn.guid || jQuery.guid++; - } else { - handler = fn; - } - - if ( type === "unload" && name !== "one" ) { - this.one( type, data, fn ); - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.add( this[i], type, handler, data ); - } - } - - return this; - }; -}); - -jQuery.fn.extend({ - unbind: function( type, fn ) { - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); - } - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.remove( this[i], type, fn ); - } - } - - return this; - }, - - delegate: function( selector, types, data, fn ) { - return this.live( types, data, fn, selector ); - }, - - undelegate: function( selector, types, fn ) { - if ( arguments.length === 0 ) { - return this.unbind( "live" ); - - } else { - return this.die( types, null, fn, selector ); - } - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - - triggerHandler: function( type, data ) { - if ( this[0] ) { - return jQuery.event.trigger( type, data, this[0], true ); - } - }, - - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, - guid = fn.guid || jQuery.guid++, - i = 0, - toggler = function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - }; - - // link all the functions, so any of them can unbind this click handler - toggler.guid = guid; - while ( i < args.length ) { - args[ i++ ].guid = guid; - } - - return this.click( toggler ); - }, - - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -var liveMap = { - focus: "focusin", - blur: "focusout", - mouseenter: "mouseover", - mouseleave: "mouseout" -}; - -jQuery.each(["live", "die"], function( i, name ) { - jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { - var type, i = 0, match, namespaces, preType, - selector = origSelector || this.selector, - context = origSelector ? this : jQuery( this.context ); - - if ( typeof types === "object" && !types.preventDefault ) { - for ( var key in types ) { - context[ name ]( key, data, types[key], selector ); - } - - return this; - } - - if ( name === "die" && !types && - origSelector && origSelector.charAt(0) === "." ) { - - context.unbind( origSelector ); - - return this; - } - - if ( data === false || jQuery.isFunction( data ) ) { - fn = data || returnFalse; - data = undefined; - } - - types = (types || "").split(" "); - - while ( (type = types[ i++ ]) != null ) { - match = rnamespaces.exec( type ); - namespaces = ""; - - if ( match ) { - namespaces = match[0]; - type = type.replace( rnamespaces, "" ); - } - - if ( type === "hover" ) { - types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); - continue; - } - - preType = type; - - if ( liveMap[ type ] ) { - types.push( liveMap[ type ] + namespaces ); - type = type + namespaces; - - } else { - type = (liveMap[ type ] || type) + namespaces; - } - - if ( name === "live" ) { - // bind live handler - for ( var j = 0, l = context.length; j < l; j++ ) { - jQuery.event.add( context[j], "live." + liveConvert( type, selector ), - { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); - } - - } else { - // unbind live handler - context.unbind( "live." + liveConvert( type, selector ), fn ); - } - } - - return this; - }; -}); - -function liveHandler( event ) { - var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, - elems = [], - selectors = [], - events = jQuery._data( this, "events" ); - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) - if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { - return; - } - - if ( event.namespace ) { - namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - event.liveFired = this; - - var live = events.live.slice(0); - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { - selectors.push( handleObj.selector ); - - } else { - live.splice( j--, 1 ); - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - close = match[i]; - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { - elem = close.elem; - related = null; - - // Those two events require additional checking - if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { - event.type = handleObj.preType; - related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; - - // Make sure not to accidentally match a child element with the same selector - if ( related && jQuery.contains( elem, related ) ) { - related = elem; - } - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, handleObj: handleObj, level: close.level }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - - if ( maxLevel && match.level > maxLevel ) { - break; - } - - event.currentTarget = match.elem; - event.data = match.handleObj.data; - event.handleObj = match.handleObj; - - ret = match.handleObj.origHandler.apply( match.elem, arguments ); - - if ( ret === false || event.isPropagationStopped() ) { - maxLevel = match.level; - - if ( ret === false ) { - stop = false; - } - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&"); -} - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - if ( fn == null ) { - fn = data; - data = null; - } - - return arguments.length > 0 ? - this.bind( name, data, fn ) : - this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } -}); - - - -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true, - rBackslash = /\\/g, - rNonWord = /\W/; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function() { - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function( selector, context, results, seed ) { - results = results || []; - context = context || document; - - var origContext = context; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var m, set, checkSet, extra, ret, cur, pop, i, - prune = true, - contextXML = Sizzle.isXML( context ), - parts = [], - soFar = selector; - - // Reset the position of the chunker regexp (start from head) - do { - chunker.exec( "" ); - m = chunker.exec( soFar ); - - if ( m ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - } while ( m ); - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set ); - } - } - - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - - ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? - Sizzle.filter( ret.expr, ret.set )[0] : - ret.set[0]; - } - - if ( context ) { - ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - - set = ret.expr ? - Sizzle.filter( ret.expr, ret.set ) : - ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray( set ); - - } else { - prune = false; - } - - while ( parts.length ) { - cur = parts.pop(); - pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - - } else if ( context && context.nodeType === 1 ) { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - - } else { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function( results ) { - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort( sortOrder ); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[ i - 1 ] ) { - results.splice( i--, 1 ); - } - } - } - } - - return results; -}; - -Sizzle.matches = function( expr, set ) { - return Sizzle( expr, null, null, set ); -}; - -Sizzle.matchesSelector = function( node, expr ) { - return Sizzle( expr, null, null, [node] ).length > 0; -}; - -Sizzle.find = function( expr, context, isXML ) { - var set; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var match, - type = Expr.order[i]; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice( 1, 1 ); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace( rBackslash, "" ); - set = Expr.find[ type ]( match, context, isXML ); - - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = typeof context.getElementsByTagName !== "undefined" ? - context.getElementsByTagName( "*" ) : - []; - } - - return { set: set, expr: expr }; -}; - -Sizzle.filter = function( expr, set, inplace, not ) { - var match, anyFound, - old = expr, - result = [], - curLoop = set, - isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var found, item, - filter = Expr.filter[ type ], - left = match[1]; - - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - - } else { - curLoop[i] = false; - } - - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; -}; - -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - - match: { - ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - - leftMatch: {}, - - attrMap: { - "class": "className", - "for": "htmlFor" - }, - - attrHandle: { - href: function( elem ) { - return elem.getAttribute( "href" ); - }, - type: function( elem ) { - return elem.getAttribute( "type" ); - } - }, - - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !rNonWord.test( part ), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - - ">": function( checkSet, part ) { - var elem, - isPartStr = typeof part === "string", - i = 0, - l = checkSet.length; - - if ( isPartStr && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - - } else { - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - - "": function(checkSet, part, isXML){ - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); - }, - - "~": function( checkSet, part, isXML ) { - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); - } - }, - - find: { - ID: function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }, - - NAME: function( match, context ) { - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], - results = context.getElementsByName( match[1] ); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - - TAG: function( match, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( match[1] ); - } - } - }, - preFilter: { - CLASS: function( match, curLoop, inplace, result, not, isXML ) { - match = " " + match[1].replace( rBackslash, "" ) + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - - ID: function( match ) { - return match[1].replace( rBackslash, "" ); - }, - - TAG: function( match, curLoop ) { - return match[1].replace( rBackslash, "" ).toLowerCase(); - }, - - CHILD: function( match ) { - if ( match[1] === "nth" ) { - if ( !match[2] ) { - Sizzle.error( match[0] ); - } - - match[2] = match[2].replace(/^\+|\s*/g, ''); - - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - else if ( match[2] ) { - Sizzle.error( match[0] ); - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - - ATTR: function( match, curLoop, inplace, result, not, isXML ) { - var name = match[1] = match[1].replace( rBackslash, "" ); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - // Handle if an un-quoted value was used - match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - - PSEUDO: function( match, curLoop, inplace, result, not ) { - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - - if ( !inplace ) { - result.push.apply( result, ret ); - } - - return false; - } - - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - - POS: function( match ) { - match.unshift( true ); - - return match; - } - }, - - filters: { - enabled: function( elem ) { - return elem.disabled === false && elem.type !== "hidden"; - }, - - disabled: function( elem ) { - return elem.disabled === true; - }, - - checked: function( elem ) { - return elem.checked === true; - }, - - selected: function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - parent: function( elem ) { - return !!elem.firstChild; - }, - - empty: function( elem ) { - return !elem.firstChild; - }, - - has: function( elem, i, match ) { - return !!Sizzle( match[3], elem ).length; - }, - - header: function( elem ) { - return (/h\d/i).test( elem.nodeName ); - }, - - text: function( elem ) { - var attr = elem.getAttribute( "type" ), type = elem.type; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); - }, - - radio: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; - }, - - checkbox: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; - }, - - file: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; - }, - - password: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; - }, - - submit: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "submit" === elem.type; - }, - - image: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; - }, - - reset: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "reset" === elem.type; - }, - - button: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && "button" === elem.type || name === "button"; - }, - - input: function( elem ) { - return (/input|select|textarea|button/i).test( elem.nodeName ); - }, - - focus: function( elem ) { - return elem === elem.ownerDocument.activeElement; - } - }, - setFilters: { - first: function( elem, i ) { - return i === 0; - }, - - last: function( elem, i, match, array ) { - return i === array.length - 1; - }, - - even: function( elem, i ) { - return i % 2 === 0; - }, - - odd: function( elem, i ) { - return i % 2 === 1; - }, - - lt: function( elem, i, match ) { - return i < match[3] - 0; - }, - - gt: function( elem, i, match ) { - return i > match[3] - 0; - }, - - nth: function( elem, i, match ) { - return match[3] - 0 === i; - }, - - eq: function( elem, i, match ) { - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function( elem, match, i, array ) { - var name = match[1], - filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; - - } else if ( name === "not" ) { - var not = match[3]; - - for ( var j = 0, l = not.length; j < l; j++ ) { - if ( not[j] === elem ) { - return false; - } - } - - return true; - - } else { - Sizzle.error( name ); - } - }, - - CHILD: function( elem, match ) { - var type = match[1], - node = elem; - - switch ( type ) { - case "only": - case "first": - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - if ( type === "first" ) { - return true; - } - - node = elem; - - case "last": - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - return true; - - case "nth": - var first = match[2], - last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - - parent.sizcache = doneName; - } - - var diff = elem.nodeIndex - last; - - if ( first === 0 ) { - return diff === 0; - - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - - ID: function( elem, match ) { - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - - TAG: function( elem, match ) { - return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; - }, - - CLASS: function( elem, match ) { - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - - ATTR: function( elem, match ) { - var name = match[1], - result = Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - - POS: function( elem, match, i, array ) { - var name = match[2], - filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS, - fescape = function(all, num){ - return "\\" + (num - 0 + 1); - }; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); -} - -var makeArray = function( array, results ) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -// Also verifies that the returned array holds DOM nodes -// (which is not the case in the Blackberry browser) -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; - -// Provide a fallback method if it does not work -} catch( e ) { - makeArray = function( array, results ) { - var i = 0, - ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - - } else { - if ( typeof array.length === "number" ) { - for ( var l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - - } else { - for ( ; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder, siblingCheck; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - return a.compareDocumentPosition ? -1 : 1; - } - - return a.compareDocumentPosition(b) & 4 ? -1 : 1; - }; - -} else { - sortOrder = function( a, b ) { - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Fallback to using sourceIndex (in IE) if it's available on both nodes - } else if ( a.sourceIndex && b.sourceIndex ) { - return a.sourceIndex - b.sourceIndex; - } - - var al, bl, - ap = [], - bp = [], - aup = a.parentNode, - bup = b.parentNode, - cur = aup; - - // If the nodes are siblings (or identical) we can do a quick check - if ( aup === bup ) { - return siblingCheck( a, b ); - - // If no parents were found then the nodes are disconnected - } else if ( !aup ) { - return -1; - - } else if ( !bup ) { - return 1; - } - - // Otherwise they're somewhere else in the tree so we need - // to build up a full list of the parentNodes for comparison - while ( cur ) { - ap.unshift( cur ); - cur = cur.parentNode; - } - - cur = bup; - - while ( cur ) { - bp.unshift( cur ); - cur = cur.parentNode; - } - - al = ap.length; - bl = bp.length; - - // Start walking down the tree looking for a discrepancy - for ( var i = 0; i < al && i < bl; i++ ) { - if ( ap[i] !== bp[i] ) { - return siblingCheck( ap[i], bp[i] ); - } - } - - // We ended someplace up the tree so do a sibling check - return i === al ? - siblingCheck( a, bp[i], -1 ) : - siblingCheck( ap[i], b, 1 ); - }; - - siblingCheck = function( a, b, ret ) { - if ( a === b ) { - return ret; - } - - var cur = a.nextSibling; - - while ( cur ) { - if ( cur === b ) { - return -1; - } - - cur = cur.nextSibling; - } - - return 1; - }; -} - -// Utility function for retreiving the text value of an array of DOM nodes -Sizzle.getText = function( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += Sizzle.getText( elem.childNodes ); - } - } - - return ret; -}; - -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - var form = document.createElement("div"), - id = "script" + (new Date()).getTime(), - root = document.documentElement; - - form.innerHTML = "<a name='" + id + "'/>"; - - // Inject it into the root element, check its status, and remove it quickly - root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - if ( document.getElementById( id ) ) { - Expr.find.ID = function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - - return m ? - m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? - [m] : - undefined : - []; - } - }; - - Expr.filter.ID = function( elem, match ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - - // release memory in IE - root = form = null; -})(); - -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") - - // Create a fake element - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); - - // Make sure no comments are found - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function( match, context ) { - var results = context.getElementsByTagName( match[1] ); - - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - } - - // Check to see if an attribute returns normalized href attributes - div.innerHTML = "<a href='#'></a>"; - - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { - - Expr.attrHandle.href = function( elem ) { - return elem.getAttribute( "href", 2 ); - }; - } - - // release memory in IE - div = null; -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, - div = document.createElement("div"), - id = "__sizzle__"; - - div.innerHTML = "<p class='TEST'></p>"; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function( query, context, extra, seed ) { - context = context || document; - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && !Sizzle.isXML(context) ) { - // See if we find a selector to speed up - var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); - - if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { - // Speed-up: Sizzle("TAG") - if ( match[1] ) { - return makeArray( context.getElementsByTagName( query ), extra ); - - // Speed-up: Sizzle(".CLASS") - } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { - return makeArray( context.getElementsByClassName( match[2] ), extra ); - } - } - - if ( context.nodeType === 9 ) { - // Speed-up: Sizzle("body") - // The body element only exists once, optimize finding it - if ( query === "body" && context.body ) { - return makeArray( [ context.body ], extra ); - - // Speed-up: Sizzle("#ID") - } else if ( match && match[3] ) { - var elem = context.getElementById( match[3] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id === match[3] ) { - return makeArray( [ elem ], extra ); - } - - } else { - return makeArray( [], extra ); - } - } - - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(qsaError) {} - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - var oldContext = context, - old = context.getAttribute( "id" ), - nid = old || id, - hasParent = context.parentNode, - relativeHierarchySelector = /^\s*[+~]/.test( query ); - - if ( !old ) { - context.setAttribute( "id", nid ); - } else { - nid = nid.replace( /'/g, "\\$&" ); - } - if ( relativeHierarchySelector && hasParent ) { - context = context.parentNode; - } - - try { - if ( !relativeHierarchySelector || hasParent ) { - return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); - } - - } catch(pseudoError) { - } finally { - if ( !old ) { - oldContext.removeAttribute( "id" ); - } - } - } - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - // release memory in IE - div = null; - })(); -} - -(function(){ - var html = document.documentElement, - matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; - - if ( matches ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9 fails this) - var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), - pseudoWorks = false; - - try { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( document.documentElement, "[test!='']:sizzle" ); - - } catch( pseudoError ) { - pseudoWorks = true; - } - - Sizzle.matchesSelector = function( node, expr ) { - // Make sure that attribute selectors are quoted - expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); - - if ( !Sizzle.isXML( node ) ) { - try { - if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { - var ret = matches.call( node, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || !disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9, so check for that - node.document && node.document.nodeType !== 11 ) { - return ret; - } - } - } catch(e) {} - } - - return Sizzle(expr, null, null, [node]).length > 0; - }; - } -})(); - -(function(){ - var div = document.createElement("div"); - - div.innerHTML = "<div class='test e'></div><div class='test'></div>"; - - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } - - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function( match, context, isXML ) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - // release memory in IE - div = null; -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -if ( document.documentElement.contains ) { - Sizzle.contains = function( a, b ) { - return a !== b && (a.contains ? a.contains(b) : true); - }; - -} else if ( document.documentElement.compareDocumentPosition ) { - Sizzle.contains = function( a, b ) { - return !!(a.compareDocumentPosition(b) & 16); - }; - -} else { - Sizzle.contains = function() { - return false; - }; -} - -Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; - - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -var posProcess = function( selector, context ) { - var match, - tmpSet = [], - later = "", - root = context.nodeType ? [context] : context; - - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})(); - - -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - isSimple = /^.[^:#\[\.,]*$/, - slice = Array.prototype.slice, - POS = jQuery.expr.match.POS, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var self = this, - i, l; - - if ( typeof selector !== "string" ) { - return jQuery( selector ).filter(function() { - for ( i = 0, l = self.length; i < l; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }); - } - - var ret = this.pushStack( "", "find", selector ), - length, n, r; - - for ( i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( n = length; n < ret.length; n++ ) { - for ( r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - return !!selector && ( typeof selector === "string" ? - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); - }, - - closest: function( selectors, context ) { - var ret = [], i, l, cur = this[0]; - - // Array - if ( jQuery.isArray( selectors ) ) { - var match, selector, - matches = {}, - level = 1; - - if ( cur && selectors.length ) { - for ( i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; - - if ( !matches[ selector ] ) { - matches[ selector ] = POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; - } - } - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[ selector ]; - - if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) { - ret.push({ selector: selector, elem: cur, level: level }); - } - } - - cur = cur.parentNode; - level++; - } - } - - return ret; - } - - // String - var pos = POS.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( i = 0, l = this.length; i < l; i++ ) { - cur = this[i]; - - while ( cur ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - - } else { - cur = cur.parentNode; - if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { - break; - } - } - } - } - - ret = ret.length > 1 ? jQuery.unique( ret ) : ret; - - return this.pushStack( ret, "closest", selectors ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); - } - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - return this.add( this.prevObject ); - } -}); - -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ), - // The variable 'args' was introduced in - // https://github.com/jquery/jquery/commit/52a0238 - // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. - // http://code.google.com/p/v8/issues/detail?id=1050 - args = slice.call(arguments); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, name, args.join(",") ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - nth: function( cur, result, dir, elem ) { - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { - - // Can't pass null or undefined to indexOf in Firefox 4 - // Set to 0 to skip string check - qualifier = qualifier || 0; - - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -} - - - - -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, - rtagName = /<([\w:]+)/, - rtbody = /<tbody/i, - rhtml = /<|&#?\w+;/, - rnocache = /<(?:script|object|embed|option|style)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /\/(java|ecma)script/i, - rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/, - wrapMap = { - option: [ 1, "<select multiple='multiple'>", "</select>" ], - legend: [ 1, "<fieldset>", "</fieldset>" ], - thead: [ 1, "<table>", "</table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], - area: [ 1, "<map>", "</map>" ], - _default: [ 0, "", "" ] - }; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize <link> and <script> tags normally -if ( !jQuery.support.htmlSerialize ) { - wrapMap._default = [ 1, "div<div>", "</div>" ]; -} - -jQuery.fn.extend({ - text: function( text ) { - if ( jQuery.isFunction(text) ) { - return this.each(function(i) { - var self = jQuery( this ); - - self.text( text.call(this, i, self.text()) ); - }); - } - - if ( typeof text !== "object" && text !== undefined ) { - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - } - - return jQuery.text( this ); - }, - - wrapAll: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapAll( html.call(this, i) ); - }); - } - - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); - - if ( this[0].parentNode ) { - wrap.insertBefore( this[0] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { - elem = elem.firstChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - return this.each(function() { - jQuery( this ).wrapAll( html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - }, - - append: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 ) { - this.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 ) { - this.insertBefore( elem, this.firstChild ); - } - }); - }, - - before: function() { - if ( this[0] && this[0].parentNode ) { - return this.domManip(arguments, false, function( elem ) { - this.parentNode.insertBefore( elem, this ); - }); - } else if ( arguments.length ) { - var set = jQuery(arguments[0]); - set.push.apply( set, this.toArray() ); - return this.pushStack( set, "before", arguments ); - } - }, - - after: function() { - if ( this[0] && this[0].parentNode ) { - return this.domManip(arguments, false, function( elem ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - } else if ( arguments.length ) { - var set = this.pushStack( this, "after", arguments ); - set.push.apply( set, jQuery(arguments[0]).toArray() ); - return set; - } - }, - - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - for ( var i = 0, elem; (elem = this[i]) != null; i++ ) { - if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( elem.getElementsByTagName("*") ); - jQuery.cleanData( [ elem ] ); - } - - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } - } - } - - return this; - }, - - empty: function() { - for ( var i = 0, elem; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( elem.getElementsByTagName("*") ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function () { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - if ( value === undefined ) { - return this[0] && this[0].nodeType === 1 ? - this[0].innerHTML.replace(rinlinejQuery, "") : - null; - - // See if we can take a shortcut and just use innerHTML - } else if ( typeof value === "string" && !rnocache.test( value ) && - (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) && - !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) { - - value = value.replace(rxhtmlTag, "<$1></$2>"); - - try { - for ( var i = 0, l = this.length; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - if ( this[i].nodeType === 1 ) { - jQuery.cleanData( this[i].getElementsByTagName("*") ); - this[i].innerHTML = value; - } - } - - // If using innerHTML throws an exception, use the fallback method - } catch(e) { - this.empty().append( value ); - } - - } else if ( jQuery.isFunction( value ) ) { - this.each(function(i){ - var self = jQuery( this ); - - self.html( value.call(this, i, self.html()) ); - }); - - } else { - this.empty().append( value ); - } - - return this; - }, - - replaceWith: function( value ) { - if ( this[0] && this[0].parentNode ) { - // Make sure that the elements are removed from the DOM before they are inserted - // this can help fix replacing a parent with child elements - if ( jQuery.isFunction( value ) ) { - return this.each(function(i) { - var self = jQuery(this), old = self.html(); - self.replaceWith( value.call( this, i, old ) ); - }); - } - - if ( typeof value !== "string" ) { - value = jQuery( value ).detach(); - } - - return this.each(function() { - var next = this.nextSibling, - parent = this.parentNode; - - jQuery( this ).remove(); - - if ( next ) { - jQuery(next).before( value ); - } else { - jQuery(parent).append( value ); - } - }); - } else { - return this.length ? - this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : - this; - } - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, table, callback ) { - var results, first, fragment, parent, - value = args[0], - scripts = []; - - // We can't cloneNode fragments that contain checked, in WebKit - if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) { - return this.each(function() { - jQuery(this).domManip( args, table, callback, true ); - }); - } - - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - args[0] = value.call(this, i, table ? self.html() : undefined); - self.domManip( args, table, callback ); - }); - } - - if ( this[0] ) { - parent = value && value.parentNode; - - // If we're in a fragment, just use that instead of building a new one - if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) { - results = { fragment: parent }; - - } else { - results = jQuery.buildFragment( args, this, scripts ); - } - - fragment = results.fragment; - - if ( fragment.childNodes.length === 1 ) { - first = fragment = fragment.firstChild; - } else { - first = fragment.firstChild; - } - - if ( first ) { - table = table && jQuery.nodeName( first, "tr" ); - - for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) { - callback.call( - table ? - root(this[i], first) : - this[i], - // Make sure that we do not leak memory by inadvertently discarding - // the original fragment (which might have attached data) instead of - // using it; in addition, use the original fragment object for the last - // item instead of first because it can end up being emptied incorrectly - // in certain situations (Bug #8070). - // Fragments from the fragment cache must always be cloned and never used - // in place. - results.cacheable || (l > 1 && i < lastIndex) ? - jQuery.clone( fragment, true, true ) : - fragment - ); - } - } - - if ( scripts.length ) { - jQuery.each( scripts, evalScript ); - } - } - - return this; - } -}); - -function root( elem, cur ) { - return jQuery.nodeName(elem, "table") ? - (elem.getElementsByTagName("tbody")[0] || - elem.appendChild(elem.ownerDocument.createElement("tbody"))) : - elem; -} - -function cloneCopyEvent( src, dest ) { - - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } - - var internalKey = jQuery.expando, - oldData = jQuery.data( src ), - curData = jQuery.data( dest, oldData ); - - // Switch to use the internal data object, if it exists, for the next - // stage of data copying - if ( (oldData = oldData[ internalKey ]) ) { - var events = oldData.events; - curData = curData[ internalKey ] = jQuery.extend({}, oldData); - - if ( events ) { - delete curData.handle; - curData.events = {}; - - for ( var type in events ) { - for ( var i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data ); - } - } - } - } -} - -function cloneFixAttributes( src, dest ) { - var nodeName; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - // clearAttributes removes the attributes, which we don't want, - // but also removes the attachEvent events, which we *do* want - if ( dest.clearAttributes ) { - dest.clearAttributes(); - } - - // mergeAttributes, in contrast, only merges back on the - // original attributes, not the events - if ( dest.mergeAttributes ) { - dest.mergeAttributes( src ); - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 fail to clone children inside object elements that use - // the proprietary classid attribute value (rather than the type - // attribute) to identify the type of content to display - if ( nodeName === "object" ) { - dest.outerHTML = src.outerHTML; - - } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - if ( src.checked ) { - dest.defaultChecked = dest.checked = src.checked; - } - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } - - // Event data gets referenced instead of copied if the expando - // gets copied too - dest.removeAttribute( jQuery.expando ); -} - -jQuery.buildFragment = function( args, nodes, scripts ) { - var fragment, cacheable, cacheresults, doc; - - // nodes may contain either an explicit document object, - // a jQuery collection or context object. - // If nodes[0] contains a valid object to assign to doc - if ( nodes && nodes[0] ) { - doc = nodes[0].ownerDocument || nodes[0]; - } - - // Ensure that an attr object doesn't incorrectly stand in as a document object - // Chrome and Firefox seem to allow this to occur and will throw exception - // Fixes #8950 - if ( !doc.createDocumentFragment ) { - doc = document; - } - - // Only cache "small" (1/2 KB) HTML strings that are associated with the main document - // Cloning options loses the selected state, so don't cache them - // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment - // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache - if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document && - args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) { - - cacheable = true; - - cacheresults = jQuery.fragments[ args[0] ]; - if ( cacheresults && cacheresults !== 1 ) { - fragment = cacheresults; - } - } - - if ( !fragment ) { - fragment = doc.createDocumentFragment(); - jQuery.clean( args, doc, fragment, scripts ); - } - - if ( cacheable ) { - jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1; - } - - return { fragment: fragment, cacheable: cacheable }; -}; - -jQuery.fragments = {}; - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var ret = [], - insert = jQuery( selector ), - parent = this.length === 1 && this[0].parentNode; - - if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) { - insert[ original ]( this[0] ); - return this; - - } else { - for ( var i = 0, l = insert.length; i < l; i++ ) { - var elems = (i > 0 ? this.clone(true) : this).get(); - jQuery( insert[i] )[ original ]( elems ); - ret = ret.concat( elems ); - } - - return this.pushStack( ret, name, insert.selector ); - } - }; -}); - -function getAll( elem ) { - if ( "getElementsByTagName" in elem ) { - return elem.getElementsByTagName( "*" ); - - } else if ( "querySelectorAll" in elem ) { - return elem.querySelectorAll( "*" ); - - } else { - return []; - } -} - -// Used in clean, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( elem.type === "checkbox" || elem.type === "radio" ) { - elem.defaultChecked = elem.checked; - } -} -// Finds all inputs and passes them to fixDefaultChecked -function findInputs( elem ) { - if ( jQuery.nodeName( elem, "input" ) ) { - fixDefaultChecked( elem ); - } else if ( "getElementsByTagName" in elem ) { - jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var clone = elem.cloneNode(true), - srcElements, - destElements, - i; - - if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - // IE copies events bound via attachEvent when using cloneNode. - // Calling detachEvent on the clone will also remove the events - // from the original. In order to get around this, we use some - // proprietary methods to clear the events. Thanks to MooTools - // guys for this hotness. - - cloneFixAttributes( elem, clone ); - - // Using Sizzle here is crazy slow, so we use getElementsByTagName - // instead - srcElements = getAll( elem ); - destElements = getAll( clone ); - - // Weird iteration because IE will replace the length property - // with an element if you are cloning the body and one of the - // elements on the page has a name or id of "length" - for ( i = 0; srcElements[i]; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - cloneFixAttributes( srcElements[i], destElements[i] ); - } - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - cloneCopyEvent( elem, clone ); - - if ( deepDataAndEvents ) { - srcElements = getAll( elem ); - destElements = getAll( clone ); - - for ( i = 0; srcElements[i]; ++i ) { - cloneCopyEvent( srcElements[i], destElements[i] ); - } - } - } - - srcElements = destElements = null; - - // Return the cloned set - return clone; - }, - - clean: function( elems, context, fragment, scripts ) { - var checkScriptType; - - context = context || document; - - // !context.createElement fails in IE with an error but returns typeof 'object' - if ( typeof context.createElement === "undefined" ) { - context = context.ownerDocument || context[0] && context[0].ownerDocument || document; - } - - var ret = [], j; - - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - if ( typeof elem === "number" ) { - elem += ""; - } - - if ( !elem ) { - continue; - } - - // Convert html string into DOM nodes - if ( typeof elem === "string" ) { - if ( !rhtml.test( elem ) ) { - elem = context.createTextNode( elem ); - } else { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(rxhtmlTag, "<$1></$2>"); - - // Trim whitespace, otherwise indexOf won't work as expected - var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(), - wrap = wrapMap[ tag ] || wrapMap._default, - depth = wrap[0], - div = context.createElement("div"); - - // Go to html and back, then peel off extra wrappers - div.innerHTML = wrap[1] + elem + wrap[2]; - - // Move to the right depth - while ( depth-- ) { - div = div.lastChild; - } - - // Remove IE's autoinserted <tbody> from table fragments - if ( !jQuery.support.tbody ) { - - // String was a <table>, *may* have spurious <tbody> - var hasBody = rtbody.test(elem), - tbody = tag === "table" && !hasBody ? - div.firstChild && div.firstChild.childNodes : - - // String was a bare <thead> or <tfoot> - wrap[1] === "<table>" && !hasBody ? - div.childNodes : - []; - - for ( j = tbody.length - 1; j >= 0 ; --j ) { - if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { - tbody[ j ].parentNode.removeChild( tbody[ j ] ); - } - } - } - - // IE completely kills leading whitespace when innerHTML is used - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); - } - - elem = div.childNodes; - } - } - - // Resets defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - var len; - if ( !jQuery.support.appendChecked ) { - if ( elem[0] && typeof (len = elem.length) === "number" ) { - for ( j = 0; j < len; j++ ) { - findInputs( elem[j] ); - } - } else { - findInputs( elem ); - } - } - - if ( elem.nodeType ) { - ret.push( elem ); - } else { - ret = jQuery.merge( ret, elem ); - } - } - - if ( fragment ) { - checkScriptType = function( elem ) { - return !elem.type || rscriptType.test( elem.type ); - }; - for ( i = 0; ret[i]; i++ ) { - if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { - scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); - - } else { - if ( ret[i].nodeType === 1 ) { - var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType ); - - ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); - } - fragment.appendChild( ret[i] ); - } - } - } - - return ret; - }, - - cleanData: function( elems ) { - var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special, - deleteExpando = jQuery.support.deleteExpando; - - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { - continue; - } - - id = elem[ jQuery.expando ]; - - if ( id ) { - data = cache[ id ] && cache[ id ][ internalKey ]; - - if ( data && data.events ) { - for ( var type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - - // Null the DOM reference to avoid IE6/7/8 leak (#7054) - if ( data.handle ) { - data.handle.elem = null; - } - } - - if ( deleteExpando ) { - delete elem[ jQuery.expando ]; - - } else if ( elem.removeAttribute ) { - elem.removeAttribute( jQuery.expando ); - } - - delete cache[ id ]; - } - } - } -}); - -function evalScript( i, elem ) { - if ( elem.src ) { - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - } else { - jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) ); - } - - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } -} - - - - -var ralpha = /alpha\([^)]*\)/i, - ropacity = /opacity=([^)]*)/, - // fixed for IE9, see #8346 - rupper = /([A-Z]|^ms)/g, - rnumpx = /^-?\d+(?:px)?$/i, - rnum = /^-?\d/, - rrelNum = /^([\-+])=([\-+.\de]+)/, - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssWidth = [ "Left", "Right" ], - cssHeight = [ "Top", "Bottom" ], - curCSS, - - getComputedStyle, - currentStyle; - -jQuery.fn.css = function( name, value ) { - // Setting 'undefined' is a no-op - if ( arguments.length === 2 && value === undefined ) { - return this; - } - - return jQuery.access( this, name, value, true, function( elem, name, value ) { - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }); -}; - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity", "opacity" ); - return ret === "" ? "1" : ret; - - } else { - return elem.style.opacity; - } - } - } - }, - - // Exclude the following css properties to add px - cssNumber: { - "fillOpacity": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, origName = jQuery.camelCase( name ), - style = elem.style, hooks = jQuery.cssHooks[ origName ]; - - name = jQuery.cssProps[ origName ] || origName; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that NaN and null values aren't set. See: #7116 - if ( value == null || type === "number" && isNaN( value ) ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) { - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra ) { - var ret, hooks; - - // Make sure that we're working with the right name - name = jQuery.camelCase( name ); - hooks = jQuery.cssHooks[ name ]; - name = jQuery.cssProps[ name ] || name; - - // cssFloat needs a special treatment - if ( name === "cssFloat" ) { - name = "float"; - } - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) { - return ret; - - // Otherwise, if a way to get the computed value exists, use that - } else if ( curCSS ) { - return curCSS( elem, name ); - } - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback ) { - var old = {}; - - // Remember the old values, and insert the new ones - for ( var name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - } -}); - -// DEPRECATED, Use jQuery.css() instead -jQuery.curCSS = jQuery.css; - -jQuery.each(["height", "width"], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - var val; - - if ( computed ) { - if ( elem.offsetWidth !== 0 ) { - return getWH( elem, name, extra ); - } else { - jQuery.swap( elem, cssShow, function() { - val = getWH( elem, name, extra ); - }); - } - - return val; - } - }, - - set: function( elem, value ) { - if ( rnumpx.test( value ) ) { - // ignore negative width and height values #1599 - value = parseFloat( value ); - - if ( value >= 0 ) { - return value + "px"; - } - - } else { - return value; - } - } - }; -}); - -if ( !jQuery.support.opacity ) { - jQuery.cssHooks.opacity = { - get: function( elem, computed ) { - // IE uses filters for opacity - return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? - ( parseFloat( RegExp.$1 ) / 100 ) + "" : - computed ? "1" : ""; - }, - - set: function( elem, value ) { - var style = elem.style, - currentStyle = elem.currentStyle, - opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")", - filter = currentStyle && currentStyle.filter || style.filter || ""; - - // IE has trouble with opacity if it does not have layout - // Force it by setting the zoom level - style.zoom = 1; - - // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 - if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) { - - // Setting style.filter to null, "" & " " still leave "filter:" in the cssText - // if "filter:" is present at all, clearType is disabled, we want to avoid this - // style.removeAttribute is IE Only, but so apparently is this code path... - style.removeAttribute( "filter" ); - - // if there there is no filter style applied in a css rule, we are done - if ( currentStyle && !currentStyle.filter ) { - return; - } - } - - // otherwise, set new filter values - style.filter = ralpha.test( filter ) ? - filter.replace( ralpha, opacity ) : - filter + " " + opacity; - } - }; -} - -jQuery(function() { - // This hook cannot be added until DOM ready because the support test - // for it is not run until after DOM ready - if ( !jQuery.support.reliableMarginRight ) { - jQuery.cssHooks.marginRight = { - get: function( elem, computed ) { - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // Work around by temporarily setting element display to inline-block - var ret; - jQuery.swap( elem, { "display": "inline-block" }, function() { - if ( computed ) { - ret = curCSS( elem, "margin-right", "marginRight" ); - } else { - ret = elem.style.marginRight; - } - }); - return ret; - } - }; - } -}); - -if ( document.defaultView && document.defaultView.getComputedStyle ) { - getComputedStyle = function( elem, name ) { - var ret, defaultView, computedStyle; - - name = name.replace( rupper, "-$1" ).toLowerCase(); - - if ( !(defaultView = elem.ownerDocument.defaultView) ) { - return undefined; - } - - if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) { - ret = computedStyle.getPropertyValue( name ); - if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) { - ret = jQuery.style( elem, name ); - } - } - - return ret; - }; -} - -if ( document.documentElement.currentStyle ) { - currentStyle = function( elem, name ) { - var left, - ret = elem.currentStyle && elem.currentStyle[ name ], - rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ], - style = elem.style; - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - if ( !rnumpx.test( ret ) && rnum.test( ret ) ) { - // Remember the original values - left = style.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - elem.runtimeStyle.left = elem.currentStyle.left; - } - style.left = name === "fontSize" ? "1em" : (ret || 0); - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - elem.runtimeStyle.left = rsLeft; - } - } - - return ret === "" ? "auto" : ret; - }; -} - -curCSS = getComputedStyle || currentStyle; - -function getWH( elem, name, extra ) { - - // Start with offset property - var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - which = name === "width" ? cssWidth : cssHeight; - - if ( val > 0 ) { - if ( extra !== "border" ) { - jQuery.each( which, function() { - if ( !extra ) { - val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0; - } - if ( extra === "margin" ) { - val += parseFloat( jQuery.css( elem, extra + this ) ) || 0; - } else { - val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0; - } - }); - } - - return val + "px"; - } - - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, name ); - if ( val < 0 || val == null ) { - val = elem.style[ name ] || 0; - } - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - - // Add padding, border, margin - if ( extra ) { - jQuery.each( which, function() { - val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0; - if ( extra !== "padding" ) { - val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0; - } - if ( extra === "margin" ) { - val += parseFloat( jQuery.css( elem, extra + this ) ) || 0; - } - }); - } - - return val + "px"; -} - -if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.hidden = function( elem ) { - var width = elem.offsetWidth, - height = elem.offsetHeight; - - return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none"); - }; - - jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); - }; -} - - - - -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rhash = /#.*$/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL - rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rquery = /\?/, - rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, - rselectTextarea = /^(?:select|textarea)/i, - rspacesAjax = /\s+/, - rts = /([?&])_=[^&]*/, - rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/, - - // Keep a copy of the old load method - _load = jQuery.fn.load, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Document location - ajaxLocation, - - // Document location segments - ajaxLocParts, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = ["*/"] + ["*"]; - -// #8138, IE may throw an exception when accessing -// a field from window.location if document.domain has been set -try { - ajaxLocation = location.href; -} catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement( "a" ); - ajaxLocation.href = ""; - ajaxLocation = ajaxLocation.href; -} - -// Segment location into parts -ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - if ( jQuery.isFunction( func ) ) { - var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ), - i = 0, - length = dataTypes.length, - dataType, - list, - placeBefore; - - // For each dataType in the dataTypeExpression - for(; i < length; i++ ) { - dataType = dataTypes[ i ]; - // We control if we're asked to add before - // any existing element - placeBefore = /^\+/.test( dataType ); - if ( placeBefore ) { - dataType = dataType.substr( 1 ) || "*"; - } - list = structure[ dataType ] = structure[ dataType ] || []; - // then we add to the structure accordingly - list[ placeBefore ? "unshift" : "push" ]( func ); - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, - dataType /* internal */, inspected /* internal */ ) { - - dataType = dataType || options.dataTypes[ 0 ]; - inspected = inspected || {}; - - inspected[ dataType ] = true; - - var list = structure[ dataType ], - i = 0, - length = list ? list.length : 0, - executeOnly = ( structure === prefilters ), - selection; - - for(; i < length && ( executeOnly || !selection ); i++ ) { - selection = list[ i ]( options, originalOptions, jqXHR ); - // If we got redirected to another dataType - // we try there if executing only and not done already - if ( typeof selection === "string" ) { - if ( !executeOnly || inspected[ selection ] ) { - selection = undefined; - } else { - options.dataTypes.unshift( selection ); - selection = inspectPrefiltersOrTransports( - structure, options, originalOptions, jqXHR, selection, inspected ); - } - } - } - // If we're only executing or nothing was selected - // we try the catchall dataType if not done already - if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { - selection = inspectPrefiltersOrTransports( - structure, options, originalOptions, jqXHR, "*", inspected ); - } - // unnecessary when only executing (prefilters) - // but it'll be ignored by the caller in that case - return selection; -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - for( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } -} - -jQuery.fn.extend({ - load: function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - - // Don't do a request if no elements are being requested - } else if ( !this.length ) { - return this; - } - - var off = url.indexOf( " " ); - if ( off >= 0 ) { - var selector = url.slice( off, url.length ); - url = url.slice( 0, off ); - } - - // Default to a GET request - var type = "GET"; - - // If the second parameter was provided - if ( params ) { - // If it's a function - if ( jQuery.isFunction( params ) ) { - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( typeof params === "object" ) { - params = jQuery.param( params, jQuery.ajaxSettings.traditional ); - type = "POST"; - } - } - - var self = this; - - // Request the remote document - jQuery.ajax({ - url: url, - type: type, - dataType: "html", - data: params, - // Complete callback (responseText is used internally) - complete: function( jqXHR, status, responseText ) { - // Store the response as specified by the jqXHR object - responseText = jqXHR.responseText; - // If successful, inject the HTML into all the matched elements - if ( jqXHR.isResolved() ) { - // #4825: Get the actual response in case - // a dataFilter is present in ajaxSettings - jqXHR.done(function( r ) { - responseText = r; - }); - // See if a selector was specified - self.html( selector ? - // Create a dummy div to hold the results - jQuery("<div>") - // inject the contents of the document in, removing the scripts - // to avoid any 'Permission Denied' errors in IE - .append(responseText.replace(rscript, "")) - - // Locate the specified elements - .find(selector) : - - // If not, just inject the full result - responseText ); - } - - if ( callback ) { - self.each( callback, [ responseText, status, jqXHR ] ); - } - } - }); - - return this; - }, - - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - - serializeArray: function() { - return this.map(function(){ - return this.elements ? jQuery.makeArray( this.elements ) : this; - }) - .filter(function(){ - return this.name && !this.disabled && - ( this.checked || rselectTextarea.test( this.nodeName ) || - rinput.test( this.type ) ); - }) - .map(function( i, elem ){ - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val, i ){ - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ - jQuery.fn[ o ] = function( f ){ - return this.bind( o, f ); - }; -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - type: method, - url: url, - data: data, - success: callback, - dataType: type - }); - }; -}); - -jQuery.extend({ - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - if ( settings ) { - // Building a settings object - ajaxExtend( target, jQuery.ajaxSettings ); - } else { - // Extending ajaxSettings - settings = target; - target = jQuery.ajaxSettings; - } - ajaxExtend( target, settings ); - return target; - }, - - ajaxSettings: { - url: ajaxLocation, - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - type: "GET", - contentType: "application/x-www-form-urlencoded", - processData: true, - async: true, - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - traditional: false, - headers: {}, - */ - - accepts: { - xml: "application/xml, text/xml", - html: "text/html", - text: "text/plain", - json: "application/json, text/javascript", - "*": allTypes - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText" - }, - - // List of data converters - // 1) key format is "source_type destination_type" (a single space in-between) - // 2) the catchall symbol "*" can be used for source_type - converters: { - - // Convert anything to text - "* text": window.String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - context: true, - url: true - } - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events - // It's the callbackContext if one was provided in the options - // and if it's a DOM node or a jQuery collection - globalEventContext = callbackContext !== s && - ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? - jQuery( callbackContext ) : jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery._Deferred(), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // ifModified key - ifModifiedKey, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // Response headers - responseHeadersString, - responseHeaders, - // transport - transport, - // timeout handle - timeoutTimer, - // Cross-domain detection vars - parts, - // The jqXHR state - state = 0, - // To know if global events are to be dispatched - fireGlobals, - // Loop variable - i, - // Fake xhr - jqXHR = { - - readyState: 0, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( !state ) { - var lname = name.toLowerCase(); - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match === undefined ? null : match; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - statusText = statusText || "abort"; - if ( transport ) { - transport.abort( statusText ); - } - done( 0, statusText ); - return this; - } - }; - - // Callback for when everything is done - // It is defined here because jslint complains if it is declared - // at the end of the function (which would be more logical and readable) - function done( status, nativeStatusText, responses, headers ) { - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - var isSuccess, - success, - error, - statusText = nativeStatusText, - response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined, - lastModified, - etag; - - // If successful, handle type chaining - if ( status >= 200 && status < 300 || status === 304 ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - - if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) { - jQuery.lastModified[ ifModifiedKey ] = lastModified; - } - if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) { - jQuery.etag[ ifModifiedKey ] = etag; - } - } - - // If not modified - if ( status === 304 ) { - - statusText = "notmodified"; - isSuccess = true; - - // If we have data - } else { - - try { - success = ajaxConvert( s, response ); - statusText = "success"; - isSuccess = true; - } catch(e) { - // We have a parsererror - statusText = "parsererror"; - error = e; - } - } - } else { - // We extract error from statusText - // then normalize statusText and status for non-aborts - error = statusText; - if( !statusText || status ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = "" + ( nativeStatusText || statusText ); - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - // Attach deferreds - deferred.promise( jqXHR ); - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - jqXHR.complete = completeDeferred.done; - - // Status-dependent callbacks - jqXHR.statusCode = function( map ) { - if ( map ) { - var tmp; - if ( state < 2 ) { - for( tmp in map ) { - statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; - } - } else { - tmp = map[ jqXHR.status ]; - jqXHR.then( tmp, tmp ); - } - } - return this; - }; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) - // We also use the url parameter if available - s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax ); - - // Determine if a cross-domain request is in order - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefiler, stop there - if ( state === 2 ) { - return false; - } - - // We can fire global events as of now if asked to - fireGlobals = s.global; - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Get ifModifiedKey before adding the anti-cache parameter - ifModifiedKey = s.url; - - // Add anti-cache in url if needed - if ( s.cache === false ) { - - var ts = jQuery.now(), - // try replacing _= if it is there - ret = s.url.replace( rts, "$1_=" + ts ); - - // if nothing was replaced, add timestamp to the end - s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - ifModifiedKey = ifModifiedKey || s.url; - if ( jQuery.lastModified[ ifModifiedKey ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); - } - if ( jQuery.etag[ ifModifiedKey ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); - } - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already - jqXHR.abort(); - return false; - - } - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout( function(){ - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch (e) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - jQuery.error( e ); - } - } - } - - return jqXHR; - }, - - // Serialize an array of form elements or a set of - // key/values into a query string - param: function( a, traditional ) { - var s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : value; - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( var prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); - } -}); - -function buildParams( prefix, obj, traditional, add ) { - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // If array item is non-scalar (array or object), encode its - // numeric index to resolve deserialization ambiguity issues. - // Note that rack (as of 1.0.0) can't currently deserialize - // nested arrays properly, and attempting to do so may cause - // a server error. Possible fixes are to modify rack's - // deserialization algorithm or to provide an option or flag - // to force array serialization to be shallow. - buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && obj != null && typeof obj === "object" ) { - // Serialize object item. - for ( var name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} - -// This is still on the jQuery object... for now -// Want to move this to jQuery.ajax some day -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {} - -}); - -/* Handles responses to an ajax request: - * - sets all responseXXX fields accordingly - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var contents = s.contents, - dataTypes = s.dataTypes, - responseFields = s.responseFields, - ct, - type, - finalDataType, - firstDataType; - - // Fill responseXXX fields - for( type in responseFields ) { - if ( type in responses ) { - jqXHR[ responseFields[type] ] = responses[ type ]; - } - } - - // Remove auto dataType and get content-type in the process - while( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -// Chain conversions given the request and the original response -function ajaxConvert( s, response ) { - - // Apply the dataFilter if provided - if ( s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - var dataTypes = s.dataTypes, - converters = {}, - i, - key, - length = dataTypes.length, - tmp, - // Current and previous dataTypes - current = dataTypes[ 0 ], - prev, - // Conversion expression - conversion, - // Conversion function - conv, - // Conversion functions (transitive conversion) - conv1, - conv2; - - // For each dataType in the chain - for( i = 1; i < length; i++ ) { - - // Create converters map - // with lowercased keys - if ( i === 1 ) { - for( key in s.converters ) { - if( typeof key === "string" ) { - converters[ key.toLowerCase() ] = s.converters[ key ]; - } - } - } - - // Get the dataTypes - prev = current; - current = dataTypes[ i ]; - - // If current is auto dataType, update it to prev - if( current === "*" ) { - current = prev; - // If no auto and dataTypes are actually different - } else if ( prev !== "*" && prev !== current ) { - - // Get the converter - conversion = prev + " " + current; - conv = converters[ conversion ] || converters[ "* " + current ]; - - // If there is no direct converter, search transitively - if ( !conv ) { - conv2 = undefined; - for( conv1 in converters ) { - tmp = conv1.split( " " ); - if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) { - conv2 = converters[ tmp[1] + " " + current ]; - if ( conv2 ) { - conv1 = converters[ conv1 ]; - if ( conv1 === true ) { - conv = conv2; - } else if ( conv2 === true ) { - conv = conv1; - } - break; - } - } - } - } - // If we found no converter, dispatch an error - if ( !( conv || conv2 ) ) { - jQuery.error( "No conversion from " + conversion.replace(" "," to ") ); - } - // If found converter is not an equivalence - if ( conv !== true ) { - // Convert with 1 or 2 converters accordingly - response = conv ? conv( response ) : conv2( conv1(response) ); - } - } - } - return response; -} - - - - -var jsc = jQuery.now(), - jsre = /(\=)\?(&|$)|\?\?/i; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - return jQuery.expando + "_" + ( jsc++ ); - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var inspectData = s.contentType === "application/x-www-form-urlencoded" && - ( typeof s.data === "string" ); - - if ( s.dataTypes[ 0 ] === "jsonp" || - s.jsonp !== false && ( jsre.test( s.url ) || - inspectData && jsre.test( s.data ) ) ) { - - var responseContainer, - jsonpCallback = s.jsonpCallback = - jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback, - previous = window[ jsonpCallback ], - url = s.url, - data = s.data, - replace = "$1" + jsonpCallback + "$2"; - - if ( s.jsonp !== false ) { - url = url.replace( jsre, replace ); - if ( s.url === url ) { - if ( inspectData ) { - data = data.replace( jsre, replace ); - } - if ( s.data === data ) { - // Add callback manually - url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback; - } - } - } - - s.url = url; - s.data = data; - - // Install callback - window[ jsonpCallback ] = function( response ) { - responseContainer = [ response ]; - }; - - // Clean-up function - jqXHR.always(function() { - // Set callback back to previous value - window[ jsonpCallback ] = previous; - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( previous ) ) { - window[ jsonpCallback ]( responseContainer[ 0 ] ); - } - }); - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( jsonpCallback + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Delegate to script - return "script"; - } -}); - - - - -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /javascript|ecmascript/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and global -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - s.global = false; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function(s) { - - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - - var script, - head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; - - return { - - send: function( _, callback ) { - - script = document.createElement( "script" ); - - script.async = "async"; - - if ( s.scriptCharset ) { - script.charset = s.scriptCharset; - } - - script.src = s.url; - - // Attach handlers for all browsers - script.onload = script.onreadystatechange = function( _, isAbort ) { - - if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { - - // Handle memory leak in IE - script.onload = script.onreadystatechange = null; - - // Remove the script - if ( head && script.parentNode ) { - head.removeChild( script ); - } - - // Dereference the script - script = undefined; - - // Callback if not abort - if ( !isAbort ) { - callback( 200, "success" ); - } - } - }; - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709 and #4378). - head.insertBefore( script, head.firstChild ); - }, - - abort: function() { - if ( script ) { - script.onload( 0, 1 ); - } - } - }; - } -}); - - - - -var // #5280: Internet Explorer will keep connections alive if we don't abort on unload - xhrOnUnloadAbort = window.ActiveXObject ? function() { - // Abort all pending requests - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ]( 0, 1 ); - } - } : false, - xhrId = 0, - xhrCallbacks; - -// Functions to create xhrs -function createStandardXHR() { - try { - return new window.XMLHttpRequest(); - } catch( e ) {} -} - -function createActiveXHR() { - try { - return new window.ActiveXObject( "Microsoft.XMLHTTP" ); - } catch( e ) {} -} - -// Create the request object -// (This is still attached to ajaxSettings for backward compatibility) -jQuery.ajaxSettings.xhr = window.ActiveXObject ? - /* Microsoft failed to properly - * implement the XMLHttpRequest in IE7 (can't request local files), - * so we use the ActiveXObject when it is available - * Additionally XMLHttpRequest can be disabled in IE7/IE8 so - * we need a fallback. - */ - function() { - return !this.isLocal && createStandardXHR() || createActiveXHR(); - } : - // For all other browsers, use the standard XMLHttpRequest object - createStandardXHR; - -// Determine support properties -(function( xhr ) { - jQuery.extend( jQuery.support, { - ajax: !!xhr, - cors: !!xhr && ( "withCredentials" in xhr ) - }); -})( jQuery.ajaxSettings.xhr() ); - -// Create transport if the browser can provide an xhr -if ( jQuery.support.ajax ) { - - jQuery.ajaxTransport(function( s ) { - // Cross domain only allowed if supported through XMLHttpRequest - if ( !s.crossDomain || jQuery.support.cors ) { - - var callback; - - return { - send: function( headers, complete ) { - - // Get a new xhr - var xhr = s.xhr(), - handle, - i; - - // Open the socket - // Passing null username, generates a login popup on Opera (#2865) - if ( s.username ) { - xhr.open( s.type, s.url, s.async, s.username, s.password ); - } else { - xhr.open( s.type, s.url, s.async ); - } - - // Apply custom fields if provided - if ( s.xhrFields ) { - for ( i in s.xhrFields ) { - xhr[ i ] = s.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( s.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( s.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !s.crossDomain && !headers["X-Requested-With"] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Need an extra try/catch for cross domain requests in Firefox 3 - try { - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - } catch( _ ) {} - - // Do send the request - // This may raise an exception which is actually - // handled in jQuery.ajax (so no try/catch here) - xhr.send( ( s.hasContent && s.data ) || null ); - - // Listener - callback = function( _, isAbort ) { - - var status, - statusText, - responseHeaders, - responses, - xml; - - // Firefox throws exceptions when accessing properties - // of an xhr when a network error occured - // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) - try { - - // Was never called and is aborted or complete - if ( callback && ( isAbort || xhr.readyState === 4 ) ) { - - // Only called once - callback = undefined; - - // Do not keep as active anymore - if ( handle ) { - xhr.onreadystatechange = jQuery.noop; - if ( xhrOnUnloadAbort ) { - delete xhrCallbacks[ handle ]; - } - } - - // If it's an abort - if ( isAbort ) { - // Abort it manually if needed - if ( xhr.readyState !== 4 ) { - xhr.abort(); - } - } else { - status = xhr.status; - responseHeaders = xhr.getAllResponseHeaders(); - responses = {}; - xml = xhr.responseXML; - - // Construct response list - if ( xml && xml.documentElement /* #4958 */ ) { - responses.xml = xml; - } - responses.text = xhr.responseText; - - // Firefox throws an exception when accessing - // statusText for faulty cross-domain requests - try { - statusText = xhr.statusText; - } catch( e ) { - // We normalize with Webkit giving an empty statusText - statusText = ""; - } - - // Filter status for non standard behaviors - - // If the request is local and we have data: assume a success - // (success with no data won't get notified, that's the best we - // can do given current implementations) - if ( !status && s.isLocal && !s.crossDomain ) { - status = responses.text ? 200 : 404; - // IE - #1450: sometimes returns 1223 when it should be 204 - } else if ( status === 1223 ) { - status = 204; - } - } - } - } catch( firefoxAccessException ) { - if ( !isAbort ) { - complete( -1, firefoxAccessException ); - } - } - - // Call complete if needed - if ( responses ) { - complete( status, statusText, responses, responseHeaders ); - } - }; - - // if we're in sync mode or it's in cache - // and has been retrieved directly (IE6 & IE7) - // we need to manually fire the callback - if ( !s.async || xhr.readyState === 4 ) { - callback(); - } else { - handle = ++xhrId; - if ( xhrOnUnloadAbort ) { - // Create the active xhrs callbacks list if needed - // and attach the unload handler - if ( !xhrCallbacks ) { - xhrCallbacks = {}; - jQuery( window ).unload( xhrOnUnloadAbort ); - } - // Add to list of active xhrs callbacks - xhrCallbacks[ handle ] = callback; - } - xhr.onreadystatechange = callback; - } - }, - - abort: function() { - if ( callback ) { - callback(0,1); - } - } - }; - } - }); -} - - - - -var elemdisplay = {}, - iframe, iframeDoc, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i, - timerId, - fxAttrs = [ - // height animations - [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ], - // width animations - [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ], - // opacity animations - [ "opacity" ] - ], - fxNow; - -jQuery.fn.extend({ - show: function( speed, easing, callback ) { - var elem, display; - - if ( speed || speed === 0 ) { - return this.animate( genFx("show", 3), speed, easing, callback); - - } else { - for ( var i = 0, j = this.length; i < j; i++ ) { - elem = this[i]; - - if ( elem.style ) { - display = elem.style.display; - - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !jQuery._data(elem, "olddisplay") && display === "none" ) { - display = elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( display === "" && jQuery.css( elem, "display" ) === "none" ) { - jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName)); - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( i = 0; i < j; i++ ) { - elem = this[i]; - - if ( elem.style ) { - display = elem.style.display; - - if ( display === "" || display === "none" ) { - elem.style.display = jQuery._data(elem, "olddisplay") || ""; - } - } - } - - return this; - } - }, - - hide: function( speed, easing, callback ) { - if ( speed || speed === 0 ) { - return this.animate( genFx("hide", 3), speed, easing, callback); - - } else { - for ( var i = 0, j = this.length; i < j; i++ ) { - if ( this[i].style ) { - var display = jQuery.css( this[i], "display" ); - - if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) { - jQuery._data( this[i], "olddisplay", display ); - } - } - } - - // Set the display of the elements in a second loop - // to avoid the constant reflow - for ( i = 0; i < j; i++ ) { - if ( this[i].style ) { - this[i].style.display = "none"; - } - } - - return this; - } - }, - - // Save the old toggle function - _toggle: jQuery.fn.toggle, - - toggle: function( fn, fn2, callback ) { - var bool = typeof fn === "boolean"; - - if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) { - this._toggle.apply( this, arguments ); - - } else if ( fn == null || bool ) { - this.each(function() { - var state = bool ? fn : jQuery(this).is(":hidden"); - jQuery(this)[ state ? "show" : "hide" ](); - }); - - } else { - this.animate(genFx("toggle", 3), fn, fn2, callback); - } - - return this; - }, - - fadeTo: function( speed, to, easing, callback ) { - return this.filter(":hidden").css("opacity", 0).show().end() - .animate({opacity: to}, speed, easing, callback); - }, - - animate: function( prop, speed, easing, callback ) { - var optall = jQuery.speed(speed, easing, callback); - - if ( jQuery.isEmptyObject( prop ) ) { - return this.each( optall.complete, [ false ] ); - } - - // Do not change referenced properties as per-property easing will be lost - prop = jQuery.extend( {}, prop ); - - return this[ optall.queue === false ? "each" : "queue" ](function() { - // XXX 'this' does not always have a nodeName when running the - // test suite - - if ( optall.queue === false ) { - jQuery._mark( this ); - } - - var opt = jQuery.extend( {}, optall ), - isElement = this.nodeType === 1, - hidden = isElement && jQuery(this).is(":hidden"), - name, val, p, - display, e, - parts, start, end, unit; - - // will store per property easing and be used to determine when an animation is complete - opt.animatedProperties = {}; - - for ( p in prop ) { - - // property name normalization - name = jQuery.camelCase( p ); - if ( p !== name ) { - prop[ name ] = prop[ p ]; - delete prop[ p ]; - } - - val = prop[ name ]; - - // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) - if ( jQuery.isArray( val ) ) { - opt.animatedProperties[ name ] = val[ 1 ]; - val = prop[ name ] = val[ 0 ]; - } else { - opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing'; - } - - if ( val === "hide" && hidden || val === "show" && !hidden ) { - return opt.complete.call( this ); - } - - if ( isElement && ( name === "height" || name === "width" ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE does not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height - // animated - if ( jQuery.css( this, "display" ) === "inline" && - jQuery.css( this, "float" ) === "none" ) { - if ( !jQuery.support.inlineBlockNeedsLayout ) { - this.style.display = "inline-block"; - - } else { - display = defaultDisplay( this.nodeName ); - - // inline-level elements accept inline-block; - // block-level elements need to be inline with layout - if ( display === "inline" ) { - this.style.display = "inline-block"; - - } else { - this.style.display = "inline"; - this.style.zoom = 1; - } - } - } - } - } - - if ( opt.overflow != null ) { - this.style.overflow = "hidden"; - } - - for ( p in prop ) { - e = new jQuery.fx( this, opt, p ); - val = prop[ p ]; - - if ( rfxtypes.test(val) ) { - e[ val === "toggle" ? hidden ? "show" : "hide" : val ](); - - } else { - parts = rfxnum.exec( val ); - start = e.cur(); - - if ( parts ) { - end = parseFloat( parts[2] ); - unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" ); - - // We need to compute starting value - if ( unit !== "px" ) { - jQuery.style( this, p, (end || 1) + unit); - start = ((end || 1) / e.cur()) * start; - jQuery.style( this, p, start + unit); - } - - // If a +=/-= token was provided, we're doing a relative animation - if ( parts[1] ) { - end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start; - } - - e.custom( start, end, unit ); - - } else { - e.custom( start, val, "" ); - } - } - } - - // For JS strict compliance - return true; - }); - }, - - stop: function( clearQueue, gotoEnd ) { - if ( clearQueue ) { - this.queue([]); - } - - this.each(function() { - var timers = jQuery.timers, - i = timers.length; - // clear marker counters if we know they won't be - if ( !gotoEnd ) { - jQuery._unmark( true, this ); - } - while ( i-- ) { - if ( timers[i].elem === this ) { - if (gotoEnd) { - // force the next step to be the last - timers[i](true); - } - - timers.splice(i, 1); - } - } - }); - - // start the next in the queue if the last step wasn't forced - if ( !gotoEnd ) { - this.dequeue(); - } - - return this; - } - -}); - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout( clearFxNow, 0 ); - return ( fxNow = jQuery.now() ); -} - -function clearFxNow() { - fxNow = undefined; -} - -// Generate parameters to create a standard animation -function genFx( type, num ) { - var obj = {}; - - jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() { - obj[ this ] = type; - }); - - return obj; -} - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show", 1), - slideUp: genFx("hide", 1), - slideToggle: genFx("toggle", 1), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.extend({ - speed: function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction(easing) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default; - - // Queueing - opt.old = opt.complete; - opt.complete = function( noUnmark ) { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue !== false ) { - jQuery.dequeue( this ); - } else if ( noUnmark !== false ) { - jQuery._unmark( this ); - } - }; - - return opt; - }, - - easing: { - linear: function( p, n, firstNum, diff ) { - return firstNum + diff * p; - }, - swing: function( p, n, firstNum, diff ) { - return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum; - } - }, - - timers: [], - - fx: function( elem, options, prop ) { - this.options = options; - this.elem = elem; - this.prop = prop; - - options.orig = options.orig || {}; - } - -}); - -jQuery.fx.prototype = { - // Simple function for setting a style value - update: function() { - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this ); - }, - - // Get the current size - cur: function() { - if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) { - return this.elem[ this.prop ]; - } - - var parsed, - r = jQuery.css( this.elem, this.prop ); - // Empty strings, null, undefined and "auto" are converted to 0, - // complex values such as "rotate(1rad)" are returned as is, - // simple values such as "10px" are parsed to Float. - return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed; - }, - - // Start an animation from one number to another - custom: function( from, to, unit ) { - var self = this, - fx = jQuery.fx; - - this.startTime = fxNow || createFxNow(); - this.start = from; - this.end = to; - this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" ); - this.now = this.start; - this.pos = this.state = 0; - - function t( gotoEnd ) { - return self.step(gotoEnd); - } - - t.elem = this.elem; - - if ( t() && jQuery.timers.push(t) && !timerId ) { - timerId = setInterval( fx.tick, fx.interval ); - } - }, - - // Simple 'show' function - show: function() { - // Remember where we started, so that we can go back to it later - this.options.orig[this.prop] = jQuery.style( this.elem, this.prop ); - this.options.show = true; - - // Begin the animation - // Make sure that we start at a small width/height to avoid any - // flash of content - this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur()); - - // Start by showing the element - jQuery( this.elem ).show(); - }, - - // Simple 'hide' function - hide: function() { - // Remember where we started, so that we can go back to it later - this.options.orig[this.prop] = jQuery.style( this.elem, this.prop ); - this.options.hide = true; - - // Begin the animation - this.custom(this.cur(), 0); - }, - - // Each step of an animation - step: function( gotoEnd ) { - var t = fxNow || createFxNow(), - done = true, - elem = this.elem, - options = this.options, - i, n; - - if ( gotoEnd || t >= options.duration + this.startTime ) { - this.now = this.end; - this.pos = this.state = 1; - this.update(); - - options.animatedProperties[ this.prop ] = true; - - for ( i in options.animatedProperties ) { - if ( options.animatedProperties[i] !== true ) { - done = false; - } - } - - if ( done ) { - // Reset the overflow - if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) { - - jQuery.each( [ "", "X", "Y" ], function (index, value) { - elem.style[ "overflow" + value ] = options.overflow[index]; - }); - } - - // Hide the element if the "hide" operation was done - if ( options.hide ) { - jQuery(elem).hide(); - } - - // Reset the properties, if the item has been hidden or shown - if ( options.hide || options.show ) { - for ( var p in options.animatedProperties ) { - jQuery.style( elem, p, options.orig[p] ); - } - } - - // Execute the complete function - options.complete.call( elem ); - } - - return false; - - } else { - // classical easing cannot be used with an Infinity duration - if ( options.duration == Infinity ) { - this.now = t; - } else { - n = t - this.startTime; - this.state = n / options.duration; - - // Perform the easing function, defaults to swing - this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration ); - this.now = this.start + ((this.end - this.start) * this.pos); - } - // Perform the next step of the animation - this.update(); - } - - return true; - } -}; - -jQuery.extend( jQuery.fx, { - tick: function() { - for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) { - if ( !timers[i]() ) { - timers.splice(i--, 1); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - }, - - interval: 13, - - stop: function() { - clearInterval( timerId ); - timerId = null; - }, - - speeds: { - slow: 600, - fast: 200, - // Default speed - _default: 400 - }, - - step: { - opacity: function( fx ) { - jQuery.style( fx.elem, "opacity", fx.now ); - }, - - _default: function( fx ) { - if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) { - fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit; - } else { - fx.elem[ fx.prop ] = fx.now; - } - } - } -}); - -if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; - }; -} - -// Try to restore the default display value of an element -function defaultDisplay( nodeName ) { - - if ( !elemdisplay[ nodeName ] ) { - - var body = document.body, - elem = jQuery( "<" + nodeName + ">" ).appendTo( body ), - display = elem.css( "display" ); - - elem.remove(); - - // If the simple way fails, - // get element's real default display by attaching it to a temp iframe - if ( display === "none" || display === "" ) { - // No iframe to use yet, so create it - if ( !iframe ) { - iframe = document.createElement( "iframe" ); - iframe.frameBorder = iframe.width = iframe.height = 0; - } - - body.appendChild( iframe ); - - // Create a cacheable copy of the iframe document on first call. - // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML - // document to it; WebKit & Firefox won't allow reusing the iframe document. - if ( !iframeDoc || !iframe.createElement ) { - iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; - iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" ); - iframeDoc.close(); - } - - elem = iframeDoc.createElement( nodeName ); - - iframeDoc.body.appendChild( elem ); - - display = jQuery.css( elem, "display" ); - - body.removeChild( iframe ); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return elemdisplay[ nodeName ]; -} - - - - -var rtable = /^t(?:able|d|h)$/i, - rroot = /^(?:body|html)$/i; - -if ( "getBoundingClientRect" in document.documentElement ) { - jQuery.fn.offset = function( options ) { - var elem = this[0], box; - - if ( options ) { - return this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - if ( !elem || !elem.ownerDocument ) { - return null; - } - - if ( elem === elem.ownerDocument.body ) { - return jQuery.offset.bodyOffset( elem ); - } - - try { - box = elem.getBoundingClientRect(); - } catch(e) {} - - var doc = elem.ownerDocument, - docElem = doc.documentElement; - - // Make sure we're not dealing with a disconnected DOM node - if ( !box || !jQuery.contains( docElem, elem ) ) { - return box ? { top: box.top, left: box.left } : { top: 0, left: 0 }; - } - - var body = doc.body, - win = getWindow(doc), - clientTop = docElem.clientTop || body.clientTop || 0, - clientLeft = docElem.clientLeft || body.clientLeft || 0, - scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop, - scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft, - top = box.top + scrollTop - clientTop, - left = box.left + scrollLeft - clientLeft; - - return { top: top, left: left }; - }; - -} else { - jQuery.fn.offset = function( options ) { - var elem = this[0]; - - if ( options ) { - return this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - if ( !elem || !elem.ownerDocument ) { - return null; - } - - if ( elem === elem.ownerDocument.body ) { - return jQuery.offset.bodyOffset( elem ); - } - - jQuery.offset.initialize(); - - var computedStyle, - offsetParent = elem.offsetParent, - prevOffsetParent = elem, - doc = elem.ownerDocument, - docElem = doc.documentElement, - body = doc.body, - defaultView = doc.defaultView, - prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle, - top = elem.offsetTop, - left = elem.offsetLeft; - - while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) { - if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) { - break; - } - - computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle; - top -= elem.scrollTop; - left -= elem.scrollLeft; - - if ( elem === offsetParent ) { - top += elem.offsetTop; - left += elem.offsetLeft; - - if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) { - top += parseFloat( computedStyle.borderTopWidth ) || 0; - left += parseFloat( computedStyle.borderLeftWidth ) || 0; - } - - prevOffsetParent = offsetParent; - offsetParent = elem.offsetParent; - } - - if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) { - top += parseFloat( computedStyle.borderTopWidth ) || 0; - left += parseFloat( computedStyle.borderLeftWidth ) || 0; - } - - prevComputedStyle = computedStyle; - } - - if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) { - top += body.offsetTop; - left += body.offsetLeft; - } - - if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) { - top += Math.max( docElem.scrollTop, body.scrollTop ); - left += Math.max( docElem.scrollLeft, body.scrollLeft ); - } - - return { top: top, left: left }; - }; -} - -jQuery.offset = { - initialize: function() { - var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0, - html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>"; - - jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } ); - - container.innerHTML = html; - body.insertBefore( container, body.firstChild ); - innerDiv = container.firstChild; - checkDiv = innerDiv.firstChild; - td = innerDiv.nextSibling.firstChild.firstChild; - - this.doesNotAddBorder = (checkDiv.offsetTop !== 5); - this.doesAddBorderForTableAndCells = (td.offsetTop === 5); - - checkDiv.style.position = "fixed"; - checkDiv.style.top = "20px"; - - // safari subtracts parent border width here which is 5px - this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15); - checkDiv.style.position = checkDiv.style.top = ""; - - innerDiv.style.overflow = "hidden"; - innerDiv.style.position = "relative"; - - this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5); - - this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop); - - body.removeChild( container ); - jQuery.offset.initialize = jQuery.noop; - }, - - bodyOffset: function( body ) { - var top = body.offsetTop, - left = body.offsetLeft; - - jQuery.offset.initialize(); - - if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) { - top += parseFloat( jQuery.css(body, "marginTop") ) || 0; - left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; - } - - return { top: top, left: left }; - }, - - setOffset: function( elem, options, i ) { - var position = jQuery.css( elem, "position" ); - - // set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - var curElem = jQuery( elem ), - curOffset = curElem.offset(), - curCSSTop = jQuery.css( elem, "top" ), - curCSSLeft = jQuery.css( elem, "left" ), - calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, - props = {}, curPosition = {}, curTop, curLeft; - - // need to be able to calculate position if either top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if (options.top != null) { - props.top = (options.top - curOffset.top) + curTop; - } - if (options.left != null) { - props.left = (options.left - curOffset.left) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - } else { - curElem.css( props ); - } - } -}; - - -jQuery.fn.extend({ - position: function() { - if ( !this[0] ) { - return null; - } - - var elem = this[0], - - // Get *real* offsetParent - offsetParent = this.offsetParent(), - - // Get correct offsets - offset = this.offset(), - parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); - - // Subtract element margins - // note: when an element has margin: auto the offsetLeft and marginLeft - // are the same in Safari causing offset.left to incorrectly be 0 - offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; - offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; - - // Add offsetParent borders - parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; - parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; - - // Subtract the two offsets - return { - top: offset.top - parentOffset.top, - left: offset.left - parentOffset.left - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || document.body; - while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { - offsetParent = offsetParent.offsetParent; - } - return offsetParent; - }); - } -}); - - -// Create scrollLeft and scrollTop methods -jQuery.each( ["Left", "Top"], function( i, name ) { - var method = "scroll" + name; - - jQuery.fn[ method ] = function( val ) { - var elem, win; - - if ( val === undefined ) { - elem = this[ 0 ]; - - if ( !elem ) { - return null; - } - - win = getWindow( elem ); - - // Return the scroll offset - return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] : - jQuery.support.boxModel && win.document.documentElement[ method ] || - win.document.body[ method ] : - elem[ method ]; - } - - // Set the scroll offset - return this.each(function() { - win = getWindow( this ); - - if ( win ) { - win.scrollTo( - !i ? val : jQuery( win ).scrollLeft(), - i ? val : jQuery( win ).scrollTop() - ); - - } else { - this[ method ] = val; - } - }); - }; -}); - -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? - elem : - elem.nodeType === 9 ? - elem.defaultView || elem.parentWindow : - false; -} - - - - -// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods -jQuery.each([ "Height", "Width" ], function( i, name ) { - - var type = name.toLowerCase(); - - // innerHeight and innerWidth - jQuery.fn[ "inner" + name ] = function() { - var elem = this[0]; - return elem && elem.style ? - parseFloat( jQuery.css( elem, type, "padding" ) ) : - null; - }; - - // outerHeight and outerWidth - jQuery.fn[ "outer" + name ] = function( margin ) { - var elem = this[0]; - return elem && elem.style ? - parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) : - null; - }; - - jQuery.fn[ type ] = function( size ) { - // Get window width or height - var elem = this[0]; - if ( !elem ) { - return size == null ? null : this; - } - - if ( jQuery.isFunction( size ) ) { - return this.each(function( i ) { - var self = jQuery( this ); - self[ type ]( size.call( this, i, self[ type ]() ) ); - }); - } - - if ( jQuery.isWindow( elem ) ) { - // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode - // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat - var docElemProp = elem.document.documentElement[ "client" + name ], - body = elem.document.body; - return elem.document.compatMode === "CSS1Compat" && docElemProp || - body && body[ "client" + name ] || docElemProp; - - // Get document width or height - } else if ( elem.nodeType === 9 ) { - // Either scroll[Width/Height] or offset[Width/Height], whichever is greater - return Math.max( - elem.documentElement["client" + name], - elem.body["scroll" + name], elem.documentElement["scroll" + name], - elem.body["offset" + name], elem.documentElement["offset" + name] - ); - - // Get or set width or height on the element - } else if ( size === undefined ) { - var orig = jQuery.css( elem, type ), - ret = parseFloat( orig ); - - return jQuery.isNaN( ret ) ? orig : ret; - - // Set the width or height on the element (default to pixels if value is unitless) - } else { - return this.css( type, typeof size === "string" ? size : size + "px" ); - } - }; - -}); - - -// Expose jQuery to the global object -window.jQuery = window.$ = jQuery; -})(window); diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.min.js deleted file mode 100644 index b6b6e46e..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */ -(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete -t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean -(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.validate.js b/wqflask/wqflask/static/packages/jqplot/jquery.validate.js deleted file mode 100644 index 794e9017..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jquery.validate.js +++ /dev/null @@ -1,1248 +0,0 @@ -/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012 -* https://github.com/jzaefferer/jquery-validation -* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */ - -(function($) { - -$.extend($.fn, { - // http://docs.jquery.com/Plugins/Validation/validate - validate: function( options ) { - - // if nothing is selected, return nothing; can't chain anyway - if (!this.length) { - if (options && options.debug && window.console) { - console.warn( "nothing selected, can't validate, returning nothing" ); - } - return; - } - - // check if a validator for this form was already created - var validator = $.data(this[0], 'validator'); - if ( validator ) { - return validator; - } - - // Add novalidate tag if HTML5. - this.attr('novalidate', 'novalidate'); - - validator = new $.validator( options, this[0] ); - $.data(this[0], 'validator', validator); - - if ( validator.settings.onsubmit ) { - - this.validateDelegate( ":submit", "click", function(ev) { - if ( validator.settings.submitHandler ) { - validator.submitButton = ev.target; - } - // allow suppressing validation by adding a cancel class to the submit button - if ( $(ev.target).hasClass('cancel') ) { - validator.cancelSubmit = true; - } - }); - - // validate the form on submit - this.submit( function( event ) { - if ( validator.settings.debug ) { - // prevent form submit to be able to see console output - event.preventDefault(); - } - function handle() { - var hidden; - if ( validator.settings.submitHandler ) { - if (validator.submitButton) { - // insert a hidden input as a replacement for the missing submit button - hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm); - } - validator.settings.submitHandler.call( validator, validator.currentForm, event ); - if (validator.submitButton) { - // and clean up afterwards; thanks to no-block-scope, hidden can be referenced - hidden.remove(); - } - return false; - } - return true; - } - - // prevent submit for invalid forms or custom submit handlers - if ( validator.cancelSubmit ) { - validator.cancelSubmit = false; - return handle(); - } - if ( validator.form() ) { - if ( validator.pendingRequest ) { - validator.formSubmitted = true; - return false; - } - return handle(); - } else { - validator.focusInvalid(); - return false; - } - }); - } - - return validator; - }, - // http://docs.jquery.com/Plugins/Validation/valid - valid: function() { - if ( $(this[0]).is('form')) { - return this.validate().form(); - } else { - var valid = true; - var validator = $(this[0].form).validate(); - this.each(function() { - valid &= validator.element(this); - }); - return valid; - } - }, - // attributes: space seperated list of attributes to retrieve and remove - removeAttrs: function(attributes) { - var result = {}, - $element = this; - $.each(attributes.split(/\s/), function(index, value) { - result[value] = $element.attr(value); - $element.removeAttr(value); - }); - return result; - }, - // http://docs.jquery.com/Plugins/Validation/rules - rules: function(command, argument) { - var element = this[0]; - - if (command) { - var settings = $.data(element.form, 'validator').settings; - var staticRules = settings.rules; - var existingRules = $.validator.staticRules(element); - switch(command) { - case "add": - $.extend(existingRules, $.validator.normalizeRule(argument)); - staticRules[element.name] = existingRules; - if (argument.messages) { - settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages ); - } - break; - case "remove": - if (!argument) { - delete staticRules[element.name]; - return existingRules; - } - var filtered = {}; - $.each(argument.split(/\s/), function(index, method) { - filtered[method] = existingRules[method]; - delete existingRules[method]; - }); - return filtered; - } - } - - var data = $.validator.normalizeRules( - $.extend( - {}, - $.validator.metadataRules(element), - $.validator.classRules(element), - $.validator.attributeRules(element), - $.validator.staticRules(element) - ), element); - - // make sure required is at front - if (data.required) { - var param = data.required; - delete data.required; - data = $.extend({required: param}, data); - } - - return data; - } -}); - -// Custom selectors -$.extend($.expr[":"], { - // http://docs.jquery.com/Plugins/Validation/blank - blank: function(a) {return !$.trim("" + a.value);}, - // http://docs.jquery.com/Plugins/Validation/filled - filled: function(a) {return !!$.trim("" + a.value);}, - // http://docs.jquery.com/Plugins/Validation/unchecked - unchecked: function(a) {return !a.checked;} -}); - -// constructor for validator -$.validator = function( options, form ) { - this.settings = $.extend( true, {}, $.validator.defaults, options ); - this.currentForm = form; - this.init(); -}; - -$.validator.format = function(source, params) { - if ( arguments.length === 1 ) { - return function() { - var args = $.makeArray(arguments); - args.unshift(source); - return $.validator.format.apply( this, args ); - }; - } - if ( arguments.length > 2 && params.constructor !== Array ) { - params = $.makeArray(arguments).slice(1); - } - if ( params.constructor !== Array ) { - params = [ params ]; - } - $.each(params, function(i, n) { - source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n); - }); - return source; -}; - -$.extend($.validator, { - - defaults: { - messages: {}, - groups: {}, - rules: {}, - errorClass: "error", - validClass: "valid", - errorElement: "label", - focusInvalid: true, - errorContainer: $( [] ), - errorLabelContainer: $( [] ), - onsubmit: true, - ignore: ":hidden", - ignoreTitle: false, - onfocusin: function(element, event) { - this.lastActive = element; - - // hide error label and remove error class on focus if enabled - if ( this.settings.focusCleanup && !this.blockFocusCleanup ) { - if ( this.settings.unhighlight ) { - this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); - } - this.addWrapper(this.errorsFor(element)).hide(); - } - }, - onfocusout: function(element, event) { - if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) { - this.element(element); - } - }, - onkeyup: function(element, event) { - if ( event.which === 9 && this.elementValue(element) === '' ) { - return; - } else if ( element.name in this.submitted || element === this.lastActive ) { - this.element(element); - } - }, - onclick: function(element, event) { - // click on selects, radiobuttons and checkboxes - if ( element.name in this.submitted ) { - this.element(element); - } - // or option elements, check parent select in that case - else if (element.parentNode.name in this.submitted) { - this.element(element.parentNode); - } - }, - highlight: function(element, errorClass, validClass) { - if (element.type === 'radio') { - this.findByName(element.name).addClass(errorClass).removeClass(validClass); - } else { - $(element).addClass(errorClass).removeClass(validClass); - } - }, - unhighlight: function(element, errorClass, validClass) { - if (element.type === 'radio') { - this.findByName(element.name).removeClass(errorClass).addClass(validClass); - } else { - $(element).removeClass(errorClass).addClass(validClass); - } - } - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults - setDefaults: function(settings) { - $.extend( $.validator.defaults, settings ); - }, - - messages: { - required: "This field is required.", - remote: "Please fix this field.", - email: "Please enter a valid email address.", - url: "Please enter a valid URL.", - date: "Please enter a valid date.", - dateISO: "Please enter a valid date (ISO).", - number: "Please enter a valid number.", - digits: "Please enter only digits.", - creditcard: "Please enter a valid credit card number.", - equalTo: "Please enter the same value again.", - maxlength: $.validator.format("Please enter no more than {0} characters."), - minlength: $.validator.format("Please enter at least {0} characters."), - rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."), - range: $.validator.format("Please enter a value between {0} and {1}."), - max: $.validator.format("Please enter a value less than or equal to {0}."), - min: $.validator.format("Please enter a value greater than or equal to {0}.") - }, - - autoCreateRanges: false, - - prototype: { - - init: function() { - this.labelContainer = $(this.settings.errorLabelContainer); - this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm); - this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer ); - this.submitted = {}; - this.valueCache = {}; - this.pendingRequest = 0; - this.pending = {}; - this.invalid = {}; - this.reset(); - - var groups = (this.groups = {}); - $.each(this.settings.groups, function(key, value) { - $.each(value.split(/\s/), function(index, name) { - groups[name] = key; - }); - }); - var rules = this.settings.rules; - $.each(rules, function(key, value) { - rules[key] = $.validator.normalizeRule(value); - }); - - function delegate(event) { - var validator = $.data(this[0].form, "validator"), - eventType = "on" + event.type.replace(/^validate/, ""); - if (validator.settings[eventType]) { - validator.settings[eventType].call(validator, this[0], event); - } - } - $(this.currentForm) - .validateDelegate(":text, [type='password'], [type='file'], select, textarea, " + - "[type='number'], [type='search'] ,[type='tel'], [type='url'], " + - "[type='email'], [type='datetime'], [type='date'], [type='month'], " + - "[type='week'], [type='time'], [type='datetime-local'], " + - "[type='range'], [type='color'] ", - "focusin focusout keyup", delegate) - .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate); - - if (this.settings.invalidHandler) { - $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler); - } - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/form - form: function() { - this.checkForm(); - $.extend(this.submitted, this.errorMap); - this.invalid = $.extend({}, this.errorMap); - if (!this.valid()) { - $(this.currentForm).triggerHandler("invalid-form", [this]); - } - this.showErrors(); - return this.valid(); - }, - - checkForm: function() { - this.prepareForm(); - for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { - this.check( elements[i] ); - } - return this.valid(); - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/element - element: function( element ) { - element = this.validationTargetFor( this.clean( element ) ); - this.lastElement = element; - this.prepareElement( element ); - this.currentElements = $(element); - var result = this.check( element ) !== false; - if (result) { - delete this.invalid[element.name]; - } else { - this.invalid[element.name] = true; - } - if ( !this.numberOfInvalids() ) { - // Hide error containers on last error - this.toHide = this.toHide.add( this.containers ); - } - this.showErrors(); - return result; - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/showErrors - showErrors: function(errors) { - if(errors) { - // add items to error list and map - $.extend( this.errorMap, errors ); - this.errorList = []; - for ( var name in errors ) { - this.errorList.push({ - message: errors[name], - element: this.findByName(name)[0] - }); - } - // remove items from success list - this.successList = $.grep( this.successList, function(element) { - return !(element.name in errors); - }); - } - if (this.settings.showErrors) { - this.settings.showErrors.call( this, this.errorMap, this.errorList ); - } else { - this.defaultShowErrors(); - } - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/resetForm - resetForm: function() { - if ( $.fn.resetForm ) { - $( this.currentForm ).resetForm(); - } - this.submitted = {}; - this.lastElement = null; - this.prepareForm(); - this.hideErrors(); - this.elements().removeClass( this.settings.errorClass ).removeData( "previousValue" ); - }, - - numberOfInvalids: function() { - return this.objectLength(this.invalid); - }, - - objectLength: function( obj ) { - var count = 0; - for ( var i in obj ) { - count++; - } - return count; - }, - - hideErrors: function() { - this.addWrapper( this.toHide ).hide(); - }, - - valid: function() { - return this.size() === 0; - }, - - size: function() { - return this.errorList.length; - }, - - focusInvalid: function() { - if( this.settings.focusInvalid ) { - try { - $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []) - .filter(":visible") - .focus() - // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find - .trigger("focusin"); - } catch(e) { - // ignore IE throwing errors when focusing hidden elements - } - } - }, - - findLastActive: function() { - var lastActive = this.lastActive; - return lastActive && $.grep(this.errorList, function(n) { - return n.element.name === lastActive.name; - }).length === 1 && lastActive; - }, - - elements: function() { - var validator = this, - rulesCache = {}; - - // select all valid inputs inside the form (no submit or reset buttons) - return $(this.currentForm) - .find("input, select, textarea") - .not(":submit, :reset, :image, [disabled]") - .not( this.settings.ignore ) - .filter(function() { - if ( !this.name && validator.settings.debug && window.console ) { - console.error( "%o has no name assigned", this); - } - - // select only the first element for each name, and only those with rules specified - if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) { - return false; - } - - rulesCache[this.name] = true; - return true; - }); - }, - - clean: function( selector ) { - return $( selector )[0]; - }, - - errors: function() { - var errorClass = this.settings.errorClass.replace(' ', '.'); - return $( this.settings.errorElement + "." + errorClass, this.errorContext ); - }, - - reset: function() { - this.successList = []; - this.errorList = []; - this.errorMap = {}; - this.toShow = $([]); - this.toHide = $([]); - this.currentElements = $([]); - }, - - prepareForm: function() { - this.reset(); - this.toHide = this.errors().add( this.containers ); - }, - - prepareElement: function( element ) { - this.reset(); - this.toHide = this.errorsFor(element); - }, - - elementValue: function( element ) { - var type = $(element).attr('type'), - val = $(element).val(); - - if ( type === 'radio' || type === 'checkbox' ) { - return $('input[name="' + $(element).attr('name') + '"]:checked').val(); - } - - if ( typeof val === 'string' ) { - return val.replace(/\r/g, ""); - } - return val; - }, - - check: function( element ) { - element = this.validationTargetFor( this.clean( element ) ); - - var rules = $(element).rules(); - var dependencyMismatch = false; - var val = this.elementValue(element); - var result; - - for (var method in rules ) { - var rule = { method: method, parameters: rules[method] }; - try { - - result = $.validator.methods[method].call( this, val, element, rule.parameters ); - - // if a method indicates that the field is optional and therefore valid, - // don't mark it as valid when there are no other rules - if ( result === "dependency-mismatch" ) { - dependencyMismatch = true; - continue; - } - dependencyMismatch = false; - - if ( result === "pending" ) { - this.toHide = this.toHide.not( this.errorsFor(element) ); - return; - } - - if( !result ) { - this.formatAndAdd( element, rule ); - return false; - } - } catch(e) { - if ( this.settings.debug && window.console ) { - console.log("exception occured when checking element " + element.id + ", check the '" + rule.method + "' method", e); - } - throw e; - } - } - if (dependencyMismatch) { - return; - } - if ( this.objectLength(rules) ) { - this.successList.push(element); - } - return true; - }, - - // return the custom message for the given element and validation method - // specified in the element's "messages" metadata - customMetaMessage: function(element, method) { - if (!$.metadata) { - return; - } - var meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata(); - return meta && meta.messages && meta.messages[method]; - }, - - // return the custom message for the given element and validation method - // specified in the element's HTML5 data attribute - customDataMessage: function(element, method) { - return $(element).data('msg-' + method.toLowerCase()) || (element.attributes && $(element).attr('data-msg-' + method.toLowerCase())); - }, - - // return the custom message for the given element name and validation method - customMessage: function( name, method ) { - var m = this.settings.messages[name]; - return m && (m.constructor === String ? m : m[method]); - }, - - // return the first defined argument, allowing empty strings - findDefined: function() { - for(var i = 0; i < arguments.length; i++) { - if (arguments[i] !== undefined) { - return arguments[i]; - } - } - return undefined; - }, - - defaultMessage: function( element, method) { - return this.findDefined( - this.customMessage( element.name, method ), - this.customDataMessage( element, method ), - this.customMetaMessage( element, method ), - // title is never undefined, so handle empty string as undefined - !this.settings.ignoreTitle && element.title || undefined, - $.validator.messages[method], - "<strong>Warning: No message defined for " + element.name + "</strong>" - ); - }, - - formatAndAdd: function( element, rule ) { - var message = this.defaultMessage( element, rule.method ), - theregex = /\$?\{(\d+)\}/g; - if ( typeof message === "function" ) { - message = message.call(this, rule.parameters, element); - } else if (theregex.test(message)) { - message = $.validator.format(message.replace(theregex, '{$1}'), rule.parameters); - } - this.errorList.push({ - message: message, - element: element - }); - - this.errorMap[element.name] = message; - this.submitted[element.name] = message; - }, - - addWrapper: function(toToggle) { - if ( this.settings.wrapper ) { - toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) ); - } - return toToggle; - }, - - defaultShowErrors: function() { - var i, elements; - for ( i = 0; this.errorList[i]; i++ ) { - var error = this.errorList[i]; - if ( this.settings.highlight ) { - this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass ); - } - this.showLabel( error.element, error.message ); - } - if( this.errorList.length ) { - this.toShow = this.toShow.add( this.containers ); - } - if (this.settings.success) { - for ( i = 0; this.successList[i]; i++ ) { - this.showLabel( this.successList[i] ); - } - } - if (this.settings.unhighlight) { - for ( i = 0, elements = this.validElements(); elements[i]; i++ ) { - this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass ); - } - } - this.toHide = this.toHide.not( this.toShow ); - this.hideErrors(); - this.addWrapper( this.toShow ).show(); - }, - - validElements: function() { - return this.currentElements.not(this.invalidElements()); - }, - - invalidElements: function() { - return $(this.errorList).map(function() { - return this.element; - }); - }, - - showLabel: function(element, message) { - var label = this.errorsFor( element ); - if ( label.length ) { - // refresh error/success class - label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass ); - - // check if we have a generated label, replace the message then - if ( label.attr("generated") ) { - label.html(message); - } - } else { - // create label - label = $("<" + this.settings.errorElement + "/>") - .attr({"for": this.idOrName(element), generated: true}) - .addClass(this.settings.errorClass) - .html(message || ""); - if ( this.settings.wrapper ) { - // make sure the element is visible, even in IE - // actually showing the wrapped element is handled elsewhere - label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); - } - if ( !this.labelContainer.append(label).length ) { - if ( this.settings.errorPlacement ) { - this.settings.errorPlacement(label, $(element) ); - } else { - label.insertAfter(element); - } - } - } - if ( !message && this.settings.success ) { - label.text(""); - if ( typeof this.settings.success === "string" ) { - label.addClass( this.settings.success ); - } else { - this.settings.success( label, element ); - } - } - this.toShow = this.toShow.add(label); - }, - - errorsFor: function(element) { - var name = this.idOrName(element); - return this.errors().filter(function() { - return $(this).attr('for') === name; - }); - }, - - idOrName: function(element) { - return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name); - }, - - validationTargetFor: function(element) { - // if radio/checkbox, validate first element in group instead - if (this.checkable(element)) { - element = this.findByName( element.name ).not(this.settings.ignore)[0]; - } - return element; - }, - - checkable: function( element ) { - return (/radio|checkbox/i).test(element.type); - }, - - findByName: function( name ) { - return $(this.currentForm).find('[name="' + name + '"]'); - }, - - getLength: function(value, element) { - switch( element.nodeName.toLowerCase() ) { - case 'select': - return $("option:selected", element).length; - case 'input': - if( this.checkable( element) ) { - return this.findByName(element.name).filter(':checked').length; - } - } - return value.length; - }, - - depend: function(param, element) { - return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true; - }, - - dependTypes: { - "boolean": function(param, element) { - return param; - }, - "string": function(param, element) { - return !!$(param, element.form).length; - }, - "function": function(param, element) { - return param(element); - } - }, - - optional: function(element) { - var val = this.elementValue(element); - return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch"; - }, - - startRequest: function(element) { - if (!this.pending[element.name]) { - this.pendingRequest++; - this.pending[element.name] = true; - } - }, - - stopRequest: function(element, valid) { - this.pendingRequest--; - // sometimes synchronization fails, make sure pendingRequest is never < 0 - if (this.pendingRequest < 0) { - this.pendingRequest = 0; - } - delete this.pending[element.name]; - if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) { - $(this.currentForm).submit(); - this.formSubmitted = false; - } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) { - $(this.currentForm).triggerHandler("invalid-form", [this]); - this.formSubmitted = false; - } - }, - - previousValue: function(element) { - return $.data(element, "previousValue") || $.data(element, "previousValue", { - old: null, - valid: true, - message: this.defaultMessage( element, "remote" ) - }); - } - - }, - - classRuleSettings: { - required: {required: true}, - email: {email: true}, - url: {url: true}, - date: {date: true}, - dateISO: {dateISO: true}, - number: {number: true}, - digits: {digits: true}, - creditcard: {creditcard: true} - }, - - addClassRules: function(className, rules) { - if ( className.constructor === String ) { - this.classRuleSettings[className] = rules; - } else { - $.extend(this.classRuleSettings, className); - } - }, - - classRules: function(element) { - var rules = {}; - var classes = $(element).attr('class'); - if ( classes ) { - $.each(classes.split(' '), function() { - if (this in $.validator.classRuleSettings) { - $.extend(rules, $.validator.classRuleSettings[this]); - } - }); - } - return rules; - }, - - attributeRules: function(element) { - var rules = {}; - var $element = $(element); - - for (var method in $.validator.methods) { - var value; - - // support for <input required> in both html5 and older browsers - if (method === 'required') { - value = $element.get(0).getAttribute(method); - // Some browsers return an empty string for the required attribute - // and non-HTML5 browsers might have required="" markup - if (value === "") { - value = true; - } - // force non-HTML5 browsers to return bool - value = !!value; - } else { - value = $element.attr(method); - } - - if (value) { - rules[method] = value; - } else if ($element[0].getAttribute("type") === method) { - rules[method] = true; - } - } - - // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs - if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) { - delete rules.maxlength; - } - - return rules; - }, - - metadataRules: function(element) { - if (!$.metadata) { - return {}; - } - - var meta = $.data(element.form, 'validator').settings.meta; - return meta ? - $(element).metadata()[meta] : - $(element).metadata(); - }, - - staticRules: function(element) { - var rules = {}; - var validator = $.data(element.form, 'validator'); - if (validator.settings.rules) { - rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {}; - } - return rules; - }, - - normalizeRules: function(rules, element) { - // handle dependency check - $.each(rules, function(prop, val) { - // ignore rule when param is explicitly false, eg. required:false - if (val === false) { - delete rules[prop]; - return; - } - if (val.param || val.depends) { - var keepRule = true; - switch (typeof val.depends) { - case "string": - keepRule = !!$(val.depends, element.form).length; - break; - case "function": - keepRule = val.depends.call(element, element); - break; - } - if (keepRule) { - rules[prop] = val.param !== undefined ? val.param : true; - } else { - delete rules[prop]; - } - } - }); - - // evaluate parameters - $.each(rules, function(rule, parameter) { - rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter; - }); - - // clean number parameters - $.each(['minlength', 'maxlength', 'min', 'max'], function() { - if (rules[this]) { - rules[this] = Number(rules[this]); - } - }); - $.each(['rangelength', 'range'], function() { - if (rules[this]) { - rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; - } - }); - - if ($.validator.autoCreateRanges) { - // auto-create ranges - if (rules.min && rules.max) { - rules.range = [rules.min, rules.max]; - delete rules.min; - delete rules.max; - } - if (rules.minlength && rules.maxlength) { - rules.rangelength = [rules.minlength, rules.maxlength]; - delete rules.minlength; - delete rules.maxlength; - } - } - - // To support custom messages in metadata ignore rule methods titled "messages" - if (rules.messages) { - delete rules.messages; - } - - return rules; - }, - - // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} - normalizeRule: function(data) { - if( typeof data === "string" ) { - var transformed = {}; - $.each(data.split(/\s/), function() { - transformed[this] = true; - }); - data = transformed; - } - return data; - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/addMethod - addMethod: function(name, method, message) { - $.validator.methods[name] = method; - $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name]; - if (method.length < 3) { - $.validator.addClassRules(name, $.validator.normalizeRule(name)); - } - }, - - methods: { - - // http://docs.jquery.com/Plugins/Validation/Methods/required - required: function(value, element, param) { - // check if dependency is met - if ( !this.depend(param, element) ) { - return "dependency-mismatch"; - } - if ( element.nodeName.toLowerCase() === "select" ) { - // could be an array for select-multiple or a string, both are fine this way - var val = $(element).val(); - return val && val.length > 0; - } - if ( this.checkable(element) ) { - return this.getLength(value, element) > 0; - } - return $.trim(value).length > 0; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/remote - remote: function(value, element, param) { - if ( this.optional(element) ) { - return "dependency-mismatch"; - } - - var previous = this.previousValue(element); - if (!this.settings.messages[element.name] ) { - this.settings.messages[element.name] = {}; - } - previous.originalMessage = this.settings.messages[element.name].remote; - this.settings.messages[element.name].remote = previous.message; - - param = typeof param === "string" && {url:param} || param; - - if ( this.pending[element.name] ) { - return "pending"; - } - if ( previous.old === value ) { - return previous.valid; - } - - previous.old = value; - var validator = this; - this.startRequest(element); - var data = {}; - data[element.name] = value; - $.ajax($.extend(true, { - url: param, - mode: "abort", - port: "validate" + element.name, - dataType: "json", - data: data, - success: function(response) { - validator.settings.messages[element.name].remote = previous.originalMessage; - var valid = response === true || response === "true"; - if ( valid ) { - var submitted = validator.formSubmitted; - validator.prepareElement(element); - validator.formSubmitted = submitted; - validator.successList.push(element); - delete validator.invalid[element.name]; - validator.showErrors(); - } else { - var errors = {}; - var message = response || validator.defaultMessage( element, "remote" ); - errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message; - validator.invalid[element.name] = true; - validator.showErrors(errors); - } - previous.valid = valid; - validator.stopRequest(element, valid); - } - }, param)); - return "pending"; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/minlength - minlength: function(value, element, param) { - var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); - return this.optional(element) || length >= param; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/maxlength - maxlength: function(value, element, param) { - var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); - return this.optional(element) || length <= param; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/rangelength - rangelength: function(value, element, param) { - var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); - return this.optional(element) || ( length >= param[0] && length <= param[1] ); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/min - min: function( value, element, param ) { - return this.optional(element) || value >= param; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/max - max: function( value, element, param ) { - return this.optional(element) || value <= param; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/range - range: function( value, element, param ) { - return this.optional(element) || ( value >= param[0] && value <= param[1] ); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/email - email: function(value, element) { - // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ - return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/url - url: function(value, element) { - // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ - return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/date - date: function(value, element) { - return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/dateISO - dateISO: function(value, element) { - return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/number - number: function(value, element) { - return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/digits - digits: function(value, element) { - return this.optional(element) || /^\d+$/.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/creditcard - // based on http://en.wikipedia.org/wiki/Luhn - creditcard: function(value, element) { - if ( this.optional(element) ) { - return "dependency-mismatch"; - } - // accept only spaces, digits and dashes - if (/[^0-9 \-]+/.test(value)) { - return false; - } - var nCheck = 0, - nDigit = 0, - bEven = false; - - value = value.replace(/\D/g, ""); - - for (var n = value.length - 1; n >= 0; n--) { - var cDigit = value.charAt(n); - nDigit = parseInt(cDigit, 10); - if (bEven) { - if ((nDigit *= 2) > 9) { - nDigit -= 9; - } - } - nCheck += nDigit; - bEven = !bEven; - } - - return (nCheck % 10) === 0; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/equalTo - equalTo: function(value, element, param) { - // bind to the blur event of the target in order to revalidate whenever the target field is updated - // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead - var target = $(param); - if (this.settings.onfocusout) { - target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() { - $(element).valid(); - }); - } - return value === target.val(); - } - - } - -}); - -// deprecated, use $.validator.format instead -$.format = $.validator.format; - -}(jQuery)); - -// ajax mode: abort -// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); -// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() -(function($) { - var pendingRequests = {}; - // Use a prefilter if available (1.5+) - if ( $.ajaxPrefilter ) { - $.ajaxPrefilter(function(settings, _, xhr) { - var port = settings.port; - if (settings.mode === "abort") { - if ( pendingRequests[port] ) { - pendingRequests[port].abort(); - } - pendingRequests[port] = xhr; - } - }); - } else { - // Proxy ajax - var ajax = $.ajax; - $.ajax = function(settings) { - var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, - port = ( "port" in settings ? settings : $.ajaxSettings ).port; - if (mode === "abort") { - if ( pendingRequests[port] ) { - pendingRequests[port].abort(); - } - return (pendingRequests[port] = ajax.apply(this, arguments)); - } - return ajax.apply(this, arguments); - }; - } -}(jQuery)); - -// provides cross-browser focusin and focusout events -// IE has native support, in other browsers, use event caputuring (neither bubbles) - -// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation -// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target -(function($) { - // only implement if not provided by jQuery core (since 1.4) - // TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs - if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) { - $.each({ - focus: 'focusin', - blur: 'focusout' - }, function( original, fix ){ - $.event.special[fix] = { - setup:function() { - this.addEventListener( original, handler, true ); - }, - teardown:function() { - this.removeEventListener( original, handler, true ); - }, - handler: function(e) { - var args = arguments; - args[0] = $.event.fix(e); - args[0].type = fix; - return $.event.handle.apply(this, args); - } - }; - function handler(e) { - e = $.event.fix(e); - e.type = fix; - return $.event.handle.call(this, e); - } - }); - } - $.extend($.fn, { - validateDelegate: function(delegate, type, handler) { - return this.bind(type, function(event) { - var target = $(event.target); - if (target.is(delegate)) { - return handler.apply(target, arguments); - } - }); - } - }); -}(jQuery)); diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js deleted file mode 100644 index 85afad53..00000000 --- a/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012 -* https://github.com/jzaefferer/jquery-validation -* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */ -(function(a){a.extend(a.fn,{validate:function(b){if(!this.length){b&&b.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return}var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.validateDelegate(":submit","click",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(b.target).hasClass("cancel")&&(c.cancelSubmit=!0)}),this.submit(function(b){function d(){var d;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(c.submitButton.value).appendTo(c.currentForm)),c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){if(a(this[0]).is("form"))return this.validate().form();var b=!0,c=a(this[0].form).validate();return this.each(function(){b&=c.element(this)}),b},removeAttrs:function(b){var c={},d=this;return a.each(b.split(/\s/),function(a,b){c[b]=d.attr(b),d.removeAttr(b)}),c},rules:function(b,c){var d=this[0];if(b){var e=a.data(d.form,"validator").settings,f=e.rules,g=a.validator.staticRules(d);switch(b){case"add":a.extend(g,a.validator.normalizeRule(c)),f[d.name]=g,c.messages&&(e.messages[d.name]=a.extend(e.messages[d.name],c.messages));break;case"remove":if(!c)return delete f[d.name],g;var h={};return a.each(c.split(/\s/),function(a,b){h[b]=g[b],delete g[b]}),h}}var i=a.validator.normalizeRules(a.extend({},a.validator.metadataRules(d),a.validator.classRules(d),a.validator.attributeRules(d),a.validator.staticRules(d)),d);if(i.required){var j=i.required;delete i.required,i=a.extend({required:j},i)}return i}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+b.value)},filled:function(b){return!!a.trim(""+b.value)},unchecked:function(a){return!a.checked}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return arguments.length===1?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),c)}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a,b){this.lastActive=a,this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.addWrapper(this.errorsFor(a)).hide())},onfocusout:function(a,b){!this.checkable(a)&&(a.name in this.submitted||!this.optional(a))&&this.element(a)},onkeyup:function(a,b){if(b.which===9&&this.elementValue(a)==="")return;(a.name in this.submitted||a===this.lastActive)&&this.element(a)},onclick:function(a,b){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){b.type==="radio"?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){b.type==="radio"?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function d(b){var c=a.data(this[0].form,"validator"),d="on"+b.type.replace(/^validate/,"");c.settings[d]&&c.settings[d].call(c,this[0],b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var b=this.groups={};a.each(this.settings.groups,function(c,d){a.each(d.split(/\s/),function(a,d){b[d]=c})});var c=this.settings.rules;a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",d).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",d),this.settings.invalidHandler&&a(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){b=this.validationTargetFor(this.clean(b)),this.lastElement=b,this.prepareElement(b),this.currentElements=a(b);var c=this.check(b)!==!1;return c?delete this.invalid[b.name]:this.invalid[b.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),c},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b=0;for(var c in a)b++;return b},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return this.size()===0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&a.grep(this.errorList,function(a){return a.element.name===b.name}).length===1&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.replace(" ",".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c=a(b).attr("type"),d=a(b).val();return c==="radio"||c==="checkbox"?a('input[name="'+a(b).attr("name")+'"]:checked').val():typeof d=="string"?d.replace(/\r/g,""):d},check:function(b){b=this.validationTargetFor(this.clean(b));var c=a(b).rules(),d=!1,e=this.elementValue(b),f;for(var g in c){var h={method:g,parameters:c[g]};try{f=a.validator.methods[g].call(this,e,b,h.parameters);if(f==="dependency-mismatch"){d=!0;continue}d=!1;if(f==="pending"){this.toHide=this.toHide.not(this.errorsFor(b));return}if(!f)return this.formatAndAdd(b,h),!1}catch(i){throw this.settings.debug&&window.console&&console.log("exception occured when checking element "+b.id+", check the '"+h.method+"' method",i),i}}if(d)return;return this.objectLength(c)&&this.successList.push(b),!0},customMetaMessage:function(b,c){if(!a.metadata)return;var d=this.settings.meta?a(b).metadata()[this.settings.meta]:a(b).metadata();return d&&d.messages&&d.messages[c]},customDataMessage:function(b,c){return a(b).data("msg-"+c.toLowerCase())||b.attributes&&a(b).attr("data-msg-"+c.toLowerCase())},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==undefined)return arguments[a];return undefined},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),this.customMetaMessage(b,c),!this.settings.ignoreTitle&&b.title||undefined,a.validator.messages[c],"<strong>Warning: No message defined for "+b.name+"</strong>")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;typeof d=="function"?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b;for(a=0;this.errorList[a];a++){var c=this.errorList[a];this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message)}this.errorList.length&&(this.toShow=this.toShow.add(this.containers));if(this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d=this.errorsFor(b);d.length?(d.removeClass(this.settings.validClass).addClass(this.settings.errorClass),d.attr("generated")&&d.html(c)):(d=a("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(b),generated:!0}).addClass(this.settings.errorClass).html(c||""),this.settings.wrapper&&(d=d.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b))),!c&&this.settings.success&&(d.text(""),typeof this.settings.success=="string"?d.addClass(this.settings.success):this.settings.success(d,b)),this.toShow=this.toShow.add(d)},errorsFor:function(b){var c=this.idOrName(b);return this.errors().filter(function(){return a(this).attr("for")===c})},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(a){return this.checkable(a)&&(a=this.findByName(a.name).not(this.settings.ignore)[0]),a},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find('[name="'+b+'"]')},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a,b){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&this.pendingRequest===0&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&this.pendingRequest===0&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},attributeRules:function(b){var c={},d=a(b);for(var e in a.validator.methods){var f;e==="required"?(f=d.get(0).getAttribute(e),f===""&&(f=!0),f=!!f):f=d.attr(e),f?c[e]=f:d[0].getAttribute("type")===e&&(c[e]=!0)}return c.maxlength&&/-1|2147483647|524288/.test(c.maxlength)&&delete c.maxlength,c},metadataRules:function(b){if(!a.metadata)return{};var c=a.data(b.form,"validator").settings.meta;return c?a(b).metadata()[c]:a(b).metadata()},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1){delete b[d];return}if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=e.param!==undefined?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength","min","max"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){b[this]&&(b[this]=[Number(b[this][0]),Number(b[this][1])])}),a.validator.autoCreateRanges&&(b.min&&b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),b.minlength&&b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b.messages&&delete b.messages,b},normalizeRule:function(b){if(typeof b=="string"){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=d!==undefined?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if(c.nodeName.toLowerCase()==="select"){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:a.trim(b).length>0},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e=this.previousValue(c);this.settings.messages[c.name]||(this.settings.messages[c.name]={}),e.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=e.message,d=typeof d=="string"&&{url:d}||d;if(this.pending[c.name])return"pending";if(e.old===b)return e.valid;e.old=b;var f=this;this.startRequest(c);var g={};return g[c.name]=b,a.ajax(a.extend(!0,{url:d,mode:"abort",port:"validate"+c.name,dataType:"json",data:g,success:function(d){f.settings.messages[c.name].remote=e.originalMessage;var g=d===!0||d==="true";if(g){var h=f.formSubmitted;f.prepareElement(c),f.formSubmitted=h,f.successList.push(c),delete f.invalid[c.name],f.showErrors()}else{var i={},j=d||f.defaultMessage(c,"remote");i[c.name]=e.message=a.isFunction(j)?j(b):j,f.invalid[c.name]=!0,f.showErrors(i)}e.valid=g,f.stopRequest(c,g)}},d)),"pending"},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},email:function(a,b){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(a)},url:function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a))},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c=0,d=0,e=!1;a=a.replace(/\D/g,"");for(var f=a.length-1;f>=0;f--){var g=a.charAt(f);d=parseInt(g,10),e&&(d*=2)>9&&(d-=9),c+=d,e=!e}return c%10===0},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()}}}),a.format=a.validator.format})(jQuery),function(a){var b={};if(a.ajaxPrefilter)a.ajaxPrefilter(function(a,c,d){var e=a.port;a.mode==="abort"&&(b[e]&&b[e].abort(),b[e]=d)});else{var c=a.ajax;a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return e==="abort"?(b[f]&&b[f].abort(),b[f]=c.apply(this,arguments)):c.apply(this,arguments)}}}(jQuery),function(a){!jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener&&a.each({focus:"focusin",blur:"focusout"},function(b,c){function d(b){return b=a.event.fix(b),b.type=c,a.event.handle.call(this,b)}a.event.special[c]={setup:function(){this.addEventListener(b,d,!0)},teardown:function(){this.removeEventListener(b,d,!0)},handler:function(b){var d=arguments;return d[0]=a.event.fix(b),d[0].type=c,a.event.handle.apply(this,d)}}}),a.extend(a.fn,{validateDelegate:function(b,c,d){return this.bind(c,function(c){var e=a(c.target);if(e.is(b))return d.apply(e,arguments)})}})}(jQuery) \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt b/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt deleted file mode 100644 index 4ec4fe9b..00000000 --- a/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt +++ /dev/null @@ -1,240 +0,0 @@ -Title: Options Tutorial - -This document will help you understand how jqPlot's options -relate to the API documentation and the jqPlot object -itself. For a listing of options available to jqPlot, -see <jqPlot Options> in the jqPlotOptions.txt file. - -The key to effectively using jqPlot is understanding jqPlot's -options. The online documentation is API documentation. While -it explains what attributes and methods various objects posses, -it doesn't explain how to use or set those attributes through -options. This tutorial will help explain that. - -Lets assume you are creating a plot -like this: - -> chart = $.jqplot('chart', dataSeries, optionsObj); - -First, note that you shouldn't try to directly set attributes on the -"chart" object (like chart.grid.shadow) after your call to $.jqplot(). -At best this won't do anything **(see below). You should pass options in via -the "optionsObj". - -the optionsObj really represents the plot object (jqPlot object, not -to be confused with the $.jqplot function which will create a jqPlot -object). Attributes you specify on that object will be merged with -attributes in the jqPlot object. The axes, legend, series, etc. are -attributes on the jqPlot object. The jqPlot/optionsObj object looks -something like (only some attributes shown): - -> jqPlot-| -> |-seriesColors -> |-textColor -> |-fontFamily -> |-fontSize -> |-stackSeries -> |-series(Array)-| -> | |-Series1-| -> | | |-lineWidth -> | | |-linePattern -> | | |-shadow -> | | |-showLine -> | | |-showMarker -> | | |-color -> | |-Series2... -> | |-... -> | |-SeriesN -> | -> |-grid(Object)-| -> | |-drawGridLines -> | |-background -> | |-borderColor -> | |-borderWidth -> | |-shadow -> | -> |-title(Object)-| -> | |-text -> | |-show -> | |-fontFamily -> | |-fontSize -> | |-textAlign -> | |-textColor -> | -> |-axes(Object)-| -> | |-xais-| -> | | |-min -> | | |-max -> | | |-numberTicks -> | | |-showTicks -> | | |-showTickMarks -> | | |-pad -> | -> | ... and so on - -The optionsObj should follow the same construction as if it were a -jqPlot object (with some exceptions/shortcuts I'll mention in a -moment). So generally, when you see something like -"this.drawGridLines" in the grid properties in the docs, just replace -"this" with "grid" in your options object. So it becomes -optionsObj.grid.drawGridLines. Do likewise with the other objects in -the plot, replacing "this", with the respective attribute on the plot -like "legend" or "title". Series and Axes are handled a little -different, because series is an array and axes has 4 distinct children -"xaxis", "yaxis", "x2axis" and "y2axis". - -So, to remove the shadow from the grid and change the grid border size -you would do: - -> optionObj = {grid:{shadow:false, borderWidth:9.0}}; - -To do the same as above but also make all the text in the plot red you -would do: - -> optionObj = { -> textColor:"#ff0000", -> grid:{shadow:false, borderWidth:9.0} -> } - -Here is a more deeply nested example. Say you want to specify a min -and max on your y axis and use a specific color for your second -series. That would look like: - -> optionsObj = { -> axes:{yaxis:{min:5, max:230}}, -> series:[{},{color:"#33ff66"}] -> } - -Note that series options are an array in order of the series data you -sent in to your plot. To get to the second series, you have to put an -object (even if empty) in place of the first series. - -There is a handy shortcut to assign options to all axes or all series -at one go. Use axesDefaults and seriesDefaults. So, if you wanted -both x and y axes to start at 0 and you wanted all series to not show -markers, you could do: - -> optionsObj = {axesDefaults:{min:0}, seriesDefaults:{showMarker:false}} - -Another shortcut is for the plot title. Normally, you would assign -options to the title as an object. If you specify a title option as a -string, it will assign that to the title.text property automatically. -So these two are equivalent: - -> optionsObj = {title:{text:"My Plot"}} - -and - -> optionsObj = {title:"My Plot"} - -Where things need more explaination is with renderers, plugins and -their options. Briefly, what's renderer, what's a plugin. - -A renderer is an object that is used to draw something and gets -attached to an existing object in the plot in order to draw it. A -plugin does more than just provide drawing functionality to an -object. It will do more like calculate a trend line, change the -cursor, provide event driven functionality, etc. I consider renderers -plugins, but plugins don't have to be renderers. - -So, how do you use renderers, plugins, and specify their options? -Some common renderes are for bar charts and category axes. If you -want to render your series as a bar chart with each set of bars -showing up in a category on the x axis, you do: - -> optionsObj = { -> seriesDefaults:{renderer:$.jqplot.BarRenderer}, -> axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}} -> } - -This replaces the default renderer used for all series in the plot -with a bar renderer and the x axis default renderer (but not any other -axis) with a category renderer. - -Now, how would I assign options to those renderers? The renderer's -attributes may not be present in the pre-existing jqPlot object, they -may be specific to the renderer. This is done through the -"rendererOptions" option on the appropriate object. So, if I wanted my -bars to be 25 pixels wide, I would do: - - -> optionsObj = { -> seriesDefaults:{ -> renderer:$.jqplot.BarRenderer}, -> rendererOptions:{ -> barWidth:25 -> }, -> axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}} -> } - -Again, this is using the "seriesDefaults" option, which will apply -options to all series in the plot. You could do the same on any -particular series in the plot through the "series" options array. - -Plugins are free to add their own options. For example, the -highlighter plugin has it's own set of options that are unique to it. -As a result, it responds to options placed in the "highlighter" -attribute of your options object. So, if I wanted to change the -highlighter tooltip to fade in and out slowly and be positioned -directly above the point I'm highlighting: - -> optionsObj = { -> highlighter:{tooltipFadeSpeed:'slow', tooltipLocation:'n'} -> } - -Other plugins, like dragable and trendlines, add their options in with -the series. This is because both of those plugins can have different -options for different series in the plot. So, if you wanted to specify the -color of the dragable and constrain it to drag only on the x axis as well -as specify the color of the trend line you could do: - -> series:[{ -> dragable: { -> color: '#ff3366', -> constrainTo: 'x' -> }, -> trendline: { -> color: '#cccccc' -> } -> }] - -This would apply those options to the first series only. If you had 2 series -and wanted to turn off dragging and trend lines on the second series, you could do: - -> series:[{ -> dragable: { -> color: '#ff3366', -> constrainTo: 'x' -> }, -> trendline: { -> color: '#cccccc' -> } -> }, { -> isDragable: false, -> trendline:{ -> show: false -> } -> }] - -Note, series dragability is turned off with the "isDragable" option directly on -the series itself, not with a suboption of "dragable". This may be improved -in the future. - -I hope this is helpful. -A few key points to remember: - -- When you see "this" in the api docs, you generally replace it with -the name of the object (in lowercase) you are looking at in your -options object. -- seriesDefaults and axesDefaults are convenient shortcuts. -- to assign options to a renderer, generally use the "rendererOptions" -- plugins may add their own options attribute, like "highlighter" or -"cursor". - -** Note: you can set attributes after the plot is created (like -plot.grid.shadow = false), but you'll have to issue the appropriate -calls to possibly reinitialize and redraw the plot. jqPlot can -definitely handle this to change the plot after creation (this is how -the dragable plugin updates the plot data and the trend line plugin -recomputes itself when data changes). This hasn't been documented -yet, however. \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js deleted file mode 100644 index f089a705..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js +++ /dev/null @@ -1,313 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - // Class: $.jqplot.BezierCurveRenderer.js - // Renderer which draws lines as stacked bezier curves. - // Data for the line will not be specified as an array of - // [x, y] data point values, but as a an array of [start piont, bezier curve] - // So, the line is specified as: [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]]. - $.jqplot.BezierCurveRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.BezierCurveRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.BezierCurveRenderer.prototype.constructor = $.jqplot.BezierCurveRenderer; - - - // Method: setGridData - // converts the user data values to grid coordinates and stores them - // in the gridData array. - // Called with scope of a series. - $.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - // this._plotData should be same as this.data - var data = this.data; - this.gridData = []; - this._prevGridData = []; - // if seriesIndex = 0, fill to x axis. - // if seriesIndex > 0, fill to previous series data. - var idx = this.index; - if (data.length == 2) { - if (idx == 0) { - this.gridData = [ - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], - [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), - xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]), - xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])], - [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)], - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)] - ]; - } - else { - var psd = plot.series[idx-1].data; - this.gridData = [ - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], - [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), - xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]), - xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])], - [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])], - [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]), - xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]), - xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])] - ]; - } - } - else { - if (idx == 0) { - this.gridData = [ - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], - [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), - xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]), - xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])], - [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)], - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)] - ]; - } - else { - var psd = plot.series[idx-1].data; - this.gridData = [ - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], - [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), - xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]), - xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])], - [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])], - [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]), - xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]), - xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])] - ]; - } - } - }; - - // Method: makeGridData - // converts any arbitrary data values to grid coordinates and - // returns them. This method exists so that plugins can use a series' - // linerenderer to generate grid data points without overwriting the - // grid data associated with that series. - // Called with scope of a series. - $.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data, plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var gd = []; - var pgd = []; - // if seriesIndex = 0, fill to x axis. - // if seriesIndex > 0, fill to previous series data. - var idx = this.index; - if (data.length == 2) { - if (idx == 0) { - gd = [ - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], - [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), - xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]), - xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])], - [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)], - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)] - ]; - } - else { - var psd = plot.series[idx-1].data; - gd = [ - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], - [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), - xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]), - xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])], - [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])], - [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]), - xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]), - xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])] - ]; - } - } - else { - if (idx == 0) { - gd = [ - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], - [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), - xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]), - xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])], - [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)], - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)] - ]; - } - else { - var psd = plot.series[idx-1].data; - gd = [ - [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], - [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), - xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]), - xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])], - [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])], - [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]), - xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]), - xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])] - ]; - } - } - return gd; - }; - - - // called within scope of series. - $.jqplot.BezierCurveRenderer.prototype.draw = function(ctx, gd, options) { - var i; - ctx.save(); - if (gd.length) { - if (this.showLine) { - ctx.save(); - var opts = (options != null) ? options : {}; - ctx.fillStyle = opts.fillStyle || this.color; - ctx.beginPath(); - ctx.moveTo(gd[0][0], gd[0][1]); - ctx.bezierCurveTo(gd[1][0], gd[1][1], gd[1][2], gd[1][3], gd[1][4], gd[1][5]); - ctx.lineTo(gd[2][0], gd[2][1]); - if (gd[3].length == 2) { - ctx.lineTo(gd[3][0], gd[3][1]); - } - else { - ctx.bezierCurveTo(gd[3][0], gd[3][1], gd[3][2], gd[3][3], gd[3][4], gd[3][5]); - } - ctx.closePath(); - ctx.fill(); - ctx.restore(); - } - } - - ctx.restore(); - }; - - $.jqplot.BezierCurveRenderer.prototype.drawShadow = function(ctx, gd, options) { - // This is a no-op, shadows drawn with lines. - }; - - $.jqplot.BezierAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - }; - - $.jqplot.BezierAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.BezierAxisRenderer.prototype.constructor = $.jqplot.BezierAxisRenderer; - - - // Axes on a plot with Bezier Curves - $.jqplot.BezierAxisRenderer.prototype.init = function(options){ - $.extend(true, this, options); - var db = this._dataBounds; - // Go through all the series attached to this axis and find - // the min/max bounds for this axis. - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - var d = s.data; - if (d.length == 4) { - for (var j=0; j<d.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - if (d[j][0] < db.min || db.min == null) { - db.min = d[j][0]; - } - if (d[j][0] > db.max || db.max == null) { - db.max = d[j][0]; - } - } - else { - if (d[j][1] < db.min || db.min == null) { - db.min = d[j][1]; - } - if (d[j][1] > db.max || db.max == null) { - db.max = d[j][1]; - } - } - } - } - else { - if (this.name == 'xaxis' || this.name == 'x2axis') { - if (d[0][0] < db.min || db.min == null) { - db.min = d[0][0]; - } - if (d[0][0] > db.max || db.max == null) { - db.max = d[0][0]; - } - for (var j=0; j<5; j+=2) { - if (d[1][j] < db.min || db.min == null) { - db.min = d[1][j]; - } - if (d[1][j] > db.max || db.max == null) { - db.max = d[1][j]; - } - } - } - else { - if (d[0][1] < db.min || db.min == null) { - db.min = d[0][1]; - } - if (d[0][1] > db.max || db.max == null) { - db.max = d[0][1]; - } - for (var j=1; j<6; j+=2) { - if (d[1][j] < db.min || db.min == null) { - db.min = d[1][j]; - } - if (d[1][j] > db.max || db.max == null) { - db.max = d[1][j]; - } - } - } - } - } - }; - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - options = options || {}; - options.axesDefaults = $.extend(true, {pad:0}, options.axesDefaults); - options.legend = $.extend(true, {placement:'outside'}, options.legend); - // only set these if there is a pie series - var setopts = false; - if (options.seriesDefaults.renderer == $.jqplot.BezierCurveRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer == $.jqplot.BezierCurveRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.BezierAxisRenderer; - } - } - - $.jqplot.preInitHooks.push(preInit); - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js deleted file mode 100644 index 77ec27b9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(b){b.jqplot.BezierCurveRenderer=function(){b.jqplot.LineRenderer.call(this)};b.jqplot.BezierCurveRenderer.prototype=new b.jqplot.LineRenderer();b.jqplot.BezierCurveRenderer.prototype.constructor=b.jqplot.BezierCurveRenderer;b.jqplot.BezierCurveRenderer.prototype.setGridData=function(h){var e=this._xaxis.series_u2p;var g=this._yaxis.series_u2p;var f=this.data;this.gridData=[];this._prevGridData=[];var d=this.index;if(f.length==2){if(d==0){this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[1][2]),g.call(this._yaxis,f[1][3]),e.call(this._xaxis,f[1][4]),g.call(this._yaxis,f[1][5])],[e.call(this._xaxis,f[1][4]),g.call(this._yaxis,this._yaxis.min)],[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,this._yaxis.min)]]}else{var c=h.series[d-1].data;this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[1][2]),g.call(this._yaxis,f[1][3]),e.call(this._xaxis,f[1][4]),g.call(this._yaxis,f[1][5])],[e.call(this._xaxis,c[1][4]),g.call(this._yaxis,c[1][5])],[e.call(this._xaxis,c[1][2]),g.call(this._yaxis,c[1][3]),e.call(this._xaxis,c[1][0]),g.call(this._yaxis,c[1][1]),e.call(this._xaxis,c[0][0]),g.call(this._yaxis,c[0][1])]]}}else{if(d==0){this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[2][0]),g.call(this._yaxis,f[2][1]),e.call(this._xaxis,f[3][0]),g.call(this._yaxis,f[3][1])],[e.call(this._xaxis,f[3][1]),g.call(this._yaxis,this._yaxis.min)],[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,this._yaxis.min)]]}else{var c=h.series[d-1].data;this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[2][0]),g.call(this._yaxis,f[2][1]),e.call(this._xaxis,f[3][0]),g.call(this._yaxis,f[3][1])],[e.call(this._xaxis,c[3][0]),g.call(this._yaxis,c[3][1])],[e.call(this._xaxis,c[2][0]),g.call(this._yaxis,c[2][1]),e.call(this._xaxis,c[1][0]),g.call(this._yaxis,c[1][1]),e.call(this._xaxis,c[0][0]),g.call(this._yaxis,c[0][1])]]}}};b.jqplot.BezierCurveRenderer.prototype.makeGridData=function(g,i){var f=this._xaxis.series_u2p;var h=this._yaxis.series_u2p;var e=[];var j=[];var d=this.index;if(g.length==2){if(d==0){e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[1][2]),h.call(this._yaxis,g[1][3]),f.call(this._xaxis,g[1][4]),h.call(this._yaxis,g[1][5])],[f.call(this._xaxis,g[1][4]),h.call(this._yaxis,this._yaxis.min)],[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,this._yaxis.min)]]}else{var c=i.series[d-1].data;e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[1][2]),h.call(this._yaxis,g[1][3]),f.call(this._xaxis,g[1][4]),h.call(this._yaxis,g[1][5])],[f.call(this._xaxis,c[1][4]),h.call(this._yaxis,c[1][5])],[f.call(this._xaxis,c[1][2]),h.call(this._yaxis,c[1][3]),f.call(this._xaxis,c[1][0]),h.call(this._yaxis,c[1][1]),f.call(this._xaxis,c[0][0]),h.call(this._yaxis,c[0][1])]]}}else{if(d==0){e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[2][0]),h.call(this._yaxis,g[2][1]),f.call(this._xaxis,g[3][0]),h.call(this._yaxis,g[3][1])],[f.call(this._xaxis,g[3][1]),h.call(this._yaxis,this._yaxis.min)],[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,this._yaxis.min)]]}else{var c=i.series[d-1].data;e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[2][0]),h.call(this._yaxis,g[2][1]),f.call(this._xaxis,g[3][0]),h.call(this._yaxis,g[3][1])],[f.call(this._xaxis,c[3][0]),h.call(this._yaxis,c[3][1])],[f.call(this._xaxis,c[2][0]),h.call(this._yaxis,c[2][1]),f.call(this._xaxis,c[1][0]),h.call(this._yaxis,c[1][1]),f.call(this._xaxis,c[0][0]),h.call(this._yaxis,c[0][1])]]}}return e};b.jqplot.BezierCurveRenderer.prototype.draw=function(c,g,d){var e;c.save();if(g.length){if(this.showLine){c.save();var f=(d!=null)?d:{};c.fillStyle=f.fillStyle||this.color;c.beginPath();c.moveTo(g[0][0],g[0][1]);c.bezierCurveTo(g[1][0],g[1][1],g[1][2],g[1][3],g[1][4],g[1][5]);c.lineTo(g[2][0],g[2][1]);if(g[3].length==2){c.lineTo(g[3][0],g[3][1])}else{c.bezierCurveTo(g[3][0],g[3][1],g[3][2],g[3][3],g[3][4],g[3][5])}c.closePath();c.fill();c.restore()}}c.restore()};b.jqplot.BezierCurveRenderer.prototype.drawShadow=function(c,e,d){};b.jqplot.BezierAxisRenderer=function(){b.jqplot.LinearAxisRenderer.call(this)};b.jqplot.BezierAxisRenderer.prototype=new b.jqplot.LinearAxisRenderer();b.jqplot.BezierAxisRenderer.prototype.constructor=b.jqplot.BezierAxisRenderer;b.jqplot.BezierAxisRenderer.prototype.init=function(f){b.extend(true,this,f);var c=this._dataBounds;for(var g=0;g<this._series.length;g++){var h=this._series[g];var k=h.data;if(k.length==4){for(var e=0;e<k.length;e++){if(this.name=="xaxis"||this.name=="x2axis"){if(k[e][0]<c.min||c.min==null){c.min=k[e][0]}if(k[e][0]>c.max||c.max==null){c.max=k[e][0]}}else{if(k[e][1]<c.min||c.min==null){c.min=k[e][1]}if(k[e][1]>c.max||c.max==null){c.max=k[e][1]}}}}else{if(this.name=="xaxis"||this.name=="x2axis"){if(k[0][0]<c.min||c.min==null){c.min=k[0][0]}if(k[0][0]>c.max||c.max==null){c.max=k[0][0]}for(var e=0;e<5;e+=2){if(k[1][e]<c.min||c.min==null){c.min=k[1][e]}if(k[1][e]>c.max||c.max==null){c.max=k[1][e]}}}else{if(k[0][1]<c.min||c.min==null){c.min=k[0][1]}if(k[0][1]>c.max||c.max==null){c.max=k[0][1]}for(var e=1;e<6;e+=2){if(k[1][e]<c.min||c.min==null){c.min=k[1][e]}if(k[1][e]>c.max||c.max==null){c.max=k[1][e]}}}}}};function a(g,f,d){d=d||{};d.axesDefaults=b.extend(true,{pad:0},d.axesDefaults);d.legend=b.extend(true,{placement:"outside"},d.legend);var c=false;if(d.seriesDefaults.renderer==b.jqplot.BezierCurveRenderer){c=true}else{if(d.series){for(var e=0;e<d.series.length;e++){if(d.series[e].renderer==b.jqplot.BezierCurveRenderer){c=true}}}}if(c){d.axesDefaults.renderer=b.jqplot.BezierAxisRenderer}}b.jqplot.preInitHooks.push(a)})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js deleted file mode 100644 index 623e8efb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js +++ /dev/null @@ -1,797 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - - // Class: $.jqplot.BarRenderer - // A plugin renderer for jqPlot to draw a bar plot. - // Draws series as a line. - - $.jqplot.BarRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.BarRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.BarRenderer.prototype.constructor = $.jqplot.BarRenderer; - - // called with scope of series. - $.jqplot.BarRenderer.prototype.init = function(options, plot) { - // Group: Properties - // - // prop: barPadding - // Number of pixels between adjacent bars at the same axis value. - this.barPadding = 8; - // prop: barMargin - // Number of pixels between groups of bars at adjacent axis values. - this.barMargin = 10; - // prop: barDirection - // 'vertical' = up and down bars, 'horizontal' = side to side bars - this.barDirection = 'vertical'; - // prop: barWidth - // Width of the bar in pixels (auto by devaul). null = calculated automatically. - this.barWidth = null; - // prop: shadowOffset - // offset of the shadow from the slice and offset of - // each succesive stroke of the shadow from the last. - this.shadowOffset = 2; - // prop: shadowDepth - // number of strokes to apply to the shadow, - // each stroke offset shadowOffset from the last. - this.shadowDepth = 5; - // prop: shadowAlpha - // transparency of the shadow (0 = transparent, 1 = opaque) - this.shadowAlpha = 0.08; - // prop: waterfall - // true to enable waterfall plot. - this.waterfall = false; - // prop: groups - // group bars into this many groups - this.groups = 1; - // prop: varyBarColor - // true to color each bar of a series separately rather than - // have every bar of a given series the same color. - // If used for non-stacked multiple series bar plots, user should - // specify a separate 'seriesColors' array for each series. - // Otherwise, each series will set their bars to the same color array. - // This option has no Effect for stacked bar charts and is disabled. - this.varyBarColor = false; - // prop: highlightMouseOver - // True to highlight slice when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on a slice. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over a slice. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColors - // an array of colors to use when highlighting a bar. - this.highlightColors = []; - // prop: transposedData - // NOT IMPLEMENTED YET. True if this is a horizontal bar plot and - // x and y values are "transposed". Tranposed, or "swapped", data is - // required prior to rev. 894 builds of jqPlot with horizontal bars. - // Allows backward compatability of bar renderer horizontal bars with - // old style data sets. - this.transposedData = true; - this.renderer.animation = { - show: false, - direction: 'down', - speed: 3000, - _supported: true - }; - this._type = 'bar'; - - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (options.highlightMouseDown && options.highlightMouseOver == null) { - options.highlightMouseOver = false; - } - - ////// - // This is probably wrong here. - // After going back and forth on wether renderer should be the thing - // or extend the thing, it seems that it it best if it is a property - // on the thing. This should be something that is commonized - // among series renderers in the future. - ////// - $.extend(true, this, options); - - // really should probably do this - $.extend(true, this.renderer, options); - // fill is still needed to properly draw the legend. - // bars have to be filled. - this.fill = true; - - // if horizontal bar and animating, reset the default direction - if (this.barDirection === 'horizontal' && this.rendererOptions.animation && this.rendererOptions.animation.direction == null) { - this.renderer.animation.direction = 'left'; - } - - if (this.waterfall) { - this.fillToZero = false; - this.disableStack = true; - } - - if (this.barDirection == 'vertical' ) { - this._primaryAxis = '_xaxis'; - this._stackAxis = 'y'; - this.fillAxis = 'y'; - } - else { - this._primaryAxis = '_yaxis'; - this._stackAxis = 'x'; - this.fillAxis = 'x'; - } - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - // total number of values for all bar series, total number of bar series, and position of this series - this._plotSeriesInfo = null; - // Array of actual data colors used for each data point. - this._dataColors = []; - this._barPoints = []; - - // set the shape renderer options - var opts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill}; - this.renderer.shapeRenderer.init(opts); - // set the shadow renderer options - var sopts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill}; - this.renderer.shadowRenderer.init(sopts); - - plot.postInitHooks.addOnce(postInit); - plot.postDrawHooks.addOnce(postPlotDraw); - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); - plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); - plot.eventListenerHooks.addOnce('jqplotClick', handleClick); - plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); - }; - - // called with scope of series - function barPreInit(target, data, seriesDefaults, options) { - if (this.rendererOptions.barDirection == 'horizontal') { - this._stackAxis = 'x'; - this._primaryAxis = '_yaxis'; - } - if (this.rendererOptions.waterfall == true) { - this._data = $.extend(true, [], this.data); - var sum = 0; - var pos = (!this.rendererOptions.barDirection || this.rendererOptions.barDirection === 'vertical' || this.transposedData === false) ? 1 : 0; - for(var i=0; i<this.data.length; i++) { - sum += this.data[i][pos]; - if (i>0) { - this.data[i][pos] += this.data[i-1][pos]; - } - } - this.data[this.data.length] = (pos == 1) ? [this.data.length+1, sum] : [sum, this.data.length+1]; - this._data[this._data.length] = (pos == 1) ? [this._data.length+1, sum] : [sum, this._data.length+1]; - } - if (this.rendererOptions.groups > 1) { - this.breakOnNull = true; - var l = this.data.length; - var skip = parseInt(l/this.rendererOptions.groups, 10); - var count = 0; - for (var i=skip; i<l; i+=skip) { - this.data.splice(i+count, 0, [null, null]); - this._plotData.splice(i+count, 0, [null, null]); - this._stackData.splice(i+count, 0, [null, null]); - count++; - } - for (i=0; i<this.data.length; i++) { - if (this._primaryAxis == '_xaxis') { - this.data[i][0] = i+1; - this._plotData[i][0] = i+1; - this._stackData[i][0] = i+1; - } - else { - this.data[i][1] = i+1; - this._plotData[i][1] = i+1; - this._stackData[i][1] = i+1; - } - } - } - } - - $.jqplot.preSeriesInitHooks.push(barPreInit); - - // needs to be called with scope of series, not renderer. - $.jqplot.BarRenderer.prototype.calcSeriesNumbers = function() { - var nvals = 0; - var nseries = 0; - var paxis = this[this._primaryAxis]; - var s, series, pos; - // loop through all series on this axis - for (var i=0; i < paxis._series.length; i++) { - series = paxis._series[i]; - if (series === this) { - pos = i; - } - // is the series rendered as a bar? - if (series.renderer.constructor == $.jqplot.BarRenderer) { - // gridData may not be computed yet, use data length insted - nvals += series.data.length; - nseries += 1; - } - } - // return total number of values for all bar series, total number of bar series, and position of this series - return [nvals, nseries, pos]; - }; - - $.jqplot.BarRenderer.prototype.setBarWidth = function() { - // need to know how many data values we have on the approprate axis and figure it out. - var i; - var nvals = 0; - var nseries = 0; - var paxis = this[this._primaryAxis]; - var s, series, pos; - var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this); - nvals = temp[0]; - nseries = temp[1]; - var nticks = paxis.numberTicks; - var nbins = (nticks-1)/2; - // so, now we have total number of axis values. - if (paxis.name == 'xaxis' || paxis.name == 'x2axis') { - if (this._stack) { - this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals * nseries - this.barMargin; - } - else { - this.barWidth = ((paxis._offsets.max - paxis._offsets.min)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries; - // this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding - this.barMargin/nseries; - } - } - else { - if (this._stack) { - this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals * nseries - this.barMargin; - } - else { - this.barWidth = ((paxis._offsets.min - paxis._offsets.max)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries; - // this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding - this.barMargin/nseries; - } - } - return [nvals, nseries]; - }; - - function computeHighlightColors (colors) { - var ret = []; - for (var i=0; i<colors.length; i++){ - var rgba = $.jqplot.getColorComponents(colors[i]); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]); - newrgb[j] = parseInt(newrgb[j], 10); - } - ret.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')'); - } - return ret; - } - - function getStart(sidx, didx, comp, plot, axis) { - // check if sign change - var seriesIndex = sidx, - prevSeriesIndex = sidx - 1, - start, - prevVal, - aidx = (axis === 'x') ? 0 : 1; - - // is this not the first series? - if (seriesIndex > 0) { - prevVal = plot.series[prevSeriesIndex]._plotData[didx][aidx]; - - // is there a sign change - if ((comp * prevVal) < 0) { - start = getStart(prevSeriesIndex, didx, comp, plot, axis); - } - - // no sign change. - else { - start = plot.series[prevSeriesIndex].gridData[didx][aidx]; - } - - } - - // if first series, return value at 0 - else { - - start = (aidx === 0) ? plot.series[seriesIndex]._xaxis.series_u2p(0) : plot.series[seriesIndex]._yaxis.series_u2p(0); - } - - return start; - } - - - $.jqplot.BarRenderer.prototype.draw = function(ctx, gridData, options, plot) { - var i; - // Ughhh, have to make a copy of options b/c it may be modified later. - var opts = $.extend({}, options); - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var xaxis = this.xaxis; - var yaxis = this.yaxis; - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var pointx, pointy; - // clear out data colors. - this._dataColors = []; - this._barPoints = []; - - if (this.barWidth == null) { - this.renderer.setBarWidth.call(this); - } - - var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this); - var nvals = temp[0]; - var nseries = temp[1]; - var pos = temp[2]; - var points = []; - - if (this._stack) { - this._barNudge = 0; - } - else { - this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding); - } - if (showLine) { - var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors); - var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors); - var negativeColor = negativeColors.get(this.index); - if (! this.useNegativeColors) { - negativeColor = opts.fillStyle; - } - var positiveColor = opts.fillStyle; - var base; - var xstart; - var ystart; - - if (this.barDirection == 'vertical') { - for (var i=0; i<gridData.length; i++) { - if (!this._stack && this.data[i][1] == null) { - continue; - } - points = []; - base = gridData[i][0] + this._barNudge; - - // stacked - if (this._stack && this._prevGridData.length) { - ystart = getStart(this.index, i, this._plotData[i][1], plot, 'y'); - } - - // not stacked - else { - if (this.fillToZero) { - ystart = this._yaxis.series_u2p(0); - } - else if (this.waterfall && i > 0 && i < this.gridData.length-1) { - ystart = this.gridData[i-1][1]; - } - else if (this.waterfall && i == 0 && i < this.gridData.length-1) { - if (this._yaxis.min <= 0 && this._yaxis.max >= 0) { - ystart = this._yaxis.series_u2p(0); - } - else if (this._yaxis.min > 0) { - ystart = ctx.canvas.height; - } - else { - ystart = 0; - } - } - else if (this.waterfall && i == this.gridData.length - 1) { - if (this._yaxis.min <= 0 && this._yaxis.max >= 0) { - ystart = this._yaxis.series_u2p(0); - } - else if (this._yaxis.min > 0) { - ystart = ctx.canvas.height; - } - else { - ystart = 0; - } - } - else { - ystart = ctx.canvas.height; - } - } - if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) { - if (this.varyBarColor && !this._stack) { - if (this.useNegativeColors) { - opts.fillStyle = negativeColors.next(); - } - else { - opts.fillStyle = positiveColors.next(); - } - } - else { - opts.fillStyle = negativeColor; - } - } - else { - if (this.varyBarColor && !this._stack) { - opts.fillStyle = positiveColors.next(); - } - else { - opts.fillStyle = positiveColor; - } - } - - if (!this.fillToZero || this._plotData[i][1] >= 0) { - points.push([base-this.barWidth/2, ystart]); - points.push([base-this.barWidth/2, gridData[i][1]]); - points.push([base+this.barWidth/2, gridData[i][1]]); - points.push([base+this.barWidth/2, ystart]); - } - // for negative bars make sure points are always ordered clockwise - else { - points.push([base-this.barWidth/2, gridData[i][1]]); - points.push([base-this.barWidth/2, ystart]); - points.push([base+this.barWidth/2, ystart]); - points.push([base+this.barWidth/2, gridData[i][1]]); - } - this._barPoints.push(points); - // now draw the shadows if not stacked. - // for stacked plots, they are predrawn by drawShadow - if (shadow && !this._stack) { - var sopts = $.extend(true, {}, opts); - // need to get rid of fillStyle on shadow. - delete sopts.fillStyle; - this.renderer.shadowRenderer.draw(ctx, points, sopts); - } - var clr = opts.fillStyle || this.color; - this._dataColors.push(clr); - this.renderer.shapeRenderer.draw(ctx, points, opts); - } - } - - else if (this.barDirection == 'horizontal'){ - for (var i=0; i<gridData.length; i++) { - if (!this._stack && this.data[i][0] == null) { - continue; - } - points = []; - base = gridData[i][1] - this._barNudge; - xstart; - - if (this._stack && this._prevGridData.length) { - xstart = getStart(this.index, i, this._plotData[i][0], plot, 'x'); - } - // not stacked - else { - if (this.fillToZero) { - xstart = this._xaxis.series_u2p(0); - } - else if (this.waterfall && i > 0 && i < this.gridData.length-1) { - xstart = this.gridData[i-1][0]; - } - else if (this.waterfall && i == 0 && i < this.gridData.length-1) { - if (this._xaxis.min <= 0 && this._xaxis.max >= 0) { - xstart = this._xaxis.series_u2p(0); - } - else if (this._xaxis.min > 0) { - xstart = 0; - } - else { - xstart = 0; - } - } - else if (this.waterfall && i == this.gridData.length - 1) { - if (this._xaxis.min <= 0 && this._xaxis.max >= 0) { - xstart = this._xaxis.series_u2p(0); - } - else if (this._xaxis.min > 0) { - xstart = 0; - } - else { - xstart = ctx.canvas.width; - } - } - else { - xstart = 0; - } - } - if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) { - if (this.varyBarColor && !this._stack) { - if (this.useNegativeColors) { - opts.fillStyle = negativeColors.next(); - } - else { - opts.fillStyle = positiveColors.next(); - } - } - } - else { - if (this.varyBarColor && !this._stack) { - opts.fillStyle = positiveColors.next(); - } - else { - opts.fillStyle = positiveColor; - } - } - - - if (!this.fillToZero || this._plotData[i][0] >= 0) { - points.push([xstart, base + this.barWidth / 2]); - points.push([xstart, base - this.barWidth / 2]); - points.push([gridData[i][0], base - this.barWidth / 2]); - points.push([gridData[i][0], base + this.barWidth / 2]); - } - else { - points.push([gridData[i][0], base + this.barWidth / 2]); - points.push([gridData[i][0], base - this.barWidth / 2]); - points.push([xstart, base - this.barWidth / 2]); - points.push([xstart, base + this.barWidth / 2]); - } - - this._barPoints.push(points); - // now draw the shadows if not stacked. - // for stacked plots, they are predrawn by drawShadow - if (shadow && !this._stack) { - var sopts = $.extend(true, {}, opts); - delete sopts.fillStyle; - this.renderer.shadowRenderer.draw(ctx, points, sopts); - } - var clr = opts.fillStyle || this.color; - this._dataColors.push(clr); - this.renderer.shapeRenderer.draw(ctx, points, opts); - } - } - } - - if (this.highlightColors.length == 0) { - this.highlightColors = $.jqplot.computeHighlightColors(this._dataColors); - } - - else if (typeof(this.highlightColors) == 'string') { - var temp = this.highlightColors; - this.highlightColors = []; - for (var i=0; i<this._dataColors.length; i++) { - this.highlightColors.push(temp); - } - } - - }; - - - // for stacked plots, shadows will be pre drawn by drawShadow. - $.jqplot.BarRenderer.prototype.drawShadow = function(ctx, gridData, options, plot) { - var i; - var opts = (options != undefined) ? options : {}; - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var xaxis = this.xaxis; - var yaxis = this.yaxis; - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var pointx, points, pointy, nvals, nseries, pos; - - if (this._stack && this.shadow) { - if (this.barWidth == null) { - this.renderer.setBarWidth.call(this); - } - - var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this); - nvals = temp[0]; - nseries = temp[1]; - pos = temp[2]; - - if (this._stack) { - this._barNudge = 0; - } - else { - this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding); - } - if (showLine) { - - if (this.barDirection == 'vertical') { - for (var i=0; i<gridData.length; i++) { - if (this.data[i][1] == null) { - continue; - } - points = []; - var base = gridData[i][0] + this._barNudge; - var ystart; - - if (this._stack && this._prevGridData.length) { - ystart = getStart(this.index, i, this._plotData[i][1], plot, 'y'); - } - else { - if (this.fillToZero) { - ystart = this._yaxis.series_u2p(0); - } - else { - ystart = ctx.canvas.height; - } - } - - points.push([base-this.barWidth/2, ystart]); - points.push([base-this.barWidth/2, gridData[i][1]]); - points.push([base+this.barWidth/2, gridData[i][1]]); - points.push([base+this.barWidth/2, ystart]); - this.renderer.shadowRenderer.draw(ctx, points, opts); - } - } - - else if (this.barDirection == 'horizontal'){ - for (var i=0; i<gridData.length; i++) { - if (this.data[i][0] == null) { - continue; - } - points = []; - var base = gridData[i][1] - this._barNudge; - var xstart; - - if (this._stack && this._prevGridData.length) { - xstart = getStart(this.index, i, this._plotData[i][0], plot, 'x'); - } - else { - if (this.fillToZero) { - xstart = this._xaxis.series_u2p(0); - } - else { - xstart = 0; - } - } - - points.push([xstart, base+this.barWidth/2]); - points.push([gridData[i][0], base+this.barWidth/2]); - points.push([gridData[i][0], base-this.barWidth/2]); - points.push([xstart, base-this.barWidth/2]); - this.renderer.shadowRenderer.draw(ctx, points, opts); - } - } - } - - } - }; - - function postInit(target, data, options) { - for (var i=0; i<this.series.length; i++) { - if (this.series[i].renderer.constructor == $.jqplot.BarRenderer) { - // don't allow mouseover and mousedown at same time. - if (this.series[i].highlightMouseOver) { - this.series[i].highlightMouseDown = false; - } - } - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.barRenderer && this.plugins.barRenderer.highlightCanvas) { - - this.plugins.barRenderer.highlightCanvas.resetCanvas(); - this.plugins.barRenderer.highlightCanvas = null; - } - - this.plugins.barRenderer = {highlightedSeriesIndex:null}; - this.plugins.barRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - - this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-barRenderer-highlight-canvas', this._plotDimensions, this)); - this.plugins.barRenderer.highlightCanvas.setContext(); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); - } - - function highlight (plot, sidx, pidx, points) { - var s = plot.series[sidx]; - var canvas = plot.plugins.barRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.barRenderer.highlightedSeriesIndex = sidx; - var opts = {fillStyle: s.highlightColors[pidx]}; - s.renderer.shapeRenderer.draw(canvas._ctx, points, opts); - canvas = null; - } - - function unhighlight (plot) { - var canvas = plot.plugins.barRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.barRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - canvas = null; - } - - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { - var idx = plot.plugins.barRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - } - - function handleClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt = jQuery.Event('jqplotDataClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - function handleRightClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var idx = plot.plugins.barRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - var evt = jQuery.Event('jqplotDataRightClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js deleted file mode 100644 index 47f85dd8..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(d){d.jqplot.BarRenderer=function(){d.jqplot.LineRenderer.call(this)};d.jqplot.BarRenderer.prototype=new d.jqplot.LineRenderer();d.jqplot.BarRenderer.prototype.constructor=d.jqplot.BarRenderer;d.jqplot.BarRenderer.prototype.init=function(o,q){this.barPadding=8;this.barMargin=10;this.barDirection="vertical";this.barWidth=null;this.shadowOffset=2;this.shadowDepth=5;this.shadowAlpha=0.08;this.waterfall=false;this.groups=1;this.varyBarColor=false;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.transposedData=true;this.renderer.animation={show:false,direction:"down",speed:3000,_supported:true};this._type="bar";if(o.highlightMouseDown&&o.highlightMouseOver==null){o.highlightMouseOver=false}d.extend(true,this,o);d.extend(true,this.renderer,o);this.fill=true;if(this.barDirection==="horizontal"&&this.rendererOptions.animation&&this.rendererOptions.animation.direction==null){this.renderer.animation.direction="left"}if(this.waterfall){this.fillToZero=false;this.disableStack=true}if(this.barDirection=="vertical"){this._primaryAxis="_xaxis";this._stackAxis="y";this.fillAxis="y"}else{this._primaryAxis="_yaxis";this._stackAxis="x";this.fillAxis="x"}this._highlightedPoint=null;this._plotSeriesInfo=null;this._dataColors=[];this._barPoints=[];var p={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill};this.renderer.shapeRenderer.init(p);var n={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill};this.renderer.shadowRenderer.init(n);q.postInitHooks.addOnce(h);q.postDrawHooks.addOnce(j);q.eventListenerHooks.addOnce("jqplotMouseMove",b);q.eventListenerHooks.addOnce("jqplotMouseDown",a);q.eventListenerHooks.addOnce("jqplotMouseUp",l);q.eventListenerHooks.addOnce("jqplotClick",e);q.eventListenerHooks.addOnce("jqplotRightClick",m)};function g(t,p,o,w){if(this.rendererOptions.barDirection=="horizontal"){this._stackAxis="x";this._primaryAxis="_yaxis"}if(this.rendererOptions.waterfall==true){this._data=d.extend(true,[],this.data);var s=0;var u=(!this.rendererOptions.barDirection||this.rendererOptions.barDirection==="vertical"||this.transposedData===false)?1:0;for(var q=0;q<this.data.length;q++){s+=this.data[q][u];if(q>0){this.data[q][u]+=this.data[q-1][u]}}this.data[this.data.length]=(u==1)?[this.data.length+1,s]:[s,this.data.length+1];this._data[this._data.length]=(u==1)?[this._data.length+1,s]:[s,this._data.length+1]}if(this.rendererOptions.groups>1){this.breakOnNull=true;var n=this.data.length;var v=parseInt(n/this.rendererOptions.groups,10);var r=0;for(var q=v;q<n;q+=v){this.data.splice(q+r,0,[null,null]);this._plotData.splice(q+r,0,[null,null]);this._stackData.splice(q+r,0,[null,null]);r++}for(q=0;q<this.data.length;q++){if(this._primaryAxis=="_xaxis"){this.data[q][0]=q+1;this._plotData[q][0]=q+1;this._stackData[q][0]=q+1}else{this.data[q][1]=q+1;this._plotData[q][1]=q+1;this._stackData[q][1]=q+1}}}}d.jqplot.preSeriesInitHooks.push(g);d.jqplot.BarRenderer.prototype.calcSeriesNumbers=function(){var r=0;var t=0;var q=this[this._primaryAxis];var p,o,u;for(var n=0;n<q._series.length;n++){o=q._series[n];if(o===this){u=n}if(o.renderer.constructor==d.jqplot.BarRenderer){r+=o.data.length;t+=1}}return[r,t,u]};d.jqplot.BarRenderer.prototype.setBarWidth=function(){var q;var n=0;var o=0;var t=this[this._primaryAxis];var x,r,v;var w=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);n=w[0];o=w[1];var u=t.numberTicks;var p=(u-1)/2;if(t.name=="xaxis"||t.name=="x2axis"){if(this._stack){this.barWidth=(t._offsets.max-t._offsets.min)/n*o-this.barMargin}else{this.barWidth=((t._offsets.max-t._offsets.min)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}else{if(this._stack){this.barWidth=(t._offsets.min-t._offsets.max)/n*o-this.barMargin}else{this.barWidth=((t._offsets.min-t._offsets.max)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}return[n,o]};function f(o){var q=[];for(var s=0;s<o.length;s++){var r=d.jqplot.getColorComponents(o[s]);var n=[r[0],r[1],r[2]];var t=n[0]+n[1]+n[2];for(var p=0;p<3;p++){n[p]=(t>570)?n[p]*0.8:n[p]+0.3*(255-n[p]);n[p]=parseInt(n[p],10)}q.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}return q}function i(v,u,s,t,o){var q=v,w=v-1,n,p,r=(o==="x")?0:1;if(q>0){p=t.series[w]._plotData[u][r];if((s*p)<0){n=i(w,u,s,t,o)}else{n=t.series[w].gridData[u][r]}}else{n=(r===0)?t.series[q]._xaxis.series_u2p(0):t.series[q]._yaxis.series_u2p(0)}return n}d.jqplot.BarRenderer.prototype.draw=function(E,L,q,G){var I;var A=d.extend({},q);var w=(A.shadow!=undefined)?A.shadow:this.shadow;var O=(A.showLine!=undefined)?A.showLine:this.showLine;var F=(A.fill!=undefined)?A.fill:this.fill;var p=this.xaxis;var J=this.yaxis;var y=this._xaxis.series_u2p;var K=this._yaxis.series_u2p;var D,C;this._dataColors=[];this._barPoints=[];if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var N=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);var x=N[0];var v=N[1];var s=N[2];var H=[];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(v/2-0.5)+s)*(this.barWidth+this.barPadding)}if(O){var u=new d.jqplot.ColorGenerator(this.negativeSeriesColors);var B=new d.jqplot.ColorGenerator(this.seriesColors);var M=u.get(this.index);if(!this.useNegativeColors){M=A.fillStyle}var t=A.fillStyle;var r;var P;var o;if(this.barDirection=="vertical"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][1]==null){continue}H=[];r=L[I][0]+this._barNudge;if(this._stack&&this._prevGridData.length){o=i(this.index,I,this._plotData[I][1],G,"y")}else{if(this.fillToZero){o=this._yaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){o=this.gridData[I-1][1]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{o=E.canvas.height}}}}}if((this.fillToZero&&this._plotData[I][1]<0)||(this.waterfall&&this._data[I][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}else{A.fillStyle=M}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][1]>=0){H.push([r-this.barWidth/2,o]);H.push([r-this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,o])}else{H.push([r-this.barWidth/2,L[I][1]]);H.push([r-this.barWidth/2,o]);H.push([r+this.barWidth/2,o]);H.push([r+this.barWidth/2,L[I][1]])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}else{if(this.barDirection=="horizontal"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][0]==null){continue}H=[];r=L[I][1]-this._barNudge;P;if(this._stack&&this._prevGridData.length){P=i(this.index,I,this._plotData[I][0],G,"x")}else{if(this.fillToZero){P=this._xaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){P=this.gridData[I-1][0]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=E.canvas.width}}}else{P=0}}}}}if((this.fillToZero&&this._plotData[I][1]<0)||(this.waterfall&&this._data[I][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][0]>=0){H.push([P,r+this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([L[I][0],r+this.barWidth/2])}else{H.push([L[I][0],r+this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([P,r+this.barWidth/2])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}}}if(this.highlightColors.length==0){this.highlightColors=d.jqplot.computeHighlightColors(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){var N=this.highlightColors;this.highlightColors=[];for(var I=0;I<this._dataColors.length;I++){this.highlightColors.push(N)}}}};d.jqplot.BarRenderer.prototype.drawShadow=function(z,G,p,B){var D;var w=(p!=undefined)?p:{};var t=(w.shadow!=undefined)?w.shadow:this.shadow;var I=(w.showLine!=undefined)?w.showLine:this.showLine;var A=(w.fill!=undefined)?w.fill:this.fill;var o=this.xaxis;var E=this.yaxis;var v=this._xaxis.series_u2p;var F=this._yaxis.series_u2p;var y,C,x,u,s,r;if(this._stack&&this.shadow){if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var H=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);u=H[0];s=H[1];r=H[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(s/2-0.5)+r)*(this.barWidth+this.barPadding)}if(I){if(this.barDirection=="vertical"){for(var D=0;D<G.length;D++){if(this.data[D][1]==null){continue}C=[];var q=G[D][0]+this._barNudge;var n;if(this._stack&&this._prevGridData.length){n=i(this.index,D,this._plotData[D][1],B,"y")}else{if(this.fillToZero){n=this._yaxis.series_u2p(0)}else{n=z.canvas.height}}C.push([q-this.barWidth/2,n]);C.push([q-this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,n]);this.renderer.shadowRenderer.draw(z,C,w)}}else{if(this.barDirection=="horizontal"){for(var D=0;D<G.length;D++){if(this.data[D][0]==null){continue}C=[];var q=G[D][1]-this._barNudge;var J;if(this._stack&&this._prevGridData.length){J=i(this.index,D,this._plotData[D][0],B,"x")}else{if(this.fillToZero){J=this._xaxis.series_u2p(0)}else{J=0}}C.push([J,q+this.barWidth/2]);C.push([G[D][0],q+this.barWidth/2]);C.push([G[D][0],q-this.barWidth/2]);C.push([J,q-this.barWidth/2]);this.renderer.shadowRenderer.draw(z,C,w)}}}}}};function h(q,p,n){for(var o=0;o<this.series.length;o++){if(this.series[o].renderer.constructor==d.jqplot.BarRenderer){if(this.series[o].highlightMouseOver){this.series[o].highlightMouseDown=false}}}}function j(){if(this.plugins.barRenderer&&this.plugins.barRenderer.highlightCanvas){this.plugins.barRenderer.highlightCanvas.resetCanvas();this.plugins.barRenderer.highlightCanvas=null}this.plugins.barRenderer={highlightedSeriesIndex:null};this.plugins.barRenderer.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-barRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.barRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(n){k(n.data.plot)})}function c(u,t,q,p){var o=u.series[t];var n=u.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=q;u.plugins.barRenderer.highlightedSeriesIndex=t;var r={fillStyle:o.highlightColors[q]};o.renderer.shapeRenderer.draw(n._ctx,p,r);n=null}function k(p){var n=p.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.barRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight");n=null}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.barRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=r.which;n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);c(s,t.seriesIndex,t.pointIndex,t.points)}}else{if(t==null){k(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.barRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);c(r,s.seriesIndex,s.pointIndex,s.points)}}else{if(s==null){k(r)}}}function l(p,o,s,r,q){var n=q.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){k(q)}}function e(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){k(s)}var o=jQuery.Event("jqplotDataRightClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js deleted file mode 100644 index f2447058..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js +++ /dev/null @@ -1,234 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.BlockRenderer - * Plugin renderer to draw a x-y block chart. A Block chart has data points displayed as - * colored squares with a text label inside. Data must be supplied in the form: - * - * > [[x1, y1, "label 1", {css}], [x2, y2, "label 2", {css}], ...] - * - * The label and css object are optional. If the label is ommitted, the - * box will collapse unless a css height and/or width is specified. - * - * The css object is an object specifying css properties - * such as: - * - * > {background:'#4f98a5', border:'3px solid gray', padding:'1px'} - * - * Note that css properties specified with the data point override defaults - * specified with the series. - * - */ - $.jqplot.BlockRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.BlockRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.BlockRenderer.prototype.constructor = $.jqplot.BlockRenderer; - - // called with scope of a series - $.jqplot.BlockRenderer.prototype.init = function(options) { - // Group: Properties - // - // prop: css - // default css styles that will be applied to all data blocks. - // these values will be overridden by css styles supplied with the - // individulal data points. - this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}; - // prop: escapeHtml - // true to escape html in the box label. - this.escapeHtml = false; - // prop: insertBreaks - // true to turn spaces in data block label into html breaks <br />. - this.insertBreaks = true; - // prop: varyBlockColors - // true to vary the color of each block in this series according to - // the seriesColors array. False to set each block to the color - // specified on this series. This has no effect if a css background color - // option is specified in the renderer css options. - this.varyBlockColors = false; - $.extend(true, this, options); - if (this.css.backgroundColor) { - this.color = this.css.backgroundColor; - } - else if (this.css.background) { - this.color = this.css.background; - } - else if (!this.varyBlockColors) { - this.css.background = this.color; - } - this.canvas = new $.jqplot.BlockCanvas(); - this.shadowCanvas = new $.jqplot.BlockCanvas(); - this.canvas._plotDimensions = this._plotDimensions; - this.shadowCanvas._plotDimensions = this._plotDimensions; - this._type = 'block'; - - // group: Methods - // - // Method: moveBlock - // Moves an individual block. More efficient than redrawing - // the whole series by calling plot.drawSeries(). - // Properties: - // idx - the 0 based index of the block or point in this series. - // x - the x coordinate in data units (value on x axis) to move the block to. - // y - the y coordinate in data units (value on the y axis) to move the block to. - // duration - optional parameter to create an animated movement. Can be a - // number (higher is slower animation) or 'fast', 'normal' or 'slow'. If not - // provided, the element is moved without any animation. - this.moveBlock = function (idx, x, y, duration) { - // update plotData, stackData, data and gridData - // x and y are in data coordinates. - var el = this.canvas._elem.children(':eq('+idx+')'); - this.data[idx][0] = x; - this.data[idx][1] = y; - this._plotData[idx][0] = x; - this._plotData[idx][1] = y; - this._stackData[idx][0] = x; - this._stackData[idx][1] = y; - this.gridData[idx][0] = this._xaxis.series_u2p(x); - this.gridData[idx][1] = this._yaxis.series_u2p(y); - var w = el.outerWidth(); - var h = el.outerHeight(); - var left = this.gridData[idx][0] - w/2 + 'px'; - var top = this.gridData[idx][1] - h/2 + 'px'; - if (duration) { - if (parseInt(duration, 10)) { - duration = parseInt(duration, 10); - } - el.animate({left:left, top:top}, duration); - } - else { - el.css({left:left, top:top}); - } - el = null; - }; - }; - - // called with scope of series - $.jqplot.BlockRenderer.prototype.draw = function (ctx, gd, options) { - if (this.plugins.pointLabels) { - this.plugins.pointLabels.show = false; - } - var i, el, d, gd, t, css, w, h, left, top; - var opts = (options != undefined) ? options : {}; - var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors); - this.canvas._elem.empty(); - for (i=0; i<this.gridData.length; i++) { - d = this.data[i]; - gd = this.gridData[i]; - t = ''; - css = {}; - if (typeof d[2] == 'string') { - t = d[2]; - } - else if (typeof d[2] == 'object') { - css = d[2]; - } - if (typeof d[3] == 'object') { - css = d[3]; - } - if (this.insertBreaks){ - t = t.replace(/ /g, '<br />'); - } - css = $.extend(true, {}, this.css, css); - // create a div - el = $('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>'); - this.canvas._elem.append(el); - // set text - this.escapeHtml ? el.text(t) : el.html(t); - // style it - // remove styles we don't want overridden. - delete css.position; - delete css.marginRight; - delete css.marginLeft; - if (!css.background && !css.backgroundColor && !css.backgroundImage){ - css.background = colorGenerator.next(); - } - el.css(css); - w = el.outerWidth(); - h = el.outerHeight(); - left = gd[0] - w/2 + 'px'; - top = gd[1] - h/2 + 'px'; - el.css({left:left, top:top}); - el = null; - } - }; - - $.jqplot.BlockCanvas = function() { - $.jqplot.ElemContainer.call(this); - this._ctx; - }; - - $.jqplot.BlockCanvas.prototype = new $.jqplot.ElemContainer(); - $.jqplot.BlockCanvas.prototype.constructor = $.jqplot.BlockCanvas; - - $.jqplot.BlockCanvas.prototype.createElement = function(offsets, clss, plotDimensions) { - this._offsets = offsets; - var klass = 'jqplot-blockCanvas'; - if (clss != undefined) { - klass = clss; - } - var elem; - // if this canvas already has a dom element, don't make a new one. - if (this._elem) { - elem = this._elem.get(0); - } - else { - elem = document.createElement('div'); - } - // if new plotDimensions supplied, use them. - if (plotDimensions != undefined) { - this._plotDimensions = plotDimensions; - } - - var w = this._plotDimensions.width - this._offsets.left - this._offsets.right + 'px'; - var h = this._plotDimensions.height - this._offsets.top - this._offsets.bottom + 'px'; - this._elem = $(elem); - this._elem.css({ position: 'absolute', width:w, height:h, left: this._offsets.left, top: this._offsets.top }); - - this._elem.addClass(klass); - return this._elem; - }; - - $.jqplot.BlockCanvas.prototype.setContext = function() { - this._ctx = { - canvas:{ - width:0, - height:0 - }, - clearRect:function(){return null;} - }; - return this._ctx; - }; - -})(jQuery); - diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js deleted file mode 100644 index 62cfd0b8..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.BlockRenderer=function(){a.jqplot.LineRenderer.call(this)};a.jqplot.BlockRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.BlockRenderer.prototype.constructor=a.jqplot.BlockRenderer;a.jqplot.BlockRenderer.prototype.init=function(b){this.css={padding:"2px",border:"1px solid #999",textAlign:"center"};this.escapeHtml=false;this.insertBreaks=true;this.varyBlockColors=false;a.extend(true,this,b);if(this.css.backgroundColor){this.color=this.css.backgroundColor}else{if(this.css.background){this.color=this.css.background}else{if(!this.varyBlockColors){this.css.background=this.color}}}this.canvas=new a.jqplot.BlockCanvas();this.shadowCanvas=new a.jqplot.BlockCanvas();this.canvas._plotDimensions=this._plotDimensions;this.shadowCanvas._plotDimensions=this._plotDimensions;this._type="block";this.moveBlock=function(l,j,i,e){var c=this.canvas._elem.children(":eq("+l+")");this.data[l][0]=j;this.data[l][1]=i;this._plotData[l][0]=j;this._plotData[l][1]=i;this._stackData[l][0]=j;this._stackData[l][1]=i;this.gridData[l][0]=this._xaxis.series_u2p(j);this.gridData[l][1]=this._yaxis.series_u2p(i);var k=c.outerWidth();var f=c.outerHeight();var d=this.gridData[l][0]-k/2+"px";var g=this.gridData[l][1]-f/2+"px";if(e){if(parseInt(e,10)){e=parseInt(e,10)}c.animate({left:d,top:g},e)}else{c.css({left:d,top:g})}c=null}};a.jqplot.BlockRenderer.prototype.draw=function(q,o,r){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var f,c,l,o,p,k,n,g,e,m;var b=(r!=undefined)?r:{};var j=new a.jqplot.ColorGenerator(this.seriesColors);this.canvas._elem.empty();for(f=0;f<this.gridData.length;f++){l=this.data[f];o=this.gridData[f];p="";k={};if(typeof l[2]=="string"){p=l[2]}else{if(typeof l[2]=="object"){k=l[2]}}if(typeof l[3]=="object"){k=l[3]}if(this.insertBreaks){p=p.replace(/ /g,"<br />")}k=a.extend(true,{},this.css,k);c=a('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');this.canvas._elem.append(c);this.escapeHtml?c.text(p):c.html(p);delete k.position;delete k.marginRight;delete k.marginLeft;if(!k.background&&!k.backgroundColor&&!k.backgroundImage){k.background=j.next()}c.css(k);n=c.outerWidth();g=c.outerHeight();e=o[0]-n/2+"px";m=o[1]-g/2+"px";c.css({left:e,top:m});c=null}};a.jqplot.BlockCanvas=function(){a.jqplot.ElemContainer.call(this);this._ctx};a.jqplot.BlockCanvas.prototype=new a.jqplot.ElemContainer();a.jqplot.BlockCanvas.prototype.constructor=a.jqplot.BlockCanvas;a.jqplot.BlockCanvas.prototype.createElement=function(i,e,c){this._offsets=i;var b="jqplot-blockCanvas";if(e!=undefined){b=e}var g;if(this._elem){g=this._elem.get(0)}else{g=document.createElement("div")}if(c!=undefined){this._plotDimensions=c}var d=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var f=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=a(g);this._elem.css({position:"absolute",width:d,height:f,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(b);return this._elem};a.jqplot.BlockCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js deleted file mode 100644 index 3793d6de..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js +++ /dev/null @@ -1,758 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - var arrayMax = function( array ){ - return Math.max.apply( Math, array ); - }; - var arrayMin = function( array ){ - return Math.min.apply( Math, array ); - }; - - /** - * Class: $.jqplot.BubbleRenderer - * Plugin renderer to draw a bubble chart. A Bubble chart has data points displayed as - * colored circles with an optional text label inside. To use - * the bubble renderer, you must include the bubble renderer like: - * - * > <script language="javascript" type="text/javascript" src="../src/plugins/jqplot.bubbleRenderer.js"></script> - * - * Data must be supplied in - * the form: - * - * > [[x1, y1, r1, <label or {label:'text', color:color}>], ...] - * - * where the label or options - * object is optional. - * - * Note that all bubble colors will be the same - * unless the "varyBubbleColors" option is set to true. Colors can be specified in the data array - * or in the seriesColors array option on the series. If no colors are defined, the default jqPlot - * series of 16 colors are used. Colors are automatically cycled around again if there are more - * bubbles than colors. - * - * Bubbles are autoscaled by default to fit within the chart area while maintaining - * relative sizes. If the "autoscaleBubbles" option is set to false, the r(adius) values - * in the data array a treated as literal pixel values for the radii of the bubbles. - * - * Properties are passed into the bubble renderer in the rendererOptions object of - * the series options like: - * - * > seriesDefaults: { - * > renderer: $.jqplot.BubbleRenderer, - * > rendererOptions: { - * > bubbleAlpha: 0.7, - * > varyBubbleColors: false - * > } - * > } - * - */ - $.jqplot.BubbleRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.BubbleRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.BubbleRenderer.prototype.constructor = $.jqplot.BubbleRenderer; - - // called with scope of a series - $.jqplot.BubbleRenderer.prototype.init = function(options, plot) { - // Group: Properties - // - // prop: varyBubbleColors - // True to vary the color of each bubble in this series according to - // the seriesColors array. False to set each bubble to the color - // specified on this series. This has no effect if a css background color - // option is specified in the renderer css options. - this.varyBubbleColors = true; - // prop: autoscaleBubbles - // True to scale the bubble radius based on plot size. - // False will use the radius value as provided as a raw pixel value for - // bubble radius. - this.autoscaleBubbles = true; - // prop: autoscaleMultiplier - // Multiplier the bubble size if autoscaleBubbles is true. - this.autoscaleMultiplier = 1.0; - // prop: autoscalePointsFactor - // Factor which decreases bubble size based on how many bubbles on on the chart. - // 0 means no adjustment for number of bubbles. Negative values will decrease - // size of bubbles as more bubbles are added. Values between 0 and -0.2 - // should work well. - this.autoscalePointsFactor = -0.07; - // prop: escapeHtml - // True to escape html in bubble label text. - this.escapeHtml = true; - // prop: highlightMouseOver - // True to highlight bubbles when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on a slice. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over a bubble. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColors - // An array of colors to use when highlighting a slice. Calculated automatically - // if not supplied. - this.highlightColors = []; - // prop: bubbleAlpha - // Alpha transparency to apply to all bubbles in this series. - this.bubbleAlpha = 1.0; - // prop: highlightAlpha - // Alpha transparency to apply when highlighting bubble. - // Set to value of bubbleAlpha by default. - this.highlightAlpha = null; - // prop: bubbleGradients - // True to color the bubbles with gradient fills instead of flat colors. - // NOT AVAILABLE IN IE due to lack of excanvas support for radial gradient fills. - // will be ignored in IE. - this.bubbleGradients = false; - // prop: showLabels - // True to show labels on bubbles (if any), false to not show. - this.showLabels = true; - // array of [point index, radius] which will be sorted in descending order to plot - // largest points below smaller points. - this.radii = []; - this.maxRadius = 0; - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - // array of jQuery labels. - this.labels = []; - this.bubbleCanvases = []; - this._type = 'bubble'; - - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (options.highlightMouseDown && options.highlightMouseOver == null) { - options.highlightMouseOver = false; - } - - $.extend(true, this, options); - - if (this.highlightAlpha == null) { - this.highlightAlpha = this.bubbleAlpha; - if (this.bubbleGradients) { - this.highlightAlpha = 0.35; - } - } - - this.autoscaleMultiplier = this.autoscaleMultiplier * Math.pow(this.data.length, this.autoscalePointsFactor); - - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - - // adjust the series colors for options colors passed in with data or for alpha. - // note, this can leave undefined holes in the seriesColors array. - var comps; - for (var i=0; i<this.data.length; i++) { - var color = null; - var d = this.data[i]; - this.maxRadius = Math.max(this.maxRadius, d[2]); - if (d[3]) { - if (typeof(d[3]) == 'object') { - color = d[3]['color']; - } - } - - if (color == null) { - if (this.seriesColors[i] != null) { - color = this.seriesColors[i]; - } - } - - if (color && this.bubbleAlpha < 1.0) { - comps = $.jqplot.getColorComponents(color); - color = 'rgba('+comps[0]+', '+comps[1]+', '+comps[2]+', '+this.bubbleAlpha+')'; - } - - if (color) { - this.seriesColors[i] = color; - } - } - - if (!this.varyBubbleColors) { - this.seriesColors = [this.color]; - } - - this.colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors); - - // set highlight colors if none provided - if (this.highlightColors.length == 0) { - for (var i=0; i<this.seriesColors.length; i++){ - var rgba = $.jqplot.getColorComponents(this.seriesColors[i]); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]); - newrgb[j] = parseInt(newrgb[j], 10); - } - this.highlightColors.push('rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+', '+this.highlightAlpha+')'); - } - } - - this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors); - - var sopts = {fill:true, isarc:true, angle:this.shadowAngle, alpha:this.shadowAlpha, closePath:true}; - - this.renderer.shadowRenderer.init(sopts); - - this.canvas = new $.jqplot.DivCanvas(); - this.canvas._plotDimensions = this._plotDimensions; - - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); - plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); - plot.eventListenerHooks.addOnce('jqplotClick', handleClick); - plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); - plot.postDrawHooks.addOnce(postPlotDraw); - - }; - - - // converts the user data values to grid coordinates and stores them - // in the gridData array. - // Called with scope of a series. - $.jqplot.BubbleRenderer.prototype.setGridData = function(plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var data = this._plotData; - this.gridData = []; - var radii = []; - this.radii = []; - var dim = Math.min(plot._height, plot._width); - for (var i=0; i<this.data.length; i++) { - if (data[i] != null) { - this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1]), data[i][2]]); - this.radii.push([i, data[i][2]]); - radii.push(data[i][2]); - } - } - var r, val, maxr = this.maxRadius = arrayMax(radii); - var l = this.gridData.length; - if (this.autoscaleBubbles) { - for (var i=0; i<l; i++) { - val = radii[i]/maxr; - r = this.autoscaleMultiplier * dim / 6; - this.gridData[i][2] = r * val; - } - } - - this.radii.sort(function(a, b) { return b[1] - a[1]; }); - }; - - // converts any arbitrary data values to grid coordinates and - // returns them. This method exists so that plugins can use a series' - // linerenderer to generate grid data points without overwriting the - // grid data associated with that series. - // Called with scope of a series. - $.jqplot.BubbleRenderer.prototype.makeGridData = function(data, plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var gd = []; - var radii = []; - this.radii = []; - var dim = Math.min(plot._height, plot._width); - for (var i=0; i<data.length; i++) { - if (data[i] != null) { - gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1]), data[i][2]]); - radii.push(data[i][2]); - this.radii.push([i, data[i][2]]); - } - } - var r, val, maxr = this.maxRadius = arrayMax(radii); - var l = this.gridData.length; - if (this.autoscaleBubbles) { - for (var i=0; i<l; i++) { - val = radii[i]/maxr; - r = this.autoscaleMultiplier * dim / 6; - gd[i][2] = r * val; - } - } - this.radii.sort(function(a, b) { return b[1] - a[1]; }); - return gd; - }; - - // called with scope of series - $.jqplot.BubbleRenderer.prototype.draw = function (ctx, gd, options) { - if (this.plugins.pointLabels) { - this.plugins.pointLabels.show = false; - } - var opts = (options != undefined) ? options : {}; - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - this.canvas._elem.empty(); - for (var i=0; i<this.radii.length; i++) { - var idx = this.radii[i][0]; - var t=null; - var color = null; - var el = null; - var tel = null; - var d = this.data[idx]; - var gd = this.gridData[idx]; - if (d[3]) { - if (typeof(d[3]) == 'object') { - t = d[3]['label']; - } - else if (typeof(d[3]) == 'string') { - t = d[3]; - } - } - - // color = (this.varyBubbleColors) ? this.colorGenerator.get(idx) : this.color; - color = this.colorGenerator.get(idx); - - // If we're drawing a shadow, expand the canvas dimensions to accomodate. - var canvasRadius = gd[2]; - var offset, depth; - if (this.shadow) { - offset = (0.7 + gd[2]/40).toFixed(1); - depth = 1 + Math.ceil(gd[2]/15); - canvasRadius += offset*depth; - } - this.bubbleCanvases[idx] = new $.jqplot.BubbleCanvas(); - this.canvas._elem.append(this.bubbleCanvases[idx].createElement(gd[0], gd[1], canvasRadius)); - this.bubbleCanvases[idx].setContext(); - var ctx = this.bubbleCanvases[idx]._ctx; - var x = ctx.canvas.width/2; - var y = ctx.canvas.height/2; - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [x, y, gd[2], 0, 2*Math.PI], {offset: offset, depth: depth}); - } - this.bubbleCanvases[idx].draw(gd[2], color, this.bubbleGradients, this.shadowAngle/180*Math.PI); - - // now draw label. - if (t && this.showLabels) { - tel = $('<div style="position:absolute;" class="jqplot-bubble-label"></div>'); - if (this.escapeHtml) { - tel.text(t); - } - else { - tel.html(t); - } - this.canvas._elem.append(tel); - var h = $(tel).outerHeight(); - var w = $(tel).outerWidth(); - var top = gd[1] - 0.5*h; - var left = gd[0] - 0.5*w; - tel.css({top: top, left: left}); - this.labels[idx] = $(tel); - } - } - }; - - - $.jqplot.DivCanvas = function() { - $.jqplot.ElemContainer.call(this); - this._ctx; - }; - - $.jqplot.DivCanvas.prototype = new $.jqplot.ElemContainer(); - $.jqplot.DivCanvas.prototype.constructor = $.jqplot.DivCanvas; - - $.jqplot.DivCanvas.prototype.createElement = function(offsets, clss, plotDimensions) { - this._offsets = offsets; - var klass = 'jqplot-DivCanvas'; - if (clss != undefined) { - klass = clss; - } - var elem; - // if this canvas already has a dom element, don't make a new one. - if (this._elem) { - elem = this._elem.get(0); - } - else { - elem = document.createElement('div'); - } - // if new plotDimensions supplied, use them. - if (plotDimensions != undefined) { - this._plotDimensions = plotDimensions; - } - - var w = this._plotDimensions.width - this._offsets.left - this._offsets.right + 'px'; - var h = this._plotDimensions.height - this._offsets.top - this._offsets.bottom + 'px'; - this._elem = $(elem); - this._elem.css({ position: 'absolute', width:w, height:h, left: this._offsets.left, top: this._offsets.top }); - - this._elem.addClass(klass); - return this._elem; - }; - - $.jqplot.DivCanvas.prototype.setContext = function() { - this._ctx = { - canvas:{ - width:0, - height:0 - }, - clearRect:function(){return null;} - }; - return this._ctx; - }; - - $.jqplot.BubbleCanvas = function() { - $.jqplot.ElemContainer.call(this); - this._ctx; - }; - - $.jqplot.BubbleCanvas.prototype = new $.jqplot.ElemContainer(); - $.jqplot.BubbleCanvas.prototype.constructor = $.jqplot.BubbleCanvas; - - // initialize with the x,y pont of bubble center and the bubble radius. - $.jqplot.BubbleCanvas.prototype.createElement = function(x, y, r) { - var klass = 'jqplot-bubble-point'; - - var elem; - // if this canvas already has a dom element, don't make a new one. - if (this._elem) { - elem = this._elem.get(0); - } - else { - elem = document.createElement('canvas'); - } - - elem.width = (r != null) ? 2*r : elem.width; - elem.height = (r != null) ? 2*r : elem.height; - this._elem = $(elem); - var l = (x != null && r != null) ? x - r : this._elem.css('left'); - var t = (y != null && r != null) ? y - r : this._elem.css('top'); - this._elem.css({ position: 'absolute', left: l, top: t }); - - this._elem.addClass(klass); - if ($.jqplot.use_excanvas) { - window.G_vmlCanvasManager.init_(document); - elem = window.G_vmlCanvasManager.initElement(elem); - } - - return this._elem; - }; - - $.jqplot.BubbleCanvas.prototype.draw = function(r, color, gradients, angle) { - var ctx = this._ctx; - // r = Math.floor(r*1.04); - // var x = Math.round(ctx.canvas.width/2); - // var y = Math.round(ctx.canvas.height/2); - var x = ctx.canvas.width/2; - var y = ctx.canvas.height/2; - ctx.save(); - if (gradients && !$.jqplot.use_excanvas) { - r = r*1.04; - var comps = $.jqplot.getColorComponents(color); - var colorinner = 'rgba('+Math.round(comps[0]+0.8*(255-comps[0]))+', '+Math.round(comps[1]+0.8*(255-comps[1]))+', '+Math.round(comps[2]+0.8*(255-comps[2]))+', '+comps[3]+')'; - var colorend = 'rgba('+comps[0]+', '+comps[1]+', '+comps[2]+', 0)'; - // var rinner = Math.round(0.35 * r); - // var xinner = Math.round(x - Math.cos(angle) * 0.33 * r); - // var yinner = Math.round(y - Math.sin(angle) * 0.33 * r); - var rinner = 0.35 * r; - var xinner = x - Math.cos(angle) * 0.33 * r; - var yinner = y - Math.sin(angle) * 0.33 * r; - var radgrad = ctx.createRadialGradient(xinner, yinner, rinner, x, y, r); - radgrad.addColorStop(0, colorinner); - radgrad.addColorStop(0.93, color); - radgrad.addColorStop(0.96, colorend); - radgrad.addColorStop(1, colorend); - // radgrad.addColorStop(.98, colorend); - ctx.fillStyle = radgrad; - ctx.fillRect(0,0, ctx.canvas.width, ctx.canvas.height); - } - else { - ctx.fillStyle = color; - ctx.strokeStyle = color; - ctx.lineWidth = 1; - ctx.beginPath(); - var ang = 2*Math.PI; - ctx.arc(x, y, r, 0, ang, 0); - ctx.closePath(); - ctx.fill(); - } - ctx.restore(); - }; - - $.jqplot.BubbleCanvas.prototype.setContext = function() { - this._ctx = this._elem.get(0).getContext("2d"); - return this._ctx; - }; - - $.jqplot.BubbleAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - }; - - $.jqplot.BubbleAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.BubbleAxisRenderer.prototype.constructor = $.jqplot.BubbleAxisRenderer; - - // called with scope of axis object. - $.jqplot.BubbleAxisRenderer.prototype.init = function(options){ - $.extend(true, this, options); - var db = this._dataBounds; - var minsidx = 0, - minpidx = 0, - maxsidx = 0, - maxpidx = 0, - maxr = 0, - minr = 0, - minMaxRadius = 0, - maxMaxRadius = 0, - maxMult = 0, - minMult = 0; - // Go through all the series attached to this axis and find - // the min/max bounds for this axis. - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - var d = s._plotData; - - for (var j=0; j<d.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - if (d[j][0] < db.min || db.min == null) { - db.min = d[j][0]; - minsidx=i; - minpidx=j; - minr = d[j][2]; - minMaxRadius = s.maxRadius; - minMult = s.autoscaleMultiplier; - } - if (d[j][0] > db.max || db.max == null) { - db.max = d[j][0]; - maxsidx=i; - maxpidx=j; - maxr = d[j][2]; - maxMaxRadius = s.maxRadius; - maxMult = s.autoscaleMultiplier; - } - } - else { - if (d[j][1] < db.min || db.min == null) { - db.min = d[j][1]; - minsidx=i; - minpidx=j; - minr = d[j][2]; - minMaxRadius = s.maxRadius; - minMult = s.autoscaleMultiplier; - } - if (d[j][1] > db.max || db.max == null) { - db.max = d[j][1]; - maxsidx=i; - maxpidx=j; - maxr = d[j][2]; - maxMaxRadius = s.maxRadius; - maxMult = s.autoscaleMultiplier; - } - } - } - } - - var minRatio = minr/minMaxRadius; - var maxRatio = maxr/maxMaxRadius; - - // need to estimate the effect of the radius on total axis span and adjust axis accordingly. - var span = db.max - db.min; - // var dim = (this.name == 'xaxis' || this.name == 'x2axis') ? this._plotDimensions.width : this._plotDimensions.height; - var dim = Math.min(this._plotDimensions.width, this._plotDimensions.height); - - var minfact = minRatio * minMult/3 * span; - var maxfact = maxRatio * maxMult/3 * span; - db.max += maxfact; - db.min -= minfact; - }; - - function highlight (plot, sidx, pidx) { - plot.plugins.bubbleRenderer.highlightLabelCanvas.empty(); - var s = plot.series[sidx]; - var canvas = plot.plugins.bubbleRenderer.highlightCanvas; - var ctx = canvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.bubbleRenderer.highlightedSeriesIndex = sidx; - - var color = s.highlightColorGenerator.get(pidx); - var x = s.gridData[pidx][0], - y = s.gridData[pidx][1], - r = s.gridData[pidx][2]; - ctx.save(); - ctx.fillStyle = color; - ctx.strokeStyle = color; - ctx.lineWidth = 1; - ctx.beginPath(); - ctx.arc(x, y, r, 0, 2*Math.PI, 0); - ctx.closePath(); - ctx.fill(); - ctx.restore(); - // bring label to front - if (s.labels[pidx]) { - plot.plugins.bubbleRenderer.highlightLabel = s.labels[pidx].clone(); - plot.plugins.bubbleRenderer.highlightLabel.appendTo(plot.plugins.bubbleRenderer.highlightLabelCanvas); - plot.plugins.bubbleRenderer.highlightLabel.addClass('jqplot-bubble-label-highlight'); - } - } - - function unhighlight (plot) { - var canvas = plot.plugins.bubbleRenderer.highlightCanvas; - var sidx = plot.plugins.bubbleRenderer.highlightedSeriesIndex; - plot.plugins.bubbleRenderer.highlightLabelCanvas.empty(); - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.bubbleRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - } - - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var si = neighbor.seriesIndex; - var pi = neighbor.pointIndex; - var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.bubbleRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var si = neighbor.seriesIndex; - var pi = neighbor.pointIndex; - var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]]; - if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.bubbleRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { - var idx = plot.plugins.bubbleRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - } - - function handleClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var si = neighbor.seriesIndex; - var pi = neighbor.pointIndex; - var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]]; - var evt = jQuery.Event('jqplotDataClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - function handleRightClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var si = neighbor.seriesIndex; - var pi = neighbor.pointIndex; - var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]]; - var idx = plot.plugins.bubbleRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - var evt = jQuery.Event('jqplotDataRightClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.bubbleRenderer && this.plugins.bubbleRenderer.highlightCanvas) { - this.plugins.bubbleRenderer.highlightCanvas.resetCanvas(); - this.plugins.bubbleRenderer.highlightCanvas = null; - } - - this.plugins.bubbleRenderer = {highlightedSeriesIndex:null}; - this.plugins.bubbleRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - this.plugins.bubbleRenderer.highlightLabel = null; - this.plugins.bubbleRenderer.highlightLabelCanvas = $('<div style="position:absolute;"></div>'); - var top = this._gridPadding.top; - var left = this._gridPadding.left; - var width = this._plotDimensions.width - this._gridPadding.left - this._gridPadding.right; - var height = this._plotDimensions.height - this._gridPadding.top - this._gridPadding.bottom; - this.plugins.bubbleRenderer.highlightLabelCanvas.css({top:top, left:left, width:width+'px', height:height+'px'}); - - this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-bubbleRenderer-highlight-canvas', this._plotDimensions, this)); - this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightLabelCanvas); - - var hctx = this.plugins.bubbleRenderer.highlightCanvas.setContext(); - } - - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - options = options || {}; - options.axesDefaults = options.axesDefaults || {}; - options.seriesDefaults = options.seriesDefaults || {}; - // only set these if there is a Bubble series - var setopts = false; - if (options.seriesDefaults.renderer == $.jqplot.BubbleRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer == $.jqplot.BubbleRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.BubbleAxisRenderer; - options.sortData = false; - } - } - - $.jqplot.preInitHooks.push(preInit); - -})(jQuery); - diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js deleted file mode 100644 index 288dfafc..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(f){var d=function(m){return Math.max.apply(Math,m)};var j=function(m){return Math.min.apply(Math,m)};f.jqplot.BubbleRenderer=function(){f.jqplot.LineRenderer.call(this)};f.jqplot.BubbleRenderer.prototype=new f.jqplot.LineRenderer();f.jqplot.BubbleRenderer.prototype.constructor=f.jqplot.BubbleRenderer;f.jqplot.BubbleRenderer.prototype.init=function(w,t){this.varyBubbleColors=true;this.autoscaleBubbles=true;this.autoscaleMultiplier=1;this.autoscalePointsFactor=-0.07;this.escapeHtml=true;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.bubbleAlpha=1;this.highlightAlpha=null;this.bubbleGradients=false;this.showLabels=true;this.radii=[];this.maxRadius=0;this._highlightedPoint=null;this.labels=[];this.bubbleCanvases=[];this._type="bubble";if(w.highlightMouseDown&&w.highlightMouseOver==null){w.highlightMouseOver=false}f.extend(true,this,w);if(this.highlightAlpha==null){this.highlightAlpha=this.bubbleAlpha;if(this.bubbleGradients){this.highlightAlpha=0.35}}this.autoscaleMultiplier=this.autoscaleMultiplier*Math.pow(this.data.length,this.autoscalePointsFactor);this._highlightedPoint=null;var n;for(var r=0;r<this.data.length;r++){var p=null;var v=this.data[r];this.maxRadius=Math.max(this.maxRadius,v[2]);if(v[3]){if(typeof(v[3])=="object"){p=v[3]["color"]}}if(p==null){if(this.seriesColors[r]!=null){p=this.seriesColors[r]}}if(p&&this.bubbleAlpha<1){n=f.jqplot.getColorComponents(p);p="rgba("+n[0]+", "+n[1]+", "+n[2]+", "+this.bubbleAlpha+")"}if(p){this.seriesColors[r]=p}}if(!this.varyBubbleColors){this.seriesColors=[this.color]}this.colorGenerator=new f.jqplot.ColorGenerator(this.seriesColors);if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var o=f.jqplot.getColorComponents(this.seriesColors[r]);var u=[o[0],o[1],o[2]];var s=u[0]+u[1]+u[2];for(var q=0;q<3;q++){u[q]=(s>570)?u[q]*0.8:u[q]+0.3*(255-u[q]);u[q]=parseInt(u[q],10)}this.highlightColors.push("rgba("+u[0]+","+u[1]+","+u[2]+", "+this.highlightAlpha+")")}}this.highlightColorGenerator=new f.jqplot.ColorGenerator(this.highlightColors);var m={fill:true,isarc:true,angle:this.shadowAngle,alpha:this.shadowAlpha,closePath:true};this.renderer.shadowRenderer.init(m);this.canvas=new f.jqplot.DivCanvas();this.canvas._plotDimensions=this._plotDimensions;t.eventListenerHooks.addOnce("jqplotMouseMove",a);t.eventListenerHooks.addOnce("jqplotMouseDown",b);t.eventListenerHooks.addOnce("jqplotMouseUp",k);t.eventListenerHooks.addOnce("jqplotClick",g);t.eventListenerHooks.addOnce("jqplotRightClick",l);t.postDrawHooks.addOnce(h)};f.jqplot.BubbleRenderer.prototype.setGridData=function(w){var q=this._xaxis.series_u2p;var m=this._yaxis.series_u2p;var t=this._plotData;this.gridData=[];var s=[];this.radii=[];var v=Math.min(w._height,w._width);for(var u=0;u<this.data.length;u++){if(t[u]!=null){this.gridData.push([q.call(this._xaxis,t[u][0]),m.call(this._yaxis,t[u][1]),t[u][2]]);this.radii.push([u,t[u][2]]);s.push(t[u][2])}}var n,o,x=this.maxRadius=d(s);var p=this.gridData.length;if(this.autoscaleBubbles){for(var u=0;u<p;u++){o=s[u]/x;n=this.autoscaleMultiplier*v/6;this.gridData[u][2]=n*o}}this.radii.sort(function(y,r){return r[1]-y[1]})};f.jqplot.BubbleRenderer.prototype.makeGridData=function(t,w){var q=this._xaxis.series_u2p;var n=this._yaxis.series_u2p;var x=[];var s=[];this.radii=[];var v=Math.min(w._height,w._width);for(var u=0;u<t.length;u++){if(t[u]!=null){x.push([q.call(this._xaxis,t[u][0]),n.call(this._yaxis,t[u][1]),t[u][2]]);s.push(t[u][2]);this.radii.push([u,t[u][2]])}}var m,o,y=this.maxRadius=d(s);var p=this.gridData.length;if(this.autoscaleBubbles){for(var u=0;u<p;u++){o=s[u]/y;m=this.autoscaleMultiplier*v/6;x[u][2]=m*o}}this.radii.sort(function(z,r){return r[1]-z[1]});return x};f.jqplot.BubbleRenderer.prototype.draw=function(D,J,n){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var A=(n!=undefined)?n:{};var r=(A.shadow!=undefined)?A.shadow:this.shadow;this.canvas._elem.empty();for(var G=0;G<this.radii.length;G++){var C=this.radii[G][0];var z=null;var F=null;var m=null;var p=null;var I=this.data[C];var J=this.gridData[C];if(I[3]){if(typeof(I[3])=="object"){z=I[3]["label"]}else{if(typeof(I[3])=="string"){z=I[3]}}}F=this.colorGenerator.get(C);var E=J[2];var q,K;if(this.shadow){q=(0.7+J[2]/40).toFixed(1);K=1+Math.ceil(J[2]/15);E+=q*K}this.bubbleCanvases[C]=new f.jqplot.BubbleCanvas();this.canvas._elem.append(this.bubbleCanvases[C].createElement(J[0],J[1],E));this.bubbleCanvases[C].setContext();var D=this.bubbleCanvases[C]._ctx;var u=D.canvas.width/2;var s=D.canvas.height/2;if(this.shadow){this.renderer.shadowRenderer.draw(D,[u,s,J[2],0,2*Math.PI],{offset:q,depth:K})}this.bubbleCanvases[C].draw(J[2],F,this.bubbleGradients,this.shadowAngle/180*Math.PI);if(z&&this.showLabels){p=f('<div style="position:absolute;" class="jqplot-bubble-label"></div>');if(this.escapeHtml){p.text(z)}else{p.html(z)}this.canvas._elem.append(p);var H=f(p).outerHeight();var v=f(p).outerWidth();var B=J[1]-0.5*H;var o=J[0]-0.5*v;p.css({top:B,left:o});this.labels[C]=f(p)}}};f.jqplot.DivCanvas=function(){f.jqplot.ElemContainer.call(this);this._ctx};f.jqplot.DivCanvas.prototype=new f.jqplot.ElemContainer();f.jqplot.DivCanvas.prototype.constructor=f.jqplot.DivCanvas;f.jqplot.DivCanvas.prototype.createElement=function(s,p,n){this._offsets=s;var m="jqplot-DivCanvas";if(p!=undefined){m=p}var r;if(this._elem){r=this._elem.get(0)}else{r=document.createElement("div")}if(n!=undefined){this._plotDimensions=n}var o=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var q=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=f(r);this._elem.css({position:"absolute",width:o,height:q,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(m);return this._elem};f.jqplot.DivCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx};f.jqplot.BubbleCanvas=function(){f.jqplot.ElemContainer.call(this);this._ctx};f.jqplot.BubbleCanvas.prototype=new f.jqplot.ElemContainer();f.jqplot.BubbleCanvas.prototype.constructor=f.jqplot.BubbleCanvas;f.jqplot.BubbleCanvas.prototype.createElement=function(n,u,s){var m="jqplot-bubble-point";var q;if(this._elem){q=this._elem.get(0)}else{q=document.createElement("canvas")}q.width=(s!=null)?2*s:q.width;q.height=(s!=null)?2*s:q.height;this._elem=f(q);var o=(n!=null&&s!=null)?n-s:this._elem.css("left");var p=(u!=null&&s!=null)?u-s:this._elem.css("top");this._elem.css({position:"absolute",left:o,top:p});this._elem.addClass(m);if(f.jqplot.use_excanvas){window.G_vmlCanvasManager.init_(document);q=window.G_vmlCanvasManager.initElement(q)}return this._elem};f.jqplot.BubbleCanvas.prototype.draw=function(m,s,v,p){var D=this._ctx;var B=D.canvas.width/2;var z=D.canvas.height/2;D.save();if(v&&!f.jqplot.use_excanvas){m=m*1.04;var o=f.jqplot.getColorComponents(s);var u="rgba("+Math.round(o[0]+0.8*(255-o[0]))+", "+Math.round(o[1]+0.8*(255-o[1]))+", "+Math.round(o[2]+0.8*(255-o[2]))+", "+o[3]+")";var t="rgba("+o[0]+", "+o[1]+", "+o[2]+", 0)";var C=0.35*m;var A=B-Math.cos(p)*0.33*m;var n=z-Math.sin(p)*0.33*m;var w=D.createRadialGradient(A,n,C,B,z,m);w.addColorStop(0,u);w.addColorStop(0.93,s);w.addColorStop(0.96,t);w.addColorStop(1,t);D.fillStyle=w;D.fillRect(0,0,D.canvas.width,D.canvas.height)}else{D.fillStyle=s;D.strokeStyle=s;D.lineWidth=1;D.beginPath();var q=2*Math.PI;D.arc(B,z,m,0,q,0);D.closePath();D.fill()}D.restore()};f.jqplot.BubbleCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};f.jqplot.BubbleAxisRenderer=function(){f.jqplot.LinearAxisRenderer.call(this)};f.jqplot.BubbleAxisRenderer.prototype=new f.jqplot.LinearAxisRenderer();f.jqplot.BubbleAxisRenderer.prototype.constructor=f.jqplot.BubbleAxisRenderer;f.jqplot.BubbleAxisRenderer.prototype.init=function(n){f.extend(true,this,n);var I=this._dataBounds;var H=0,v=0,m=0,y=0,q=0,r=0,D=0,t=0,F=0,z=0;for(var E=0;E<this._series.length;E++){var x=this._series[E];var G=x._plotData;for(var B=0;B<G.length;B++){if(this.name=="xaxis"||this.name=="x2axis"){if(G[B][0]<I.min||I.min==null){I.min=G[B][0];H=E;v=B;r=G[B][2];D=x.maxRadius;z=x.autoscaleMultiplier}if(G[B][0]>I.max||I.max==null){I.max=G[B][0];m=E;y=B;q=G[B][2];t=x.maxRadius;F=x.autoscaleMultiplier}}else{if(G[B][1]<I.min||I.min==null){I.min=G[B][1];H=E;v=B;r=G[B][2];D=x.maxRadius;z=x.autoscaleMultiplier}if(G[B][1]>I.max||I.max==null){I.max=G[B][1];m=E;y=B;q=G[B][2];t=x.maxRadius;F=x.autoscaleMultiplier}}}}var o=r/D;var w=q/t;var C=I.max-I.min;var A=Math.min(this._plotDimensions.width,this._plotDimensions.height);var p=o*z/3*C;var u=w*F/3*C;I.max+=u;I.min-=p};function e(p,v,q){p.plugins.bubbleRenderer.highlightLabelCanvas.empty();var z=p.series[v];var n=p.plugins.bubbleRenderer.highlightCanvas;var w=n._ctx;w.clearRect(0,0,w.canvas.width,w.canvas.height);z._highlightedPoint=q;p.plugins.bubbleRenderer.highlightedSeriesIndex=v;var o=z.highlightColorGenerator.get(q);var u=z.gridData[q][0],t=z.gridData[q][1],m=z.gridData[q][2];w.save();w.fillStyle=o;w.strokeStyle=o;w.lineWidth=1;w.beginPath();w.arc(u,t,m,0,2*Math.PI,0);w.closePath();w.fill();w.restore();if(z.labels[q]){p.plugins.bubbleRenderer.highlightLabel=z.labels[q].clone();p.plugins.bubbleRenderer.highlightLabel.appendTo(p.plugins.bubbleRenderer.highlightLabelCanvas);p.plugins.bubbleRenderer.highlightLabel.addClass("jqplot-bubble-label-highlight")}}function i(p){var m=p.plugins.bubbleRenderer.highlightCanvas;var o=p.plugins.bubbleRenderer.highlightedSeriesIndex;p.plugins.bubbleRenderer.highlightLabelCanvas.empty();m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);for(var n=0;n<p.series.length;n++){p.series[n]._highlightedPoint=null}p.plugins.bubbleRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function a(s,p,m,v,r){if(v){var n=v.seriesIndex;var o=v.pointIndex;var q=[n,o,v.data,r.series[n].gridData[o][2]];var t=jQuery.Event("jqplotDataMouseOver");t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q);if(r.series[q[0]].highlightMouseOver&&!(q[0]==r.plugins.bubbleRenderer.highlightedSeriesIndex&&q[1]==r.series[q[0]]._highlightedPoint)){var u=jQuery.Event("jqplotDataHighlight");u.which=s.which;u.pageX=s.pageX;u.pageY=s.pageY;r.target.trigger(u,q);e(r,q[0],q[1])}}else{if(v==null){i(r)}}}function b(s,p,m,u,r){if(u){var n=u.seriesIndex;var o=u.pointIndex;var q=[n,o,u.data,r.series[n].gridData[o][2]];if(r.series[q[0]].highlightMouseDown&&!(q[0]==r.plugins.bubbleRenderer.highlightedSeriesIndex&&q[1]==r.series[q[0]]._highlightedPoint)){var t=jQuery.Event("jqplotDataHighlight");t.which=s.which;t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q);e(r,q[0],q[1])}}else{if(u==null){i(r)}}}function k(o,n,r,q,p){var m=p.plugins.bubbleRenderer.highlightedSeriesIndex;if(m!=null&&p.series[m].highlightMouseDown){i(p)}}function g(s,p,m,u,r){if(u){var n=u.seriesIndex;var o=u.pointIndex;var q=[n,o,u.data,r.series[n].gridData[o][2]];var t=jQuery.Event("jqplotDataClick");t.which=s.which;t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q)}}function l(s,p,m,v,r){if(v){var n=v.seriesIndex;var o=v.pointIndex;var q=[n,o,v.data,r.series[n].gridData[o][2]];var t=r.plugins.bubbleRenderer.highlightedSeriesIndex;if(t!=null&&r.series[t].highlightMouseDown){i(r)}var u=jQuery.Event("jqplotDataRightClick");u.which=s.which;u.pageX=s.pageX;u.pageY=s.pageY;r.target.trigger(u,q)}}function h(){if(this.plugins.bubbleRenderer&&this.plugins.bubbleRenderer.highlightCanvas){this.plugins.bubbleRenderer.highlightCanvas.resetCanvas();this.plugins.bubbleRenderer.highlightCanvas=null}this.plugins.bubbleRenderer={highlightedSeriesIndex:null};this.plugins.bubbleRenderer.highlightCanvas=new f.jqplot.GenericCanvas();this.plugins.bubbleRenderer.highlightLabel=null;this.plugins.bubbleRenderer.highlightLabelCanvas=f('<div style="position:absolute;"></div>');var q=this._gridPadding.top;var p=this._gridPadding.left;var n=this._plotDimensions.width-this._gridPadding.left-this._gridPadding.right;var m=this._plotDimensions.height-this._gridPadding.top-this._gridPadding.bottom;this.plugins.bubbleRenderer.highlightLabelCanvas.css({top:q,left:p,width:n+"px",height:m+"px"});this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-bubbleRenderer-highlight-canvas",this._plotDimensions,this));this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightLabelCanvas);var o=this.plugins.bubbleRenderer.highlightCanvas.setContext()}function c(q,p,n){n=n||{};n.axesDefaults=n.axesDefaults||{};n.seriesDefaults=n.seriesDefaults||{};var m=false;if(n.seriesDefaults.renderer==f.jqplot.BubbleRenderer){m=true}else{if(n.series){for(var o=0;o<n.series.length;o++){if(n.series[o].renderer==f.jqplot.BubbleRenderer){m=true}}}}if(m){n.axesDefaults.renderer=f.jqplot.BubbleAxisRenderer;n.sortData=false}}f.jqplot.preInitHooks.push(c)})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js deleted file mode 100644 index 22f0bb79..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js +++ /dev/null @@ -1,203 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.CanvasAxisLabelRenderer - * Renderer to draw axis labels with a canvas element to support advanced - * featrues such as rotated text. This renderer uses a separate rendering engine - * to draw the text on the canvas. Two modes of rendering the text are available. - * If the browser has native font support for canvas fonts (currently Mozila 3.5 - * and Safari 4), you can enable text rendering with the canvas fillText method. - * You do so by setting the "enableFontSupport" option to true. - * - * Browsers lacking native font support will have the text drawn on the canvas - * using the Hershey font metrics. Even if the "enableFontSupport" option is true - * non-supporting browsers will still render with the Hershey font. - * - */ - $.jqplot.CanvasAxisLabelRenderer = function(options) { - // Group: Properties - - // prop: angle - // angle of text, measured clockwise from x axis. - this.angle = 0; - // name of the axis associated with this tick - this.axis; - // prop: show - // wether or not to show the tick (mark and label). - this.show = true; - // prop: showLabel - // wether or not to show the label. - this.showLabel = true; - // prop: label - // label for the axis. - this.label = ''; - // prop: fontFamily - // CSS spec for the font-family css attribute. - // Applies only to browsers supporting native font rendering in the - // canvas tag. Currently Mozilla 3.5 and Safari 4. - this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'; - // prop: fontSize - // CSS spec for font size. - this.fontSize = '11pt'; - // prop: fontWeight - // CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100 - 900 - this.fontWeight = 'normal'; - // prop: fontStretch - // Multiplier to condense or expand font width. - // Applies only to browsers which don't support canvas native font rendering. - this.fontStretch = 1.0; - // prop: textColor - // css spec for the color attribute. - this.textColor = '#666666'; - // prop: enableFontSupport - // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. - // If true, label will be drawn with canvas tag native support for fonts. - // If false, label will be drawn with Hershey font metrics. - this.enableFontSupport = true; - // prop: pt2px - // Point to pixel scaling factor, used for computing height of bounding box - // around a label. The labels text renderer has a default setting of 1.4, which - // should be suitable for most fonts. Leave as null to use default. If tops of - // letters appear clipped, increase this. If bounding box seems too big, decrease. - // This is an issue only with the native font renderering capabilities of Mozilla - // 3.5 and Safari 4 since they do not provide a method to determine the font height. - this.pt2px = null; - - this._elem; - this._ctx; - this._plotWidth; - this._plotHeight; - this._plotDimensions = {height:null, width:null}; - - $.extend(true, this, options); - - if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') { - this.angle = -90; - } - - var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}; - if (this.pt2px) { - ropts.pt2px = this.pt2px; - } - - if (this.enableFontSupport) { - if ($.jqplot.support_canvas_text()) { - this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts); - } - - else { - this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); - } - } - else { - this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); - } - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) { - $.extend(true, this, options); - this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}); - }; - - // return width along the x axis - // will check first to see if an element exists. - // if not, will return the computed text box width. - $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) { - if (this._elem) { - return this._elem.outerWidth(true); - } - else { - var tr = this._textRenderer; - var l = tr.getWidth(ctx); - var h = tr.getHeight(ctx); - var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l); - return w; - } - }; - - // return height along the y axis. - $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) { - if (this._elem) { - return this._elem.outerHeight(true); - } - else { - var tr = this._textRenderer; - var l = tr.getWidth(ctx); - var h = tr.getHeight(ctx); - var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l); - return w; - } - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() { - var a = this.angle * Math.PI/180; - return a; - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx, plot) { - // Memory Leaks patch - if (this._elem) { - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - window.G_vmlCanvasManager.uninitElement(this._elem.get(0)); - } - - this._elem.emptyForce(); - this._elem = null; - } - - // create a canvas here, but can't draw on it untill it is appended - // to dom for IE compatability. - var elem = plot.canvasManager.getCanvas(); - - this._textRenderer.setText(this.label, ctx); - var w = this.getWidth(ctx); - var h = this.getHeight(ctx); - elem.width = w; - elem.height = h; - elem.style.width = w; - elem.style.height = h; - - elem = plot.canvasManager.initCanvas(elem); - - this._elem = $(elem); - this._elem.css({ position: 'absolute'}); - this._elem.addClass('jqplot-'+this.axis+'-label'); - - elem = null; - return this._elem; - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() { - this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label); - }; - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js deleted file mode 100644 index dee778f9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.CanvasAxisLabelRenderer=function(b){this.angle=0;this.axis;this.show=true;this.showLabel=true;this.label="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="11pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);if(b.angle==null&&this.axis!="xaxis"&&this.axis!="x2axis"){this.angle=-90}var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisLabelRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisLabelRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisLabelRenderer.prototype.draw=function(c,f){if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css({position:"absolute"});this._elem.addClass("jqplot-"+this.axis+"-label");e=null;return this._elem};a.jqplot.CanvasAxisLabelRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js deleted file mode 100644 index bb1731d6..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js +++ /dev/null @@ -1,243 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.CanvasAxisTickRenderer - * Renderer to draw axis ticks with a canvas element to support advanced - * featrues such as rotated text. This renderer uses a separate rendering engine - * to draw the text on the canvas. Two modes of rendering the text are available. - * If the browser has native font support for canvas fonts (currently Mozila 3.5 - * and Safari 4), you can enable text rendering with the canvas fillText method. - * You do so by setting the "enableFontSupport" option to true. - * - * Browsers lacking native font support will have the text drawn on the canvas - * using the Hershey font metrics. Even if the "enableFontSupport" option is true - * non-supporting browsers will still render with the Hershey font. - */ - $.jqplot.CanvasAxisTickRenderer = function(options) { - // Group: Properties - - // prop: mark - // tick mark on the axis. One of 'inside', 'outside', 'cross', '' or null. - this.mark = 'outside'; - // prop: showMark - // wether or not to show the mark on the axis. - this.showMark = true; - // prop: showGridline - // wether or not to draw the gridline on the grid at this tick. - this.showGridline = true; - // prop: isMinorTick - // if this is a minor tick. - this.isMinorTick = false; - // prop: angle - // angle of text, measured clockwise from x axis. - this.angle = 0; - // prop: markSize - // Length of the tick marks in pixels. For 'cross' style, length - // will be stoked above and below axis, so total length will be twice this. - this.markSize = 4; - // prop: show - // wether or not to show the tick (mark and label). - this.show = true; - // prop: showLabel - // wether or not to show the label. - this.showLabel = true; - // prop: labelPosition - // 'auto', 'start', 'middle' or 'end'. - // Whether tick label should be positioned so the start, middle, or end - // of the tick mark. - this.labelPosition = 'auto'; - this.label = ''; - this.value = null; - this._styles = {}; - // prop: formatter - // A class of a formatter for the tick text. - // The default $.jqplot.DefaultTickFormatter uses sprintf. - this.formatter = $.jqplot.DefaultTickFormatter; - // prop: formatString - // string passed to the formatter. - this.formatString = ''; - // prop: prefix - // String to prepend to the tick label. - // Prefix is prepended to the formatted tick label. - this.prefix = ''; - // prop: fontFamily - // css spec for the font-family css attribute. - this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'; - // prop: fontSize - // CSS spec for font size. - this.fontSize = '10pt'; - // prop: fontWeight - // CSS spec for fontWeight - this.fontWeight = 'normal'; - // prop: fontStretch - // Multiplier to condense or expand font width. - // Applies only to browsers which don't support canvas native font rendering. - this.fontStretch = 1.0; - // prop: textColor - // css spec for the color attribute. - this.textColor = '#666666'; - // prop: enableFontSupport - // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. - // If true, tick label will be drawn with canvas tag native support for fonts. - // If false, tick label will be drawn with Hershey font metrics. - this.enableFontSupport = true; - // prop: pt2px - // Point to pixel scaling factor, used for computing height of bounding box - // around a label. The labels text renderer has a default setting of 1.4, which - // should be suitable for most fonts. Leave as null to use default. If tops of - // letters appear clipped, increase this. If bounding box seems too big, decrease. - // This is an issue only with the native font renderering capabilities of Mozilla - // 3.5 and Safari 4 since they do not provide a method to determine the font height. - this.pt2px = null; - - this._elem; - this._ctx; - this._plotWidth; - this._plotHeight; - this._plotDimensions = {height:null, width:null}; - - $.extend(true, this, options); - - var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}; - if (this.pt2px) { - ropts.pt2px = this.pt2px; - } - - if (this.enableFontSupport) { - if ($.jqplot.support_canvas_text()) { - this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts); - } - - else { - this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); - } - } - else { - this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); - } - }; - - $.jqplot.CanvasAxisTickRenderer.prototype.init = function(options) { - $.extend(true, this, options); - this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}); - }; - - // return width along the x axis - // will check first to see if an element exists. - // if not, will return the computed text box width. - $.jqplot.CanvasAxisTickRenderer.prototype.getWidth = function(ctx) { - if (this._elem) { - return this._elem.outerWidth(true); - } - else { - var tr = this._textRenderer; - var l = tr.getWidth(ctx); - var h = tr.getHeight(ctx); - var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l); - return w; - } - }; - - // return height along the y axis. - $.jqplot.CanvasAxisTickRenderer.prototype.getHeight = function(ctx) { - if (this._elem) { - return this._elem.outerHeight(true); - } - else { - var tr = this._textRenderer; - var l = tr.getWidth(ctx); - var h = tr.getHeight(ctx); - var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l); - return w; - } - }; - - $.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad = function() { - var a = this.angle * Math.PI/180; - return a; - }; - - - $.jqplot.CanvasAxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) { - this.value = value; - if (isMinor) { - this.isMinorTick = true; - } - return this; - }; - - $.jqplot.CanvasAxisTickRenderer.prototype.draw = function(ctx, plot) { - if (!this.label) { - this.label = this.prefix + this.formatter(this.formatString, this.value); - } - - // Memory Leaks patch - if (this._elem) { - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - window.G_vmlCanvasManager.uninitElement(this._elem.get(0)); - } - - this._elem.emptyForce(); - this._elem = null; - } - - // create a canvas here, but can't draw on it untill it is appended - // to dom for IE compatability. - - var elem = plot.canvasManager.getCanvas(); - - this._textRenderer.setText(this.label, ctx); - var w = this.getWidth(ctx); - var h = this.getHeight(ctx); - // canvases seem to need to have width and heigh attributes directly set. - elem.width = w; - elem.height = h; - elem.style.width = w; - elem.style.height = h; - elem.style.textAlign = 'left'; - elem.style.position = 'absolute'; - - elem = plot.canvasManager.initCanvas(elem); - - this._elem = $(elem); - this._elem.css(this._styles); - this._elem.addClass('jqplot-'+this.axis+'-tick'); - - elem = null; - return this._elem; - }; - - $.jqplot.CanvasAxisTickRenderer.prototype.pack = function() { - this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label); - }; - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js deleted file mode 100644 index f80e02b2..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.CanvasAxisTickRenderer=function(b){this.mark="outside";this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.angle=0;this.markSize=4;this.show=true;this.showLabel=true;this.labelPosition="auto";this.label="";this.value=null;this._styles={};this.formatter=a.jqplot.DefaultTickFormatter;this.formatString="";this.prefix="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="10pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisTickRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisTickRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisTickRenderer.prototype.setTick=function(b,d,c){this.value=b;if(c){this.isMinorTick=true}return this};a.jqplot.CanvasAxisTickRenderer.prototype.draw=function(c,f){if(!this.label){this.label=this.prefix+this.formatter(this.formatString,this.value)}if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.textAlign="left";e.style.position="absolute";e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css(this._styles);this._elem.addClass("jqplot-"+this.axis+"-tick");e=null;return this._elem};a.jqplot.CanvasAxisTickRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js deleted file mode 100644 index bc72bc5a..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js +++ /dev/null @@ -1,865 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - var objCounter = 0; - // class: $.jqplot.CanvasOverlay - $.jqplot.CanvasOverlay = function(opts){ - var options = opts || {}; - this.options = { - show: $.jqplot.config.enablePlugins, - deferDraw: false - }; - // prop: objects - this.objects = []; - this.objectNames = []; - this.canvas = null; - this.markerRenderer = new $.jqplot.MarkerRenderer({style:'line'}); - this.markerRenderer.init(); - this.highlightObjectIndex = null; - if (options.objects) { - var objs = options.objects, - obj; - for (var i=0; i<objs.length; i++) { - obj = objs[i]; - for (var n in obj) { - switch (n) { - case 'line': - this.addLine(obj[n]); - break; - case 'horizontalLine': - this.addHorizontalLine(obj[n]); - break; - case 'dashedHorizontalLine': - this.addDashedHorizontalLine(obj[n]); - break; - case 'verticalLine': - this.addVerticalLine(obj[n]); - break; - case 'dashedVerticalLine': - this.addDashedVerticalLine(obj[n]); - break; - default: - break; - } - } - } - } - $.extend(true, this.options, options); - }; - - // called with scope of a plot object - $.jqplot.CanvasOverlay.postPlotInit = function (target, data, opts) { - var options = opts || {}; - // add a canvasOverlay attribute to the plot - this.plugins.canvasOverlay = new $.jqplot.CanvasOverlay(options.canvasOverlay); - }; - - - function LineBase() { - this.uid = null; - this.type = null; - this.gridStart = null; - this.gridStop = null; - this.tooltipWidthFactor = 0; - this.options = { - // prop: name - // Optional name for the overlay object. - // Can be later used to retrieve the object by name. - name: null, - // prop: show - // true to show (draw), false to not draw. - show: true, - // prop: lineWidth - // Width of the line. - lineWidth: 2, - // prop: lineCap - // Type of ending placed on the line ['round', 'butt', 'square'] - lineCap: 'round', - // prop: color - // color of the line - color: '#666666', - // prop: shadow - // wether or not to draw a shadow on the line - shadow: true, - // prop: shadowAngle - // Shadow angle in degrees - shadowAngle: 45, - // prop: shadowOffset - // Shadow offset from line in pixels - shadowOffset: 1, - // prop: shadowDepth - // Number of times shadow is stroked, each stroke offset shadowOffset from the last. - shadowDepth: 3, - // prop: shadowAlpha - // Alpha channel transparency of shadow. 0 = transparent. - shadowAlpha: '0.07', - // prop: xaxis - // X axis to use for positioning/scaling the line. - xaxis: 'xaxis', - // prop: yaxis - // Y axis to use for positioning/scaling the line. - yaxis: 'yaxis', - // prop: showTooltip - // Show a tooltip with data point values. - showTooltip: false, - // prop: showTooltipPrecision - // Controls how close to line cursor must be to show tooltip. - // Higher number = closer to line, lower number = farther from line. - // 1.0 = cursor must be over line. - showTooltipPrecision: 0.6, - // prop: tooltipLocation - // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' - tooltipLocation: 'nw', - // prop: fadeTooltip - // true = fade in/out tooltip, flase = show/hide tooltip - fadeTooltip: true, - // prop: tooltipFadeSpeed - // 'slow', 'def', 'fast', or number of milliseconds. - tooltipFadeSpeed: "fast", - // prop: tooltipOffset - // Pixel offset of tooltip from the highlight. - tooltipOffset: 4, - // prop: tooltipFormatString - // Format string passed the x and y values of the cursor on the line. - // e.g., 'Dogs: %.2f, Cats: %d'. - tooltipFormatString: '%d, %d' - }; - } - - /** - * Class: Line - * A straight line. - */ - function Line(options) { - LineBase.call(this); - this.type = 'line'; - var opts = { - // prop: start - // [x, y] coordinates for the start of the line. - start: [], - // prop: stop - // [x, y] coordinates for the end of the line. - stop: [] - }; - $.extend(true, this.options, opts, options); - - if (this.options.showTooltipPrecision < 0.01) { - this.options.showTooltipPrecision = 0.01; - } - } - - Line.prototype = new LineBase(); - Line.prototype.constructor = Line; - - - /** - * Class: HorizontalLine - * A straight horizontal line. - */ - function HorizontalLine(options) { - LineBase.call(this); - this.type = 'horizontalLine'; - var opts = { - // prop: y - // y value to position the line - y: null, - // prop: xmin - // x value for the start of the line, null to scale to axis min. - xmin: null, - // prop: xmax - // x value for the end of the line, null to scale to axis max. - xmax: null, - // prop xOffset - // offset ends of the line inside the grid. Number - xOffset: '6px', // number or string. Number interpreted as units, string as pixels. - xminOffset: null, - xmaxOffset: null - }; - $.extend(true, this.options, opts, options); - - if (this.options.showTooltipPrecision < 0.01) { - this.options.showTooltipPrecision = 0.01; - } - } - - HorizontalLine.prototype = new LineBase(); - HorizontalLine.prototype.constructor = HorizontalLine; - - - /** - * Class: DashedHorizontalLine - * A straight dashed horizontal line. - */ - function DashedHorizontalLine(options) { - LineBase.call(this); - this.type = 'dashedHorizontalLine'; - var opts = { - y: null, - xmin: null, - xmax: null, - xOffset: '6px', // number or string. Number interpreted as units, string as pixels. - xminOffset: null, - xmaxOffset: null, - // prop: dashPattern - // Array of line, space settings in pixels. - // Default is 8 pixel of line, 8 pixel of space. - // Note, limit to a 2 element array b/c of bug with higher order arrays. - dashPattern: [8,8] - }; - $.extend(true, this.options, opts, options); - - if (this.options.showTooltipPrecision < 0.01) { - this.options.showTooltipPrecision = 0.01; - } - } - - DashedHorizontalLine.prototype = new LineBase(); - DashedHorizontalLine.prototype.constructor = DashedHorizontalLine; - - - /** - * Class: VerticalLine - * A straight vertical line. - */ - function VerticalLine(options) { - LineBase.call(this); - this.type = 'verticalLine'; - var opts = { - x: null, - ymin: null, - ymax: null, - yOffset: '6px', // number or string. Number interpreted as units, string as pixels. - yminOffset: null, - ymaxOffset: null - }; - $.extend(true, this.options, opts, options); - - if (this.options.showTooltipPrecision < 0.01) { - this.options.showTooltipPrecision = 0.01; - } - } - - VerticalLine.prototype = new LineBase(); - VerticalLine.prototype.constructor = VerticalLine; - - - /** - * Class: DashedVerticalLine - * A straight dashed vertical line. - */ - function DashedVerticalLine(options) { - LineBase.call(this); - this.type = 'dashedVerticalLine'; - this.start = null; - this.stop = null; - var opts = { - x: null, - ymin: null, - ymax: null, - yOffset: '6px', // number or string. Number interpreted as units, string as pixels. - yminOffset: null, - ymaxOffset: null, - // prop: dashPattern - // Array of line, space settings in pixels. - // Default is 8 pixel of line, 8 pixel of space. - // Note, limit to a 2 element array b/c of bug with higher order arrays. - dashPattern: [8,8] - }; - $.extend(true, this.options, opts, options); - - if (this.options.showTooltipPrecision < 0.01) { - this.options.showTooltipPrecision = 0.01; - } - } - - DashedVerticalLine.prototype = new LineBase(); - DashedVerticalLine.prototype.constructor = DashedVerticalLine; - - $.jqplot.CanvasOverlay.prototype.addLine = function(opts) { - var line = new Line(opts); - line.uid = objCounter++; - this.objects.push(line); - this.objectNames.push(line.options.name); - }; - - $.jqplot.CanvasOverlay.prototype.addHorizontalLine = function(opts) { - var line = new HorizontalLine(opts); - line.uid = objCounter++; - this.objects.push(line); - this.objectNames.push(line.options.name); - }; - - $.jqplot.CanvasOverlay.prototype.addDashedHorizontalLine = function(opts) { - var line = new DashedHorizontalLine(opts); - line.uid = objCounter++; - this.objects.push(line); - this.objectNames.push(line.options.name); - }; - - $.jqplot.CanvasOverlay.prototype.addVerticalLine = function(opts) { - var line = new VerticalLine(opts); - line.uid = objCounter++; - this.objects.push(line); - this.objectNames.push(line.options.name); - }; - - $.jqplot.CanvasOverlay.prototype.addDashedVerticalLine = function(opts) { - var line = new DashedVerticalLine(opts); - line.uid = objCounter++; - this.objects.push(line); - this.objectNames.push(line.options.name); - }; - - $.jqplot.CanvasOverlay.prototype.removeObject = function(idx) { - // check if integer, remove by index - if ($.type(idx) == 'number') { - this.objects.splice(idx, 1); - this.objectNames.splice(idx, 1); - } - // if string, remove by name - else { - var id = $.inArray(idx, this.objectNames); - if (id != -1) { - this.objects.splice(id, 1); - this.objectNames.splice(id, 1); - } - } - }; - - $.jqplot.CanvasOverlay.prototype.getObject = function(idx) { - // check if integer, remove by index - if ($.type(idx) == 'number') { - return this.objects[idx]; - } - // if string, remove by name - else { - var id = $.inArray(idx, this.objectNames); - if (id != -1) { - return this.objects[id]; - } - } - }; - - // Set get as alias for getObject. - $.jqplot.CanvasOverlay.prototype.get = $.jqplot.CanvasOverlay.prototype.getObject; - - $.jqplot.CanvasOverlay.prototype.clear = function(plot) { - this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(), this.canvas.getHeight()); - }; - - $.jqplot.CanvasOverlay.prototype.draw = function(plot) { - var obj, - objs = this.objects, - mr = this.markerRenderer, - start, - stop; - if (this.options.show) { - this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(), this.canvas.getHeight()); - for (var k=0; k<objs.length; k++) { - obj = objs[k]; - var opts = $.extend(true, {}, obj.options); - if (obj.options.show) { - // style and shadow properties should be set before - // every draw of marker renderer. - mr.shadow = obj.options.shadow; - obj.tooltipWidthFactor = obj.options.lineWidth / obj.options.showTooltipPrecision; - switch (obj.type) { - case 'line': - // style and shadow properties should be set before - // every draw of marker renderer. - mr.style = 'line'; - opts.closePath = false; - start = [plot.axes[obj.options.xaxis].series_u2p(obj.options.start[0]), plot.axes[obj.options.yaxis].series_u2p(obj.options.start[1])]; - stop = [plot.axes[obj.options.xaxis].series_u2p(obj.options.stop[0]), plot.axes[obj.options.yaxis].series_u2p(obj.options.stop[1])]; - obj.gridStart = start; - obj.gridStop = stop; - mr.draw(start, stop, this.canvas._ctx, opts); - break; - case 'horizontalLine': - - // style and shadow properties should be set before - // every draw of marker renderer. - if (obj.options.y != null) { - mr.style = 'line'; - opts.closePath = false; - var xaxis = plot.axes[obj.options.xaxis], - xstart, - xstop, - y = plot.axes[obj.options.yaxis].series_u2p(obj.options.y), - xminoff = obj.options.xminOffset || obj.options.xOffset, - xmaxoff = obj.options.xmaxOffset || obj.options.xOffset; - if (obj.options.xmin != null) { - xstart = xaxis.series_u2p(obj.options.xmin); - } - else if (xminoff != null) { - if ($.type(xminoff) == "number") { - xstart = xaxis.series_u2p(xaxis.min + xminoff); - } - else if ($.type(xminoff) == "string") { - xstart = xaxis.series_u2p(xaxis.min) + parseFloat(xminoff); - } - } - if (obj.options.xmax != null) { - xstop = xaxis.series_u2p(obj.options.xmax); - } - else if (xmaxoff != null) { - if ($.type(xmaxoff) == "number") { - xstop = xaxis.series_u2p(xaxis.max - xmaxoff); - } - else if ($.type(xmaxoff) == "string") { - xstop = xaxis.series_u2p(xaxis.max) - parseFloat(xmaxoff); - } - } - if (xstop != null && xstart != null) { - obj.gridStart = [xstart, y]; - obj.gridStop = [xstop, y]; - mr.draw([xstart, y], [xstop, y], this.canvas._ctx, opts); - } - } - break; - - case 'dashedHorizontalLine': - - var dashPat = obj.options.dashPattern; - var dashPatLen = 0; - for (var i=0; i<dashPat.length; i++) { - dashPatLen += dashPat[i]; - } - - // style and shadow properties should be set before - // every draw of marker renderer. - if (obj.options.y != null) { - mr.style = 'line'; - opts.closePath = false; - var xaxis = plot.axes[obj.options.xaxis], - xstart, - xstop, - y = plot.axes[obj.options.yaxis].series_u2p(obj.options.y), - xminoff = obj.options.xminOffset || obj.options.xOffset, - xmaxoff = obj.options.xmaxOffset || obj.options.xOffset; - if (obj.options.xmin != null) { - xstart = xaxis.series_u2p(obj.options.xmin); - } - else if (xminoff != null) { - if ($.type(xminoff) == "number") { - xstart = xaxis.series_u2p(xaxis.min + xminoff); - } - else if ($.type(xminoff) == "string") { - xstart = xaxis.series_u2p(xaxis.min) + parseFloat(xminoff); - } - } - if (obj.options.xmax != null) { - xstop = xaxis.series_u2p(obj.options.xmax); - } - else if (xmaxoff != null) { - if ($.type(xmaxoff) == "number") { - xstop = xaxis.series_u2p(xaxis.max - xmaxoff); - } - else if ($.type(xmaxoff) == "string") { - xstop = xaxis.series_u2p(xaxis.max) - parseFloat(xmaxoff); - } - } - if (xstop != null && xstart != null) { - obj.gridStart = [xstart, y]; - obj.gridStop = [xstop, y]; - var numDash = Math.ceil((xstop - xstart)/dashPatLen); - var b=xstart, e; - for (var i=0; i<numDash; i++) { - for (var j=0; j<dashPat.length; j+=2) { - e = b+dashPat[j]; - mr.draw([b, y], [e, y], this.canvas._ctx, opts); - b += dashPat[j]; - if (j < dashPat.length-1) { - b += dashPat[j+1]; - } - } - } - } - } - break; - - case 'verticalLine': - - // style and shadow properties should be set before - // every draw of marker renderer. - if (obj.options.x != null) { - mr.style = 'line'; - opts.closePath = false; - var yaxis = plot.axes[obj.options.yaxis], - ystart, - ystop, - x = plot.axes[obj.options.xaxis].series_u2p(obj.options.x), - yminoff = obj.options.yminOffset || obj.options.yOffset, - ymaxoff = obj.options.ymaxOffset || obj.options.yOffset; - if (obj.options.ymin != null) { - ystart = yaxis.series_u2p(obj.options.ymin); - } - else if (yminoff != null) { - if ($.type(yminoff) == "number") { - ystart = yaxis.series_u2p(yaxis.min - yminoff); - } - else if ($.type(yminoff) == "string") { - ystart = yaxis.series_u2p(yaxis.min) - parseFloat(yminoff); - } - } - if (obj.options.ymax != null) { - ystop = yaxis.series_u2p(obj.options.ymax); - } - else if (ymaxoff != null) { - if ($.type(ymaxoff) == "number") { - ystop = yaxis.series_u2p(yaxis.max + ymaxoff); - } - else if ($.type(ymaxoff) == "string") { - ystop = yaxis.series_u2p(yaxis.max) + parseFloat(ymaxoff); - } - } - if (ystop != null && ystart != null) { - obj.gridStart = [x, ystart]; - obj.gridStop = [x, ystop]; - mr.draw([x, ystart], [x, ystop], this.canvas._ctx, opts); - } - } - break; - - case 'dashedVerticalLine': - - var dashPat = obj.options.dashPattern; - var dashPatLen = 0; - for (var i=0; i<dashPat.length; i++) { - dashPatLen += dashPat[i]; - } - - // style and shadow properties should be set before - // every draw of marker renderer. - if (obj.options.x != null) { - mr.style = 'line'; - opts.closePath = false; - var yaxis = plot.axes[obj.options.yaxis], - ystart, - ystop, - x = plot.axes[obj.options.xaxis].series_u2p(obj.options.x), - yminoff = obj.options.yminOffset || obj.options.yOffset, - ymaxoff = obj.options.ymaxOffset || obj.options.yOffset; - if (obj.options.ymin != null) { - ystart = yaxis.series_u2p(obj.options.ymin); - } - else if (yminoff != null) { - if ($.type(yminoff) == "number") { - ystart = yaxis.series_u2p(yaxis.min - yminoff); - } - else if ($.type(yminoff) == "string") { - ystart = yaxis.series_u2p(yaxis.min) - parseFloat(yminoff); - } - } - if (obj.options.ymax != null) { - ystop = yaxis.series_u2p(obj.options.ymax); - } - else if (ymaxoff != null) { - if ($.type(ymaxoff) == "number") { - ystop = yaxis.series_u2p(yaxis.max + ymaxoff); - } - else if ($.type(ymaxoff) == "string") { - ystop = yaxis.series_u2p(yaxis.max) + parseFloat(ymaxoff); - } - } - - - if (ystop != null && ystart != null) { - obj.gridStart = [x, ystart]; - obj.gridStop = [x, ystop]; - var numDash = Math.ceil((ystart - ystop)/dashPatLen); - var firstDashAdjust = ((numDash * dashPatLen) - (ystart - ystop))/2.0; - var b=ystart, e, bs, es; - for (var i=0; i<numDash; i++) { - for (var j=0; j<dashPat.length; j+=2) { - e = b - dashPat[j]; - if (e < ystop) { - e = ystop; - } - if (b < ystop) { - b = ystop; - } - // es = e; - // if (i == 0) { - // es += firstDashAdjust; - // } - mr.draw([x, b], [x, e], this.canvas._ctx, opts); - b -= dashPat[j]; - if (j < dashPat.length-1) { - b -= dashPat[j+1]; - } - } - } - } - } - break; - - default: - break; - } - } - } - } - }; - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - $.jqplot.CanvasOverlay.postPlotDraw = function() { - var co = this.plugins.canvasOverlay; - // Memory Leaks patch - if (co && co.highlightCanvas) { - co.highlightCanvas.resetCanvas(); - co.highlightCanvas = null; - } - co.canvas = new $.jqplot.GenericCanvas(); - - this.eventCanvas._elem.before(co.canvas.createElement(this._gridPadding, 'jqplot-overlayCanvas-canvas', this._plotDimensions, this)); - co.canvas.setContext(); - if (!co.deferDraw) { - co.draw(this); - } - - var elem = document.createElement('div'); - co._tooltipElem = $(elem); - elem = null; - co._tooltipElem.addClass('jqplot-canvasOverlay-tooltip'); - co._tooltipElem.css({position:'absolute', display:'none'}); - - this.eventCanvas._elem.before(co._tooltipElem); - this.eventCanvas._elem.bind('mouseleave', { elem: co._tooltipElem }, function (ev) { ev.data.elem.hide(); }); - - var co = null; - }; - - - function showTooltip(plot, obj, gridpos, datapos) { - var co = plot.plugins.canvasOverlay; - var elem = co._tooltipElem; - - var opts = obj.options, x, y; - - elem.html($.jqplot.sprintf(opts.tooltipFormatString, datapos[0], datapos[1])); - - switch (opts.tooltipLocation) { - case 'nw': - x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset; - y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true); - break; - case 'n': - x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true)/2; - y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true); - break; - case 'ne': - x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset; - y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true); - break; - case 'e': - x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset; - y = gridpos[1] + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - case 'se': - x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset; - y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset; - break; - case 's': - x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true)/2; - y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset; - break; - case 'sw': - x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset; - y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset; - break; - case 'w': - x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset; - y = gridpos[1] + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - default: // same as 'nw' - x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset; - y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true); - break; - } - - elem.css('left', x); - elem.css('top', y); - if (opts.fadeTooltip) { - // Fix for stacked up animations. Thnanks Trevor! - elem.stop(true,true).fadeIn(opts.tooltipFadeSpeed); - } - else { - elem.show(); - } - elem = null; - } - - - function isNearLine(point, lstart, lstop, width) { - // r is point to test, p and q are end points. - var rx = point[0]; - var ry = point[1]; - var px = Math.round(lstop[0]); - var py = Math.round(lstop[1]); - var qx = Math.round(lstart[0]); - var qy = Math.round(lstart[1]); - - var l = Math.sqrt(Math.pow(px-qx, 2) + Math.pow(py-qy, 2)); - - // scale error term by length of line. - var eps = width*l; - var res = Math.abs((qx-px) * (ry-py) - (qy-py) * (rx-px)); - var ret = (res < eps) ? true : false; - return ret; - } - - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - var co = plot.plugins.canvasOverlay; - var objs = co.objects; - var l = objs.length; - var obj, haveHighlight=false; - var elem; - for (var i=0; i<l; i++) { - obj = objs[i]; - if (obj.options.showTooltip) { - var n = isNearLine([gridpos.x, gridpos.y], obj.gridStart, obj.gridStop, obj.tooltipWidthFactor); - datapos = [plot.axes[obj.options.xaxis].series_p2u(gridpos.x), plot.axes[obj.options.yaxis].series_p2u(gridpos.y)]; - - // cases: - // near line, no highlighting - // near line, highliting on this line - // near line, highlighting another line - // not near any line, highlighting - // not near any line, no highlighting - - // near line, not currently highlighting - if (n && co.highlightObjectIndex == null) { - switch (obj.type) { - case 'line': - showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos); - break; - - case 'horizontalLine': - case 'dashedHorizontalLine': - showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]); - break; - - case 'verticalLine': - case 'dashedVerticalLine': - showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]); - break; - default: - break; - } - co.highlightObjectIndex = i; - haveHighlight = true; - break; - } - - // near line, highlighting another line. - else if (n && co.highlightObjectIndex !== i) { - // turn off tooltip. - elem = co._tooltipElem; - if (obj.fadeTooltip) { - elem.fadeOut(obj.tooltipFadeSpeed); - } - else { - elem.hide(); - } - - // turn on right tooltip. - switch (obj.type) { - case 'line': - showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos); - break; - - case 'horizontalLine': - case 'dashedHorizontalLine': - showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]); - break; - - case 'verticalLine': - case 'dashedVerticalLine': - showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]); - break; - default: - break; - } - - co.highlightObjectIndex = i; - haveHighlight = true; - break; - } - - // near line, already highlighting this line, update - else if (n) { - switch (obj.type) { - case 'line': - showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos); - break; - - case 'horizontalLine': - case 'dashedHorizontalLine': - showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]); - break; - - case 'verticalLine': - case 'dashedVerticalLine': - showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]); - break; - default: - break; - } - - haveHighlight = true; - break; - } - } - } - - // check if we are highlighting and not near a line, turn it off. - if (!haveHighlight && co.highlightObjectIndex !== null) { - elem = co._tooltipElem; - obj = co.getObject(co.highlightObjectIndex); - if (obj.fadeTooltip) { - elem.fadeOut(obj.tooltipFadeSpeed); - } - else { - elem.hide(); - } - co.highlightObjectIndex = null; - } - } - - $.jqplot.postInitHooks.push($.jqplot.CanvasOverlay.postPlotInit); - $.jqplot.postDrawHooks.push($.jqplot.CanvasOverlay.postPlotDraw); - $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]); - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js deleted file mode 100644 index 3d3c9fad..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(d){var f=0;d.jqplot.CanvasOverlay=function(o){var l=o||{};this.options={show:d.jqplot.config.enablePlugins,deferDraw:false};this.objects=[];this.objectNames=[];this.canvas=null;this.markerRenderer=new d.jqplot.MarkerRenderer({style:"line"});this.markerRenderer.init();this.highlightObjectIndex=null;if(l.objects){var q=l.objects,p;for(var m=0;m<q.length;m++){p=q[m];for(var r in p){switch(r){case"line":this.addLine(p[r]);break;case"horizontalLine":this.addHorizontalLine(p[r]);break;case"dashedHorizontalLine":this.addDashedHorizontalLine(p[r]);break;case"verticalLine":this.addVerticalLine(p[r]);break;case"dashedVerticalLine":this.addDashedVerticalLine(p[r]);break;default:break}}}}d.extend(true,this.options,l)};d.jqplot.CanvasOverlay.postPlotInit=function(o,n,m){var l=m||{};this.plugins.canvasOverlay=new d.jqplot.CanvasOverlay(l.canvasOverlay)};function h(){this.uid=null;this.type=null;this.gridStart=null;this.gridStop=null;this.tooltipWidthFactor=0;this.options={name:null,show:true,lineWidth:2,lineCap:"round",color:"#666666",shadow:true,shadowAngle:45,shadowOffset:1,shadowDepth:3,shadowAlpha:"0.07",xaxis:"xaxis",yaxis:"yaxis",showTooltip:false,showTooltipPrecision:0.6,tooltipLocation:"nw",fadeTooltip:true,tooltipFadeSpeed:"fast",tooltipOffset:4,tooltipFormatString:"%d, %d"}}function b(l){h.call(this);this.type="line";var m={start:[],stop:[]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}b.prototype=new h();b.prototype.constructor=b;function e(l){h.call(this);this.type="horizontalLine";var m={y:null,xmin:null,xmax:null,xOffset:"6px",xminOffset:null,xmaxOffset:null};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}e.prototype=new h();e.prototype.constructor=e;function i(l){h.call(this);this.type="dashedHorizontalLine";var m={y:null,xmin:null,xmax:null,xOffset:"6px",xminOffset:null,xmaxOffset:null,dashPattern:[8,8]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}i.prototype=new h();i.prototype.constructor=i;function c(l){h.call(this);this.type="verticalLine";var m={x:null,ymin:null,ymax:null,yOffset:"6px",yminOffset:null,ymaxOffset:null};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}c.prototype=new h();c.prototype.constructor=c;function k(l){h.call(this);this.type="dashedVerticalLine";this.start=null;this.stop=null;var m={x:null,ymin:null,ymax:null,yOffset:"6px",yminOffset:null,ymaxOffset:null,dashPattern:[8,8]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}k.prototype=new h();k.prototype.constructor=k;d.jqplot.CanvasOverlay.prototype.addLine=function(m){var l=new b(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addHorizontalLine=function(m){var l=new e(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addDashedHorizontalLine=function(m){var l=new i(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addVerticalLine=function(m){var l=new c(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addDashedVerticalLine=function(m){var l=new k(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.removeObject=function(l){if(d.type(l)=="number"){this.objects.splice(l,1);this.objectNames.splice(l,1)}else{var m=d.inArray(l,this.objectNames);if(m!=-1){this.objects.splice(m,1);this.objectNames.splice(m,1)}}};d.jqplot.CanvasOverlay.prototype.getObject=function(l){if(d.type(l)=="number"){return this.objects[l]}else{var m=d.inArray(l,this.objectNames);if(m!=-1){return this.objects[m]}}};d.jqplot.CanvasOverlay.prototype.get=d.jqplot.CanvasOverlay.prototype.getObject;d.jqplot.CanvasOverlay.prototype.clear=function(l){this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(),this.canvas.getHeight())};d.jqplot.CanvasOverlay.prototype.draw=function(I){var w,t=this.objects,D=this.markerRenderer,q,E;if(this.options.show){this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(),this.canvas.getHeight());for(var F=0;F<t.length;F++){w=t[F];var z=d.extend(true,{},w.options);if(w.options.show){D.shadow=w.options.shadow;w.tooltipWidthFactor=w.options.lineWidth/w.options.showTooltipPrecision;switch(w.type){case"line":D.style="line";z.closePath=false;q=[I.axes[w.options.xaxis].series_u2p(w.options.start[0]),I.axes[w.options.yaxis].series_u2p(w.options.start[1])];E=[I.axes[w.options.xaxis].series_u2p(w.options.stop[0]),I.axes[w.options.yaxis].series_u2p(w.options.stop[1])];w.gridStart=q;w.gridStop=E;D.draw(q,E,this.canvas._ctx,z);break;case"horizontalLine":if(w.options.y!=null){D.style="line";z.closePath=false;var n=I.axes[w.options.xaxis],Q,J,u=I.axes[w.options.yaxis].series_u2p(w.options.y),G=w.options.xminOffset||w.options.xOffset,r=w.options.xmaxOffset||w.options.xOffset;if(w.options.xmin!=null){Q=n.series_u2p(w.options.xmin)}else{if(G!=null){if(d.type(G)=="number"){Q=n.series_u2p(n.min+G)}else{if(d.type(G)=="string"){Q=n.series_u2p(n.min)+parseFloat(G)}}}}if(w.options.xmax!=null){J=n.series_u2p(w.options.xmax)}else{if(r!=null){if(d.type(r)=="number"){J=n.series_u2p(n.max-r)}else{if(d.type(r)=="string"){J=n.series_u2p(n.max)-parseFloat(r)}}}}if(J!=null&&Q!=null){w.gridStart=[Q,u];w.gridStop=[J,u];D.draw([Q,u],[J,u],this.canvas._ctx,z)}}break;case"dashedHorizontalLine":var m=w.options.dashPattern;var C=0;for(var K=0;K<m.length;K++){C+=m[K]}if(w.options.y!=null){D.style="line";z.closePath=false;var n=I.axes[w.options.xaxis],Q,J,u=I.axes[w.options.yaxis].series_u2p(w.options.y),G=w.options.xminOffset||w.options.xOffset,r=w.options.xmaxOffset||w.options.xOffset;if(w.options.xmin!=null){Q=n.series_u2p(w.options.xmin)}else{if(G!=null){if(d.type(G)=="number"){Q=n.series_u2p(n.min+G)}else{if(d.type(G)=="string"){Q=n.series_u2p(n.min)+parseFloat(G)}}}}if(w.options.xmax!=null){J=n.series_u2p(w.options.xmax)}else{if(r!=null){if(d.type(r)=="number"){J=n.series_u2p(n.max-r)}else{if(d.type(r)=="string"){J=n.series_u2p(n.max)-parseFloat(r)}}}}if(J!=null&&Q!=null){w.gridStart=[Q,u];w.gridStop=[J,u];var p=Math.ceil((J-Q)/C);var O=Q,M;for(var K=0;K<p;K++){for(var H=0;H<m.length;H+=2){M=O+m[H];D.draw([O,u],[M,u],this.canvas._ctx,z);O+=m[H];if(H<m.length-1){O+=m[H+1]}}}}}break;case"verticalLine":if(w.options.x!=null){D.style="line";z.closePath=false;var L=I.axes[w.options.yaxis],l,s,v=I.axes[w.options.xaxis].series_u2p(w.options.x),B=w.options.yminOffset||w.options.yOffset,o=w.options.ymaxOffset||w.options.yOffset;if(w.options.ymin!=null){l=L.series_u2p(w.options.ymin)}else{if(B!=null){if(d.type(B)=="number"){l=L.series_u2p(L.min-B)}else{if(d.type(B)=="string"){l=L.series_u2p(L.min)-parseFloat(B)}}}}if(w.options.ymax!=null){s=L.series_u2p(w.options.ymax)}else{if(o!=null){if(d.type(o)=="number"){s=L.series_u2p(L.max+o)}else{if(d.type(o)=="string"){s=L.series_u2p(L.max)+parseFloat(o)}}}}if(s!=null&&l!=null){w.gridStart=[v,l];w.gridStop=[v,s];D.draw([v,l],[v,s],this.canvas._ctx,z)}}break;case"dashedVerticalLine":var m=w.options.dashPattern;var C=0;for(var K=0;K<m.length;K++){C+=m[K]}if(w.options.x!=null){D.style="line";z.closePath=false;var L=I.axes[w.options.yaxis],l,s,v=I.axes[w.options.xaxis].series_u2p(w.options.x),B=w.options.yminOffset||w.options.yOffset,o=w.options.ymaxOffset||w.options.yOffset;if(w.options.ymin!=null){l=L.series_u2p(w.options.ymin)}else{if(B!=null){if(d.type(B)=="number"){l=L.series_u2p(L.min-B)}else{if(d.type(B)=="string"){l=L.series_u2p(L.min)-parseFloat(B)}}}}if(w.options.ymax!=null){s=L.series_u2p(w.options.ymax)}else{if(o!=null){if(d.type(o)=="number"){s=L.series_u2p(L.max+o)}else{if(d.type(o)=="string"){s=L.series_u2p(L.max)+parseFloat(o)}}}}if(s!=null&&l!=null){w.gridStart=[v,l];w.gridStop=[v,s];var p=Math.ceil((l-s)/C);var A=((p*C)-(l-s))/2;var O=l,M,N,P;for(var K=0;K<p;K++){for(var H=0;H<m.length;H+=2){M=O-m[H];if(M<s){M=s}if(O<s){O=s}D.draw([v,O],[v,M],this.canvas._ctx,z);O-=m[H];if(H<m.length-1){O-=m[H+1]}}}}}break;default:break}}}}};d.jqplot.CanvasOverlay.postPlotDraw=function(){var m=this.plugins.canvasOverlay;if(m&&m.highlightCanvas){m.highlightCanvas.resetCanvas();m.highlightCanvas=null}m.canvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(m.canvas.createElement(this._gridPadding,"jqplot-overlayCanvas-canvas",this._plotDimensions,this));m.canvas.setContext();if(!m.deferDraw){m.draw(this)}var l=document.createElement("div");m._tooltipElem=d(l);l=null;m._tooltipElem.addClass("jqplot-canvasOverlay-tooltip");m._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(m._tooltipElem);this.eventCanvas._elem.bind("mouseleave",{elem:m._tooltipElem},function(n){n.data.elem.hide()});var m=null};function j(q,o,p,n){var s=q.plugins.canvasOverlay;var m=s._tooltipElem;var l=o.options,t,r;m.html(d.jqplot.sprintf(l.tooltipFormatString,n[0],n[1]));switch(l.tooltipLocation){case"nw":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"n":t=p[0]+q._gridPadding.left-m.outerWidth(true)/2;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"ne":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"e":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top-m.outerHeight(true)/2;break;case"se":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"s":t=p[0]+q._gridPadding.left-m.outerWidth(true)/2;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"sw":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"w":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-m.outerHeight(true)/2;break;default:t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break}m.css("left",t);m.css("top",r);if(l.fadeTooltip){m.stop(true,true).fadeIn(l.tooltipFadeSpeed)}else{m.show()}m=null}function g(y,p,r,o){var n=y[0];var m=y[1];var x=Math.round(r[0]);var w=Math.round(r[1]);var t=Math.round(p[0]);var s=Math.round(p[1]);var q=Math.sqrt(Math.pow(x-t,2)+Math.pow(w-s,2));var z=o*q;var v=Math.abs((t-x)*(m-w)-(s-w)*(n-x));var u=(v<z)?true:false;return u}function a(y,v,q,z,w){var x=w.plugins.canvasOverlay;var u=x.objects;var r=u.length;var t,m=false;var p;for(var s=0;s<r;s++){t=u[s];if(t.options.showTooltip){var o=g([v.x,v.y],t.gridStart,t.gridStop,t.tooltipWidthFactor);q=[w.axes[t.options.xaxis].series_p2u(v.x),w.axes[t.options.yaxis].series_p2u(v.y)];if(o&&x.highlightObjectIndex==null){switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}x.highlightObjectIndex=s;m=true;break}else{if(o&&x.highlightObjectIndex!==s){p=x._tooltipElem;if(t.fadeTooltip){p.fadeOut(t.tooltipFadeSpeed)}else{p.hide()}switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}x.highlightObjectIndex=s;m=true;break}else{if(o){switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}m=true;break}}}}}if(!m&&x.highlightObjectIndex!==null){p=x._tooltipElem;t=x.getObject(x.highlightObjectIndex);if(t.fadeTooltip){p.fadeOut(t.tooltipFadeSpeed)}else{p.hide()}x.highlightObjectIndex=null}}d.jqplot.postInitHooks.push(d.jqplot.CanvasOverlay.postPlotInit);d.jqplot.postDrawHooks.push(d.jqplot.CanvasOverlay.postPlotDraw);d.jqplot.eventListenerHooks.push(["jqplotMouseMove",a])})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js deleted file mode 100644 index 693d2ff9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js +++ /dev/null @@ -1,449 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2012 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ - -(function($) { - // This code is a modified version of the canvastext.js code, copyright below: - // - // This code is released to the public domain by Jim Studt, 2007. - // He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/ - // - $.jqplot.CanvasTextRenderer = function(options){ - this.fontStyle = 'normal'; // normal, italic, oblique [not implemented] - this.fontVariant = 'normal'; // normal, small caps [not implemented] - this.fontWeight = 'normal'; // normal, bold, bolder, lighter, 100 - 900 - this.fontSize = '10px'; - this.fontFamily = 'sans-serif'; - this.fontStretch = 1.0; - this.fillStyle = '#666666'; - this.angle = 0; - this.textAlign = 'start'; - this.textBaseline = 'alphabetic'; - this.text; - this.width; - this.height; - this.pt2px = 1.28; - - $.extend(true, this, options); - this.normalizedFontSize = this.normalizeFontSize(this.fontSize); - this.setHeight(); - }; - - $.jqplot.CanvasTextRenderer.prototype.init = function(options) { - $.extend(true, this, options); - this.normalizedFontSize = this.normalizeFontSize(this.fontSize); - this.setHeight(); - }; - - // convert css spec into point size - // returns float - $.jqplot.CanvasTextRenderer.prototype.normalizeFontSize = function(sz) { - sz = String(sz); - var n = parseFloat(sz); - if (sz.indexOf('px') > -1) { - return n/this.pt2px; - } - else if (sz.indexOf('pt') > -1) { - return n; - } - else if (sz.indexOf('em') > -1) { - return n*12; - } - else if (sz.indexOf('%') > -1) { - return n*12/100; - } - // default to pixels; - else { - return n/this.pt2px; - } - }; - - - $.jqplot.CanvasTextRenderer.prototype.fontWeight2Float = function(w) { - // w = normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 - // return values adjusted for Hershey font. - if (Number(w)) { - return w/400; - } - else { - switch (w) { - case 'normal': - return 1; - break; - case 'bold': - return 1.75; - break; - case 'bolder': - return 2.25; - break; - case 'lighter': - return 0.75; - break; - default: - return 1; - break; - } - } - }; - - $.jqplot.CanvasTextRenderer.prototype.getText = function() { - return this.text; - }; - - $.jqplot.CanvasTextRenderer.prototype.setText = function(t, ctx) { - this.text = t; - this.setWidth(ctx); - return this; - }; - - $.jqplot.CanvasTextRenderer.prototype.getWidth = function(ctx) { - return this.width; - }; - - $.jqplot.CanvasTextRenderer.prototype.setWidth = function(ctx, w) { - if (!w) { - this.width = this.measure(ctx, this.text); - } - else { - this.width = w; - } - return this; - }; - - // return height in pixels. - $.jqplot.CanvasTextRenderer.prototype.getHeight = function(ctx) { - return this.height; - }; - - // w - height in pt - // set heigh in px - $.jqplot.CanvasTextRenderer.prototype.setHeight = function(w) { - if (!w) { - //height = this.fontSize /0.75; - this.height = this.normalizedFontSize * this.pt2px; - } - else { - this.height = w; - } - return this; - }; - - $.jqplot.CanvasTextRenderer.prototype.letter = function (ch) - { - return this.letters[ch]; - }; - - $.jqplot.CanvasTextRenderer.prototype.ascent = function() - { - return this.normalizedFontSize; - }; - - $.jqplot.CanvasTextRenderer.prototype.descent = function() - { - return 7.0*this.normalizedFontSize/25.0; - }; - - $.jqplot.CanvasTextRenderer.prototype.measure = function(ctx, str) - { - var total = 0; - var len = str.length; - - for (var i = 0; i < len; i++) { - var c = this.letter(str.charAt(i)); - if (c) { - total += c.width * this.normalizedFontSize / 25.0 * this.fontStretch; - } - } - return total; - }; - - $.jqplot.CanvasTextRenderer.prototype.draw = function(ctx,str) - { - var x = 0; - // leave room at bottom for descenders. - var y = this.height*0.72; - var total = 0; - var len = str.length; - var mag = this.normalizedFontSize / 25.0; - - ctx.save(); - var tx, ty; - - // 1st quadrant - if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) { - tx = 0; - ty = -Math.sin(this.angle) * this.width; - } - // 4th quadrant - else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) { - tx = Math.sin(this.angle) * this.height; - ty = 0; - } - // 2nd quadrant - else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) { - tx = -Math.cos(this.angle) * this.width; - ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height; - } - // 3rd quadrant - else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) { - tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width; - ty = -Math.cos(this.angle) * this.height; - } - - ctx.strokeStyle = this.fillStyle; - ctx.fillStyle = this.fillStyle; - ctx.translate(tx, ty); - ctx.rotate(this.angle); - ctx.lineCap = "round"; - // multiplier was 2.0 - var fact = (this.normalizedFontSize > 30) ? 2.0 : 2 + (30 - this.normalizedFontSize)/20; - ctx.lineWidth = fact * mag * this.fontWeight2Float(this.fontWeight); - - for ( var i = 0; i < len; i++) { - var c = this.letter( str.charAt(i)); - if ( !c) { - continue; - } - - ctx.beginPath(); - - var penUp = 1; - var needStroke = 0; - for ( var j = 0; j < c.points.length; j++) { - var a = c.points[j]; - if ( a[0] == -1 && a[1] == -1) { - penUp = 1; - continue; - } - if ( penUp) { - ctx.moveTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag); - penUp = false; - } else { - ctx.lineTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag); - } - } - ctx.stroke(); - x += c.width*mag*this.fontStretch; - } - ctx.restore(); - return total; - }; - - $.jqplot.CanvasTextRenderer.prototype.letters = { - ' ': { width: 16, points: [] }, - '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] }, - '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] }, - '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] }, - '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] }, - '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] }, - '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] }, - '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] }, - '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] }, - ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] }, - '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] }, - '+': { width: 26, points: [[13,18],[13,0],[-1,-1],[4,9],[22,9]] }, - ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] }, - '-': { width: 18, points: [[6,9],[12,9]] }, - '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] }, - '/': { width: 22, points: [[20,25],[2,-7]] }, - '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] }, - '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] }, - '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] }, - '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] }, - '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] }, - '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] }, - '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] }, - '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] }, - '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] }, - '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] }, - ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] }, - ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] }, - '<': { width: 24, points: [[20,18],[4,9],[20,0]] }, - '=': { width: 26, points: [[4,12],[22,12],[-1,-1],[4,6],[22,6]] }, - '>': { width: 24, points: [[4,18],[20,9],[4,0]] }, - '?': { width: 18, points: [[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]] }, - '@': { width: 27, points: [[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]] }, - 'A': { width: 18, points: [[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]] }, - 'B': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]] }, - 'C': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]] }, - 'D': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]] }, - 'E': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]] }, - 'F': { width: 18, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]] }, - 'G': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]] }, - 'H': { width: 22, points: [[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]] }, - 'I': { width: 8, points: [[4,21],[4,0]] }, - 'J': { width: 16, points: [[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]] }, - 'K': { width: 21, points: [[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]] }, - 'L': { width: 17, points: [[4,21],[4,0],[-1,-1],[4,0],[16,0]] }, - 'M': { width: 24, points: [[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]] }, - 'N': { width: 22, points: [[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]] }, - 'O': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]] }, - 'P': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]] }, - 'Q': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]] }, - 'R': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]] }, - 'S': { width: 20, points: [[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] }, - 'T': { width: 16, points: [[8,21],[8,0],[-1,-1],[1,21],[15,21]] }, - 'U': { width: 22, points: [[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]] }, - 'V': { width: 18, points: [[1,21],[9,0],[-1,-1],[17,21],[9,0]] }, - 'W': { width: 24, points: [[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]] }, - 'X': { width: 20, points: [[3,21],[17,0],[-1,-1],[17,21],[3,0]] }, - 'Y': { width: 18, points: [[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]] }, - 'Z': { width: 20, points: [[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]] }, - '[': { width: 14, points: [[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]] }, - '\\': { width: 14, points: [[0,21],[14,-3]] }, - ']': { width: 14, points: [[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]] }, - '^': { width: 16, points: [[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]] }, - '_': { width: 16, points: [[0,-2],[16,-2]] }, - '`': { width: 10, points: [[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]] }, - 'a': { width: 19, points: [[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] }, - 'b': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] }, - 'c': { width: 18, points: [[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] }, - 'd': { width: 19, points: [[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] }, - 'e': { width: 18, points: [[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] }, - 'f': { width: 12, points: [[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]] }, - 'g': { width: 19, points: [[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] }, - 'h': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] }, - 'i': { width: 8, points: [[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]] }, - 'j': { width: 10, points: [[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]] }, - 'k': { width: 17, points: [[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]] }, - 'l': { width: 8, points: [[4,21],[4,0]] }, - 'm': { width: 30, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]] }, - 'n': { width: 19, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] }, - 'o': { width: 19, points: [[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]] }, - 'p': { width: 19, points: [[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] }, - 'q': { width: 19, points: [[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] }, - 'r': { width: 13, points: [[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]] }, - 's': { width: 17, points: [[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]] }, - 't': { width: 12, points: [[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]] }, - 'u': { width: 19, points: [[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]] }, - 'v': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0]] }, - 'w': { width: 22, points: [[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]] }, - 'x': { width: 17, points: [[3,14],[14,0],[-1,-1],[14,14],[3,0]] }, - 'y': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]] }, - 'z': { width: 17, points: [[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]] }, - '{': { width: 14, points: [[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]] }, - '|': { width: 8, points: [[4,25],[4,-7]] }, - '}': { width: 14, points: [[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]] }, - '~': { width: 24, points: [[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]] } - }; - - $.jqplot.CanvasFontRenderer = function(options) { - options = options || {}; - if (!options.pt2px) { - options.pt2px = 1.5; - } - $.jqplot.CanvasTextRenderer.call(this, options); - }; - - $.jqplot.CanvasFontRenderer.prototype = new $.jqplot.CanvasTextRenderer({}); - $.jqplot.CanvasFontRenderer.prototype.constructor = $.jqplot.CanvasFontRenderer; - - $.jqplot.CanvasFontRenderer.prototype.measure = function(ctx, str) - { - // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily; - var fstyle = this.fontSize+' '+this.fontFamily; - ctx.save(); - ctx.font = fstyle; - var w = ctx.measureText(str).width; - ctx.restore(); - return w; - }; - - $.jqplot.CanvasFontRenderer.prototype.draw = function(ctx, str) - { - var x = 0; - // leave room at bottom for descenders. - var y = this.height*0.72; - //var y = 12; - - ctx.save(); - var tx, ty; - - // 1st quadrant - if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) { - tx = 0; - ty = -Math.sin(this.angle) * this.width; - } - // 4th quadrant - else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) { - tx = Math.sin(this.angle) * this.height; - ty = 0; - } - // 2nd quadrant - else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) { - tx = -Math.cos(this.angle) * this.width; - ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height; - } - // 3rd quadrant - else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) { - tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width; - ty = -Math.cos(this.angle) * this.height; - } - ctx.strokeStyle = this.fillStyle; - ctx.fillStyle = this.fillStyle; - // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily; - var fstyle = this.fontSize+' '+this.fontFamily; - ctx.font = fstyle; - ctx.translate(tx, ty); - ctx.rotate(this.angle); - ctx.fillText(str, x, y); - // ctx.strokeText(str, x, y); - - ctx.restore(); - }; - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js deleted file mode 100644 index 4a3fb652..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.CanvasTextRenderer=function(b){this.fontStyle="normal";this.fontVariant="normal";this.fontWeight="normal";this.fontSize="10px";this.fontFamily="sans-serif";this.fontStretch=1;this.fillStyle="#666666";this.angle=0;this.textAlign="start";this.textBaseline="alphabetic";this.text;this.width;this.height;this.pt2px=1.28;a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.init=function(b){a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.normalizeFontSize=function(b){b=String(b);var c=parseFloat(b);if(b.indexOf("px")>-1){return c/this.pt2px}else{if(b.indexOf("pt")>-1){return c}else{if(b.indexOf("em")>-1){return c*12}else{if(b.indexOf("%")>-1){return c*12/100}else{return c/this.pt2px}}}}};a.jqplot.CanvasTextRenderer.prototype.fontWeight2Float=function(b){if(Number(b)){return b/400}else{switch(b){case"normal":return 1;break;case"bold":return 1.75;break;case"bolder":return 2.25;break;case"lighter":return 0.75;break;default:return 1;break}}};a.jqplot.CanvasTextRenderer.prototype.getText=function(){return this.text};a.jqplot.CanvasTextRenderer.prototype.setText=function(c,b){this.text=c;this.setWidth(b);return this};a.jqplot.CanvasTextRenderer.prototype.getWidth=function(b){return this.width};a.jqplot.CanvasTextRenderer.prototype.setWidth=function(c,b){if(!b){this.width=this.measure(c,this.text)}else{this.width=b}return this};a.jqplot.CanvasTextRenderer.prototype.getHeight=function(b){return this.height};a.jqplot.CanvasTextRenderer.prototype.setHeight=function(b){if(!b){this.height=this.normalizedFontSize*this.pt2px}else{this.height=b}return this};a.jqplot.CanvasTextRenderer.prototype.letter=function(b){return this.letters[b]};a.jqplot.CanvasTextRenderer.prototype.ascent=function(){return this.normalizedFontSize};a.jqplot.CanvasTextRenderer.prototype.descent=function(){return 7*this.normalizedFontSize/25};a.jqplot.CanvasTextRenderer.prototype.measure=function(d,g){var f=0;var b=g.length;for(var e=0;e<b;e++){var h=this.letter(g.charAt(e));if(h){f+=h.width*this.normalizedFontSize/25*this.fontStretch}}return f};a.jqplot.CanvasTextRenderer.prototype.draw=function(s,n){var r=0;var o=this.height*0.72;var p=0;var l=n.length;var k=this.normalizedFontSize/25;s.save();var h,f;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){h=0;f=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){h=Math.sin(this.angle)*this.height;f=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){h=-Math.cos(this.angle)*this.width;f=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){h=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;f=-Math.cos(this.angle)*this.height}}}}s.strokeStyle=this.fillStyle;s.fillStyle=this.fillStyle;s.translate(h,f);s.rotate(this.angle);s.lineCap="round";var t=(this.normalizedFontSize>30)?2:2+(30-this.normalizedFontSize)/20;s.lineWidth=t*k*this.fontWeight2Float(this.fontWeight);for(var g=0;g<l;g++){var m=this.letter(n.charAt(g));if(!m){continue}s.beginPath();var e=1;var b=0;for(var d=0;d<m.points.length;d++){var q=m.points[d];if(q[0]==-1&&q[1]==-1){e=1;continue}if(e){s.moveTo(r+q[0]*k*this.fontStretch,o-q[1]*k);e=false}else{s.lineTo(r+q[0]*k*this.fontStretch,o-q[1]*k)}}s.stroke();r+=m.width*k*this.fontStretch}s.restore();return p};a.jqplot.CanvasTextRenderer.prototype.letters={" ":{width:16,points:[]},"!":{width:10,points:[[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},'"':{width:16,points:[[4,21],[4,14],[-1,-1],[12,21],[12,14]]},"#":{width:21,points:[[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]]},"$":{width:20,points:[[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},"%":{width:24,points:[[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]]},"&":{width:26,points:[[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]]},"'":{width:10,points:[[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]]},"(":{width:14,points:[[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]]},")":{width:14,points:[[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]]},"*":{width:16,points:[[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]]},"+":{width:26,points:[[13,18],[13,0],[-1,-1],[4,9],[22,9]]},",":{width:10,points:[[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"-":{width:18,points:[[6,9],[12,9]]},".":{width:10,points:[[5,2],[4,1],[5,0],[6,1],[5,2]]},"/":{width:22,points:[[20,25],[2,-7]]},"0":{width:20,points:[[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]]},"1":{width:20,points:[[6,17],[8,18],[11,21],[11,0]]},"2":{width:20,points:[[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]]},"3":{width:20,points:[[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"4":{width:20,points:[[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]]},"5":{width:20,points:[[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"6":{width:20,points:[[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]]},"7":{width:20,points:[[17,21],[7,0],[-1,-1],[3,21],[17,21]]},"8":{width:20,points:[[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]]},"9":{width:20,points:[[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]]},":":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},";":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"<":{width:24,points:[[20,18],[4,9],[20,0]]},"=":{width:26,points:[[4,12],[22,12],[-1,-1],[4,6],[22,6]]},">":{width:24,points:[[4,18],[20,9],[4,0]]},"?":{width:18,points:[[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]]},"@":{width:27,points:[[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]]},A:{width:18,points:[[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]]},B:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]]},C:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]]},D:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]]},E:{width:19,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]]},F:{width:18,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]]},G:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]]},H:{width:22,points:[[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]]},I:{width:8,points:[[4,21],[4,0]]},J:{width:16,points:[[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]]},K:{width:21,points:[[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]]},L:{width:17,points:[[4,21],[4,0],[-1,-1],[4,0],[16,0]]},M:{width:24,points:[[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]]},N:{width:22,points:[[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]]},O:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]]},P:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]]},Q:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]]},R:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]]},S:{width:20,points:[[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},T:{width:16,points:[[8,21],[8,0],[-1,-1],[1,21],[15,21]]},U:{width:22,points:[[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]]},V:{width:18,points:[[1,21],[9,0],[-1,-1],[17,21],[9,0]]},W:{width:24,points:[[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]]},X:{width:20,points:[[3,21],[17,0],[-1,-1],[17,21],[3,0]]},Y:{width:18,points:[[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]]},Z:{width:20,points:[[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]]},"[":{width:14,points:[[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]]},"\\":{width:14,points:[[0,21],[14,-3]]},"]":{width:14,points:[[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]]},"^":{width:16,points:[[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]]},_:{width:16,points:[[0,-2],[16,-2]]},"`":{width:10,points:[[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]]},a:{width:19,points:[[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},b:{width:19,points:[[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},c:{width:18,points:[[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},d:{width:19,points:[[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},e:{width:18,points:[[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},f:{width:12,points:[[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]]},g:{width:19,points:[[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},h:{width:19,points:[[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},i:{width:8,points:[[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]]},j:{width:10,points:[[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]]},k:{width:17,points:[[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]]},l:{width:8,points:[[4,21],[4,0]]},m:{width:30,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]]},n:{width:19,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},o:{width:19,points:[[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]]},p:{width:19,points:[[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},q:{width:19,points:[[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},r:{width:13,points:[[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]]},s:{width:17,points:[[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]]},t:{width:12,points:[[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]]},u:{width:19,points:[[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]]},v:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0]]},w:{width:22,points:[[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]]},x:{width:17,points:[[3,14],[14,0],[-1,-1],[14,14],[3,0]]},y:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]]},z:{width:17,points:[[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]]},"{":{width:14,points:[[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]]},"|":{width:8,points:[[4,25],[4,-7]]},"}":{width:14,points:[[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]]},"~":{width:24,points:[[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]]}};a.jqplot.CanvasFontRenderer=function(b){b=b||{};if(!b.pt2px){b.pt2px=1.5}a.jqplot.CanvasTextRenderer.call(this,b)};a.jqplot.CanvasFontRenderer.prototype=new a.jqplot.CanvasTextRenderer({});a.jqplot.CanvasFontRenderer.prototype.constructor=a.jqplot.CanvasFontRenderer;a.jqplot.CanvasFontRenderer.prototype.measure=function(c,e){var d=this.fontSize+" "+this.fontFamily;c.save();c.font=d;var b=c.measureText(e).width;c.restore();return b};a.jqplot.CanvasFontRenderer.prototype.draw=function(e,g){var c=0;var h=this.height*0.72;e.save();var d,b;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){d=0;b=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){d=Math.sin(this.angle)*this.height;b=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){d=-Math.cos(this.angle)*this.width;b=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){d=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;b=-Math.cos(this.angle)*this.height}}}}e.strokeStyle=this.fillStyle;e.fillStyle=this.fillStyle;var f=this.fontSize+" "+this.fontFamily;e.font=f;e.translate(d,b);e.rotate(this.angle);e.fillText(g,c,h);e.restore()}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js deleted file mode 100644 index 070801cb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js +++ /dev/null @@ -1,673 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * class: $.jqplot.CategoryAxisRenderer - * A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series. - * - * To use this renderer, include the plugin in your source - * > <script type="text/javascript" language="javascript" src="plugins/jqplot.categoryAxisRenderer.js"></script> - * - * and supply the appropriate options to your plot - * - * > {axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}} - **/ - $.jqplot.CategoryAxisRenderer = function(options) { - $.jqplot.LinearAxisRenderer.call(this); - // prop: sortMergedLabels - // True to sort tick labels when labels are created by merging - // x axis values from multiple series. That is, say you have - // two series like: - // > line1 = [[2006, 4], [2008, 9], [2009, 16]]; - // > line2 = [[2006, 3], [2007, 7], [2008, 6]]; - // If no label array is specified, tick labels will be collected - // from the x values of the series. With sortMergedLabels - // set to true, tick labels will be: - // > [2006, 2007, 2008, 2009] - // With sortMergedLabels set to false, tick labels will be: - // > [2006, 2008, 2009, 2007] - // - // Note, this property is specified on the renderOptions for the - // axes when creating a plot: - // > axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}} - this.sortMergedLabels = false; - }; - - $.jqplot.CategoryAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.CategoryAxisRenderer.prototype.constructor = $.jqplot.CategoryAxisRenderer; - - $.jqplot.CategoryAxisRenderer.prototype.init = function(options){ - this.groups = 1; - this.groupLabels = []; - this._groupLabels = []; - this._grouped = false; - this._barsPerGroup = null; - this.reverse = false; - // prop: tickRenderer - // A class of a rendering engine for creating the ticks labels displayed on the plot, - // See <$.jqplot.AxisTickRenderer>. - // this.tickRenderer = $.jqplot.AxisTickRenderer; - // this.labelRenderer = $.jqplot.AxisLabelRenderer; - $.extend(true, this, {tickOptions:{formatString:'%d'}}, options); - var db = this._dataBounds; - // Go through all the series attached to this axis and find - // the min/max bounds for this axis. - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - if (s.groups) { - this.groups = s.groups; - } - var d = s.data; - - for (var j=0; j<d.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - if (d[j][0] < db.min || db.min == null) { - db.min = d[j][0]; - } - if (d[j][0] > db.max || db.max == null) { - db.max = d[j][0]; - } - } - else { - if (d[j][1] < db.min || db.min == null) { - db.min = d[j][1]; - } - if (d[j][1] > db.max || db.max == null) { - db.max = d[j][1]; - } - } - } - } - - if (this.groupLabels.length) { - this.groups = this.groupLabels.length; - } - }; - - - $.jqplot.CategoryAxisRenderer.prototype.createTicks = function() { - // we're are operating on an axis here - var ticks = this._ticks; - var userTicks = this.ticks; - var name = this.name; - // databounds were set on axis initialization. - var db = this._dataBounds; - var dim, interval; - var min, max; - var pos1, pos2; - var tt, i; - - // if we already have ticks, use them. - if (userTicks.length) { - // adjust with blanks if we have groups - if (this.groups > 1 && !this._grouped) { - var l = userTicks.length; - var skip = parseInt(l/this.groups, 10); - var count = 0; - for (var i=skip; i<l; i+=skip) { - userTicks.splice(i+count, 0, ' '); - count++; - } - this._grouped = true; - } - this.min = 0.5; - this.max = userTicks.length + 0.5; - var range = this.max - this.min; - this.numberTicks = 2*userTicks.length + 1; - for (i=0; i<userTicks.length; i++){ - tt = this.min + 2 * i * range / (this.numberTicks-1); - // need a marker before and after the tick - var t = new this.tickRenderer(this.tickOptions); - t.showLabel = false; - // t.showMark = true; - t.setTick(tt, this.name); - this._ticks.push(t); - var t = new this.tickRenderer(this.tickOptions); - t.label = userTicks[i]; - // t.showLabel = true; - t.showMark = false; - t.showGridline = false; - t.setTick(tt+0.5, this.name); - this._ticks.push(t); - } - // now add the last tick at the end - var t = new this.tickRenderer(this.tickOptions); - t.showLabel = false; - // t.showMark = true; - t.setTick(tt+1, this.name); - this._ticks.push(t); - } - - // we don't have any ticks yet, let's make some! - else { - if (name == 'xaxis' || name == 'x2axis') { - dim = this._plotDimensions.width; - } - else { - dim = this._plotDimensions.height; - } - - // if min, max and number of ticks specified, user can't specify interval. - if (this.min != null && this.max != null && this.numberTicks != null) { - this.tickInterval = null; - } - - // if max, min, and interval specified and interval won't fit, ignore interval. - if (this.min != null && this.max != null && this.tickInterval != null) { - if (parseInt((this.max-this.min)/this.tickInterval, 10) != (this.max-this.min)/this.tickInterval) { - this.tickInterval = null; - } - } - - // find out how many categories are in the lines and collect labels - var labels = []; - var numcats = 0; - var min = 0.5; - var max, val; - var isMerged = false; - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - for (var j=0; j<s.data.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - val = s.data[j][0]; - } - else { - val = s.data[j][1]; - } - if ($.inArray(val, labels) == -1) { - isMerged = true; - numcats += 1; - labels.push(val); - } - } - } - - if (isMerged && this.sortMergedLabels) { - labels.sort(function(a,b) { return a - b; }); - } - - // keep a reference to these tick labels to use for redrawing plot (see bug #57) - this.ticks = labels; - - // now bin the data values to the right lables. - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - for (var j=0; j<s.data.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - val = s.data[j][0]; - } - else { - val = s.data[j][1]; - } - // for category axis, force the values into category bins. - // we should have the value in the label array now. - var idx = $.inArray(val, labels)+1; - if (this.name == 'xaxis' || this.name == 'x2axis') { - s.data[j][0] = idx; - } - else { - s.data[j][1] = idx; - } - } - } - - // adjust with blanks if we have groups - if (this.groups > 1 && !this._grouped) { - var l = labels.length; - var skip = parseInt(l/this.groups, 10); - var count = 0; - for (var i=skip; i<l; i+=skip+1) { - labels[i] = ' '; - } - this._grouped = true; - } - - max = numcats + 0.5; - if (this.numberTicks == null) { - this.numberTicks = 2*numcats + 1; - } - - var range = max - min; - this.min = min; - this.max = max; - var track = 0; - - // todo: adjust this so more ticks displayed. - var maxVisibleTicks = parseInt(3+dim/10, 10); - var skip = parseInt(numcats/maxVisibleTicks, 10); - - if (this.tickInterval == null) { - - this.tickInterval = range / (this.numberTicks-1); - - } - // if tickInterval is specified, we will ignore any computed maximum. - for (var i=0; i<this.numberTicks; i++){ - tt = this.min + i * this.tickInterval; - var t = new this.tickRenderer(this.tickOptions); - // if even tick, it isn't a category, it's a divider - if (i/2 == parseInt(i/2, 10)) { - t.showLabel = false; - t.showMark = true; - } - else { - if (skip>0 && track<skip) { - t.showLabel = false; - track += 1; - } - else { - t.showLabel = true; - track = 0; - } - t.label = t.formatter(t.formatString, labels[(i-1)/2]); - t.showMark = false; - t.showGridline = false; - } - t.setTick(tt, this.name); - this._ticks.push(t); - } - } - - }; - - // called with scope of axis - $.jqplot.CategoryAxisRenderer.prototype.draw = function(ctx, plot) { - if (this.show) { - // populate the axis label and value properties. - // createTicks is a method on the renderer, but - // call it within the scope of the axis. - this.renderer.createTicks.call(this); - // fill a div with axes labels in the right direction. - // Need to pregenerate each axis to get it's bounds and - // position it and the labels correctly on the plot. - var dim=0; - var temp; - // Added for theming. - if (this._elem) { - // this._elem.empty(); - // Memory Leaks patch - this._elem.emptyForce(); - } - - this._elem = this._elem || $('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>'); - - if (this.name == 'xaxis' || this.name == 'x2axis') { - this._elem.width(this._plotDimensions.width); - } - else { - this._elem.height(this._plotDimensions.height); - } - - // create a _label object. - this.labelOptions.axis = this.name; - this._label = new this.labelRenderer(this.labelOptions); - if (this._label.show) { - var elem = this._label.draw(ctx, plot); - elem.appendTo(this._elem); - } - - var t = this._ticks; - for (var i=0; i<t.length; i++) { - var tick = t[i]; - if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { - var elem = tick.draw(ctx, plot); - elem.appendTo(this._elem); - } - } - - this._groupLabels = []; - // now make group labels - for (var i=0; i<this.groupLabels.length; i++) - { - var elem = $('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>'); - elem.html(this.groupLabels[i]); - this._groupLabels.push(elem); - elem.appendTo(this._elem); - } - } - return this._elem; - }; - - // called with scope of axis - $.jqplot.CategoryAxisRenderer.prototype.set = function() { - var dim = 0; - var temp; - var w = 0; - var h = 0; - var lshow = (this._label == null) ? false : this._label.show; - if (this.show) { - var t = this._ticks; - for (var i=0; i<t.length; i++) { - var tick = t[i]; - if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - temp = tick._elem.outerHeight(true); - } - else { - temp = tick._elem.outerWidth(true); - } - if (temp > dim) { - dim = temp; - } - } - } - - var dim2 = 0; - for (var i=0; i<this._groupLabels.length; i++) { - var l = this._groupLabels[i]; - if (this.name == 'xaxis' || this.name == 'x2axis') { - temp = l.outerHeight(true); - } - else { - temp = l.outerWidth(true); - } - if (temp > dim2) { - dim2 = temp; - } - } - - if (lshow) { - w = this._label._elem.outerWidth(true); - h = this._label._elem.outerHeight(true); - } - if (this.name == 'xaxis') { - dim += dim2 + h; - this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'}); - } - else if (this.name == 'x2axis') { - dim += dim2 + h; - this._elem.css({'height':dim+'px', left:'0px', top:'0px'}); - } - else if (this.name == 'yaxis') { - dim += dim2 + w; - this._elem.css({'width':dim+'px', left:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - else { - dim += dim2 + w; - this._elem.css({'width':dim+'px', right:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - } - }; - - // called with scope of axis - $.jqplot.CategoryAxisRenderer.prototype.pack = function(pos, offsets) { - var ticks = this._ticks; - var max = this.max; - var min = this.min; - var offmax = offsets.max; - var offmin = offsets.min; - var lshow = (this._label == null) ? false : this._label.show; - var i; - - for (var p in pos) { - this._elem.css(p, pos[p]); - } - - this._offsets = offsets; - // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left. - var pixellength = offmax - offmin; - var unitlength = max - min; - - if (!this.reverse) { - // point to unit and unit to point conversions references to Plot DOM element top left corner. - - this.u2p = function(u){ - return (u - min) * pixellength / unitlength + offmin; - }; - - this.p2u = function(p){ - return (p - offmin) * unitlength / pixellength + min; - }; - - if (this.name == 'xaxis' || this.name == 'x2axis'){ - this.series_u2p = function(u){ - return (u - min) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - - else { - this.series_u2p = function(u){ - return (u - max) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + max; - }; - } - } - - else { - // point to unit and unit to point conversions references to Plot DOM element top left corner. - - this.u2p = function(u){ - return offmin + (max - u) * pixellength / unitlength; - }; - - this.p2u = function(p){ - return min + (p - offmin) * unitlength / pixellength; - }; - - if (this.name == 'xaxis' || this.name == 'x2axis'){ - this.series_u2p = function(u){ - return (max - u) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + max; - }; - } - - else { - this.series_u2p = function(u){ - return (min - u) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - - } - - - if (this.show) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - for (i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'xaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - if (temp * t.angle < 0) { - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - } - // position at start - else { - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - } - break; - case 'end': - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - case 'start': - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - break; - case 'middle': - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - default: - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - } - } - else { - shim = -t.getWidth()/2; - } - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('left', val); - t.pack(); - } - } - - var labeledge=['bottom', 0]; - if (lshow) { - var w = this._label._elem.outerWidth(true); - this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px'); - if (this.name == 'xaxis') { - this._label._elem.css('bottom', '0px'); - labeledge = ['bottom', this._label._elem.outerHeight(true)]; - } - else { - this._label._elem.css('top', '0px'); - labeledge = ['top', this._label._elem.outerHeight(true)]; - } - this._label.pack(); - } - - // draw the group labels - var step = parseInt(this._ticks.length/this.groups, 10); - for (i=0; i<this._groupLabels.length; i++) { - var mid = 0; - var count = 0; - for (var j=i*step; j<=(i+1)*step; j++) { - if (this._ticks[j]._elem && this._ticks[j].label != " ") { - var t = this._ticks[j]._elem; - var p = t.position(); - mid += p.left + t.outerWidth(true)/2; - count++; - } - } - mid = mid/count; - this._groupLabels[i].css({'left':(mid - this._groupLabels[i].outerWidth(true)/2)}); - this._groupLabels[i].css(labeledge[0], labeledge[1]); - } - } - else { - for (i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'yaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - case 'end': - if (temp * t.angle < 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'start': - if (t.angle > 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'middle': - // if (t.angle > 0) { - // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - // } - // else { - // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - // } - shim = -t.getHeight()/2; - break; - default: - shim = -t.getHeight()/2; - break; - } - } - else { - shim = -t.getHeight()/2; - } - - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('top', val); - t.pack(); - } - } - - var labeledge=['left', 0]; - if (lshow) { - var h = this._label._elem.outerHeight(true); - this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px'); - if (this.name == 'yaxis') { - this._label._elem.css('left', '0px'); - labeledge = ['left', this._label._elem.outerWidth(true)]; - } - else { - this._label._elem.css('right', '0px'); - labeledge = ['right', this._label._elem.outerWidth(true)]; - } - this._label.pack(); - } - - // draw the group labels, position top here, do left after label position. - var step = parseInt(this._ticks.length/this.groups, 10); - for (i=0; i<this._groupLabels.length; i++) { - var mid = 0; - var count = 0; - for (var j=i*step; j<=(i+1)*step; j++) { - if (this._ticks[j]._elem && this._ticks[j].label != " ") { - var t = this._ticks[j]._elem; - var p = t.position(); - mid += p.top + t.outerHeight()/2; - count++; - } - } - mid = mid/count; - this._groupLabels[i].css({'top':mid - this._groupLabels[i].outerHeight()/2}); - this._groupLabels[i].css(labeledge[0], labeledge[1]); - - } - } - } - }; - - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js deleted file mode 100644 index 7cff1591..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.CategoryAxisRenderer=function(b){a.jqplot.LinearAxisRenderer.call(this);this.sortMergedLabels=false};a.jqplot.CategoryAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.CategoryAxisRenderer.prototype.constructor=a.jqplot.CategoryAxisRenderer;a.jqplot.CategoryAxisRenderer.prototype.init=function(e){this.groups=1;this.groupLabels=[];this._groupLabels=[];this._grouped=false;this._barsPerGroup=null;this.reverse=false;a.extend(true,this,{tickOptions:{formatString:"%d"}},e);var b=this._dataBounds;for(var f=0;f<this._series.length;f++){var g=this._series[f];if(g.groups){this.groups=g.groups}var h=g.data;for(var c=0;c<h.length;c++){if(this.name=="xaxis"||this.name=="x2axis"){if(h[c][0]<b.min||b.min==null){b.min=h[c][0]}if(h[c][0]>b.max||b.max==null){b.max=h[c][0]}}else{if(h[c][1]<b.min||b.min==null){b.min=h[c][1]}if(h[c][1]>b.max||b.max==null){b.max=h[c][1]}}}}if(this.groupLabels.length){this.groups=this.groupLabels.length}};a.jqplot.CategoryAxisRenderer.prototype.createTicks=function(){var D=this._ticks;var z=this.ticks;var F=this.name;var C=this._dataBounds;var v,A;var q,w;var d,c;var b,x;if(z.length){if(this.groups>1&&!this._grouped){var r=z.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p){z.splice(x+e,0," ");e++}this._grouped=true}this.min=0.5;this.max=z.length+0.5;var m=this.max-this.min;this.numberTicks=2*z.length+1;for(x=0;x<z.length;x++){b=this.min+2*x*m/(this.numberTicks-1);var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b,this.name);this._ticks.push(h);var h=new this.tickRenderer(this.tickOptions);h.label=z[x];h.showMark=false;h.showGridline=false;h.setTick(b+0.5,this.name);this._ticks.push(h)}var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b+1,this.name);this._ticks.push(h)}else{if(F=="xaxis"||F=="x2axis"){v=this._plotDimensions.width}else{v=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.min!=null&&this.max!=null&&this.tickInterval!=null){if(parseInt((this.max-this.min)/this.tickInterval,10)!=(this.max-this.min)/this.tickInterval){this.tickInterval=null}}var y=[];var B=0;var q=0.5;var w,E;var f=false;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}if(a.inArray(E,y)==-1){f=true;B+=1;y.push(E)}}}if(f&&this.sortMergedLabels){y.sort(function(j,i){return j-i})}this.ticks=y;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}var n=a.inArray(E,y)+1;if(this.name=="xaxis"||this.name=="x2axis"){k.data[u][0]=n}else{k.data[u][1]=n}}}if(this.groups>1&&!this._grouped){var r=y.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p+1){y[x]=" "}this._grouped=true}w=B+0.5;if(this.numberTicks==null){this.numberTicks=2*B+1}var m=w-q;this.min=q;this.max=w;var o=0;var g=parseInt(3+v/10,10);var p=parseInt(B/g,10);if(this.tickInterval==null){this.tickInterval=m/(this.numberTicks-1)}for(var x=0;x<this.numberTicks;x++){b=this.min+x*this.tickInterval;var h=new this.tickRenderer(this.tickOptions);if(x/2==parseInt(x/2,10)){h.showLabel=false;h.showMark=true}else{if(p>0&&o<p){h.showLabel=false;o+=1}else{h.showLabel=true;o=0}h.label=h.formatter(h.formatString,y[(x-1)/2]);h.showMark=false;h.showGridline=false}h.setTick(b,this.name);this._ticks.push(h)}}};a.jqplot.CategoryAxisRenderer.prototype.draw=function(b,j){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;if(this._elem){this._elem.emptyForce()}this._elem=this._elem||a('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var g=this._label.draw(b,j);g.appendTo(this._elem)}var f=this._ticks;for(var e=0;e<f.length;e++){var d=f[e];if(d.showLabel&&(!d.isMinorTick||this.showMinorTicks)){var g=d.draw(b,j);g.appendTo(this._elem)}}this._groupLabels=[];for(var e=0;e<this.groupLabels.length;e++){var g=a('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');g.html(this.groupLabels[e]);this._groupLabels.push(g);g.appendTo(this._elem)}}return this._elem};a.jqplot.CategoryAxisRenderer.prototype.set=function(){var e=0;var m;var k=0;var f=0;var d=(this._label==null)?false:this._label.show;if(this.show){var n=this._ticks;for(var c=0;c<n.length;c++){var g=n[c];if(g.showLabel&&(!g.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){m=g._elem.outerHeight(true)}else{m=g._elem.outerWidth(true)}if(m>e){e=m}}}var j=0;for(var c=0;c<this._groupLabels.length;c++){var b=this._groupLabels[c];if(this.name=="xaxis"||this.name=="x2axis"){m=b.outerHeight(true)}else{m=b.outerWidth(true)}if(m>j){j=m}}if(d){k=this._label._elem.outerWidth(true);f=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){e+=j+k;this._elem.css({width:e+"px",left:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}else{e+=j+k;this._elem.css({width:e+"px",right:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}}}}};a.jqplot.CategoryAxisRenderer.prototype.pack=function(e,c){var C=this._ticks;var v=this.max;var s=this.min;var n=c.max;var l=c.min;var q=(this._label==null)?false:this._label.show;var x;for(var r in e){this._elem.css(r,e[r])}this._offsets=c;var g=n-l;var k=v-s;if(!this.reverse){this.u2p=function(h){return(h-s)*g/k+l};this.p2u=function(h){return(h-l)*k/g+s};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(h-s)*g/k};this.series_p2u=function(h){return h*k/g+s}}else{this.series_u2p=function(h){return(h-v)*g/k};this.series_p2u=function(h){return h*k/g+v}}}else{this.u2p=function(h){return l+(v-h)*g/k};this.p2u=function(h){return s+(h-l)*k/g};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(v-h)*g/k};this.series_p2u=function(h){return h*k/g+v}}else{this.series_u2p=function(h){return(s-h)*g/k};this.series_p2u=function(h){return h*k/g+s}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(x=0;x<C.length;x++){var o=C[x];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var A=(this.name=="xaxis")?1:-1;switch(o.labelPosition){case"auto":if(A*o.angle<0){b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2}else{b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2}break;case"end":b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;case"start":b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2;break;case"middle":b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;default:b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break}}else{b=-o.getWidth()/2}var D=this.u2p(o.value)+b+"px";o._elem.css("left",D);o.pack()}}var z=["bottom",0];if(q){var m=this._label._elem.outerWidth(true);this._label._elem.css("left",l+g/2-m/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px");z=["bottom",this._label._elem.outerHeight(true)]}else{this._label._elem.css("top","0px");z=["top",this._label._elem.outerHeight(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10);for(x=0;x<this._groupLabels.length;x++){var B=0;var f=0;for(var u=x*d;u<=(x+1)*d;u++){if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();B+=r.left+o.outerWidth(true)/2;f++}}B=B/f;this._groupLabels[x].css({left:(B-this._groupLabels[x].outerWidth(true)/2)});this._groupLabels[x].css(z[0],z[1])}}else{for(x=0;x<C.length;x++){var o=C[x];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var A=(this.name=="yaxis")?1:-1;switch(o.labelPosition){case"auto":case"end":if(A*o.angle<0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"start":if(o.angle>0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"middle":b=-o.getHeight()/2;break;default:b=-o.getHeight()/2;break}}else{b=-o.getHeight()/2}var D=this.u2p(o.value)+b+"px";o._elem.css("top",D);o.pack()}}var z=["left",0];if(q){var y=this._label._elem.outerHeight(true);this._label._elem.css("top",n-g/2-y/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px");z=["left",this._label._elem.outerWidth(true)]}else{this._label._elem.css("right","0px");z=["right",this._label._elem.outerWidth(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10);for(x=0;x<this._groupLabels.length;x++){var B=0;var f=0;for(var u=x*d;u<=(x+1)*d;u++){if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();B+=r.top+o.outerHeight()/2;f++}}B=B/f;this._groupLabels[x].css({top:B-this._groupLabels[x].outerHeight()/2});this._groupLabels[x].css(z[0],z[1])}}}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js deleted file mode 100644 index 0c579e00..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.ciParser - * Data Renderer function which converts a custom JSON data object into jqPlot data format. - * Set this as a callable on the jqplot dataRenderer plot option: - * - * > plot = $.jqplot('mychart', [data], { dataRenderer: $.jqplot.ciParser, ... }); - * - * Where data is an object in JSON format or a JSON encoded string conforming to the - * City Index API spec. - * - * Note that calling the renderer function is handled internally by jqPlot. The - * user does not have to call the function. The parameters described below will - * automatically be passed to the ciParser function. - * - * Parameters: - * data - JSON encoded string or object. - * plot - reference to jqPlot Plot object. - * - * Returns: - * data array in jqPlot format. - * - */ - $.jqplot.ciParser = function (data, plot) { - var ret = [], - line, - temp, - i, j, k, kk; - - if (typeof(data) == "string") { - data = $.jqplot.JSON.parse(data, handleStrings); - } - - else if (typeof(data) == "object") { - for (k in data) { - for (i=0; i<data[k].length; i++) { - for (kk in data[k][i]) { - data[k][i][kk] = handleStrings(kk, data[k][i][kk]); - } - } - } - } - - else { - return null; - } - - // function handleStrings - // Checks any JSON encoded strings to see if they are - // encoded dates. If so, pull out the timestamp. - // Expects dates to be represented by js timestamps. - - function handleStrings(key, value) { - var a; - if (value != null) { - if (value.toString().indexOf('Date') >= 0) { - //here we will try to extract the ticks from the Date string in the "value" fields of JSON returned data - a = /^\/Date\((-?[0-9]+)\)\/$/.exec(value); - if (a) { - return parseInt(a[1], 10); - } - } - return value; - } - } - - for (var prop in data) { - line = []; - temp = data[prop]; - switch (prop) { - case "PriceTicks": - for (i=0; i<temp.length; i++) { - line.push([temp[i]['TickDate'], temp[i]['Price']]); - } - break; - case "PriceBars": - for (i=0; i<temp.length; i++) { - line.push([temp[i]['BarDate'], temp[i]['Open'], temp[i]['High'], temp[i]['Low'], temp[i]['Close']]); - } - break; - } - ret.push(line); - } - return ret; - }; -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js deleted file mode 100644 index 7ca91780..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.ciParser=function(g,l){var m=[],o,n,h,f,e,c;if(typeof(g)=="string"){g=a.jqplot.JSON.parse(g,d)}else{if(typeof(g)=="object"){for(e in g){for(h=0;h<g[e].length;h++){for(c in g[e][h]){g[e][h][c]=d(c,g[e][h][c])}}}}else{return null}}function d(j,k){var i;if(k!=null){if(k.toString().indexOf("Date")>=0){i=/^\/Date\((-?[0-9]+)\)\/$/.exec(k);if(i){return parseInt(i[1],10)}}return k}}for(var b in g){o=[];n=g[b];switch(b){case"PriceTicks":for(h=0;h<n.length;h++){o.push([n[h]["TickDate"],n[h]["Price"]])}break;case"PriceBars":for(h=0;h<n.length;h++){o.push([n[h]["BarDate"],n[h]["Open"],n[h]["High"],n[h]["Low"],n[h]["Close"]])}break}m.push(o)}return m}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js deleted file mode 100644 index ab8b8868..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js +++ /dev/null @@ -1,1108 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - - /** - * Class: $.jqplot.Cursor - * Plugin class representing the cursor as displayed on the plot. - */ - $.jqplot.Cursor = function(options) { - // Group: Properties - // - // prop: style - // CSS spec for cursor style - this.style = 'crosshair'; - this.previousCursor = 'auto'; - // prop: show - // wether to show the cursor or not. - this.show = $.jqplot.config.enablePlugins; - // prop: showTooltip - // show a cursor position tooltip. Location of the tooltip - // will be controlled by followMouse and tooltipLocation. - this.showTooltip = true; - // prop: followMouse - // Tooltip follows the mouse, it is not at a fixed location. - // Tooltip will show on the grid at the location given by - // tooltipLocation, offset from the grid edge by tooltipOffset. - this.followMouse = false; - // prop: tooltipLocation - // Where to position tooltip. If followMouse is true, this is - // relative to the cursor, otherwise, it is relative to the grid. - // One of 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' - this.tooltipLocation = 'se'; - // prop: tooltipOffset - // Pixel offset of tooltip from the grid boudaries or cursor center. - this.tooltipOffset = 6; - // prop: showTooltipGridPosition - // show the grid pixel coordinates of the mouse. - this.showTooltipGridPosition = false; - // prop: showTooltipUnitPosition - // show the unit (data) coordinates of the mouse. - this.showTooltipUnitPosition = true; - // prop: showTooltipDataPosition - // Used with showVerticalLine to show intersecting data points in the tooltip. - this.showTooltipDataPosition = false; - // prop: tooltipFormatString - // sprintf format string for the tooltip. - // Uses Ash Searle's javascript sprintf implementation - // found here: http://hexmen.com/blog/2007/03/printf-sprintf/ - // See http://perldoc.perl.org/functions/sprintf.html for reference - // Note, if showTooltipDataPosition is true, the default tooltipFormatString - // will be set to the cursorLegendFormatString, not the default given here. - this.tooltipFormatString = '%.4P, %.4P'; - // prop: useAxesFormatters - // Use the x and y axes formatters to format the text in the tooltip. - this.useAxesFormatters = true; - // prop: tooltipAxisGroups - // Show position for the specified axes. - // This is an array like [['xaxis', 'yaxis'], ['xaxis', 'y2axis']] - // Default is to compute automatically for all visible axes. - this.tooltipAxisGroups = []; - // prop: zoom - // Enable plot zooming. - this.zoom = false; - // zoomProxy and zoomTarget properties are not directly set by user. - // They Will be set through call to zoomProxy method. - this.zoomProxy = false; - this.zoomTarget = false; - // prop: looseZoom - // Will expand zoom range to provide more rounded tick values. - // Works only with linear, log and date axes. - this.looseZoom = true; - // prop: clickReset - // Will reset plot zoom if single click on plot without drag. - this.clickReset = false; - // prop: dblClickReset - // Will reset plot zoom if double click on plot without drag. - this.dblClickReset = true; - // prop: showVerticalLine - // draw a vertical line across the plot which follows the cursor. - // When the line is near a data point, a special legend and/or tooltip can - // be updated with the data values. - this.showVerticalLine = false; - // prop: showHorizontalLine - // draw a horizontal line across the plot which follows the cursor. - this.showHorizontalLine = false; - // prop: constrainZoomTo - // 'none', 'x' or 'y' - this.constrainZoomTo = 'none'; - // // prop: autoscaleConstraint - // // when a constrained axis is specified, true will - // // auatoscale the adjacent axis. - // this.autoscaleConstraint = true; - this.shapeRenderer = new $.jqplot.ShapeRenderer(); - this._zoom = {start:[], end:[], started: false, zooming:false, isZoomed:false, axes:{start:{}, end:{}}, gridpos:{}, datapos:{}}; - this._tooltipElem; - this.zoomCanvas; - this.cursorCanvas; - // prop: intersectionThreshold - // pixel distance from data point or marker to consider cursor lines intersecting with point. - // If data point markers are not shown, this should be >= 1 or will often miss point intersections. - this.intersectionThreshold = 2; - // prop: showCursorLegend - // Replace the plot legend with an enhanced legend displaying intersection information. - this.showCursorLegend = false; - // prop: cursorLegendFormatString - // Format string used in the cursor legend. If showTooltipDataPosition is true, - // this will also be the default format string used by tooltipFormatString. - this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString; - // whether the cursor is over the grid or not. - this._oldHandlers = {onselectstart: null, ondrag: null, onmousedown: null}; - // prop: constrainOutsideZoom - // True to limit actual zoom area to edges of grid, even when zooming - // outside of plot area. That is, can't zoom out by mousing outside plot. - this.constrainOutsideZoom = true; - // prop: showTooltipOutsideZoom - // True will keep updating the tooltip when zooming of the grid. - this.showTooltipOutsideZoom = false; - // true if mouse is over grid, false if not. - this.onGrid = false; - $.extend(true, this, options); - }; - - $.jqplot.Cursor.cursorLegendFormatString = '%s x:%s, y:%s'; - - // called with scope of plot - $.jqplot.Cursor.init = function (target, data, opts){ - // add a cursor attribute to the plot - var options = opts || {}; - this.plugins.cursor = new $.jqplot.Cursor(options.cursor); - var c = this.plugins.cursor; - - if (c.show) { - $.jqplot.eventListenerHooks.push(['jqplotMouseEnter', handleMouseEnter]); - $.jqplot.eventListenerHooks.push(['jqplotMouseLeave', handleMouseLeave]); - $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMouseMove]); - - if (c.showCursorLegend) { - opts.legend = opts.legend || {}; - opts.legend.renderer = $.jqplot.CursorLegendRenderer; - opts.legend.formatString = this.plugins.cursor.cursorLegendFormatString; - opts.legend.show = true; - } - - if (c.zoom) { - $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleMouseDown]); - - if (c.clickReset) { - $.jqplot.eventListenerHooks.push(['jqplotClick', handleClick]); - } - - if (c.dblClickReset) { - $.jqplot.eventListenerHooks.push(['jqplotDblClick', handleDblClick]); - } - } - - this.resetZoom = function() { - var axes = this.axes; - if (!c.zoomProxy) { - for (var ax in axes) { - axes[ax].reset(); - axes[ax]._ticks = []; - // fake out tick creation algorithm to make sure original auto - // computed format string is used if _overrideFormatString is true - if (c._zoom.axes[ax] !== undefined) { - axes[ax]._autoFormatString = c._zoom.axes[ax].tickFormatString; - } - } - this.redraw(); - } - else { - var ctx = this.plugins.cursor.zoomCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx = null; - } - this.plugins.cursor._zoom.isZoomed = false; - this.target.trigger('jqplotResetZoom', [this, this.plugins.cursor]); - }; - - - if (c.showTooltipDataPosition) { - c.showTooltipUnitPosition = false; - c.showTooltipGridPosition = false; - if (options.cursor.tooltipFormatString == undefined) { - c.tooltipFormatString = $.jqplot.Cursor.cursorLegendFormatString; - } - } - } - }; - - // called with context of plot - $.jqplot.Cursor.postDraw = function() { - var c = this.plugins.cursor; - - // Memory Leaks patch - if (c.zoomCanvas) { - c.zoomCanvas.resetCanvas(); - c.zoomCanvas = null; - } - - if (c.cursorCanvas) { - c.cursorCanvas.resetCanvas(); - c.cursorCanvas = null; - } - - if (c._tooltipElem) { - c._tooltipElem.emptyForce(); - c._tooltipElem = null; - } - - - if (c.zoom) { - c.zoomCanvas = new $.jqplot.GenericCanvas(); - this.eventCanvas._elem.before(c.zoomCanvas.createElement(this._gridPadding, 'jqplot-zoom-canvas', this._plotDimensions, this)); - c.zoomCanvas.setContext(); - } - - var elem = document.createElement('div'); - c._tooltipElem = $(elem); - elem = null; - c._tooltipElem.addClass('jqplot-cursor-tooltip'); - c._tooltipElem.css({position:'absolute', display:'none'}); - - - if (c.zoomCanvas) { - c.zoomCanvas._elem.before(c._tooltipElem); - } - - else { - this.eventCanvas._elem.before(c._tooltipElem); - } - - if (c.showVerticalLine || c.showHorizontalLine) { - c.cursorCanvas = new $.jqplot.GenericCanvas(); - this.eventCanvas._elem.before(c.cursorCanvas.createElement(this._gridPadding, 'jqplot-cursor-canvas', this._plotDimensions, this)); - c.cursorCanvas.setContext(); - } - - // if we are showing the positions in unit coordinates, and no axes groups - // were specified, create a default set. - if (c.showTooltipUnitPosition){ - if (c.tooltipAxisGroups.length === 0) { - var series = this.series; - var s; - var temp = []; - for (var i=0; i<series.length; i++) { - s = series[i]; - var ax = s.xaxis+','+s.yaxis; - if ($.inArray(ax, temp) == -1) { - temp.push(ax); - } - } - for (var i=0; i<temp.length; i++) { - c.tooltipAxisGroups.push(temp[i].split(',')); - } - } - } - }; - - // Group: methods - // - // method: $.jqplot.Cursor.zoomProxy - // links targetPlot to controllerPlot so that plot zooming of - // targetPlot will be controlled by zooming on the controllerPlot. - // controllerPlot will not actually zoom, but acts as an - // overview plot. Note, the zoom options must be set to true for - // zoomProxy to work. - $.jqplot.Cursor.zoomProxy = function(targetPlot, controllerPlot) { - var tc = targetPlot.plugins.cursor; - var cc = controllerPlot.plugins.cursor; - tc.zoomTarget = true; - tc.zoom = true; - tc.style = 'auto'; - tc.dblClickReset = false; - cc.zoom = true; - cc.zoomProxy = true; - - controllerPlot.target.bind('jqplotZoom', plotZoom); - controllerPlot.target.bind('jqplotResetZoom', plotReset); - - function plotZoom(ev, gridpos, datapos, plot, cursor) { - tc.doZoom(gridpos, datapos, targetPlot, cursor); - } - - function plotReset(ev, plot, cursor) { - targetPlot.resetZoom(); - } - }; - - $.jqplot.Cursor.prototype.resetZoom = function(plot, cursor) { - var axes = plot.axes; - var cax = cursor._zoom.axes; - if (!plot.plugins.cursor.zoomProxy && cursor._zoom.isZoomed) { - for (var ax in axes) { - // axes[ax]._ticks = []; - // axes[ax].min = cax[ax].min; - // axes[ax].max = cax[ax].max; - // axes[ax].numberTicks = cax[ax].numberTicks; - // axes[ax].tickInterval = cax[ax].tickInterval; - // // for date axes - // axes[ax].daTickInterval = cax[ax].daTickInterval; - axes[ax].reset(); - axes[ax]._ticks = []; - // fake out tick creation algorithm to make sure original auto - // computed format string is used if _overrideFormatString is true - axes[ax]._autoFormatString = cax[ax].tickFormatString; - } - plot.redraw(); - cursor._zoom.isZoomed = false; - } - else { - var ctx = cursor.zoomCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx = null; - } - plot.target.trigger('jqplotResetZoom', [plot, cursor]); - }; - - $.jqplot.Cursor.resetZoom = function(plot) { - plot.resetZoom(); - }; - - $.jqplot.Cursor.prototype.doZoom = function (gridpos, datapos, plot, cursor) { - var c = cursor; - var axes = plot.axes; - var zaxes = c._zoom.axes; - var start = zaxes.start; - var end = zaxes.end; - var min, max, dp, span, - newmin, newmax, curax, _numberTicks, ret; - var ctx = plot.plugins.cursor.zoomCanvas._ctx; - // don't zoom if zoom area is too small (in pixels) - if ((c.constrainZoomTo == 'none' && Math.abs(gridpos.x - c._zoom.start[0]) > 6 && Math.abs(gridpos.y - c._zoom.start[1]) > 6) || (c.constrainZoomTo == 'x' && Math.abs(gridpos.x - c._zoom.start[0]) > 6) || (c.constrainZoomTo == 'y' && Math.abs(gridpos.y - c._zoom.start[1]) > 6)) { - if (!plot.plugins.cursor.zoomProxy) { - for (var ax in datapos) { - // make a copy of the original axes to revert back. - if (c._zoom.axes[ax] == undefined) { - c._zoom.axes[ax] = {}; - c._zoom.axes[ax].numberTicks = axes[ax].numberTicks; - c._zoom.axes[ax].tickInterval = axes[ax].tickInterval; - // for date axes... - c._zoom.axes[ax].daTickInterval = axes[ax].daTickInterval; - c._zoom.axes[ax].min = axes[ax].min; - c._zoom.axes[ax].max = axes[ax].max; - c._zoom.axes[ax].tickFormatString = (axes[ax].tickOptions != null) ? axes[ax].tickOptions.formatString : ''; - } - - - if ((c.constrainZoomTo == 'none') || (c.constrainZoomTo == 'x' && ax.charAt(0) == 'x') || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'y')) { - dp = datapos[ax]; - if (dp != null) { - if (dp > start[ax]) { - newmin = start[ax]; - newmax = dp; - } - else { - span = start[ax] - dp; - newmin = dp; - newmax = start[ax]; - } - - curax = axes[ax]; - - _numberTicks = null; - - // if aligning this axis, use number of ticks from previous axis. - // Do I need to reset somehow if alignTicks is changed and then graph is replotted?? - if (curax.alignTicks) { - if (curax.name === 'x2axis' && plot.axes.xaxis.show) { - _numberTicks = plot.axes.xaxis.numberTicks; - } - else if (curax.name.charAt(0) === 'y' && curax.name !== 'yaxis' && curax.name !== 'yMidAxis' && plot.axes.yaxis.show) { - _numberTicks = plot.axes.yaxis.numberTicks; - } - } - - if (this.looseZoom && (axes[ax].renderer.constructor === $.jqplot.LinearAxisRenderer || axes[ax].renderer.constructor === $.jqplot.LogAxisRenderer )) { //} || axes[ax].renderer.constructor === $.jqplot.DateAxisRenderer)) { - - ret = $.jqplot.LinearTickGenerator(newmin, newmax, curax._scalefact, _numberTicks); - - // if new minimum is less than "true" minimum of axis display, adjust it - if (axes[ax].tickInset && ret[0] < axes[ax].min + axes[ax].tickInset * axes[ax].tickInterval) { - ret[0] += ret[4]; - ret[2] -= 1; - } - - // if new maximum is greater than "true" max of axis display, adjust it - if (axes[ax].tickInset && ret[1] > axes[ax].max - axes[ax].tickInset * axes[ax].tickInterval) { - ret[1] -= ret[4]; - ret[2] -= 1; - } - - // for log axes, don't fall below current minimum, this will look bad and can't have 0 in range anyway. - if (axes[ax].renderer.constructor === $.jqplot.LogAxisRenderer && ret[0] < axes[ax].min) { - // remove a tick and shift min up - ret[0] += ret[4]; - ret[2] -= 1; - } - - axes[ax].min = ret[0]; - axes[ax].max = ret[1]; - axes[ax]._autoFormatString = ret[3]; - axes[ax].numberTicks = ret[2]; - axes[ax].tickInterval = ret[4]; - // for date axes... - axes[ax].daTickInterval = [ret[4]/1000, 'seconds']; - } - else { - axes[ax].min = newmin; - axes[ax].max = newmax; - axes[ax].tickInterval = null; - axes[ax].numberTicks = null; - // for date axes... - axes[ax].daTickInterval = null; - } - - axes[ax]._ticks = []; - } - } - - // if ((c.constrainZoomTo == 'x' && ax.charAt(0) == 'y' && c.autoscaleConstraint) || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'x' && c.autoscaleConstraint)) { - // dp = datapos[ax]; - // if (dp != null) { - // axes[ax].max == null; - // axes[ax].min = null; - // } - // } - } - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - plot.redraw(); - c._zoom.isZoomed = true; - ctx = null; - } - plot.target.trigger('jqplotZoom', [gridpos, datapos, plot, cursor]); - } - }; - - $.jqplot.preInitHooks.push($.jqplot.Cursor.init); - $.jqplot.postDrawHooks.push($.jqplot.Cursor.postDraw); - - function updateTooltip(gridpos, datapos, plot) { - var c = plot.plugins.cursor; - var s = ''; - var addbr = false; - if (c.showTooltipGridPosition) { - s = gridpos.x+', '+gridpos.y; - addbr = true; - } - if (c.showTooltipUnitPosition) { - var g; - for (var i=0; i<c.tooltipAxisGroups.length; i++) { - g = c.tooltipAxisGroups[i]; - if (addbr) { - s += '<br />'; - } - if (c.useAxesFormatters) { - for (var j=0; j<g.length; j++) { - if (j) { - s += ', '; - } - var af = plot.axes[g[j]]._ticks[0].formatter; - var afstr = plot.axes[g[j]]._ticks[0].formatString; - s += af(afstr, datapos[g[j]]); - } - } - else { - s += $.jqplot.sprintf(c.tooltipFormatString, datapos[g[0]], datapos[g[1]]); - } - addbr = true; - } - } - - if (c.showTooltipDataPosition) { - var series = plot.series; - var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y); - var addbr = false; - - for (var i = 0; i< series.length; i++) { - if (series[i].show) { - var idx = series[i].index; - var label = series[i].label.toString(); - var cellid = $.inArray(idx, ret.indices); - var sx = undefined; - var sy = undefined; - if (cellid != -1) { - var data = ret.data[cellid].data; - if (c.useAxesFormatters) { - var xf = series[i]._xaxis._ticks[0].formatter; - var yf = series[i]._yaxis._ticks[0].formatter; - var xfstr = series[i]._xaxis._ticks[0].formatString; - var yfstr = series[i]._yaxis._ticks[0].formatString; - sx = xf(xfstr, data[0]); - sy = yf(yfstr, data[1]); - } - else { - sx = data[0]; - sy = data[1]; - } - if (addbr) { - s += '<br />'; - } - s += $.jqplot.sprintf(c.tooltipFormatString, label, sx, sy); - addbr = true; - } - } - } - - } - c._tooltipElem.html(s); - } - - function moveLine(gridpos, plot) { - var c = plot.plugins.cursor; - var ctx = c.cursorCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - if (c.showVerticalLine) { - c.shapeRenderer.draw(ctx, [[gridpos.x, 0], [gridpos.x, ctx.canvas.height]]); - } - if (c.showHorizontalLine) { - c.shapeRenderer.draw(ctx, [[0, gridpos.y], [ctx.canvas.width, gridpos.y]]); - } - var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y); - if (c.showCursorLegend) { - var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label'); - for (var i=0; i<cells.length; i++) { - var idx = $(cells[i]).data('seriesIndex'); - var series = plot.series[idx]; - var label = series.label.toString(); - var cellid = $.inArray(idx, ret.indices); - var sx = undefined; - var sy = undefined; - if (cellid != -1) { - var data = ret.data[cellid].data; - if (c.useAxesFormatters) { - var xf = series._xaxis._ticks[0].formatter; - var yf = series._yaxis._ticks[0].formatter; - var xfstr = series._xaxis._ticks[0].formatString; - var yfstr = series._yaxis._ticks[0].formatString; - sx = xf(xfstr, data[0]); - sy = yf(yfstr, data[1]); - } - else { - sx = data[0]; - sy = data[1]; - } - } - if (plot.legend.escapeHtml) { - $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy)); - } - else { - $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy)); - } - } - } - ctx = null; - } - - function getIntersectingPoints(plot, x, y) { - var ret = {indices:[], data:[]}; - var s, i, d0, d, j, r, p; - var threshold; - var c = plot.plugins.cursor; - for (var i=0; i<plot.series.length; i++) { - s = plot.series[i]; - r = s.renderer; - if (s.show) { - threshold = c.intersectionThreshold; - if (s.showMarker) { - threshold += s.markerRenderer.size/2; - } - for (var j=0; j<s.gridData.length; j++) { - p = s.gridData[j]; - // check vertical line - if (c.showVerticalLine) { - if (Math.abs(x-p[0]) <= threshold) { - ret.indices.push(i); - ret.data.push({seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}); - } - } - } - } - } - return ret; - } - - function moveTooltip(gridpos, plot) { - var c = plot.plugins.cursor; - var elem = c._tooltipElem; - switch (c.tooltipLocation) { - case 'nw': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true); - break; - case 'n': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2; - var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true); - break; - case 'ne': - var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true); - break; - case 'e': - var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - case 'se': - var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset; - break; - case 's': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2; - var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset; - break; - case 'sw': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset; - break; - case 'w': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - default: - var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset; - break; - } - - elem.css('left', x); - elem.css('top', y); - elem = null; - } - - function positionTooltip(plot) { - // fake a grid for positioning - var grid = plot._gridPadding; - var c = plot.plugins.cursor; - var elem = c._tooltipElem; - switch (c.tooltipLocation) { - case 'nw': - var a = grid.left + c.tooltipOffset; - var b = grid.top + c.tooltipOffset; - elem.css('left', a); - elem.css('top', b); - break; - case 'n': - var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2; - var b = grid.top + c.tooltipOffset; - elem.css('left', a); - elem.css('top', b); - break; - case 'ne': - var a = grid.right + c.tooltipOffset; - var b = grid.top + c.tooltipOffset; - elem.css({right:a, top:b}); - break; - case 'e': - var a = grid.right + c.tooltipOffset; - var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2; - elem.css({right:a, top:b}); - break; - case 'se': - var a = grid.right + c.tooltipOffset; - var b = grid.bottom + c.tooltipOffset; - elem.css({right:a, bottom:b}); - break; - case 's': - var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2; - var b = grid.bottom + c.tooltipOffset; - elem.css({left:a, bottom:b}); - break; - case 'sw': - var a = grid.left + c.tooltipOffset; - var b = grid.bottom + c.tooltipOffset; - elem.css({left:a, bottom:b}); - break; - case 'w': - var a = grid.left + c.tooltipOffset; - var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2; - elem.css({left:a, top:b}); - break; - default: // same as 'se' - var a = grid.right - c.tooltipOffset; - var b = grid.bottom + c.tooltipOffset; - elem.css({right:a, bottom:b}); - break; - } - elem = null; - } - - function handleClick (ev, gridpos, datapos, neighbor, plot) { - ev.preventDefault(); - ev.stopImmediatePropagation(); - var c = plot.plugins.cursor; - if (c.clickReset) { - c.resetZoom(plot, c); - } - var sel = window.getSelection; - if (document.selection && document.selection.empty) - { - document.selection.empty(); - } - else if (sel && !sel().isCollapsed) { - sel().collapse(); - } - return false; - } - - function handleDblClick (ev, gridpos, datapos, neighbor, plot) { - ev.preventDefault(); - ev.stopImmediatePropagation(); - var c = plot.plugins.cursor; - if (c.dblClickReset) { - c.resetZoom(plot, c); - } - var sel = window.getSelection; - if (document.selection && document.selection.empty) - { - document.selection.empty(); - } - else if (sel && !sel().isCollapsed) { - sel().collapse(); - } - return false; - } - - function handleMouseLeave(ev, gridpos, datapos, neighbor, plot) { - var c = plot.plugins.cursor; - c.onGrid = false; - if (c.show) { - $(ev.target).css('cursor', c.previousCursor); - if (c.showTooltip && !(c._zoom.zooming && c.showTooltipOutsideZoom && !c.constrainOutsideZoom)) { - c._tooltipElem.empty(); - c._tooltipElem.hide(); - } - if (c.zoom) { - c._zoom.gridpos = gridpos; - c._zoom.datapos = datapos; - } - if (c.showVerticalLine || c.showHorizontalLine) { - var ctx = c.cursorCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx = null; - } - if (c.showCursorLegend) { - var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label'); - for (var i=0; i<cells.length; i++) { - var idx = $(cells[i]).data('seriesIndex'); - var series = plot.series[idx]; - var label = series.label.toString(); - if (plot.legend.escapeHtml) { - $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined)); - } - else { - $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined)); - } - - } - } - } - } - - function handleMouseEnter(ev, gridpos, datapos, neighbor, plot) { - var c = plot.plugins.cursor; - c.onGrid = true; - if (c.show) { - c.previousCursor = ev.target.style.cursor; - ev.target.style.cursor = c.style; - if (c.showTooltip) { - updateTooltip(gridpos, datapos, plot); - if (c.followMouse) { - moveTooltip(gridpos, plot); - } - else { - positionTooltip(plot); - } - c._tooltipElem.show(); - } - if (c.showVerticalLine || c.showHorizontalLine) { - moveLine(gridpos, plot); - } - } - - } - - function handleMouseMove(ev, gridpos, datapos, neighbor, plot) { - var c = plot.plugins.cursor; - if (c.show) { - if (c.showTooltip) { - updateTooltip(gridpos, datapos, plot); - if (c.followMouse) { - moveTooltip(gridpos, plot); - } - } - if (c.showVerticalLine || c.showHorizontalLine) { - moveLine(gridpos, plot); - } - } - } - - function getEventPosition(ev) { - var plot = ev.data.plot; - var go = plot.eventCanvas._elem.offset(); - var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top}; - ////// - // TO DO: handle yMidAxis - ////// - var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null, yMidAxis:null}; - var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis']; - var ax = plot.axes; - var n, axis; - for (n=11; n>0; n--) { - axis = an[n-1]; - if (ax[axis].show) { - dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]); - } - } - - return {offsets:go, gridPos:gridPos, dataPos:dataPos}; - } - - function handleZoomMove(ev) { - var plot = ev.data.plot; - var c = plot.plugins.cursor; - // don't do anything if not on grid. - if (c.show && c.zoom && c._zoom.started && !c.zoomTarget) { - ev.preventDefault(); - var ctx = c.zoomCanvas._ctx; - var positions = getEventPosition(ev); - var gridpos = positions.gridPos; - var datapos = positions.dataPos; - c._zoom.gridpos = gridpos; - c._zoom.datapos = datapos; - c._zoom.zooming = true; - var xpos = gridpos.x; - var ypos = gridpos.y; - var height = ctx.canvas.height; - var width = ctx.canvas.width; - if (c.showTooltip && !c.onGrid && c.showTooltipOutsideZoom) { - updateTooltip(gridpos, datapos, plot); - if (c.followMouse) { - moveTooltip(gridpos, plot); - } - } - if (c.constrainZoomTo == 'x') { - c._zoom.end = [xpos, height]; - } - else if (c.constrainZoomTo == 'y') { - c._zoom.end = [width, ypos]; - } - else { - c._zoom.end = [xpos, ypos]; - } - var sel = window.getSelection; - if (document.selection && document.selection.empty) - { - document.selection.empty(); - } - else if (sel && !sel().isCollapsed) { - sel().collapse(); - } - drawZoomBox.call(c); - ctx = null; - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - var c = plot.plugins.cursor; - if(plot.plugins.mobile){ - $(document).one('vmouseup.jqplot_cursor', {plot:plot}, handleMouseUp); - } else { - $(document).one('mouseup.jqplot_cursor', {plot:plot}, handleMouseUp); - } - var axes = plot.axes; - if (document.onselectstart != undefined) { - c._oldHandlers.onselectstart = document.onselectstart; - document.onselectstart = function () { return false; }; - } - if (document.ondrag != undefined) { - c._oldHandlers.ondrag = document.ondrag; - document.ondrag = function () { return false; }; - } - if (document.onmousedown != undefined) { - c._oldHandlers.onmousedown = document.onmousedown; - document.onmousedown = function () { return false; }; - } - if (c.zoom) { - if (!c.zoomProxy) { - var ctx = c.zoomCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx = null; - } - if (c.constrainZoomTo == 'x') { - c._zoom.start = [gridpos.x, 0]; - } - else if (c.constrainZoomTo == 'y') { - c._zoom.start = [0, gridpos.y]; - } - else { - c._zoom.start = [gridpos.x, gridpos.y]; - } - c._zoom.started = true; - for (var ax in datapos) { - // get zoom starting position. - c._zoom.axes.start[ax] = datapos[ax]; - } - if(plot.plugins.mobile){ - $(document).bind('vmousemove.jqplotCursor', {plot:plot}, handleZoomMove); - } else { - $(document).bind('mousemove.jqplotCursor', {plot:plot}, handleZoomMove); - } - - } - } - - function handleMouseUp(ev) { - var plot = ev.data.plot; - var c = plot.plugins.cursor; - if (c.zoom && c._zoom.zooming && !c.zoomTarget) { - var xpos = c._zoom.gridpos.x; - var ypos = c._zoom.gridpos.y; - var datapos = c._zoom.datapos; - var height = c.zoomCanvas._ctx.canvas.height; - var width = c.zoomCanvas._ctx.canvas.width; - var axes = plot.axes; - - if (c.constrainOutsideZoom && !c.onGrid) { - if (xpos < 0) { xpos = 0; } - else if (xpos > width) { xpos = width; } - if (ypos < 0) { ypos = 0; } - else if (ypos > height) { ypos = height; } - - for (var axis in datapos) { - if (datapos[axis]) { - if (axis.charAt(0) == 'x') { - datapos[axis] = axes[axis].series_p2u(xpos); - } - else { - datapos[axis] = axes[axis].series_p2u(ypos); - } - } - } - } - - if (c.constrainZoomTo == 'x') { - ypos = height; - } - else if (c.constrainZoomTo == 'y') { - xpos = width; - } - c._zoom.end = [xpos, ypos]; - c._zoom.gridpos = {x:xpos, y:ypos}; - - c.doZoom(c._zoom.gridpos, datapos, plot, c); - } - c._zoom.started = false; - c._zoom.zooming = false; - - $(document).unbind('mousemove.jqplotCursor', handleZoomMove); - - if (document.onselectstart != undefined && c._oldHandlers.onselectstart != null){ - document.onselectstart = c._oldHandlers.onselectstart; - c._oldHandlers.onselectstart = null; - } - if (document.ondrag != undefined && c._oldHandlers.ondrag != null){ - document.ondrag = c._oldHandlers.ondrag; - c._oldHandlers.ondrag = null; - } - if (document.onmousedown != undefined && c._oldHandlers.onmousedown != null){ - document.onmousedown = c._oldHandlers.onmousedown; - c._oldHandlers.onmousedown = null; - } - - } - - function drawZoomBox() { - var start = this._zoom.start; - var end = this._zoom.end; - var ctx = this.zoomCanvas._ctx; - var l, t, h, w; - if (end[0] > start[0]) { - l = start[0]; - w = end[0] - start[0]; - } - else { - l = end[0]; - w = start[0] - end[0]; - } - if (end[1] > start[1]) { - t = start[1]; - h = end[1] - start[1]; - } - else { - t = end[1]; - h = start[1] - end[1]; - } - ctx.fillStyle = 'rgba(0,0,0,0.2)'; - ctx.strokeStyle = '#999999'; - ctx.lineWidth = 1.0; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx.fillRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx.clearRect(l, t, w, h); - // IE won't show transparent fill rect, so stroke a rect also. - ctx.strokeRect(l,t,w,h); - ctx = null; - } - - $.jqplot.CursorLegendRenderer = function(options) { - $.jqplot.TableLegendRenderer.call(this, options); - this.formatString = '%s'; - }; - - $.jqplot.CursorLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.CursorLegendRenderer.prototype.constructor = $.jqplot.CursorLegendRenderer; - - // called in context of a Legend - $.jqplot.CursorLegendRenderer.prototype.draw = function() { - if (this._elem) { - this._elem.emptyForce(); - this._elem = null; - } - if (this.show) { - var series = this._series, s; - // make a table. one line label per row. - var elem = document.createElement('div'); - this._elem = $(elem); - elem = null; - this._elem.addClass('jqplot-legend jqplot-cursor-legend'); - this._elem.css('position', 'absolute'); - - var pad = false; - for (var i = 0; i< series.length; i++) { - s = series[i]; - if (s.show && s.showLabel) { - var lt = $.jqplot.sprintf(this.formatString, s.label.toString()); - if (lt) { - var color = s.color; - if (s._stack && !s.fill) { - color = ''; - } - addrow.call(this, lt, color, pad, i); - pad = true; - } - // let plugins add more rows to legend. Used by trend line plugin. - for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) { - var item = $.jqplot.addLegendRowHooks[j].call(this, s); - if (item) { - addrow.call(this, item.label, item.color, pad); - pad = true; - } - } - } - } - series = s = null; - delete series; - delete s; - } - - function addrow(label, color, pad, idx) { - var rs = (pad) ? this.rowSpacing : '0'; - var tr = $('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem); - tr.data('seriesIndex', idx); - $('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+rs+';">'+ - '<div style="border:1px solid #cccccc;padding:0.2em;">'+ - '<div class="jqplot-cursor-legend-swatch" style="background-color:'+color+';"></div>'+ - '</div></td>').appendTo(tr); - var td = $('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+rs+';"></td>'); - td.appendTo(tr); - td.data('seriesIndex', idx); - if (this.escapeHtml) { - td.text(label); - } - else { - td.html(label); - } - tr = null; - td = null; - } - return this._elem; - }; - -})(jQuery); diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js deleted file mode 100644 index b782ece4..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(j){j.jqplot.Cursor=function(q){this.style="crosshair";this.previousCursor="auto";this.show=j.jqplot.config.enablePlugins;this.showTooltip=true;this.followMouse=false;this.tooltipLocation="se";this.tooltipOffset=6;this.showTooltipGridPosition=false;this.showTooltipUnitPosition=true;this.showTooltipDataPosition=false;this.tooltipFormatString="%.4P, %.4P";this.useAxesFormatters=true;this.tooltipAxisGroups=[];this.zoom=false;this.zoomProxy=false;this.zoomTarget=false;this.looseZoom=true;this.clickReset=false;this.dblClickReset=true;this.showVerticalLine=false;this.showHorizontalLine=false;this.constrainZoomTo="none";this.shapeRenderer=new j.jqplot.ShapeRenderer();this._zoom={start:[],end:[],started:false,zooming:false,isZoomed:false,axes:{start:{},end:{}},gridpos:{},datapos:{}};this._tooltipElem;this.zoomCanvas;this.cursorCanvas;this.intersectionThreshold=2;this.showCursorLegend=false;this.cursorLegendFormatString=j.jqplot.Cursor.cursorLegendFormatString;this._oldHandlers={onselectstart:null,ondrag:null,onmousedown:null};this.constrainOutsideZoom=true;this.showTooltipOutsideZoom=false;this.onGrid=false;j.extend(true,this,q)};j.jqplot.Cursor.cursorLegendFormatString="%s x:%s, y:%s";j.jqplot.Cursor.init=function(t,s,r){var q=r||{};this.plugins.cursor=new j.jqplot.Cursor(q.cursor);var u=this.plugins.cursor;if(u.show){j.jqplot.eventListenerHooks.push(["jqplotMouseEnter",b]);j.jqplot.eventListenerHooks.push(["jqplotMouseLeave",f]);j.jqplot.eventListenerHooks.push(["jqplotMouseMove",i]);if(u.showCursorLegend){r.legend=r.legend||{};r.legend.renderer=j.jqplot.CursorLegendRenderer;r.legend.formatString=this.plugins.cursor.cursorLegendFormatString;r.legend.show=true}if(u.zoom){j.jqplot.eventListenerHooks.push(["jqplotMouseDown",a]);if(u.clickReset){j.jqplot.eventListenerHooks.push(["jqplotClick",k])}if(u.dblClickReset){j.jqplot.eventListenerHooks.push(["jqplotDblClick",c])}}this.resetZoom=function(){var x=this.axes;if(!u.zoomProxy){for(var w in x){x[w].reset();x[w]._ticks=[];if(u._zoom.axes[w]!==undefined){x[w]._autoFormatString=u._zoom.axes[w].tickFormatString}}this.redraw()}else{var v=this.plugins.cursor.zoomCanvas._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);v=null}this.plugins.cursor._zoom.isZoomed=false;this.target.trigger("jqplotResetZoom",[this,this.plugins.cursor])};if(u.showTooltipDataPosition){u.showTooltipUnitPosition=false;u.showTooltipGridPosition=false;if(q.cursor.tooltipFormatString==undefined){u.tooltipFormatString=j.jqplot.Cursor.cursorLegendFormatString}}}};j.jqplot.Cursor.postDraw=function(){var x=this.plugins.cursor;if(x.zoomCanvas){x.zoomCanvas.resetCanvas();x.zoomCanvas=null}if(x.cursorCanvas){x.cursorCanvas.resetCanvas();x.cursorCanvas=null}if(x._tooltipElem){x._tooltipElem.emptyForce();x._tooltipElem=null}if(x.zoom){x.zoomCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.zoomCanvas.createElement(this._gridPadding,"jqplot-zoom-canvas",this._plotDimensions,this));x.zoomCanvas.setContext()}var v=document.createElement("div");x._tooltipElem=j(v);v=null;x._tooltipElem.addClass("jqplot-cursor-tooltip");x._tooltipElem.css({position:"absolute",display:"none"});if(x.zoomCanvas){x.zoomCanvas._elem.before(x._tooltipElem)}else{this.eventCanvas._elem.before(x._tooltipElem)}if(x.showVerticalLine||x.showHorizontalLine){x.cursorCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.cursorCanvas.createElement(this._gridPadding,"jqplot-cursor-canvas",this._plotDimensions,this));x.cursorCanvas.setContext()}if(x.showTooltipUnitPosition){if(x.tooltipAxisGroups.length===0){var t=this.series;var u;var q=[];for(var r=0;r<t.length;r++){u=t[r];var w=u.xaxis+","+u.yaxis;if(j.inArray(w,q)==-1){q.push(w)}}for(var r=0;r<q.length;r++){x.tooltipAxisGroups.push(q[r].split(","))}}}};j.jqplot.Cursor.zoomProxy=function(v,r){var q=v.plugins.cursor;var u=r.plugins.cursor;q.zoomTarget=true;q.zoom=true;q.style="auto";q.dblClickReset=false;u.zoom=true;u.zoomProxy=true;r.target.bind("jqplotZoom",t);r.target.bind("jqplotResetZoom",s);function t(x,w,z,y,A){q.doZoom(w,z,v,A)}function s(w,x,y){v.resetZoom()}};j.jqplot.Cursor.prototype.resetZoom=function(u,v){var t=u.axes;var s=v._zoom.axes;if(!u.plugins.cursor.zoomProxy&&v._zoom.isZoomed){for(var r in t){t[r].reset();t[r]._ticks=[];t[r]._autoFormatString=s[r].tickFormatString}u.redraw();v._zoom.isZoomed=false}else{var q=v.zoomCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);q=null}u.target.trigger("jqplotResetZoom",[u,v])};j.jqplot.Cursor.resetZoom=function(q){q.resetZoom()};j.jqplot.Cursor.prototype.doZoom=function(G,t,C,u){var I=u;var F=C.axes;var r=I._zoom.axes;var w=r.start;var s=r.end;var B,E,z,D,v,x,q,H,J;var A=C.plugins.cursor.zoomCanvas._ctx;if((I.constrainZoomTo=="none"&&Math.abs(G.x-I._zoom.start[0])>6&&Math.abs(G.y-I._zoom.start[1])>6)||(I.constrainZoomTo=="x"&&Math.abs(G.x-I._zoom.start[0])>6)||(I.constrainZoomTo=="y"&&Math.abs(G.y-I._zoom.start[1])>6)){if(!C.plugins.cursor.zoomProxy){for(var y in t){if(I._zoom.axes[y]==undefined){I._zoom.axes[y]={};I._zoom.axes[y].numberTicks=F[y].numberTicks;I._zoom.axes[y].tickInterval=F[y].tickInterval;I._zoom.axes[y].daTickInterval=F[y].daTickInterval;I._zoom.axes[y].min=F[y].min;I._zoom.axes[y].max=F[y].max;I._zoom.axes[y].tickFormatString=(F[y].tickOptions!=null)?F[y].tickOptions.formatString:""}if((I.constrainZoomTo=="none")||(I.constrainZoomTo=="x"&&y.charAt(0)=="x")||(I.constrainZoomTo=="y"&&y.charAt(0)=="y")){z=t[y];if(z!=null){if(z>w[y]){v=w[y];x=z}else{D=w[y]-z;v=z;x=w[y]}q=F[y];H=null;if(q.alignTicks){if(q.name==="x2axis"&&C.axes.xaxis.show){H=C.axes.xaxis.numberTicks}else{if(q.name.charAt(0)==="y"&&q.name!=="yaxis"&&q.name!=="yMidAxis"&&C.axes.yaxis.show){H=C.axes.yaxis.numberTicks}}}if(this.looseZoom&&(F[y].renderer.constructor===j.jqplot.LinearAxisRenderer||F[y].renderer.constructor===j.jqplot.LogAxisRenderer)){J=j.jqplot.LinearTickGenerator(v,x,q._scalefact,H);if(F[y].tickInset&&J[0]<F[y].min+F[y].tickInset*F[y].tickInterval){J[0]+=J[4];J[2]-=1}if(F[y].tickInset&&J[1]>F[y].max-F[y].tickInset*F[y].tickInterval){J[1]-=J[4];J[2]-=1}if(F[y].renderer.constructor===j.jqplot.LogAxisRenderer&&J[0]<F[y].min){J[0]+=J[4];J[2]-=1}F[y].min=J[0];F[y].max=J[1];F[y]._autoFormatString=J[3];F[y].numberTicks=J[2];F[y].tickInterval=J[4];F[y].daTickInterval=[J[4]/1000,"seconds"]}else{F[y].min=v;F[y].max=x;F[y].tickInterval=null;F[y].numberTicks=null;F[y].daTickInterval=null}F[y]._ticks=[]}}}A.clearRect(0,0,A.canvas.width,A.canvas.height);C.redraw();I._zoom.isZoomed=true;A=null}C.target.trigger("jqplotZoom",[G,t,C,u])}};j.jqplot.preInitHooks.push(j.jqplot.Cursor.init);j.jqplot.postDrawHooks.push(j.jqplot.Cursor.postDraw);function e(G,r,C){var J=C.plugins.cursor;var w="";var N=false;if(J.showTooltipGridPosition){w=G.x+", "+G.y;N=true}if(J.showTooltipUnitPosition){var F;for(var E=0;E<J.tooltipAxisGroups.length;E++){F=J.tooltipAxisGroups[E];if(N){w+="<br />"}if(J.useAxesFormatters){for(var D=0;D<F.length;D++){if(D){w+=", "}var H=C.axes[F[D]]._ticks[0].formatter;var B=C.axes[F[D]]._ticks[0].formatString;w+=H(B,r[F[D]])}}else{w+=j.jqplot.sprintf(J.tooltipFormatString,r[F[0]],r[F[1]])}N=true}}if(J.showTooltipDataPosition){var u=C.series;var M=d(C,G.x,G.y);var N=false;for(var E=0;E<u.length;E++){if(u[E].show){var y=u[E].index;var t=u[E].label.toString();var I=j.inArray(y,M.indices);var z=undefined;var x=undefined;if(I!=-1){var L=M.data[I].data;if(J.useAxesFormatters){var A=u[E]._xaxis._ticks[0].formatter;var q=u[E]._yaxis._ticks[0].formatter;var K=u[E]._xaxis._ticks[0].formatString;var v=u[E]._yaxis._ticks[0].formatString;z=A(K,L[0]);x=q(v,L[1])}else{z=L[0];x=L[1]}if(N){w+="<br />"}w+=j.jqplot.sprintf(J.tooltipFormatString,t,z,x);N=true}}}}J._tooltipElem.html(w)}function g(C,A){var E=A.plugins.cursor;var z=E.cursorCanvas._ctx;z.clearRect(0,0,z.canvas.width,z.canvas.height);if(E.showVerticalLine){E.shapeRenderer.draw(z,[[C.x,0],[C.x,z.canvas.height]])}if(E.showHorizontalLine){E.shapeRenderer.draw(z,[[0,C.y],[z.canvas.width,C.y]])}var G=d(A,C.x,C.y);if(E.showCursorLegend){var r=j(A.targetId+" td.jqplot-cursor-legend-label");for(var B=0;B<r.length;B++){var v=j(r[B]).data("seriesIndex");var t=A.series[v];var s=t.label.toString();var D=j.inArray(v,G.indices);var x=undefined;var w=undefined;if(D!=-1){var H=G.data[D].data;if(E.useAxesFormatters){var y=t._xaxis._ticks[0].formatter;var q=t._yaxis._ticks[0].formatter;var F=t._xaxis._ticks[0].formatString;var u=t._yaxis._ticks[0].formatString;x=y(F,H[0]);w=q(u,H[1])}else{x=H[0];w=H[1]}}if(A.legend.escapeHtml){j(r[B]).text(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}else{j(r[B]).html(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}}}z=null}function d(A,F,E){var B={indices:[],data:[]};var G,w,u,C,v,q,t;var z;var D=A.plugins.cursor;for(var w=0;w<A.series.length;w++){G=A.series[w];q=G.renderer;if(G.show){z=D.intersectionThreshold;if(G.showMarker){z+=G.markerRenderer.size/2}for(var v=0;v<G.gridData.length;v++){t=G.gridData[v];if(D.showVerticalLine){if(Math.abs(F-t[0])<=z){B.indices.push(w);B.data.push({seriesIndex:w,pointIndex:v,gridData:t,data:G.data[v]})}}}}}return B}function n(r,t){var v=t.plugins.cursor;var s=v._tooltipElem;switch(v.tooltipLocation){case"nw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"n":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"ne":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"e":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;case"se":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"s":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"sw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"w":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;default:var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break}s.css("left",q);s.css("top",u);s=null}function m(u){var s=u._gridPadding;var v=u.plugins.cursor;var t=v._tooltipElem;switch(v.tooltipLocation){case"nw":var r=s.left+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"n":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"ne":var r=s.right+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css({right:r,top:q});break;case"e":var r=s.right+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({right:r,top:q});break;case"se":var r=s.right+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break;case"s":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"sw":var r=s.left+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"w":var r=s.left+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({left:r,top:q});break;default:var r=s.right-v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break}t=null}function k(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.clickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function c(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.dblClickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function f(w,t,q,z,u){var v=u.plugins.cursor;v.onGrid=false;if(v.show){j(w.target).css("cursor",v.previousCursor);if(v.showTooltip&&!(v._zoom.zooming&&v.showTooltipOutsideZoom&&!v.constrainOutsideZoom)){v._tooltipElem.empty();v._tooltipElem.hide()}if(v.zoom){v._zoom.gridpos=t;v._zoom.datapos=q}if(v.showVerticalLine||v.showHorizontalLine){var B=v.cursorCanvas._ctx;B.clearRect(0,0,B.canvas.width,B.canvas.height);B=null}if(v.showCursorLegend){var A=j(u.targetId+" td.jqplot-cursor-legend-label");for(var s=0;s<A.length;s++){var y=j(A[s]).data("seriesIndex");var r=u.series[y];var x=r.label.toString();if(u.legend.escapeHtml){j(A[s]).text(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}else{j(A[s]).html(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}}}}}function b(r,q,u,t,s){var v=s.plugins.cursor;v.onGrid=true;if(v.show){v.previousCursor=r.target.style.cursor;r.target.style.cursor=v.style;if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}else{m(s)}v._tooltipElem.show()}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function i(r,q,u,t,s){var v=s.plugins.cursor;if(v.show){if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function o(y){var x=y.data.plot;var t=x.eventCanvas._elem.offset();var w={x:y.pageX-t.left,y:y.pageY-t.top};var u={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var v=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var q=x.axes;var r,s;for(r=11;r>0;r--){s=v[r-1];if(q[s].show){u[s]=q[s].series_p2u(w[s.charAt(0)])}}return{offsets:t,gridPos:w,dataPos:u}}function h(z){var x=z.data.plot;var y=x.plugins.cursor;if(y.show&&y.zoom&&y._zoom.started&&!y.zoomTarget){z.preventDefault();var B=y.zoomCanvas._ctx;var v=o(z);var w=v.gridPos;var t=v.dataPos;y._zoom.gridpos=w;y._zoom.datapos=t;y._zoom.zooming=true;var u=w.x;var s=w.y;var A=B.canvas.height;var q=B.canvas.width;if(y.showTooltip&&!y.onGrid&&y.showTooltipOutsideZoom){e(w,t,x);if(y.followMouse){n(w,x)}}if(y.constrainZoomTo=="x"){y._zoom.end=[u,A]}else{if(y.constrainZoomTo=="y"){y._zoom.end=[q,s]}else{y._zoom.end=[u,s]}}var r=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(r&&!r().isCollapsed){r().collapse()}}l.call(y);B=null}}function a(w,s,r,x,t){var v=t.plugins.cursor;if(t.plugins.mobile){j(document).one("vmouseup.jqplot_cursor",{plot:t},p)}else{j(document).one("mouseup.jqplot_cursor",{plot:t},p)}var u=t.axes;if(document.onselectstart!=undefined){v._oldHandlers.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!=undefined){v._oldHandlers.ondrag=document.ondrag;document.ondrag=function(){return false}}if(document.onmousedown!=undefined){v._oldHandlers.onmousedown=document.onmousedown;document.onmousedown=function(){return false}}if(v.zoom){if(!v.zoomProxy){var y=v.zoomCanvas._ctx;y.clearRect(0,0,y.canvas.width,y.canvas.height);y=null}if(v.constrainZoomTo=="x"){v._zoom.start=[s.x,0]}else{if(v.constrainZoomTo=="y"){v._zoom.start=[0,s.y]}else{v._zoom.start=[s.x,s.y]}}v._zoom.started=true;for(var q in r){v._zoom.axes.start[q]=r[q]}if(t.plugins.mobile){j(document).bind("vmousemove.jqplotCursor",{plot:t},h)}else{j(document).bind("mousemove.jqplotCursor",{plot:t},h)}}}function p(y){var v=y.data.plot;var x=v.plugins.cursor;if(x.zoom&&x._zoom.zooming&&!x.zoomTarget){var u=x._zoom.gridpos.x;var r=x._zoom.gridpos.y;var t=x._zoom.datapos;var z=x.zoomCanvas._ctx.canvas.height;var q=x.zoomCanvas._ctx.canvas.width;var w=v.axes;if(x.constrainOutsideZoom&&!x.onGrid){if(u<0){u=0}else{if(u>q){u=q}}if(r<0){r=0}else{if(r>z){r=z}}for(var s in t){if(t[s]){if(s.charAt(0)=="x"){t[s]=w[s].series_p2u(u)}else{t[s]=w[s].series_p2u(r)}}}}if(x.constrainZoomTo=="x"){r=z}else{if(x.constrainZoomTo=="y"){u=q}}x._zoom.end=[u,r];x._zoom.gridpos={x:u,y:r};x.doZoom(x._zoom.gridpos,t,v,x)}x._zoom.started=false;x._zoom.zooming=false;j(document).unbind("mousemove.jqplotCursor",h);if(document.onselectstart!=undefined&&x._oldHandlers.onselectstart!=null){document.onselectstart=x._oldHandlers.onselectstart;x._oldHandlers.onselectstart=null}if(document.ondrag!=undefined&&x._oldHandlers.ondrag!=null){document.ondrag=x._oldHandlers.ondrag;x._oldHandlers.ondrag=null}if(document.onmousedown!=undefined&&x._oldHandlers.onmousedown!=null){document.onmousedown=x._oldHandlers.onmousedown;x._oldHandlers.onmousedown=null}}function l(){var y=this._zoom.start;var u=this._zoom.end;var s=this.zoomCanvas._ctx;var r,v,x,q;if(u[0]>y[0]){r=y[0];q=u[0]-y[0]}else{r=u[0];q=y[0]-u[0]}if(u[1]>y[1]){v=y[1];x=u[1]-y[1]}else{v=u[1];x=y[1]-u[1]}s.fillStyle="rgba(0,0,0,0.2)";s.strokeStyle="#999999";s.lineWidth=1;s.clearRect(0,0,s.canvas.width,s.canvas.height);s.fillRect(0,0,s.canvas.width,s.canvas.height);s.clearRect(r,v,q,x);s.strokeRect(r,v,q,x);s=null}j.jqplot.CursorLegendRenderer=function(q){j.jqplot.TableLegendRenderer.call(this,q);this.formatString="%s"};j.jqplot.CursorLegendRenderer.prototype=new j.jqplot.TableLegendRenderer();j.jqplot.CursorLegendRenderer.prototype.constructor=j.jqplot.CursorLegendRenderer;j.jqplot.CursorLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var w=this._series,A;var r=document.createElement("div");this._elem=j(r);r=null;this._elem.addClass("jqplot-legend jqplot-cursor-legend");this._elem.css("position","absolute");var q=false;for(var x=0;x<w.length;x++){A=w[x];if(A.show&&A.showLabel){var v=j.jqplot.sprintf(this.formatString,A.label.toString());if(v){var t=A.color;if(A._stack&&!A.fill){t=""}z.call(this,v,t,q,x);q=true}for(var u=0;u<j.jqplot.addLegendRowHooks.length;u++){var y=j.jqplot.addLegendRowHooks[u].call(this,A);if(y){z.call(this,y.label,y.color,q);q=true}}}}w=A=null;delete w;delete A}function z(D,C,F,s){var B=(F)?this.rowSpacing:"0";var E=j('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);E.data("seriesIndex",s);j('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+B+';"><div style="border:1px solid #cccccc;padding:0.2em;"><div class="jqplot-cursor-legend-swatch" style="background-color:'+C+';"></div></div></td>').appendTo(E);var G=j('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+B+';"></td>');G.appendTo(E);G.data("seriesIndex",s);if(this.escapeHtml){G.text(D)}else{G.html(D)}E=null;G=null}return this._elem}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js deleted file mode 100644 index b97336fa..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js +++ /dev/null @@ -1,737 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.DateAxisRenderer - * A plugin for a jqPlot to render an axis as a series of date values. - * This renderer has no options beyond those supplied by the <Axis> class. - * It supplies it's own tick formatter, so the tickOptions.formatter option - * should not be overridden. - * - * Thanks to Ken Synder for his enhanced Date instance methods which are - * included with this code <http://kendsnyder.com/sandbox/date/>. - * - * To use this renderer, include the plugin in your source - * > <script type="text/javascript" language="javascript" src="plugins/jqplot.dateAxisRenderer.js"></script> - * - * and supply the appropriate options to your plot - * - * > {axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}} - * - * Dates can be passed into the axis in almost any recognizable value and - * will be parsed. They will be rendered on the axis in the format - * specified by tickOptions.formatString. e.g. tickOptions.formatString = '%Y-%m-%d'. - * - * Accecptable format codes - * are: - * - * > Code Result Description - * > == Years == - * > %Y 2008 Four-digit year - * > %y 08 Two-digit year - * > == Months == - * > %m 09 Two-digit month - * > %#m 9 One or two-digit month - * > %B September Full month name - * > %b Sep Abbreviated month name - * > == Days == - * > %d 05 Two-digit day of month - * > %#d 5 One or two-digit day of month - * > %e 5 One or two-digit day of month - * > %A Sunday Full name of the day of the week - * > %a Sun Abbreviated name of the day of the week - * > %w 0 Number of the day of the week (0 = Sunday, 6 = Saturday) - * > %o th The ordinal suffix string following the day of the month - * > == Hours == - * > %H 23 Hours in 24-hour format (two digits) - * > %#H 3 Hours in 24-hour integer format (one or two digits) - * > %I 11 Hours in 12-hour format (two digits) - * > %#I 3 Hours in 12-hour integer format (one or two digits) - * > %p PM AM or PM - * > == Minutes == - * > %M 09 Minutes (two digits) - * > %#M 9 Minutes (one or two digits) - * > == Seconds == - * > %S 02 Seconds (two digits) - * > %#S 2 Seconds (one or two digits) - * > %s 1206567625723 Unix timestamp (Seconds past 1970-01-01 00:00:00) - * > == Milliseconds == - * > %N 008 Milliseconds (three digits) - * > %#N 8 Milliseconds (one to three digits) - * > == Timezone == - * > %O 360 difference in minutes between local time and GMT - * > %Z Mountain Standard Time Name of timezone as reported by browser - * > %G -06:00 Hours and minutes between GMT - * > == Shortcuts == - * > %F 2008-03-26 %Y-%m-%d - * > %T 05:06:30 %H:%M:%S - * > %X 05:06:30 %H:%M:%S - * > %x 03/26/08 %m/%d/%y - * > %D 03/26/08 %m/%d/%y - * > %#c Wed Mar 26 15:31:00 2008 %a %b %e %H:%M:%S %Y - * > %v 3-Sep-2008 %e-%b-%Y - * > %R 15:31 %H:%M - * > %r 3:31:00 PM %I:%M:%S %p - * > == Characters == - * > %n \n Newline - * > %t \t Tab - * > %% % Percent Symbol - */ - $.jqplot.DateAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - this.date = new $.jsDate(); - }; - - var second = 1000; - var minute = 60 * second; - var hour = 60 * minute; - var day = 24 * hour; - var week = 7 * day; - - // these are less definitive - var month = 30.4368499 * day; - var year = 365.242199 * day; - - var daysInMonths = [31,28,31,30,31,30,31,30,31,30,31,30]; - // array of consistent nice intervals. Longer intervals - // will depend on days in month, days in year, etc. - var niceFormatStrings = ['%M:%S.%#N', '%M:%S.%#N', '%M:%S.%#N', '%M:%S', '%M:%S', '%M:%S', '%M:%S', '%H:%M:%S', '%H:%M:%S', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%a %H:%M', '%a %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%v', '%v', '%v', '%v', '%v', '%v', '%v']; - var niceIntervals = [0.1*second, 0.2*second, 0.5*second, second, 2*second, 5*second, 10*second, 15*second, 30*second, minute, 2*minute, 5*minute, 10*minute, 15*minute, 30*minute, hour, 2*hour, 4*hour, 6*hour, 8*hour, 12*hour, day, 2*day, 3*day, 4*day, 5*day, week, 2*week]; - - var niceMonthlyIntervals = []; - - function bestDateInterval(min, max, titarget) { - // iterate through niceIntervals to find one closest to titarget - var badness = Number.MAX_VALUE; - var temp, bestTi, bestfmt; - for (var i=0, l=niceIntervals.length; i < l; i++) { - temp = Math.abs(titarget - niceIntervals[i]); - if (temp < badness) { - badness = temp; - bestTi = niceIntervals[i]; - bestfmt = niceFormatStrings[i]; - } - } - - return [bestTi, bestfmt]; - } - - $.jqplot.DateAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.DateAxisRenderer.prototype.constructor = $.jqplot.DateAxisRenderer; - - $.jqplot.DateTickFormatter = function(format, val) { - if (!format) { - format = '%Y/%m/%d'; - } - return $.jsDate.strftime(val, format); - }; - - $.jqplot.DateAxisRenderer.prototype.init = function(options){ - // prop: tickRenderer - // A class of a rendering engine for creating the ticks labels displayed on the plot, - // See <$.jqplot.AxisTickRenderer>. - // this.tickRenderer = $.jqplot.AxisTickRenderer; - // this.labelRenderer = $.jqplot.AxisLabelRenderer; - this.tickOptions.formatter = $.jqplot.DateTickFormatter; - // prop: tickInset - // Controls the amount to inset the first and last ticks from - // the edges of the grid, in multiples of the tick interval. - // 0 is no inset, 0.5 is one half a tick interval, 1 is a full - // tick interval, etc. - this.tickInset = 0; - // prop: drawBaseline - // True to draw the axis baseline. - this.drawBaseline = true; - // prop: baselineWidth - // width of the baseline in pixels. - this.baselineWidth = null; - // prop: baselineColor - // CSS color spec for the baseline. - this.baselineColor = null; - this.daTickInterval = null; - this._daTickInterval = null; - - $.extend(true, this, options); - - var db = this._dataBounds, - stats, - sum, - s, - d, - pd, - sd, - intv; - - // Go through all the series attached to this axis and find - // the min/max bounds for this axis. - for (var i=0; i<this._series.length; i++) { - stats = {intervals:[], frequencies:{}, sortedIntervals:[], min:null, max:null, mean:null}; - sum = 0; - s = this._series[i]; - d = s.data; - pd = s._plotData; - sd = s._stackData; - intv = 0; - - for (var j=0; j<d.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - d[j][0] = new $.jsDate(d[j][0]).getTime(); - pd[j][0] = new $.jsDate(d[j][0]).getTime(); - sd[j][0] = new $.jsDate(d[j][0]).getTime(); - if ((d[j][0] != null && d[j][0] < db.min) || db.min == null) { - db.min = d[j][0]; - } - if ((d[j][0] != null && d[j][0] > db.max) || db.max == null) { - db.max = d[j][0]; - } - if (j>0) { - intv = Math.abs(d[j][0] - d[j-1][0]); - stats.intervals.push(intv); - if (stats.frequencies.hasOwnProperty(intv)) { - stats.frequencies[intv] += 1; - } - else { - stats.frequencies[intv] = 1; - } - } - sum += intv; - - } - else { - d[j][1] = new $.jsDate(d[j][1]).getTime(); - pd[j][1] = new $.jsDate(d[j][1]).getTime(); - sd[j][1] = new $.jsDate(d[j][1]).getTime(); - if ((d[j][1] != null && d[j][1] < db.min) || db.min == null) { - db.min = d[j][1]; - } - if ((d[j][1] != null && d[j][1] > db.max) || db.max == null) { - db.max = d[j][1]; - } - if (j>0) { - intv = Math.abs(d[j][1] - d[j-1][1]); - stats.intervals.push(intv); - if (stats.frequencies.hasOwnProperty(intv)) { - stats.frequencies[intv] += 1; - } - else { - stats.frequencies[intv] = 1; - } - } - } - sum += intv; - } - - if (s.renderer.bands) { - if (s.renderer.bands.hiData.length) { - var bd = s.renderer.bands.hiData; - for (var j=0, l=bd.length; j < l; j++) { - if (this.name === 'xaxis' || this.name === 'x2axis') { - bd[j][0] = new $.jsDate(bd[j][0]).getTime(); - if ((bd[j][0] != null && bd[j][0] > db.max) || db.max == null) { - db.max = bd[j][0]; - } - } - else { - bd[j][1] = new $.jsDate(bd[j][1]).getTime(); - if ((bd[j][1] != null && bd[j][1] > db.max) || db.max == null) { - db.max = bd[j][1]; - } - } - } - } - if (s.renderer.bands.lowData.length) { - var bd = s.renderer.bands.lowData; - for (var j=0, l=bd.length; j < l; j++) { - if (this.name === 'xaxis' || this.name === 'x2axis') { - bd[j][0] = new $.jsDate(bd[j][0]).getTime(); - if ((bd[j][0] != null && bd[j][0] < db.min) || db.min == null) { - db.min = bd[j][0]; - } - } - else { - bd[j][1] = new $.jsDate(bd[j][1]).getTime(); - if ((bd[j][1] != null && bd[j][1] < db.min) || db.min == null) { - db.min = bd[j][1]; - } - } - } - } - } - - var tempf = 0, - tempn=0; - for (var n in stats.frequencies) { - stats.sortedIntervals.push({interval:n, frequency:stats.frequencies[n]}); - } - stats.sortedIntervals.sort(function(a, b){ - return b.frequency - a.frequency; - }); - - stats.min = $.jqplot.arrayMin(stats.intervals); - stats.max = $.jqplot.arrayMax(stats.intervals); - stats.mean = sum/d.length; - this._intervalStats.push(stats); - stats = sum = s = d = pd = sd = null; - } - db = null; - - }; - - // called with scope of an axis - $.jqplot.DateAxisRenderer.prototype.reset = function() { - this.min = this._options.min; - this.max = this._options.max; - this.tickInterval = this._options.tickInterval; - this.numberTicks = this._options.numberTicks; - this._autoFormatString = ''; - if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) { - this.tickOptions.formatString = ''; - } - this.daTickInterval = this._daTickInterval; - // this._ticks = this.__ticks; - }; - - $.jqplot.DateAxisRenderer.prototype.createTicks = function(plot) { - // we're are operating on an axis here - var ticks = this._ticks; - var userTicks = this.ticks; - var name = this.name; - // databounds were set on axis initialization. - var db = this._dataBounds; - var iv = this._intervalStats; - var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height; - var interval; - var min, max; - var pos1, pos2; - var tt, i; - var threshold = 30; - var insetMult = 1; - - var tickInterval = this.tickInterval; - - // if we already have ticks, use them. - // ticks must be in order of increasing value. - - min = ((this.min != null) ? new $.jsDate(this.min).getTime() : db.min); - max = ((this.max != null) ? new $.jsDate(this.max).getTime() : db.max); - - // see if we're zooming. if we are, don't use the min and max we're given, - // but compute some nice ones. They will be reset later. - - var cursor = plot.plugins.cursor; - - if (cursor && cursor._zoom && cursor._zoom.zooming) { - this.min = null; - this.max = null; - } - - var range = max - min; - - if (this.tickOptions == null || !this.tickOptions.formatString) { - this._overrideFormatString = true; - } - - if (userTicks.length) { - // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed - for (i=0; i<userTicks.length; i++){ - var ut = userTicks[i]; - var t = new this.tickRenderer(this.tickOptions); - if (ut.constructor == Array) { - t.value = new $.jsDate(ut[0]).getTime(); - t.label = ut[1]; - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(t.value, this.name); - this._ticks.push(t); - } - - else { - t.value = new $.jsDate(ut).getTime(); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(t.value, this.name); - this._ticks.push(t); - } - } - this.numberTicks = userTicks.length; - this.min = this._ticks[0].value; - this.max = this._ticks[this.numberTicks-1].value; - this.daTickInterval = [(this.max - this.min) / (this.numberTicks - 1)/1000, 'seconds']; - } - - //////// - // We don't have any ticks yet, let's make some! - //////// - - // special case when there is only one point, make three tick marks to center the point - else if (this.min == null && this.max == null && db.min == db.max) - { - var onePointOpts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null}); - var delta = 300000; - this.min = db.min - delta; - this.max = db.max + delta; - this.numberTicks = 3; - - for(var i=this.min;i<=this.max;i+= delta) - { - onePointOpts.value = i; - - var t = new this.tickRenderer(onePointOpts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - - t.showLabel = false; - t.showMark = false; - - this._ticks.push(t); - } - - if(this.showTicks) { - this._ticks[1].showLabel = true; - } - if(this.showTickMarks) { - this._ticks[1].showTickMarks = true; - } - } - // if user specified min and max are null, we set those to make best ticks. - else if (this.min == null && this.max == null) { - - var opts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null}); - - // want to find a nice interval - var nttarget, - titarget; - - // if no tickInterval or numberTicks options specified, make a good guess. - if (!this.tickInterval && !this.numberTicks) { - var tdim = Math.max(dim, threshold+1); - // how many ticks to put on the axis? - // date labels tend to be long. If ticks not rotated, - // don't use too many and have a high spacing factor. - // If we are rotating ticks, use a lower factor. - var spacingFactor = 115; - if (this.tickRenderer === $.jqplot.CanvasAxisTickRenderer && this.tickOptions.angle) { - spacingFactor = 115 - 40 * Math.abs(Math.sin(this.tickOptions.angle/180*Math.PI)); - } - - nttarget = Math.ceil((tdim-threshold)/spacingFactor + 1); - titarget = (max - min) / (nttarget - 1); - } - - // If tickInterval is specified, we'll try to honor it. - // Not gauranteed to get this interval, but we'll get as close as - // we can. - // tickInterval will be used before numberTicks, that is if - // both are specified, numberTicks will be ignored. - else if (this.tickInterval) { - titarget = this.tickInterval; - } - - // if numberTicks specified, try to honor it. - // Not gauranteed, but will try to get close. - else if (this.numberTicks) { - nttarget = this.numberTicks; - titarget = (max - min) / (nttarget - 1); - } - - // If we can use an interval of 2 weeks or less, pick best one - if (titarget <= 19*day) { - var ret = bestDateInterval(min, max, titarget); - var tempti = ret[0]; - this._autoFormatString = ret[1]; - - min = Math.floor(min/tempti) * tempti; - min = new $.jsDate(min); - min = min.getTime() + min.getUtcOffset(); - - nttarget = Math.ceil((max - min) / tempti) + 1; - this.min = min; - this.max = min + (nttarget - 1) * tempti; - - // if max is less than max, add an interval - if (this.max < max) { - this.max += tempti; - nttarget += 1; - } - this.tickInterval = tempti; - this.numberTicks = nttarget; - - for (var i=0; i<nttarget; i++) { - opts.value = this.min + i * tempti; - t = new this.tickRenderer(opts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - this._ticks.push(t); - } - - insetMult = this.tickInterval; - } - - // should we use a monthly interval? - else if (titarget <= 9 * month) { - - this._autoFormatString = '%v'; - - // how many months in an interval? - var intv = Math.round(titarget/month); - if (intv < 1) { - intv = 1; - } - else if (intv > 6) { - intv = 6; - } - - // figure out the starting month and ending month. - var mstart = new $.jsDate(min).setDate(1).setHours(0,0,0,0); - - // See if max ends exactly on a month - var tempmend = new $.jsDate(max); - var mend = new $.jsDate(max).setDate(1).setHours(0,0,0,0); - - if (tempmend.getTime() !== mend.getTime()) { - mend = mend.add(1, 'month'); - } - - var nmonths = mend.diff(mstart, 'month'); - - nttarget = Math.ceil(nmonths/intv) + 1; - - this.min = mstart.getTime(); - this.max = mstart.clone().add((nttarget - 1) * intv, 'month').getTime(); - this.numberTicks = nttarget; - - for (var i=0; i<nttarget; i++) { - if (i === 0) { - opts.value = mstart.getTime(); - } - else { - opts.value = mstart.add(intv, 'month').getTime(); - } - t = new this.tickRenderer(opts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - this._ticks.push(t); - } - - insetMult = intv * month; - } - - // use yearly intervals - else { - - this._autoFormatString = '%v'; - - // how many years in an interval? - var intv = Math.round(titarget/year); - if (intv < 1) { - intv = 1; - } - - // figure out the starting and ending years. - var mstart = new $.jsDate(min).setMonth(0, 1).setHours(0,0,0,0); - var mend = new $.jsDate(max).add(1, 'year').setMonth(0, 1).setHours(0,0,0,0); - - var nyears = mend.diff(mstart, 'year'); - - nttarget = Math.ceil(nyears/intv) + 1; - - this.min = mstart.getTime(); - this.max = mstart.clone().add((nttarget - 1) * intv, 'year').getTime(); - this.numberTicks = nttarget; - - for (var i=0; i<nttarget; i++) { - if (i === 0) { - opts.value = mstart.getTime(); - } - else { - opts.value = mstart.add(intv, 'year').getTime(); - } - t = new this.tickRenderer(opts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - this._ticks.push(t); - } - - insetMult = intv * year; - } - } - - //////// - // Some option(s) specified, work around that. - //////// - - else { - if (name == 'xaxis' || name == 'x2axis') { - dim = this._plotDimensions.width; - } - else { - dim = this._plotDimensions.height; - } - - // if min, max and number of ticks specified, user can't specify interval. - if (this.min != null && this.max != null && this.numberTicks != null) { - this.tickInterval = null; - } - - // if user specified a tick interval, convert to usable. - if (this.tickInterval != null) - { - // if interval is a number or can be converted to one, use it. - // Assume it is in SECONDS!!! - if (Number(this.tickInterval)) { - this.daTickInterval = [Number(this.tickInterval), 'seconds']; - } - // else, parse out something we can build from. - else if (typeof this.tickInterval == "string") { - var parts = this.tickInterval.split(' '); - if (parts.length == 1) { - this.daTickInterval = [1, parts[0]]; - } - else if (parts.length == 2) { - this.daTickInterval = [parts[0], parts[1]]; - } - } - } - - // if min and max are same, space them out a bit - if (min == max) { - var adj = 24*60*60*500; // 1/2 day - min -= adj; - max += adj; - } - - range = max - min; - - var optNumTicks = 2 + parseInt(Math.max(0, dim-100)/100, 10); - - - var rmin, rmax; - - rmin = (this.min != null) ? new $.jsDate(this.min).getTime() : min - range/2*(this.padMin - 1); - rmax = (this.max != null) ? new $.jsDate(this.max).getTime() : max + range/2*(this.padMax - 1); - this.min = rmin; - this.max = rmax; - range = this.max - this.min; - - if (this.numberTicks == null){ - // if tickInterval is specified by user, we will ignore computed maximum. - // max will be equal or greater to fit even # of ticks. - if (this.daTickInterval != null) { - var nc = new $.jsDate(this.max).diff(this.min, this.daTickInterval[1], true); - this.numberTicks = Math.ceil(nc/this.daTickInterval[0]) +1; - // this.max = new $.jsDate(this.min).add(this.numberTicks-1, this.daTickInterval[1]).getTime(); - this.max = new $.jsDate(this.min).add((this.numberTicks-1) * this.daTickInterval[0], this.daTickInterval[1]).getTime(); - } - else if (dim > 200) { - this.numberTicks = parseInt(3+(dim-200)/100, 10); - } - else { - this.numberTicks = 2; - } - } - - insetMult = range / (this.numberTicks-1)/1000; - - if (this.daTickInterval == null) { - this.daTickInterval = [insetMult, 'seconds']; - } - - - for (var i=0; i<this.numberTicks; i++){ - var min = new $.jsDate(this.min); - tt = min.add(i*this.daTickInterval[0], this.daTickInterval[1]).getTime(); - var t = new this.tickRenderer(this.tickOptions); - // var t = new $.jqplot.AxisTickRenderer(this.tickOptions); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(tt, this.name); - this._ticks.push(t); - } - } - - if (this.tickInset) { - this.min = this.min - this.tickInset * insetMult; - this.max = this.max + this.tickInset * insetMult; - } - - if (this._daTickInterval == null) { - this._daTickInterval = this.daTickInterval; - } - - ticks = null; - }; - -})(jQuery); - diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js deleted file mode 100644 index f8532fe1..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(h){h.jqplot.DateAxisRenderer=function(){h.jqplot.LinearAxisRenderer.call(this);this.date=new h.jsDate()};var c=1000;var e=60*c;var f=60*e;var l=24*f;var b=7*l;var j=30.4368499*l;var k=365.242199*l;var g=[31,28,31,30,31,30,31,30,31,30,31,30];var i=["%M:%S.%#N","%M:%S.%#N","%M:%S.%#N","%M:%S","%M:%S","%M:%S","%M:%S","%H:%M:%S","%H:%M:%S","%H:%M","%H:%M","%H:%M","%H:%M","%H:%M","%H:%M","%a %H:%M","%a %H:%M","%b %e %H:%M","%b %e %H:%M","%b %e %H:%M","%b %e %H:%M","%v","%v","%v","%v","%v","%v","%v"];var m=[0.1*c,0.2*c,0.5*c,c,2*c,5*c,10*c,15*c,30*c,e,2*e,5*e,10*e,15*e,30*e,f,2*f,4*f,6*f,8*f,12*f,l,2*l,3*l,4*l,5*l,b,2*b];var d=[];function a(p,s,t){var o=Number.MAX_VALUE;var u,r,v;for(var q=0,n=m.length;q<n;q++){u=Math.abs(t-m[q]);if(u<o){o=u;r=m[q];v=i[q]}}return[r,v]}h.jqplot.DateAxisRenderer.prototype=new h.jqplot.LinearAxisRenderer();h.jqplot.DateAxisRenderer.prototype.constructor=h.jqplot.DateAxisRenderer;h.jqplot.DateTickFormatter=function(n,o){if(!n){n="%Y/%m/%d"}return h.jsDate.strftime(o,n)};h.jqplot.DateAxisRenderer.prototype.init=function(E){this.tickOptions.formatter=h.jqplot.DateTickFormatter;this.tickInset=0;this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.daTickInterval=null;this._daTickInterval=null;h.extend(true,this,E);var C=this._dataBounds,u,x,D,y,A,z,o;for(var t=0;t<this._series.length;t++){u={intervals:[],frequencies:{},sortedIntervals:[],min:null,max:null,mean:null};x=0;D=this._series[t];y=D.data;A=D._plotData;z=D._stackData;o=0;for(var r=0;r<y.length;r++){if(this.name=="xaxis"||this.name=="x2axis"){y[r][0]=new h.jsDate(y[r][0]).getTime();A[r][0]=new h.jsDate(y[r][0]).getTime();z[r][0]=new h.jsDate(y[r][0]).getTime();if((y[r][0]!=null&&y[r][0]<C.min)||C.min==null){C.min=y[r][0]}if((y[r][0]!=null&&y[r][0]>C.max)||C.max==null){C.max=y[r][0]}if(r>0){o=Math.abs(y[r][0]-y[r-1][0]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}x+=o}else{y[r][1]=new h.jsDate(y[r][1]).getTime();A[r][1]=new h.jsDate(y[r][1]).getTime();z[r][1]=new h.jsDate(y[r][1]).getTime();if((y[r][1]!=null&&y[r][1]<C.min)||C.min==null){C.min=y[r][1]}if((y[r][1]!=null&&y[r][1]>C.max)||C.max==null){C.max=y[r][1]}if(r>0){o=Math.abs(y[r][1]-y[r-1][1]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}}x+=o}if(D.renderer.bands){if(D.renderer.bands.hiData.length){var w=D.renderer.bands.hiData;for(var r=0,q=w.length;r<q;r++){if(this.name==="xaxis"||this.name==="x2axis"){w[r][0]=new h.jsDate(w[r][0]).getTime();if((w[r][0]!=null&&w[r][0]>C.max)||C.max==null){C.max=w[r][0]}}else{w[r][1]=new h.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]>C.max)||C.max==null){C.max=w[r][1]}}}}if(D.renderer.bands.lowData.length){var w=D.renderer.bands.lowData;for(var r=0,q=w.length;r<q;r++){if(this.name==="xaxis"||this.name==="x2axis"){w[r][0]=new h.jsDate(w[r][0]).getTime();if((w[r][0]!=null&&w[r][0]<C.min)||C.min==null){C.min=w[r][0]}}else{w[r][1]=new h.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]<C.min)||C.min==null){C.min=w[r][1]}}}}}var B=0,v=0;for(var p in u.frequencies){u.sortedIntervals.push({interval:p,frequency:u.frequencies[p]})}u.sortedIntervals.sort(function(s,n){return n.frequency-s.frequency});u.min=h.jqplot.arrayMin(u.intervals);u.max=h.jqplot.arrayMax(u.intervals);u.mean=x/y.length;this._intervalStats.push(u);u=x=D=y=A=z=null}C=null};h.jqplot.DateAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}this.daTickInterval=this._daTickInterval};h.jqplot.DateAxisRenderer.prototype.createTicks=function(p){var W=this._ticks;var L=this.ticks;var F=this.name;var H=this._dataBounds;var M=this._intervalStats;var n=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var w;var ad,J;var y,x;var ac,Z;var s=30;var O=1;var v=this.tickInterval;ad=((this.min!=null)?new h.jsDate(this.min).getTime():H.min);J=((this.max!=null)?new h.jsDate(this.max).getTime():H.max);var A=p.plugins.cursor;if(A&&A._zoom&&A._zoom.zooming){this.min=null;this.max=null}var B=J-ad;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}if(L.length){for(Z=0;Z<L.length;Z++){var P=L[Z];var X=new this.tickRenderer(this.tickOptions);if(P.constructor==Array){X.value=new h.jsDate(P[0]).getTime();X.label=P[1];if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(X.value,this.name);this._ticks.push(X)}else{X.value=new h.jsDate(P).getTime();if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(X.value,this.name);this._ticks.push(X)}}this.numberTicks=L.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.daTickInterval=[(this.max-this.min)/(this.numberTicks-1)/1000,"seconds"]}else{if(this.min==null&&this.max==null&&H.min==H.max){var E=h.extend(true,{},this.tickOptions,{name:this.name,value:null});var S=300000;this.min=H.min-S;this.max=H.max+S;this.numberTicks=3;for(var Z=this.min;Z<=this.max;Z+=S){E.value=Z;var X=new this.tickRenderer(E);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}X.showLabel=false;X.showMark=false;this._ticks.push(X)}if(this.showTicks){this._ticks[1].showLabel=true}if(this.showTickMarks){this._ticks[1].showTickMarks=true}}else{if(this.min==null&&this.max==null){var N=h.extend(true,{},this.tickOptions,{name:this.name,value:null});var ab,I;if(!this.tickInterval&&!this.numberTicks){var R=Math.max(n,s+1);var Y=115;if(this.tickRenderer===h.jqplot.CanvasAxisTickRenderer&&this.tickOptions.angle){Y=115-40*Math.abs(Math.sin(this.tickOptions.angle/180*Math.PI))}ab=Math.ceil((R-s)/Y+1);I=(J-ad)/(ab-1)}else{if(this.tickInterval){I=this.tickInterval}else{if(this.numberTicks){ab=this.numberTicks;I=(J-ad)/(ab-1)}}}if(I<=19*l){var Q=a(ad,J,I);var r=Q[0];this._autoFormatString=Q[1];ad=Math.floor(ad/r)*r;ad=new h.jsDate(ad);ad=ad.getTime()+ad.getUtcOffset();ab=Math.ceil((J-ad)/r)+1;this.min=ad;this.max=ad+(ab-1)*r;if(this.max<J){this.max+=r;ab+=1}this.tickInterval=r;this.numberTicks=ab;for(var Z=0;Z<ab;Z++){N.value=this.min+Z*r;X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=this.tickInterval}else{if(I<=9*j){this._autoFormatString="%v";var D=Math.round(I/j);if(D<1){D=1}else{if(D>6){D=6}}var U=new h.jsDate(ad).setDate(1).setHours(0,0,0,0);var q=new h.jsDate(J);var z=new h.jsDate(J).setDate(1).setHours(0,0,0,0);if(q.getTime()!==z.getTime()){z=z.add(1,"month")}var T=z.diff(U,"month");ab=Math.ceil(T/D)+1;this.min=U.getTime();this.max=U.clone().add((ab-1)*D,"month").getTime();this.numberTicks=ab;for(var Z=0;Z<ab;Z++){if(Z===0){N.value=U.getTime()}else{N.value=U.add(D,"month").getTime()}X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=D*j}else{this._autoFormatString="%v";var D=Math.round(I/k);if(D<1){D=1}var U=new h.jsDate(ad).setMonth(0,1).setHours(0,0,0,0);var z=new h.jsDate(J).add(1,"year").setMonth(0,1).setHours(0,0,0,0);var K=z.diff(U,"year");ab=Math.ceil(K/D)+1;this.min=U.getTime();this.max=U.clone().add((ab-1)*D,"year").getTime();this.numberTicks=ab;for(var Z=0;Z<ab;Z++){if(Z===0){N.value=U.getTime()}else{N.value=U.add(D,"year").getTime()}X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=D*k}}}else{if(F=="xaxis"||F=="x2axis"){n=this._plotDimensions.width}else{n=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.tickInterval!=null){if(Number(this.tickInterval)){this.daTickInterval=[Number(this.tickInterval),"seconds"]}else{if(typeof this.tickInterval=="string"){var aa=this.tickInterval.split(" ");if(aa.length==1){this.daTickInterval=[1,aa[0]]}else{if(aa.length==2){this.daTickInterval=[aa[0],aa[1]]}}}}}if(ad==J){var o=24*60*60*500;ad-=o;J+=o}B=J-ad;var G=2+parseInt(Math.max(0,n-100)/100,10);var V,C;V=(this.min!=null)?new h.jsDate(this.min).getTime():ad-B/2*(this.padMin-1);C=(this.max!=null)?new h.jsDate(this.max).getTime():J+B/2*(this.padMax-1);this.min=V;this.max=C;B=this.max-this.min;if(this.numberTicks==null){if(this.daTickInterval!=null){var u=new h.jsDate(this.max).diff(this.min,this.daTickInterval[1],true);this.numberTicks=Math.ceil(u/this.daTickInterval[0])+1;this.max=new h.jsDate(this.min).add((this.numberTicks-1)*this.daTickInterval[0],this.daTickInterval[1]).getTime()}else{if(n>200){this.numberTicks=parseInt(3+(n-200)/100,10)}else{this.numberTicks=2}}}O=B/(this.numberTicks-1)/1000;if(this.daTickInterval==null){this.daTickInterval=[O,"seconds"]}for(var Z=0;Z<this.numberTicks;Z++){var ad=new h.jsDate(this.min);ac=ad.add(Z*this.daTickInterval[0],this.daTickInterval[1]).getTime();var X=new this.tickRenderer(this.tickOptions);if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(ac,this.name);this._ticks.push(X)}}}}if(this.tickInset){this.min=this.min-this.tickInset*O;this.max=this.max+this.tickInset*O}if(this._daTickInterval==null){this._daTickInterval=this.daTickInterval}W=null}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js deleted file mode 100644 index eeda6ef9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js +++ /dev/null @@ -1,804 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.DonutRenderer - * Plugin renderer to draw a donut chart. - * x values, if present, will be used as slice labels. - * y values give slice size. - * - * To use this renderer, you need to include the - * donut renderer plugin, for example: - * - * > <script type="text/javascript" src="plugins/jqplot.donutRenderer.js"></script> - * - * Properties described here are passed into the $.jqplot function - * as options on the series renderer. For example: - * - * > plot2 = $.jqplot('chart2', [s1, s2], { - * > seriesDefaults: { - * > renderer:$.jqplot.DonutRenderer, - * > rendererOptions:{ - * > sliceMargin: 2, - * > innerDiameter: 110, - * > startAngle: -90 - * > } - * > } - * > }); - * - * A donut plot will trigger events on the plot target - * according to user interaction. All events return the event object, - * the series index, the point (slice) index, and the point data for - * the appropriate slice. - * - * 'jqplotDataMouseOver' - triggered when user mouseing over a slice. - * 'jqplotDataHighlight' - triggered the first time user mouses over a slice, - * if highlighting is enabled. - * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of - * a highlighted slice. - * 'jqplotDataClick' - triggered when the user clicks on a slice. - * 'jqplotDataRightClick' - tiggered when the user right clicks on a slice if - * the "captureRightClick" option is set to true on the plot. - */ - $.jqplot.DonutRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.DonutRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.DonutRenderer.prototype.constructor = $.jqplot.DonutRenderer; - - // called with scope of a series - $.jqplot.DonutRenderer.prototype.init = function(options, plot) { - // Group: Properties - // - // prop: diameter - // Outer diameter of the donut, auto computed by default - this.diameter = null; - // prop: innerDiameter - // Inner diameter of the donut, auto calculated by default. - // If specified will override thickness value. - this.innerDiameter = null; - // prop: thickness - // thickness of the donut, auto computed by default - // Overridden by if innerDiameter is specified. - this.thickness = null; - // prop: padding - // padding between the donut and plot edges, legend, etc. - this.padding = 20; - // prop: sliceMargin - // angular spacing between donut slices in degrees. - this.sliceMargin = 0; - // prop: ringMargin - // pixel distance between rings, or multiple series in a donut plot. - // null will compute ringMargin based on sliceMargin. - this.ringMargin = null; - // prop: fill - // true or false, wether to fil the slices. - this.fill = true; - // prop: shadowOffset - // offset of the shadow from the slice and offset of - // each succesive stroke of the shadow from the last. - this.shadowOffset = 2; - // prop: shadowAlpha - // transparency of the shadow (0 = transparent, 1 = opaque) - this.shadowAlpha = 0.07; - // prop: shadowDepth - // number of strokes to apply to the shadow, - // each stroke offset shadowOffset from the last. - this.shadowDepth = 5; - // prop: highlightMouseOver - // True to highlight slice when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on a slice. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over a slice. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColors - // an array of colors to use when highlighting a slice. - this.highlightColors = []; - // prop: dataLabels - // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices. - // Defaults to percentage of each pie slice. - this.dataLabels = 'percent'; - // prop: showDataLabels - // true to show data labels on slices. - this.showDataLabels = false; - // prop: dataLabelFormatString - // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage. - this.dataLabelFormatString = null; - // prop: dataLabelThreshold - // Threshhold in percentage (0 - 100) of pie area, below which no label will be displayed. - // This applies to all label types, not just to percentage labels. - this.dataLabelThreshold = 3; - // prop: dataLabelPositionFactor - // A Multiplier (0-1) of the pie radius which controls position of label on slice. - // Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie. - this.dataLabelPositionFactor = 0.4; - // prop: dataLabelNudge - // Number of pixels to slide the label away from (+) or toward (-) the center of the pie. - this.dataLabelNudge = 0; - // prop: startAngle - // Angle to start drawing donut in degrees. - // According to orientation of canvas coordinate system: - // 0 = on the positive x axis - // -90 = on the positive y axis. - // 90 = on the negaive y axis. - // 180 or - 180 = on the negative x axis. - this.startAngle = 0; - this.tickRenderer = $.jqplot.DonutTickRenderer; - // Used as check for conditions where donut shouldn't be drawn. - this._drawData = true; - this._type = 'donut'; - - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (options.highlightMouseDown && options.highlightMouseOver == null) { - options.highlightMouseOver = false; - } - - $.extend(true, this, options); - if (this.diameter != null) { - this.diameter = this.diameter - this.sliceMargin; - } - this._diameter = null; - this._innerDiameter = null; - this._radius = null; - this._innerRadius = null; - this._thickness = null; - // references to the previous series in the plot to properly calculate diameters - // and thicknesses of nested rings. - this._previousSeries = []; - this._numberSeries = 1; - // array of [start,end] angles arrays, one for each slice. In radians. - this._sliceAngles = []; - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - - // set highlight colors if none provided - if (this.highlightColors.length == 0) { - for (var i=0; i<this.seriesColors.length; i++){ - var rgba = $.jqplot.getColorComponents(this.seriesColors[i]); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]); - newrgb[j] = parseInt(newrgb[j], 10); - } - this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')'); - } - } - - plot.postParseOptionsHooks.addOnce(postParseOptions); - plot.postInitHooks.addOnce(postInit); - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); - plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); - plot.eventListenerHooks.addOnce('jqplotClick', handleClick); - plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); - plot.postDrawHooks.addOnce(postPlotDraw); - - - }; - - $.jqplot.DonutRenderer.prototype.setGridData = function(plot) { - // set gridData property. This will hold angle in radians of each data point. - var stack = []; - var td = []; - var sa = this.startAngle/180*Math.PI; - var tot = 0; - // don't know if we have any valid data yet, so set plot to not draw. - this._drawData = false; - for (var i=0; i<this.data.length; i++){ - if (this.data[i][1] != 0) { - // we have data, O.K. to draw. - this._drawData = true; - } - stack.push(this.data[i][1]); - td.push([this.data[i][0]]); - if (i>0) { - stack[i] += stack[i-1]; - } - tot += this.data[i][1]; - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i<stack.length; i++) { - td[i][1] = stack[i] * fact; - td[i][2] = this.data[i][1]/tot; - } - this.gridData = td; - }; - - $.jqplot.DonutRenderer.prototype.makeGridData = function(data, plot) { - var stack = []; - var td = []; - var tot = 0; - var sa = this.startAngle/180*Math.PI; - // don't know if we have any valid data yet, so set plot to not draw. - this._drawData = false; - for (var i=0; i<data.length; i++){ - if (this.data[i][1] != 0) { - // we have data, O.K. to draw. - this._drawData = true; - } - stack.push(data[i][1]); - td.push([data[i][0]]); - if (i>0) { - stack[i] += stack[i-1]; - } - tot += data[i][1]; - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i<stack.length; i++) { - td[i][1] = stack[i] * fact; - td[i][2] = data[i][1]/tot; - } - return td; - }; - - $.jqplot.DonutRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) { - var r = this._diameter / 2; - var ri = r - this._thickness; - var fill = this.fill; - // var lineWidth = this.lineWidth; - ctx.save(); - ctx.translate(this._center[0], this._center[1]); - // ctx.translate(this.sliceMargin*Math.cos((ang1+ang2)/2), this.sliceMargin*Math.sin((ang1+ang2)/2)); - - if (isShadow) { - for (var i=0; i<this.shadowDepth; i++) { - ctx.save(); - ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI)); - doDraw(); - } - } - - else { - doDraw(); - } - - function doDraw () { - // Fix for IE and Chrome that can't seem to draw circles correctly. - // ang2 should always be <= 2 pi since that is the way the data is converted. - if (ang2 > 6.282 + this.startAngle) { - ang2 = 6.282 + this.startAngle; - if (ang1 > ang2) { - ang1 = 6.281 + this.startAngle; - } - } - // Fix for IE, where it can't seem to handle 0 degree angles. Also avoids - // ugly line on unfilled donuts. - if (ang1 >= ang2) { - return; - } - ctx.beginPath(); - ctx.fillStyle = color; - ctx.strokeStyle = color; - // ctx.lineWidth = lineWidth; - ctx.arc(0, 0, r, ang1, ang2, false); - ctx.lineTo(ri*Math.cos(ang2), ri*Math.sin(ang2)); - ctx.arc(0,0, ri, ang2, ang1, true); - ctx.closePath(); - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - } - - if (isShadow) { - for (var i=0; i<this.shadowDepth; i++) { - ctx.restore(); - } - } - - ctx.restore(); - }; - - // called with scope of series - $.jqplot.DonutRenderer.prototype.draw = function (ctx, gd, options, plot) { - var i; - var opts = (options != undefined) ? options : {}; - // offset and direction of offset due to legend placement - var offx = 0; - var offy = 0; - var trans = 1; - // var colorGenerator = new this.colorGenerator(this.seriesColors); - if (options.legendInfo && options.legendInfo.placement == 'insideGrid') { - var li = options.legendInfo; - switch (li.location) { - case 'nw': - offx = li.width + li.xoffset; - break; - case 'w': - offx = li.width + li.xoffset; - break; - case 'sw': - offx = li.width + li.xoffset; - break; - case 'ne': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'e': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'se': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'n': - offy = li.height + li.yoffset; - break; - case 's': - offy = li.height + li.yoffset; - trans = -1; - break; - default: - break; - } - } - - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var cw = ctx.canvas.width; - var ch = ctx.canvas.height; - var w = cw - offx - 2 * this.padding; - var h = ch - offy - 2 * this.padding; - var mindim = Math.min(w,h); - var d = mindim; - var ringmargin = (this.ringMargin == null) ? this.sliceMargin * 2.0 : this.ringMargin; - - for (var i=0; i<this._previousSeries.length; i++) { - d -= 2.0 * this._previousSeries[i]._thickness + 2.0 * ringmargin; - } - this._diameter = this.diameter || d; - if (this.innerDiameter != null) { - var od = (this._numberSeries > 1 && this.index > 0) ? this._previousSeries[0]._diameter : this._diameter; - this._thickness = this.thickness || (od - this.innerDiameter - 2.0*ringmargin*this._numberSeries) / this._numberSeries/2.0; - } - else { - this._thickness = this.thickness || mindim / 2 / (this._numberSeries + 1) * 0.85; - } - - var r = this._radius = this._diameter/2; - this._innerRadius = this._radius - this._thickness; - var sa = this.startAngle / 180 * Math.PI; - this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy]; - - if (this.shadow) { - var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')'; - for (var i=0; i<gd.length; i++) { - var ang1 = (i == 0) ? sa : gd[i-1][1] + sa; - // Adjust ang1 and ang2 for sliceMargin - ang1 += this.sliceMargin/180*Math.PI; - this.renderer.drawSlice.call (this, ctx, ang1, gd[i][1]+sa, shadowColor, true); - } - - } - for (var i=0; i<gd.length; i++) { - var ang1 = (i == 0) ? sa : gd[i-1][1] + sa; - // Adjust ang1 and ang2 for sliceMargin - ang1 += this.sliceMargin/180*Math.PI; - var ang2 = gd[i][1] + sa; - this._sliceAngles.push([ang1, ang2]); - this.renderer.drawSlice.call (this, ctx, ang1, ang2, this.seriesColors[i], false); - - if (this.showDataLabels && gd[i][2]*100 >= this.dataLabelThreshold) { - var fstr, avgang = (ang1+ang2)/2, label; - - if (this.dataLabels == 'label') { - fstr = this.dataLabelFormatString || '%s'; - label = $.jqplot.sprintf(fstr, gd[i][0]); - } - else if (this.dataLabels == 'value') { - fstr = this.dataLabelFormatString || '%d'; - label = $.jqplot.sprintf(fstr, this.data[i][1]); - } - else if (this.dataLabels == 'percent') { - fstr = this.dataLabelFormatString || '%d%%'; - label = $.jqplot.sprintf(fstr, gd[i][2]*100); - } - else if (this.dataLabels.constructor == Array) { - fstr = this.dataLabelFormatString || '%s'; - label = $.jqplot.sprintf(fstr, this.dataLabels[i]); - } - - var fact = this._innerRadius + this._thickness * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge; - - var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left; - var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top; - - var labelelem = $('<span class="jqplot-donut-series jqplot-data-label" style="position:absolute;">' + label + '</span>').insertBefore(plot.eventCanvas._elem); - x -= labelelem.width()/2; - y -= labelelem.height()/2; - x = Math.round(x); - y = Math.round(y); - labelelem.css({left: x, top: y}); - } - } - - }; - - $.jqplot.DonutAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - }; - - $.jqplot.DonutAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.DonutAxisRenderer.prototype.constructor = $.jqplot.DonutAxisRenderer; - - - // There are no traditional axes on a donut chart. We just need to provide - // dummy objects with properties so the plot will render. - // called with scope of axis object. - $.jqplot.DonutAxisRenderer.prototype.init = function(options){ - // - this.tickRenderer = $.jqplot.DonutTickRenderer; - $.extend(true, this, options); - // I don't think I'm going to need _dataBounds here. - // have to go Axis scaling in a way to fit chart onto plot area - // and provide u2p and p2u functionality for mouse cursor, etc. - // for convienence set _dataBounds to 0 and 100 and - // set min/max to 0 and 100. - this._dataBounds = {min:0, max:100}; - this.min = 0; - this.max = 100; - this.showTicks = false; - this.ticks = []; - this.showMark = false; - this.show = false; - }; - - - - - $.jqplot.DonutLegendRenderer = function(){ - $.jqplot.TableLegendRenderer.call(this); - }; - - $.jqplot.DonutLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.DonutLegendRenderer.prototype.constructor = $.jqplot.DonutLegendRenderer; - - /** - * Class: $.jqplot.DonutLegendRenderer - * Legend Renderer specific to donut plots. Set by default - * when user creates a donut plot. - */ - $.jqplot.DonutLegendRenderer.prototype.init = function(options) { - // Group: Properties - // - // prop: numberRows - // Maximum number of rows in the legend. 0 or null for unlimited. - this.numberRows = null; - // prop: numberColumns - // Maximum number of columns in the legend. 0 or null for unlimited. - this.numberColumns = null; - $.extend(true, this, options); - }; - - // called with context of legend - $.jqplot.DonutLegendRenderer.prototype.draw = function() { - var legend = this; - if (this.show) { - var series = this._series; - var ss = 'position:absolute;'; - ss += (this.background) ? 'background:'+this.background+';' : ''; - ss += (this.border) ? 'border:'+this.border+';' : ''; - ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : ''; - ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : ''; - ss += (this.textColor) ? 'color:'+this.textColor+';' : ''; - ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : ''; - ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : ''; - ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : ''; - ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : ''; - this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>'); - // Donut charts legends don't go by number of series, but by number of data points - // in the series. Refactor things here for that. - - var pad = false, - reverse = false, - nr, nc; - var s = series[0]; - var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors); - - if (s.show) { - var pd = s.data; - if (this.numberRows) { - nr = this.numberRows; - if (!this.numberColumns){ - nc = Math.ceil(pd.length/nr); - } - else{ - nc = this.numberColumns; - } - } - else if (this.numberColumns) { - nc = this.numberColumns; - nr = Math.ceil(pd.length/this.numberColumns); - } - else { - nr = pd.length; - nc = 1; - } - - var i, j, tr, td1, td2, lt, rs, color; - var idx = 0; - - for (i=0; i<nr; i++) { - if (reverse){ - tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem); - } - else{ - tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem); - } - for (j=0; j<nc; j++) { - if (idx < pd.length){ - lt = this.labels[idx] || pd[idx][0].toString(); - color = colorGenerator.next(); - if (!reverse){ - if (i>0){ - pad = true; - } - else{ - pad = false; - } - } - else{ - if (i == nr -1){ - pad = false; - } - else{ - pad = true; - } - } - rs = (pad) ? this.rowSpacing : '0'; - - td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+ - '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+ - '</div></td>'); - td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>'); - if (this.escapeHtml){ - td2.text(lt); - } - else { - td2.html(lt); - } - if (reverse) { - td2.prependTo(tr); - td1.prependTo(tr); - } - else { - td1.appendTo(tr); - td2.appendTo(tr); - } - pad = true; - } - idx++; - } - } - } - } - return this._elem; - }; - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - options = options || {}; - options.axesDefaults = options.axesDefaults || {}; - options.legend = options.legend || {}; - options.seriesDefaults = options.seriesDefaults || {}; - // only set these if there is a donut series - var setopts = false; - if (options.seriesDefaults.renderer == $.jqplot.DonutRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer == $.jqplot.DonutRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.DonutAxisRenderer; - options.legend.renderer = $.jqplot.DonutLegendRenderer; - options.legend.preDraw = true; - options.seriesDefaults.pointLabels = {show: false}; - } - } - - // called with scope of plot. - function postInit(target, data, options) { - // if multiple series, add a reference to the previous one so that - // donut rings can nest. - for (var i=1; i<this.series.length; i++) { - if (!this.series[i]._previousSeries.length){ - for (var j=0; j<i; j++) { - if (this.series[i].renderer.constructor == $.jqplot.DonutRenderer && this.series[j].renderer.constructor == $.jqplot.DonutRenderer) { - this.series[i]._previousSeries.push(this.series[j]); - } - } - } - } - for (i=0; i<this.series.length; i++) { - if (this.series[i].renderer.constructor == $.jqplot.DonutRenderer) { - this.series[i]._numberSeries = this.series.length; - // don't allow mouseover and mousedown at same time. - if (this.series[i].highlightMouseOver) { - this.series[i].highlightMouseDown = false; - } - } - } - } - - var postParseOptionsRun = false; - // called with scope of plot - function postParseOptions(options) { - for (var i=0; i<this.series.length; i++) { - this.series[i].seriesColors = this.seriesColors; - this.series[i].colorGenerator = $.jqplot.colorGenerator; - } - } - - function highlight (plot, sidx, pidx) { - var s = plot.series[sidx]; - var canvas = plot.plugins.donutRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.donutRenderer.highlightedSeriesIndex = sidx; - s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColors[pidx], false); - } - - function unhighlight (plot) { - var canvas = plot.plugins.donutRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.donutRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - } - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.donutRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.donutRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { - var idx = plot.plugins.donutRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - } - - function handleClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt = jQuery.Event('jqplotDataClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - function handleRightClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var idx = plot.plugins.donutRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - var evt = jQuery.Event('jqplotDataRightClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.donutRenderer && this.plugins.donutRenderer.highlightCanvas) { - this.plugins.donutRenderer.highlightCanvas.resetCanvas(); - this.plugins.donutRenderer.highlightCanvas = null; - } - - this.plugins.donutRenderer = {highlightedSeriesIndex:null}; - this.plugins.donutRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - // do we have any data labels? if so, put highlight canvas before those - // Fix for broken jquery :first selector with canvas (VML) elements. - var labels = $(this.targetId+' .jqplot-data-label'); - if (labels.length) { - $(labels[0]).before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-donutRenderer-highlight-canvas', this._plotDimensions, this)); - } - // else put highlight canvas before event canvas. - else { - this.eventCanvas._elem.before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-donutRenderer-highlight-canvas', this._plotDimensions, this)); - } - var hctx = this.plugins.donutRenderer.highlightCanvas.setContext(); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); - } - - $.jqplot.preInitHooks.push(preInit); - - $.jqplot.DonutTickRenderer = function() { - $.jqplot.AxisTickRenderer.call(this); - }; - - $.jqplot.DonutTickRenderer.prototype = new $.jqplot.AxisTickRenderer(); - $.jqplot.DonutTickRenderer.prototype.constructor = $.jqplot.DonutTickRenderer; - -})(jQuery); - diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js deleted file mode 100644 index 13c20acb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(e){e.jqplot.DonutRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.DonutRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.DonutRenderer.prototype.constructor=e.jqplot.DonutRenderer;e.jqplot.DonutRenderer.prototype.init=function(p,t){this.diameter=null;this.innerDiameter=null;this.thickness=null;this.padding=20;this.sliceMargin=0;this.ringMargin=null;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.4;this.dataLabelNudge=0;this.startAngle=0;this.tickRenderer=e.jqplot.DonutTickRenderer;this._drawData=true;this._type="donut";if(p.highlightMouseDown&&p.highlightMouseOver==null){p.highlightMouseOver=false}e.extend(true,this,p);if(this.diameter!=null){this.diameter=this.diameter-this.sliceMargin}this._diameter=null;this._innerDiameter=null;this._radius=null;this._innerRadius=null;this._thickness=null;this._previousSeries=[];this._numberSeries=1;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var q=e.jqplot.getColorComponents(this.seriesColors[r]);var n=[q[0],q[1],q[2]];var s=n[0]+n[1]+n[2];for(var o=0;o<3;o++){n[o]=(s>570)?n[o]*0.8:n[o]+0.3*(255-n[o]);n[o]=parseInt(n[o],10)}this.highlightColors.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}}t.postParseOptionsHooks.addOnce(l);t.postInitHooks.addOnce(g);t.eventListenerHooks.addOnce("jqplotMouseMove",b);t.eventListenerHooks.addOnce("jqplotMouseDown",a);t.eventListenerHooks.addOnce("jqplotMouseUp",j);t.eventListenerHooks.addOnce("jqplotClick",f);t.eventListenerHooks.addOnce("jqplotRightClick",m);t.postDrawHooks.addOnce(h)};e.jqplot.DonutRenderer.prototype.setGridData=function(s){var o=[];var t=[];var n=this.startAngle/180*Math.PI;var r=0;this._drawData=false;for(var q=0;q<this.data.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(this.data[q][1]);t.push([this.data[q][0]]);if(q>0){o[q]+=o[q-1]}r+=this.data[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){t[q][1]=o[q]*p;t[q][2]=this.data[q][1]/r}this.gridData=t};e.jqplot.DonutRenderer.prototype.makeGridData=function(s,t){var o=[];var u=[];var r=0;var n=this.startAngle/180*Math.PI;this._drawData=false;for(var q=0;q<s.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(s[q][1]);u.push([s[q][0]]);if(q>0){o[q]+=o[q-1]}r+=s[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){u[q][1]=o[q]*p;u[q][2]=s[q][1]/r}return u};e.jqplot.DonutRenderer.prototype.drawSlice=function(x,u,t,p,s){var n=this._diameter/2;var v=n-this._thickness;var w=this.fill;x.save();x.translate(this._center[0],this._center[1]);if(s){for(var q=0;q<this.shadowDepth;q++){x.save();x.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));o()}}else{o()}function o(){if(t>6.282+this.startAngle){t=6.282+this.startAngle;if(u>t){u=6.281+this.startAngle}}if(u>=t){return}x.beginPath();x.fillStyle=p;x.strokeStyle=p;x.arc(0,0,n,u,t,false);x.lineTo(v*Math.cos(t),v*Math.sin(t));x.arc(0,0,v,t,u,true);x.closePath();if(w){x.fill()}else{x.stroke()}}if(s){for(var q=0;q<this.shadowDepth;q++){x.restore()}}x.restore()};e.jqplot.DonutRenderer.prototype.draw=function(N,V,t,P){var Q;var J=(t!=undefined)?t:{};var q=0;var p=0;var u=1;if(t.legendInfo&&t.legendInfo.placement=="insideGrid"){var I=t.legendInfo;switch(I.location){case"nw":q=I.width+I.xoffset;break;case"w":q=I.width+I.xoffset;break;case"sw":q=I.width+I.xoffset;break;case"ne":q=I.width+I.xoffset;u=-1;break;case"e":q=I.width+I.xoffset;u=-1;break;case"se":q=I.width+I.xoffset;u=-1;break;case"n":p=I.height+I.yoffset;break;case"s":p=I.height+I.yoffset;u=-1;break;default:break}}var B=(J.shadow!=undefined)?J.shadow:this.shadow;var W=(J.showLine!=undefined)?J.showLine:this.showLine;var O=(J.fill!=undefined)?J.fill:this.fill;var s=N.canvas.width;var H=N.canvas.height;var G=s-q-2*this.padding;var R=H-p-2*this.padding;var v=Math.min(G,R);var T=v;var X=(this.ringMargin==null)?this.sliceMargin*2:this.ringMargin;for(var Q=0;Q<this._previousSeries.length;Q++){T-=2*this._previousSeries[Q]._thickness+2*X}this._diameter=this.diameter||T;if(this.innerDiameter!=null){var M=(this._numberSeries>1&&this.index>0)?this._previousSeries[0]._diameter:this._diameter;this._thickness=this.thickness||(M-this.innerDiameter-2*X*this._numberSeries)/this._numberSeries/2}else{this._thickness=this.thickness||v/2/(this._numberSeries+1)*0.85}var K=this._radius=this._diameter/2;this._innerRadius=this._radius-this._thickness;var o=this.startAngle/180*Math.PI;this._center=[(s-u*q)/2+u*q,(H-u*p)/2+u*p];if(this.shadow){var L="rgba(0,0,0,"+this.shadowAlpha+")";for(var Q=0;Q<V.length;Q++){var A=(Q==0)?o:V[Q-1][1]+o;A+=this.sliceMargin/180*Math.PI;this.renderer.drawSlice.call(this,N,A,V[Q][1]+o,L,true)}}for(var Q=0;Q<V.length;Q++){var A=(Q==0)?o:V[Q-1][1]+o;A+=this.sliceMargin/180*Math.PI;var z=V[Q][1]+o;this._sliceAngles.push([A,z]);this.renderer.drawSlice.call(this,N,A,z,this.seriesColors[Q],false);if(this.showDataLabels&&V[Q][2]*100>=this.dataLabelThreshold){var S,U=(A+z)/2,C;if(this.dataLabels=="label"){S=this.dataLabelFormatString||"%s";C=e.jqplot.sprintf(S,V[Q][0])}else{if(this.dataLabels=="value"){S=this.dataLabelFormatString||"%d";C=e.jqplot.sprintf(S,this.data[Q][1])}else{if(this.dataLabels=="percent"){S=this.dataLabelFormatString||"%d%%";C=e.jqplot.sprintf(S,V[Q][2]*100)}else{if(this.dataLabels.constructor==Array){S=this.dataLabelFormatString||"%s";C=e.jqplot.sprintf(S,this.dataLabels[Q])}}}}var n=this._innerRadius+this._thickness*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var F=this._center[0]+Math.cos(U)*n+this.canvas._offsets.left;var E=this._center[1]+Math.sin(U)*n+this.canvas._offsets.top;var D=e('<span class="jqplot-donut-series jqplot-data-label" style="position:absolute;">'+C+"</span>").insertBefore(P.eventCanvas._elem);F-=D.width()/2;E-=D.height()/2;F=Math.round(F);E=Math.round(E);D.css({left:F,top:E})}}};e.jqplot.DonutAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.DonutAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.DonutAxisRenderer.prototype.constructor=e.jqplot.DonutAxisRenderer;e.jqplot.DonutAxisRenderer.prototype.init=function(n){this.tickRenderer=e.jqplot.DonutTickRenderer;e.extend(true,this,n);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.DonutLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.DonutLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.DonutLegendRenderer.prototype.constructor=e.jqplot.DonutLegendRenderer;e.jqplot.DonutLegendRenderer.prototype.init=function(n){this.numberRows=null;this.numberColumns=null;e.extend(true,this,n)};e.jqplot.DonutLegendRenderer.prototype.draw=function(){var q=this;if(this.show){var y=this._series;var B="position:absolute;";B+=(this.background)?"background:"+this.background+";":"";B+=(this.border)?"border:"+this.border+";":"";B+=(this.fontSize)?"font-size:"+this.fontSize+";":"";B+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";B+=(this.textColor)?"color:"+this.textColor+";":"";B+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";B+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";B+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";B+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+B+'"></table>');var F=false,x=false,n,v;var z=y[0];var o=new e.jqplot.ColorGenerator(z.seriesColors);if(z.show){var G=z.data;if(this.numberRows){n=this.numberRows;if(!this.numberColumns){v=Math.ceil(G.length/n)}else{v=this.numberColumns}}else{if(this.numberColumns){v=this.numberColumns;n=Math.ceil(G.length/this.numberColumns)}else{n=G.length;v=1}}var E,D,p,t,r,u,w,C;var A=0;for(E=0;E<n;E++){if(x){p=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{p=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(D=0;D<v;D++){if(A<G.length){u=this.labels[A]||G[A][0].toString();C=o.next();if(!x){if(E>0){F=true}else{F=false}}else{if(E==n-1){F=false}else{F=true}}w=(F)?this.rowSpacing:"0";t=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+w+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+C+';"></div></div></td>');r=e('<td class="jqplot-table-legend" style="padding-top:'+w+';"></td>');if(this.escapeHtml){r.text(u)}else{r.html(u)}if(x){r.prependTo(p);t.prependTo(p)}else{t.appendTo(p);r.appendTo(p)}F=true}A++}}}}return this._elem};function c(r,q,o){o=o||{};o.axesDefaults=o.axesDefaults||{};o.legend=o.legend||{};o.seriesDefaults=o.seriesDefaults||{};var n=false;if(o.seriesDefaults.renderer==e.jqplot.DonutRenderer){n=true}else{if(o.series){for(var p=0;p<o.series.length;p++){if(o.series[p].renderer==e.jqplot.DonutRenderer){n=true}}}}if(n){o.axesDefaults.renderer=e.jqplot.DonutAxisRenderer;o.legend.renderer=e.jqplot.DonutLegendRenderer;o.legend.preDraw=true;o.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=1;p<this.series.length;p++){if(!this.series[p]._previousSeries.length){for(var n=0;n<p;n++){if(this.series[p].renderer.constructor==e.jqplot.DonutRenderer&&this.series[n].renderer.constructor==e.jqplot.DonutRenderer){this.series[p]._previousSeries.push(this.series[n])}}}}for(p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.DonutRenderer){this.series[p]._numberSeries=this.series.length;if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}var k=false;function l(n){for(var o=0;o<this.series.length;o++){this.series[o].seriesColors=this.seriesColors;this.series[o].colorGenerator=e.jqplot.colorGenerator}}function d(r,q,p){var o=r.series[q];var n=r.plugins.donutRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=p;r.plugins.donutRenderer.highlightedSeriesIndex=q;o.renderer.drawSlice.call(o,n._ctx,o._sliceAngles[p][0],o._sliceAngles[p][1],o.highlightColors[p],false)}function i(p){var n=p.plugins.donutRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.donutRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.donutRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=r.which;n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);d(s,p[0],p[1])}}else{if(t==null){i(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.donutRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);d(r,o[0],o[1])}}else{if(s==null){i(r)}}}function j(p,o,s,r,q){var n=q.plugins.donutRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){i(q)}}function f(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.donutRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){i(s)}var o=jQuery.Event("jqplotDataRightClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function h(){if(this.plugins.donutRenderer&&this.plugins.donutRenderer.highlightCanvas){this.plugins.donutRenderer.highlightCanvas.resetCanvas();this.plugins.donutRenderer.highlightCanvas=null}this.plugins.donutRenderer={highlightedSeriesIndex:null};this.plugins.donutRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var o=e(this.targetId+" .jqplot-data-label");if(o.length){e(o[0]).before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-donutRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-donutRenderer-highlight-canvas",this._plotDimensions,this))}var n=this.plugins.donutRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(p){i(p.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.DonutTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.DonutTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.DonutTickRenderer.prototype.constructor=e.jqplot.DonutTickRenderer})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js deleted file mode 100644 index 9dcd892c..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js +++ /dev/null @@ -1,225 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - - /** - * Class: $.jqplot.Dragable - * Plugin to make plotted points dragable by the user. - */ - $.jqplot.Dragable = function(options) { - // Group: Properties - this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false}); - this.shapeRenderer = new $.jqplot.ShapeRenderer(); - this.isDragging = false; - this.isOver = false; - this._ctx; - this._elem; - this._point; - this._gridData; - // prop: color - // CSS color spec for the dragged point (and adjacent line segment or bar). - this.color; - // prop: constrainTo - // Constrain dragging motion to an axis or to none. - // Allowable values are 'none', 'x', 'y' - this.constrainTo = 'none'; // 'x', 'y', or 'none'; - $.extend(true, this, options); - }; - - function DragCanvas() { - $.jqplot.GenericCanvas.call(this); - this.isDragging = false; - this.isOver = false; - this._neighbor; - this._cursors = []; - } - - DragCanvas.prototype = new $.jqplot.GenericCanvas(); - DragCanvas.prototype.constructor = DragCanvas; - - - // called within scope of series - $.jqplot.Dragable.parseOptions = function (defaults, opts) { - var options = opts || {}; - this.plugins.dragable = new $.jqplot.Dragable(options.dragable); - // since this function is called before series options are parsed, - // we can set this here and it will be overridden if needed. - this.isDragable = $.jqplot.config.enablePlugins; - }; - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - // add a new DragCanvas object to the plot plugins to handle drawing on this new canvas. - $.jqplot.Dragable.postPlotDraw = function() { - // Memory Leaks patch - if (this.plugins.dragable && this.plugins.dragable.highlightCanvas) { - this.plugins.dragable.highlightCanvas.resetCanvas(); - this.plugins.dragable.highlightCanvas = null; - } - - this.plugins.dragable = {previousCursor:'auto', isOver:false}; - this.plugins.dragable.dragCanvas = new DragCanvas(); - - this.eventCanvas._elem.before(this.plugins.dragable.dragCanvas.createElement(this._gridPadding, 'jqplot-dragable-canvas', this._plotDimensions, this)); - var dctx = this.plugins.dragable.dragCanvas.setContext(); - }; - - //$.jqplot.preInitHooks.push($.jqplot.Dragable.init); - $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Dragable.parseOptions); - $.jqplot.postDrawHooks.push($.jqplot.Dragable.postPlotDraw); - $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]); - $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleDown]); - $.jqplot.eventListenerHooks.push(['jqplotMouseUp', handleUp]); - - - function initDragPoint(plot, neighbor) { - var s = plot.series[neighbor.seriesIndex]; - var drag = s.plugins.dragable; - - // first, init the mark renderer for the dragged point - var smr = s.markerRenderer; - var mr = drag.markerRenderer; - mr.style = smr.style; - mr.lineWidth = smr.lineWidth + 2.5; - mr.size = smr.size + 5; - if (!drag.color) { - var rgba = $.jqplot.getColorComponents(smr.color); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]); - drag.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')'; - } - mr.color = drag.color; - mr.init(); - - var start = (neighbor.pointIndex > 0) ? neighbor.pointIndex - 1 : 0; - var end = neighbor.pointIndex+2; - drag._gridData = s.gridData.slice(start, end); - } - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (plot.plugins.dragable.dragCanvas.isDragging) { - var dc = plot.plugins.dragable.dragCanvas; - var dp = dc._neighbor; - var s = plot.series[dp.seriesIndex]; - var drag = s.plugins.dragable; - var gd = s.gridData; - - // compute the new grid position with any constraints. - var x = (drag.constrainTo == 'y') ? dp.gridData[0] : gridpos.x; - var y = (drag.constrainTo == 'x') ? dp.gridData[1] : gridpos.y; - - // compute data values for any listeners. - var xu = s._xaxis.series_p2u(x); - var yu = s._yaxis.series_p2u(y); - - // clear the canvas then redraw effect at new position. - var ctx = dc._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - - // adjust our gridData for the new mouse position - if (dp.pointIndex > 0) { - drag._gridData[1] = [x, y]; - } - else { - drag._gridData[0] = [x, y]; - } - plot.series[dp.seriesIndex].draw(dc._ctx, {gridData:drag._gridData, shadow:false, preventJqPlotSeriesDrawTrigger:true, color:drag.color, markerOptions:{color:drag.color, shadow:false}, trendline:{show:false}}); - plot.target.trigger('jqplotSeriesPointChange', [dp.seriesIndex, dp.pointIndex, [xu,yu], [x,y]]); - } - else if (neighbor != null) { - var series = plot.series[neighbor.seriesIndex]; - if (series.isDragable) { - var dc = plot.plugins.dragable.dragCanvas; - if (!dc.isOver) { - dc._cursors.push(ev.target.style.cursor); - ev.target.style.cursor = "pointer"; - } - dc.isOver = true; - } - } - else if (neighbor == null) { - var dc = plot.plugins.dragable.dragCanvas; - if (dc.isOver) { - ev.target.style.cursor = dc._cursors.pop(); - dc.isOver = false; - } - } - } - - function handleDown(ev, gridpos, datapos, neighbor, plot) { - var dc = plot.plugins.dragable.dragCanvas; - dc._cursors.push(ev.target.style.cursor); - if (neighbor != null) { - var s = plot.series[neighbor.seriesIndex]; - var drag = s.plugins.dragable; - if (s.isDragable && !dc.isDragging) { - dc._neighbor = neighbor; - dc.isDragging = true; - initDragPoint(plot, neighbor); - drag.markerRenderer.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], dc._ctx); - ev.target.style.cursor = "move"; - plot.target.trigger('jqplotDragStart', [neighbor.seriesIndex, neighbor.pointIndex, gridpos, datapos]); - } - } - // Just in case of a hickup, we'll clear the drag canvas and reset. - else { - var ctx = dc._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - dc.isDragging = false; - } - } - - function handleUp(ev, gridpos, datapos, neighbor, plot) { - if (plot.plugins.dragable.dragCanvas.isDragging) { - var dc = plot.plugins.dragable.dragCanvas; - // clear the canvas - var ctx = dc._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - dc.isDragging = false; - // redraw the series canvas at the new point. - var dp = dc._neighbor; - var s = plot.series[dp.seriesIndex]; - var drag = s.plugins.dragable; - // compute the new grid position with any constraints. - var x = (drag.constrainTo == 'y') ? dp.data[0] : datapos[s.xaxis]; - var y = (drag.constrainTo == 'x') ? dp.data[1] : datapos[s.yaxis]; - // var x = datapos[s.xaxis]; - // var y = datapos[s.yaxis]; - s.data[dp.pointIndex][0] = x; - s.data[dp.pointIndex][1] = y; - plot.drawSeries({preventJqPlotSeriesDrawTrigger:true}, dp.seriesIndex); - dc._neighbor = null; - ev.target.style.cursor = dc._cursors.pop(); - plot.target.trigger('jqplotDragStop', [gridpos, datapos]); - } - } -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js deleted file mode 100644 index fc561ced..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(d){d.jqplot.Dragable=function(g){this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.shapeRenderer=new d.jqplot.ShapeRenderer();this.isDragging=false;this.isOver=false;this._ctx;this._elem;this._point;this._gridData;this.color;this.constrainTo="none";d.extend(true,this,g)};function b(){d.jqplot.GenericCanvas.call(this);this.isDragging=false;this.isOver=false;this._neighbor;this._cursors=[]}b.prototype=new d.jqplot.GenericCanvas();b.prototype.constructor=b;d.jqplot.Dragable.parseOptions=function(i,h){var g=h||{};this.plugins.dragable=new d.jqplot.Dragable(g.dragable);this.isDragable=d.jqplot.config.enablePlugins};d.jqplot.Dragable.postPlotDraw=function(){if(this.plugins.dragable&&this.plugins.dragable.highlightCanvas){this.plugins.dragable.highlightCanvas.resetCanvas();this.plugins.dragable.highlightCanvas=null}this.plugins.dragable={previousCursor:"auto",isOver:false};this.plugins.dragable.dragCanvas=new b();this.eventCanvas._elem.before(this.plugins.dragable.dragCanvas.createElement(this._gridPadding,"jqplot-dragable-canvas",this._plotDimensions,this));var g=this.plugins.dragable.dragCanvas.setContext()};d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Dragable.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Dragable.postPlotDraw);d.jqplot.eventListenerHooks.push(["jqplotMouseMove",e]);d.jqplot.eventListenerHooks.push(["jqplotMouseDown",c]);d.jqplot.eventListenerHooks.push(["jqplotMouseUp",a]);function f(n,p){var q=n.series[p.seriesIndex];var m=q.plugins.dragable;var h=q.markerRenderer;var i=m.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+2.5;i.size=h.size+5;if(!m.color){var l=d.jqplot.getColorComponents(h.color);var o=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);m.color="rgba("+o[0]+","+o[1]+","+o[2]+","+k+")"}i.color=m.color;i.init();var g=(p.pointIndex>0)?p.pointIndex-1:0;var j=p.pointIndex+2;m._gridData=q.gridData.slice(g,j)}function e(o,l,h,t,m){if(m.plugins.dragable.dragCanvas.isDragging){var u=m.plugins.dragable.dragCanvas;var i=u._neighbor;var w=m.series[i.seriesIndex];var k=w.plugins.dragable;var r=w.gridData;var p=(k.constrainTo=="y")?i.gridData[0]:l.x;var n=(k.constrainTo=="x")?i.gridData[1]:l.y;var g=w._xaxis.series_p2u(p);var q=w._yaxis.series_p2u(n);var v=u._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);if(i.pointIndex>0){k._gridData[1]=[p,n]}else{k._gridData[0]=[p,n]}m.series[i.seriesIndex].draw(u._ctx,{gridData:k._gridData,shadow:false,preventJqPlotSeriesDrawTrigger:true,color:k.color,markerOptions:{color:k.color,shadow:false},trendline:{show:false}});m.target.trigger("jqplotSeriesPointChange",[i.seriesIndex,i.pointIndex,[g,q],[p,n]])}else{if(t!=null){var j=m.series[t.seriesIndex];if(j.isDragable){var u=m.plugins.dragable.dragCanvas;if(!u.isOver){u._cursors.push(o.target.style.cursor);o.target.style.cursor="pointer"}u.isOver=true}}else{if(t==null){var u=m.plugins.dragable.dragCanvas;if(u.isOver){o.target.style.cursor=u._cursors.pop();u.isOver=false}}}}}function c(k,i,g,l,j){var m=j.plugins.dragable.dragCanvas;m._cursors.push(k.target.style.cursor);if(l!=null){var o=j.series[l.seriesIndex];var h=o.plugins.dragable;if(o.isDragable&&!m.isDragging){m._neighbor=l;m.isDragging=true;f(j,l);h.markerRenderer.draw(o.gridData[l.pointIndex][0],o.gridData[l.pointIndex][1],m._ctx);k.target.style.cursor="move";j.target.trigger("jqplotDragStart",[l.seriesIndex,l.pointIndex,i,g])}}else{var n=m._ctx;n.clearRect(0,0,n.canvas.width,n.canvas.height);m.isDragging=false}}function a(m,j,g,o,k){if(k.plugins.dragable.dragCanvas.isDragging){var p=k.plugins.dragable.dragCanvas;var q=p._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);p.isDragging=false;var h=p._neighbor;var r=k.series[h.seriesIndex];var i=r.plugins.dragable;var n=(i.constrainTo=="y")?h.data[0]:g[r.xaxis];var l=(i.constrainTo=="x")?h.data[1]:g[r.yaxis];r.data[h.pointIndex][0]=n;r.data[h.pointIndex][1]=l;k.drawSeries({preventJqPlotSeriesDrawTrigger:true},h.seriesIndex);p._neighbor=null;m.target.style.cursor=p._cursors.pop();k.target.trigger("jqplotDragStop",[j,g])}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js deleted file mode 100644 index a01770de..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js +++ /dev/null @@ -1,305 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - // class $.jqplot.EnhancedLegendRenderer - // Legend renderer which can specify the number of rows and/or columns in the legend. - $.jqplot.EnhancedLegendRenderer = function(){ - $.jqplot.TableLegendRenderer.call(this); - }; - - $.jqplot.EnhancedLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.EnhancedLegendRenderer.prototype.constructor = $.jqplot.EnhancedLegendRenderer; - - // called with scope of legend. - $.jqplot.EnhancedLegendRenderer.prototype.init = function(options) { - // prop: numberRows - // Maximum number of rows in the legend. 0 or null for unlimited. - this.numberRows = null; - // prop: numberColumns - // Maximum number of columns in the legend. 0 or null for unlimited. - this.numberColumns = null; - // prop: seriesToggle - // false to not enable series on/off toggling on the legend. - // true or a fadein/fadeout speed (number of milliseconds or 'fast', 'normal', 'slow') - // to enable show/hide of series on click of legend item. - this.seriesToggle = 'normal'; - // prop: seriesToggleReplot - // True to replot the chart after toggling series on/off. - // This will set the series show property to false. - // This allows for rescaling or other maniplation of chart. - // Set to an options object (e.g. {resetAxes: true}) for replot options. - this.seriesToggleReplot = false; - // prop: disableIEFading - // true to toggle series with a show/hide method only and not allow fading in/out. - // This is to overcome poor performance of fade in some versions of IE. - this.disableIEFading = true; - $.extend(true, this, options); - - if (this.seriesToggle) { - $.jqplot.postDrawHooks.push(postDraw); - } - }; - - // called with scope of legend - $.jqplot.EnhancedLegendRenderer.prototype.draw = function(offsets, plot) { - var legend = this; - if (this.show) { - var series = this._series; - var s; - var ss = 'position:absolute;'; - ss += (this.background) ? 'background:'+this.background+';' : ''; - ss += (this.border) ? 'border:'+this.border+';' : ''; - ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : ''; - ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : ''; - ss += (this.textColor) ? 'color:'+this.textColor+';' : ''; - ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : ''; - ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : ''; - ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : ''; - ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : ''; - this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>'); - if (this.seriesToggle) { - this._elem.css('z-index', '3'); - } - - var pad = false, - reverse = false, - nr, nc; - if (this.numberRows) { - nr = this.numberRows; - if (!this.numberColumns){ - nc = Math.ceil(series.length/nr); - } - else{ - nc = this.numberColumns; - } - } - else if (this.numberColumns) { - nc = this.numberColumns; - nr = Math.ceil(series.length/this.numberColumns); - } - else { - nr = series.length; - nc = 1; - } - - var i, j, tr, td1, td2, lt, rs, div, div0, div1; - var idx = 0; - // check to see if we need to reverse - for (i=series.length-1; i>=0; i--) { - if (nc == 1 && series[i]._stack || series[i].renderer.constructor == $.jqplot.BezierCurveRenderer){ - reverse = true; - } - } - - for (i=0; i<nr; i++) { - tr = $(document.createElement('tr')); - tr.addClass('jqplot-table-legend'); - if (reverse){ - tr.prependTo(this._elem); - } - else{ - tr.appendTo(this._elem); - } - for (j=0; j<nc; j++) { - if (idx < series.length && (series[idx].show || series[idx].showLabel)){ - s = series[idx]; - lt = this.labels[idx] || s.label.toString(); - if (lt) { - var color = s.color; - if (!reverse){ - if (i>0){ - pad = true; - } - else{ - pad = false; - } - } - else{ - if (i == nr -1){ - pad = false; - } - else{ - pad = true; - } - } - rs = (pad) ? this.rowSpacing : '0'; - - td1 = $(document.createElement('td')); - td1.addClass('jqplot-table-legend jqplot-table-legend-swatch'); - td1.css({textAlign: 'center', paddingTop: rs}); - - div0 = $(document.createElement('div')); - div0.addClass('jqplot-table-legend-swatch-outline'); - div1 = $(document.createElement('div')); - div1.addClass('jqplot-table-legend-swatch'); - div1.css({backgroundColor: color, borderColor: color}); - - td1.append(div0.append(div1)); - - td2 = $(document.createElement('td')); - td2.addClass('jqplot-table-legend jqplot-table-legend-label'); - td2.css('paddingTop', rs); - - // td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+ - // '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+ - // '</div></td>'); - // td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>'); - if (this.escapeHtml){ - td2.text(lt); - } - else { - td2.html(lt); - } - if (reverse) { - if (this.showLabels) {td2.prependTo(tr);} - if (this.showSwatches) {td1.prependTo(tr);} - } - else { - if (this.showSwatches) {td1.appendTo(tr);} - if (this.showLabels) {td2.appendTo(tr);} - } - - if (this.seriesToggle) { - - // add an overlay for clicking series on/off - // div0 = $(document.createElement('div')); - // div0.addClass('jqplot-table-legend-overlay'); - // div0.css({position:'relative', left:0, top:0, height:'100%', width:'100%'}); - // tr.append(div0); - - var speed; - if (typeof(this.seriesToggle) === 'string' || typeof(this.seriesToggle) === 'number') { - if (!$.jqplot.use_excanvas || !this.disableIEFading) { - speed = this.seriesToggle; - } - } - if (this.showSwatches) { - td1.bind('click', {series:s, speed:speed, plot: plot, replot:this.seriesToggleReplot}, handleToggle); - td1.addClass('jqplot-seriesToggle'); - } - if (this.showLabels) { - td2.bind('click', {series:s, speed:speed, plot: plot, replot:this.seriesToggleReplot}, handleToggle); - td2.addClass('jqplot-seriesToggle'); - } - - // for series that are already hidden, add the hidden class - if (!s.show && s.showLabel) { - td1.addClass('jqplot-series-hidden'); - td2.addClass('jqplot-series-hidden'); - } - } - - pad = true; - } - } - idx++; - } - - td1 = td2 = div0 = div1 = null; - } - } - return this._elem; - }; - - var handleToggle = function (ev) { - var d = ev.data, - s = d.series, - replot = d.replot, - plot = d.plot, - speed = d.speed, - sidx = s.index, - showing = false; - - if (s.canvas._elem.is(':hidden') || !s.show) { - showing = true; - } - - var doLegendToggle = function() { - - if (replot) { - var opts = {}; - - if ($.isPlainObject(replot)) { - $.extend(true, opts, replot); - } - - plot.replot(opts); - // if showing, there was no canvas element to fade in, so hide here - // and then do a fade in. - if (showing && speed) { - var s = plot.series[sidx]; - - if (s.shadowCanvas._elem) { - s.shadowCanvas._elem.hide().fadeIn(speed); - } - s.canvas._elem.hide().fadeIn(speed); - s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).hide().fadeIn(speed); - } - - } - - else { - var s = plot.series[sidx]; - - if (s.canvas._elem.is(':hidden') || !s.show) { - // Not sure if there is a better way to check for showSwatches and showLabels === true. - // Test for "undefined" since default values for both showSwatches and showLables is true. - if (typeof plot.options.legend.showSwatches === 'undefined' || plot.options.legend.showSwatches === true) { - plot.legend._elem.find('td').eq(sidx * 2).addClass('jqplot-series-hidden'); - } - if (typeof plot.options.legend.showLabels === 'undefined' || plot.options.legend.showLabels === true) { - plot.legend._elem.find('td').eq((sidx * 2) + 1).addClass('jqplot-series-hidden'); - } - } - else { - if (typeof plot.options.legend.showSwatches === 'undefined' || plot.options.legend.showSwatches === true) { - plot.legend._elem.find('td').eq(sidx * 2).removeClass('jqplot-series-hidden'); - } - if (typeof plot.options.legend.showLabels === 'undefined' || plot.options.legend.showLabels === true) { - plot.legend._elem.find('td').eq((sidx * 2) + 1).removeClass('jqplot-series-hidden'); - } - } - - } - - }; - - s.toggleDisplay(ev, doLegendToggle); - }; - - // called with scope of plot. - var postDraw = function () { - if (this.legend.renderer.constructor == $.jqplot.EnhancedLegendRenderer && this.legend.seriesToggle){ - var e = this.legend._elem.detach(); - this.eventCanvas._elem.after(e); - } - }; -})(jQuery); diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js deleted file mode 100644 index 029844e7..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(c){c.jqplot.EnhancedLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.EnhancedLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.EnhancedLegendRenderer.prototype.constructor=c.jqplot.EnhancedLegendRenderer;c.jqplot.EnhancedLegendRenderer.prototype.init=function(d){this.numberRows=null;this.numberColumns=null;this.seriesToggle="normal";this.seriesToggleReplot=false;this.disableIEFading=true;c.extend(true,this,d);if(this.seriesToggle){c.jqplot.postDrawHooks.push(b)}};c.jqplot.EnhancedLegendRenderer.prototype.draw=function(m,y){var f=this;if(this.show){var r=this._series;var u;var w="position:absolute;";w+=(this.background)?"background:"+this.background+";":"";w+=(this.border)?"border:"+this.border+";":"";w+=(this.fontSize)?"font-size:"+this.fontSize+";":"";w+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";w+=(this.textColor)?"color:"+this.textColor+";":"";w+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";w+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";w+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";w+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+w+'"></table>');if(this.seriesToggle){this._elem.css("z-index","3")}var C=false,q=false,d,o;if(this.numberRows){d=this.numberRows;if(!this.numberColumns){o=Math.ceil(r.length/d)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;d=Math.ceil(r.length/this.numberColumns)}else{d=r.length;o=1}}var B,z,e,l,k,n,p,t,h,g;var v=0;for(B=r.length-1;B>=0;B--){if(o==1&&r[B]._stack||r[B].renderer.constructor==c.jqplot.BezierCurveRenderer){q=true}}for(B=0;B<d;B++){e=c(document.createElement("tr"));e.addClass("jqplot-table-legend");if(q){e.prependTo(this._elem)}else{e.appendTo(this._elem)}for(z=0;z<o;z++){if(v<r.length&&(r[v].show||r[v].showLabel)){u=r[v];n=this.labels[v]||u.label.toString();if(n){var x=u.color;if(!q){if(B>0){C=true}else{C=false}}else{if(B==d-1){C=false}else{C=true}}p=(C)?this.rowSpacing:"0";l=c(document.createElement("td"));l.addClass("jqplot-table-legend jqplot-table-legend-swatch");l.css({textAlign:"center",paddingTop:p});h=c(document.createElement("div"));h.addClass("jqplot-table-legend-swatch-outline");g=c(document.createElement("div"));g.addClass("jqplot-table-legend-swatch");g.css({backgroundColor:x,borderColor:x});l.append(h.append(g));k=c(document.createElement("td"));k.addClass("jqplot-table-legend jqplot-table-legend-label");k.css("paddingTop",p);if(this.escapeHtml){k.text(n)}else{k.html(n)}if(q){if(this.showLabels){k.prependTo(e)}if(this.showSwatches){l.prependTo(e)}}else{if(this.showSwatches){l.appendTo(e)}if(this.showLabels){k.appendTo(e)}}if(this.seriesToggle){var A;if(typeof(this.seriesToggle)==="string"||typeof(this.seriesToggle)==="number"){if(!c.jqplot.use_excanvas||!this.disableIEFading){A=this.seriesToggle}}if(this.showSwatches){l.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);l.addClass("jqplot-seriesToggle")}if(this.showLabels){k.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);k.addClass("jqplot-seriesToggle")}if(!u.show&&u.showLabel){l.addClass("jqplot-series-hidden");k.addClass("jqplot-series-hidden")}}C=true}}v++}l=k=h=g=null}}return this._elem};var a=function(j){var i=j.data,m=i.series,k=i.replot,h=i.plot,f=i.speed,l=m.index,g=false;if(m.canvas._elem.is(":hidden")||!m.show){g=true}var e=function(){if(k){var n={};if(c.isPlainObject(k)){c.extend(true,n,k)}h.replot(n);if(g&&f){var d=h.series[l];if(d.shadowCanvas._elem){d.shadowCanvas._elem.hide().fadeIn(f)}d.canvas._elem.hide().fadeIn(f);d.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+d.index).hide().fadeIn(f)}}else{var d=h.series[l];if(d.canvas._elem.is(":hidden")||!d.show){if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).addClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).addClass("jqplot-series-hidden")}}else{if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).removeClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).removeClass("jqplot-series-hidden")}}}};m.toggleDisplay(j,e)};var b=function(){if(this.legend.renderer.constructor==c.jqplot.EnhancedLegendRenderer&&this.legend.seriesToggle){var d=this.legend._elem.detach();this.eventCanvas._elem.after(d)}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js deleted file mode 100644 index e79bf887..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js +++ /dev/null @@ -1,942 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.FunnelRenderer - * Plugin renderer to draw a funnel chart. - * x values, if present, will be used as labels. - * y values give area size. - * - * Funnel charts will draw a single series - * only. - * - * To use this renderer, you need to include the - * funnel renderer plugin, for example: - * - * > <script type="text/javascript" src="plugins/jqplot.funnelRenderer.js"></script> - * - * Properties described here are passed into the $.jqplot function - * as options on the series renderer. For example: - * - * > plot2 = $.jqplot('chart2', [s1, s2], { - * > seriesDefaults: { - * > renderer:$.jqplot.FunnelRenderer, - * > rendererOptions:{ - * > sectionMargin: 12, - * > widthRatio: 0.3 - * > } - * > } - * > }); - * - * IMPORTANT - * - * *The funnel renderer will reorder data in descending order* so the largest value in - * the data set is first and displayed on top of the funnel. Data will then - * be displayed in descending order down the funnel. The area of each funnel - * section will correspond to the value of each data point relative to the sum - * of all values. That is section area is proportional to section value divided by - * sum of all section values. - * - * If your data is not in descending order when passed into the plot, *it will be - * reordered* when stored in the series.data property. A copy of the unordered - * data is kept in the series._unorderedData property. - * - * A funnel plot will trigger events on the plot target - * according to user interaction. All events return the event object, - * the series index, the point (section) index, and the point data for - * the appropriate section. *Note* the point index will referr to the ordered - * data, not the original unordered data. - * - * 'jqplotDataMouseOver' - triggered when mousing over a section. - * 'jqplotDataHighlight' - triggered the first time user mouses over a section, - * if highlighting is enabled. - * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of - * a highlighted section. - * 'jqplotDataClick' - triggered when the user clicks on a section. - * 'jqplotDataRightClick' - tiggered when the user right clicks on a section if - * the "captureRightClick" option is set to true on the plot. - */ - $.jqplot.FunnelRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.FunnelRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.FunnelRenderer.prototype.constructor = $.jqplot.FunnelRenderer; - - // called with scope of a series - $.jqplot.FunnelRenderer.prototype.init = function(options, plot) { - // Group: Properties - // - // prop: padding - // padding between the funnel and plot edges, legend, etc. - this.padding = {top: 20, right: 20, bottom: 20, left: 20}; - // prop: sectionMargin - // spacing between funnel sections in pixels. - this.sectionMargin = 6; - // prop: fill - // true or false, wether to fill the areas. - this.fill = true; - // prop: shadowOffset - // offset of the shadow from the area and offset of - // each succesive stroke of the shadow from the last. - this.shadowOffset = 2; - // prop: shadowAlpha - // transparency of the shadow (0 = transparent, 1 = opaque) - this.shadowAlpha = 0.07; - // prop: shadowDepth - // number of strokes to apply to the shadow, - // each stroke offset shadowOffset from the last. - this.shadowDepth = 5; - // prop: highlightMouseOver - // True to highlight area when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on a area. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over a area. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColors - // array of colors to use when highlighting an area. - this.highlightColors = []; - // prop: widthRatio - // The ratio of the width of the top of the funnel to the bottom. - // a ratio of 0 will make an upside down pyramid. - this.widthRatio = 0.2; - // prop: lineWidth - // width of line if areas are stroked and not filled. - this.lineWidth = 2; - // prop: dataLabels - // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices. - // Defaults to percentage of each pie slice. - this.dataLabels = 'percent'; - // prop: showDataLabels - // true to show data labels on slices. - this.showDataLabels = false; - // prop: dataLabelFormatString - // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage. - this.dataLabelFormatString = null; - // prop: dataLabelThreshold - // Threshhold in percentage (0 - 100) of pie area, below which no label will be displayed. - // This applies to all label types, not just to percentage labels. - this.dataLabelThreshold = 3; - this._type = 'funnel'; - - this.tickRenderer = $.jqplot.FunnelTickRenderer; - - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (options.highlightMouseDown && options.highlightMouseOver == null) { - options.highlightMouseOver = false; - } - - $.extend(true, this, options); - - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - - // lengths of bases, or horizontal sides of areas of trapezoid. - this._bases = []; - // total area - this._atot; - // areas of segments. - this._areas = []; - // vertical lengths of segments. - this._lengths = []; - // angle of the funnel to vertical. - this._angle; - this._dataIndices = []; - - // sort data - this._unorderedData = $.extend(true, [], this.data); - var idxs = $.extend(true, [], this.data); - for (var i=0; i<idxs.length; i++) { - idxs[i].push(i); - } - this.data.sort( function (a, b) { return b[1] - a[1]; } ); - idxs.sort( function (a, b) { return b[1] - a[1]; }); - for (var i=0; i<idxs.length; i++) { - this._dataIndices.push(idxs[i][2]); - } - - // set highlight colors if none provided - if (this.highlightColors.length == 0) { - for (var i=0; i<this.seriesColors.length; i++){ - var rgba = $.jqplot.getColorComponents(this.seriesColors[i]); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.4 * (255 - newrgb[j]); - newrgb[j] = parseInt(newrgb[j], 10); - } - this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')'); - } - } - - plot.postParseOptionsHooks.addOnce(postParseOptions); - plot.postInitHooks.addOnce(postInit); - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); - plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); - plot.eventListenerHooks.addOnce('jqplotClick', handleClick); - plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); - plot.postDrawHooks.addOnce(postPlotDraw); - - }; - - // gridData will be of form [label, percentage of total] - $.jqplot.FunnelRenderer.prototype.setGridData = function(plot) { - // set gridData property. This will hold angle in radians of each data point. - var sum = 0; - var td = []; - for (var i=0; i<this.data.length; i++){ - sum += this.data[i][1]; - td.push([this.data[i][0], this.data[i][1]]); - } - - // normalize y values, so areas are proportional. - for (var i=0; i<td.length; i++) { - td[i][1] = td[i][1]/sum; - } - - this._bases = new Array(td.length + 1); - this._lengths = new Array(td.length); - - this.gridData = td; - }; - - $.jqplot.FunnelRenderer.prototype.makeGridData = function(data, plot) { - // set gridData property. This will hold angle in radians of each data point. - var sum = 0; - var td = []; - for (var i=0; i<this.data.length; i++){ - sum += this.data[i][1]; - td.push([this.data[i][0], this.data[i][1]]); - } - - // normalize y values, so areas are proportional. - for (var i=0; i<td.length; i++) { - td[i][1] = td[i][1]/sum; - } - - this._bases = new Array(td.length + 1); - this._lengths = new Array(td.length); - - return td; - }; - - $.jqplot.FunnelRenderer.prototype.drawSection = function (ctx, vertices, color, isShadow) { - var fill = this.fill; - var lineWidth = this.lineWidth; - ctx.save(); - - if (isShadow) { - for (var i=0; i<this.shadowDepth; i++) { - ctx.save(); - ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI)); - doDraw(); - } - } - - else { - doDraw(); - } - - function doDraw () { - ctx.beginPath(); - ctx.fillStyle = color; - ctx.strokeStyle = color; - ctx.lineWidth = lineWidth; - ctx.moveTo(vertices[0][0], vertices[0][1]); - for (var i=1; i<4; i++) { - ctx.lineTo(vertices[i][0], vertices[i][1]); - } - ctx.closePath(); - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - } - - if (isShadow) { - for (var i=0; i<this.shadowDepth; i++) { - ctx.restore(); - } - } - - ctx.restore(); - }; - - // called with scope of series - $.jqplot.FunnelRenderer.prototype.draw = function (ctx, gd, options, plot) { - var i; - var opts = (options != undefined) ? options : {}; - // offset and direction of offset due to legend placement - var offx = 0; - var offy = 0; - var trans = 1; - this._areas = []; - // var colorGenerator = new this.colorGenerator(this.seriesColors); - if (options.legendInfo && options.legendInfo.placement == 'insideGrid') { - var li = options.legendInfo; - switch (li.location) { - case 'nw': - offx = li.width + li.xoffset; - break; - case 'w': - offx = li.width + li.xoffset; - break; - case 'sw': - offx = li.width + li.xoffset; - break; - case 'ne': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'e': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'se': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'n': - offy = li.height + li.yoffset; - break; - case 's': - offy = li.height + li.yoffset; - trans = -1; - break; - default: - break; - } - } - - var loff = (trans==1) ? this.padding.left + offx : this.padding.left; - var toff = (trans==1) ? this.padding.top + offy : this.padding.top; - var roff = (trans==-1) ? this.padding.right + offx : this.padding.right; - var boff = (trans==-1) ? this.padding.bottom + offy : this.padding.bottom; - - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var cw = ctx.canvas.width; - var ch = ctx.canvas.height; - this._bases[0] = cw - loff - roff; - var ltot = this._length = ch - toff - boff; - - var hend = this._bases[0]*this.widthRatio; - this._atot = ltot/2 * (this._bases[0] + this._bases[0]*this.widthRatio); - - this._angle = Math.atan((this._bases[0] - hend)/2/ltot); - - for (i=0; i<gd.length; i++) { - this._areas.push(gd[i][1] * this._atot); - } - - - var guess, err, count, lsum=0; - var tolerance = 0.0001; - - for (i=0; i<this._areas.length; i++) { - guess = this._areas[i]/this._bases[i]; - err = 999999; - this._lengths[i] = guess; - count = 0; - while (err > this._lengths[i]*tolerance && count < 100) { - this._lengths[i] = this._areas[i]/(this._bases[i] - this._lengths[i] * Math.tan(this._angle)); - err = Math.abs(this._lengths[i] - guess); - this._bases[i+1] = this._bases[i] - (2*this._lengths[i]*Math.tan(this._angle)); - guess = this._lengths[i]; - count++; - } - lsum += this._lengths[i]; - } - - // figure out vertices of each section - this._vertices = new Array(gd.length); - - // these are 4 coners of entire trapezoid - var p0 = [loff, toff], - p1 = [loff+this._bases[0], toff], - p2 = [loff + (this._bases[0] - this._bases[this._bases.length-1])/2, toff + this._length], - p3 = [p2[0] + this._bases[this._bases.length-1], p2[1]]; - - // equations of right and left sides, returns x, y values given height of section (y value) - function findleft (l) { - var m = (p0[1] - p2[1])/(p0[0] - p2[0]); - var b = p0[1] - m*p0[0]; - var y = l + p0[1]; - - return [(y - b)/m, y]; - } - - function findright (l) { - var m = (p1[1] - p3[1])/(p1[0] - p3[0]); - var b = p1[1] - m*p1[0]; - var y = l + p1[1]; - - return [(y - b)/m, y]; - } - - var x = offx, y = offy; - var h=0, adj=0; - - for (i=0; i<gd.length; i++) { - this._vertices[i] = new Array(); - var v = this._vertices[i]; - var sm = this.sectionMargin; - if (i == 0) { - adj = 0; - } - if (i == 1) { - adj = sm/3; - } - else if (i > 0 && i < gd.length-1) { - adj = sm/2; - } - else if (i == gd.length -1) { - adj = 2*sm/3; - } - v.push(findleft(h+adj)); - v.push(findright(h+adj)); - h += this._lengths[i]; - if (i == 0) { - adj = -2*sm/3; - } - else if (i > 0 && i < gd.length-1) { - adj = -sm/2; - } - else if (i == gd.length - 1) { - adj = 0; - } - v.push(findright(h+adj)); - v.push(findleft(h+adj)); - - } - - if (this.shadow) { - var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')'; - for (var i=0; i<gd.length; i++) { - this.renderer.drawSection.call (this, ctx, this._vertices[i], shadowColor, true); - } - - } - for (var i=0; i<gd.length; i++) { - var v = this._vertices[i]; - this.renderer.drawSection.call (this, ctx, v, this.seriesColors[i]); - - if (this.showDataLabels && gd[i][1]*100 >= this.dataLabelThreshold) { - var fstr, label; - - if (this.dataLabels == 'label') { - fstr = this.dataLabelFormatString || '%s'; - label = $.jqplot.sprintf(fstr, gd[i][0]); - } - else if (this.dataLabels == 'value') { - fstr = this.dataLabelFormatString || '%d'; - label = $.jqplot.sprintf(fstr, this.data[i][1]); - } - else if (this.dataLabels == 'percent') { - fstr = this.dataLabelFormatString || '%d%%'; - label = $.jqplot.sprintf(fstr, gd[i][1]*100); - } - else if (this.dataLabels.constructor == Array) { - fstr = this.dataLabelFormatString || '%s'; - label = $.jqplot.sprintf(fstr, this.dataLabels[this._dataIndices[i]]); - } - - var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge; - - var x = (v[0][0] + v[1][0])/2 + this.canvas._offsets.left; - var y = (v[1][1] + v[2][1])/2 + this.canvas._offsets.top; - - var labelelem = $('<span class="jqplot-funnel-series jqplot-data-label" style="position:absolute;">' + label + '</span>').insertBefore(plot.eventCanvas._elem); - x -= labelelem.width()/2; - y -= labelelem.height()/2; - x = Math.round(x); - y = Math.round(y); - labelelem.css({left: x, top: y}); - } - - } - - }; - - $.jqplot.FunnelAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - }; - - $.jqplot.FunnelAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.FunnelAxisRenderer.prototype.constructor = $.jqplot.FunnelAxisRenderer; - - - // There are no traditional axes on a funnel chart. We just need to provide - // dummy objects with properties so the plot will render. - // called with scope of axis object. - $.jqplot.FunnelAxisRenderer.prototype.init = function(options){ - // - this.tickRenderer = $.jqplot.FunnelTickRenderer; - $.extend(true, this, options); - // I don't think I'm going to need _dataBounds here. - // have to go Axis scaling in a way to fit chart onto plot area - // and provide u2p and p2u functionality for mouse cursor, etc. - // for convienence set _dataBounds to 0 and 100 and - // set min/max to 0 and 100. - this._dataBounds = {min:0, max:100}; - this.min = 0; - this.max = 100; - this.showTicks = false; - this.ticks = []; - this.showMark = false; - this.show = false; - }; - - - - /** - * Class: $.jqplot.FunnelLegendRenderer - * Legend Renderer specific to funnel plots. Set by default - * when the user creates a funnel plot. - */ - $.jqplot.FunnelLegendRenderer = function(){ - $.jqplot.TableLegendRenderer.call(this); - }; - - $.jqplot.FunnelLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.FunnelLegendRenderer.prototype.constructor = $.jqplot.FunnelLegendRenderer; - - $.jqplot.FunnelLegendRenderer.prototype.init = function(options) { - // Group: Properties - // - // prop: numberRows - // Maximum number of rows in the legend. 0 or null for unlimited. - this.numberRows = null; - // prop: numberColumns - // Maximum number of columns in the legend. 0 or null for unlimited. - this.numberColumns = null; - $.extend(true, this, options); - }; - - // called with context of legend - $.jqplot.FunnelLegendRenderer.prototype.draw = function() { - var legend = this; - if (this.show) { - var series = this._series; - var ss = 'position:absolute;'; - ss += (this.background) ? 'background:'+this.background+';' : ''; - ss += (this.border) ? 'border:'+this.border+';' : ''; - ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : ''; - ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : ''; - ss += (this.textColor) ? 'color:'+this.textColor+';' : ''; - ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : ''; - ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : ''; - ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : ''; - ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : ''; - this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>'); - // Funnel charts legends don't go by number of series, but by number of data points - // in the series. Refactor things here for that. - - var pad = false, - reverse = false, - nr, nc; - var s = series[0]; - var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors); - - if (s.show) { - var pd = s.data; - if (this.numberRows) { - nr = this.numberRows; - if (!this.numberColumns){ - nc = Math.ceil(pd.length/nr); - } - else{ - nc = this.numberColumns; - } - } - else if (this.numberColumns) { - nc = this.numberColumns; - nr = Math.ceil(pd.length/this.numberColumns); - } - else { - nr = pd.length; - nc = 1; - } - - var i, j, tr, td1, td2, lt, rs, color; - var idx = 0; - - for (i=0; i<nr; i++) { - if (reverse){ - tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem); - } - else{ - tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem); - } - for (j=0; j<nc; j++) { - if (idx < pd.length){ - lt = this.labels[idx] || pd[idx][0].toString(); - color = colorGenerator.next(); - if (!reverse){ - if (i>0){ - pad = true; - } - else{ - pad = false; - } - } - else{ - if (i == nr -1){ - pad = false; - } - else{ - pad = true; - } - } - rs = (pad) ? this.rowSpacing : '0'; - - td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+ - '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+ - '</div></td>'); - td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>'); - if (this.escapeHtml){ - td2.text(lt); - } - else { - td2.html(lt); - } - if (reverse) { - td2.prependTo(tr); - td1.prependTo(tr); - } - else { - td1.appendTo(tr); - td2.appendTo(tr); - } - pad = true; - } - idx++; - } - } - } - } - return this._elem; - }; - - // $.jqplot.FunnelLegendRenderer.prototype.pack = function(offsets) { - // if (this.show) { - // // fake a grid for positioning - // var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom}; - // if (this.placement == 'insideGrid') { - // switch (this.location) { - // case 'nw': - // var a = grid._left + this.xoffset; - // var b = grid._top + this.yoffset; - // this._elem.css('left', a); - // this._elem.css('top', b); - // break; - // case 'n': - // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - // var b = grid._top + this.yoffset; - // this._elem.css('left', a); - // this._elem.css('top', b); - // break; - // case 'ne': - // var a = offsets.right + this.xoffset; - // var b = grid._top + this.yoffset; - // this._elem.css({right:a, top:b}); - // break; - // case 'e': - // var a = offsets.right + this.xoffset; - // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - // this._elem.css({right:a, top:b}); - // break; - // case 'se': - // var a = offsets.right + this.xoffset; - // var b = offsets.bottom + this.yoffset; - // this._elem.css({right:a, bottom:b}); - // break; - // case 's': - // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - // var b = offsets.bottom + this.yoffset; - // this._elem.css({left:a, bottom:b}); - // break; - // case 'sw': - // var a = grid._left + this.xoffset; - // var b = offsets.bottom + this.yoffset; - // this._elem.css({left:a, bottom:b}); - // break; - // case 'w': - // var a = grid._left + this.xoffset; - // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - // this._elem.css({left:a, top:b}); - // break; - // default: // same as 'se' - // var a = grid._right - this.xoffset; - // var b = grid._bottom + this.yoffset; - // this._elem.css({right:a, bottom:b}); - // break; - // } - // - // } - // else { - // switch (this.location) { - // case 'nw': - // var a = this._plotDimensions.width - grid._left + this.xoffset; - // var b = grid._top + this.yoffset; - // this._elem.css('right', a); - // this._elem.css('top', b); - // break; - // case 'n': - // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - // var b = this._plotDimensions.height - grid._top + this.yoffset; - // this._elem.css('left', a); - // this._elem.css('bottom', b); - // break; - // case 'ne': - // var a = this._plotDimensions.width - offsets.right + this.xoffset; - // var b = grid._top + this.yoffset; - // this._elem.css({left:a, top:b}); - // break; - // case 'e': - // var a = this._plotDimensions.width - offsets.right + this.xoffset; - // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - // this._elem.css({left:a, top:b}); - // break; - // case 'se': - // var a = this._plotDimensions.width - offsets.right + this.xoffset; - // var b = offsets.bottom + this.yoffset; - // this._elem.css({left:a, bottom:b}); - // break; - // case 's': - // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - // var b = this._plotDimensions.height - offsets.bottom + this.yoffset; - // this._elem.css({left:a, top:b}); - // break; - // case 'sw': - // var a = this._plotDimensions.width - grid._left + this.xoffset; - // var b = offsets.bottom + this.yoffset; - // this._elem.css({right:a, bottom:b}); - // break; - // case 'w': - // var a = this._plotDimensions.width - grid._left + this.xoffset; - // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - // this._elem.css({right:a, top:b}); - // break; - // default: // same as 'se' - // var a = grid._right - this.xoffset; - // var b = grid._bottom + this.yoffset; - // this._elem.css({right:a, bottom:b}); - // break; - // } - // } - // } - // }; - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - options = options || {}; - options.axesDefaults = options.axesDefaults || {}; - options.legend = options.legend || {}; - options.seriesDefaults = options.seriesDefaults || {}; - // only set these if there is a funnel series - var setopts = false; - if (options.seriesDefaults.renderer == $.jqplot.FunnelRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer == $.jqplot.FunnelRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.FunnelAxisRenderer; - options.legend.renderer = $.jqplot.FunnelLegendRenderer; - options.legend.preDraw = true; - options.sortData = false; - options.seriesDefaults.pointLabels = {show: false}; - } - } - - function postInit(target, data, options) { - // if multiple series, add a reference to the previous one so that - // funnel rings can nest. - for (var i=0; i<this.series.length; i++) { - if (this.series[i].renderer.constructor == $.jqplot.FunnelRenderer) { - // don't allow mouseover and mousedown at same time. - if (this.series[i].highlightMouseOver) { - this.series[i].highlightMouseDown = false; - } - } - } - } - - // called with scope of plot - function postParseOptions(options) { - for (var i=0; i<this.series.length; i++) { - this.series[i].seriesColors = this.seriesColors; - this.series[i].colorGenerator = $.jqplot.colorGenerator; - } - } - - function highlight (plot, sidx, pidx) { - var s = plot.series[sidx]; - var canvas = plot.plugins.funnelRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.funnelRenderer.highlightedSeriesIndex = sidx; - s.renderer.drawSection.call(s, canvas._ctx, s._vertices[pidx], s.highlightColors[pidx], false); - } - - function unhighlight (plot) { - var canvas = plot.plugins.funnelRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.funnelRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - } - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.funnelRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.funnelRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { - var idx = plot.plugins.funnelRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - } - - function handleClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt = jQuery.Event('jqplotDataClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - function handleRightClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var idx = plot.plugins.funnelRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - var evt = jQuery.Event('jqplotDataRightClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.funnelRenderer && this.plugins.funnelRenderer.highlightCanvas) { - this.plugins.funnelRenderer.highlightCanvas.resetCanvas(); - this.plugins.funnelRenderer.highlightCanvas = null; - } - - this.plugins.funnelRenderer = {}; - this.plugins.funnelRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - - // do we have any data labels? if so, put highlight canvas before those - var labels = $(this.targetId+' .jqplot-data-label'); - if (labels.length) { - $(labels[0]).before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-funnelRenderer-highlight-canvas', this._plotDimensions, this)); - } - // else put highlight canvas before event canvas. - else { - this.eventCanvas._elem.before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-funnelRenderer-highlight-canvas', this._plotDimensions, this)); - } - var hctx = this.plugins.funnelRenderer.highlightCanvas.setContext(); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); - } - - $.jqplot.preInitHooks.push(preInit); - - $.jqplot.FunnelTickRenderer = function() { - $.jqplot.AxisTickRenderer.call(this); - }; - - $.jqplot.FunnelTickRenderer.prototype = new $.jqplot.AxisTickRenderer(); - $.jqplot.FunnelTickRenderer.prototype.constructor = $.jqplot.FunnelTickRenderer; - -})(jQuery); - diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js deleted file mode 100644 index 4261ce02..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(e){e.jqplot.FunnelRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.FunnelRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.FunnelRenderer.prototype.constructor=e.jqplot.FunnelRenderer;e.jqplot.FunnelRenderer.prototype.init=function(p,t){this.padding={top:20,right:20,bottom:20,left:20};this.sectionMargin=6;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.widthRatio=0.2;this.lineWidth=2;this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this._type="funnel";this.tickRenderer=e.jqplot.FunnelTickRenderer;if(p.highlightMouseDown&&p.highlightMouseOver==null){p.highlightMouseOver=false}e.extend(true,this,p);this._highlightedPoint=null;this._bases=[];this._atot;this._areas=[];this._lengths=[];this._angle;this._dataIndices=[];this._unorderedData=e.extend(true,[],this.data);var o=e.extend(true,[],this.data);for(var r=0;r<o.length;r++){o[r].push(r)}this.data.sort(function(v,u){return u[1]-v[1]});o.sort(function(v,u){return u[1]-v[1]});for(var r=0;r<o.length;r++){this._dataIndices.push(o[r][2])}if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var q=e.jqplot.getColorComponents(this.seriesColors[r]);var m=[q[0],q[1],q[2]];var s=m[0]+m[1]+m[2];for(var n=0;n<3;n++){m[n]=(s>570)?m[n]*0.8:m[n]+0.4*(255-m[n]);m[n]=parseInt(m[n],10)}this.highlightColors.push("rgb("+m[0]+","+m[1]+","+m[2]+")")}}t.postParseOptionsHooks.addOnce(k);t.postInitHooks.addOnce(g);t.eventListenerHooks.addOnce("jqplotMouseMove",a);t.eventListenerHooks.addOnce("jqplotMouseDown",b);t.eventListenerHooks.addOnce("jqplotMouseUp",j);t.eventListenerHooks.addOnce("jqplotClick",f);t.eventListenerHooks.addOnce("jqplotRightClick",l);t.postDrawHooks.addOnce(h)};e.jqplot.FunnelRenderer.prototype.setGridData=function(o){var n=0;var p=[];for(var m=0;m<this.data.length;m++){n+=this.data[m][1];p.push([this.data[m][0],this.data[m][1]])}for(var m=0;m<p.length;m++){p[m][1]=p[m][1]/n}this._bases=new Array(p.length+1);this._lengths=new Array(p.length);this.gridData=p};e.jqplot.FunnelRenderer.prototype.makeGridData=function(o,p){var n=0;var q=[];for(var m=0;m<this.data.length;m++){n+=this.data[m][1];q.push([this.data[m][0],this.data[m][1]])}for(var m=0;m<q.length;m++){q[m][1]=q[m][1]/n}this._bases=new Array(q.length+1);this._lengths=new Array(q.length);return q};e.jqplot.FunnelRenderer.prototype.drawSection=function(n,p,o,s){var t=this.fill;var m=this.lineWidth;n.save();if(s){for(var r=0;r<this.shadowDepth;r++){n.save();n.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q()}}else{q()}function q(){n.beginPath();n.fillStyle=o;n.strokeStyle=o;n.lineWidth=m;n.moveTo(p[0][0],p[0][1]);for(var u=1;u<4;u++){n.lineTo(p[u][0],p[u][1])}n.closePath();if(t){n.fill()}else{n.stroke()}}if(s){for(var r=0;r<this.shadowDepth;r++){n.restore()}}n.restore()};e.jqplot.FunnelRenderer.prototype.draw=function(G,B,J,p){var Y;var L=(J!=undefined)?J:{};var w=0;var u=0;var R=1;this._areas=[];if(J.legendInfo&&J.legendInfo.placement=="insideGrid"){var O=J.legendInfo;switch(O.location){case"nw":w=O.width+O.xoffset;break;case"w":w=O.width+O.xoffset;break;case"sw":w=O.width+O.xoffset;break;case"ne":w=O.width+O.xoffset;R=-1;break;case"e":w=O.width+O.xoffset;R=-1;break;case"se":w=O.width+O.xoffset;R=-1;break;case"n":u=O.height+O.yoffset;break;case"s":u=O.height+O.yoffset;R=-1;break;default:break}}var t=(R==1)?this.padding.left+w:this.padding.left;var F=(R==1)?this.padding.top+u:this.padding.top;var M=(R==-1)?this.padding.right+w:this.padding.right;var o=(R==-1)?this.padding.bottom+u:this.padding.bottom;var P=(L.shadow!=undefined)?L.shadow:this.shadow;var q=(L.showLine!=undefined)?L.showLine:this.showLine;var C=(L.fill!=undefined)?L.fill:this.fill;var H=G.canvas.width;var N=G.canvas.height;this._bases[0]=H-t-M;var I=this._length=N-F-o;var r=this._bases[0]*this.widthRatio;this._atot=I/2*(this._bases[0]+this._bases[0]*this.widthRatio);this._angle=Math.atan((this._bases[0]-r)/2/I);for(Y=0;Y<B.length;Y++){this._areas.push(B[Y][1]*this._atot)}var E,aa,W,Q=0;var n=0.0001;for(Y=0;Y<this._areas.length;Y++){E=this._areas[Y]/this._bases[Y];aa=999999;this._lengths[Y]=E;W=0;while(aa>this._lengths[Y]*n&&W<100){this._lengths[Y]=this._areas[Y]/(this._bases[Y]-this._lengths[Y]*Math.tan(this._angle));aa=Math.abs(this._lengths[Y]-E);this._bases[Y+1]=this._bases[Y]-(2*this._lengths[Y]*Math.tan(this._angle));E=this._lengths[Y];W++}Q+=this._lengths[Y]}this._vertices=new Array(B.length);var ae=[t,F],ad=[t+this._bases[0],F],ac=[t+(this._bases[0]-this._bases[this._bases.length-1])/2,F+this._length],ab=[ac[0]+this._bases[this._bases.length-1],ac[1]];function V(ag){var x=(ae[1]-ac[1])/(ae[0]-ac[0]);var v=ae[1]-x*ae[0];var ah=ag+ae[1];return[(ah-v)/x,ah]}function D(ag){var x=(ad[1]-ab[1])/(ad[0]-ab[0]);var v=ad[1]-x*ad[0];var ah=ag+ad[1];return[(ah-v)/x,ah]}var T=w,S=u;var Z=0,m=0;for(Y=0;Y<B.length;Y++){this._vertices[Y]=new Array();var U=this._vertices[Y];var A=this.sectionMargin;if(Y==0){m=0}if(Y==1){m=A/3}else{if(Y>0&&Y<B.length-1){m=A/2}else{if(Y==B.length-1){m=2*A/3}}}U.push(V(Z+m));U.push(D(Z+m));Z+=this._lengths[Y];if(Y==0){m=-2*A/3}else{if(Y>0&&Y<B.length-1){m=-A/2}else{if(Y==B.length-1){m=0}}}U.push(D(Z+m));U.push(V(Z+m))}if(this.shadow){var af="rgba(0,0,0,"+this.shadowAlpha+")";for(var Y=0;Y<B.length;Y++){this.renderer.drawSection.call(this,G,this._vertices[Y],af,true)}}for(var Y=0;Y<B.length;Y++){var U=this._vertices[Y];this.renderer.drawSection.call(this,G,U,this.seriesColors[Y]);if(this.showDataLabels&&B[Y][1]*100>=this.dataLabelThreshold){var K,X;if(this.dataLabels=="label"){K=this.dataLabelFormatString||"%s";X=e.jqplot.sprintf(K,B[Y][0])}else{if(this.dataLabels=="value"){K=this.dataLabelFormatString||"%d";X=e.jqplot.sprintf(K,this.data[Y][1])}else{if(this.dataLabels=="percent"){K=this.dataLabelFormatString||"%d%%";X=e.jqplot.sprintf(K,B[Y][1]*100)}else{if(this.dataLabels.constructor==Array){K=this.dataLabelFormatString||"%s";X=e.jqplot.sprintf(K,this.dataLabels[this._dataIndices[Y]])}}}}var s=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var T=(U[0][0]+U[1][0])/2+this.canvas._offsets.left;var S=(U[1][1]+U[2][1])/2+this.canvas._offsets.top;var z=e('<span class="jqplot-funnel-series jqplot-data-label" style="position:absolute;">'+X+"</span>").insertBefore(p.eventCanvas._elem);T-=z.width()/2;S-=z.height()/2;T=Math.round(T);S=Math.round(S);z.css({left:T,top:S})}}};e.jqplot.FunnelAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.FunnelAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.FunnelAxisRenderer.prototype.constructor=e.jqplot.FunnelAxisRenderer;e.jqplot.FunnelAxisRenderer.prototype.init=function(m){this.tickRenderer=e.jqplot.FunnelTickRenderer;e.extend(true,this,m);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.FunnelLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.FunnelLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.FunnelLegendRenderer.prototype.constructor=e.jqplot.FunnelLegendRenderer;e.jqplot.FunnelLegendRenderer.prototype.init=function(m){this.numberRows=null;this.numberColumns=null;e.extend(true,this,m)};e.jqplot.FunnelLegendRenderer.prototype.draw=function(){var p=this;if(this.show){var x=this._series;var A="position:absolute;";A+=(this.background)?"background:"+this.background+";":"";A+=(this.border)?"border:"+this.border+";":"";A+=(this.fontSize)?"font-size:"+this.fontSize+";":"";A+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";A+=(this.textColor)?"color:"+this.textColor+";":"";A+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";A+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";A+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";A+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+A+'"></table>');var E=false,w=false,m,u;var y=x[0];var n=new e.jqplot.ColorGenerator(y.seriesColors);if(y.show){var F=y.data;if(this.numberRows){m=this.numberRows;if(!this.numberColumns){u=Math.ceil(F.length/m)}else{u=this.numberColumns}}else{if(this.numberColumns){u=this.numberColumns;m=Math.ceil(F.length/this.numberColumns)}else{m=F.length;u=1}}var D,C,o,r,q,t,v,B;var z=0;for(D=0;D<m;D++){if(w){o=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{o=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(C=0;C<u;C++){if(z<F.length){t=this.labels[z]||F[z][0].toString();B=n.next();if(!w){if(D>0){E=true}else{E=false}}else{if(D==m-1){E=false}else{E=true}}v=(E)?this.rowSpacing:"0";r=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+v+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+B+';"></div></div></td>');q=e('<td class="jqplot-table-legend" style="padding-top:'+v+';"></td>');if(this.escapeHtml){q.text(t)}else{q.html(t)}if(w){q.prependTo(o);r.prependTo(o)}else{r.appendTo(o);q.appendTo(o)}E=true}z++}}}}return this._elem};function c(q,p,n){n=n||{};n.axesDefaults=n.axesDefaults||{};n.legend=n.legend||{};n.seriesDefaults=n.seriesDefaults||{};var m=false;if(n.seriesDefaults.renderer==e.jqplot.FunnelRenderer){m=true}else{if(n.series){for(var o=0;o<n.series.length;o++){if(n.series[o].renderer==e.jqplot.FunnelRenderer){m=true}}}}if(m){n.axesDefaults.renderer=e.jqplot.FunnelAxisRenderer;n.legend.renderer=e.jqplot.FunnelLegendRenderer;n.legend.preDraw=true;n.sortData=false;n.seriesDefaults.pointLabels={show:false}}}function g(p,o,m){for(var n=0;n<this.series.length;n++){if(this.series[n].renderer.constructor==e.jqplot.FunnelRenderer){if(this.series[n].highlightMouseOver){this.series[n].highlightMouseDown=false}}}}function k(m){for(var n=0;n<this.series.length;n++){this.series[n].seriesColors=this.seriesColors;this.series[n].colorGenerator=e.jqplot.colorGenerator}}function d(q,p,o){var n=q.series[p];var m=q.plugins.funnelRenderer.highlightCanvas;m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);n._highlightedPoint=o;q.plugins.funnelRenderer.highlightedSeriesIndex=p;n.renderer.drawSection.call(n,m._ctx,n._vertices[o],n.highlightColors[o],false)}function i(o){var m=o.plugins.funnelRenderer.highlightCanvas;m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);for(var n=0;n<o.series.length;n++){o.series[n]._highlightedPoint=null}o.plugins.funnelRenderer.highlightedSeriesIndex=null;o.target.trigger("jqplotDataUnhighlight")}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataMouseOver");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.funnelRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var m=jQuery.Event("jqplotDataHighlight");m.which=q.which;m.pageX=q.pageX;m.pageY=q.pageY;r.target.trigger(m,o);d(r,o[0],o[1])}}else{if(s==null){i(r)}}}function b(p,o,s,r,q){if(r){var n=[r.seriesIndex,r.pointIndex,r.data];if(q.series[n[0]].highlightMouseDown&&!(n[0]==q.plugins.funnelRenderer.highlightedSeriesIndex&&n[1]==q.series[n[0]]._highlightedPoint)){var m=jQuery.Event("jqplotDataHighlight");m.which=p.which;m.pageX=p.pageX;m.pageY=p.pageY;q.target.trigger(m,n);d(q,n[0],n[1])}}else{if(r==null){i(q)}}}function j(o,n,r,q,p){var m=p.plugins.funnelRenderer.highlightedSeriesIndex;if(m!=null&&p.series[m].highlightMouseDown){i(p)}}function f(p,o,s,r,q){if(r){var n=[r.seriesIndex,r.pointIndex,r.data];var m=jQuery.Event("jqplotDataClick");m.which=p.which;m.pageX=p.pageX;m.pageY=p.pageY;q.target.trigger(m,n)}}function l(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var m=r.plugins.funnelRenderer.highlightedSeriesIndex;if(m!=null&&r.series[m].highlightMouseDown){i(r)}var n=jQuery.Event("jqplotDataRightClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function h(){if(this.plugins.funnelRenderer&&this.plugins.funnelRenderer.highlightCanvas){this.plugins.funnelRenderer.highlightCanvas.resetCanvas();this.plugins.funnelRenderer.highlightCanvas=null}this.plugins.funnelRenderer={};this.plugins.funnelRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var n=e(this.targetId+" .jqplot-data-label");if(n.length){e(n[0]).before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-funnelRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-funnelRenderer-highlight-canvas",this._plotDimensions,this))}var m=this.plugins.funnelRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(o){i(o.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.FunnelTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.FunnelTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.FunnelTickRenderer.prototype.constructor=e.jqplot.FunnelTickRenderer})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js deleted file mode 100644 index e1ef02fb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js +++ /dev/null @@ -1,465 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]); - - /** - * Class: $.jqplot.Highlighter - * Plugin which will highlight data points when they are moused over. - * - * To use this plugin, include the js - * file in your source: - * - * > <script type="text/javascript" src="plugins/jqplot.highlighter.js"></script> - * - * A tooltip providing information about the data point is enabled by default. - * To disable the tooltip, set "showTooltip" to false. - * - * You can control what data is displayed in the tooltip with various - * options. The "tooltipAxes" option controls wether the x, y or both - * data values are displayed. - * - * Some chart types (e.g. hi-low-close) have more than one y value per - * data point. To display the additional values in the tooltip, set the - * "yvalues" option to the desired number of y values present (3 for a hlc chart). - * - * By default, data values will be formatted with the same formatting - * specifiers as used to format the axis ticks. A custom format code - * can be supplied with the tooltipFormatString option. This will apply - * to all values in the tooltip. - * - * For more complete control, the "formatString" option can be set. This - * Allows conplete control over tooltip formatting. Values are passed to - * the format string in an order determined by the "tooltipAxes" and "yvalues" - * options. So, if you have a hi-low-close chart and you just want to display - * the hi-low-close values in the tooltip, you could set a formatString like: - * - * > highlighter: { - * > tooltipAxes: 'y', - * > yvalues: 3, - * > formatString:'<table class="jqplot-highlighter"> - * > <tr><td>hi:</td><td>%s</td></tr> - * > <tr><td>low:</td><td>%s</td></tr> - * > <tr><td>close:</td><td>%s</td></tr></table>' - * > } - * - */ - $.jqplot.Highlighter = function(options) { - // Group: Properties - // - //prop: show - // true to show the highlight. - this.show = $.jqplot.config.enablePlugins; - // prop: markerRenderer - // Renderer used to draw the marker of the highlighted point. - // Renderer will assimilate attributes from the data point being highlighted, - // so no attributes need set on the renderer directly. - // Default is to turn off shadow drawing on the highlighted point. - this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false}); - // prop: showMarker - // true to show the marker - this.showMarker = true; - // prop: lineWidthAdjust - // Pixels to add to the lineWidth of the highlight. - this.lineWidthAdjust = 2.5; - // prop: sizeAdjust - // Pixels to add to the overall size of the highlight. - this.sizeAdjust = 5; - // prop: showTooltip - // Show a tooltip with data point values. - this.showTooltip = true; - // prop: tooltipLocation - // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' - this.tooltipLocation = 'nw'; - // prop: fadeTooltip - // true = fade in/out tooltip, flase = show/hide tooltip - this.fadeTooltip = true; - // prop: tooltipFadeSpeed - // 'slow', 'def', 'fast', or number of milliseconds. - this.tooltipFadeSpeed = "fast"; - // prop: tooltipOffset - // Pixel offset of tooltip from the highlight. - this.tooltipOffset = 2; - // prop: tooltipAxes - // Which axes to display in tooltip, 'x', 'y' or 'both', 'xy' or 'yx' - // 'both' and 'xy' are equivalent, 'yx' reverses order of labels. - this.tooltipAxes = 'both'; - // prop; tooltipSeparator - // String to use to separate x and y axes in tooltip. - this.tooltipSeparator = ', '; - // prop; tooltipContentEditor - // Function used to edit/augment/replace the formatted tooltip contents. - // Called as str = tooltipContentEditor(str, seriesIndex, pointIndex) - // where str is the generated tooltip html and seriesIndex and pointIndex identify - // the data point being highlighted. Should return the html for the tooltip contents. - this.tooltipContentEditor = null; - // prop: useAxesFormatters - // Use the x and y axes formatters to format the text in the tooltip. - this.useAxesFormatters = true; - // prop: tooltipFormatString - // sprintf format string for the tooltip. - // Uses Ash Searle's javascript sprintf implementation - // found here: http://hexmen.com/blog/2007/03/printf-sprintf/ - // See http://perldoc.perl.org/functions/sprintf.html for reference. - // Additional "p" and "P" format specifiers added by Chris Leonello. - this.tooltipFormatString = '%.5P'; - // prop: formatString - // alternative to tooltipFormatString - // will format the whole tooltip text, populating with x, y values as - // indicated by tooltipAxes option. So, you could have a tooltip like: - // 'Date: %s, number of cats: %d' to format the whole tooltip at one go. - // If useAxesFormatters is true, values will be formatted according to - // Axes formatters and you can populate your tooltip string with - // %s placeholders. - this.formatString = null; - // prop: yvalues - // Number of y values to expect in the data point array. - // Typically this is 1. Certain plots, like OHLC, will - // have more y values in each data point array. - this.yvalues = 1; - // prop: bringSeriesToFront - // This option requires jQuery 1.4+ - // True to bring the series of the highlighted point to the front - // of other series. - this.bringSeriesToFront = false; - this._tooltipElem; - this.isHighlighting = false; - this.currentNeighbor = null; - - $.extend(true, this, options); - }; - - var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w']; - var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7}; - var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e']; - - // axis.renderer.tickrenderer.formatter - - // called with scope of plot - $.jqplot.Highlighter.init = function (target, data, opts){ - var options = opts || {}; - // add a highlighter attribute to the plot - this.plugins.highlighter = new $.jqplot.Highlighter(options.highlighter); - }; - - // called within scope of series - $.jqplot.Highlighter.parseOptions = function (defaults, options) { - // Add a showHighlight option to the series - // and set it to true by default. - this.showHighlight = true; - }; - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - $.jqplot.Highlighter.postPlotDraw = function() { - // Memory Leaks patch - if (this.plugins.highlighter && this.plugins.highlighter.highlightCanvas) { - this.plugins.highlighter.highlightCanvas.resetCanvas(); - this.plugins.highlighter.highlightCanvas = null; - } - - if (this.plugins.highlighter && this.plugins.highlighter._tooltipElem) { - this.plugins.highlighter._tooltipElem.emptyForce(); - this.plugins.highlighter._tooltipElem = null; - } - - this.plugins.highlighter.highlightCanvas = new $.jqplot.GenericCanvas(); - - this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding, 'jqplot-highlight-canvas', this._plotDimensions, this)); - this.plugins.highlighter.highlightCanvas.setContext(); - - var elem = document.createElement('div'); - this.plugins.highlighter._tooltipElem = $(elem); - elem = null; - this.plugins.highlighter._tooltipElem.addClass('jqplot-highlighter-tooltip'); - this.plugins.highlighter._tooltipElem.css({position:'absolute', display:'none'}); - - this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem); - }; - - $.jqplot.preInitHooks.push($.jqplot.Highlighter.init); - $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Highlighter.parseOptions); - $.jqplot.postDrawHooks.push($.jqplot.Highlighter.postPlotDraw); - - function draw(plot, neighbor) { - var hl = plot.plugins.highlighter; - var s = plot.series[neighbor.seriesIndex]; - var smr = s.markerRenderer; - var mr = hl.markerRenderer; - mr.style = smr.style; - mr.lineWidth = smr.lineWidth + hl.lineWidthAdjust; - mr.size = smr.size + hl.sizeAdjust; - var rgba = $.jqplot.getColorComponents(smr.color); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]); - mr.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')'; - mr.init(); - mr.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], hl.highlightCanvas._ctx); - } - - function showTooltip(plot, series, neighbor) { - // neighbor looks like: {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]} - // gridData should be x,y pixel coords on the grid. - // add the plot._gridPadding to that to get x,y in the target. - var hl = plot.plugins.highlighter; - var elem = hl._tooltipElem; - var serieshl = series.highlighter || {}; - - var opts = $.extend(true, {}, hl, serieshl); - - if (opts.useAxesFormatters) { - var xf = series._xaxis._ticks[0].formatter; - var yf = series._yaxis._ticks[0].formatter; - var xfstr = series._xaxis._ticks[0].formatString; - var yfstr = series._yaxis._ticks[0].formatString; - var str; - var xstr = xf(xfstr, neighbor.data[0]); - var ystrs = []; - for (var i=1; i<opts.yvalues+1; i++) { - ystrs.push(yf(yfstr, neighbor.data[i])); - } - if (typeof opts.formatString === 'string') { - switch (opts.tooltipAxes) { - case 'both': - case 'xy': - ystrs.unshift(xstr); - ystrs.unshift(opts.formatString); - str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs); - break; - case 'yx': - ystrs.push(xstr); - ystrs.unshift(opts.formatString); - str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs); - break; - case 'x': - str = $.jqplot.sprintf.apply($.jqplot.sprintf, [opts.formatString, xstr]); - break; - case 'y': - ystrs.unshift(opts.formatString); - str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs); - break; - default: // same as xy - ystrs.unshift(xstr); - ystrs.unshift(opts.formatString); - str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs); - break; - } - } - else { - switch (opts.tooltipAxes) { - case 'both': - case 'xy': - str = xstr; - for (var i=0; i<ystrs.length; i++) { - str += opts.tooltipSeparator + ystrs[i]; - } - break; - case 'yx': - str = ''; - for (var i=0; i<ystrs.length; i++) { - str += ystrs[i] + opts.tooltipSeparator; - } - str += xstr; - break; - case 'x': - str = xstr; - break; - case 'y': - str = ystrs.join(opts.tooltipSeparator); - break; - default: // same as 'xy' - str = xstr; - for (var i=0; i<ystrs.length; i++) { - str += opts.tooltipSeparator + ystrs[i]; - } - break; - - } - } - } - else { - var str; - if (typeof opts.formatString === 'string') { - str = $.jqplot.sprintf.apply($.jqplot.sprintf, [opts.formatString].concat(neighbor.data)); - } - - else { - if (opts.tooltipAxes == 'both' || opts.tooltipAxes == 'xy') { - str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]) + opts.tooltipSeparator + $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]); - } - else if (opts.tooltipAxes == 'yx') { - str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]) + opts.tooltipSeparator + $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]); - } - else if (opts.tooltipAxes == 'x') { - str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]); - } - else if (opts.tooltipAxes == 'y') { - str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]); - } - } - } - if ($.isFunction(opts.tooltipContentEditor)) { - // args str, seriesIndex, pointIndex are essential so the hook can look up - // extra data for the point. - str = opts.tooltipContentEditor(str, neighbor.seriesIndex, neighbor.pointIndex, plot); - } - elem.html(str); - var gridpos = {x:neighbor.gridData[0], y:neighbor.gridData[1]}; - var ms = 0; - var fact = 0.707; - if (series.markerRenderer.show == true) { - ms = (series.markerRenderer.size + opts.sizeAdjust)/2; - } - - var loc = locations; - if (series.fillToZero && series.fill && neighbor.data[1] < 0) { - loc = oppositeLocations; - } - - switch (loc[locationIndicies[opts.tooltipLocation]]) { - case 'nw': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms; - var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms; - break; - case 'n': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2; - var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - ms; - break; - case 'ne': - var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + fact * ms; - var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms; - break; - case 'e': - var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + ms; - var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - case 'se': - var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + fact * ms; - var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + fact * ms; - break; - case 's': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2; - var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + ms; - break; - case 'sw': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms; - var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + fact * ms; - break; - case 'w': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - ms; - var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - default: // same as 'nw' - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms; - var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms; - break; - } - elem.css('left', x); - elem.css('top', y); - if (opts.fadeTooltip) { - // Fix for stacked up animations. Thnanks Trevor! - elem.stop(true,true).fadeIn(opts.tooltipFadeSpeed); - } - else { - elem.show(); - } - elem = null; - - } - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - var hl = plot.plugins.highlighter; - var c = plot.plugins.cursor; - if (hl.show) { - if (neighbor == null && hl.isHighlighting) { - var evt = jQuery.Event('jqplotHighlighterUnhighlight'); - plot.target.trigger(evt); - - var ctx = hl.highlightCanvas._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - if (hl.fadeTooltip) { - hl._tooltipElem.fadeOut(hl.tooltipFadeSpeed); - } - else { - hl._tooltipElem.hide(); - } - if (hl.bringSeriesToFront) { - plot.restorePreviousSeriesOrder(); - } - hl.isHighlighting = false; - hl.currentNeighbor = null; - ctx = null; - } - else if (neighbor != null && plot.series[neighbor.seriesIndex].showHighlight && !hl.isHighlighting) { - var evt = jQuery.Event('jqplotHighlighterHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data, plot]; - plot.target.trigger(evt, ins); - - hl.isHighlighting = true; - hl.currentNeighbor = neighbor; - if (hl.showMarker) { - draw(plot, neighbor); - } - if (hl.showTooltip && (!c || !c._zoom.started)) { - showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor); - } - if (hl.bringSeriesToFront) { - plot.moveSeriesToFront(neighbor.seriesIndex); - } - } - // check to see if we're highlighting the wrong point. - else if (neighbor != null && hl.isHighlighting && hl.currentNeighbor != neighbor) { - // highlighting the wrong point. - - // if new series allows highlighting, highlight new point. - if (plot.series[neighbor.seriesIndex].showHighlight) { - var ctx = hl.highlightCanvas._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - hl.isHighlighting = true; - hl.currentNeighbor = neighbor; - if (hl.showMarker) { - draw(plot, neighbor); - } - if (hl.showTooltip && (!c || !c._zoom.started)) { - showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor); - } - if (hl.bringSeriesToFront) { - plot.moveSeriesToFront(neighbor.seriesIndex); - } - } - } - } - } -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js deleted file mode 100644 index a67ebe3a..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(d){d.jqplot.eventListenerHooks.push(["jqplotMouseMove",f]);d.jqplot.Highlighter=function(h){this.show=d.jqplot.config.enablePlugins;this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation="nw";this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes="both";this.tooltipSeparator=", ";this.tooltipContentEditor=null;this.useAxesFormatters=true;this.tooltipFormatString="%.5P";this.formatString=null;this.yvalues=1;this.bringSeriesToFront=false;this._tooltipElem;this.isHighlighting=false;this.currentNeighbor=null;d.extend(true,this,h)};var b=["nw","n","ne","e","se","s","sw","w"];var e={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var c=["se","s","sw","w","nw","n","ne","e"];d.jqplot.Highlighter.init=function(k,j,i){var h=i||{};this.plugins.highlighter=new d.jqplot.Highlighter(h.highlighter)};d.jqplot.Highlighter.parseOptions=function(i,h){this.showHighlight=true};d.jqplot.Highlighter.postPlotDraw=function(){if(this.plugins.highlighter&&this.plugins.highlighter.highlightCanvas){this.plugins.highlighter.highlightCanvas.resetCanvas();this.plugins.highlighter.highlightCanvas=null}if(this.plugins.highlighter&&this.plugins.highlighter._tooltipElem){this.plugins.highlighter._tooltipElem.emptyForce();this.plugins.highlighter._tooltipElem=null}this.plugins.highlighter.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,"jqplot-highlight-canvas",this._plotDimensions,this));this.plugins.highlighter.highlightCanvas.setContext();var h=document.createElement("div");this.plugins.highlighter._tooltipElem=d(h);h=null;this.plugins.highlighter._tooltipElem.addClass("jqplot-highlighter-tooltip");this.plugins.highlighter._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem)};d.jqplot.preInitHooks.push(d.jqplot.Highlighter.init);d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Highlighter.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Highlighter.postPlotDraw);function a(m,o){var j=m.plugins.highlighter;var p=m.series[o.seriesIndex];var h=p.markerRenderer;var i=j.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+j.lineWidthAdjust;i.size=h.size+j.sizeAdjust;var l=d.jqplot.getColorComponents(h.color);var n=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);i.color="rgba("+n[0]+","+n[1]+","+n[2]+","+k+")";i.init();i.draw(p.gridData[o.pointIndex][0],p.gridData[o.pointIndex][1],j.highlightCanvas._ctx)}function g(A,q,m){var k=A.plugins.highlighter;var D=k._tooltipElem;var r=q.highlighter||{};var t=d.extend(true,{},k,r);if(t.useAxesFormatters){var w=q._xaxis._ticks[0].formatter;var h=q._yaxis._ticks[0].formatter;var E=q._xaxis._ticks[0].formatString;var s=q._yaxis._ticks[0].formatString;var z;var u=w(E,m.data[0]);var l=[];for(var B=1;B<t.yvalues+1;B++){l.push(h(s,m.data[B]))}if(typeof t.formatString==="string"){switch(t.tooltipAxes){case"both":case"xy":l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"yx":l.push(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"x":z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString,u]);break;case"y":l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;default:l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break}}else{switch(t.tooltipAxes){case"both":case"xy":z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break;case"yx":z="";for(var B=0;B<l.length;B++){z+=l[B]+t.tooltipSeparator}z+=u;break;case"x":z=u;break;case"y":z=l.join(t.tooltipSeparator);break;default:z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break}}}else{var z;if(typeof t.formatString==="string"){z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString].concat(m.data))}else{if(t.tooltipAxes=="both"||t.tooltipAxes=="xy"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}else{if(t.tooltipAxes=="yx"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="x"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="y"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}}}}}}if(d.isFunction(t.tooltipContentEditor)){z=t.tooltipContentEditor(z,m.seriesIndex,m.pointIndex,A)}D.html(z);var C={x:m.gridData[0],y:m.gridData[1]};var v=0;var j=0.707;if(q.markerRenderer.show==true){v=(q.markerRenderer.size+t.sizeAdjust)/2}var o=b;if(q.fillToZero&&q.fill&&m.data[1]<0){o=c}switch(o[e[t.tooltipLocation]]){case"nw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"n":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-v;break;case"ne":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"e":var p=C.x+A._gridPadding.left+t.tooltipOffset+v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;case"se":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"s":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top+t.tooltipOffset+v;break;case"sw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"w":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;default:var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break}D.css("left",p);D.css("top",n);if(t.fadeTooltip){D.stop(true,true).fadeIn(t.tooltipFadeSpeed)}else{D.show()}D=null}function f(n,j,i,p,l){var h=l.plugins.highlighter;var m=l.plugins.cursor;if(h.show){if(p==null&&h.isHighlighting){var o=jQuery.Event("jqplotHighlighterUnhighlight");l.target.trigger(o);var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);if(h.fadeTooltip){h._tooltipElem.fadeOut(h.tooltipFadeSpeed)}else{h._tooltipElem.hide()}if(h.bringSeriesToFront){l.restorePreviousSeriesOrder()}h.isHighlighting=false;h.currentNeighbor=null;q=null}else{if(p!=null&&l.series[p.seriesIndex].showHighlight&&!h.isHighlighting){var o=jQuery.Event("jqplotHighlighterHighlight");o.which=n.which;o.pageX=n.pageX;o.pageY=n.pageY;var k=[p.seriesIndex,p.pointIndex,p.data,l];l.target.trigger(o,k);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}else{if(p!=null&&h.isHighlighting&&h.currentNeighbor!=p){if(l.series[p.seriesIndex].showHighlight){var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}}}}}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js deleted file mode 100644 index c4767b2a..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js +++ /dev/null @@ -1,475 +0,0 @@ -/* - 2010-11-01 Chris Leonello - - Slightly modified version of the original json2.js to put JSON - functions under the $.jqplot namespace. - - licensing and orignal comments follow: - - http://www.JSON.org/json2.js - 2010-08-25 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - $.jqplot.JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - $.jqplot.JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = $.jqplot.JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = $.jqplot.JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = $.jqplot.JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - $.jqplot.JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = $.jqplot.JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = $.jqplot.JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -(function($) { - - $.jqplot.JSON = window.JSON; - - if (!window.JSON) { - $.jqplot.JSON = {}; - } - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) ? - this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? - '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : - '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 ? '[]' : - gap ? '[\n' + gap + - partial.join(',\n' + gap) + '\n' + - mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 ? '{}' : - gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + - mind + '}' : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof $.jqplot.JSON.stringify !== 'function') { - $.jqplot.JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('$.jqplot.JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof $.jqplot.JSON.parse !== 'function') { - $.jqplot.JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('$.jqplot.JSON.parse'); - }; - } -})(jQuery); diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js deleted file mode 100644 index f6cc1928..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function($){$.jqplot.JSON=window.JSON;if(!window.JSON){$.jqplot.JSON={}}function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof $.jqplot.JSON.stringify!=="function"){$.jqplot.JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("$.jqplot.JSON.stringify")}return str("",{"":value})}}if(typeof $.jqplot.JSON.parse!=="function"){$.jqplot.JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("$.jqplot.JSON.parse")}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js deleted file mode 100644 index 5ab51eae..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js +++ /dev/null @@ -1,529 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * class: $.jqplot.LogAxisRenderer - * A plugin for a jqPlot to render a logarithmic axis. - * - * To use this renderer, include the plugin in your source - * > <script type="text/javascript" language="javascript" src="plugins/jqplot.logAxisRenderer.js"></script> - * - * and supply the appropriate options to your plot - * - * > {axes:{xaxis:{renderer:$.jqplot.LogAxisRenderer}}} - **/ - $.jqplot.LogAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - // prop: axisDefaults - // Default properties which will be applied directly to the series. - // - // Group: Properties - // - // Properties - // - // base - the logarithmic base, commonly 2, 10 or Math.E - // tickDistribution - Deprecated. "power" distribution of ticks - // always used. Option has no effect. - this.axisDefaults = { - base : 10, - tickDistribution :'power' - }; - }; - - $.jqplot.LogAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.LogAxisRenderer.prototype.constructor = $.jqplot.LogAxisRenderer; - - $.jqplot.LogAxisRenderer.prototype.init = function(options) { - // prop: drawBaseline - // True to draw the axis baseline. - this.drawBaseline = true; - // prop: minorTicks - // Number of ticks to add between "major" ticks. - // Major ticks are ticks supplied by user or auto computed. - // Minor ticks cannot be created by user. - this.minorTicks = 'auto'; - this._scalefact = 1.0; - - $.extend(true, this, options); - - this._autoFormatString = '%d'; - this._overrideFormatString = false; - - for (var d in this.renderer.axisDefaults) { - if (this[d] == null) { - this[d] = this.renderer.axisDefaults[d]; - } - } - - this.resetDataBounds(); - }; - - $.jqplot.LogAxisRenderer.prototype.createTicks = function(plot) { - // we're are operating on an axis here - var ticks = this._ticks; - var userTicks = this.ticks; - var name = this.name; - var db = this._dataBounds; - var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height; - var interval; - var min, max; - var pos1, pos2; - var tt, i; - - var threshold = 30; - // For some reason scalefactor is screwing up ticks. - this._scalefact = (Math.max(dim, threshold+1) - threshold)/300; - - // if we already have ticks, use them. - // ticks must be in order of increasing value. - if (userTicks.length) { - // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed - for (i=0; i<userTicks.length; i++){ - var ut = userTicks[i]; - var t = new this.tickRenderer(this.tickOptions); - if (ut.constructor == Array) { - t.value = ut[0]; - t.label = ut[1]; - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(ut[0], this.name); - this._ticks.push(t); - } - - else if ($.isPlainObject(ut)) { - $.extend(true, t, ut); - t.axis = this.name; - this._ticks.push(t); - } - - else { - t.value = ut; - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(ut, this.name); - this._ticks.push(t); - } - } - this.numberTicks = userTicks.length; - this.min = this._ticks[0].value; - this.max = this._ticks[this.numberTicks-1].value; - } - - // we don't have any ticks yet, let's make some! - else if (this.min == null && this.max == null) { - min = db.min * (2 - this.padMin); - max = db.max * this.padMax; - - // if min and max are same, space them out a bit - if (min == max) { - var adj = 0.05; - min = min*(1-adj); - max = max*(1+adj); - } - - // perform some checks - if (this.min != null && this.min <= 0) { - throw('log axis minimum must be greater than 0'); - } - if (this.max != null && this.max <= 0) { - throw('log axis maximum must be greater than 0'); - } - - function findCeil (val) { - var order = Math.pow(10, Math.floor(Math.log(val)/Math.LN10)); - return Math.ceil(val/order) * order; - } - - function findFloor(val) { - var order = Math.pow(10, Math.floor(Math.log(val)/Math.LN10)); - return Math.floor(val/order) * order; - } - - // var range = max - min; - var rmin, rmax; - - // for power distribution, open up range to get a nice power of axis.renderer.base. - // power distribution won't respect the user's min/max settings. - rmin = Math.pow(this.base, Math.floor(Math.log(min)/Math.log(this.base))); - rmax = Math.pow(this.base, Math.ceil(Math.log(max)/Math.log(this.base))); - - // // if min and max are same, space them out a bit - // if (rmin === rmax) { - // var adj = 0.05; - // rmin = rmin*(1-adj); - // rmax = rmax*(1+adj); - // } - - var order = Math.round(Math.log(rmin)/Math.LN10); - - if (this.tickOptions == null || !this.tickOptions.formatString) { - this._overrideFormatString = true; - } - - this.min = rmin; - this.max = rmax; - var range = this.max - this.min; - - var minorTicks = (this.minorTicks === 'auto') ? 0 : this.minorTicks; - var numberTicks; - if (this.numberTicks == null){ - if (dim > 140) { - numberTicks = Math.round(Math.log(this.max/this.min)/Math.log(this.base) + 1); - if (numberTicks < 2) { - numberTicks = 2; - } - if (minorTicks === 0) { - var temp = dim/(numberTicks - 1); - if (temp < 100) { - minorTicks = 0; - } - else if (temp < 190) { - minorTicks = 1; - } - else if (temp < 250) { - minorTicks = 3; - } - else if (temp < 600) { - minorTicks = 4; - } - else { - minorTicks = 9; - } - } - } - else { - numberTicks = 2; - if (minorTicks === 0) { - minorTicks = 1; - } - minorTicks = 0; - } - } - else { - numberTicks = this.numberTicks; - } - - if (order >= 0 && minorTicks !== 3) { - this._autoFormatString = '%d'; - } - // Adjust format string for case with 3 ticks where we'll have like 1, 2.5, 5, 7.5, 10 - else if (order <= 0 && minorTicks === 3) { - var temp = -(order - 1); - this._autoFormatString = '%.'+ Math.abs(order-1) + 'f'; - } - - // Adjust format string for values less than 1. - else if (order < 0) { - var temp = -order; - this._autoFormatString = '%.'+ Math.abs(order) + 'f'; - } - - else { - this._autoFormatString = '%d'; - } - - var to, t, val, tt1, spread, interval; - for (var i=0; i<numberTicks; i++){ - tt = Math.pow(this.base, i - numberTicks + 1) * this.max; - - t = new this.tickRenderer(this.tickOptions); - - if (this._overrideFormatString) { - t.formatString = this._autoFormatString; - } - - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(tt, this.name); - this._ticks.push(t); - - if (minorTicks && i<numberTicks-1) { - tt1 = Math.pow(this.base, i - numberTicks + 2) * this.max; - spread = tt1 - tt; - interval = tt1 / (minorTicks+1); - for (var j=minorTicks-1; j>=0; j--) { - val = tt1-interval*(j+1); - t = new this.tickRenderer(this.tickOptions); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(val, this.name); - this._ticks.push(t); - } - } - } - } - - // min and max are set as would be the case with zooming - else if (this.min != null && this.max != null) { - var opts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null}); - var nt, ti; - // don't have an interval yet, pick one that gives the most - // "round" ticks we can get. - if (this.numberTicks == null && this.tickInterval == null) { - // var threshold = 30; - var tdim = Math.max(dim, threshold+1); - var nttarget = Math.ceil((tdim-threshold)/35 + 1); - - var ret = $.jqplot.LinearTickGenerator.bestConstrainedInterval(this.min, this.max, nttarget); - - this._autoFormatString = ret[3]; - nt = ret[2]; - ti = ret[4]; - - for (var i=0; i<nt; i++) { - opts.value = this.min + i * ti; - t = new this.tickRenderer(opts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - this._ticks.push(t); - } - } - - // for loose zoom, number ticks and interval are also set. - else if (this.numberTicks != null && this.tickInterval != null) { - nt = this.numberTicks; - for (var i=0; i<nt; i++) { - opts.value = this.min + i * this.tickInterval; - t = new this.tickRenderer(opts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - this._ticks.push(t); - } - } - } - }; - - $.jqplot.LogAxisRenderer.prototype.pack = function(pos, offsets) { - var lb = parseInt(this.base, 10); - var ticks = this._ticks; - var trans = function (v) { return Math.log(v)/Math.log(lb); }; - var invtrans = function (v) { return Math.pow(Math.E, (Math.log(lb)*v)); }; - var max = trans(this.max); - var min = trans(this.min); - var offmax = offsets.max; - var offmin = offsets.min; - var lshow = (this._label == null) ? false : this._label.show; - - for (var p in pos) { - this._elem.css(p, pos[p]); - } - - this._offsets = offsets; - // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left. - var pixellength = offmax - offmin; - var unitlength = max - min; - - // point to unit and unit to point conversions references to Plot DOM element top left corner. - this.p2u = function(p){ - return invtrans((p - offmin) * unitlength / pixellength + min); - }; - - this.u2p = function(u){ - return (trans(u) - min) * pixellength / unitlength + offmin; - }; - - if (this.name == 'xaxis' || this.name == 'x2axis'){ - this.series_u2p = function(u){ - return (trans(u) - min) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return invtrans(p * unitlength / pixellength + min); - }; - } - // yaxis is max at top of canvas. - else { - this.series_u2p = function(u){ - return (trans(u) - max) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return invtrans(p * unitlength / pixellength + max); - }; - } - - if (this.show) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - for (var i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - switch (t.labelPosition) { - case 'auto': - // position at end - if (t.angle < 0) { - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - } - // position at start - else { - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - } - break; - case 'end': - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - case 'start': - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - break; - case 'middle': - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - default: - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - } - } - else { - shim = -t.getWidth()/2; - } - // var shim = t.getWidth()/2; - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('left', val); - t.pack(); - } - } - if (lshow) { - var w = this._label._elem.outerWidth(true); - this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px'); - if (this.name == 'xaxis') { - this._label._elem.css('bottom', '0px'); - } - else { - this._label._elem.css('top', '0px'); - } - this._label.pack(); - } - } - else { - for (var i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - switch (t.labelPosition) { - case 'auto': - // position at end - case 'end': - if (t.angle < 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'start': - if (t.angle > 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'middle': - // if (t.angle > 0) { - // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - // } - // else { - // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - // } - shim = -t.getHeight()/2; - break; - default: - shim = -t.getHeight()/2; - break; - } - } - else { - shim = -t.getHeight()/2; - } - - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('top', val); - t.pack(); - } - } - if (lshow) { - var h = this._label._elem.outerHeight(true); - this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px'); - if (this.name == 'yaxis') { - this._label._elem.css('left', '0px'); - } - else { - this._label._elem.css('right', '0px'); - } - this._label.pack(); - } - } - } - }; -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js deleted file mode 100644 index 64dc40eb..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.LogAxisRenderer=function(){a.jqplot.LinearAxisRenderer.call(this);this.axisDefaults={base:10,tickDistribution:"power"}};a.jqplot.LogAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.LogAxisRenderer.prototype.constructor=a.jqplot.LogAxisRenderer;a.jqplot.LogAxisRenderer.prototype.init=function(b){this.drawBaseline=true;this.minorTicks="auto";this._scalefact=1;a.extend(true,this,b);this._autoFormatString="%d";this._overrideFormatString=false;for(var c in this.renderer.axisDefaults){if(this[c]==null){this[c]=this.renderer.axisDefaults[c]}}this.resetDataBounds()};a.jqplot.LogAxisRenderer.prototype.createTicks=function(d){var G=this._ticks;var w=this.ticks;var s=this.name;var u=this._dataBounds;var b=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var k;var N,v;var m,l;var M,K;var g=30;this._scalefact=(Math.max(b,g+1)-g)/300;if(w.length){for(K=0;K<w.length;K++){var A=w[K];var H=new this.tickRenderer(this.tickOptions);if(A.constructor==Array){H.value=A[0];H.label=A[1];if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(A[0],this.name);this._ticks.push(H)}else{if(a.isPlainObject(A)){a.extend(true,H,A);H.axis=this.name;this._ticks.push(H)}else{H.value=A;if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(A,this.name);this._ticks.push(H)}}}this.numberTicks=w.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value}else{if(this.min==null&&this.max==null){N=u.min*(2-this.padMin);v=u.max*this.padMax;if(N==v){var c=0.05;N=N*(1-c);v=v*(1+c)}if(this.min!=null&&this.min<=0){throw ("log axis minimum must be greater than 0")}if(this.max!=null&&this.max<=0){throw ("log axis maximum must be greater than 0")}function f(j){var i=Math.pow(10,Math.floor(Math.log(j)/Math.LN10));return Math.ceil(j/i)*i}function x(j){var i=Math.pow(10,Math.floor(Math.log(j)/Math.LN10));return Math.floor(j/i)*i}var F,r;F=Math.pow(this.base,Math.floor(Math.log(N)/Math.log(this.base)));r=Math.pow(this.base,Math.ceil(Math.log(v)/Math.log(this.base)));var E=Math.round(Math.log(F)/Math.LN10);if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}this.min=F;this.max=r;var q=this.max-this.min;var C=(this.minorTicks==="auto")?0:this.minorTicks;var h;if(this.numberTicks==null){if(b>140){h=Math.round(Math.log(this.max/this.min)/Math.log(this.base)+1);if(h<2){h=2}if(C===0){var o=b/(h-1);if(o<100){C=0}else{if(o<190){C=1}else{if(o<250){C=3}else{if(o<600){C=4}else{C=9}}}}}}else{h=2;if(C===0){C=1}C=0}}else{h=this.numberTicks}if(E>=0&&C!==3){this._autoFormatString="%d"}else{if(E<=0&&C===3){var o=-(E-1);this._autoFormatString="%."+Math.abs(E-1)+"f"}else{if(E<0){var o=-E;this._autoFormatString="%."+Math.abs(E)+"f"}else{this._autoFormatString="%d"}}}var O,H,z,p,n,k;for(var K=0;K<h;K++){M=Math.pow(this.base,K-h+1)*this.max;H=new this.tickRenderer(this.tickOptions);if(this._overrideFormatString){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(M,this.name);this._ticks.push(H);if(C&&K<h-1){p=Math.pow(this.base,K-h+2)*this.max;n=p-M;k=p/(C+1);for(var J=C-1;J>=0;J--){z=p-k*(J+1);H=new this.tickRenderer(this.tickOptions);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(z,this.name);this._ticks.push(H)}}}}else{if(this.min!=null&&this.max!=null){var y=a.extend(true,{},this.tickOptions,{name:this.name,value:null});var I,e;if(this.numberTicks==null&&this.tickInterval==null){var D=Math.max(b,g+1);var L=Math.ceil((D-g)/35+1);var B=a.jqplot.LinearTickGenerator.bestConstrainedInterval(this.min,this.max,L);this._autoFormatString=B[3];I=B[2];e=B[4];for(var K=0;K<I;K++){y.value=this.min+K*e;H=new this.tickRenderer(y);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}this._ticks.push(H)}}else{if(this.numberTicks!=null&&this.tickInterval!=null){I=this.numberTicks;for(var K=0;K<I;K++){y.value=this.min+K*this.tickInterval;H=new this.tickRenderer(y);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}this._ticks.push(H)}}}}}}};a.jqplot.LogAxisRenderer.prototype.pack=function(f,e){var r=parseInt(this.base,10);var y=this._ticks;var d=function(h){return Math.log(h)/Math.log(r)};var b=function(h){return Math.pow(Math.E,(Math.log(r)*h))};var u=d(this.max);var s=d(this.min);var m=e.max;var k=e.min;var o=(this._label==null)?false:this._label.show;for(var q in f){this._elem.css(q,f[q])}this._offsets=e;var g=m-k;var j=u-s;this.p2u=function(h){return b((h-k)*j/g+s)};this.u2p=function(h){return(d(h)-s)*g/j+k};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(d(h)-s)*g/j};this.series_p2u=function(h){return b(h*j/g+s)}}else{this.series_u2p=function(h){return(d(h)-u)*g/j};this.series_p2u=function(h){return b(h*j/g+u)}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var v=0;v<y.length;v++){var n=y[v];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){switch(n.labelPosition){case"auto":if(n.angle<0){c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2}else{c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2}break;case"end":c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;case"start":c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2;break;case"middle":c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;default:c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break}}else{c=-n.getWidth()/2}var z=this.u2p(n.value)+c+"px";n._elem.css("left",z);n.pack()}}if(o){var l=this._label._elem.outerWidth(true);this._label._elem.css("left",k+g/2-l/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var v=0;v<y.length;v++){var n=y[v];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){switch(n.labelPosition){case"auto":case"end":if(n.angle<0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"start":if(n.angle>0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"middle":c=-n.getHeight()/2;break;default:c=-n.getHeight()/2;break}}else{c=-n.getHeight()/2}var z=this.u2p(n.value)+c+"px";n._elem.css("top",z);n.pack()}}if(o){var x=this._label._elem.outerHeight(true);this._label._elem.css("top",m-g/2-x/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js deleted file mode 100644 index 74297685..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js +++ /dev/null @@ -1,611 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - // class: $.jqplot.MekkoAxisRenderer - // An axis renderer for a Mekko chart. - // Should be used with a Mekko chart where the mekkoRenderer is used on the series. - // Displays the Y axis as a range from 0 to 1 (0 to 100%) and the x axis with a tick - // for each series scaled to the sum of all the y values. - $.jqplot.MekkoAxisRenderer = function() { - }; - - // called with scope of axis object. - $.jqplot.MekkoAxisRenderer.prototype.init = function(options){ - // prop: tickMode - // How to space the ticks on the axis. - // 'bar' will place a tick at the width of each bar. - // This is the default for the x axis. - // 'even' will place ticks at even intervals. This is - // the default for x2 axis and y axis. y axis cannot be changed. - this.tickMode; - // prop: barLabelRenderer - // renderer to use to draw labels under each bar. - this.barLabelRenderer = $.jqplot.AxisLabelRenderer; - // prop: barLabels - // array of labels to put under each bar. - this.barLabels = this.barLabels || []; - // prop: barLabelOptions - // options object to pass to the bar label renderer. - this.barLabelOptions = {}; - this.tickOptions = $.extend(true, {showGridline:false}, this.tickOptions); - this._barLabels = []; - $.extend(true, this, options); - if (this.name == 'yaxis') { - this.tickOptions.formatString = this.tickOptions.formatString || "%d\%"; - } - var db = this._dataBounds; - db.min = 0; - // for y axes, scale always go from 0 to 1 (0 to 100%) - if (this.name == 'yaxis' || this.name == 'y2axis') { - db.max = 100; - this.tickMode = 'even'; - } - // For x axes, scale goes from 0 to sum of all y values. - else if (this.name == 'xaxis'){ - this.tickMode = (this.tickMode == null) ? 'bar' : this.tickMode; - for (var i=0; i<this._series.length; i++) { - db.max += this._series[i]._sumy; - } - } - else if (this.name == 'x2axis'){ - this.tickMode = (this.tickMode == null) ? 'even' : this.tickMode; - for (var i=0; i<this._series.length; i++) { - db.max += this._series[i]._sumy; - } - } - }; - - // called with scope of axis - $.jqplot.MekkoAxisRenderer.prototype.draw = function(ctx, plot) { - if (this.show) { - // populate the axis label and value properties. - // createTicks is a method on the renderer, but - // call it within the scope of the axis. - this.renderer.createTicks.call(this); - // fill a div with axes labels in the right direction. - // Need to pregenerate each axis to get it's bounds and - // position it and the labels correctly on the plot. - var dim=0; - var temp; - - var elem = document.createElement('div'); - this._elem = $(elem); - this._elem.addClass('jqplot-axis jqplot-'+this.name); - this._elem.css('position', 'absolute'); - elem = null; - - if (this.name == 'xaxis' || this.name == 'x2axis') { - this._elem.width(this._plotDimensions.width); - } - else { - this._elem.height(this._plotDimensions.height); - } - - // draw the axis label - // create a _label object. - this.labelOptions.axis = this.name; - this._label = new this.labelRenderer(this.labelOptions); - if (this._label.show) { - this._elem.append(this._label.draw(ctx)); - } - - var t, tick, elem; - if (this.showTicks) { - t = this._ticks; - for (var i=0; i<t.length; i++) { - tick = t[i]; - if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { - this._elem.append(tick.draw(ctx)); - } - } - } - - // draw the series labels - for (i=0; i<this.barLabels.length; i++) { - this.barLabelOptions.axis = this.name; - this.barLabelOptions.label = this.barLabels[i]; - this._barLabels.push(new this.barLabelRenderer(this.barLabelOptions)); - if (this.tickMode != 'bar') { - this._barLabels[i].show = false; - } - if (this._barLabels[i].show) { - var elem = this._barLabels[i].draw(ctx, plot); - elem.removeClass('jqplot-'+this.name+'-label'); - elem.addClass('jqplot-'+this.name+'-tick'); - elem.addClass('jqplot-mekko-barLabel'); - elem.appendTo(this._elem); - elem = null; - } - } - - } - return this._elem; - }; - - // called with scope of an axis - $.jqplot.MekkoAxisRenderer.prototype.reset = function() { - this.min = this._min; - this.max = this._max; - this.tickInterval = this._tickInterval; - this.numberTicks = this._numberTicks; - // this._ticks = this.__ticks; - }; - - // called with scope of axis - $.jqplot.MekkoAxisRenderer.prototype.set = function() { - var dim = 0; - var temp; - var w = 0; - var h = 0; - var lshow = (this._label == null) ? false : this._label.show; - if (this.show && this.showTicks) { - var t = this._ticks; - for (var i=0; i<t.length; i++) { - var tick = t[i]; - if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - temp = tick._elem.outerHeight(true); - } - else { - temp = tick._elem.outerWidth(true); - } - if (temp > dim) { - dim = temp; - } - } - } - - if (lshow) { - w = this._label._elem.outerWidth(true); - h = this._label._elem.outerHeight(true); - } - if (this.name == 'xaxis') { - dim = dim + h; - this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'}); - } - else if (this.name == 'x2axis') { - dim = dim + h; - this._elem.css({'height':dim+'px', left:'0px', top:'0px'}); - } - else if (this.name == 'yaxis') { - dim = dim + w; - this._elem.css({'width':dim+'px', left:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - else { - dim = dim + w; - this._elem.css({'width':dim+'px', right:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - } - }; - - // called with scope of axis - $.jqplot.MekkoAxisRenderer.prototype.createTicks = function() { - // we're are operating on an axis here - var ticks = this._ticks; - var userTicks = this.ticks; - var name = this.name; - // databounds were set on axis initialization. - var db = this._dataBounds; - var dim, interval; - var min, max; - var pos1, pos2; - var t, tt, i, j; - - // if we already have ticks, use them. - // ticks must be in order of increasing value. - - if (userTicks.length) { - // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed - for (i=0; i<userTicks.length; i++){ - var ut = userTicks[i]; - var t = new this.tickRenderer(this.tickOptions); - if (ut.constructor == Array) { - t.value = ut[0]; - t.label = ut[1]; - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(ut[0], this.name); - this._ticks.push(t); - } - - else { - t.value = ut; - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(ut, this.name); - this._ticks.push(t); - } - } - this.numberTicks = userTicks.length; - this.min = this._ticks[0].value; - this.max = this._ticks[this.numberTicks-1].value; - this.tickInterval = (this.max - this.min) / (this.numberTicks - 1); - } - - // we don't have any ticks yet, let's make some! - else { - if (name == 'xaxis' || name == 'x2axis') { - dim = this._plotDimensions.width; - } - else { - dim = this._plotDimensions.height; - } - - // if min, max and number of ticks specified, user can't specify interval. - if (this.min != null && this.max != null && this.numberTicks != null) { - this.tickInterval = null; - } - - min = (this.min != null) ? this.min : db.min; - max = (this.max != null) ? this.max : db.max; - - // if min and max are same, space them out a bit.+ - if (min == max) { - var adj = 0.05; - if (min > 0) { - adj = Math.max(Math.log(min)/Math.LN10, 0.05); - } - min -= adj; - max += adj; - } - - var range = max - min; - var rmin, rmax; - var temp, prev, curr; - var ynumticks = [3,5,6,11,21]; - - // yaxis divide ticks in nice intervals from 0 to 1. - if (this.name == 'yaxis' || this.name == 'y2axis') { - this.min = 0; - this.max = 100; - // user didn't specify number of ticks. - if (!this.numberTicks){ - if (this.tickInterval) { - this.numberTicks = 3 + Math.ceil(range / this.tickInterval); - } - else { - temp = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing); - for (i=0; i<ynumticks.length; i++) { - curr = temp/ynumticks[i]; - if (curr == 1) { - this.numberTicks = ynumticks[i]; - break; - } - else if (curr > 1) { - prev = curr; - continue; - } - else if (curr < 1) { - // was prev or is curr closer to one? - if (Math.abs(prev - 1) < Math.abs(curr - 1)) { - this.numberTicks = ynumticks[i-1]; - break; - } - else { - this.numberTicks = ynumticks[i]; - break; - } - } - else if (i == ynumticks.length -1) { - this.numberTicks = ynumticks[i]; - } - } - this.tickInterval = range / (this.numberTicks - 1); - } - } - - // user did specify number of ticks. - else { - this.tickInterval = range / (this.numberTicks - 1); - } - - for (var i=0; i<this.numberTicks; i++){ - tt = this.min + i * this.tickInterval; - t = new this.tickRenderer(this.tickOptions); - // var t = new $.jqplot.AxisTickRenderer(this.tickOptions); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(tt, this.name); - this._ticks.push(t); - } - } - - // for x axes, have number ot ticks equal to number of series and ticks placed - // at sum of y values for each series. - else if (this.tickMode == 'bar') { - this.min = 0; - this.numberTicks = this._series.length + 1; - t = new this.tickRenderer(this.tickOptions); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(0, this.name); - this._ticks.push(t); - - temp = 0; - - for (i=1; i<this.numberTicks; i++){ - temp += this._series[i-1]._sumy; - t = new this.tickRenderer(this.tickOptions); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(temp, this.name); - this._ticks.push(t); - } - this.max = this.max || temp; - - // if user specified a max and it is greater than sum, add a tick - if (this.max > temp) { - t = new this.tickRenderer(this.tickOptions); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(this.max, this.name); - this._ticks.push(t); - - } - } - - else if (this.tickMode == 'even') { - this.min = 0; - this.max = this.max || db.max; - // get a desired number of ticks - var nt = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing); - range = this.max - this.min; - this.numberTicks = nt; - this.tickInterval = range / (this.numberTicks - 1); - - for (i=0; i<this.numberTicks; i++){ - tt = this.min + i * this.tickInterval; - t = new this.tickRenderer(this.tickOptions); - // var t = new $.jqplot.AxisTickRenderer(this.tickOptions); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(tt, this.name); - this._ticks.push(t); - } - - } - } - }; - - // called with scope of axis - $.jqplot.MekkoAxisRenderer.prototype.pack = function(pos, offsets) { - var ticks = this._ticks; - var max = this.max; - var min = this.min; - var offmax = offsets.max; - var offmin = offsets.min; - var lshow = (this._label == null) ? false : this._label.show; - - for (var p in pos) { - this._elem.css(p, pos[p]); - } - - this._offsets = offsets; - // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left. - var pixellength = offmax - offmin; - var unitlength = max - min; - - // point to unit and unit to point conversions references to Plot DOM element top left corner. - this.p2u = function(p){ - return (p - offmin) * unitlength / pixellength + min; - }; - - this.u2p = function(u){ - return (u - min) * pixellength / unitlength + offmin; - }; - - if (this.name == 'xaxis' || this.name == 'x2axis'){ - this.series_u2p = function(u){ - return (u - min) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - - else { - this.series_u2p = function(u){ - return (u - max) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + max; - }; - } - - if (this.show) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - for (var i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'xaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - if (temp * t.angle < 0) { - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - } - // position at start - else { - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - } - break; - case 'end': - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - case 'start': - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - break; - case 'middle': - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - default: - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - } - } - else { - shim = -t.getWidth()/2; - } - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('left', val); - t.pack(); - } - } - var w; - if (lshow) { - w = this._label._elem.outerWidth(true); - this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px'); - if (this.name == 'xaxis') { - this._label._elem.css('bottom', '0px'); - } - else { - this._label._elem.css('top', '0px'); - } - this._label.pack(); - } - // now show the labels under the bars. - var b, l, r; - for (var i=0; i<this.barLabels.length; i++) { - b = this._barLabels[i]; - if (b.show) { - w = b.getWidth(); - l = this._ticks[i].getLeft() + this._ticks[i].getWidth(); - r = this._ticks[i+1].getLeft(); - b._elem.css('left', (r+l-w)/2+'px'); - b._elem.css('top', this._ticks[i]._elem.css('top')); - b.pack(); - } - } - } - else { - for (var i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'yaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - case 'end': - if (temp * t.angle < 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'start': - if (t.angle > 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'middle': - shim = -t.getHeight()/2; - break; - default: - shim = -t.getHeight()/2; - break; - } - } - else { - shim = -t.getHeight()/2; - } - - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('top', val); - t.pack(); - } - } - if (lshow) { - var h = this._label._elem.outerHeight(true); - this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px'); - if (this.name == 'yaxis') { - this._label._elem.css('left', '0px'); - } - else { - this._label._elem.css('right', '0px'); - } - this._label.pack(); - } - } - } - }; -})(jQuery); diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js deleted file mode 100644 index c3bb45bd..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.MekkoAxisRenderer=function(){};a.jqplot.MekkoAxisRenderer.prototype.init=function(c){this.tickMode;this.barLabelRenderer=a.jqplot.AxisLabelRenderer;this.barLabels=this.barLabels||[];this.barLabelOptions={};this.tickOptions=a.extend(true,{showGridline:false},this.tickOptions);this._barLabels=[];a.extend(true,this,c);if(this.name=="yaxis"){this.tickOptions.formatString=this.tickOptions.formatString||"%d%"}var b=this._dataBounds;b.min=0;if(this.name=="yaxis"||this.name=="y2axis"){b.max=100;this.tickMode="even"}else{if(this.name=="xaxis"){this.tickMode=(this.tickMode==null)?"bar":this.tickMode;for(var d=0;d<this._series.length;d++){b.max+=this._series[d]._sumy}}else{if(this.name=="x2axis"){this.tickMode=(this.tickMode==null)?"even":this.tickMode;for(var d=0;d<this._series.length;d++){b.max+=this._series[d]._sumy}}}}};a.jqplot.MekkoAxisRenderer.prototype.draw=function(b,j){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;var g=document.createElement("div");this._elem=a(g);this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");g=null;if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){this._elem.append(this._label.draw(b))}var f,e,g;if(this.showTicks){f=this._ticks;for(var d=0;d<f.length;d++){e=f[d];if(e.showLabel&&(!e.isMinorTick||this.showMinorTicks)){this._elem.append(e.draw(b))}}}for(d=0;d<this.barLabels.length;d++){this.barLabelOptions.axis=this.name;this.barLabelOptions.label=this.barLabels[d];this._barLabels.push(new this.barLabelRenderer(this.barLabelOptions));if(this.tickMode!="bar"){this._barLabels[d].show=false}if(this._barLabels[d].show){var g=this._barLabels[d].draw(b,j);g.removeClass("jqplot-"+this.name+"-label");g.addClass("jqplot-"+this.name+"-tick");g.addClass("jqplot-mekko-barLabel");g.appendTo(this._elem);g=null}}}return this._elem};a.jqplot.MekkoAxisRenderer.prototype.reset=function(){this.min=this._min;this.max=this._max;this.tickInterval=this._tickInterval;this.numberTicks=this._numberTicks};a.jqplot.MekkoAxisRenderer.prototype.set=function(){var k=0;var d;var c=0;var j=0;var b=(this._label==null)?false:this._label.show;if(this.show&&this.showTicks){var g=this._ticks;for(var f=0;f<g.length;f++){var e=g[f];if(e.showLabel&&(!e.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){d=e._elem.outerHeight(true)}else{d=e._elem.outerWidth(true)}if(d>k){k=d}}}if(b){c=this._label._elem.outerWidth(true);j=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){k=k+j;this._elem.css({height:k+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){k=k+j;this._elem.css({height:k+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){k=k+c;this._elem.css({width:k+"px",left:"0px",top:"0px"});if(b&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",c+"px")}}else{k=k+c;this._elem.css({width:k+"px",right:"0px",top:"0px"});if(b&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",c+"px")}}}}}};a.jqplot.MekkoAxisRenderer.prototype.createTicks=function(){var z=this._ticks;var w=this.ticks;var B=this.name;var y=this._dataBounds;var p,x;var n,r;var d,c;var h,b,s,q;if(w.length){for(s=0;s<w.length;s++){var e=w[s];var h=new this.tickRenderer(this.tickOptions);if(e.constructor==Array){h.value=e[0];h.label=e[1];if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(e[0],this.name);this._ticks.push(h)}else{h.value=e;if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(e,this.name);this._ticks.push(h)}}this.numberTicks=w.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(B=="xaxis"||B=="x2axis"){p=this._plotDimensions.width}else{p=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}n=(this.min!=null)?this.min:y.min;r=(this.max!=null)?this.max:y.max;if(n==r){var g=0.05;if(n>0){g=Math.max(Math.log(n)/Math.LN10,0.05)}n-=g;r+=g}var k=r-n;var m,o;var v,l,u;var f=[3,5,6,11,21];if(this.name=="yaxis"||this.name=="y2axis"){this.min=0;this.max=100;if(!this.numberTicks){if(this.tickInterval){this.numberTicks=3+Math.ceil(k/this.tickInterval)}else{v=2+Math.ceil((p-(this.tickSpacing-1))/this.tickSpacing);for(s=0;s<f.length;s++){u=v/f[s];if(u==1){this.numberTicks=f[s];break}else{if(u>1){l=u;continue}else{if(u<1){if(Math.abs(l-1)<Math.abs(u-1)){this.numberTicks=f[s-1];break}else{this.numberTicks=f[s];break}}else{if(s==f.length-1){this.numberTicks=f[s]}}}}}this.tickInterval=k/(this.numberTicks-1)}}else{this.tickInterval=k/(this.numberTicks-1)}for(var s=0;s<this.numberTicks;s++){b=this.min+s*this.tickInterval;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}else{if(this.tickMode=="bar"){this.min=0;this.numberTicks=this._series.length+1;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(0,this.name);this._ticks.push(h);v=0;for(s=1;s<this.numberTicks;s++){v+=this._series[s-1]._sumy;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(v,this.name);this._ticks.push(h)}this.max=this.max||v;if(this.max>v){h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(this.max,this.name);this._ticks.push(h)}}else{if(this.tickMode=="even"){this.min=0;this.max=this.max||y.max;var A=2+Math.ceil((p-(this.tickSpacing-1))/this.tickSpacing);k=this.max-this.min;this.numberTicks=A;this.tickInterval=k/(this.numberTicks-1);for(s=0;s<this.numberTicks;s++){b=this.min+s*this.tickInterval;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}}}}};a.jqplot.MekkoAxisRenderer.prototype.pack=function(e,d){var C=this._ticks;var x=this.max;var v=this.min;var m=d.max;var j=d.min;var o=(this._label==null)?false:this._label.show;for(var s in e){this._elem.css(s,e[s])}this._offsets=d;var f=m-j;var g=x-v;this.p2u=function(b){return(b-j)*g/f+v};this.u2p=function(b){return(b-v)*f/g+j};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(b){return(b-v)*f/g};this.series_p2u=function(b){return b*g/f+v}}else{this.series_u2p=function(b){return(b-x)*f/g};this.series_p2u=function(b){return b*g/f+x}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var y=0;y<C.length;y++){var n=C[y];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){var A=(this.name=="xaxis")?1:-1;switch(n.labelPosition){case"auto":if(A*n.angle<0){c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2}else{c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2}break;case"end":c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;case"start":c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2;break;case"middle":c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;default:c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break}}else{c=-n.getWidth()/2}var D=this.u2p(n.value)+c+"px";n._elem.css("left",D);n.pack()}}var k;if(o){k=this._label._elem.outerWidth(true);this._label._elem.css("left",j+f/2-k/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}var B,u,q;for(var y=0;y<this.barLabels.length;y++){B=this._barLabels[y];if(B.show){k=B.getWidth();u=this._ticks[y].getLeft()+this._ticks[y].getWidth();q=this._ticks[y+1].getLeft();B._elem.css("left",(q+u-k)/2+"px");B._elem.css("top",this._ticks[y]._elem.css("top"));B.pack()}}}else{for(var y=0;y<C.length;y++){var n=C[y];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){var A=(this.name=="yaxis")?1:-1;switch(n.labelPosition){case"auto":case"end":if(A*n.angle<0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"start":if(n.angle>0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"middle":c=-n.getHeight()/2;break;default:c=-n.getHeight()/2;break}}else{c=-n.getHeight()/2}var D=this.u2p(n.value)+c+"px";n._elem.css("top",D);n.pack()}}if(o){var z=this._label._elem.outerHeight(true);this._label._elem.css("top",m-f/2-z/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js deleted file mode 100644 index 85d661d0..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js +++ /dev/null @@ -1,437 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.MekkoRenderer - * Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. - * the <$.jqplot.MekkoAxisRenderer> should be used with mekko charts. The mekko renderer - * overrides the default legend renderer with it's own $.jqplot.MekkoLegendRenderer - * which allows more flexibility to specify number of rows and columns in the legend. - * - * Data is specified per bar in the chart. You can specify data as an array of y values, or as - * an array of [label, value] pairs. Note that labels are used only on the first series. - * Labels on subsequent series are ignored: - * - * > bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]]; - * > bar2 = [15,6,9,13,6]; - * > bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]]; - * - * If you want to place labels for each bar under the axis, you use the barLabels option on - * the axes. The bar labels can be styled with the ".jqplot-mekko-barLabel" css class. - * - * > barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy']; - * > axes:{xaxis:{barLabels:barLabels}} - * - */ - - - $.jqplot.MekkoRenderer = function(){ - this.shapeRenderer = new $.jqplot.ShapeRenderer(); - // prop: borderColor - // color of the borders between areas on the chart - this.borderColor = null; - // prop: showBorders - // True to draw borders lines between areas on the chart. - // False will draw borders lines with the same color as the area. - this.showBorders = true; - }; - - // called with scope of series. - $.jqplot.MekkoRenderer.prototype.init = function(options, plot) { - this.fill = false; - this.fillRect = true; - this.strokeRect = true; - this.shadow = false; - // width of bar on x axis. - this._xwidth = 0; - this._xstart = 0; - $.extend(true, this.renderer, options); - // set the shape renderer options - var opts = {lineJoin:'miter', lineCap:'butt', isarc:false, fillRect:this.fillRect, strokeRect:this.strokeRect}; - this.renderer.shapeRenderer.init(opts); - plot.axes.x2axis._series.push(this); - this._type = 'mekko'; - }; - - // Method: setGridData - // converts the user data values to grid coordinates and stores them - // in the gridData array. Will convert user data into appropriate - // rectangles. - // Called with scope of a series. - $.jqplot.MekkoRenderer.prototype.setGridData = function(plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var data = this._plotData; - this.gridData = []; - // figure out width on x axis. - // this._xwidth = this._sumy / plot._sumy * this.canvas.getWidth(); - this._xwidth = xp(this._sumy) - xp(0); - if (this.index>0) { - this._xstart = plot.series[this.index-1]._xstart + plot.series[this.index-1]._xwidth; - } - var totheight = this.canvas.getHeight(); - var sumy = 0; - var cury; - var curheight; - for (var i=0; i<data.length; i++) { - if (data[i] != null) { - sumy += data[i][1]; - cury = totheight - (sumy / this._sumy * totheight); - curheight = data[i][1] / this._sumy * totheight; - this.gridData.push([this._xstart, cury, this._xwidth, curheight]); - } - } - }; - - // Method: makeGridData - // converts any arbitrary data values to grid coordinates and - // returns them. This method exists so that plugins can use a series' - // linerenderer to generate grid data points without overwriting the - // grid data associated with that series. - // Called with scope of a series. - $.jqplot.MekkoRenderer.prototype.makeGridData = function(data, plot) { - // recalculate the grid data - // figure out width on x axis. - var xp = this._xaxis.series_u2p; - var totheight = this.canvas.getHeight(); - var sumy = 0; - var cury; - var curheight; - var gd = []; - for (var i=0; i<data.length; i++) { - if (data[i] != null) { - sumy += data[i][1]; - cury = totheight - (sumy / this._sumy * totheight); - curheight = data[i][1] / this._sumy * totheight; - gd.push([this._xstart, cury, this._xwidth, curheight]); - } - } - return gd; - }; - - - // called within scope of series. - $.jqplot.MekkoRenderer.prototype.draw = function(ctx, gd, options) { - var i; - var opts = (options != undefined) ? options : {}; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors); - ctx.save(); - if (gd.length) { - if (showLine) { - for (i=0; i<gd.length; i++){ - opts.fillStyle = colorGenerator.next(); - if (this.renderer.showBorders) { - opts.strokeStyle = this.renderer.borderColor; - } - else { - opts.strokeStyle = opts.fillStyle; - } - this.renderer.shapeRenderer.draw(ctx, gd[i], opts); - } - } - } - - ctx.restore(); - }; - - $.jqplot.MekkoRenderer.prototype.drawShadow = function(ctx, gd, options) { - // This is a no-op, no shadows on mekko charts. - }; - - /** - * Class: $.jqplot.MekkoLegendRenderer - * Legend renderer used by mekko charts with options for - * controlling number or rows and columns as well as placement - * outside of plot area. - * - */ - $.jqplot.MekkoLegendRenderer = function(){ - // - }; - - $.jqplot.MekkoLegendRenderer.prototype.init = function(options) { - // prop: numberRows - // Maximum number of rows in the legend. 0 or null for unlimited. - this.numberRows = null; - // prop: numberColumns - // Maximum number of columns in the legend. 0 or null for unlimited. - this.numberColumns = null; - // this will override the placement option on the Legend object - this.placement = "outside"; - $.extend(true, this, options); - }; - - // called with scope of legend - $.jqplot.MekkoLegendRenderer.prototype.draw = function() { - var legend = this; - if (this.show) { - var series = this._series; - var ss = 'position:absolute;'; - ss += (this.background) ? 'background:'+this.background+';' : ''; - ss += (this.border) ? 'border:'+this.border+';' : ''; - ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : ''; - ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : ''; - ss += (this.textColor) ? 'color:'+this.textColor+';' : ''; - this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>'); - // Mekko charts legends don't go by number of series, but by number of data points - // in the series. Refactor things here for that. - - var pad = false, - reverse = true, // mekko charts are always stacked, so reverse - nr, nc; - var s = series[0]; - var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors); - - if (s.show) { - var pd = s.data; - if (this.numberRows) { - nr = this.numberRows; - if (!this.numberColumns){ - nc = Math.ceil(pd.length/nr); - } - else{ - nc = this.numberColumns; - } - } - else if (this.numberColumns) { - nc = this.numberColumns; - nr = Math.ceil(pd.length/this.numberColumns); - } - else { - nr = pd.length; - nc = 1; - } - - var i, j, tr, td1, td2, lt, rs, color; - var idx = 0; - - for (i=0; i<nr; i++) { - if (reverse){ - tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem); - } - else{ - tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem); - } - for (j=0; j<nc; j++) { - if (idx < pd.length) { - lt = this.labels[idx] || pd[idx][0].toString(); - color = colorGenerator.next(); - if (!reverse){ - if (i>0){ - pad = true; - } - else{ - pad = false; - } - } - else{ - if (i == nr -1){ - pad = false; - } - else{ - pad = true; - } - } - rs = (pad) ? this.rowSpacing : '0'; - - td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+ - '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+ - '</div></td>'); - td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>'); - if (this.escapeHtml){ - td2.text(lt); - } - else { - td2.html(lt); - } - if (reverse) { - td2.prependTo(tr); - td1.prependTo(tr); - } - else { - td1.appendTo(tr); - td2.appendTo(tr); - } - pad = true; - } - idx++; - } - } - - tr = null; - td1 = null; - td2 = null; - } - } - return this._elem; - }; - - $.jqplot.MekkoLegendRenderer.prototype.pack = function(offsets) { - if (this.show) { - // fake a grid for positioning - var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom}; - if (this.placement == 'insideGrid') { - switch (this.location) { - case 'nw': - var a = grid._left + this.xoffset; - var b = grid._top + this.yoffset; - this._elem.css('left', a); - this._elem.css('top', b); - break; - case 'n': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - var b = grid._top + this.yoffset; - this._elem.css('left', a); - this._elem.css('top', b); - break; - case 'ne': - var a = offsets.right + this.xoffset; - var b = grid._top + this.yoffset; - this._elem.css({right:a, top:b}); - break; - case 'e': - var a = offsets.right + this.xoffset; - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({right:a, top:b}); - break; - case 'se': - var a = offsets.right + this.xoffset; - var b = offsets.bottom + this.yoffset; - this._elem.css({right:a, bottom:b}); - break; - case 's': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - var b = offsets.bottom + this.yoffset; - this._elem.css({left:a, bottom:b}); - break; - case 'sw': - var a = grid._left + this.xoffset; - var b = offsets.bottom + this.yoffset; - this._elem.css({left:a, bottom:b}); - break; - case 'w': - var a = grid._left + this.xoffset; - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({left:a, top:b}); - break; - default: // same as 'se' - var a = grid._right - this.xoffset; - var b = grid._bottom + this.yoffset; - this._elem.css({right:a, bottom:b}); - break; - } - - } - else { - switch (this.location) { - case 'nw': - var a = this._plotDimensions.width - grid._left + this.xoffset; - var b = grid._top + this.yoffset; - this._elem.css('right', a); - this._elem.css('top', b); - break; - case 'n': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - var b = this._plotDimensions.height - grid._top + this.yoffset; - this._elem.css('left', a); - this._elem.css('bottom', b); - break; - case 'ne': - var a = this._plotDimensions.width - offsets.right + this.xoffset; - var b = grid._top + this.yoffset; - this._elem.css({left:a, top:b}); - break; - case 'e': - var a = this._plotDimensions.width - offsets.right + this.xoffset; - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({left:a, top:b}); - break; - case 'se': - var a = this._plotDimensions.width - offsets.right + this.xoffset; - var b = offsets.bottom + this.yoffset; - this._elem.css({left:a, bottom:b}); - break; - case 's': - var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; - var b = this._plotDimensions.height - offsets.bottom + this.yoffset; - this._elem.css({left:a, top:b}); - break; - case 'sw': - var a = this._plotDimensions.width - grid._left + this.xoffset; - var b = offsets.bottom + this.yoffset; - this._elem.css({right:a, bottom:b}); - break; - case 'w': - var a = this._plotDimensions.width - grid._left + this.xoffset; - var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; - this._elem.css({right:a, top:b}); - break; - default: // same as 'se' - var a = grid._right - this.xoffset; - var b = grid._bottom + this.yoffset; - this._elem.css({right:a, bottom:b}); - break; - } - } - } - }; - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - options = options || {}; - options.axesDefaults = options.axesDefaults || {}; - options.legend = options.legend || {}; - options.seriesDefaults = options.seriesDefaults || {}; - var setopts = false; - if (options.seriesDefaults.renderer == $.jqplot.MekkoRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer == $.jqplot.MekkoRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.MekkoAxisRenderer; - options.legend.renderer = $.jqplot.MekkoLegendRenderer; - options.legend.preDraw = true; - } - } - - $.jqplot.preInitHooks.push(preInit); - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js deleted file mode 100644 index b9131d2c..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(b){b.jqplot.MekkoRenderer=function(){this.shapeRenderer=new b.jqplot.ShapeRenderer();this.borderColor=null;this.showBorders=true};b.jqplot.MekkoRenderer.prototype.init=function(c,e){this.fill=false;this.fillRect=true;this.strokeRect=true;this.shadow=false;this._xwidth=0;this._xstart=0;b.extend(true,this.renderer,c);var d={lineJoin:"miter",lineCap:"butt",isarc:false,fillRect:this.fillRect,strokeRect:this.strokeRect};this.renderer.shapeRenderer.init(d);e.axes.x2axis._series.push(this);this._type="mekko"};b.jqplot.MekkoRenderer.prototype.setGridData=function(h){var e=this._xaxis.series_u2p;var c=this._yaxis.series_u2p;var g=this._plotData;this.gridData=[];this._xwidth=e(this._sumy)-e(0);if(this.index>0){this._xstart=h.series[this.index-1]._xstart+h.series[this.index-1]._xwidth}var l=this.canvas.getHeight();var d=0;var k;var j;for(var f=0;f<g.length;f++){if(g[f]!=null){d+=g[f][1];k=l-(d/this._sumy*l);j=g[f][1]/this._sumy*l;this.gridData.push([this._xstart,k,this._xwidth,j])}}};b.jqplot.MekkoRenderer.prototype.makeGridData=function(f,g){var d=this._xaxis.series_u2p;var l=this.canvas.getHeight();var c=0;var j;var h;var k=[];for(var e=0;e<f.length;e++){if(f[e]!=null){c+=f[e][1];j=l-(c/this._sumy*l);h=f[e][1]/this._sumy*l;k.push([this._xstart,j,this._xwidth,h])}}return k};b.jqplot.MekkoRenderer.prototype.draw=function(c,h,d){var e;var g=(d!=undefined)?d:{};var f=(g.showLine!=undefined)?g.showLine:this.showLine;var j=new b.jqplot.ColorGenerator(this.seriesColors);c.save();if(h.length){if(f){for(e=0;e<h.length;e++){g.fillStyle=j.next();if(this.renderer.showBorders){g.strokeStyle=this.renderer.borderColor}else{g.strokeStyle=g.fillStyle}this.renderer.shapeRenderer.draw(c,h[e],g)}}}c.restore()};b.jqplot.MekkoRenderer.prototype.drawShadow=function(c,e,d){};b.jqplot.MekkoLegendRenderer=function(){};b.jqplot.MekkoLegendRenderer.prototype.init=function(c){this.numberRows=null;this.numberColumns=null;this.placement="outside";b.extend(true,this,c)};b.jqplot.MekkoLegendRenderer.prototype.draw=function(){var f=this;if(this.show){var o=this._series;var r="position:absolute;";r+=(this.background)?"background:"+this.background+";":"";r+=(this.border)?"border:"+this.border+";":"";r+=(this.fontSize)?"font-size:"+this.fontSize+";":"";r+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";r+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=b('<table class="jqplot-table-legend" style="'+r+'"></table>');var w=false,n=true,c,l;var p=o[0];var d=new b.jqplot.ColorGenerator(p.seriesColors);if(p.show){var x=p.data;if(this.numberRows){c=this.numberRows;if(!this.numberColumns){l=Math.ceil(x.length/c)}else{l=this.numberColumns}}else{if(this.numberColumns){l=this.numberColumns;c=Math.ceil(x.length/this.numberColumns)}else{c=x.length;l=1}}var v,u,e,h,g,k,m,t;var q=0;for(v=0;v<c;v++){if(n){e=b('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{e=b('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(u=0;u<l;u++){if(q<x.length){k=this.labels[q]||x[q][0].toString();t=d.next();if(!n){if(v>0){w=true}else{w=false}}else{if(v==c-1){w=false}else{w=true}}m=(w)?this.rowSpacing:"0";h=b('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+m+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+t+';"></div></div></td>');g=b('<td class="jqplot-table-legend" style="padding-top:'+m+';"></td>');if(this.escapeHtml){g.text(k)}else{g.html(k)}if(n){g.prependTo(e);h.prependTo(e)}else{h.appendTo(e);g.appendTo(e)}w=true}q++}}e=null;h=null;g=null}}return this._elem};b.jqplot.MekkoLegendRenderer.prototype.pack=function(f){if(this.show){var e={_top:f.top,_left:f.left,_right:f.right,_bottom:this._plotDimensions.height-f.bottom};if(this.placement=="insideGrid"){switch(this.location){case"nw":var d=e._left+this.xoffset;var c=e._top+this.yoffset;this._elem.css("left",d);this._elem.css("top",c);break;case"n":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=e._top+this.yoffset;this._elem.css("left",d);this._elem.css("top",c);break;case"ne":var d=f.right+this.xoffset;var c=e._top+this.yoffset;this._elem.css({right:d,top:c});break;case"e":var d=f.right+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({right:d,top:c});break;case"se":var d=f.right+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({right:d,bottom:c});break;case"s":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"sw":var d=e._left+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"w":var d=e._left+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({left:d,top:c});break;default:var d=e._right-this.xoffset;var c=e._bottom+this.yoffset;this._elem.css({right:d,bottom:c});break}}else{switch(this.location){case"nw":var d=this._plotDimensions.width-e._left+this.xoffset;var c=e._top+this.yoffset;this._elem.css("right",d);this._elem.css("top",c);break;case"n":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=this._plotDimensions.height-e._top+this.yoffset;this._elem.css("left",d);this._elem.css("bottom",c);break;case"ne":var d=this._plotDimensions.width-f.right+this.xoffset;var c=e._top+this.yoffset;this._elem.css({left:d,top:c});break;case"e":var d=this._plotDimensions.width-f.right+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({left:d,top:c});break;case"se":var d=this._plotDimensions.width-f.right+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"s":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=this._plotDimensions.height-f.bottom+this.yoffset;this._elem.css({left:d,top:c});break;case"sw":var d=this._plotDimensions.width-e._left+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({right:d,bottom:c});break;case"w":var d=this._plotDimensions.width-e._left+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({right:d,top:c});break;default:var d=e._right-this.xoffset;var c=e._bottom+this.yoffset;this._elem.css({right:d,bottom:c});break}}}};function a(g,f,d){d=d||{};d.axesDefaults=d.axesDefaults||{};d.legend=d.legend||{};d.seriesDefaults=d.seriesDefaults||{};var c=false;if(d.seriesDefaults.renderer==b.jqplot.MekkoRenderer){c=true}else{if(d.series){for(var e=0;e<d.series.length;e++){if(d.series[e].renderer==b.jqplot.MekkoRenderer){c=true}}}}if(c){d.axesDefaults.renderer=b.jqplot.MekkoAxisRenderer;d.legend.renderer=b.jqplot.MekkoLegendRenderer;d.legend.preDraw=true}}b.jqplot.preInitHooks.push(a)})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js deleted file mode 100644 index 43a4c10f..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js +++ /dev/null @@ -1,1029 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.MeterGaugeRenderer - * Plugin renderer to draw a meter gauge chart. - * - * Data consists of a single series with 1 data point to position the gauge needle. - * - * To use this renderer, you need to include the - * meter gauge renderer plugin, for example: - * - * > <script type="text/javascript" src="plugins/jqplot.meterGaugeRenderer.js"></script> - * - * Properties described here are passed into the $.jqplot function - * as options on the series renderer. For example: - * - * > plot0 = $.jqplot('chart0',[[18]],{ - * > title: 'Network Speed', - * > seriesDefaults: { - * > renderer: $.jqplot.MeterGaugeRenderer, - * > rendererOptions: { - * > label: 'MB/s' - * > } - * > } - * > }); - * - * A meterGauge plot does not support events. - */ - $.jqplot.MeterGaugeRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.MeterGaugeRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.MeterGaugeRenderer.prototype.constructor = $.jqplot.MeterGaugeRenderer; - - // called with scope of a series - $.jqplot.MeterGaugeRenderer.prototype.init = function(options) { - // Group: Properties - // - // prop: diameter - // Outer diameter of the meterGauge, auto computed by default - this.diameter = null; - // prop: padding - // padding between the meterGauge and plot edges, auto - // calculated by default. - this.padding = null; - // prop: shadowOffset - // offset of the shadow from the gauge ring and offset of - // each succesive stroke of the shadow from the last. - this.shadowOffset = 2; - // prop: shadowAlpha - // transparency of the shadow (0 = transparent, 1 = opaque) - this.shadowAlpha = 0.07; - // prop: shadowDepth - // number of strokes to apply to the shadow, - // each stroke offset shadowOffset from the last. - this.shadowDepth = 4; - // prop: background - // background color of the inside of the gauge. - this.background = "#efefef"; - // prop: ringColor - // color of the outer ring, hub, and needle of the gauge. - this.ringColor = "#BBC6D0"; - // needle color not implemented yet. - this.needleColor = "#C3D3E5"; - // prop: tickColor - // color of the tick marks around the gauge. - this.tickColor = "989898"; - // prop: ringWidth - // width of the ring around the gauge. Auto computed by default. - this.ringWidth = null; - // prop: min - // Minimum value on the gauge. Auto computed by default - this.min; - // prop: max - // Maximum value on the gauge. Auto computed by default - this.max; - // prop: ticks - // Array of tick values. Auto computed by default. - this.ticks = []; - // prop: showTicks - // true to show ticks around gauge. - this.showTicks = true; - // prop: showTickLabels - // true to show tick labels next to ticks. - this.showTickLabels = true; - // prop: label - // A gauge label like 'kph' or 'Volts' - this.label = null; - // prop: labelHeightAdjust - // Number of Pixels to offset the label up (-) or down (+) from its default position. - this.labelHeightAdjust = 0; - // prop: labelPosition - // Where to position the label, either 'inside' or 'bottom'. - this.labelPosition = 'inside'; - // prop: intervals - // Array of ranges to be drawn around the gauge. - // Array of form: - // > [value1, value2, ...] - // indicating the values for the first, second, ... intervals. - this.intervals = []; - // prop: intervalColors - // Array of colors to use for the intervals. - this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]; - // prop: intervalInnerRadius - // Radius of the inner circle of the interval ring. - this.intervalInnerRadius = null; - // prop: intervalOuterRadius - // Radius of the outer circle of the interval ring. - this.intervalOuterRadius = null; - this.tickRenderer = $.jqplot.MeterGaugeTickRenderer; - // ticks spaced every 1, 2, 2.5, 5, 10, 20, .1, .2, .25, .5, etc. - this.tickPositions = [1, 2, 2.5, 5, 10]; - // prop: tickSpacing - // Degrees between ticks. This is a target number, if - // incompatible span and ticks are supplied, a suitable - // spacing close to this value will be computed. - this.tickSpacing = 30; - this.numberMinorTicks = null; - // prop: hubRadius - // Radius of the hub at the bottom center of gauge which the needle attaches to. - // Auto computed by default - this.hubRadius = null; - // prop: tickPadding - // padding of the tick marks to the outer ring and the tick labels to marks. - // Auto computed by default. - this.tickPadding = null; - // prop: needleThickness - // Maximum thickness the needle. Auto computed by default. - this.needleThickness = null; - // prop: needlePad - // Padding between needle and inner edge of the ring when the needle is at the min or max gauge value. - this.needlePad = 6; - // prop: pegNeedle - // True will stop needle just below/above the min/max values if data is below/above min/max, - // as if the meter is "pegged". - this.pegNeedle = true; - this._type = 'meterGauge'; - - $.extend(true, this, options); - this.type = null; - this.numberTicks = null; - this.tickInterval = null; - // span, the sweep (in degrees) from min to max. This gauge is - // a semi-circle. - this.span = 180; - // get rid of this nonsense - // this.innerSpan = this.span; - if (this.type == 'circular') { - this.semiCircular = false; - } - else if (this.type != 'circular') { - this.semiCircular = true; - } - else { - this.semiCircular = (this.span <= 180) ? true : false; - } - this._tickPoints = []; - // reference to label element. - this._labelElem = null; - - // start the gauge at the beginning of the span - this.startAngle = (90 + (360 - this.span)/2) * Math.PI/180; - this.endAngle = (90 - (360 - this.span)/2) * Math.PI/180; - - this.setmin = !!(this.min == null); - this.setmax = !!(this.max == null); - - // if given intervals and is an array of values, create labels and colors. - if (this.intervals.length) { - if (this.intervals[0].length == null || this.intervals.length == 1) { - for (var i=0; i<this.intervals.length; i++) { - this.intervals[i] = [this.intervals[i], this.intervals[i], this.intervalColors[i]]; - } - } - else if (this.intervals[0].length == 2) { - for (i=0; i<this.intervals.length; i++) { - this.intervals[i] = [this.intervals[i][0], this.intervals[i][1], this.intervalColors[i]]; - } - } - } - - // compute min, max and ticks if not supplied: - if (this.ticks.length) { - if (this.ticks[0].length == null || this.ticks[0].length == 1) { - for (var i=0; i<this.ticks.length; i++) { - this.ticks[i] = [this.ticks[i], this.ticks[i]]; - } - } - this.min = (this.min == null) ? this.ticks[0][0] : this.min; - this.max = (this.max == null) ? this.ticks[this.ticks.length-1][0] : this.max; - this.setmin = false; - this.setmax = false; - this.numberTicks = this.ticks.length; - this.tickInterval = this.ticks[1][0] - this.ticks[0][0]; - this.tickFactor = Math.floor(parseFloat((Math.log(this.tickInterval)/Math.log(10)).toFixed(11))); - // use the first interal to calculate minor ticks; - this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor); - if (!this.numberMinorTicks) { - this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1); - } - if (!this.numberMinorTicks) { - this.numberMinorTicks = 1; - } - } - - else if (this.intervals.length) { - this.min = (this.min == null) ? 0 : this.min; - this.setmin = false; - if (this.max == null) { - if (this.intervals[this.intervals.length-1][0] >= this.data[0][1]) { - this.max = this.intervals[this.intervals.length-1][0]; - this.setmax = false; - } - } - else { - this.setmax = false; - } - } - - else { - // no ticks and no intervals supplied, put needle in middle - this.min = (this.min == null) ? 0 : this.min; - this.setmin = false; - if (this.max == null) { - this.max = this.data[0][1] * 1.25; - this.setmax = true; - } - else { - this.setmax = false; - } - } - }; - - $.jqplot.MeterGaugeRenderer.prototype.setGridData = function(plot) { - // set gridData property. This will hold angle in radians of each data point. - var stack = []; - var td = []; - var sa = this.startAngle; - for (var i=0; i<this.data.length; i++){ - stack.push(this.data[i][1]); - td.push([this.data[i][0]]); - if (i>0) { - stack[i] += stack[i-1]; - } - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i<stack.length; i++) { - td[i][1] = stack[i] * fact; - } - this.gridData = td; - }; - - $.jqplot.MeterGaugeRenderer.prototype.makeGridData = function(data, plot) { - var stack = []; - var td = []; - var sa = this.startAngle; - for (var i=0; i<data.length; i++){ - stack.push(data[i][1]); - td.push([data[i][0]]); - if (i>0) { - stack[i] += stack[i-1]; - } - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i<stack.length; i++) { - td[i][1] = stack[i] * fact; - } - return td; - }; - - - function getnmt(pos, interval, fact) { - var temp; - for (var i=pos.length-1; i>=0; i--) { - temp = interval/(pos[i] * Math.pow(10, fact)); - if (temp == 4 || temp == 5) { - return temp - 1; - } - } - return null; - } - - // called with scope of series - $.jqplot.MeterGaugeRenderer.prototype.draw = function (ctx, gd, options) { - var i; - var opts = (options != undefined) ? options : {}; - // offset and direction of offset due to legend placement - var offx = 0; - var offy = 0; - var trans = 1; - if (options.legendInfo && options.legendInfo.placement == 'inside') { - var li = options.legendInfo; - switch (li.location) { - case 'nw': - offx = li.width + li.xoffset; - break; - case 'w': - offx = li.width + li.xoffset; - break; - case 'sw': - offx = li.width + li.xoffset; - break; - case 'ne': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'e': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'se': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'n': - offy = li.height + li.yoffset; - break; - case 's': - offy = li.height + li.yoffset; - trans = -1; - break; - default: - break; - } - } - - - - // pre-draw so can get it's dimensions. - if (this.label) { - this._labelElem = $('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+'</div>'); - this.canvas._elem.after(this._labelElem); - } - - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var cw = ctx.canvas.width; - var ch = ctx.canvas.height; - if (this.padding == null) { - this.padding = Math.round(Math.min(cw, ch)/30); - } - var w = cw - offx - 2 * this.padding; - var h = ch - offy - 2 * this.padding; - if (this.labelPosition == 'bottom' && this.label) { - h -= this._labelElem.outerHeight(true); - } - var mindim = Math.min(w,h); - var d = mindim; - - if (!this.diameter) { - if (this.semiCircular) { - if ( w >= 2*h) { - if (!this.ringWidth) { - this.ringWidth = 2*h/35; - } - this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8); - this.innerPad = this.ringWidth/2 + this.needleThickness/2 + this.needlePad; - this.diameter = 2 * (h - 2*this.innerPad); - } - else { - if (!this.ringWidth) { - this.ringWidth = w/35; - } - this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8); - this.innerPad = this.ringWidth/2 + this.needleThickness/2 + this.needlePad; - this.diameter = w - 2*this.innerPad - this.ringWidth - this.padding; - } - // center taking into account legend and over draw for gauge bottom below hub. - // this will be center of hub. - this._center = [(cw - trans * offx)/2 + trans * offx, (ch + trans*offy - this.padding - this.ringWidth - this.innerPad)]; - } - else { - if (!this.ringWidth) { - this.ringWidth = d/35; - } - this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8); - this.innerPad = 0; - this.diameter = d - this.ringWidth; - // center in middle of canvas taking into account legend. - // will be center of hub. - this._center = [(cw-trans*offx)/2 + trans * offx, (ch-trans*offy)/2 + trans * offy]; - } - } - - - if (this._labelElem && this.labelPosition == 'bottom') { - this._center[1] -= this._labelElem.outerHeight(true); - } - - this._radius = this.diameter/2; - - this.tickSpacing = 6000/this.diameter; - - if (!this.hubRadius) { - this.hubRadius = this.diameter/18; - } - - this.shadowOffset = 0.5 + this.ringWidth/9; - this.shadowWidth = this.ringWidth*1; - - this.tickPadding = 3 + Math.pow(this.diameter/20, 0.7); - this.tickOuterRadius = this._radius - this.ringWidth/2 - this.tickPadding; - this.tickLength = (this.showTicks) ? this._radius/13 : 0; - - if (this.ticks.length == 0) { - // no ticks, lets make some. - var max = this.max, - min = this.min, - setmax = this.setmax, - setmin = this.setmin, - ti = (max - min) * this.tickSpacing / this.span; - var tf = Math.floor(parseFloat((Math.log(ti)/Math.log(10)).toFixed(11))); - var tp = (ti/Math.pow(10, tf)); - (tp > 2 && tp <= 2.5) ? tp = 2.5 : tp = Math.ceil(tp); - var t = this.tickPositions; - var tpindex, nt; - - for (i=0; i<t.length; i++) { - if (tp == t[i] || i && t[i-1] < tp && tp < t[i]) { - ti = t[i]*Math.pow(10, tf); - tpindex = i; - } - } - - for (i=0; i<t.length; i++) { - if (tp == t[i] || i && t[i-1] < tp && tp < t[i]) { - ti = t[i]*Math.pow(10, tf); - nt = Math.ceil((max - min) / ti); - } - } - - // both max and min are free - if (setmax && setmin) { - var tmin = (min > 0) ? min - min % ti : min - min % ti - ti; - if (!this.forceZero) { - var diff = Math.min(min - tmin, 0.8*ti); - var ntp = Math.floor(diff/t[tpindex]); - if (ntp > 1) { - tmin = tmin + t[tpindex] * (ntp-1); - if (parseInt(tmin, 10) != tmin && parseInt(tmin-t[tpindex], 10) == tmin-t[tpindex]) { - tmin = tmin - t[tpindex]; - } - } - } - if (min == tmin) { - min -= ti; - } - else { - // tmin should always be lower than dataMin - if (min - tmin > 0.23*ti) { - min = tmin; - } - else { - min = tmin -ti; - nt += 1; - } - } - nt += 1; - var tmax = min + (nt - 1) * ti; - if (max >= tmax) { - tmax += ti; - nt += 1; - } - // now tmax should always be mroe than dataMax - if (tmax - max < 0.23*ti) { - tmax += ti; - nt += 1; - } - this.max = max = tmax; - this.min = min; - - this.tickInterval = ti; - this.numberTicks = nt; - var it; - for (i=0; i<nt; i++) { - it = parseFloat((min+i*ti).toFixed(11)); - this.ticks.push([it, it]); - } - this.max = this.ticks[nt-1][1]; - - this.tickFactor = tf; - // determine number of minor ticks - - this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor); - - if (!this.numberMinorTicks) { - this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1); - } - } - // max is free, min is fixed - else if (setmax) { - var tmax = min + (nt - 1) * ti; - if (max >= tmax) { - max = tmax + ti; - nt += 1; - } - else { - max = tmax; - } - - this.tickInterval = this.tickInterval || ti; - this.numberTicks = this.numberTicks || nt; - var it; - for (i=0; i<this.numberTicks; i++) { - it = parseFloat((min+i*this.tickInterval).toFixed(11)); - this.ticks.push([it, it]); - } - this.max = this.ticks[this.numberTicks-1][1]; - - this.tickFactor = tf; - // determine number of minor ticks - this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor); - - if (!this.numberMinorTicks) { - this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1); - } - } - - // not setting max or min - if (!setmax && !setmin) { - var range = this.max - this.min; - tf = Math.floor(parseFloat((Math.log(range)/Math.log(10)).toFixed(11))) - 1; - var nticks = [5,6,4,7,3,8,9,10,2], res, numticks, nonSigDigits=0, sigRange; - // check to see how many zeros are at the end of the range - if (range > 1) { - var rstr = String(range); - if (rstr.search(/\./) == -1) { - var pos = rstr.search(/0+$/); - nonSigDigits = (pos > 0) ? rstr.length - pos - 1 : 0; - } - } - sigRange = range/Math.pow(10, nonSigDigits); - for (i=0; i<nticks.length; i++) { - res = sigRange/(nticks[i]-1); - if (res == parseInt(res, 10)) { - this.numberTicks = nticks[i]; - this.tickInterval = range/(this.numberTicks-1); - this.tickFactor = tf+1; - break; - } - } - var it; - for (i=0; i<this.numberTicks; i++) { - it = parseFloat((this.min+i*this.tickInterval).toFixed(11)); - this.ticks.push([it, it]); - } - // determine number of minor ticks - this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor); - - if (!this.numberMinorTicks) { - this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1); - } - - if (!this.numberMinorTicks) { - this.numberMinorTicks = 1; - var nums = [4, 5, 3, 6, 2]; - for (i=0; i<5; i++) { - var temp = this.tickInterval/nums[i]; - if (temp == parseInt(temp, 10)) { - this.numberMinorTicks = nums[i]-1; - break; - } - } - } - } - } - - - var r = this._radius, - sa = this.startAngle, - ea = this.endAngle, - pi = Math.PI, - hpi = Math.PI/2; - - if (this.semiCircular) { - var overAngle = Math.atan(this.innerPad/r), - outersa = this.outerStartAngle = sa - overAngle, - outerea = this.outerEndAngle = ea + overAngle, - hubsa = this.hubStartAngle = sa - Math.atan(this.innerPad/this.hubRadius*2), - hubea = this.hubEndAngle = ea + Math.atan(this.innerPad/this.hubRadius*2); - - ctx.save(); - - ctx.translate(this._center[0], this._center[1]); - ctx.lineJoin = "round"; - ctx.lineCap = "round"; - - // draw the innerbackground - ctx.save(); - ctx.beginPath(); - ctx.fillStyle = this.background; - ctx.arc(0, 0, r, outersa, outerea, false); - ctx.closePath(); - ctx.fill(); - ctx.restore(); - - // draw the shadow - // the outer ring. - var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')'; - ctx.save(); - for (var i=0; i<this.shadowDepth; i++) { - ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI)); - ctx.beginPath(); - ctx.strokeStyle = shadowColor; - ctx.lineWidth = this.shadowWidth; - ctx.arc(0 ,0, r, outersa, outerea, false); - ctx.closePath(); - ctx.stroke(); - } - ctx.restore(); - - // the inner hub. - ctx.save(); - var tempd = parseInt((this.shadowDepth+1)/2, 10); - for (var i=0; i<tempd; i++) { - ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI)); - ctx.beginPath(); - ctx.fillStyle = shadowColor; - ctx.arc(0 ,0, this.hubRadius, hubsa, hubea, false); - ctx.closePath(); - ctx.fill(); - } - ctx.restore(); - - // draw the outer ring. - ctx.save(); - ctx.beginPath(); - ctx.strokeStyle = this.ringColor; - ctx.lineWidth = this.ringWidth; - ctx.arc(0 ,0, r, outersa, outerea, false); - ctx.closePath(); - ctx.stroke(); - ctx.restore(); - - // draw the hub - - ctx.save(); - ctx.beginPath(); - ctx.fillStyle = this.ringColor; - ctx.arc(0 ,0, this.hubRadius,hubsa, hubea, false); - ctx.closePath(); - ctx.fill(); - ctx.restore(); - - // draw the ticks - if (this.showTicks) { - ctx.save(); - var orad = this.tickOuterRadius, - tl = this.tickLength, - mtl = tl/2, - nmt = this.numberMinorTicks, - ts = this.span * Math.PI / 180 / (this.ticks.length-1), - mts = ts/(nmt + 1); - - for (i = 0; i<this.ticks.length; i++) { - ctx.beginPath(); - ctx.lineWidth = 1.5 + this.diameter/360; - ctx.strokeStyle = this.ringColor; - var wps = ts*i+sa; - ctx.moveTo(-orad * Math.cos(ts*i+sa), orad * Math.sin(ts*i+sa)); - ctx.lineTo(-(orad-tl) * Math.cos(ts*i+sa), (orad - tl) * Math.sin(ts*i+sa)); - this._tickPoints.push([(orad-tl) * Math.cos(ts*i+sa) + this._center[0] + this.canvas._offsets.left, (orad - tl) * Math.sin(ts*i+sa) + this._center[1] + this.canvas._offsets.top, ts*i+sa]); - ctx.stroke(); - ctx.lineWidth = 1.0 + this.diameter/440; - if (i<this.ticks.length-1) { - for (var j=1; j<=nmt; j++) { - ctx.beginPath(); - ctx.moveTo(-orad * Math.cos(ts*i+mts*j+sa), orad * Math.sin(ts*i+mts*j+sa)); - ctx.lineTo(-(orad-mtl) * Math.cos(ts*i+mts*j+sa), (orad-mtl) * Math.sin(ts*i+mts*j+sa)); - ctx.stroke(); - } - } - } - ctx.restore(); - } - - // draw the tick labels - if (this.showTickLabels) { - var elem, l, t, ew, eh, dim, maxdim=0; - var tp = this.tickPadding * (1 - 1/(this.diameter/80+1)); - for (i=0; i<this.ticks.length; i++) { - elem = $('<div class="jqplot-meterGauge-tick" style="position:absolute;">'+this.ticks[i][1]+'</div>'); - this.canvas._elem.after(elem); - ew = elem.outerWidth(true); - eh = elem.outerHeight(true); - l = this._tickPoints[i][0] - ew * (this._tickPoints[i][2]-Math.PI)/Math.PI - tp * Math.cos(this._tickPoints[i][2]); - t = this._tickPoints[i][1] - eh/2 + eh/2 * Math.pow(Math.abs((Math.sin(this._tickPoints[i][2]))), 0.5) + tp/3 * Math.pow(Math.abs((Math.sin(this._tickPoints[i][2]))), 0.5) ; - // t = this._tickPoints[i][1] - eh/2 - eh/2 * Math.sin(this._tickPoints[i][2]) - tp/2 * Math.sin(this._tickPoints[i][2]); - elem.css({left:l, top:t}); - dim = ew*Math.cos(this._tickPoints[i][2]) + eh*Math.sin(Math.PI/2+this._tickPoints[i][2]/2); - maxdim = (dim > maxdim) ? dim : maxdim; - } - } - - // draw the gauge label - if (this.label && this.labelPosition == 'inside') { - var l = this._center[0] + this.canvas._offsets.left; - var tp = this.tickPadding * (1 - 1/(this.diameter/80+1)); - var t = 0.5*(this._center[1] + this.canvas._offsets.top - this.hubRadius) + 0.5*(this._center[1] + this.canvas._offsets.top - this.tickOuterRadius + this.tickLength + tp) + this.labelHeightAdjust; - // this._labelElem = $('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+'</div>'); - // this.canvas._elem.after(this._labelElem); - l -= this._labelElem.outerWidth(true)/2; - t -= this._labelElem.outerHeight(true)/2; - this._labelElem.css({left:l, top:t}); - } - - else if (this.label && this.labelPosition == 'bottom') { - var l = this._center[0] + this.canvas._offsets.left - this._labelElem.outerWidth(true)/2; - var t = this._center[1] + this.canvas._offsets.top + this.innerPad + + this.ringWidth + this.padding + this.labelHeightAdjust; - this._labelElem.css({left:l, top:t}); - - } - - // draw the intervals - - ctx.save(); - var inner = this.intervalInnerRadius || this.hubRadius * 1.5; - if (this.intervalOuterRadius == null) { - if (this.showTickLabels) { - var outer = (this.tickOuterRadius - this.tickLength - this.tickPadding - this.diameter/8); - } - else { - var outer = (this.tickOuterRadius - this.tickLength - this.diameter/16); - } - } - else { - var outer = this.intervalOuterRadius; - } - var range = this.max - this.min; - var intrange = this.intervals[this.intervals.length-1] - this.min; - var start, end, span = this.span*Math.PI/180; - for (i=0; i<this.intervals.length; i++) { - start = (i == 0) ? sa : sa + (this.intervals[i-1][0] - this.min)*span/range; - if (start < 0) { - start = 0; - } - end = sa + (this.intervals[i][0] - this.min)*span/range; - if (end < 0) { - end = 0; - } - ctx.beginPath(); - ctx.fillStyle = this.intervals[i][2]; - ctx.arc(0, 0, inner, start, end, false); - ctx.lineTo(outer*Math.cos(end), outer*Math.sin(end)); - ctx.arc(0, 0, outer, end, start, true); - ctx.lineTo(inner*Math.cos(start), inner*Math.sin(start)); - ctx.closePath(); - ctx.fill(); - } - ctx.restore(); - - // draw the needle - var datapoint = this.data[0][1]; - var dataspan = this.max - this.min; - if (this.pegNeedle) { - if (this.data[0][1] > this.max + dataspan*3/this.span) { - datapoint = this.max + dataspan*3/this.span; - } - if (this.data[0][1] < this.min - dataspan*3/this.span) { - datapoint = this.min - dataspan*3/this.span; - } - } - var dataang = (datapoint - this.min)/dataspan * this.span * Math.PI/180 + this.startAngle; - - - ctx.save(); - ctx.beginPath(); - ctx.fillStyle = this.ringColor; - ctx.strokeStyle = this.ringColor; - this.needleLength = (this.tickOuterRadius - this.tickLength) * 0.85; - this.needleThickness = (this.needleThickness < 2) ? 2 : this.needleThickness; - var endwidth = this.needleThickness * 0.4; - - - var dl = this.needleLength/10; - var dt = (this.needleThickness - endwidth)/10; - var templ; - for (var i=0; i<10; i++) { - templ = this.needleThickness - i*dt; - ctx.moveTo(dl*i*Math.cos(dataang), dl*i*Math.sin(dataang)); - ctx.lineWidth = templ; - ctx.lineTo(dl*(i+1)*Math.cos(dataang), dl*(i+1)*Math.sin(dataang)); - ctx.stroke(); - } - - ctx.restore(); - } - else { - this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy]; - } - }; - - $.jqplot.MeterGaugeAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - }; - - $.jqplot.MeterGaugeAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.MeterGaugeAxisRenderer.prototype.constructor = $.jqplot.MeterGaugeAxisRenderer; - - - // There are no traditional axes on a gauge chart. We just need to provide - // dummy objects with properties so the plot will render. - // called with scope of axis object. - $.jqplot.MeterGaugeAxisRenderer.prototype.init = function(options){ - // - this.tickRenderer = $.jqplot.MeterGaugeTickRenderer; - $.extend(true, this, options); - // I don't think I'm going to need _dataBounds here. - // have to go Axis scaling in a way to fit chart onto plot area - // and provide u2p and p2u functionality for mouse cursor, etc. - // for convienence set _dataBounds to 0 and 100 and - // set min/max to 0 and 100. - this._dataBounds = {min:0, max:100}; - this.min = 0; - this.max = 100; - this.showTicks = false; - this.ticks = []; - this.showMark = false; - this.show = false; - }; - - $.jqplot.MeterGaugeLegendRenderer = function(){ - $.jqplot.TableLegendRenderer.call(this); - }; - - $.jqplot.MeterGaugeLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.MeterGaugeLegendRenderer.prototype.constructor = $.jqplot.MeterGaugeLegendRenderer; - - /** - * Class: $.jqplot.MeterGaugeLegendRenderer - *Meter gauges don't typically have a legend, this overrides the default legend renderer. - */ - $.jqplot.MeterGaugeLegendRenderer.prototype.init = function(options) { - // Maximum number of rows in the legend. 0 or null for unlimited. - this.numberRows = null; - // Maximum number of columns in the legend. 0 or null for unlimited. - this.numberColumns = null; - $.extend(true, this, options); - }; - - // called with context of legend - $.jqplot.MeterGaugeLegendRenderer.prototype.draw = function() { - if (this.show) { - var series = this._series; - var ss = 'position:absolute;'; - ss += (this.background) ? 'background:'+this.background+';' : ''; - ss += (this.border) ? 'border:'+this.border+';' : ''; - ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : ''; - ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : ''; - ss += (this.textColor) ? 'color:'+this.textColor+';' : ''; - ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : ''; - ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : ''; - ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : ''; - ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : ''; - this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>'); - // MeterGauge charts legends don't go by number of series, but by number of data points - // in the series. Refactor things here for that. - - var pad = false, - reverse = false, - nr, nc; - var s = series[0]; - - if (s.show) { - var pd = s.data; - if (this.numberRows) { - nr = this.numberRows; - if (!this.numberColumns){ - nc = Math.ceil(pd.length/nr); - } - else{ - nc = this.numberColumns; - } - } - else if (this.numberColumns) { - nc = this.numberColumns; - nr = Math.ceil(pd.length/this.numberColumns); - } - else { - nr = pd.length; - nc = 1; - } - - var i, j, tr, td1, td2, lt, rs, color; - var idx = 0; - - for (i=0; i<nr; i++) { - if (reverse){ - tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem); - } - else{ - tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem); - } - for (j=0; j<nc; j++) { - if (idx < pd.length){ - // debugger - lt = this.labels[idx] || pd[idx][0].toString(); - color = s.color; - if (!reverse){ - if (i>0){ - pad = true; - } - else{ - pad = false; - } - } - else{ - if (i == nr -1){ - pad = false; - } - else{ - pad = true; - } - } - rs = (pad) ? this.rowSpacing : '0'; - - td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+ - '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+ - '</div></td>'); - td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>'); - if (this.escapeHtml){ - td2.text(lt); - } - else { - td2.html(lt); - } - if (reverse) { - td2.prependTo(tr); - td1.prependTo(tr); - } - else { - td1.appendTo(tr); - td2.appendTo(tr); - } - pad = true; - } - idx++; - } - } - } - } - return this._elem; - }; - - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - // debugger - options = options || {}; - options.axesDefaults = options.axesDefaults || {}; - options.legend = options.legend || {}; - options.seriesDefaults = options.seriesDefaults || {}; - options.grid = options.grid || {}; - - // only set these if there is a gauge series - var setopts = false; - if (options.seriesDefaults.renderer == $.jqplot.MeterGaugeRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer == $.jqplot.MeterGaugeRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.MeterGaugeAxisRenderer; - options.legend.renderer = $.jqplot.MeterGaugeLegendRenderer; - options.legend.preDraw = true; - options.grid.background = options.grid.background || 'white'; - options.grid.drawGridlines = false; - options.grid.borderWidth = (options.grid.borderWidth != null) ? options.grid.borderWidth : 0; - options.grid.shadow = (options.grid.shadow != null) ? options.grid.shadow : false; - } - } - - // called with scope of plot - function postParseOptions(options) { - // - } - - $.jqplot.preInitHooks.push(preInit); - $.jqplot.postParseOptionsHooks.push(postParseOptions); - - $.jqplot.MeterGaugeTickRenderer = function() { - $.jqplot.AxisTickRenderer.call(this); - }; - - $.jqplot.MeterGaugeTickRenderer.prototype = new $.jqplot.AxisTickRenderer(); - $.jqplot.MeterGaugeTickRenderer.prototype.constructor = $.jqplot.MeterGaugeTickRenderer; - -})(jQuery); - diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js deleted file mode 100644 index 2514b739..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(c){c.jqplot.MeterGaugeRenderer=function(){c.jqplot.LineRenderer.call(this)};c.jqplot.MeterGaugeRenderer.prototype=new c.jqplot.LineRenderer();c.jqplot.MeterGaugeRenderer.prototype.constructor=c.jqplot.MeterGaugeRenderer;c.jqplot.MeterGaugeRenderer.prototype.init=function(e){this.diameter=null;this.padding=null;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=4;this.background="#efefef";this.ringColor="#BBC6D0";this.needleColor="#C3D3E5";this.tickColor="989898";this.ringWidth=null;this.min;this.max;this.ticks=[];this.showTicks=true;this.showTickLabels=true;this.label=null;this.labelHeightAdjust=0;this.labelPosition="inside";this.intervals=[];this.intervalColors=["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"];this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;this.tickPositions=[1,2,2.5,5,10];this.tickSpacing=30;this.numberMinorTicks=null;this.hubRadius=null;this.tickPadding=null;this.needleThickness=null;this.needlePad=6;this.pegNeedle=true;this._type="meterGauge";c.extend(true,this,e);this.type=null;this.numberTicks=null;this.tickInterval=null;this.span=180;if(this.type=="circular"){this.semiCircular=false}else{if(this.type!="circular"){this.semiCircular=true}else{this.semiCircular=(this.span<=180)?true:false}}this._tickPoints=[];this._labelElem=null;this.startAngle=(90+(360-this.span)/2)*Math.PI/180;this.endAngle=(90-(360-this.span)/2)*Math.PI/180;this.setmin=!!(this.min==null);this.setmax=!!(this.max==null);if(this.intervals.length){if(this.intervals[0].length==null||this.intervals.length==1){for(var f=0;f<this.intervals.length;f++){this.intervals[f]=[this.intervals[f],this.intervals[f],this.intervalColors[f]]}}else{if(this.intervals[0].length==2){for(f=0;f<this.intervals.length;f++){this.intervals[f]=[this.intervals[f][0],this.intervals[f][1],this.intervalColors[f]]}}}}if(this.ticks.length){if(this.ticks[0].length==null||this.ticks[0].length==1){for(var f=0;f<this.ticks.length;f++){this.ticks[f]=[this.ticks[f],this.ticks[f]]}}this.min=(this.min==null)?this.ticks[0][0]:this.min;this.max=(this.max==null)?this.ticks[this.ticks.length-1][0]:this.max;this.setmin=false;this.setmax=false;this.numberTicks=this.ticks.length;this.tickInterval=this.ticks[1][0]-this.ticks[0][0];this.tickFactor=Math.floor(parseFloat((Math.log(this.tickInterval)/Math.log(10)).toFixed(11)));this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}if(!this.numberMinorTicks){this.numberMinorTicks=1}}else{if(this.intervals.length){this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){if(this.intervals[this.intervals.length-1][0]>=this.data[0][1]){this.max=this.intervals[this.intervals.length-1][0];this.setmax=false}}else{this.setmax=false}}else{this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){this.max=this.data[0][1]*1.25;this.setmax=true}else{this.setmax=false}}}};c.jqplot.MeterGaugeRenderer.prototype.setGridData=function(j){var f=[];var k=[];var e=this.startAngle;for(var h=0;h<this.data.length;h++){f.push(this.data[h][1]);k.push([this.data[h][0]]);if(h>0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h<f.length;h++){k[h][1]=f[h]*g}this.gridData=k};c.jqplot.MeterGaugeRenderer.prototype.makeGridData=function(j,k){var f=[];var l=[];var e=this.startAngle;for(var h=0;h<j.length;h++){f.push(j[h][1]);l.push([j[h][0]]);if(h>0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h<f.length;h++){l[h][1]=f[h]*g}return l};function b(j,f,g){var e;for(var h=j.length-1;h>=0;h--){e=f/(j[h]*Math.pow(10,g));if(e==4||e==5){return e-1}}return null}c.jqplot.MeterGaugeRenderer.prototype.draw=function(X,aC,ap){var aa;var aM=(ap!=undefined)?ap:{};var ai=0;var ah=0;var at=1;if(ap.legendInfo&&ap.legendInfo.placement=="inside"){var aI=ap.legendInfo;switch(aI.location){case"nw":ai=aI.width+aI.xoffset;break;case"w":ai=aI.width+aI.xoffset;break;case"sw":ai=aI.width+aI.xoffset;break;case"ne":ai=aI.width+aI.xoffset;at=-1;break;case"e":ai=aI.width+aI.xoffset;at=-1;break;case"se":ai=aI.width+aI.xoffset;at=-1;break;case"n":ah=aI.height+aI.yoffset;break;case"s":ah=aI.height+aI.yoffset;at=-1;break;default:break}}if(this.label){this._labelElem=c('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+"</div>");this.canvas._elem.after(this._labelElem)}var m=(aM.shadow!=undefined)?aM.shadow:this.shadow;var N=(aM.showLine!=undefined)?aM.showLine:this.showLine;var I=(aM.fill!=undefined)?aM.fill:this.fill;var K=X.canvas.width;var S=X.canvas.height;if(this.padding==null){this.padding=Math.round(Math.min(K,S)/30)}var Q=K-ai-2*this.padding;var ab=S-ah-2*this.padding;if(this.labelPosition=="bottom"&&this.label){ab-=this._labelElem.outerHeight(true)}var L=Math.min(Q,ab);var ad=L;if(!this.diameter){if(this.semiCircular){if(Q>=2*ab){if(!this.ringWidth){this.ringWidth=2*ab/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=2*(ab-2*this.innerPad)}else{if(!this.ringWidth){this.ringWidth=Q/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=Q-2*this.innerPad-this.ringWidth-this.padding}this._center=[(K-at*ai)/2+at*ai,(S+at*ah-this.padding-this.ringWidth-this.innerPad)]}else{if(!this.ringWidth){this.ringWidth=ad/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=0;this.diameter=ad-this.ringWidth;this._center=[(K-at*ai)/2+at*ai,(S-at*ah)/2+at*ah]}}if(this._labelElem&&this.labelPosition=="bottom"){this._center[1]-=this._labelElem.outerHeight(true)}this._radius=this.diameter/2;this.tickSpacing=6000/this.diameter;if(!this.hubRadius){this.hubRadius=this.diameter/18}this.shadowOffset=0.5+this.ringWidth/9;this.shadowWidth=this.ringWidth*1;this.tickPadding=3+Math.pow(this.diameter/20,0.7);this.tickOuterRadius=this._radius-this.ringWidth/2-this.tickPadding;this.tickLength=(this.showTicks)?this._radius/13:0;if(this.ticks.length==0){var A=this.max,aL=this.min,q=this.setmax,aG=this.setmin,au=(A-aL)*this.tickSpacing/this.span;var aw=Math.floor(parseFloat((Math.log(au)/Math.log(10)).toFixed(11)));var an=(au/Math.pow(10,aw));(an>2&&an<=2.5)?an=2.5:an=Math.ceil(an);var T=this.tickPositions;var aA,ak;for(aa=0;aa<T.length;aa++){if(an==T[aa]||aa&&T[aa-1]<an&&an<T[aa]){au=T[aa]*Math.pow(10,aw);aA=aa}}for(aa=0;aa<T.length;aa++){if(an==T[aa]||aa&&T[aa-1]<an&&an<T[aa]){au=T[aa]*Math.pow(10,aw);ak=Math.ceil((A-aL)/au)}}if(q&&aG){var aP=(aL>0)?aL-aL%au:aL-aL%au-au;if(!this.forceZero){var D=Math.min(aL-aP,0.8*au);var o=Math.floor(D/T[aA]);if(o>1){aP=aP+T[aA]*(o-1);if(parseInt(aP,10)!=aP&&parseInt(aP-T[aA],10)==aP-T[aA]){aP=aP-T[aA]}}}if(aL==aP){aL-=au}else{if(aL-aP>0.23*au){aL=aP}else{aL=aP-au;ak+=1}}ak+=1;var E=aL+(ak-1)*au;if(A>=E){E+=au;ak+=1}if(E-A<0.23*au){E+=au;ak+=1}this.max=A=E;this.min=aL;this.tickInterval=au;this.numberTicks=ak;var O;for(aa=0;aa<ak;aa++){O=parseFloat((aL+aa*au).toFixed(11));this.ticks.push([O,O])}this.max=this.ticks[ak-1][1];this.tickFactor=aw;this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}}else{if(q){var E=aL+(ak-1)*au;if(A>=E){A=E+au;ak+=1}else{A=E}this.tickInterval=this.tickInterval||au;this.numberTicks=this.numberTicks||ak;var O;for(aa=0;aa<this.numberTicks;aa++){O=parseFloat((aL+aa*this.tickInterval).toFixed(11));this.ticks.push([O,O])}this.max=this.ticks[this.numberTicks-1][1];this.tickFactor=aw;this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}}}if(!q&&!aG){var P=this.max-this.min;aw=Math.floor(parseFloat((Math.log(P)/Math.log(10)).toFixed(11)))-1;var aN=[5,6,4,7,3,8,9,10,2],V,C,av=0,M;if(P>1){var aJ=String(P);if(aJ.search(/\./)==-1){var aF=aJ.search(/0+$/);av=(aF>0)?aJ.length-aF-1:0}}M=P/Math.pow(10,av);for(aa=0;aa<aN.length;aa++){V=M/(aN[aa]-1);if(V==parseInt(V,10)){this.numberTicks=aN[aa];this.tickInterval=P/(this.numberTicks-1);this.tickFactor=aw+1;break}}var O;for(aa=0;aa<this.numberTicks;aa++){O=parseFloat((this.min+aa*this.tickInterval).toFixed(11));this.ticks.push([O,O])}this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}if(!this.numberMinorTicks){this.numberMinorTicks=1;var aH=[4,5,3,6,2];for(aa=0;aa<5;aa++){var ao=this.tickInterval/aH[aa];if(ao==parseInt(ao,10)){this.numberMinorTicks=aH[aa]-1;break}}}}}var U=this._radius,aE=this.startAngle,k=this.endAngle,H=Math.PI,e=Math.PI/2;if(this.semiCircular){var z=Math.atan(this.innerPad/U),ac=this.outerStartAngle=aE-z,aB=this.outerEndAngle=k+z,B=this.hubStartAngle=aE-Math.atan(this.innerPad/this.hubRadius*2),af=this.hubEndAngle=k+Math.atan(this.innerPad/this.hubRadius*2);X.save();X.translate(this._center[0],this._center[1]);X.lineJoin="round";X.lineCap="round";X.save();X.beginPath();X.fillStyle=this.background;X.arc(0,0,U,ac,aB,false);X.closePath();X.fill();X.restore();var aj="rgba(0,0,0,"+this.shadowAlpha+")";X.save();for(var aa=0;aa<this.shadowDepth;aa++){X.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));X.beginPath();X.strokeStyle=aj;X.lineWidth=this.shadowWidth;X.arc(0,0,U,ac,aB,false);X.closePath();X.stroke()}X.restore();X.save();var az=parseInt((this.shadowDepth+1)/2,10);for(var aa=0;aa<az;aa++){X.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));X.beginPath();X.fillStyle=aj;X.arc(0,0,this.hubRadius,B,af,false);X.closePath();X.fill()}X.restore();X.save();X.beginPath();X.strokeStyle=this.ringColor;X.lineWidth=this.ringWidth;X.arc(0,0,U,ac,aB,false);X.closePath();X.stroke();X.restore();X.save();X.beginPath();X.fillStyle=this.ringColor;X.arc(0,0,this.hubRadius,B,af,false);X.closePath();X.fill();X.restore();if(this.showTicks){X.save();var f=this.tickOuterRadius,aq=this.tickLength,v=aq/2,F=this.numberMinorTicks,am=this.span*Math.PI/180/(this.ticks.length-1),p=am/(F+1);for(aa=0;aa<this.ticks.length;aa++){X.beginPath();X.lineWidth=1.5+this.diameter/360;X.strokeStyle=this.ringColor;var ae=am*aa+aE;X.moveTo(-f*Math.cos(am*aa+aE),f*Math.sin(am*aa+aE));X.lineTo(-(f-aq)*Math.cos(am*aa+aE),(f-aq)*Math.sin(am*aa+aE));this._tickPoints.push([(f-aq)*Math.cos(am*aa+aE)+this._center[0]+this.canvas._offsets.left,(f-aq)*Math.sin(am*aa+aE)+this._center[1]+this.canvas._offsets.top,am*aa+aE]);X.stroke();X.lineWidth=1+this.diameter/440;if(aa<this.ticks.length-1){for(var Y=1;Y<=F;Y++){X.beginPath();X.moveTo(-f*Math.cos(am*aa+p*Y+aE),f*Math.sin(am*aa+p*Y+aE));X.lineTo(-(f-v)*Math.cos(am*aa+p*Y+aE),(f-v)*Math.sin(am*aa+p*Y+aE));X.stroke()}}}X.restore()}if(this.showTickLabels){var J,W,T,aO,g,G,n=0;var an=this.tickPadding*(1-1/(this.diameter/80+1));for(aa=0;aa<this.ticks.length;aa++){J=c('<div class="jqplot-meterGauge-tick" style="position:absolute;">'+this.ticks[aa][1]+"</div>");this.canvas._elem.after(J);aO=J.outerWidth(true);g=J.outerHeight(true);W=this._tickPoints[aa][0]-aO*(this._tickPoints[aa][2]-Math.PI)/Math.PI-an*Math.cos(this._tickPoints[aa][2]);T=this._tickPoints[aa][1]-g/2+g/2*Math.pow(Math.abs((Math.sin(this._tickPoints[aa][2]))),0.5)+an/3*Math.pow(Math.abs((Math.sin(this._tickPoints[aa][2]))),0.5);J.css({left:W,top:T});G=aO*Math.cos(this._tickPoints[aa][2])+g*Math.sin(Math.PI/2+this._tickPoints[aa][2]/2);n=(G>n)?G:n}}if(this.label&&this.labelPosition=="inside"){var W=this._center[0]+this.canvas._offsets.left;var an=this.tickPadding*(1-1/(this.diameter/80+1));var T=0.5*(this._center[1]+this.canvas._offsets.top-this.hubRadius)+0.5*(this._center[1]+this.canvas._offsets.top-this.tickOuterRadius+this.tickLength+an)+this.labelHeightAdjust;W-=this._labelElem.outerWidth(true)/2;T-=this._labelElem.outerHeight(true)/2;this._labelElem.css({left:W,top:T})}else{if(this.label&&this.labelPosition=="bottom"){var W=this._center[0]+this.canvas._offsets.left-this._labelElem.outerWidth(true)/2;var T=this._center[1]+this.canvas._offsets.top+this.innerPad+ +this.ringWidth+this.padding+this.labelHeightAdjust;this._labelElem.css({left:W,top:T})}}X.save();var ax=this.intervalInnerRadius||this.hubRadius*1.5;if(this.intervalOuterRadius==null){if(this.showTickLabels){var ag=(this.tickOuterRadius-this.tickLength-this.tickPadding-this.diameter/8)}else{var ag=(this.tickOuterRadius-this.tickLength-this.diameter/16)}}else{var ag=this.intervalOuterRadius}var P=this.max-this.min;var aD=this.intervals[this.intervals.length-1]-this.min;var y,Z,u=this.span*Math.PI/180;for(aa=0;aa<this.intervals.length;aa++){y=(aa==0)?aE:aE+(this.intervals[aa-1][0]-this.min)*u/P;if(y<0){y=0}Z=aE+(this.intervals[aa][0]-this.min)*u/P;if(Z<0){Z=0}X.beginPath();X.fillStyle=this.intervals[aa][2];X.arc(0,0,ax,y,Z,false);X.lineTo(ag*Math.cos(Z),ag*Math.sin(Z));X.arc(0,0,ag,Z,y,true);X.lineTo(ax*Math.cos(y),ax*Math.sin(y));X.closePath();X.fill()}X.restore();var ay=this.data[0][1];var R=this.max-this.min;if(this.pegNeedle){if(this.data[0][1]>this.max+R*3/this.span){ay=this.max+R*3/this.span}if(this.data[0][1]<this.min-R*3/this.span){ay=this.min-R*3/this.span}}var al=(ay-this.min)/R*this.span*Math.PI/180+this.startAngle;X.save();X.beginPath();X.fillStyle=this.ringColor;X.strokeStyle=this.ringColor;this.needleLength=(this.tickOuterRadius-this.tickLength)*0.85;this.needleThickness=(this.needleThickness<2)?2:this.needleThickness;var aK=this.needleThickness*0.4;var x=this.needleLength/10;var s=(this.needleThickness-aK)/10;var ar;for(var aa=0;aa<10;aa++){ar=this.needleThickness-aa*s;X.moveTo(x*aa*Math.cos(al),x*aa*Math.sin(al));X.lineWidth=ar;X.lineTo(x*(aa+1)*Math.cos(al),x*(aa+1)*Math.sin(al));X.stroke()}X.restore()}else{this._center=[(K-at*ai)/2+at*ai,(S-at*ah)/2+at*ah]}};c.jqplot.MeterGaugeAxisRenderer=function(){c.jqplot.LinearAxisRenderer.call(this)};c.jqplot.MeterGaugeAxisRenderer.prototype=new c.jqplot.LinearAxisRenderer();c.jqplot.MeterGaugeAxisRenderer.prototype.constructor=c.jqplot.MeterGaugeAxisRenderer;c.jqplot.MeterGaugeAxisRenderer.prototype.init=function(e){this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;c.extend(true,this,e);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};c.jqplot.MeterGaugeLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.MeterGaugeLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.MeterGaugeLegendRenderer.prototype.constructor=c.jqplot.MeterGaugeLegendRenderer;c.jqplot.MeterGaugeLegendRenderer.prototype.init=function(e){this.numberRows=null;this.numberColumns=null;c.extend(true,this,e)};c.jqplot.MeterGaugeLegendRenderer.prototype.draw=function(){if(this.show){var p=this._series;var x="position:absolute;";x+=(this.background)?"background:"+this.background+";":"";x+=(this.border)?"border:"+this.border+";":"";x+=(this.fontSize)?"font-size:"+this.fontSize+";":"";x+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";x+=(this.textColor)?"color:"+this.textColor+";":"";x+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";x+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";x+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";x+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+x+'"></table>');var f=false,q=false,u,o;var w=p[0];if(w.show){var t=w.data;if(this.numberRows){u=this.numberRows;if(!this.numberColumns){o=Math.ceil(t.length/u)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;u=Math.ceil(t.length/this.numberColumns)}else{u=t.length;o=1}}var n,m,r,g,e,l,k,h;var v=0;for(n=0;n<u;n++){if(q){r=c('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{r=c('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(m=0;m<o;m++){if(v<t.length){l=this.labels[v]||t[v][0].toString();h=w.color;if(!q){if(n>0){f=true}else{f=false}}else{if(n==u-1){f=false}else{f=true}}k=(f)?this.rowSpacing:"0";g=c('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+k+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+h+';"></div></div></td>');e=c('<td class="jqplot-table-legend" style="padding-top:'+k+';"></td>');if(this.escapeHtml){e.text(l)}else{e.html(l)}if(q){e.prependTo(r);g.prependTo(r)}else{g.appendTo(r);e.appendTo(r)}f=true}v++}}}}return this._elem};function a(j,h,f){f=f||{};f.axesDefaults=f.axesDefaults||{};f.legend=f.legend||{};f.seriesDefaults=f.seriesDefaults||{};f.grid=f.grid||{};var e=false;if(f.seriesDefaults.renderer==c.jqplot.MeterGaugeRenderer){e=true}else{if(f.series){for(var g=0;g<f.series.length;g++){if(f.series[g].renderer==c.jqplot.MeterGaugeRenderer){e=true}}}}if(e){f.axesDefaults.renderer=c.jqplot.MeterGaugeAxisRenderer;f.legend.renderer=c.jqplot.MeterGaugeLegendRenderer;f.legend.preDraw=true;f.grid.background=f.grid.background||"white";f.grid.drawGridlines=false;f.grid.borderWidth=(f.grid.borderWidth!=null)?f.grid.borderWidth:0;f.grid.shadow=(f.grid.shadow!=null)?f.grid.shadow:false}}function d(e){}c.jqplot.preInitHooks.push(a);c.jqplot.postParseOptionsHooks.push(d);c.jqplot.MeterGaugeTickRenderer=function(){c.jqplot.AxisTickRenderer.call(this)};c.jqplot.MeterGaugeTickRenderer.prototype=new c.jqplot.AxisTickRenderer();c.jqplot.MeterGaugeTickRenderer.prototype.constructor=c.jqplot.MeterGaugeTickRenderer})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js deleted file mode 100644 index 221f92d0..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * jqplot.jquerymobile plugin - * jQuery Mobile virtual event support. - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2011 Takashi Okamoto - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - */ -(function($) { - function postInit(target, data, options){ - this.bindCustomEvents = function() { - this.eventCanvas._elem.bind('vclick', {plot:this}, this.onClick); - this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick); - this.eventCanvas._elem.bind('taphold', {plot:this}, this.onDblClick); - this.eventCanvas._elem.bind('vmousedown', {plot:this}, this.onMouseDown); - this.eventCanvas._elem.bind('vmousemove', {plot:this}, this.onMouseMove); - this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave); - if (this.captureRightClick) { - this.eventCanvas._elem.bind('vmouseup', {plot:this}, this.onRightClick); - this.eventCanvas._elem.get(0).oncontextmenu = function() { - return false; - }; - } - else { - this.eventCanvas._elem.bind('vmouseup', {plot:this}, this.onMouseUp); - } - }; - this.plugins.mobile = true; - } - $.jqplot.postInitHooks.push(postInit); -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js deleted file mode 100644 index 41ebe00f..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(b){function a(e,d,c){this.bindCustomEvents=function(){this.eventCanvas._elem.bind("vclick",{plot:this},this.onClick);this.eventCanvas._elem.bind("dblclick",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("taphold",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("vmousedown",{plot:this},this.onMouseDown);this.eventCanvas._elem.bind("vmousemove",{plot:this},this.onMouseMove);this.eventCanvas._elem.bind("mouseenter",{plot:this},this.onMouseEnter);this.eventCanvas._elem.bind("mouseleave",{plot:this},this.onMouseLeave);if(this.captureRightClick){this.eventCanvas._elem.bind("vmouseup",{plot:this},this.onRightClick);this.eventCanvas._elem.get(0).oncontextmenu=function(){return false}}else{this.eventCanvas._elem.bind("vmouseup",{plot:this},this.onMouseUp)}};this.plugins.mobile=true}b.jqplot.postInitHooks.push(a)})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js deleted file mode 100644 index 0fd1de36..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js +++ /dev/null @@ -1,373 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.OHLCRenderer - * jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts. - * - * To use this plugin, include the renderer js file in - * your source: - * - * > <script type="text/javascript" src="plugins/jqplot.ohlcRenderer.js"></script> - * - * You will most likely want to use a date axis renderer - * for the x axis also, so include the date axis render js file also: - * - * > <script type="text/javascript" src="plugins/jqplot.dateAxisRenderer.js"></script> - * - * Then you set the renderer in the series options on your plot: - * - * > series: [{renderer:$.jqplot.OHLCRenderer}] - * - * For OHLC and candlestick charts, data should be specified - * like so: - * - * > dat = [['07/06/2009',138.7,139.68,135.18,135.4], ['06/29/2009',143.46,144.66,139.79,140.02], ...] - * - * If the data array has only 4 values per point instead of 5, - * the renderer will create a Hi Low Close chart instead. In that case, - * data should be supplied like: - * - * > dat = [['07/06/2009',139.68,135.18,135.4], ['06/29/2009',144.66,139.79,140.02], ...] - * - * To generate a candlestick chart instead of an OHLC chart, - * set the "candlestick" option to true: - * - * > series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}], - * - */ - $.jqplot.OHLCRenderer = function(){ - // subclass line renderer to make use of some of it's methods. - $.jqplot.LineRenderer.call(this); - // prop: candleStick - // true to render chart as candleStick. - // Must have an open price, cannot be a hlc chart. - this.candleStick = false; - // prop: tickLength - // length of the line in pixels indicating open and close price. - // Default will auto calculate based on plot width and - // number of points displayed. - this.tickLength = 'auto'; - // prop: bodyWidth - // width of the candlestick body in pixels. Default will auto calculate - // based on plot width and number of candlesticks displayed. - this.bodyWidth = 'auto'; - // prop: openColor - // color of the open price tick mark. Default is series color. - this.openColor = null; - // prop: closeColor - // color of the close price tick mark. Default is series color. - this.closeColor = null; - // prop: wickColor - // color of the hi-lo line thorugh the candlestick body. - // Default is the series color. - this.wickColor = null; - // prop: fillUpBody - // true to render an "up" day (close price greater than open price) - // with a filled candlestick body. - this.fillUpBody = false; - // prop: fillDownBody - // true to render a "down" day (close price lower than open price) - // with a filled candlestick body. - this.fillDownBody = true; - // prop: upBodyColor - // Color of candlestick body of an "up" day. Default is series color. - this.upBodyColor = null; - // prop: downBodyColor - // Color of candlestick body on a "down" day. Default is series color. - this.downBodyColor = null; - // prop: hlc - // true if is a hi-low-close chart (no open price). - // This is determined automatically from the series data. - this.hlc = false; - // prop: lineWidth - // Width of the hi-low line and open/close ticks. - // Must be set in the rendererOptions for the series. - this.lineWidth = 1.5; - this._tickLength; - this._bodyWidth; - }; - - $.jqplot.OHLCRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.OHLCRenderer.prototype.constructor = $.jqplot.OHLCRenderer; - - // called with scope of series. - $.jqplot.OHLCRenderer.prototype.init = function(options) { - options = options || {}; - // lineWidth has to be set on the series, changes in renderer - // constructor have no effect. set the default here - // if no renderer option for lineWidth is specified. - this.lineWidth = options.lineWidth || 1.5; - $.jqplot.LineRenderer.prototype.init.call(this, options); - this._type = 'ohlc'; - // set the yaxis data bounds here to account for hi and low values - var db = this._yaxis._dataBounds; - var d = this._plotData; - // if data points have less than 5 values, force a hlc chart. - if (d[0].length < 5) { - this.renderer.hlc = true; - - for (var j=0; j<d.length; j++) { - if (d[j][2] < db.min || db.min == null) { - db.min = d[j][2]; - } - if (d[j][1] > db.max || db.max == null) { - db.max = d[j][1]; - } - } - } - else { - for (var j=0; j<d.length; j++) { - if (d[j][3] < db.min || db.min == null) { - db.min = d[j][3]; - } - if (d[j][2] > db.max || db.max == null) { - db.max = d[j][2]; - } - } - } - - }; - - // called within scope of series. - $.jqplot.OHLCRenderer.prototype.draw = function(ctx, gd, options) { - var d = this.data; - var xmin = this._xaxis.min; - var xmax = this._xaxis.max; - // index of last value below range of plot. - var xminidx = 0; - // index of first value above range of plot. - var xmaxidx = d.length; - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var i, prevColor, ops, b, h, w, a, points; - var o; - var r = this.renderer; - var opts = (options != undefined) ? options : {}; - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke; - r.bodyWidth = (opts.bodyWidth != undefined) ? opts.bodyWidth : r.bodyWidth; - r.tickLength = (opts.tickLength != undefined) ? opts.tickLength : r.tickLength; - ctx.save(); - if (this.show) { - var x, open, hi, low, close; - // need to get widths based on number of points shown, - // not on total number of points. Use the results - // to speed up drawing in next step. - for (var i=0; i<d.length; i++) { - if (d[i][0] < xmin) { - xminidx = i; - } - else if (d[i][0] < xmax) { - xmaxidx = i+1; - } - } - - var dwidth = this.gridData[xmaxidx-1][0] - this.gridData[xminidx][0]; - var nvisiblePoints = xmaxidx - xminidx; - try { - var dinterval = Math.abs(this._xaxis.series_u2p(parseInt(this._xaxis._intervalStats[0].sortedIntervals[0].interval, 10)) - this._xaxis.series_u2p(0)); - } - - catch (e) { - var dinterval = dwidth / nvisiblePoints; - } - - if (r.candleStick) { - if (typeof(r.bodyWidth) == 'number') { - r._bodyWidth = r.bodyWidth; - } - else { - r._bodyWidth = Math.min(20, dinterval/1.65); - } - } - else { - if (typeof(r.tickLength) == 'number') { - r._tickLength = r.tickLength; - } - else { - r._tickLength = Math.min(10, dinterval/3.5); - } - } - - for (var i=xminidx; i<xmaxidx; i++) { - x = xp(d[i][0]); - if (r.hlc) { - open = null; - hi = yp(d[i][1]); - low = yp(d[i][2]); - close = yp(d[i][3]); - } - else { - open = yp(d[i][1]); - hi = yp(d[i][2]); - low = yp(d[i][3]); - close = yp(d[i][4]); - } - o = {}; - if (r.candleStick && !r.hlc) { - w = r._bodyWidth; - a = x - w/2; - // draw candle - // determine if candle up or down - // up, remember grid coordinates increase downward - if (close < open) { - // draw wick - if (r.wickColor) { - o.color = r.wickColor; - } - else if (r.downBodyColor) { - o.color = r.upBodyColor; - } - ops = $.extend(true, {}, opts, o); - r.shapeRenderer.draw(ctx, [[x, hi], [x, close]], ops); - r.shapeRenderer.draw(ctx, [[x, open], [x, low]], ops); - o = {}; - b = close; - h = open - close; - // if color specified, use it - if (r.fillUpBody) { - o.fillRect = true; - } - else { - o.strokeRect = true; - w = w - this.lineWidth; - a = x - w/2; - } - if (r.upBodyColor) { - o.color = r.upBodyColor; - o.fillStyle = r.upBodyColor; - } - points = [a, b, w, h]; - } - // down - else if (close > open) { - // draw wick - if (r.wickColor) { - o.color = r.wickColor; - } - else if (r.downBodyColor) { - o.color = r.downBodyColor; - } - ops = $.extend(true, {}, opts, o); - r.shapeRenderer.draw(ctx, [[x, hi], [x, open]], ops); - r.shapeRenderer.draw(ctx, [[x, close], [x, low]], ops); - - o = {}; - - b = open; - h = close - open; - // if color specified, use it - if (r.fillDownBody) { - o.fillRect = true; - } - else { - o.strokeRect = true; - w = w - this.lineWidth; - a = x - w/2; - } - if (r.downBodyColor) { - o.color = r.downBodyColor; - o.fillStyle = r.downBodyColor; - } - points = [a, b, w, h]; - } - // even, open = close - else { - // draw wick - if (r.wickColor) { - o.color = r.wickColor; - } - ops = $.extend(true, {}, opts, o); - r.shapeRenderer.draw(ctx, [[x, hi], [x, low]], ops); - o = {}; - o.fillRect = false; - o.strokeRect = false; - a = [x - w/2, open]; - b = [x + w/2, close]; - w = null; - h = null; - points = [a, b]; - } - ops = $.extend(true, {}, opts, o); - r.shapeRenderer.draw(ctx, points, ops); - } - else { - prevColor = opts.color; - if (r.openColor) { - opts.color = r.openColor; - } - // draw open tick - if (!r.hlc) { - r.shapeRenderer.draw(ctx, [[x-r._tickLength, open], [x, open]], opts); - } - opts.color = prevColor; - // draw wick - if (r.wickColor) { - opts.color = r.wickColor; - } - r.shapeRenderer.draw(ctx, [[x, hi], [x, low]], opts); - opts.color = prevColor; - // draw close tick - if (r.closeColor) { - opts.color = r.closeColor; - } - r.shapeRenderer.draw(ctx, [[x, close], [x+r._tickLength, close]], opts); - opts.color = prevColor; - } - } - } - - ctx.restore(); - }; - - $.jqplot.OHLCRenderer.prototype.drawShadow = function(ctx, gd, options) { - // This is a no-op, shadows drawn with lines. - }; - - // called with scope of plot. - $.jqplot.OHLCRenderer.checkOptions = function(target, data, options) { - // provide some sensible highlighter options by default - // These aren't good for hlc, only for ohlc or candlestick - if (!options.highlighter) { - options.highlighter = { - showMarker:false, - tooltipAxes: 'y', - yvalues: 4, - formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>' - }; - } - }; - - //$.jqplot.preInitHooks.push($.jqplot.OHLCRenderer.checkOptions); - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js deleted file mode 100644 index 61cd8b88..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.OHLCRenderer=function(){a.jqplot.LineRenderer.call(this);this.candleStick=false;this.tickLength="auto";this.bodyWidth="auto";this.openColor=null;this.closeColor=null;this.wickColor=null;this.fillUpBody=false;this.fillDownBody=true;this.upBodyColor=null;this.downBodyColor=null;this.hlc=false;this.lineWidth=1.5;this._tickLength;this._bodyWidth};a.jqplot.OHLCRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.OHLCRenderer.prototype.constructor=a.jqplot.OHLCRenderer;a.jqplot.OHLCRenderer.prototype.init=function(e){e=e||{};this.lineWidth=e.lineWidth||1.5;a.jqplot.LineRenderer.prototype.init.call(this,e);this._type="ohlc";var b=this._yaxis._dataBounds;var f=this._plotData;if(f[0].length<5){this.renderer.hlc=true;for(var c=0;c<f.length;c++){if(f[c][2]<b.min||b.min==null){b.min=f[c][2]}if(f[c][1]>b.max||b.max==null){b.max=f[c][1]}}}else{for(var c=0;c<f.length;c++){if(f[c][3]<b.min||b.min==null){b.min=f[c][3]}if(f[c][2]>b.max||b.max==null){b.max=f[c][2]}}}};a.jqplot.OHLCRenderer.prototype.draw=function(A,N,j){var J=this.data;var v=this._xaxis.min;var z=this._xaxis.max;var l=0;var K=J.length;var p=this._xaxis.series_u2p;var G=this._yaxis.series_u2p;var D,E,f,M,F,n,O,C;var y;var u=this.renderer;var s=(j!=undefined)?j:{};var k=(s.shadow!=undefined)?s.shadow:this.shadow;var B=(s.fill!=undefined)?s.fill:this.fill;var c=(s.fillAndStroke!=undefined)?s.fillAndStroke:this.fillAndStroke;u.bodyWidth=(s.bodyWidth!=undefined)?s.bodyWidth:u.bodyWidth;u.tickLength=(s.tickLength!=undefined)?s.tickLength:u.tickLength;A.save();if(this.show){var m,q,g,Q,t;for(var D=0;D<J.length;D++){if(J[D][0]<v){l=D}else{if(J[D][0]<z){K=D+1}}}var I=this.gridData[K-1][0]-this.gridData[l][0];var L=K-l;try{var P=Math.abs(this._xaxis.series_u2p(parseInt(this._xaxis._intervalStats[0].sortedIntervals[0].interval,10))-this._xaxis.series_u2p(0))}catch(H){var P=I/L}if(u.candleStick){if(typeof(u.bodyWidth)=="number"){u._bodyWidth=u.bodyWidth}else{u._bodyWidth=Math.min(20,P/1.65)}}else{if(typeof(u.tickLength)=="number"){u._tickLength=u.tickLength}else{u._tickLength=Math.min(10,P/3.5)}}for(var D=l;D<K;D++){m=p(J[D][0]);if(u.hlc){q=null;g=G(J[D][1]);Q=G(J[D][2]);t=G(J[D][3])}else{q=G(J[D][1]);g=G(J[D][2]);Q=G(J[D][3]);t=G(J[D][4])}y={};if(u.candleStick&&!u.hlc){n=u._bodyWidth;O=m-n/2;if(t<q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.upBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,t]],f);u.shapeRenderer.draw(A,[[m,q],[m,Q]],f);y={};M=t;F=q-t;if(u.fillUpBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.upBodyColor){y.color=u.upBodyColor;y.fillStyle=u.upBodyColor}C=[O,M,n,F]}else{if(t>q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.downBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,q]],f);u.shapeRenderer.draw(A,[[m,t],[m,Q]],f);y={};M=q;F=t-q;if(u.fillDownBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.downBodyColor){y.color=u.downBodyColor;y.fillStyle=u.downBodyColor}C=[O,M,n,F]}else{if(u.wickColor){y.color=u.wickColor}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,Q]],f);y={};y.fillRect=false;y.strokeRect=false;O=[m-n/2,q];M=[m+n/2,t];n=null;F=null;C=[O,M]}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,C,f)}else{E=s.color;if(u.openColor){s.color=u.openColor}if(!u.hlc){u.shapeRenderer.draw(A,[[m-u._tickLength,q],[m,q]],s)}s.color=E;if(u.wickColor){s.color=u.wickColor}u.shapeRenderer.draw(A,[[m,g],[m,Q]],s);s.color=E;if(u.closeColor){s.color=u.closeColor}u.shapeRenderer.draw(A,[[m,t],[m+u._tickLength,t]],s);s.color=E}}}A.restore()};a.jqplot.OHLCRenderer.prototype.drawShadow=function(b,d,c){};a.jqplot.OHLCRenderer.checkOptions=function(d,c,b){if(!b.highlighter){b.highlighter={showMarker:false,tooltipAxes:"y",yvalues:4,formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'}}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js deleted file mode 100644 index 6a991aa1..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js +++ /dev/null @@ -1,903 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.PieRenderer - * Plugin renderer to draw a pie chart. - * x values, if present, will be used as slice labels. - * y values give slice size. - * - * To use this renderer, you need to include the - * pie renderer plugin, for example: - * - * > <script type="text/javascript" src="plugins/jqplot.pieRenderer.js"></script> - * - * Properties described here are passed into the $.jqplot function - * as options on the series renderer. For example: - * - * > plot2 = $.jqplot('chart2', [s1, s2], { - * > seriesDefaults: { - * > renderer:$.jqplot.PieRenderer, - * > rendererOptions:{ - * > sliceMargin: 2, - * > startAngle: -90 - * > } - * > } - * > }); - * - * A pie plot will trigger events on the plot target - * according to user interaction. All events return the event object, - * the series index, the point (slice) index, and the point data for - * the appropriate slice. - * - * 'jqplotDataMouseOver' - triggered when user mouseing over a slice. - * 'jqplotDataHighlight' - triggered the first time user mouses over a slice, - * if highlighting is enabled. - * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of - * a highlighted slice. - * 'jqplotDataClick' - triggered when the user clicks on a slice. - * 'jqplotDataRightClick' - tiggered when the user right clicks on a slice if - * the "captureRightClick" option is set to true on the plot. - */ - $.jqplot.PieRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.PieRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.PieRenderer.prototype.constructor = $.jqplot.PieRenderer; - - // called with scope of a series - $.jqplot.PieRenderer.prototype.init = function(options, plot) { - // Group: Properties - // - // prop: diameter - // Outer diameter of the pie, auto computed by default - this.diameter = null; - // prop: padding - // padding between the pie and plot edges, legend, etc. - this.padding = 20; - // prop: sliceMargin - // angular spacing between pie slices in degrees. - this.sliceMargin = 0; - // prop: fill - // true or false, wether to fil the slices. - this.fill = true; - // prop: shadowOffset - // offset of the shadow from the slice and offset of - // each succesive stroke of the shadow from the last. - this.shadowOffset = 2; - // prop: shadowAlpha - // transparency of the shadow (0 = transparent, 1 = opaque) - this.shadowAlpha = 0.07; - // prop: shadowDepth - // number of strokes to apply to the shadow, - // each stroke offset shadowOffset from the last. - this.shadowDepth = 5; - // prop: highlightMouseOver - // True to highlight slice when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on a slice. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over a slice. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColors - // an array of colors to use when highlighting a slice. - this.highlightColors = []; - // prop: dataLabels - // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices. - // Defaults to percentage of each pie slice. - this.dataLabels = 'percent'; - // prop: showDataLabels - // true to show data labels on slices. - this.showDataLabels = false; - // prop: dataLabelFormatString - // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage. - this.dataLabelFormatString = null; - // prop: dataLabelThreshold - // Threshhold in percentage (0-100) of pie area, below which no label will be displayed. - // This applies to all label types, not just to percentage labels. - this.dataLabelThreshold = 3; - // prop: dataLabelPositionFactor - // A Multiplier (0-1) of the pie radius which controls position of label on slice. - // Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie. - this.dataLabelPositionFactor = 0.52; - // prop: dataLabelNudge - // Number of pixels to slide the label away from (+) or toward (-) the center of the pie. - this.dataLabelNudge = 2; - // prop: dataLabelCenterOn - // True to center the data label at its position. - // False to set the inside facing edge of the label at its position. - this.dataLabelCenterOn = true; - // prop: startAngle - // Angle to start drawing pie in degrees. - // According to orientation of canvas coordinate system: - // 0 = on the positive x axis - // -90 = on the positive y axis. - // 90 = on the negaive y axis. - // 180 or - 180 = on the negative x axis. - this.startAngle = 0; - this.tickRenderer = $.jqplot.PieTickRenderer; - // Used as check for conditions where pie shouldn't be drawn. - this._drawData = true; - this._type = 'pie'; - - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (options.highlightMouseDown && options.highlightMouseOver == null) { - options.highlightMouseOver = false; - } - - $.extend(true, this, options); - - if (this.sliceMargin < 0) { - this.sliceMargin = 0; - } - - this._diameter = null; - this._radius = null; - // array of [start,end] angles arrays, one for each slice. In radians. - this._sliceAngles = []; - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - - // set highlight colors if none provided - if (this.highlightColors.length == 0) { - for (var i=0; i<this.seriesColors.length; i++){ - var rgba = $.jqplot.getColorComponents(this.seriesColors[i]); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]); - newrgb[j] = parseInt(newrgb[j], 10); - } - this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')'); - } - } - - this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors); - - plot.postParseOptionsHooks.addOnce(postParseOptions); - plot.postInitHooks.addOnce(postInit); - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); - plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); - plot.eventListenerHooks.addOnce('jqplotClick', handleClick); - plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); - plot.postDrawHooks.addOnce(postPlotDraw); - }; - - $.jqplot.PieRenderer.prototype.setGridData = function(plot) { - // set gridData property. This will hold angle in radians of each data point. - var stack = []; - var td = []; - var sa = this.startAngle/180*Math.PI; - var tot = 0; - // don't know if we have any valid data yet, so set plot to not draw. - this._drawData = false; - for (var i=0; i<this.data.length; i++){ - if (this.data[i][1] != 0) { - // we have data, O.K. to draw. - this._drawData = true; - } - stack.push(this.data[i][1]); - td.push([this.data[i][0]]); - if (i>0) { - stack[i] += stack[i-1]; - } - tot += this.data[i][1]; - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i<stack.length; i++) { - td[i][1] = stack[i] * fact; - td[i][2] = this.data[i][1]/tot; - } - this.gridData = td; - }; - - $.jqplot.PieRenderer.prototype.makeGridData = function(data, plot) { - var stack = []; - var td = []; - var tot = 0; - var sa = this.startAngle/180*Math.PI; - // don't know if we have any valid data yet, so set plot to not draw. - this._drawData = false; - for (var i=0; i<data.length; i++){ - if (this.data[i][1] != 0) { - // we have data, O.K. to draw. - this._drawData = true; - } - stack.push(data[i][1]); - td.push([data[i][0]]); - if (i>0) { - stack[i] += stack[i-1]; - } - tot += data[i][1]; - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i<stack.length; i++) { - td[i][1] = stack[i] * fact; - td[i][2] = data[i][1]/tot; - } - return td; - }; - - function calcRadiusAdjustment(ang) { - return Math.sin((ang - (ang-Math.PI) / 8 / Math.PI )/2.0); - } - - function calcRPrime(ang1, ang2, sliceMargin, fill, lineWidth) { - var rprime = 0; - var ang = ang2 - ang1; - var absang = Math.abs(ang); - var sm = sliceMargin; - if (fill == false) { - sm += lineWidth; - } - - if (sm > 0 && absang > 0.01 && absang < 6.282) { - rprime = parseFloat(sm) / 2.0 / calcRadiusAdjustment(ang); - } - - return rprime; - } - - $.jqplot.PieRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) { - if (this._drawData) { - var r = this._radius; - var fill = this.fill; - var lineWidth = this.lineWidth; - var sm = this.sliceMargin; - if (this.fill == false) { - sm += this.lineWidth; - } - ctx.save(); - ctx.translate(this._center[0], this._center[1]); - - var rprime = calcRPrime(ang1, ang2, this.sliceMargin, this.fill, this.lineWidth); - - var transx = rprime * Math.cos((ang1 + ang2) / 2.0); - var transy = rprime * Math.sin((ang1 + ang2) / 2.0); - - if ((ang2 - ang1) <= Math.PI) { - r -= rprime; - } - else { - r += rprime; - } - - ctx.translate(transx, transy); - - if (isShadow) { - for (var i=0, l=this.shadowDepth; i<l; i++) { - ctx.save(); - ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI)); - doDraw(r); - } - for (var i=0, l=this.shadowDepth; i<l; i++) { - ctx.restore(); - } - } - - else { - doDraw(r); - } - ctx.restore(); - } - - function doDraw (rad) { - // Fix for IE and Chrome that can't seem to draw circles correctly. - // ang2 should always be <= 2 pi since that is the way the data is converted. - // 2Pi = 6.2831853, Pi = 3.1415927 - if (ang2 > 6.282 + this.startAngle) { - ang2 = 6.282 + this.startAngle; - if (ang1 > ang2) { - ang1 = 6.281 + this.startAngle; - } - } - // Fix for IE, where it can't seem to handle 0 degree angles. Also avoids - // ugly line on unfilled pies. - if (ang1 >= ang2) { - return; - } - - ctx.beginPath(); - ctx.fillStyle = color; - ctx.strokeStyle = color; - ctx.lineWidth = lineWidth; - ctx.arc(0, 0, rad, ang1, ang2, false); - ctx.lineTo(0,0); - ctx.closePath(); - - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - } - }; - - // called with scope of series - $.jqplot.PieRenderer.prototype.draw = function (ctx, gd, options, plot) { - var i; - var opts = (options != undefined) ? options : {}; - // offset and direction of offset due to legend placement - var offx = 0; - var offy = 0; - var trans = 1; - var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors); - if (options.legendInfo && options.legendInfo.placement == 'insideGrid') { - var li = options.legendInfo; - switch (li.location) { - case 'nw': - offx = li.width + li.xoffset; - break; - case 'w': - offx = li.width + li.xoffset; - break; - case 'sw': - offx = li.width + li.xoffset; - break; - case 'ne': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'e': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'se': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'n': - offy = li.height + li.yoffset; - break; - case 's': - offy = li.height + li.yoffset; - trans = -1; - break; - default: - break; - } - } - - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var cw = ctx.canvas.width; - var ch = ctx.canvas.height; - var w = cw - offx - 2 * this.padding; - var h = ch - offy - 2 * this.padding; - var mindim = Math.min(w,h); - var d = mindim; - - // Fixes issue #272. Thanks hugwijst! - // reset slice angles array. - this._sliceAngles = []; - - var sm = this.sliceMargin; - if (this.fill == false) { - sm += this.lineWidth; - } - - var rprime; - var maxrprime = 0; - - var ang, ang1, ang2, shadowColor; - var sa = this.startAngle / 180 * Math.PI; - - // have to pre-draw shadows, so loop throgh here and calculate some values also. - for (var i=0, l=gd.length; i<l; i++) { - ang1 = (i == 0) ? sa : gd[i-1][1] + sa; - ang2 = gd[i][1] + sa; - - this._sliceAngles.push([ang1, ang2]); - - rprime = calcRPrime(ang1, ang2, this.sliceMargin, this.fill, this.lineWidth); - - if (Math.abs(ang2-ang1) > Math.PI) { - maxrprime = Math.max(rprime, maxrprime); - } - } - - if (this.diameter != null && this.diameter > 0) { - this._diameter = this.diameter - 2*maxrprime; - } - else { - this._diameter = d - 2*maxrprime; - } - - // Need to check for undersized pie. This can happen if - // plot area too small and legend is too big. - if (this._diameter < 6) { - $.jqplot.log('Diameter of pie too small, not rendering.'); - return; - } - - var r = this._radius = this._diameter/2; - - this._center = [(cw - trans * offx)/2 + trans * offx + maxrprime * Math.cos(sa), (ch - trans*offy)/2 + trans * offy + maxrprime * Math.sin(sa)]; - - if (this.shadow) { - for (var i=0, l=gd.length; i<l; i++) { - shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')'; - this.renderer.drawSlice.call (this, ctx, this._sliceAngles[i][0], this._sliceAngles[i][1], shadowColor, true); - } - } - - for (var i=0; i<gd.length; i++) { - - this.renderer.drawSlice.call (this, ctx, this._sliceAngles[i][0], this._sliceAngles[i][1], colorGenerator.next(), false); - - if (this.showDataLabels && gd[i][2]*100 >= this.dataLabelThreshold) { - var fstr, avgang = (this._sliceAngles[i][0] + this._sliceAngles[i][1])/2, label; - - if (this.dataLabels == 'label') { - fstr = this.dataLabelFormatString || '%s'; - label = $.jqplot.sprintf(fstr, gd[i][0]); - } - else if (this.dataLabels == 'value') { - fstr = this.dataLabelFormatString || '%d'; - label = $.jqplot.sprintf(fstr, this.data[i][1]); - } - else if (this.dataLabels == 'percent') { - fstr = this.dataLabelFormatString || '%d%%'; - label = $.jqplot.sprintf(fstr, gd[i][2]*100); - } - else if (this.dataLabels.constructor == Array) { - fstr = this.dataLabelFormatString || '%s'; - label = $.jqplot.sprintf(fstr, this.dataLabels[i]); - } - - var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge; - - var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left; - var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top; - - var labelelem = $('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">' + label + '</div>').insertBefore(plot.eventCanvas._elem); - if (this.dataLabelCenterOn) { - x -= labelelem.width()/2; - y -= labelelem.height()/2; - } - else { - x -= labelelem.width() * Math.sin(avgang/2); - y -= labelelem.height()/2; - } - x = Math.round(x); - y = Math.round(y); - labelelem.css({left: x, top: y}); - } - } - }; - - $.jqplot.PieAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - }; - - $.jqplot.PieAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.PieAxisRenderer.prototype.constructor = $.jqplot.PieAxisRenderer; - - - // There are no traditional axes on a pie chart. We just need to provide - // dummy objects with properties so the plot will render. - // called with scope of axis object. - $.jqplot.PieAxisRenderer.prototype.init = function(options){ - // - this.tickRenderer = $.jqplot.PieTickRenderer; - $.extend(true, this, options); - // I don't think I'm going to need _dataBounds here. - // have to go Axis scaling in a way to fit chart onto plot area - // and provide u2p and p2u functionality for mouse cursor, etc. - // for convienence set _dataBounds to 0 and 100 and - // set min/max to 0 and 100. - this._dataBounds = {min:0, max:100}; - this.min = 0; - this.max = 100; - this.showTicks = false; - this.ticks = []; - this.showMark = false; - this.show = false; - }; - - - - - $.jqplot.PieLegendRenderer = function(){ - $.jqplot.TableLegendRenderer.call(this); - }; - - $.jqplot.PieLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.PieLegendRenderer.prototype.constructor = $.jqplot.PieLegendRenderer; - - /** - * Class: $.jqplot.PieLegendRenderer - * Legend Renderer specific to pie plots. Set by default - * when user creates a pie plot. - */ - $.jqplot.PieLegendRenderer.prototype.init = function(options) { - // Group: Properties - // - // prop: numberRows - // Maximum number of rows in the legend. 0 or null for unlimited. - this.numberRows = null; - // prop: numberColumns - // Maximum number of columns in the legend. 0 or null for unlimited. - this.numberColumns = null; - $.extend(true, this, options); - }; - - // called with context of legend - $.jqplot.PieLegendRenderer.prototype.draw = function() { - var legend = this; - if (this.show) { - var series = this._series; - - - this._elem = $(document.createElement('table')); - this._elem.addClass('jqplot-table-legend'); - - var ss = {position:'absolute'}; - if (this.background) { - ss['background'] = this.background; - } - if (this.border) { - ss['border'] = this.border; - } - if (this.fontSize) { - ss['fontSize'] = this.fontSize; - } - if (this.fontFamily) { - ss['fontFamily'] = this.fontFamily; - } - if (this.textColor) { - ss['textColor'] = this.textColor; - } - if (this.marginTop != null) { - ss['marginTop'] = this.marginTop; - } - if (this.marginBottom != null) { - ss['marginBottom'] = this.marginBottom; - } - if (this.marginLeft != null) { - ss['marginLeft'] = this.marginLeft; - } - if (this.marginRight != null) { - ss['marginRight'] = this.marginRight; - } - - this._elem.css(ss); - - // Pie charts legends don't go by number of series, but by number of data points - // in the series. Refactor things here for that. - - var pad = false, - reverse = false, - nr, - nc; - var s = series[0]; - var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors); - - if (s.show) { - var pd = s.data; - if (this.numberRows) { - nr = this.numberRows; - if (!this.numberColumns){ - nc = Math.ceil(pd.length/nr); - } - else{ - nc = this.numberColumns; - } - } - else if (this.numberColumns) { - nc = this.numberColumns; - nr = Math.ceil(pd.length/this.numberColumns); - } - else { - nr = pd.length; - nc = 1; - } - - var i, j; - var tr, td1, td2; - var lt, rs, color; - var idx = 0; - var div0, div1; - - for (i=0; i<nr; i++) { - tr = $(document.createElement('tr')); - tr.addClass('jqplot-table-legend'); - - if (reverse){ - tr.prependTo(this._elem); - } - - else{ - tr.appendTo(this._elem); - } - - for (j=0; j<nc; j++) { - if (idx < pd.length){ - lt = this.labels[idx] || pd[idx][0].toString(); - color = colorGenerator.next(); - if (!reverse){ - if (i>0){ - pad = true; - } - else{ - pad = false; - } - } - else{ - if (i == nr -1){ - pad = false; - } - else{ - pad = true; - } - } - rs = (pad) ? this.rowSpacing : '0'; - - - - td1 = $(document.createElement('td')); - td1.addClass('jqplot-table-legend jqplot-table-legend-swatch'); - td1.css({textAlign: 'center', paddingTop: rs}); - - div0 = $(document.createElement('div')); - div0.addClass('jqplot-table-legend-swatch-outline'); - div1 = $(document.createElement('div')); - div1.addClass('jqplot-table-legend-swatch'); - div1.css({backgroundColor: color, borderColor: color}); - td1.append(div0.append(div1)); - - td2 = $(document.createElement('td')); - td2.addClass('jqplot-table-legend jqplot-table-legend-label'); - td2.css('paddingTop', rs); - - if (this.escapeHtml){ - td2.text(lt); - } - else { - td2.html(lt); - } - if (reverse) { - td2.prependTo(tr); - td1.prependTo(tr); - } - else { - td1.appendTo(tr); - td2.appendTo(tr); - } - pad = true; - } - idx++; - } - } - } - } - return this._elem; - }; - - $.jqplot.PieRenderer.prototype.handleMove = function(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - plot.target.trigger('jqplotDataMouseOver', ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - plot.target.trigger('jqplotDataHighlight', ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - }; - - - // this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]); - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - options = options || {}; - options.axesDefaults = options.axesDefaults || {}; - options.legend = options.legend || {}; - options.seriesDefaults = options.seriesDefaults || {}; - // only set these if there is a pie series - var setopts = false; - if (options.seriesDefaults.renderer == $.jqplot.PieRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer == $.jqplot.PieRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.PieAxisRenderer; - options.legend.renderer = $.jqplot.PieLegendRenderer; - options.legend.preDraw = true; - options.seriesDefaults.pointLabels = {show: false}; - } - } - - function postInit(target, data, options) { - for (var i=0; i<this.series.length; i++) { - if (this.series[i].renderer.constructor == $.jqplot.PieRenderer) { - // don't allow mouseover and mousedown at same time. - if (this.series[i].highlightMouseOver) { - this.series[i].highlightMouseDown = false; - } - } - } - } - - // called with scope of plot - function postParseOptions(options) { - for (var i=0; i<this.series.length; i++) { - this.series[i].seriesColors = this.seriesColors; - this.series[i].colorGenerator = $.jqplot.colorGenerator; - } - } - - function highlight (plot, sidx, pidx) { - var s = plot.series[sidx]; - var canvas = plot.plugins.pieRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.pieRenderer.highlightedSeriesIndex = sidx; - s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColorGenerator.get(pidx), false); - } - - function unhighlight (plot) { - var canvas = plot.plugins.pieRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.pieRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - } - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { - var idx = plot.plugins.pieRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - } - - function handleClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt = jQuery.Event('jqplotDataClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - function handleRightClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var idx = plot.plugins.pieRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - var evt = jQuery.Event('jqplotDataRightClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.pieRenderer && this.plugins.pieRenderer.highlightCanvas) { - this.plugins.pieRenderer.highlightCanvas.resetCanvas(); - this.plugins.pieRenderer.highlightCanvas = null; - } - - this.plugins.pieRenderer = {highlightedSeriesIndex:null}; - this.plugins.pieRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - - // do we have any data labels? if so, put highlight canvas before those - var labels = $(this.targetId+' .jqplot-data-label'); - if (labels.length) { - $(labels[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions, this)); - } - // else put highlight canvas before event canvas. - else { - this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions, this)); - } - - var hctx = this.plugins.pieRenderer.highlightCanvas.setContext(); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); - } - - $.jqplot.preInitHooks.push(preInit); - - $.jqplot.PieTickRenderer = function() { - $.jqplot.AxisTickRenderer.call(this); - }; - - $.jqplot.PieTickRenderer.prototype = new $.jqplot.AxisTickRenderer(); - $.jqplot.PieTickRenderer.prototype.constructor = $.jqplot.PieTickRenderer; - -})(jQuery); - diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js deleted file mode 100644 index 0c5738a7..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(e){e.jqplot.PieRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.PieRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.PieRenderer.prototype.constructor=e.jqplot.PieRenderer;e.jqplot.PieRenderer.prototype.init=function(q,u){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.52;this.dataLabelNudge=2;this.dataLabelCenterOn=true;this.startAngle=0;this.tickRenderer=e.jqplot.PieTickRenderer;this._drawData=true;this._type="pie";if(q.highlightMouseDown&&q.highlightMouseOver==null){q.highlightMouseOver=false}e.extend(true,this,q);if(this.sliceMargin<0){this.sliceMargin=0}this._diameter=null;this._radius=null;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var s=0;s<this.seriesColors.length;s++){var r=e.jqplot.getColorComponents(this.seriesColors[s]);var o=[r[0],r[1],r[2]];var t=o[0]+o[1]+o[2];for(var p=0;p<3;p++){o[p]=(t>570)?o[p]*0.8:o[p]+0.3*(255-o[p]);o[p]=parseInt(o[p],10)}this.highlightColors.push("rgb("+o[0]+","+o[1]+","+o[2]+")")}}this.highlightColorGenerator=new e.jqplot.ColorGenerator(this.highlightColors);u.postParseOptionsHooks.addOnce(m);u.postInitHooks.addOnce(g);u.eventListenerHooks.addOnce("jqplotMouseMove",b);u.eventListenerHooks.addOnce("jqplotMouseDown",a);u.eventListenerHooks.addOnce("jqplotMouseUp",l);u.eventListenerHooks.addOnce("jqplotClick",f);u.eventListenerHooks.addOnce("jqplotRightClick",n);u.postDrawHooks.addOnce(i)};e.jqplot.PieRenderer.prototype.setGridData=function(t){var p=[];var u=[];var o=this.startAngle/180*Math.PI;var s=0;this._drawData=false;for(var r=0;r<this.data.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(this.data[r][1]);u.push([this.data[r][0]]);if(r>0){p[r]+=p[r-1]}s+=this.data[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){u[r][1]=p[r]*q;u[r][2]=this.data[r][1]/s}this.gridData=u};e.jqplot.PieRenderer.prototype.makeGridData=function(t,u){var p=[];var v=[];var s=0;var o=this.startAngle/180*Math.PI;this._drawData=false;for(var r=0;r<t.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(t[r][1]);v.push([t[r][0]]);if(r>0){p[r]+=p[r-1]}s+=t[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){v[r][1]=p[r]*q;v[r][2]=t[r][1]/s}return v};function h(o){return Math.sin((o-(o-Math.PI)/8/Math.PI)/2)}function j(u,t,o,v,r){var w=0;var q=t-u;var s=Math.abs(q);var p=o;if(v==false){p+=r}if(p>0&&s>0.01&&s<6.282){w=parseFloat(p)/2/h(q)}return w}e.jqplot.PieRenderer.prototype.drawSlice=function(B,z,y,u,w){if(this._drawData){var p=this._radius;var A=this.fill;var x=this.lineWidth;var s=this.sliceMargin;if(this.fill==false){s+=this.lineWidth}B.save();B.translate(this._center[0],this._center[1]);var D=j(z,y,this.sliceMargin,this.fill,this.lineWidth);var o=D*Math.cos((z+y)/2);var C=D*Math.sin((z+y)/2);if((y-z)<=Math.PI){p-=D}else{p+=D}B.translate(o,C);if(w){for(var v=0,t=this.shadowDepth;v<t;v++){B.save();B.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q(p)}for(var v=0,t=this.shadowDepth;v<t;v++){B.restore()}}else{q(p)}B.restore()}function q(r){if(y>6.282+this.startAngle){y=6.282+this.startAngle;if(z>y){z=6.281+this.startAngle}}if(z>=y){return}B.beginPath();B.fillStyle=u;B.strokeStyle=u;B.lineWidth=x;B.arc(0,0,r,z,y,false);B.lineTo(0,0);B.closePath();if(A){B.fill()}else{B.stroke()}}};e.jqplot.PieRenderer.prototype.draw=function(B,z,E,o){var W;var H=(E!=undefined)?E:{};var t=0;var s=0;var N=1;var L=new e.jqplot.ColorGenerator(this.seriesColors);if(E.legendInfo&&E.legendInfo.placement=="insideGrid"){var J=E.legendInfo;switch(J.location){case"nw":t=J.width+J.xoffset;break;case"w":t=J.width+J.xoffset;break;case"sw":t=J.width+J.xoffset;break;case"ne":t=J.width+J.xoffset;N=-1;break;case"e":t=J.width+J.xoffset;N=-1;break;case"se":t=J.width+J.xoffset;N=-1;break;case"n":s=J.height+J.yoffset;break;case"s":s=J.height+J.yoffset;N=-1;break;default:break}}var K=(H.shadow!=undefined)?H.shadow:this.shadow;var A=(H.fill!=undefined)?H.fill:this.fill;var C=B.canvas.width;var I=B.canvas.height;var Q=C-t-2*this.padding;var X=I-s-2*this.padding;var M=Math.min(Q,X);var Y=M;this._sliceAngles=[];var v=this.sliceMargin;if(this.fill==false){v+=this.lineWidth}var q;var G=0;var R,aa,Z,ab;var D=this.startAngle/180*Math.PI;for(var W=0,V=z.length;W<V;W++){aa=(W==0)?D:z[W-1][1]+D;Z=z[W][1]+D;this._sliceAngles.push([aa,Z]);q=j(aa,Z,this.sliceMargin,this.fill,this.lineWidth);if(Math.abs(Z-aa)>Math.PI){G=Math.max(q,G)}}if(this.diameter!=null&&this.diameter>0){this._diameter=this.diameter-2*G}else{this._diameter=Y-2*G}if(this._diameter<6){e.jqplot.log("Diameter of pie too small, not rendering.");return}var S=this._radius=this._diameter/2;this._center=[(C-N*t)/2+N*t+G*Math.cos(D),(I-N*s)/2+N*s+G*Math.sin(D)];if(this.shadow){for(var W=0,V=z.length;W<V;W++){ab="rgba(0,0,0,"+this.shadowAlpha+")";this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],ab,true)}}for(var W=0;W<z.length;W++){this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],L.next(),false);if(this.showDataLabels&&z[W][2]*100>=this.dataLabelThreshold){var F,U=(this._sliceAngles[W][0]+this._sliceAngles[W][1])/2,T;if(this.dataLabels=="label"){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,z[W][0])}else{if(this.dataLabels=="value"){F=this.dataLabelFormatString||"%d";T=e.jqplot.sprintf(F,this.data[W][1])}else{if(this.dataLabels=="percent"){F=this.dataLabelFormatString||"%d%%";T=e.jqplot.sprintf(F,z[W][2]*100)}else{if(this.dataLabels.constructor==Array){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,this.dataLabels[W])}}}}var p=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var P=this._center[0]+Math.cos(U)*p+this.canvas._offsets.left;var O=this._center[1]+Math.sin(U)*p+this.canvas._offsets.top;var u=e('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">'+T+"</div>").insertBefore(o.eventCanvas._elem);if(this.dataLabelCenterOn){P-=u.width()/2;O-=u.height()/2}else{P-=u.width()*Math.sin(U/2);O-=u.height()/2}P=Math.round(P);O=Math.round(O);u.css({left:P,top:O})}}};e.jqplot.PieAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PieAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PieAxisRenderer.prototype.constructor=e.jqplot.PieAxisRenderer;e.jqplot.PieAxisRenderer.prototype.init=function(o){this.tickRenderer=e.jqplot.PieTickRenderer;e.extend(true,this,o);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.PieLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.PieLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.PieLegendRenderer.prototype.constructor=e.jqplot.PieLegendRenderer;e.jqplot.PieLegendRenderer.prototype.init=function(o){this.numberRows=null;this.numberColumns=null;e.extend(true,this,o)};e.jqplot.PieLegendRenderer.prototype.draw=function(){var r=this;if(this.show){var B=this._series;this._elem=e(document.createElement("table"));this._elem.addClass("jqplot-table-legend");var E={position:"absolute"};if(this.background){E.background=this.background}if(this.border){E.border=this.border}if(this.fontSize){E.fontSize=this.fontSize}if(this.fontFamily){E.fontFamily=this.fontFamily}if(this.textColor){E.textColor=this.textColor}if(this.marginTop!=null){E.marginTop=this.marginTop}if(this.marginBottom!=null){E.marginBottom=this.marginBottom}if(this.marginLeft!=null){E.marginLeft=this.marginLeft}if(this.marginRight!=null){E.marginRight=this.marginRight}this._elem.css(E);var I=false,A=false,o,y;var C=B[0];var p=new e.jqplot.ColorGenerator(C.seriesColors);if(C.show){var J=C.data;if(this.numberRows){o=this.numberRows;if(!this.numberColumns){y=Math.ceil(J.length/o)}else{y=this.numberColumns}}else{if(this.numberColumns){y=this.numberColumns;o=Math.ceil(J.length/this.numberColumns)}else{o=J.length;y=1}}var H,G;var q,w,v;var x,z,F;var D=0;var u,t;for(H=0;H<o;H++){q=e(document.createElement("tr"));q.addClass("jqplot-table-legend");if(A){q.prependTo(this._elem)}else{q.appendTo(this._elem)}for(G=0;G<y;G++){if(D<J.length){x=this.labels[D]||J[D][0].toString();F=p.next();if(!A){if(H>0){I=true}else{I=false}}else{if(H==o-1){I=false}else{I=true}}z=(I)?this.rowSpacing:"0";w=e(document.createElement("td"));w.addClass("jqplot-table-legend jqplot-table-legend-swatch");w.css({textAlign:"center",paddingTop:z});u=e(document.createElement("div"));u.addClass("jqplot-table-legend-swatch-outline");t=e(document.createElement("div"));t.addClass("jqplot-table-legend-swatch");t.css({backgroundColor:F,borderColor:F});w.append(u.append(t));v=e(document.createElement("td"));v.addClass("jqplot-table-legend jqplot-table-legend-label");v.css("paddingTop",z);if(this.escapeHtml){v.text(x)}else{v.html(x)}if(A){v.prependTo(q);w.prependTo(q)}else{w.appendTo(q);v.appendTo(q)}I=true}D++}}}}return this._elem};e.jqplot.PieRenderer.prototype.handleMove=function(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];r.target.trigger("jqplotDataMouseOver",o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.pieRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){r.target.trigger("jqplotDataHighlight",o);d(r,o[0],o[1])}}else{if(s==null){k(r)}}};function c(s,r,p){p=p||{};p.axesDefaults=p.axesDefaults||{};p.legend=p.legend||{};p.seriesDefaults=p.seriesDefaults||{};var o=false;if(p.seriesDefaults.renderer==e.jqplot.PieRenderer){o=true}else{if(p.series){for(var q=0;q<p.series.length;q++){if(p.series[q].renderer==e.jqplot.PieRenderer){o=true}}}}if(o){p.axesDefaults.renderer=e.jqplot.PieAxisRenderer;p.legend.renderer=e.jqplot.PieLegendRenderer;p.legend.preDraw=true;p.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.PieRenderer){if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}function m(o){for(var p=0;p<this.series.length;p++){this.series[p].seriesColors=this.seriesColors;this.series[p].colorGenerator=e.jqplot.colorGenerator}}function d(t,r,q){var p=t.series[r];var o=t.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);p._highlightedPoint=q;t.plugins.pieRenderer.highlightedSeriesIndex=r;p.renderer.drawSlice.call(p,o._ctx,p._sliceAngles[q][0],p._sliceAngles[q][1],p.highlightColorGenerator.get(q),false)}function k(q){var o=q.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);for(var p=0;p<q.series.length;p++){q.series[p]._highlightedPoint=null}q.plugins.pieRenderer.highlightedSeriesIndex=null;q.target.trigger("jqplotDataUnhighlight")}function b(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var p=jQuery.Event("jqplotDataMouseOver");p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q);if(t.series[q[0]].highlightMouseOver&&!(q[0]==t.plugins.pieRenderer.highlightedSeriesIndex&&q[1]==t.series[q[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.which=s.which;o.pageX=s.pageX;o.pageY=s.pageY;t.target.trigger(o,q);d(t,q[0],q[1])}}else{if(u==null){k(t)}}}function a(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];if(s.series[p[0]].highlightMouseDown&&!(p[0]==s.plugins.pieRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);d(s,p[0],p[1])}}else{if(t==null){k(s)}}}function l(q,p,t,s,r){var o=r.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&r.series[o].highlightMouseDown){k(r)}}function f(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function n(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var o=t.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&t.series[o].highlightMouseDown){k(t)}var p=jQuery.Event("jqplotDataRightClick");p.which=s.which;p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q)}}function i(){if(this.plugins.pieRenderer&&this.plugins.pieRenderer.highlightCanvas){this.plugins.pieRenderer.highlightCanvas.resetCanvas();this.plugins.pieRenderer.highlightCanvas=null}this.plugins.pieRenderer={highlightedSeriesIndex:null};this.plugins.pieRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var p=e(this.targetId+" .jqplot-data-label");if(p.length){e(p[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}var o=this.plugins.pieRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(q){k(q.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.PieTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.PieTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.PieTickRenderer.prototype.constructor=e.jqplot.PieTickRenderer})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js deleted file mode 100644 index 0cc44443..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js +++ /dev/null @@ -1,379 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - - /** - * Class: $.jqplot.PointLabels - * Plugin for putting labels at the data points. - * - * To use this plugin, include the js - * file in your source: - * - * > <script type="text/javascript" src="plugins/jqplot.pointLabels.js"></script> - * - * By default, the last value in the data ponit array in the data series is used - * for the label. For most series renderers, extra data can be added to the - * data point arrays and the last value will be used as the label. - * - * For instance, - * this series: - * - * > [[1,4], [3,5], [7,2]] - * - * Would, by default, use the y values in the labels. - * Extra data can be added to the series like so: - * - * > [[1,4,'mid'], [3 5,'hi'], [7,2,'low']] - * - * And now the point labels would be 'mid', 'low', and 'hi'. - * - * Options to the point labels and a custom labels array can be passed into the - * "pointLabels" option on the series option like so: - * - * > series:[{pointLabels:{ - * > labels:['mid', 'hi', 'low'], - * > location:'se', - * > ypadding: 12 - * > } - * > }] - * - * A custom labels array in the options takes precendence over any labels - * in the series data. If you have a custom labels array in the options, - * but still want to use values from the series array as labels, set the - * "labelsFromSeries" option to true. - * - * By default, html entities (<, >, etc.) are escaped in point labels. - * If you want to include actual html markup in the labels, - * set the "escapeHTML" option to false. - * - */ - $.jqplot.PointLabels = function(options) { - // Group: Properties - // - // prop: show - // show the labels or not. - this.show = $.jqplot.config.enablePlugins; - // prop: location - // compass location where to position the label around the point. - // 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' - this.location = 'n'; - // prop: labelsFromSeries - // true to use labels within data point arrays. - this.labelsFromSeries = false; - // prop: seriesLabelIndex - // array index for location of labels within data point arrays. - // if null, will use the last element of the data point array. - this.seriesLabelIndex = null; - // prop: labels - // array of arrays of labels, one array for each series. - this.labels = []; - // actual labels that will get displayed. - // needed to preserve user specified labels in labels array. - this._labels = []; - // prop: stackedValue - // true to display value as stacked in a stacked plot. - // no effect if labels is specified. - this.stackedValue = false; - // prop: ypadding - // vertical padding in pixels between point and label - this.ypadding = 6; - // prop: xpadding - // horizontal padding in pixels between point and label - this.xpadding = 6; - // prop: escapeHTML - // true to escape html entities in the labels. - // If you want to include markup in the labels, set to false. - this.escapeHTML = true; - // prop: edgeTolerance - // Number of pixels that the label must be away from an axis - // boundary in order to be drawn. Negative values will allow overlap - // with the grid boundaries. - this.edgeTolerance = -5; - // prop: formatter - // A class of a formatter for the tick text. sprintf by default. - this.formatter = $.jqplot.DefaultTickFormatter; - // prop: formatString - // string passed to the formatter. - this.formatString = ''; - // prop: hideZeros - // true to not show a label for a value which is 0. - this.hideZeros = false; - this._elems = []; - - $.extend(true, this, options); - }; - - var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w']; - var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7}; - var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e']; - - // called with scope of a series - $.jqplot.PointLabels.init = function (target, data, seriesDefaults, opts, plot){ - var options = $.extend(true, {}, seriesDefaults, opts); - options.pointLabels = options.pointLabels || {}; - if (this.renderer.constructor === $.jqplot.BarRenderer && this.barDirection === 'horizontal' && !options.pointLabels.location) { - options.pointLabels.location = 'e'; - } - // add a pointLabels attribute to the series plugins - this.plugins.pointLabels = new $.jqplot.PointLabels(options.pointLabels); - this.plugins.pointLabels.setLabels.call(this); - }; - - // called with scope of series - $.jqplot.PointLabels.prototype.setLabels = function() { - var p = this.plugins.pointLabels; - var labelIdx; - if (p.seriesLabelIndex != null) { - labelIdx = p.seriesLabelIndex; - } - else if (this.renderer.constructor === $.jqplot.BarRenderer && this.barDirection === 'horizontal') { - labelIdx = 0; - } - else { - labelIdx = (this._plotData.length === 0) ? 0 : this._plotData[0].length -1; - } - p._labels = []; - if (p.labels.length === 0 || p.labelsFromSeries) { - if (p.stackedValue) { - if (this._plotData.length && this._plotData[0].length){ - // var idx = p.seriesLabelIndex || this._plotData[0].length -1; - for (var i=0; i<this._plotData.length; i++) { - p._labels.push(this._plotData[i][labelIdx]); - } - } - } - else { - // var d = this._plotData; - var d = this.data; - if (this.renderer.constructor === $.jqplot.BarRenderer && this.waterfall) { - d = this._data; - } - if (d.length && d[0].length) { - // var idx = p.seriesLabelIndex || d[0].length -1; - for (var i=0; i<d.length; i++) { - p._labels.push(d[i][labelIdx]); - } - } - d = null; - } - } - else if (p.labels.length){ - p._labels = p.labels; - } - }; - - $.jqplot.PointLabels.prototype.xOffset = function(elem, location, padding) { - location = location || this.location; - padding = padding || this.xpadding; - var offset; - - switch (location) { - case 'nw': - offset = -elem.outerWidth(true) - this.xpadding; - break; - case 'n': - offset = -elem.outerWidth(true)/2; - break; - case 'ne': - offset = this.xpadding; - break; - case 'e': - offset = this.xpadding; - break; - case 'se': - offset = this.xpadding; - break; - case 's': - offset = -elem.outerWidth(true)/2; - break; - case 'sw': - offset = -elem.outerWidth(true) - this.xpadding; - break; - case 'w': - offset = -elem.outerWidth(true) - this.xpadding; - break; - default: // same as 'nw' - offset = -elem.outerWidth(true) - this.xpadding; - break; - } - return offset; - }; - - $.jqplot.PointLabels.prototype.yOffset = function(elem, location, padding) { - location = location || this.location; - padding = padding || this.xpadding; - var offset; - - switch (location) { - case 'nw': - offset = -elem.outerHeight(true) - this.ypadding; - break; - case 'n': - offset = -elem.outerHeight(true) - this.ypadding; - break; - case 'ne': - offset = -elem.outerHeight(true) - this.ypadding; - break; - case 'e': - offset = -elem.outerHeight(true)/2; - break; - case 'se': - offset = this.ypadding; - break; - case 's': - offset = this.ypadding; - break; - case 'sw': - offset = this.ypadding; - break; - case 'w': - offset = -elem.outerHeight(true)/2; - break; - default: // same as 'nw' - offset = -elem.outerHeight(true) - this.ypadding; - break; - } - return offset; - }; - - // called with scope of series - $.jqplot.PointLabels.draw = function (sctx, options, plot) { - var p = this.plugins.pointLabels; - // set labels again in case they have changed. - p.setLabels.call(this); - // remove any previous labels - for (var i=0; i<p._elems.length; i++) { - // Memory Leaks patch - // p._elems[i].remove(); - p._elems[i].emptyForce(); - } - p._elems.splice(0, p._elems.length); - - if (p.show) { - var ax = '_'+this._stackAxis+'axis'; - - if (!p.formatString) { - p.formatString = this[ax]._ticks[0].formatString; - p.formatter = this[ax]._ticks[0].formatter; - } - - var pd = this._plotData; - var ppd = this._prevPlotData; - var xax = this._xaxis; - var yax = this._yaxis; - var elem, helem; - - for (var i=0, l=p._labels.length; i < l; i++) { - var label = p._labels[i]; - - if (p.hideZeros && parseInt(p._labels[i], 10) == 0) { - label = ''; - } - - if (label != null) { - label = p.formatter(p.formatString, label); - } - - helem = document.createElement('div'); - p._elems[i] = $(helem); - - elem = p._elems[i]; - - - elem.addClass('jqplot-point-label jqplot-series-'+this.index+' jqplot-point-'+i); - elem.css('position', 'absolute'); - elem.insertAfter(sctx.canvas); - - if (p.escapeHTML) { - elem.text(label); - } - else { - elem.html(label); - } - var location = p.location; - if ((this.fillToZero && pd[i][1] < 0) || (this.fillToZero && this._type === 'bar' && this.barDirection === 'horizontal' && pd[i][0] < 0) || (this.waterfall && parseInt(label, 10)) < 0) { - location = oppositeLocations[locationIndicies[location]]; - } - - - var ell = xax.u2p(pd[i][0]) + p.xOffset(elem, location); - var elt = yax.u2p(pd[i][1]) + p.yOffset(elem, location); - - // we have stacked chart but are not showing stacked values, - // place labels in center. - if (this._stack && !p.stackedValue) { - if (this.barDirection === "vertical") { - elt = (this._barPoints[i][0][1] + this._barPoints[i][1][1]) / 2 + plot._gridPadding.top - 0.5 * elem.outerHeight(true); - } - else { - ell = (this._barPoints[i][2][0] + this._barPoints[i][0][0]) / 2 + plot._gridPadding.left - 0.5 * elem.outerWidth(true); - } - } - - if (this.renderer.constructor == $.jqplot.BarRenderer) { - if (this.barDirection == "vertical") { - ell += this._barNudge; - } - else { - elt -= this._barNudge; - } - } - elem.css('left', ell); - elem.css('top', elt); - var elr = ell + elem.width(); - var elb = elt + elem.height(); - var et = p.edgeTolerance; - var scl = $(sctx.canvas).position().left; - var sct = $(sctx.canvas).position().top; - var scr = sctx.canvas.width + scl; - var scb = sctx.canvas.height + sct; - // if label is outside of allowed area, remove it - if (ell - et < scl || elt - et < sct || elr + et > scr || elb + et > scb) { - elem.remove(); - } - - elem = null; - helem = null; - } - - // finally, animate them if the series is animated - // if (this.renderer.animation && this.renderer.animation._supported && this.renderer.animation.show && plot._drawCount < 2) { - // var sel = '.jqplot-point-label.jqplot-series-'+this.index; - // $(sel).hide(); - // $(sel).fadeIn(1000); - // } - - } - }; - - $.jqplot.postSeriesInitHooks.push($.jqplot.PointLabels.init); - $.jqplot.postDrawSeriesHooks.push($.jqplot.PointLabels.draw); -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js deleted file mode 100644 index d4fa0b51..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(c){c.jqplot.PointLabels=function(e){this.show=c.jqplot.config.enablePlugins;this.location="n";this.labelsFromSeries=false;this.seriesLabelIndex=null;this.labels=[];this._labels=[];this.stackedValue=false;this.ypadding=6;this.xpadding=6;this.escapeHTML=true;this.edgeTolerance=-5;this.formatter=c.jqplot.DefaultTickFormatter;this.formatString="";this.hideZeros=false;this._elems=[];c.extend(true,this,e)};var a=["nw","n","ne","e","se","s","sw","w"];var d={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var b=["se","s","sw","w","nw","n","ne","e"];c.jqplot.PointLabels.init=function(j,h,f,g,i){var e=c.extend(true,{},f,g);e.pointLabels=e.pointLabels||{};if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"&&!e.pointLabels.location){e.pointLabels.location="e"}this.plugins.pointLabels=new c.jqplot.PointLabels(e.pointLabels);this.plugins.pointLabels.setLabels.call(this)};c.jqplot.PointLabels.prototype.setLabels=function(){var f=this.plugins.pointLabels;var h;if(f.seriesLabelIndex!=null){h=f.seriesLabelIndex}else{if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"){h=0}else{h=(this._plotData.length===0)?0:this._plotData[0].length-1}}f._labels=[];if(f.labels.length===0||f.labelsFromSeries){if(f.stackedValue){if(this._plotData.length&&this._plotData[0].length){for(var e=0;e<this._plotData.length;e++){f._labels.push(this._plotData[e][h])}}}else{var g=this.data;if(this.renderer.constructor===c.jqplot.BarRenderer&&this.waterfall){g=this._data}if(g.length&&g[0].length){for(var e=0;e<g.length;e++){f._labels.push(g[e][h])}}g=null}}else{if(f.labels.length){f._labels=f.labels}}};c.jqplot.PointLabels.prototype.xOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerWidth(true)-this.xpadding;break;case"n":h=-f.outerWidth(true)/2;break;case"ne":h=this.xpadding;break;case"e":h=this.xpadding;break;case"se":h=this.xpadding;break;case"s":h=-f.outerWidth(true)/2;break;case"sw":h=-f.outerWidth(true)-this.xpadding;break;case"w":h=-f.outerWidth(true)-this.xpadding;break;default:h=-f.outerWidth(true)-this.xpadding;break}return h};c.jqplot.PointLabels.prototype.yOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerHeight(true)-this.ypadding;break;case"n":h=-f.outerHeight(true)-this.ypadding;break;case"ne":h=-f.outerHeight(true)-this.ypadding;break;case"e":h=-f.outerHeight(true)/2;break;case"se":h=this.ypadding;break;case"s":h=this.ypadding;break;case"sw":h=this.ypadding;break;case"w":h=-f.outerHeight(true)/2;break;default:h=-f.outerHeight(true)-this.ypadding;break}return h};c.jqplot.PointLabels.draw=function(x,j,v){var t=this.plugins.pointLabels;t.setLabels.call(this);for(var w=0;w<t._elems.length;w++){t._elems[w].emptyForce()}t._elems.splice(0,t._elems.length);if(t.show){var r="_"+this._stackAxis+"axis";if(!t.formatString){t.formatString=this[r]._ticks[0].formatString;t.formatter=this[r]._ticks[0].formatter}var E=this._plotData;var D=this._prevPlotData;var A=this._xaxis;var q=this._yaxis;var z,f;for(var w=0,u=t._labels.length;w<u;w++){var o=t._labels[w];if(t.hideZeros&&parseInt(t._labels[w],10)==0){o=""}if(o!=null){o=t.formatter(t.formatString,o)}f=document.createElement("div");t._elems[w]=c(f);z=t._elems[w];z.addClass("jqplot-point-label jqplot-series-"+this.index+" jqplot-point-"+w);z.css("position","absolute");z.insertAfter(x.canvas);if(t.escapeHTML){z.text(o)}else{z.html(o)}var g=t.location;if((this.fillToZero&&E[w][1]<0)||(this.fillToZero&&this._type==="bar"&&this.barDirection==="horizontal"&&E[w][0]<0)||(this.waterfall&&parseInt(o,10))<0){g=b[d[g]]}var n=A.u2p(E[w][0])+t.xOffset(z,g);var h=q.u2p(E[w][1])+t.yOffset(z,g);if(this._stack&&!t.stackedValue){if(this.barDirection==="vertical"){h=(this._barPoints[w][0][1]+this._barPoints[w][1][1])/2+v._gridPadding.top-0.5*z.outerHeight(true)}else{n=(this._barPoints[w][2][0]+this._barPoints[w][0][0])/2+v._gridPadding.left-0.5*z.outerWidth(true)}}if(this.renderer.constructor==c.jqplot.BarRenderer){if(this.barDirection=="vertical"){n+=this._barNudge}else{h-=this._barNudge}}z.css("left",n);z.css("top",h);var k=n+z.width();var s=h+z.height();var C=t.edgeTolerance;var e=c(x.canvas).position().left;var y=c(x.canvas).position().top;var B=x.canvas.width+e;var m=x.canvas.height+y;if(n-C<e||h-C<y||k+C>B||s+C>m){z.remove()}z=null;f=null}}};c.jqplot.postSeriesInitHooks.push(c.jqplot.PointLabels.init);c.jqplot.postDrawSeriesHooks.push(c.jqplot.PointLabels.draw)})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js deleted file mode 100644 index e43f6bda..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js +++ /dev/null @@ -1,728 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - $.jqplot.PyramidAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - }; - - $.jqplot.PyramidAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.PyramidAxisRenderer.prototype.constructor = $.jqplot.PyramidAxisRenderer; - - // called with scope of axis - $.jqplot.PyramidAxisRenderer.prototype.init = function(options){ - // Group: Properties - // - // prop: position - // Position of axis. Values are: top, bottom , left, center, right. - // By default, x and x2 axes are bottom, y axis is center. - this.position = null; - // prop: drawBaseline - // True to draw the axis baseline. - this.drawBaseline = true; - // prop: baselineWidth - // width of the baseline in pixels. - this.baselineWidth = null; - // prop: baselineColor - // CSS color spec for the baseline. - this.baselineColor = null; - this.tickSpacingFactor = 25; - this._type = 'pyramid'; - this._splitAxis = false; - this._splitLength = null; - this.category = false; - this._autoFormatString = ''; - this._overrideFormatString = false; - - $.extend(true, this, options); - this.renderer.options = options; - - this.resetDataBounds = this.renderer.resetDataBounds; - this.resetDataBounds(); - - }; - - $.jqplot.PyramidAxisRenderer.prototype.resetDataBounds = function() { - // Go through all the series attached to this axis and find - // the min/max bounds for this axis. - var db = this._dataBounds; - db.min = null; - db.max = null; - var temp; - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - var d = s._plotData; - - for (var j=0, l=d.length; j<l; j++) { - if (this.name.charAt(0) === 'x') { - temp = d[j][1]; - if ((temp !== null && temp < db.min) || db.min === null) { - db.min = temp; - } - if ((temp !== null && temp > db.max) || db.max === null) { - db.max = temp; - } - } - else { - temp = d[j][0]; - if ((temp !== null && temp < db.min) || db.min === null) { - db.min = temp; - } - if ((temp !== null && temp > db.max) || db.max === null) { - db.max = temp; - } - } - } - } - }; - - // called with scope of axis - $.jqplot.PyramidAxisRenderer.prototype.draw = function(ctx, plot) { - if (this.show) { - // populate the axis label and value properties. - // createTicks is a method on the renderer, but - // call it within the scope of the axis. - this.renderer.createTicks.call(this, plot); - // fill a div with axes labels in the right direction. - // Need to pregenerate each axis to get it's bounds and - // position it and the labels correctly on the plot. - var dim=0; - var temp; - // Added for theming. - if (this._elem) { - // Memory Leaks patch - //this._elem.empty(); - this._elem.emptyForce(); - this._elem = null; - } - - this._elem = $(document.createElement('div')); - this._elem.addClass('jqplot-axis jqplot-'+this.name); - this._elem.css('position', 'absolute'); - - - if (this.name == 'xaxis' || this.name == 'x2axis') { - this._elem.width(this._plotDimensions.width); - } - else { - this._elem.height(this._plotDimensions.height); - } - - // create a _label object. - this.labelOptions.axis = this.name; - this._label = new this.labelRenderer(this.labelOptions); - if (this._label.show) { - var elem = this._label.draw(ctx, plot); - elem.appendTo(this._elem); - elem = null; - } - - var t = this._ticks; - var tick; - for (var i=0; i<t.length; i++) { - tick = t[i]; - if (tick.show && tick.showLabel && (!tick.isMinorTick)) { - this._elem.append(tick.draw(ctx, plot)); - } - } - tick = null; - t = null; - } - return this._elem; - }; - - // Note, primes can be found on http://primes.utm.edu/ - var _primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; - - - var _primesHash = {}; - - for (var i =0, l = _primes.length; i < l; i++) { - _primesHash[_primes[i]] = _primes[i]; - } - - // called with scope of axis - $.jqplot.PyramidAxisRenderer.prototype.createTicks = function(plot) { - // we're are operating on an axis here - var userTicks = this.ticks; - // databounds were set on axis initialization. - var db = this._dataBounds; - var dim; - var interval; - var min; - var max; - var range; - var pos1; - var pos2; - var tt; - var i; - var l; - var s; - // get a copy of user's settings for min/max. - var userMin = this.min; - var userMax = this.max; - var ut; - var t; - var threshold; - var tdim; - var scalefact; - var ret; - var tumin; - var tumax; - var maxVisibleTicks; - var val; - var skip = null; - var temp; - - // if we already have ticks, use them. - // ticks must be in order of increasing value. - - if (userTicks.length) { - // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed - for (i=0, l=userTicks.length; i<l; i++){ - ut = userTicks[i]; - t = new this.tickRenderer(this.tickOptions); - if ($.isArray(ut)) { - t.value = ut[0]; - t.label = ut[1]; - t.setTick(ut[0], this.name); - this._ticks.push(t); - } - - else if ($.isPlainObject(ut)) { - $.extend(true, t, ut); - t.axis = this.name; - this._ticks.push(t); - } - - else { - if (typeof ut === 'string') { - val = i + plot.defaultAxisStart; - } - else { - val = ut; - } - t.value = val; - t.label = ut; - t.axis = this.name; - this._ticks.push(t); - } - } - this.numberTicks = userTicks.length; - this.min = this._ticks[0].value; - this.max = this._ticks[this.numberTicks-1].value; - this.tickInterval = (this.max - this.min) / (this.numberTicks - 1); - - // use user specified tickInterval if there is one - if (this._options.tickInterval) { - // hide every tick except for ticks on interval - var ti = this._options.tickInterval; - for (i=0; i<this.numberTicks; i++) { - if (i%ti !== 0) { - // this._ticks[i].show = false; - this._ticks[i].isMinorTick = true; - } - } - } - - else { - // check if we have too many ticks - dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height; - maxVisibleTicks = Math.round(2.0 + dim/this.tickSpacingFactor); - - if (this.numberTicks > maxVisibleTicks) { - // check for number of ticks we can skip - temp = this.numberTicks - 1; - for (i=2; i<temp; i++) { - if (temp % i === 0 && temp/i < maxVisibleTicks) { - skip = i-1; - break; - } - } - - if (skip !== null) { - var count = 1; - for (i=1, l=this._ticks.length; i<l; i++) { - if (count <= skip) { - this._ticks[i].show = false; - count += 1; - } - else { - count = 1; - } - } - } - } - } - - // if category style, add minor ticks in between - temp = []; - if (this.category) { - // turn off gridline and mark on first tick - this._ticks[0].showGridline = false; - this._ticks[0].showMark = false; - - for (i=this._ticks.length-1; i>0; i--) { - t = new this.tickRenderer(this.tickOptions); - t.value = this._ticks[i-1].value + this.tickInterval/2.0; - t.label = ''; - t.showLabel = false; - t.axis = this.name; - this._ticks[i].showGridline = false; - this._ticks[i].showMark = false; - this._ticks.splice(i, 0, t); - // temp.push(t); - } - - // merge in the new ticks - // for (i=1, l=temp.length; i<l; i++) { - // this._ticks.splice(i, 0, temp[i]); - // } - - // now add a tick at beginning and end - t = new this.tickRenderer(this.tickOptions); - t.value = this._ticks[0].value - this.tickInterval/2.0; - t.label = ''; - t.showLabel = false; - t.axis = this.name; - this._ticks.unshift(t); - - t = new this.tickRenderer(this.tickOptions); - t.value = this._ticks[this._ticks.length-1].value + this.tickInterval/2.0; - t.label = ''; - t.showLabel = false; - t.axis = this.name; - this._ticks.push(t); - - this.tickInterval = this.tickInterval / 2.0; - this.numberTicks = this._ticks.length; - this.min = this._ticks[0].value; - this.max = this._ticks[this._ticks.length-1].value; - } - } - - // we don't have any ticks yet, let's make some! - else { - if (this.name.charAt(0) === 'x') { - dim = this._plotDimensions.width; - // make sure x axis is symetric about 0. - var tempmax = Math.max(db.max, Math.abs(db.min)); - var tempmin = Math.min(db.min, -tempmax); - // min = ((this.min != null) ? this.min : tempmin); - // max = ((this.max != null) ? this.max : tempmax); - min = tempmin; - max = tempmax; - range = max - min; - - if (this.tickOptions == null || !this.tickOptions.formatString) { - this._overrideFormatString = true; - } - - threshold = 30; - tdim = Math.max(dim, threshold+1); - scalefact = (tdim-threshold)/300.0; - ret = $.jqplot.LinearTickGenerator(min, max, scalefact); - // calculate a padded max and min, points should be less than these - // so that they aren't too close to the edges of the plot. - // User can adjust how much padding is allowed with pad, padMin and PadMax options. - tumin = min + range*(this.padMin - 1); - tumax = max - range*(this.padMax - 1); - - if (min < tumin || max > tumax) { - tumin = min - range*(this.padMin - 1); - tumax = max + range*(this.padMax - 1); - ret = $.jqplot.LinearTickGenerator(tumin, tumax, scalefact); - } - - this.min = ret[0]; - this.max = ret[1]; - this.numberTicks = ret[2]; - this._autoFormatString = ret[3]; - this.tickInterval = ret[4]; - } - else { - dim = this._plotDimensions.height; - - // ticks will be on whole integers like 1, 2, 3, ... or 1, 4, 7, ... - min = db.min; - max = db.max; - s = this._series[0]; - this._ticks = []; - - range = max - min; - - // if range is a prime, will get only 2 ticks, expand range in that case. - if (_primesHash[range]) { - range += 1; - max += 1; - } - - this.max = max; - this.min = min; - - maxVisibleTicks = Math.round(2.0 + dim/this.tickSpacingFactor); - - if (range + 1 <= maxVisibleTicks) { - this.numberTicks = range + 1; - this.tickInterval = 1.0; - } - - else { - // figure out a round number of ticks to skip in every interval - // range / ti + 1 = nt - // ti = range / (nt - 1) - for (var i=maxVisibleTicks; i>1; i--) { - if (range/(i - 1) === Math.round(range/(i - 1))) { - this.numberTicks = i; - this.tickInterval = range/(i - 1); - break; - } - - } - } - } - - if (this._overrideFormatString && this._autoFormatString != '') { - this.tickOptions = this.tickOptions || {}; - this.tickOptions.formatString = this._autoFormatString; - } - - var labelval; - for (i=0; i<this.numberTicks; i++) { - this.tickOptions.axis = this.name; - labelval = this.min + this.tickInterval * i; - if (this.name.charAt(0) === 'x') { - labelval = Math.abs(labelval); - } - // this.tickOptions.label = String (labelval); - this.tickOptions.value = this.min + this.tickInterval * i; - t = new this.tickRenderer(this.tickOptions); - - t.label = t.prefix + t.formatter(t.formatString, labelval); - - this._ticks.push(t); - // for x axis, if y axis is in middle, add a symetrical 0 tick - if (this.name.charAt(0) === 'x' && plot.axes.yMidAxis.show && this.tickOptions.value === 0) { - this._splitAxis = true; - this._splitLength = plot.axes.yMidAxis.getWidth(); - // t.value = -this.max/2000.0; - t = new this.tickRenderer(this.tickOptions); - this._ticks.push(t); - t.value = this.max/2000.0; - } - } - t = null; - } - }; - - // called with scope of axis - $.jqplot.PyramidAxisRenderer.prototype.set = function() { - var dim = 0; - var temp; - var w = 0; - var h = 0; - var i; - var t; - var tick; - var lshow = (this._label == null) ? false : this._label.show; - if (this.show) { - t = this._ticks; - l = t.length; - for (i=0; i<l; i++) { - tick = t[i]; - if (!tick._breakTick && tick.show && tick.showLabel && !tick.isMinorTick) { - if (this.name.charAt(0) === 'x') { - temp = tick._elem.outerHeight(true); - } - else { - temp = tick._elem.outerWidth(true); - } - if (temp > dim) { - dim = temp; - } - } - } - - if (this.name === 'yMidAxis') { - for (i=0; i<l; i++) { - tick = t[i]; - if (tick._elem) { - temp = (dim - tick._elem.outerWidth(true))/2.0; - tick._elem.css('left', temp); - } - } - } - tick = null; - t = null; - - if (lshow) { - w = this._label._elem.outerWidth(true); - h = this._label._elem.outerHeight(true); - } - if (this.name === 'xaxis') { - dim = dim + h; - this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'}); - } - else if (this.name === 'x2axis') { - dim = dim + h; - this._elem.css({'height':dim+'px', left:'0px', top:'0px'}); - } - else if (this.name === 'yaxis') { - dim = dim + w; - this._elem.css({'width':dim+'px', left:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - else if (this.name === 'yMidAxis') { - // don't include width of label at all in width of axis? - // dim = (dim > w) ? dim : w; - var temp = dim/2.0 - w/2.0; - this._elem.css({'width':dim+'px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css({width: w, left: temp, top: 0}); - } - } - else { - dim = dim + w; - this._elem.css({'width':dim+'px', right:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - } - }; - - $.jqplot.PyramidAxisRenderer.prototype.pack = function(pos, offsets) { - // Add defaults for repacking from resetTickValues function. - pos = pos || {}; - offsets = offsets || this._offsets; - - var ticks = this._ticks; - var max = this.max; - var min = this.min; - var offmax = offsets.max; - var offmin = offsets.min; - var lshow = (this._label == null) ? false : this._label.show; - - for (var p in pos) { - this._elem.css(p, pos[p]); - } - - this._offsets = offsets; - // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left. - var pixellength = offmax - offmin; - var unitlength = max - min; - var sl = this._splitLength; - - // point to unit and unit to point conversions references to Plot DOM element top left corner. - if (this._splitAxis) { - pixellength -= this._splitLength; - - // don't know that this one is correct. - this.p2u = function(p){ - return (p - offmin) * unitlength / pixellength + min; - }; - - this.u2p = function(u){ - if (u <= 0) { - return (u - min) * pixellength / unitlength + offmin; - } - else { - return (u - min) * pixellength / unitlength + offmin + sl; - } - }; - - this.series_u2p = function(u){ - if (u <= 0) { - return (u - min) * pixellength / unitlength; - } - else { - return (u - min) * pixellength / unitlength + sl; - } - }; - - // don't know that this one is correct. - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - else { - this.p2u = function(p){ - return (p - offmin) * unitlength / pixellength + min; - }; - - this.u2p = function(u){ - return (u - min) * pixellength / unitlength + offmin; - }; - - if (this.name.charAt(0) === 'x'){ - this.series_u2p = function(u){ - return (u - min) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - - else { - this.series_u2p = function(u){ - return (u - max) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + max; - }; - } - } - - if (this.show) { - if (this.name.charAt(0) === 'x') { - for (var i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'xaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - if (temp * t.angle < 0) { - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - } - // position at start - else { - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - } - break; - case 'end': - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - case 'start': - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - break; - case 'middle': - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - default: - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - } - } - else { - shim = -t.getWidth()/2; - } - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('left', val); - t.pack(); - } - } - if (lshow) { - var w = this._label._elem.outerWidth(true); - this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px'); - if (this.name == 'xaxis') { - this._label._elem.css('bottom', '0px'); - } - else { - this._label._elem.css('top', '0px'); - } - this._label.pack(); - } - } - else { - for (var i=0; i<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel && !t.isMinorTick) { - var shim; - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'yaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - case 'end': - if (temp * t.angle < 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'start': - if (t.angle > 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'middle': - // if (t.angle > 0) { - // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - // } - // else { - // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - // } - shim = -t.getHeight()/2; - break; - default: - shim = -t.getHeight()/2; - break; - } - } - else { - shim = -t.getHeight()/2; - } - - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('top', val); - t.pack(); - } - } - if (lshow) { - var h = this._label._elem.outerHeight(true); - if (this.name !== 'yMidAxis') { - this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px'); - } - if (this.name == 'yaxis') { - this._label._elem.css('left', '0px'); - } - else if (this.name !== 'yMidAxis') { - this._label._elem.css('right', '0px'); - } - this._label.pack(); - } - } - } - - ticks = null; - }; -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js deleted file mode 100644 index bcb184a6..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(e){e.jqplot.PyramidAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PyramidAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PyramidAxisRenderer.prototype.constructor=e.jqplot.PyramidAxisRenderer;e.jqplot.PyramidAxisRenderer.prototype.init=function(f){this.position=null;this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.tickSpacingFactor=25;this._type="pyramid";this._splitAxis=false;this._splitLength=null;this.category=false;this._autoFormatString="";this._overrideFormatString=false;e.extend(true,this,f);this.renderer.options=f;this.resetDataBounds=this.renderer.resetDataBounds;this.resetDataBounds()};e.jqplot.PyramidAxisRenderer.prototype.resetDataBounds=function(){var h=this._dataBounds;h.min=null;h.max=null;var g;for(var m=0;m<this._series.length;m++){var n=this._series[m];var o=n._plotData;for(var k=0,f=o.length;k<f;k++){if(this.name.charAt(0)==="x"){g=o[k][1];if((g!==null&&g<h.min)||h.min===null){h.min=g}if((g!==null&&g>h.max)||h.max===null){h.max=g}}else{g=o[k][0];if((g!==null&&g<h.min)||h.min===null){h.min=g}if((g!==null&&g>h.max)||h.max===null){h.max=g}}}}};e.jqplot.PyramidAxisRenderer.prototype.draw=function(f,n){if(this.show){this.renderer.createTicks.call(this,n);var m=0;var g;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=e(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var l=this._label.draw(f,n);l.appendTo(this._elem);l=null}var k=this._ticks;var j;for(var h=0;h<k.length;h++){j=k[h];if(j.show&&j.showLabel&&(!j.isMinorTick)){this._elem.append(j.draw(f,n))}}j=null;k=null}return this._elem};var b=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];var d={};for(var c=0,a=b.length;c<a;c++){d[b[c]]=b[c]}e.jqplot.PyramidAxisRenderer.prototype.createTicks=function(D){var J=this.ticks;var M=this._dataBounds;var E;var K;var B;var G;var y;var n;var k;var h;var H;var C;var x;var L=this.min;var N=this.max;var q;var v;var m;var g;var j;var O;var A;var F;var r;var P;var z=null;var I;if(J.length){for(H=0,C=J.length;H<C;H++){q=J[H];v=new this.tickRenderer(this.tickOptions);if(e.isArray(q)){v.value=q[0];v.label=q[1];v.setTick(q[0],this.name);this._ticks.push(v)}else{if(e.isPlainObject(q)){e.extend(true,v,q);v.axis=this.name;this._ticks.push(v)}else{if(typeof q==="string"){P=H+D.defaultAxisStart}else{P=q}v.value=P;v.label=q;v.axis=this.name;this._ticks.push(v)}}}this.numberTicks=J.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1);if(this._options.tickInterval){var o=this._options.tickInterval;for(H=0;H<this.numberTicks;H++){if(H%o!==0){this._ticks[H].isMinorTick=true}}}else{E=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;r=Math.round(2+E/this.tickSpacingFactor);if(this.numberTicks>r){I=this.numberTicks-1;for(H=2;H<I;H++){if(I%H===0&&I/H<r){z=H-1;break}}if(z!==null){var p=1;for(H=1,C=this._ticks.length;H<C;H++){if(p<=z){this._ticks[H].show=false;p+=1}else{p=1}}}}}I=[];if(this.category){this._ticks[0].showGridline=false;this._ticks[0].showMark=false;for(H=this._ticks.length-1;H>0;H--){v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[H-1].value+this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks[H].showGridline=false;this._ticks[H].showMark=false;this._ticks.splice(H,0,v)}v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[0].value-this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks.unshift(v);v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[this._ticks.length-1].value+this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks.push(v);this.tickInterval=this.tickInterval/2;this.numberTicks=this._ticks.length;this.min=this._ticks[0].value;this.max=this._ticks[this._ticks.length-1].value}}else{if(this.name.charAt(0)==="x"){E=this._plotDimensions.width;var w=Math.max(M.max,Math.abs(M.min));var u=Math.min(M.min,-w);B=u;G=w;y=G-B;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}m=30;g=Math.max(E,m+1);j=(g-m)/300;O=e.jqplot.LinearTickGenerator(B,G,j);A=B+y*(this.padMin-1);F=G-y*(this.padMax-1);if(B<A||G>F){A=B-y*(this.padMin-1);F=G+y*(this.padMax-1);O=e.jqplot.LinearTickGenerator(A,F,j)}this.min=O[0];this.max=O[1];this.numberTicks=O[2];this._autoFormatString=O[3];this.tickInterval=O[4]}else{E=this._plotDimensions.height;B=M.min;G=M.max;x=this._series[0];this._ticks=[];y=G-B;if(d[y]){y+=1;G+=1}this.max=G;this.min=B;r=Math.round(2+E/this.tickSpacingFactor);if(y+1<=r){this.numberTicks=y+1;this.tickInterval=1}else{for(var H=r;H>1;H--){if(y/(H-1)===Math.round(y/(H-1))){this.numberTicks=H;this.tickInterval=y/(H-1);break}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var f;for(H=0;H<this.numberTicks;H++){this.tickOptions.axis=this.name;f=this.min+this.tickInterval*H;if(this.name.charAt(0)==="x"){f=Math.abs(f)}this.tickOptions.value=this.min+this.tickInterval*H;v=new this.tickRenderer(this.tickOptions);v.label=v.prefix+v.formatter(v.formatString,f);this._ticks.push(v);if(this.name.charAt(0)==="x"&&D.axes.yMidAxis.show&&this.tickOptions.value===0){this._splitAxis=true;this._splitLength=D.axes.yMidAxis.getWidth();v=new this.tickRenderer(this.tickOptions);this._ticks.push(v);v.value=this.max/2000}}v=null}};e.jqplot.PyramidAxisRenderer.prototype.set=function(){var o=0;var j;var g=0;var n=0;var m;var l;var k;var f=(this._label==null)?false:this._label.show;if(this.show){l=this._ticks;a=l.length;for(m=0;m<a;m++){k=l[m];if(!k._breakTick&&k.show&&k.showLabel&&!k.isMinorTick){if(this.name.charAt(0)==="x"){j=k._elem.outerHeight(true)}else{j=k._elem.outerWidth(true)}if(j>o){o=j}}}if(this.name==="yMidAxis"){for(m=0;m<a;m++){k=l[m];if(k._elem){j=(o-k._elem.outerWidth(true))/2;k._elem.css("left",j)}}}k=null;l=null;if(f){g=this._label._elem.outerWidth(true);n=this._label._elem.outerHeight(true)}if(this.name==="xaxis"){o=o+n;this._elem.css({height:o+"px",left:"0px",bottom:"0px"})}else{if(this.name==="x2axis"){o=o+n;this._elem.css({height:o+"px",left:"0px",top:"0px"})}else{if(this.name==="yaxis"){o=o+g;this._elem.css({width:o+"px",left:"0px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css("width",g+"px")}}else{if(this.name==="yMidAxis"){var j=o/2-g/2;this._elem.css({width:o+"px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css({width:g,left:j,top:0})}}else{o=o+g;this._elem.css({width:o+"px",right:"0px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css("width",g+"px")}}}}}}};e.jqplot.PyramidAxisRenderer.prototype.pack=function(j,g){j=j||{};g=g||this._offsets;var B=this._ticks;var v=this.max;var u=this.min;var o=g.max;var m=g.min;var r=(this._label==null)?false:this._label.show;for(var s in j){this._elem.css(s,j[s])}this._offsets=g;var k=o-m;var l=v-u;var z=this._splitLength;if(this._splitAxis){k-=this._splitLength;this.p2u=function(h){return(h-m)*l/k+u};this.u2p=function(h){if(h<=0){return(h-u)*k/l+m}else{return(h-u)*k/l+m+z}};this.series_u2p=function(h){if(h<=0){return(h-u)*k/l}else{return(h-u)*k/l+z}};this.series_p2u=function(h){return h*l/k+u}}else{this.p2u=function(h){return(h-m)*l/k+u};this.u2p=function(h){return(h-u)*k/l+m};if(this.name.charAt(0)==="x"){this.series_u2p=function(h){return(h-u)*k/l};this.series_p2u=function(h){return h*l/k+u}}else{this.series_u2p=function(h){return(h-v)*k/l};this.series_p2u=function(h){return h*l/k+v}}}if(this.show){if(this.name.charAt(0)==="x"){for(var x=0;x<B.length;x++){var q=B[x];if(q.show&&q.showLabel){var f;if(q.constructor==e.jqplot.CanvasAxisTickRenderer&&q.angle){var A=(this.name=="xaxis")?1:-1;switch(q.labelPosition){case"auto":if(A*q.angle<0){f=-q.getWidth()+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2}else{f=-q._textRenderer.height*Math.sin(q._textRenderer.angle)/2}break;case"end":f=-q.getWidth()+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break;case"start":f=-q._textRenderer.height*Math.sin(q._textRenderer.angle)/2;break;case"middle":f=-q.getWidth()/2+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break;default:f=-q.getWidth()/2+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break}}else{f=-q.getWidth()/2}var C=this.u2p(q.value)+f+"px";q._elem.css("left",C);q.pack()}}if(r){var n=this._label._elem.outerWidth(true);this._label._elem.css("left",m+k/2-n/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var x=0;x<B.length;x++){var q=B[x];if(q.show&&q.showLabel&&!q.isMinorTick){var f;if(q.constructor==e.jqplot.CanvasAxisTickRenderer&&q.angle){var A=(this.name=="yaxis")?1:-1;switch(q.labelPosition){case"auto":case"end":if(A*q.angle<0){f=-q._textRenderer.height*Math.cos(-q._textRenderer.angle)/2}else{f=-q.getHeight()+q._textRenderer.height*Math.cos(q._textRenderer.angle)/2}break;case"start":if(q.angle>0){f=-q._textRenderer.height*Math.cos(-q._textRenderer.angle)/2}else{f=-q.getHeight()+q._textRenderer.height*Math.cos(q._textRenderer.angle)/2}break;case"middle":f=-q.getHeight()/2;break;default:f=-q.getHeight()/2;break}}else{f=-q.getHeight()/2}var C=this.u2p(q.value)+f+"px";q._elem.css("top",C);q.pack()}}if(r){var y=this._label._elem.outerHeight(true);if(this.name!=="yMidAxis"){this._label._elem.css("top",o-k/2-y/2+"px")}if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{if(this.name!=="yMidAxis"){this._label._elem.css("right","0px")}}this._label.pack()}}}B=null}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js deleted file mode 100644 index 64fa2acc..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js +++ /dev/null @@ -1,429 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - // Class: $.jqplot.CanvasGridRenderer - // The default jqPlot grid renderer, creating a grid on a canvas element. - // The renderer has no additional options beyond the <Grid> class. - $.jqplot.PyramidGridRenderer = function(){ - $.jqplot.CanvasGridRenderer.call(this); - }; - - $.jqplot.PyramidGridRenderer.prototype = new $.jqplot.CanvasGridRenderer(); - $.jqplot.PyramidGridRenderer.prototype.constructor = $.jqplot.PyramidGridRenderer; - - // called with context of Grid object - $.jqplot.CanvasGridRenderer.prototype.init = function(options) { - this._ctx; - this.plotBands = { - show: false, - color: 'rgb(230, 219, 179)', - axis: 'y', - start: null, - interval: 10 - }; - $.extend(true, this, options); - // set the shadow renderer options - var sopts = {lineJoin:'miter', lineCap:'round', fill:false, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.shadowWidth, closePath:false, strokeStyle:this.shadowColor}; - this.renderer.shadowRenderer.init(sopts); - }; - - $.jqplot.PyramidGridRenderer.prototype.draw = function() { - this._ctx = this._elem.get(0).getContext("2d"); - var ctx = this._ctx; - var axes = this._axes; - var xp = axes.xaxis.u2p; - var yp = axes.yMidAxis.u2p; - var xnudge = axes.xaxis.max/1000.0; - var xp0 = xp(0); - var xpn = xp(xnudge); - var ax = ['xaxis', 'yaxis', 'x2axis', 'y2axis','yMidAxis']; - // Add the grid onto the grid canvas. This is the bottom most layer. - ctx.save(); - ctx.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height); - ctx.fillStyle = this.backgroundColor || this.background; - - ctx.fillRect(this._left, this._top, this._width, this._height); - - if (this.plotBands.show) { - ctx.save(); - var pb = this.plotBands; - ctx.fillStyle = pb.color; - var axis; - var x, y, w, h; - // find axis to work with - if (pb.axis.charAt(0) === 'x') { - if (axes.xaxis.show) { - axis = axes.xaxis; - } - } - else if (pb.axis.charAt(0) === 'y') { - if (axes.yaxis.show) { - axis = axes.yaxis; - } - else if (axes.y2axis.show) { - axis = axes.y2axis; - } - else if (axes.yMidAxis.show) { - axis = axes.yMidAxis; - } - } - - if (axis !== undefined) { - // draw some rectangles - var start = pb.start; - if (start === null) { - start = axis.min; - } - for (var i = start; i < axis.max; i += 2 * pb.interval) { - if (axis.name.charAt(0) === 'y') { - x = this._left; - if ((i + pb.interval) < axis.max) { - y = axis.series_u2p(i + pb.interval) + this._top; - } - else { - y = axis.series_u2p(axis.max) + this._top; - } - w = this._right - this._left; - h = axis.series_u2p(start) - axis.series_u2p(start + pb.interval); - ctx.fillRect(x, y, w, h); - } - // else { - // y = 0; - // x = axis.series_u2p(i); - // h = this._height; - // w = axis.series_u2p(start + pb.interval) - axis.series_u2p(start); - // } - - } - } - ctx.restore(); - } - - ctx.save(); - ctx.lineJoin = 'miter'; - ctx.lineCap = 'butt'; - ctx.lineWidth = this.gridLineWidth; - ctx.strokeStyle = this.gridLineColor; - var b, e, s, m; - for (var i=5; i>0; i--) { - var name = ax[i-1]; - var axis = axes[name]; - var ticks = axis._ticks; - var numticks = ticks.length; - if (axis.show) { - if (axis.drawBaseline) { - var bopts = {}; - if (axis.baselineWidth !== null) { - bopts.lineWidth = axis.baselineWidth; - } - if (axis.baselineColor !== null) { - bopts.strokeStyle = axis.baselineColor; - } - switch (name) { - case 'xaxis': - if (axes.yMidAxis.show) { - drawLine (this._left, this._bottom, xp0, this._bottom, bopts); - drawLine (xpn, this._bottom, this._right, this._bottom, bopts); - } - else { - drawLine (this._left, this._bottom, this._right, this._bottom, bopts); - } - break; - case 'yaxis': - drawLine (this._left, this._bottom, this._left, this._top, bopts); - break; - case 'yMidAxis': - drawLine(xp0, this._bottom, xp0, this._top, bopts); - drawLine(xpn, this._bottom, xpn, this._top, bopts); - break; - case 'x2axis': - if (axes.yMidAxis.show) { - drawLine (this._left, this._top, xp0, this._top, bopts); - drawLine (xpn, this._top, this._right, this._top, bopts); - } - else { - drawLine (this._left, this._bottom, this._right, this._bottom, bopts); - } - break; - case 'y2axis': - drawLine (this._right, this._bottom, this._right, this._top, bopts); - break; - - } - } - for (var j=numticks; j>0; j--) { - var t = ticks[j-1]; - if (t.show) { - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (name) { - case 'xaxis': - // draw the grid line if we should - if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) { - drawLine(pos, this._top, pos, this._bottom); - } - - // draw the mark - if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (m) { - case 'outside': - b = this._bottom; - e = this._bottom+s; - break; - case 'inside': - b = this._bottom-s; - e = this._bottom; - break; - case 'cross': - b = this._bottom-s; - e = this._bottom+s; - break; - default: - b = this._bottom; - e = this._bottom+s; - break; - } - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false}); - } - // draw the line - drawLine(pos, b, pos, e); - } - break; - case 'yaxis': - // draw the grid line - if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) { - drawLine(this._right, pos, this._left, pos); - } - - // draw the mark - if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (m) { - case 'outside': - b = this._left-s; - e = this._left; - break; - case 'inside': - b = this._left; - e = this._left+s; - break; - case 'cross': - b = this._left-s; - e = this._left+s; - break; - default: - b = this._left-s; - e = this._left; - break; - } - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); - } - drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); - } - break; - case 'yMidAxis': - // draw the grid line - if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) { - drawLine(this._left, pos, xp0, pos); - drawLine(xpn, pos, this._right, pos); - } - // draw the mark - if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - - b = xp0; - e = xp0 + s; - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); - } - drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); - - b = xpn - s; - e = xpn; - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); - } - drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); - } - break; - case 'x2axis': - // draw the grid line - if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) { - drawLine(pos, this._bottom, pos, this._top); - } - - // draw the mark - if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (m) { - case 'outside': - b = this._top-s; - e = this._top; - break; - case 'inside': - b = this._top; - e = this._top+s; - break; - case 'cross': - b = this._top-s; - e = this._top+s; - break; - default: - b = this._top-s; - e = this._top; - break; - } - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false}); - } - drawLine(pos, b, pos, e); - } - break; - case 'y2axis': - // draw the grid line - if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) { - drawLine(this._left, pos, this._right, pos); - } - - // draw the mark - if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) { - s = t.markSize; - m = t.mark; - var pos = Math.round(axis.u2p(t.value)) + 0.5; - switch (m) { - case 'outside': - b = this._right; - e = this._right+s; - break; - case 'inside': - b = this._right-s; - e = this._right; - break; - case 'cross': - b = this._right-s; - e = this._right+s; - break; - default: - b = this._right; - e = this._right+s; - break; - } - // draw the shadow - if (this.shadow) { - this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); - } - drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); - } - break; - default: - break; - } - } - } - t = null; - } - axis = null; - ticks = null; - } - - ctx.restore(); - - function drawLine(bx, by, ex, ey, opts) { - ctx.save(); - opts = opts || {}; - if (opts.lineWidth == null || opts.lineWidth != 0){ - $.extend(true, ctx, opts); - ctx.beginPath(); - ctx.moveTo(bx, by); - ctx.lineTo(ex, ey); - ctx.stroke(); - } - ctx.restore(); - } - - if (this.shadow) { - if (axes.yMidAxis.show) { - var points = [[this._left, this._bottom], [xp0, this._bottom]]; - this.renderer.shadowRenderer.draw(ctx, points); - var points = [[xpn, this._bottom], [this._right, this._bottom], [this._right, this._top]]; - this.renderer.shadowRenderer.draw(ctx, points); - var points = [[xp0, this._bottom], [xp0, this._top]]; - this.renderer.shadowRenderer.draw(ctx, points); - } - else { - var points = [[this._left, this._bottom], [this._right, this._bottom], [this._right, this._top]]; - this.renderer.shadowRenderer.draw(ctx, points); - } - } - // Now draw border around grid. Use axis border definitions. start at - // upper left and go clockwise. - if (this.borderWidth != 0 && this.drawBorder) { - if (axes.yMidAxis.show) { - drawLine (this._left, this._top, xp0, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth}); - drawLine (xpn, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth}); - drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth}); - drawLine (this._right, this._bottom, xpn, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth}); - drawLine (xp0, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth}); - drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth}); - drawLine (xp0, this._bottom, xp0, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth}); - drawLine (xpn, this._bottom, xpn, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth}); - } - else { - drawLine (this._left, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth}); - drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth}); - drawLine (this._right, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth}); - drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth}); - } - } - // ctx.lineWidth = this.borderWidth; - // ctx.strokeStyle = this.borderColor; - // ctx.strokeRect(this._left, this._top, this._width, this._height); - - ctx.restore(); - ctx = null; - axes = null; - }; -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js deleted file mode 100644 index ebf6ee44..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(a){a.jqplot.PyramidGridRenderer=function(){a.jqplot.CanvasGridRenderer.call(this)};a.jqplot.PyramidGridRenderer.prototype=new a.jqplot.CanvasGridRenderer();a.jqplot.PyramidGridRenderer.prototype.constructor=a.jqplot.PyramidGridRenderer;a.jqplot.CanvasGridRenderer.prototype.init=function(c){this._ctx;this.plotBands={show:false,color:"rgb(230, 219, 179)",axis:"y",start:null,interval:10};a.extend(true,this,c);var b={lineJoin:"miter",lineCap:"round",fill:false,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.shadowWidth,closePath:false,strokeStyle:this.shadowColor};this.renderer.shadowRenderer.init(b)};a.jqplot.PyramidGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var D=this._ctx;var G=this._axes;var q=G.xaxis.u2p;var J=G.yMidAxis.u2p;var l=G.xaxis.max/1000;var u=q(0);var f=q(l);var r=["xaxis","yaxis","x2axis","y2axis","yMidAxis"];D.save();D.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);D.fillStyle=this.backgroundColor||this.background;D.fillRect(this._left,this._top,this._width,this._height);if(this.plotBands.show){D.save();var c=this.plotBands;D.fillStyle=c.color;var d;var o,n,p,I;if(c.axis.charAt(0)==="x"){if(G.xaxis.show){d=G.xaxis}}else{if(c.axis.charAt(0)==="y"){if(G.yaxis.show){d=G.yaxis}else{if(G.y2axis.show){d=G.y2axis}else{if(G.yMidAxis.show){d=G.yMidAxis}}}}}if(d!==undefined){var g=c.start;if(g===null){g=d.min}for(var H=g;H<d.max;H+=2*c.interval){if(d.name.charAt(0)==="y"){o=this._left;if((H+c.interval)<d.max){n=d.series_u2p(H+c.interval)+this._top}else{n=d.series_u2p(d.max)+this._top}p=this._right-this._left;I=d.series_u2p(g)-d.series_u2p(g+c.interval);D.fillRect(o,n,p,I)}}}D.restore()}D.save();D.lineJoin="miter";D.lineCap="butt";D.lineWidth=this.gridLineWidth;D.strokeStyle=this.gridLineColor;var L,K,A,C;for(var H=5;H>0;H--){var O=r[H-1];var d=G[O];var M=d._ticks;var B=M.length;if(d.show){if(d.drawBaseline){var N={};if(d.baselineWidth!==null){N.lineWidth=d.baselineWidth}if(d.baselineColor!==null){N.strokeStyle=d.baselineColor}switch(O){case"xaxis":if(G.yMidAxis.show){z(this._left,this._bottom,u,this._bottom,N);z(f,this._bottom,this._right,this._bottom,N)}else{z(this._left,this._bottom,this._right,this._bottom,N)}break;case"yaxis":z(this._left,this._bottom,this._left,this._top,N);break;case"yMidAxis":z(u,this._bottom,u,this._top,N);z(f,this._bottom,f,this._top,N);break;case"x2axis":if(G.yMidAxis.show){z(this._left,this._top,u,this._top,N);z(f,this._top,this._right,this._top,N)}else{z(this._left,this._bottom,this._right,this._bottom,N)}break;case"y2axis":z(this._right,this._bottom,this._right,this._top,N);break}}for(var E=B;E>0;E--){var v=M[E-1];if(v.show){var k=Math.round(d.u2p(v.value))+0.5;switch(O){case"xaxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(k,this._top,k,this._bottom)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._bottom;K=this._bottom+A;break;case"inside":L=this._bottom-A;K=this._bottom;break;case"cross":L=this._bottom-A;K=this._bottom+A;break;default:L=this._bottom;K=this._bottom+A;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[k,L],[k,K]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}z(k,L,k,K)}break;case"yaxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._right,k,this._left,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._left-A;K=this._left;break;case"inside":L=this._left;K=this._left+A;break;case"cross":L=this._left-A;K=this._left+A;break;default:L=this._left-A;K=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;case"yMidAxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._left,k,u,k);z(f,k,this._right,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;L=u;K=u+A;if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor});L=f-A;K=f;if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;case"x2axis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(k,this._bottom,k,this._top)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._top-A;K=this._top;break;case"inside":L=this._top;K=this._top+A;break;case"cross":L=this._top-A;K=this._top+A;break;default:L=this._top-A;K=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[k,L],[k,K]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}z(k,L,k,K)}break;case"y2axis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._left,k,this._right,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._right;K=this._right+A;break;case"inside":L=this._right-A;K=this._right;break;case"cross":L=this._right-A;K=this._right+A;break;default:L=this._right;K=this._right+A;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;default:break}}}v=null}d=null;M=null}D.restore();function z(j,i,e,b,h){D.save();h=h||{};if(h.lineWidth==null||h.lineWidth!=0){a.extend(true,D,h);D.beginPath();D.moveTo(j,i);D.lineTo(e,b);D.stroke()}D.restore()}if(this.shadow){if(G.yMidAxis.show){var F=[[this._left,this._bottom],[u,this._bottom]];this.renderer.shadowRenderer.draw(D,F);var F=[[f,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(D,F);var F=[[u,this._bottom],[u,this._top]];this.renderer.shadowRenderer.draw(D,F)}else{var F=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(D,F)}}if(this.borderWidth!=0&&this.drawBorder){if(G.yMidAxis.show){z(this._left,this._top,u,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(f,this._top,this._right,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:G.y2axis.borderColor,lineWidth:G.y2axis.borderWidth});z(this._right,this._bottom,f,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(u,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth});z(u,this._bottom,u,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth});z(f,this._bottom,f,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth})}else{z(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:G.y2axis.borderColor,lineWidth:G.y2axis.borderWidth});z(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth})}}D.restore();D=null;G=null}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js deleted file mode 100644 index d4cc48c9..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js +++ /dev/null @@ -1,514 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - - // Need to ensure pyramid axis and grid renderers are loaded. - // You should load these with script tags in the html head, that is more efficient - // as the browser will cache the request. - // Note, have to block with synchronous request in order to execute bar renderer code. - if ($.jqplot.PyramidAxisRenderer === undefined) { - $.ajax({ - url: $.jqplot.pluginLocation + 'jqplot.pyramidAxisRenderer.js', - dataType: "script", - async: false - }); - } - - if ($.jqplot.PyramidGridRenderer === undefined) { - $.ajax({ - url: $.jqplot.pluginLocation + 'jqplot.pyramidGridRenderer.js', - dataType: "script", - async: false - }); - } - - $.jqplot.PyramidRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.PyramidRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.PyramidRenderer.prototype.constructor = $.jqplot.PyramidRenderer; - - // called with scope of a series - $.jqplot.PyramidRenderer.prototype.init = function(options, plot) { - options = options || {}; - this._type = 'pyramid'; - // Group: Properties - // - // prop: barPadding - this.barPadding = 10; - this.barWidth = null; - // prop: fill - // True to fill the bars. - this.fill = true; - // prop: highlightMouseOver - // True to highlight slice when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on a slice. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over a slice. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColors - // an array of colors to use when highlighting a slice. - this.highlightColors = []; - // prop highlightThreshold - // Expand the highlightable region in the x direction. - // E.g. a value of 3 will highlight a bar when the mouse is - // within 3 pixels of the bar in the x direction. - this.highlightThreshold = 2; - // prop: synchronizeHighlight - // Index of another series to highlight when this series is highlighted. - // null or false to not synchronize. - this.synchronizeHighlight = false; - // prop: offsetBars - // False will center bars on their y value. - // True will push bars up by 1/2 bar width to fill between their y values. - // If true, there needs to be 1 more tick than there are bars. - this.offsetBars = false; - - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (options.highlightMouseDown && options.highlightMouseOver == null) { - options.highlightMouseOver = false; - } - - this.side = 'right'; - - $.extend(true, this, options); - - // if (this.fill === false) { - // this.shadow = false; - // } - - if (this.side === 'left') { - this._highlightThreshold = [[-this.highlightThreshold, 0], [-this.highlightThreshold, 0], [0,0], [0,0]]; - } - - else { - this._highlightThreshold = [[0,0], [0,0], [this.highlightThreshold, 0], [this.highlightThreshold, 0]]; - } - - this.renderer.options = options; - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - // Array of actual data colors used for each data point. - this._dataColors = []; - this._barPoints = []; - this.fillAxis = 'y'; - this._primaryAxis = '_yaxis'; - this._xnudge = 0; - - // set the shape renderer options - var opts = {lineJoin:'miter', lineCap:'butt', fill:this.fill, fillRect:this.fill, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill, lineWidth: this.lineWidth}; - this.renderer.shapeRenderer.init(opts); - // set the shadow renderer options - var shadow_offset = options.shadowOffset; - // set the shadow renderer options - if (shadow_offset == null) { - // scale the shadowOffset to the width of the line. - if (this.lineWidth > 2.5) { - shadow_offset = 1.25 * (1 + (Math.atan((this.lineWidth/2.5))/0.785398163 - 1)*0.6); - // var shadow_offset = this.shadowOffset; - } - // for skinny lines, don't make such a big shadow. - else { - shadow_offset = 1.25 * Math.atan((this.lineWidth/2.5))/0.785398163; - } - } - var sopts = {lineJoin:'miter', lineCap:'butt', fill:this.fill, fillRect:this.fill, isarc:false, angle:this.shadowAngle, offset:shadow_offset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill, lineWidth: this.lineWidth}; - this.renderer.shadowRenderer.init(sopts); - - plot.postDrawHooks.addOnce(postPlotDraw); - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - - // if this is the left side of pyramid, set y values to negative. - if (this.side === 'left') { - for (var i=0, l=this.data.length; i<l; i++) { - this.data[i][1] = -Math.abs(this.data[i][1]); - } - } - }; - - // setGridData - // converts the user data values to grid coordinates and stores them - // in the gridData array. - // Called with scope of a series. - $.jqplot.PyramidRenderer.prototype.setGridData = function(plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var data = this._plotData; - var pdata = this._prevPlotData; - this.gridData = []; - this._prevGridData = []; - var l = data.length; - var adjust = false; - var i; - - // if any data values are < 0, consider this a negative series - for (i = 0; i < l; i++) { - if (data[i][1] < 0) { - this.side = 'left'; - } - } - - if (this._yaxis.name === 'yMidAxis' && this.side === 'right') { - this._xnudge = this._xaxis.max/2000.0; - adjust = true; - } - - for (i = 0; i < l; i++) { - // if not a line series or if no nulls in data, push the converted point onto the array. - if (data[i][0] != null && data[i][1] != null) { - this.gridData.push([xp(data[i][1]), yp(data[i][0])]); - } - // else if there is a null, preserve it. - else if (data[i][0] == null) { - this.gridData.push([xp(data[i][1]), null]); - } - else if (data[i][1] == null) { - this.gridData.push(null, [yp(data[i][0])]); - } - // finally, adjust x grid data if have to - if (data[i][1] === 0 && adjust) { - this.gridData[i][0] = xp(this._xnudge); - } - } - }; - - // makeGridData - // converts any arbitrary data values to grid coordinates and - // returns them. This method exists so that plugins can use a series' - // linerenderer to generate grid data points without overwriting the - // grid data associated with that series. - // Called with scope of a series. - $.jqplot.PyramidRenderer.prototype.makeGridData = function(data, plot) { - // recalculate the grid data - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var gd = []; - var l = data.length; - var adjust = false; - var i; - - // if any data values are < 0, consider this a negative series - for (i = 0; i < l; i++) { - if (data[i][1] < 0) { - this.side = 'left'; - } - } - - if (this._yaxis.name === 'yMidAxis' && this.side === 'right') { - this._xnudge = this._xaxis.max/2000.0; - adjust = true; - } - - for (i = 0; i < l; i++) { - // if not a line series or if no nulls in data, push the converted point onto the array. - if (data[i][0] != null && data[i][1] != null) { - gd.push([xp(data[i][1]), yp(data[i][0])]); - } - // else if there is a null, preserve it. - else if (data[i][0] == null) { - gd.push([xp(data[i][1]), null]); - } - else if (data[i][1] == null) { - gd.push([null, yp(data[i][0])]); - } - // finally, adjust x grid data if have to - if (data[i][1] === 0 && adjust) { - gd[i][0] = xp(this._xnudge); - } - } - - return gd; - }; - - $.jqplot.PyramidRenderer.prototype.setBarWidth = function() { - // need to know how many data values we have on the approprate axis and figure it out. - var i; - var nvals = 0; - var nseries = 0; - var paxis = this[this._primaryAxis]; - var s, series, pos; - nvals = paxis.max - paxis.min; - var nticks = paxis.numberTicks; - var nbins = (nticks-1)/2; - // so, now we have total number of axis values. - var temp = (this.barPadding === 0) ? 1.0 : 0; - if (paxis.name == 'xaxis' || paxis.name == 'x2axis') { - this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding + temp; - } - else { - if (this.fill) { - this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding + temp; - } - else { - this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals; - } - } - }; - - $.jqplot.PyramidRenderer.prototype.draw = function(ctx, gridData, options) { - var i; - // Ughhh, have to make a copy of options b/c it may be modified later. - var opts = $.extend({}, options); - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var pointx, pointy; - // clear out data colors. - this._dataColors = []; - this._barPoints = []; - - if (this.renderer.options.barWidth == null) { - this.renderer.setBarWidth.call(this); - } - - // var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this); - // var nvals = temp[0]; - // var nseries = temp[1]; - // var pos = temp[2]; - var points = [], - w, - h; - - // this._barNudge = 0; - - if (showLine) { - var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors); - var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors); - var negativeColor = negativeColors.get(this.index); - if (! this.useNegativeColors) { - negativeColor = opts.fillStyle; - } - var positiveColor = opts.fillStyle; - var base; - var xstart = this._xaxis.series_u2p(this._xnudge); - var ystart = this._yaxis.series_u2p(this._yaxis.min); - var yend = this._yaxis.series_u2p(this._yaxis.max); - var bw = this.barWidth; - var bw2 = bw/2.0; - var points = []; - var yadj = this.offsetBars ? bw2 : 0; - - for (var i=0, l=gridData.length; i<l; i++) { - if (this.data[i][0] == null) { - continue; - } - base = gridData[i][1]; - // not stacked and first series in stack - - if (this._plotData[i][1] < 0) { - if (this.varyBarColor && !this._stack) { - if (this.useNegativeColors) { - opts.fillStyle = negativeColors.next(); - } - else { - opts.fillStyle = positiveColors.next(); - } - } - } - else { - if (this.varyBarColor && !this._stack) { - opts.fillStyle = positiveColors.next(); - } - else { - opts.fillStyle = positiveColor; - } - } - - if (this.fill) { - - if (this._plotData[i][1] >= 0) { - // xstart = this._xaxis.series_u2p(this._xnudge); - w = gridData[i][0] - xstart; - h = this.barWidth; - points = [xstart, base - bw2 - yadj, w, h]; - } - else { - // xstart = this._xaxis.series_u2p(0); - w = xstart - gridData[i][0]; - h = this.barWidth; - points = [gridData[i][0], base - bw2 - yadj, w, h]; - } - - this._barPoints.push([[points[0], points[1] + h], [points[0], points[1]], [points[0] + w, points[1]], [points[0] + w, points[1] + h]]); - - if (shadow) { - this.renderer.shadowRenderer.draw(ctx, points); - } - var clr = opts.fillStyle || this.color; - this._dataColors.push(clr); - this.renderer.shapeRenderer.draw(ctx, points, opts); - } - - else { - if (i === 0) { - points =[[xstart, ystart], [gridData[i][0], ystart], [gridData[i][0], gridData[i][1] - bw2 - yadj]]; - } - - else if (i < l-1) { - points = points.concat([[gridData[i-1][0], gridData[i-1][1] - bw2 - yadj], [gridData[i][0], gridData[i][1] + bw2 - yadj], [gridData[i][0], gridData[i][1] - bw2 - yadj]]); - } - - // finally, draw the line - else { - points = points.concat([[gridData[i-1][0], gridData[i-1][1] - bw2 - yadj], [gridData[i][0], gridData[i][1] + bw2 - yadj], [gridData[i][0], yend], [xstart, yend]]); - - if (shadow) { - this.renderer.shadowRenderer.draw(ctx, points); - } - var clr = opts.fillStyle || this.color; - this._dataColors.push(clr); - this.renderer.shapeRenderer.draw(ctx, points, opts); - } - } - } - } - - if (this.highlightColors.length == 0) { - this.highlightColors = $.jqplot.computeHighlightColors(this._dataColors); - } - - else if (typeof(this.highlightColors) == 'string') { - this.highlightColors = []; - for (var i=0; i<this._dataColors.length; i++) { - this.highlightColors.push(this.highlightColors); - } - } - - }; - - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - options = options || {}; - options.axesDefaults = options.axesDefaults || {}; - options.grid = options.grid || {}; - options.legend = options.legend || {}; - options.seriesDefaults = options.seriesDefaults || {}; - // only set these if there is a pie series - var setopts = false; - if (options.seriesDefaults.renderer === $.jqplot.PyramidRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer === $.jqplot.PyramidRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.PyramidAxisRenderer; - options.grid.renderer = $.jqplot.PyramidGridRenderer; - options.seriesDefaults.pointLabels = {show: false}; - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.pyramidRenderer && this.plugins.pyramidRenderer.highlightCanvas) { - - this.plugins.pyramidRenderer.highlightCanvas.resetCanvas(); - this.plugins.pyramidRenderer.highlightCanvas = null; - } - - this.plugins.pyramidRenderer = {highlightedSeriesIndex:null}; - this.plugins.pyramidRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - - this.eventCanvas._elem.before(this.plugins.pyramidRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pyramidRenderer-highlight-canvas', this._plotDimensions, this)); - this.plugins.pyramidRenderer.highlightCanvas.setContext(); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); - } - - function highlight (plot, sidx, pidx, points) { - var s = plot.series[sidx]; - var canvas = plot.plugins.pyramidRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.pyramidRenderer.highlightedSeriesIndex = sidx; - var opts = {fillStyle: s.highlightColors[pidx], fillRect: false}; - s.renderer.shapeRenderer.draw(canvas._ctx, points, opts); - if (s.synchronizeHighlight !== false && plot.series.length >= s.synchronizeHighlight && s.synchronizeHighlight !== sidx) { - s = plot.series[s.synchronizeHighlight]; - opts = {fillStyle: s.highlightColors[pidx], fillRect: false}; - s.renderer.shapeRenderer.draw(canvas._ctx, s._barPoints[pidx], opts); - } - canvas = null; - } - - function unhighlight (plot) { - var canvas = plot.plugins.pyramidRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.pyramidRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - canvas = null; - } - - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pyramidRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - // Have to add hook here, becuase it needs called before series is inited. - $.jqplot.preInitHooks.push(preInit); - - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js deleted file mode 100644 index 968303cc..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(c){if(c.jqplot.PyramidAxisRenderer===undefined){c.ajax({url:c.jqplot.pluginLocation+"jqplot.pyramidAxisRenderer.js",dataType:"script",async:false})}if(c.jqplot.PyramidGridRenderer===undefined){c.ajax({url:c.jqplot.pluginLocation+"jqplot.pyramidGridRenderer.js",dataType:"script",async:false})}c.jqplot.PyramidRenderer=function(){c.jqplot.LineRenderer.call(this)};c.jqplot.PyramidRenderer.prototype=new c.jqplot.LineRenderer();c.jqplot.PyramidRenderer.prototype.constructor=c.jqplot.PyramidRenderer;c.jqplot.PyramidRenderer.prototype.init=function(j,o){j=j||{};this._type="pyramid";this.barPadding=10;this.barWidth=null;this.fill=true;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.highlightThreshold=2;this.synchronizeHighlight=false;this.offsetBars=false;if(j.highlightMouseDown&&j.highlightMouseOver==null){j.highlightMouseOver=false}this.side="right";c.extend(true,this,j);if(this.side==="left"){this._highlightThreshold=[[-this.highlightThreshold,0],[-this.highlightThreshold,0],[0,0],[0,0]]}else{this._highlightThreshold=[[0,0],[0,0],[this.highlightThreshold,0],[this.highlightThreshold,0]]}this.renderer.options=j;this._highlightedPoint=null;this._dataColors=[];this._barPoints=[];this.fillAxis="y";this._primaryAxis="_yaxis";this._xnudge=0;var n={lineJoin:"miter",lineCap:"butt",fill:this.fill,fillRect:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill,lineWidth:this.lineWidth};this.renderer.shapeRenderer.init(n);var m=j.shadowOffset;if(m==null){if(this.lineWidth>2.5){m=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{m=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var h={lineJoin:"miter",lineCap:"butt",fill:this.fill,fillRect:this.fill,isarc:false,angle:this.shadowAngle,offset:m,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill,lineWidth:this.lineWidth};this.renderer.shadowRenderer.init(h);o.postDrawHooks.addOnce(f);o.eventListenerHooks.addOnce("jqplotMouseMove",e);if(this.side==="left"){for(var k=0,g=this.data.length;k<g;k++){this.data[k][1]=-Math.abs(this.data[k][1])}}};c.jqplot.PyramidRenderer.prototype.setGridData=function(p){var j=this._xaxis.series_u2p;var o=this._yaxis.series_u2p;var k=this._plotData;var n=this._prevPlotData;this.gridData=[];this._prevGridData=[];var g=k.length;var m=false;var h;for(h=0;h<g;h++){if(k[h][1]<0){this.side="left"}}if(this._yaxis.name==="yMidAxis"&&this.side==="right"){this._xnudge=this._xaxis.max/2000;m=true}for(h=0;h<g;h++){if(k[h][0]!=null&&k[h][1]!=null){this.gridData.push([j(k[h][1]),o(k[h][0])])}else{if(k[h][0]==null){this.gridData.push([j(k[h][1]),null])}else{if(k[h][1]==null){this.gridData.push(null,[o(k[h][0])])}}}if(k[h][1]===0&&m){this.gridData[h][0]=j(this._xnudge)}}};c.jqplot.PyramidRenderer.prototype.makeGridData=function(m,p){var k=this._xaxis.series_u2p;var o=this._yaxis.series_u2p;var j=[];var g=m.length;var n=false;var h;for(h=0;h<g;h++){if(m[h][1]<0){this.side="left"}}if(this._yaxis.name==="yMidAxis"&&this.side==="right"){this._xnudge=this._xaxis.max/2000;n=true}for(h=0;h<g;h++){if(m[h][0]!=null&&m[h][1]!=null){j.push([k(m[h][1]),o(m[h][0])])}else{if(m[h][0]==null){j.push([k(m[h][1]),null])}else{if(m[h][1]==null){j.push([null,o(m[h][0])])}}}if(m[h][1]===0&&n){j[h][0]=k(this._xnudge)}}return j};c.jqplot.PyramidRenderer.prototype.setBarWidth=function(){var k;var g=0;var h=0;var m=this[this._primaryAxis];var q,l,o;g=m.max-m.min;var n=m.numberTicks;var j=(n-1)/2;var p=(this.barPadding===0)?1:0;if(m.name=="xaxis"||m.name=="x2axis"){this.barWidth=(m._offsets.max-m._offsets.min)/g-this.barPadding+p}else{if(this.fill){this.barWidth=(m._offsets.min-m._offsets.max)/g-this.barPadding+p}else{this.barWidth=(m._offsets.min-m._offsets.max)/g}}};c.jqplot.PyramidRenderer.prototype.draw=function(B,I,k){var E;var u=c.extend({},k);var p=(u.shadow!=undefined)?u.shadow:this.shadow;var K=(u.showLine!=undefined)?u.showLine:this.showLine;var C=(u.fill!=undefined)?u.fill:this.fill;var t=this._xaxis.series_u2p;var G=this._yaxis.series_u2p;var z,x;this._dataColors=[];this._barPoints=[];if(this.renderer.options.barWidth==null){this.renderer.setBarWidth.call(this)}var D=[],s,F;if(K){var q=new c.jqplot.ColorGenerator(this.negativeSeriesColors);var v=new c.jqplot.ColorGenerator(this.seriesColors);var J=q.get(this.index);if(!this.useNegativeColors){J=u.fillStyle}var o=u.fillStyle;var n;var L=this._xaxis.series_u2p(this._xnudge);var j=this._yaxis.series_u2p(this._yaxis.min);var m=this._yaxis.series_u2p(this._yaxis.max);var H=this.barWidth;var y=H/2;var D=[];var r=this.offsetBars?y:0;for(var E=0,A=I.length;E<A;E++){if(this.data[E][0]==null){continue}n=I[E][1];if(this._plotData[E][1]<0){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){u.fillStyle=q.next()}else{u.fillStyle=v.next()}}}else{if(this.varyBarColor&&!this._stack){u.fillStyle=v.next()}else{u.fillStyle=o}}if(this.fill){if(this._plotData[E][1]>=0){s=I[E][0]-L;F=this.barWidth;D=[L,n-y-r,s,F]}else{s=L-I[E][0];F=this.barWidth;D=[I[E][0],n-y-r,s,F]}this._barPoints.push([[D[0],D[1]+F],[D[0],D[1]],[D[0]+s,D[1]],[D[0]+s,D[1]+F]]);if(p){this.renderer.shadowRenderer.draw(B,D)}var g=u.fillStyle||this.color;this._dataColors.push(g);this.renderer.shapeRenderer.draw(B,D,u)}else{if(E===0){D=[[L,j],[I[E][0],j],[I[E][0],I[E][1]-y-r]]}else{if(E<A-1){D=D.concat([[I[E-1][0],I[E-1][1]-y-r],[I[E][0],I[E][1]+y-r],[I[E][0],I[E][1]-y-r]])}else{D=D.concat([[I[E-1][0],I[E-1][1]-y-r],[I[E][0],I[E][1]+y-r],[I[E][0],m],[L,m]]);if(p){this.renderer.shadowRenderer.draw(B,D)}var g=u.fillStyle||this.color;this._dataColors.push(g);this.renderer.shapeRenderer.draw(B,D,u)}}}}}if(this.highlightColors.length==0){this.highlightColors=c.jqplot.computeHighlightColors(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){this.highlightColors=[];for(var E=0;E<this._dataColors.length;E++){this.highlightColors.push(this.highlightColors)}}}};function b(l,k,h){h=h||{};h.axesDefaults=h.axesDefaults||{};h.grid=h.grid||{};h.legend=h.legend||{};h.seriesDefaults=h.seriesDefaults||{};var g=false;if(h.seriesDefaults.renderer===c.jqplot.PyramidRenderer){g=true}else{if(h.series){for(var j=0;j<h.series.length;j++){if(h.series[j].renderer===c.jqplot.PyramidRenderer){g=true}}}}if(g){h.axesDefaults.renderer=c.jqplot.PyramidAxisRenderer;h.grid.renderer=c.jqplot.PyramidGridRenderer;h.seriesDefaults.pointLabels={show:false}}}function f(){if(this.plugins.pyramidRenderer&&this.plugins.pyramidRenderer.highlightCanvas){this.plugins.pyramidRenderer.highlightCanvas.resetCanvas();this.plugins.pyramidRenderer.highlightCanvas=null}this.plugins.pyramidRenderer={highlightedSeriesIndex:null};this.plugins.pyramidRenderer.highlightCanvas=new c.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.pyramidRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pyramidRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.pyramidRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(g){d(g.data.plot)})}function a(m,l,j,i){var h=m.series[l];var g=m.plugins.pyramidRenderer.highlightCanvas;g._ctx.clearRect(0,0,g._ctx.canvas.width,g._ctx.canvas.height);h._highlightedPoint=j;m.plugins.pyramidRenderer.highlightedSeriesIndex=l;var k={fillStyle:h.highlightColors[j],fillRect:false};h.renderer.shapeRenderer.draw(g._ctx,i,k);if(h.synchronizeHighlight!==false&&m.series.length>=h.synchronizeHighlight&&h.synchronizeHighlight!==l){h=m.series[h.synchronizeHighlight];k={fillStyle:h.highlightColors[j],fillRect:false};h.renderer.shapeRenderer.draw(g._ctx,h._barPoints[j],k)}g=null}function d(j){var g=j.plugins.pyramidRenderer.highlightCanvas;g._ctx.clearRect(0,0,g._ctx.canvas.width,g._ctx.canvas.height);for(var h=0;h<j.series.length;h++){j.series[h]._highlightedPoint=null}j.plugins.pyramidRenderer.highlightedSeriesIndex=null;j.target.trigger("jqplotDataUnhighlight");g=null}function e(k,j,n,m,l){if(m){var i=[m.seriesIndex,m.pointIndex,m.data];var h=jQuery.Event("jqplotDataMouseOver");h.pageX=k.pageX;h.pageY=k.pageY;l.target.trigger(h,i);if(l.series[i[0]].highlightMouseOver&&!(i[0]==l.plugins.pyramidRenderer.highlightedSeriesIndex&&i[1]==l.series[i[0]]._highlightedPoint)){var g=jQuery.Event("jqplotDataHighlight");g.which=k.which;g.pageX=k.pageX;g.pageY=k.pageY;l.target.trigger(g,i);a(l,m.seriesIndex,m.pointIndex,m.points)}}else{if(m==null){d(l)}}}c.jqplot.preInitHooks.push(b)})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js deleted file mode 100644 index dc5c7554..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js +++ /dev/null @@ -1,223 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4 - * Revision: 1121 - * - * Copyright (c) 2009-2012 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - - /** - * Class: $.jqplot.Trendline - * Plugin which will automatically compute and draw trendlines for plotted data. - */ - $.jqplot.Trendline = function() { - // Group: Properties - - // prop: show - // Wether or not to show the trend line. - this.show = $.jqplot.config.enablePlugins; - // prop: color - // CSS color spec for the trend line. - // By default this wil be the same color as the primary line. - this.color = '#666666'; - // prop: renderer - // Renderer to use to draw the trend line. - // The data series that is plotted may not be rendered as a line. - // Therefore, we use our own line renderer here to draw a trend line. - this.renderer = new $.jqplot.LineRenderer(); - // prop: rendererOptions - // Options to pass to the line renderer. - // By default, markers are not shown on trend lines. - this.rendererOptions = {marker:{show:false}}; - // prop: label - // Label for the trend line to use in the legend. - this.label = ''; - // prop: type - // Either 'exponential', 'exp', or 'linear'. - this.type = 'linear'; - // prop: shadow - // true or false, wether or not to show the shadow. - this.shadow = true; - // prop: markerRenderer - // Renderer to use to draw markers on the line. - // I think this is wrong. - this.markerRenderer = {show:false}; - // prop: lineWidth - // Width of the trend line. - this.lineWidth = 1.5; - // prop: shadowAngle - // Angle of the shadow on the trend line. - this.shadowAngle = 45; - // prop: shadowOffset - // pixel offset for each stroke of the shadow. - this.shadowOffset = 1.0; - // prop: shadowAlpha - // Alpha transparency of the shadow. - this.shadowAlpha = 0.07; - // prop: shadowDepth - // number of strokes to make of the shadow. - this.shadowDepth = 3; - this.isTrendline = true; - - }; - - $.jqplot.postSeriesInitHooks.push(parseTrendLineOptions); - $.jqplot.postDrawSeriesHooks.push(drawTrendline); - $.jqplot.addLegendRowHooks.push(addTrendlineLegend); - - // called witin scope of the legend object - // current series passed in - // must return null or an object {label:label, color:color} - function addTrendlineLegend(series) { - var ret = null; - if (series.trendline && series.trendline.show) { - var lt = series.trendline.label.toString(); - if (lt) { - ret = {label:lt, color:series.trendline.color}; - } - } - return ret; - } - - // called within scope of a series - function parseTrendLineOptions (target, data, seriesDefaults, options, plot) { - if (this._type && (this._type === 'line' || this._type == 'bar')) { - this.trendline = new $.jqplot.Trendline(); - options = options || {}; - $.extend(true, this.trendline, {color:this.color}, seriesDefaults.trendline, options.trendline); - this.trendline.renderer.init.call(this.trendline, null); - } - } - - // called within scope of series object - function drawTrendline(sctx, options) { - // if we have options, merge trendline options in with precedence - options = $.extend(true, {}, this.trendline, options); - - if (this.trendline && options.show) { - var fit; - // this.renderer.setGridData.call(this); - var data = options.data || this.data; - fit = fitData(data, this.trendline.type); - var gridData = options.gridData || this.renderer.makeGridData.call(this, fit.data); - this.trendline.renderer.draw.call(this.trendline, sctx, gridData, {showLine:true, shadow:this.trendline.shadow}); - } - } - - function regression(x, y, typ) { - var type = (typ == null) ? 'linear' : typ; - var N = x.length; - var slope; - var intercept; - var SX = 0; - var SY = 0; - var SXX = 0; - var SXY = 0; - var SYY = 0; - var Y = []; - var X = []; - - if (type == 'linear') { - X = x; - Y = y; - } - else if (type == 'exp' || type == 'exponential') { - for ( var i=0; i<y.length; i++) { - // ignore points <= 0, log undefined. - if (y[i] <= 0) { - N--; - } - else { - X.push(x[i]); - Y.push(Math.log(y[i])); - } - } - } - - for ( var i = 0; i < N; i++) { - SX = SX + X[i]; - SY = SY + Y[i]; - SXY = SXY + X[i]* Y[i]; - SXX = SXX + X[i]* X[i]; - SYY = SYY + Y[i]* Y[i]; - } - - slope = (N*SXY - SX*SY)/(N*SXX - SX*SX); - intercept = (SY - slope*SX)/N; - - return [slope, intercept]; - } - - function linearRegression(X,Y) { - var ret; - ret = regression(X,Y,'linear'); - return [ret[0],ret[1]]; - } - - function expRegression(X,Y) { - var ret; - var x = X; - var y = Y; - ret = regression(x, y,'exp'); - var base = Math.exp(ret[0]); - var coeff = Math.exp(ret[1]); - return [base, coeff]; - } - - function fitData(data, typ) { - var type = (typ == null) ? 'linear' : typ; - var ret; - var res; - var x = []; - var y = []; - var ypred = []; - - for (i=0; i<data.length; i++){ - if (data[i] != null && data[i][0] != null && data[i][1] != null) { - x.push(data[i][0]); - y.push(data[i][1]); - } - } - - if (type == 'linear') { - ret = linearRegression(x,y); - for ( var i=0; i<x.length; i++){ - res = ret[0]*x[i] + ret[1]; - ypred.push([x[i], res]); - } - } - else if (type == 'exp' || type == 'exponential') { - ret = expRegression(x,y); - for ( var i=0; i<x.length; i++){ - res = ret[1]*Math.pow(ret[0],x[i]); - ypred.push([x[i], res]); - } - } - return {data: ypred, slope: ret[0], intercept: ret[1]}; - } - -})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js deleted file mode 100644 index 07105a4f..00000000 --- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.4r1121 - * - * Copyright (c) 2009-2011 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2011 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's origianl Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ -(function(f){f.jqplot.Trendline=function(){this.show=f.jqplot.config.enablePlugins;this.color="#666666";this.renderer=new f.jqplot.LineRenderer();this.rendererOptions={marker:{show:false}};this.label="";this.type="linear";this.shadow=true;this.markerRenderer={show:false};this.lineWidth=1.5;this.shadowAngle=45;this.shadowOffset=1;this.shadowAlpha=0.07;this.shadowDepth=3;this.isTrendline=true};f.jqplot.postSeriesInitHooks.push(e);f.jqplot.postDrawSeriesHooks.push(g);f.jqplot.addLegendRowHooks.push(a);function a(k){var j=null;if(k.trendline&&k.trendline.show){var i=k.trendline.label.toString();if(i){j={label:i,color:k.trendline.color}}}return j}function e(m,k,j,i,l){if(this._type&&(this._type==="line"||this._type=="bar")){this.trendline=new f.jqplot.Trendline();i=i||{};f.extend(true,this.trendline,{color:this.color},j.trendline,i.trendline);this.trendline.renderer.init.call(this.trendline,null)}}function g(m,i){i=f.extend(true,{},this.trendline,i);if(this.trendline&&i.show){var k;var l=i.data||this.data;k=c(l,this.trendline.type);var j=i.gridData||this.renderer.makeGridData.call(this,k.data);this.trendline.renderer.draw.call(this.trendline,m,j,{showLine:true,shadow:this.trendline.shadow})}}function b(w,v,n){var u=(n==null)?"linear":n;var s=w.length;var t;var z;var o=0;var m=0;var r=0;var q=0;var l=0;var j=[];var k=[];if(u=="linear"){k=w;j=v}else{if(u=="exp"||u=="exponential"){for(var p=0;p<v.length;p++){if(v[p]<=0){s--}else{k.push(w[p]);j.push(Math.log(v[p]))}}}}for(var p=0;p<s;p++){o=o+k[p];m=m+j[p];q=q+k[p]*j[p];r=r+k[p]*k[p];l=l+j[p]*j[p]}t=(s*q-o*m)/(s*r-o*o);z=(m-t*o)/s;return[t,z]}function h(k,j){var i;i=b(k,j,"linear");return[i[0],i[1]]}function d(o,m){var k;var i=o;var n=m;k=b(i,n,"exp");var l=Math.exp(k[0]);var j=Math.exp(k[1]);return[l,j]}function c(l,j){var p=(j==null)?"linear":j;var n;var o;var r=[];var q=[];var m=[];for(k=0;k<l.length;k++){if(l[k]!=null&&l[k][0]!=null&&l[k][1]!=null){r.push(l[k][0]);q.push(l[k][1])}}if(p=="linear"){n=h(r,q);for(var k=0;k<r.length;k++){o=n[0]*r[k]+n[1];m.push([r[k],o])}}else{if(p=="exp"||p=="exponential"){n=d(r,q);for(var k=0;k<r.length;k++){o=n[1]*Math.pow(n[0],r[k]);m.push([r[k],o])}}}return{data:m,slope:n[0],intercept:n[1]}}})(jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/jqplot/usage.txt b/wqflask/wqflask/static/packages/jqplot/usage.txt deleted file mode 100644 index 01f82d27..00000000 --- a/wqflask/wqflask/static/packages/jqplot/usage.txt +++ /dev/null @@ -1,126 +0,0 @@ -Title: jqPlot Usage - -Usage Documentation: - -Introduction: - -jqPlot is a jQuery plugin to generate pure client-side javascript charts in your web pages. - -The jqPlot home page is at <http://www.jqplot.com/>. - -The project page and downloads are at <http://www.bitbucket.org/cleonello/jqplot/>. - -Below are a few examples to demonstrate jqPlot usage. These plots are shown as static images. -Many more examples of dynamically rendered plots can be seen on the test and examples pages here: <../../tests/>. - -Include the Files: - -jqPlot requires jQuery (1.4+ required for certain features). jQuery is included in the distribution. -To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas -script for IE support in your web page. Note, excanvas is required only for IE versions below 9. IE 9 includes -native support for the canvas element and does not require excanvas: - -> <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]--> -> <script language="javascript" type="text/javascript" src="jquery.min.js"></script> -> <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script> -> <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" /> - -Add a plot container: - -Add a container (target) to your web page where you want your plot to show up. -Be sure to give your target a width and a height: - -> <div id="chartdiv" style="height:400px;width:300px; "></div> - -Create a plot: - -Then, create the actual plot by calling the -$.jqplot plugin with the id of your target and some data: - -> $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]); - -Which will produce a -chart like: - -(see images/basicline.png) - -Plot Options: - -You can customize the plot by passing options to the $.jqplot function. Options are described in -<jqPlot Options> in the jqPlotOptions.txt file. An example of options usage: - -> $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]], -> { title:'Exponential Line', -> axes:{yaxis:{min:-10, max:240}}, -> series:[{color:'#5FAB78'}] -> }); - -Which will produce -a plot like: - -(see images/basicoptions.png) - -Using Plugins: - -You can use jqPlot plugins (that is, plugins to the jqPlot plugin) by including them in your html -after you include the jqPlot plugin. Here is how to include the log axis plugin: - -> <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" /> -> <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]--> -> <script language="javascript" type="text/javascript" src="jquery.min.js"></script> -> <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script> -> <script language="javascript" type="text/javascript" src="jqplot.logAxisRenderer.js"></script> - -Important note: For jqplot builds r529 and above (0.9.7r529 and higher), you must explicitly -enable plugins via either the { show: true } plugin option to the plot or by using -the $.jqplot.config.enablePlugins = true; config options set on the page before plot creation. -Only plugins that can be immediately active upon loading are affected. This includes -non-renderer plugins like cursor, dragable, highlighter, and trendline. - -Here is a the same $.jqplot call -but with a log y axis: - -> $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]], -> { title:'Exponential Line', -> axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer}}, -> series:[{color:'#5FAB78'}] -> }); - -Which produces -a plot like: - -(see images/basiclogaxis.png) - -You can further customize with options specific -to the log axis plugin: - -> $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]], -> { title:'Exponential Line', -> axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer, tickDistribution:'power'}}, -> series:[{color:'#5FAB78'}] -> }); - -Which makes a -plot like: - -(see images/basiclogoptions.png) - -For a full list of options, see <jqPlot Options> in the jqPlotOptions.txt file. - -You can add as many plugins as you wish. Order is generally not important. -Some plugins, like the highlighter plugin which highlights data points near the -mouse, don't need any extra options or setup to function. Highlighter does have -additional options which the user can set. - -Other plugins, the barRenderer for example, provide functionality the must be specified -in the chart options object. To render a series as a bar graph with the bar renderer, -you would first include the plugin after jqPlot: - -> <script language="javascript" type="text/javascript" src="plugins/jqplot.barRenderer.min.js"></script> - -Then you would create -a chart like: - -> $.jqplot('chartdiv', [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]}); - -Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series. \ No newline at end of file diff --git a/wqflask/wqflask/templates/corr_scatterplot.html b/wqflask/wqflask/templates/corr_scatterplot.html index bb509270..87588534 100644 --- a/wqflask/wqflask/templates/corr_scatterplot.html +++ b/wqflask/wqflask/templates/corr_scatterplot.html @@ -1,7 +1,6 @@ {% extends "base.html" %} {% block css %} - <link rel="stylesheet" type="text/css" href="/static/packages/jqplot/jquery.jqplot.min.css" /> <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" /> <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" /> <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" /> diff --git a/wqflask/wqflask/templates/correlation_matrix.html b/wqflask/wqflask/templates/correlation_matrix.html index d27788a8..c4668e05 100644 --- a/wqflask/wqflask/templates/correlation_matrix.html +++ b/wqflask/wqflask/templates/correlation_matrix.html @@ -1,6 +1,5 @@ {% extends "base.html" %} {% block css %} - <link rel="stylesheet" type="text/css" href="/static/packages/jqplot/jquery.jqplot.min.css" /> <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" /> <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" /> <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" /> -- cgit v1.2.3 From ee775b36b99e91930f3ad72a147545a76105cd9e Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 08:03:41 +0000 Subject: js: rm ckeditor - need to replace --- MANIFEST.in | 84 -- .../wqflask/static/packages/ckeditor/CHANGES.md | 671 ----------- .../wqflask/static/packages/ckeditor/LICENSE.md | 1264 -------------------- wqflask/wqflask/static/packages/ckeditor/README.md | 39 - .../static/packages/ckeditor/adapters/jquery.js | 10 - .../static/packages/ckeditor/build-config.js | 179 --- .../wqflask/static/packages/ckeditor/ckeditor.js | 1013 ---------------- wqflask/wqflask/static/packages/ckeditor/config.js | 10 - .../wqflask/static/packages/ckeditor/contents.css | 134 --- .../wqflask/static/packages/ckeditor/lang/af.js | 5 - .../wqflask/static/packages/ckeditor/lang/ar.js | 5 - .../wqflask/static/packages/ckeditor/lang/bg.js | 5 - .../wqflask/static/packages/ckeditor/lang/bn.js | 5 - .../wqflask/static/packages/ckeditor/lang/bs.js | 5 - .../wqflask/static/packages/ckeditor/lang/ca.js | 5 - .../wqflask/static/packages/ckeditor/lang/cs.js | 5 - .../wqflask/static/packages/ckeditor/lang/cy.js | 5 - .../wqflask/static/packages/ckeditor/lang/da.js | 5 - .../wqflask/static/packages/ckeditor/lang/de.js | 5 - .../wqflask/static/packages/ckeditor/lang/el.js | 5 - .../wqflask/static/packages/ckeditor/lang/en-au.js | 5 - .../wqflask/static/packages/ckeditor/lang/en-ca.js | 5 - .../wqflask/static/packages/ckeditor/lang/en-gb.js | 5 - .../wqflask/static/packages/ckeditor/lang/en.js | 5 - .../wqflask/static/packages/ckeditor/lang/eo.js | 5 - .../wqflask/static/packages/ckeditor/lang/es.js | 5 - .../wqflask/static/packages/ckeditor/lang/et.js | 5 - .../wqflask/static/packages/ckeditor/lang/eu.js | 5 - .../wqflask/static/packages/ckeditor/lang/fa.js | 5 - .../wqflask/static/packages/ckeditor/lang/fi.js | 5 - .../wqflask/static/packages/ckeditor/lang/fo.js | 5 - .../wqflask/static/packages/ckeditor/lang/fr-ca.js | 5 - .../wqflask/static/packages/ckeditor/lang/fr.js | 5 - .../wqflask/static/packages/ckeditor/lang/gl.js | 5 - .../wqflask/static/packages/ckeditor/lang/gu.js | 5 - .../wqflask/static/packages/ckeditor/lang/he.js | 5 - .../wqflask/static/packages/ckeditor/lang/hi.js | 5 - .../wqflask/static/packages/ckeditor/lang/hr.js | 5 - .../wqflask/static/packages/ckeditor/lang/hu.js | 5 - .../wqflask/static/packages/ckeditor/lang/id.js | 5 - .../wqflask/static/packages/ckeditor/lang/is.js | 5 - .../wqflask/static/packages/ckeditor/lang/it.js | 5 - .../wqflask/static/packages/ckeditor/lang/ja.js | 5 - .../wqflask/static/packages/ckeditor/lang/ka.js | 5 - .../wqflask/static/packages/ckeditor/lang/km.js | 5 - .../wqflask/static/packages/ckeditor/lang/ko.js | 5 - .../wqflask/static/packages/ckeditor/lang/ku.js | 5 - .../wqflask/static/packages/ckeditor/lang/lt.js | 5 - .../wqflask/static/packages/ckeditor/lang/lv.js | 5 - .../wqflask/static/packages/ckeditor/lang/mk.js | 5 - .../wqflask/static/packages/ckeditor/lang/mn.js | 5 - .../wqflask/static/packages/ckeditor/lang/ms.js | 5 - .../wqflask/static/packages/ckeditor/lang/nb.js | 5 - .../wqflask/static/packages/ckeditor/lang/nl.js | 5 - .../wqflask/static/packages/ckeditor/lang/no.js | 5 - .../wqflask/static/packages/ckeditor/lang/pl.js | 5 - .../wqflask/static/packages/ckeditor/lang/pt-br.js | 5 - .../wqflask/static/packages/ckeditor/lang/pt.js | 5 - .../wqflask/static/packages/ckeditor/lang/ro.js | 5 - .../wqflask/static/packages/ckeditor/lang/ru.js | 5 - .../wqflask/static/packages/ckeditor/lang/si.js | 5 - .../wqflask/static/packages/ckeditor/lang/sk.js | 5 - .../wqflask/static/packages/ckeditor/lang/sl.js | 5 - .../wqflask/static/packages/ckeditor/lang/sq.js | 5 - .../static/packages/ckeditor/lang/sr-latn.js | 5 - .../wqflask/static/packages/ckeditor/lang/sr.js | 5 - .../wqflask/static/packages/ckeditor/lang/sv.js | 5 - .../wqflask/static/packages/ckeditor/lang/th.js | 5 - .../wqflask/static/packages/ckeditor/lang/tr.js | 5 - .../wqflask/static/packages/ckeditor/lang/tt.js | 5 - .../wqflask/static/packages/ckeditor/lang/ug.js | 5 - .../wqflask/static/packages/ckeditor/lang/uk.js | 5 - .../wqflask/static/packages/ckeditor/lang/vi.js | 5 - .../wqflask/static/packages/ckeditor/lang/zh-cn.js | 5 - .../wqflask/static/packages/ckeditor/lang/zh.js | 5 - .../ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js | 10 - .../a11yhelp/dialogs/lang/_translationstatus.txt | 25 - .../ckeditor/plugins/a11yhelp/dialogs/lang/ar.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/bg.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/ca.js | 13 - .../ckeditor/plugins/a11yhelp/dialogs/lang/cs.js | 13 - .../ckeditor/plugins/a11yhelp/dialogs/lang/cy.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/da.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/de.js | 13 - .../ckeditor/plugins/a11yhelp/dialogs/lang/el.js | 13 - .../plugins/a11yhelp/dialogs/lang/en-gb.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/en.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/eo.js | 13 - .../ckeditor/plugins/a11yhelp/dialogs/lang/es.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/et.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/fa.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/fi.js | 12 - .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/fr.js | 13 - .../ckeditor/plugins/a11yhelp/dialogs/lang/gl.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/gu.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/he.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/hi.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/hr.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/hu.js | 13 - .../ckeditor/plugins/a11yhelp/dialogs/lang/id.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/it.js | 13 - .../ckeditor/plugins/a11yhelp/dialogs/lang/ja.js | 9 - .../ckeditor/plugins/a11yhelp/dialogs/lang/km.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/ko.js | 10 - .../ckeditor/plugins/a11yhelp/dialogs/lang/ku.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/lt.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/lv.js | 13 - .../ckeditor/plugins/a11yhelp/dialogs/lang/mk.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/mn.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/nb.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/nl.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/no.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/pl.js | 13 - .../plugins/a11yhelp/dialogs/lang/pt-br.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/pt.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/ro.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/ru.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/si.js | 10 - .../ckeditor/plugins/a11yhelp/dialogs/lang/sk.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/sl.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/sq.js | 11 - .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/sr.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/sv.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/th.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/tr.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/tt.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/ug.js | 11 - .../ckeditor/plugins/a11yhelp/dialogs/lang/uk.js | 12 - .../ckeditor/plugins/a11yhelp/dialogs/lang/vi.js | 11 - .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 9 - .../ckeditor/plugins/a11yhelp/dialogs/lang/zh.js | 9 - .../ckeditor/plugins/about/dialogs/about.js | 7 - .../plugins/about/dialogs/hidpi/logo_ckeditor.png | Bin 13339 -> 0 bytes .../plugins/about/dialogs/logo_ckeditor.png | Bin 6757 -> 0 bytes .../ckeditor/plugins/clipboard/dialogs/paste.js | 11 - .../plugins/colordialog/dialogs/colordialog.js | 13 - .../ckeditor/plugins/dialog/dialogDefinition.js | 4 - .../packages/ckeditor/plugins/div/dialogs/div.js | 9 - .../packages/ckeditor/plugins/find/dialogs/find.js | 24 - .../ckeditor/plugins/flash/dialogs/flash.js | 24 - .../ckeditor/plugins/flash/images/placeholder.png | Bin 256 -> 0 bytes .../ckeditor/plugins/forms/dialogs/button.js | 8 - .../ckeditor/plugins/forms/dialogs/checkbox.js | 8 - .../ckeditor/plugins/forms/dialogs/form.js | 8 - .../ckeditor/plugins/forms/dialogs/hiddenfield.js | 8 - .../ckeditor/plugins/forms/dialogs/radio.js | 8 - .../ckeditor/plugins/forms/dialogs/select.js | 20 - .../ckeditor/plugins/forms/dialogs/textarea.js | 8 - .../ckeditor/plugins/forms/dialogs/textfield.js | 10 - .../ckeditor/plugins/forms/images/hiddenfield.gif | Bin 105 -> 0 bytes .../static/packages/ckeditor/plugins/icons.png | Bin 20833 -> 0 bytes .../packages/ckeditor/plugins/icons_hidpi.png | Bin 67753 -> 0 bytes .../ckeditor/plugins/iframe/dialogs/iframe.js | 10 - .../ckeditor/plugins/iframe/images/placeholder.png | Bin 265 -> 0 bytes .../ckeditor/plugins/image/dialogs/image.js | 43 - .../ckeditor/plugins/image/images/noimage.png | Bin 2115 -> 0 bytes .../ckeditor/plugins/link/dialogs/anchor.js | 7 - .../packages/ckeditor/plugins/link/dialogs/link.js | 26 - .../ckeditor/plugins/link/images/anchor.png | Bin 589 -> 0 bytes .../ckeditor/plugins/link/images/hidpi/anchor.png | Bin 1379 -> 0 bytes .../plugins/liststyle/dialogs/liststyle.js | 10 - .../plugins/magicline/images/hidpi/icon-rtl.png | Bin 176 -> 0 bytes .../plugins/magicline/images/hidpi/icon.png | Bin 199 -> 0 bytes .../ckeditor/plugins/magicline/images/icon-rtl.png | Bin 138 -> 0 bytes .../ckeditor/plugins/magicline/images/icon.png | Bin 133 -> 0 bytes .../plugins/pagebreak/images/pagebreak.gif | Bin 54 -> 0 bytes .../plugins/pastefromword/filter/default.js | 31 - .../packages/ckeditor/plugins/preview/preview.html | 13 - .../packages/ckeditor/plugins/scayt/LICENSE.md | 28 - .../packages/ckeditor/plugins/scayt/README.md | 25 - .../ckeditor/plugins/scayt/dialogs/options.js | 17 - .../ckeditor/plugins/scayt/dialogs/toolbar.css | 71 -- .../plugins/showblocks/images/block_address.png | Bin 152 -> 0 bytes .../plugins/showblocks/images/block_blockquote.png | Bin 154 -> 0 bytes .../plugins/showblocks/images/block_div.png | Bin 127 -> 0 bytes .../plugins/showblocks/images/block_h1.png | Bin 120 -> 0 bytes .../plugins/showblocks/images/block_h2.png | Bin 127 -> 0 bytes .../plugins/showblocks/images/block_h3.png | Bin 123 -> 0 bytes .../plugins/showblocks/images/block_h4.png | Bin 123 -> 0 bytes .../plugins/showblocks/images/block_h5.png | Bin 126 -> 0 bytes .../plugins/showblocks/images/block_h6.png | Bin 123 -> 0 bytes .../ckeditor/plugins/showblocks/images/block_p.png | Bin 115 -> 0 bytes .../plugins/showblocks/images/block_pre.png | Bin 128 -> 0 bytes .../ckeditor/plugins/smiley/dialogs/smiley.js | 10 - .../ckeditor/plugins/smiley/images/angel_smile.gif | Bin 1245 -> 0 bytes .../ckeditor/plugins/smiley/images/angel_smile.png | Bin 1172 -> 0 bytes .../ckeditor/plugins/smiley/images/angry_smile.gif | Bin 1219 -> 0 bytes .../ckeditor/plugins/smiley/images/angry_smile.png | Bin 1220 -> 0 bytes .../plugins/smiley/images/broken_heart.gif | Bin 732 -> 0 bytes .../plugins/smiley/images/broken_heart.png | Bin 1139 -> 0 bytes .../plugins/smiley/images/confused_smile.gif | Bin 1202 -> 0 bytes .../plugins/smiley/images/confused_smile.png | Bin 1101 -> 0 bytes .../ckeditor/plugins/smiley/images/cry_smile.gif | Bin 795 -> 0 bytes .../ckeditor/plugins/smiley/images/cry_smile.png | Bin 1214 -> 0 bytes .../ckeditor/plugins/smiley/images/devil_smile.gif | Bin 1239 -> 0 bytes .../ckeditor/plugins/smiley/images/devil_smile.png | Bin 1220 -> 0 bytes .../plugins/smiley/images/embaressed_smile.gif | Bin 786 -> 0 bytes .../plugins/smiley/images/embarrassed_smile.gif | Bin 786 -> 0 bytes .../plugins/smiley/images/embarrassed_smile.png | Bin 1145 -> 0 bytes .../ckeditor/plugins/smiley/images/envelope.gif | Bin 506 -> 0 bytes .../ckeditor/plugins/smiley/images/envelope.png | Bin 760 -> 0 bytes .../ckeditor/plugins/smiley/images/heart.gif | Bin 692 -> 0 bytes .../ckeditor/plugins/smiley/images/heart.png | Bin 999 -> 0 bytes .../ckeditor/plugins/smiley/images/kiss.gif | Bin 683 -> 0 bytes .../ckeditor/plugins/smiley/images/kiss.png | Bin 1003 -> 0 bytes .../ckeditor/plugins/smiley/images/lightbulb.gif | Bin 660 -> 0 bytes .../ckeditor/plugins/smiley/images/lightbulb.png | Bin 919 -> 0 bytes .../ckeditor/plugins/smiley/images/omg_smile.gif | Bin 820 -> 0 bytes .../ckeditor/plugins/smiley/images/omg_smile.png | Bin 1122 -> 0 bytes .../plugins/smiley/images/regular_smile.gif | Bin 1209 -> 0 bytes .../plugins/smiley/images/regular_smile.png | Bin 1084 -> 0 bytes .../ckeditor/plugins/smiley/images/sad_smile.gif | Bin 782 -> 0 bytes .../ckeditor/plugins/smiley/images/sad_smile.png | Bin 1115 -> 0 bytes .../plugins/smiley/images/shades_smile.gif | Bin 1231 -> 0 bytes .../plugins/smiley/images/shades_smile.png | Bin 1204 -> 0 bytes .../ckeditor/plugins/smiley/images/teeth_smile.gif | Bin 1201 -> 0 bytes .../ckeditor/plugins/smiley/images/teeth_smile.png | Bin 1183 -> 0 bytes .../ckeditor/plugins/smiley/images/thumbs_down.gif | Bin 715 -> 0 bytes .../ckeditor/plugins/smiley/images/thumbs_down.png | Bin 985 -> 0 bytes .../ckeditor/plugins/smiley/images/thumbs_up.gif | Bin 714 -> 0 bytes .../ckeditor/plugins/smiley/images/thumbs_up.png | Bin 959 -> 0 bytes .../plugins/smiley/images/tongue_smile.gif | Bin 1210 -> 0 bytes .../plugins/smiley/images/tongue_smile.png | Bin 1132 -> 0 bytes .../plugins/smiley/images/tounge_smile.gif | Bin 1210 -> 0 bytes .../smiley/images/whatchutalkingabout_smile.gif | Bin 775 -> 0 bytes .../smiley/images/whatchutalkingabout_smile.png | Bin 1039 -> 0 bytes .../ckeditor/plugins/smiley/images/wink_smile.gif | Bin 1202 -> 0 bytes .../ckeditor/plugins/smiley/images/wink_smile.png | Bin 1114 -> 0 bytes .../dialogs/lang/_translationstatus.txt | 20 - .../plugins/specialchar/dialogs/lang/ar.js | 13 - .../plugins/specialchar/dialogs/lang/bg.js | 13 - .../plugins/specialchar/dialogs/lang/ca.js | 14 - .../plugins/specialchar/dialogs/lang/cs.js | 13 - .../plugins/specialchar/dialogs/lang/cy.js | 14 - .../plugins/specialchar/dialogs/lang/de.js | 13 - .../plugins/specialchar/dialogs/lang/el.js | 13 - .../plugins/specialchar/dialogs/lang/en-gb.js | 13 - .../plugins/specialchar/dialogs/lang/en.js | 13 - .../plugins/specialchar/dialogs/lang/eo.js | 12 - .../plugins/specialchar/dialogs/lang/es.js | 13 - .../plugins/specialchar/dialogs/lang/et.js | 13 - .../plugins/specialchar/dialogs/lang/fa.js | 12 - .../plugins/specialchar/dialogs/lang/fi.js | 13 - .../plugins/specialchar/dialogs/lang/fr-ca.js | 10 - .../plugins/specialchar/dialogs/lang/fr.js | 11 - .../plugins/specialchar/dialogs/lang/gl.js | 13 - .../plugins/specialchar/dialogs/lang/he.js | 12 - .../plugins/specialchar/dialogs/lang/hr.js | 13 - .../plugins/specialchar/dialogs/lang/hu.js | 12 - .../plugins/specialchar/dialogs/lang/id.js | 13 - .../plugins/specialchar/dialogs/lang/it.js | 14 - .../plugins/specialchar/dialogs/lang/ja.js | 9 - .../plugins/specialchar/dialogs/lang/km.js | 13 - .../plugins/specialchar/dialogs/lang/ku.js | 13 - .../plugins/specialchar/dialogs/lang/lv.js | 13 - .../plugins/specialchar/dialogs/lang/nb.js | 11 - .../plugins/specialchar/dialogs/lang/nl.js | 13 - .../plugins/specialchar/dialogs/lang/no.js | 11 - .../plugins/specialchar/dialogs/lang/pl.js | 12 - .../plugins/specialchar/dialogs/lang/pt-br.js | 11 - .../plugins/specialchar/dialogs/lang/pt.js | 13 - .../plugins/specialchar/dialogs/lang/ru.js | 13 - .../plugins/specialchar/dialogs/lang/si.js | 13 - .../plugins/specialchar/dialogs/lang/sk.js | 13 - .../plugins/specialchar/dialogs/lang/sl.js | 12 - .../plugins/specialchar/dialogs/lang/sq.js | 13 - .../plugins/specialchar/dialogs/lang/sv.js | 11 - .../plugins/specialchar/dialogs/lang/th.js | 13 - .../plugins/specialchar/dialogs/lang/tr.js | 12 - .../plugins/specialchar/dialogs/lang/tt.js | 13 - .../plugins/specialchar/dialogs/lang/ug.js | 13 - .../plugins/specialchar/dialogs/lang/uk.js | 12 - .../plugins/specialchar/dialogs/lang/vi.js | 14 - .../plugins/specialchar/dialogs/lang/zh-cn.js | 9 - .../plugins/specialchar/dialogs/lang/zh.js | 12 - .../plugins/specialchar/dialogs/specialchar.js | 14 - .../ckeditor/plugins/table/dialogs/table.js | 21 - .../plugins/tabletools/dialogs/tableCell.js | 17 - .../plugins/templates/dialogs/templates.css | 84 -- .../plugins/templates/dialogs/templates.js | 10 - .../plugins/templates/templates/default.js | 6 - .../templates/templates/images/template1.gif | Bin 375 -> 0 bytes .../templates/templates/images/template2.gif | Bin 333 -> 0 bytes .../templates/templates/images/template3.gif | Bin 422 -> 0 bytes .../packages/ckeditor/plugins/wsc/LICENSE.md | 28 - .../static/packages/ckeditor/plugins/wsc/README.md | 25 - .../ckeditor/plugins/wsc/dialogs/ciframe.html | 66 - .../ckeditor/plugins/wsc/dialogs/tmpFrameset.html | 52 - .../packages/ckeditor/plugins/wsc/dialogs/wsc.css | 82 -- .../packages/ckeditor/plugins/wsc/dialogs/wsc.js | 74 -- .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 11 - .../static/packages/ckeditor/samples/ajax.html | 82 -- .../static/packages/ckeditor/samples/api.html | 207 ---- .../static/packages/ckeditor/samples/appendto.html | 56 - .../ckeditor/samples/assets/inlineall/logo.png | Bin 4283 -> 0 bytes .../samples/assets/outputxhtml/outputxhtml.css | 204 ---- .../ckeditor/samples/assets/posteddata.php | 59 - .../packages/ckeditor/samples/assets/sample.jpg | Bin 14449 -> 0 bytes .../samples/assets/uilanguages/languages.js | 7 - .../packages/ckeditor/samples/datafiltering.html | 401 ------- .../packages/ckeditor/samples/divreplace.html | 141 --- .../static/packages/ckeditor/samples/index.html | 128 -- .../packages/ckeditor/samples/inlineall.html | 311 ----- .../packages/ckeditor/samples/inlinebycode.html | 121 -- .../packages/ckeditor/samples/inlinetextarea.html | 110 -- .../static/packages/ckeditor/samples/jquery.html | 100 -- .../samples/plugins/dialog/assets/my_dialog.js | 48 - .../ckeditor/samples/plugins/dialog/dialog.html | 187 --- .../samples/plugins/enterkey/enterkey.html | 103 -- .../assets/outputforflash/outputforflash.fla | Bin 85504 -> 0 bytes .../assets/outputforflash/outputforflash.swf | Bin 15571 -> 0 bytes .../htmlwriter/assets/outputforflash/swfobject.js | 18 - .../samples/plugins/htmlwriter/outputforflash.html | 280 ----- .../samples/plugins/htmlwriter/outputhtml.html | 221 ---- .../samples/plugins/magicline/magicline.html | 206 ---- .../ckeditor/samples/plugins/toolbar/toolbar.html | 232 ---- .../samples/plugins/wysiwygarea/fullpage.html | 77 -- .../static/packages/ckeditor/samples/readonly.html | 73 -- .../packages/ckeditor/samples/replacebyclass.html | 57 - .../packages/ckeditor/samples/replacebycode.html | 56 - .../static/packages/ckeditor/samples/sample.css | 365 ------ .../static/packages/ckeditor/samples/sample.js | 50 - .../ckeditor/samples/sample_posteddata.php | 16 - .../static/packages/ckeditor/samples/tabindex.html | 75 -- .../static/packages/ckeditor/samples/uicolor.html | 69 -- .../packages/ckeditor/samples/uilanguages.html | 119 -- .../packages/ckeditor/samples/xhtmlstyle.html | 231 ---- .../packages/ckeditor/skins/moono/dialog.css | 5 - .../packages/ckeditor/skins/moono/dialog_ie.css | 5 - .../packages/ckeditor/skins/moono/dialog_ie7.css | 5 - .../packages/ckeditor/skins/moono/dialog_ie8.css | 5 - .../ckeditor/skins/moono/dialog_iequirks.css | 5 - .../packages/ckeditor/skins/moono/editor.css | 5 - .../packages/ckeditor/skins/moono/editor_gecko.css | 5 - .../packages/ckeditor/skins/moono/editor_ie.css | 5 - .../packages/ckeditor/skins/moono/editor_ie7.css | 5 - .../packages/ckeditor/skins/moono/editor_ie8.css | 5 - .../ckeditor/skins/moono/editor_iequirks.css | 5 - .../static/packages/ckeditor/skins/moono/icons.png | Bin 20833 -> 0 bytes .../packages/ckeditor/skins/moono/icons_hidpi.png | Bin 67753 -> 0 bytes .../packages/ckeditor/skins/moono/images/arrow.png | Bin 191 -> 0 bytes .../packages/ckeditor/skins/moono/images/close.png | Bin 468 -> 0 bytes .../ckeditor/skins/moono/images/hidpi/close.png | Bin 1271 -> 0 bytes .../skins/moono/images/hidpi/lock-open.png | Bin 1329 -> 0 bytes .../ckeditor/skins/moono/images/hidpi/lock.png | Bin 1299 -> 0 bytes .../ckeditor/skins/moono/images/hidpi/refresh.png | Bin 1842 -> 0 bytes .../ckeditor/skins/moono/images/lock-open.png | Bin 349 -> 0 bytes .../packages/ckeditor/skins/moono/images/lock.png | Bin 475 -> 0 bytes .../ckeditor/skins/moono/images/refresh.png | Bin 422 -> 0 bytes .../static/packages/ckeditor/skins/moono/readme.md | 51 - wqflask/wqflask/static/packages/ckeditor/styles.js | 111 -- 353 files changed, 10582 deletions(-) delete mode 100644 wqflask/wqflask/static/packages/ckeditor/CHANGES.md delete mode 100644 wqflask/wqflask/static/packages/ckeditor/LICENSE.md delete mode 100644 wqflask/wqflask/static/packages/ckeditor/README.md delete mode 100644 wqflask/wqflask/static/packages/ckeditor/adapters/jquery.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/build-config.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/ckeditor.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/config.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/contents.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/af.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ar.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/bg.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/bn.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/bs.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ca.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/cs.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/cy.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/da.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/de.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/el.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/en-au.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/en-ca.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/en-gb.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/en.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/eo.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/es.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/et.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/eu.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/fa.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/fi.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/fo.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/fr-ca.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/fr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/gl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/gu.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/he.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/hi.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/hr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/hu.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/id.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/is.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/it.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ja.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ka.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/km.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ko.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ku.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/lt.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/lv.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/mk.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/mn.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ms.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/nb.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/nl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/no.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/pl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/pt-br.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/pt.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ro.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ru.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/si.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/sk.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/sl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/sq.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/sr-latn.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/sr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/sv.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/th.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/tr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/tt.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/ug.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/uk.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/vi.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/zh-cn.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/lang/zh.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/da.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/de.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/el.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/es.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/et.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/he.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/id.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/it.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/km.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/no.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/si.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/th.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/about.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/logo_ckeditor.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/dialogs/paste.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/dialogs/colordialog.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/dialog/dialogDefinition.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/div/dialogs/div.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/find/dialogs/find.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/flash/dialogs/flash.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/flash/images/placeholder.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/button.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/checkbox.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/form.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/hiddenfield.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/radio.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/select.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textarea.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textfield.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/forms/images/hiddenfield.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/icons.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/icons_hidpi.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/iframe/dialogs/iframe.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/iframe/images/placeholder.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/image/dialogs/image.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/image/images/noimage.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/anchor.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/link.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/link/images/anchor.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/link/images/hidpi/anchor.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/dialogs/liststyle.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon-rtl.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/images/pagebreak.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/filter/default.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/preview/preview.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/scayt/LICENSE.md delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/scayt/README.md delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/options.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/toolbar.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_address.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_blockquote.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_div.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h1.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h2.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h3.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h4.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h5.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h6.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_p.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_pre.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/dialogs/smiley.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embaressed_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tounge_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ar.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/bg.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ca.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cs.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cy.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/de.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/el.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/eo.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/es.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/et.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fa.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fi.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/gl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/he.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hu.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/id.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/it.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ja.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/km.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ku.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/lv.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nb.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/no.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ru.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/si.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sk.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sl.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sq.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sv.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/th.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tr.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tt.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ug.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/uk.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/vi.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/specialchar.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/table.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/dialogs/tableCell.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/default.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template1.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template2.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template3.gif delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/wsc/LICENSE.md delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/wsc/README.md delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/ciframe.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/tmpFrameset.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc_ie.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/ajax.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/api.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/appendto.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/logo.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/outputxhtml.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/assets/posteddata.php delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/assets/sample.jpg delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/languages.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/datafiltering.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/divreplace.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/index.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/inlineall.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/inlinebycode.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/inlinetextarea.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/jquery.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/my_dialog.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/dialog.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/enterkey.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputforflash.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputhtml.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/magicline.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/toolbar.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/fullpage.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/readonly.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/replacebyclass.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/replacebycode.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/sample.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/sample.js delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/sample_posteddata.php delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/tabindex.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/uicolor.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/uilanguages.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/samples/xhtmlstyle.html delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie7.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie8.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_iequirks.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/editor.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_gecko.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie7.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie8.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_iequirks.css delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/icons.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/icons_hidpi.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/arrow.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/close.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/close.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock-open.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/refresh.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock-open.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/images/refresh.png delete mode 100644 wqflask/wqflask/static/packages/ckeditor/skins/moono/readme.md delete mode 100644 wqflask/wqflask/static/packages/ckeditor/styles.js diff --git a/MANIFEST.in b/MANIFEST.in index 26c71a60..fc9405fd 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -108,90 +108,6 @@ include wqflask/wqflask/static/packages/novus-nvd3-d51729c/src/models/backup/* include wqflask/wqflask/static/packages/novus-nvd3-d51729c/examples/* include wqflask/wqflask/static/packages/novus-nvd3-d51729c/examples/images/* include wqflask/wqflask/static/packages/DT_bootstrap/* -include wqflask/wqflask/static/packages/ckeditor/* -include wqflask/wqflask/static/packages/ckeditor/lang/* -include wqflask/wqflask/static/packages/ckeditor/adapters/* -include wqflask/wqflask/static/packages/ckeditor/skins/* -include wqflask/wqflask/static/packages/ckeditor/skins/moono/* -include wqflask/wqflask/static/packages/ckeditor/skins/moono/images/* -include wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/* -include wqflask/wqflask/static/packages/ckeditor/plugins/* -include wqflask/wqflask/static/packages/ckeditor/plugins/div/* -include wqflask/wqflask/static/packages/ckeditor/plugins/div/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/* -include wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/* -include wqflask/wqflask/static/packages/ckeditor/plugins/templates/* -include wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/* -include wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/find/* -include wqflask/wqflask/static/packages/ckeditor/plugins/find/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/scayt/* -include wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/dialog/* -include wqflask/wqflask/static/packages/ckeditor/plugins/flash/* -include wqflask/wqflask/static/packages/ckeditor/plugins/flash/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/flash/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/about/* -include wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/hidpi/* -include wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/* -include wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/filter/* -include wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/* -include wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/* -include wqflask/wqflask/static/packages/ckeditor/plugins/wsc/* -include wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/forms/* -include wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/forms/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/link/* -include wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/link/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/link/images/hidpi/* -include wqflask/wqflask/static/packages/ckeditor/plugins/iframe/* -include wqflask/wqflask/static/packages/ckeditor/plugins/iframe/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/iframe/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/* -include wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/table/* -include wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/smiley/* -include wqflask/wqflask/static/packages/ckeditor/plugins/smiley/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/* -include wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/* -include wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/* -include wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/* -include wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/magicline/* -include wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/* -include wqflask/wqflask/static/packages/ckeditor/plugins/preview/* -include wqflask/wqflask/static/packages/ckeditor/plugins/image/* -include wqflask/wqflask/static/packages/ckeditor/plugins/image/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/plugins/image/images/* -include wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/* -include wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/dialogs/* -include wqflask/wqflask/static/packages/ckeditor/samples/* -include wqflask/wqflask/static/packages/ckeditor/samples/assets/* -include wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/* -include wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/* -include wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/* -include wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/* include wqflask/wqflask/static/packages/colorbox/* include wqflask/wqflask/static/packages/colorbox/example5/* include wqflask/wqflask/static/packages/colorbox/example5/images/* diff --git a/wqflask/wqflask/static/packages/ckeditor/CHANGES.md b/wqflask/wqflask/static/packages/ckeditor/CHANGES.md deleted file mode 100644 index 9bfaef34..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/CHANGES.md +++ /dev/null @@ -1,671 +0,0 @@ -CKEditor 4 Changelog -==================== - -## CKEditor 4.4.5 - -New Features: - -* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant). - -Fixed Issues: - -* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position. -* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)! -* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)! -* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `<base>` tag is not created when `<head>` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)! -* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)! -* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables. -* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated. -* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable). -* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `<cite>` elements. -* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy. -* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). -* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu. -* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor. -* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys. -* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body. -* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity. -* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode. -* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images. - - -## CKEditor 4.4.4 - -Fixed Issues: - -* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)! -* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word]((http://ckeditor.com/addon/pastefromword)) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others: - * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. - * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys. - * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin. -* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments. -* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*. -* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking. -* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`. -* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it. -* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files. -* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it. -* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar. -* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator. -* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets. -* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `<body>` in Compatibility Mode will no longer reset selection to the first line. -* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). -* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor. -* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image. - - -Other Changes: - -* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository. - -## CKEditor 4.4.3 - -**Security Updates:** - -* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/). - -**An upgrade is highly recommended!** - -New Features: - -* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window. - -Fixed Issues: - -* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: **Enter** key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)! -* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows. -* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed. -* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements). -* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available. -* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `<meta>` tags should be allowed everywhere, including inside the `<body>` element. -* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified. - -## CKEditor 4.4.2 - -Important Notes: - -* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. - Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). - -New Features: - -* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots. - -Fixed Issues: - -* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)! -* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)! -* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration. -* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link. -* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved. -* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData). -* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside. -* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case). -* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click. -* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated. -* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `<span>` elements created when joining adjacent elements (non-collapsed selection). -* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin. -* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container. -* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell. -* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks. -* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine. -* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`. -* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions. -* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget. -* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script. -* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method. -* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node. - -## CKEditor 4.4.1 - -New Features: - -* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute. - -Fixed Issues: - -* [#11861](http://dev.ckeditor.com/ticket/11861): [Webkit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release. -* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [Webkit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)! -* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)! -* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `<code>` element. -* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `<title>` element. -* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample. -* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes. -* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor. -* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget. -* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width. -* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass). -* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)). -* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu. -* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode. -* [#11822](http://dev.ckeditor.com/ticket/11822): [Webkit] Fixed: Editing anchors by double-click is broken in some cases. -* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar. -* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window. -* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`. -* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table. -* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred. -* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly. -* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute. -* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin. -* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border. - -Other Changes: - -* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0. -* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer. -* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces. - -## CKEditor 4.4 - -**Important Notes:** - -* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated. -* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations. -* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them. -* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)). -* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided. - -New Features: - -* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties — `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features: - * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers. - * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods. - * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive). - * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules). -* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin: - * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images. - * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes. - If this setting is defined, the editor produces classes instead of inline styles for aligned images. - * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string. -* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type. -* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format. -* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). -* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far — the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library. -* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)). -* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles). -* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities. -* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source. - -Other Changes: - -* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects). -* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code. -* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that: - * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property. - * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event. - * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)). -* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version. - -Fixed Issues: - -* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div. -* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked. - -## CKEditor 4.3.5 - -New Features: - -* Added new translation: Tatar. - -Fixed Issues: - -* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode. -* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work. - -## CKEditor 4.3.4 - -Fixed Issues: - -* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard. -* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements. -* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache. -* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item. -* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable. -* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`. -* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin. -* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table. -* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor. -* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change. - -## CKEditor 4.3.3 - -Fixed Issues: - -* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). -* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. -* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. -* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). -* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. -* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. -* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. -* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. -* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. -* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. -* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. -* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. -* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. -* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. -* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. -* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. -* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. -* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. -* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). -* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. - -## CKEditor 4.3.2 - -Fixed Issues: - -* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. -* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: - * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. - * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. - * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. - * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. -* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. -* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: - * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. - * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. -* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. -* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). -* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. -* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. -* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. -* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. -* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. -* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. -* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. -* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. -* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. -* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. -* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. -* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. -* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). -* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. -* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. -* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. -* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. -* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. -* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. -* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. -* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. - -## CKEditor 4.3.1 - -**Important Notes:** - -* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). -* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). - -Fixed Issues: - -* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. -* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. -* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. -* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. -* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. -* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. -* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. -* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. -* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. -* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. -* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. -* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. -* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. -* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. -* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. -* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. -* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. -* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. -* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. -* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. -* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. -* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. -* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. -* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. -* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. -* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. - -## CKEditor 4.3 - -New Features: - -* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. -* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. -* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. -* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. -* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. -* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. -* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. -* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: - * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), - * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), - * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), - * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), - * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), - * fixing other minor bugs. -* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. -* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. -* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. -* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. -* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). -* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. - -Fixed Issues: - -* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. -* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. -* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. -* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. -* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. -* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. -* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. -* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. -* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. -* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. -* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. -* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. -* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. -* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. -* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. -* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. -* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. -* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. -* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. -* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. -* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. -* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. -* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. -* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. -* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. -* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. -* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). - -## CKEditor 4.3 Beta - -New Features: - -* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. - * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). - * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties – normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). - * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. - * Dynamic *Enter* mode values – [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). - * Dynamic content filter instances – [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. - * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. - * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. - * Dozens of new methods were introduced – most interesting ones: - * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), - * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), - * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), - * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), - * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). -* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. -* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. -* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). -* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). - -## CKEditor 4.2.3 - -Fixed Issues: - -* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. -* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. -* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. -* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). -* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. - -## CKEditor 4.2.2 - -Fixed Issues: - -* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. -* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. -* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. -* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. -* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. -* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. -* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. -* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. -* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. -* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. -* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). -* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). -* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. -* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. - -## CKEditor 4.2.1 - -Fixed Issues: - -* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. -* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. -* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. -* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. -* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. -* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. -* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. -* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. -* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. -* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. -* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. -* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. -* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. -* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. - -## CKEditor 4.2 - -**Important Notes:** - -* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. - -* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). - -New Features: - -* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). -* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. -* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). -* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. -* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. -* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. -* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements — introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. -* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. - -Fixed Issues: - -* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. -* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. -* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). - -## CKEditor 4.1.3 - -New Features: - -* Added new translation: Indonesian. - -Fixed Issues: - -* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. -* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". -* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. -* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). -* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. - -## CKEditor 4.1.2 - -New Features: - -* Added new translation: Sinhala. - -Fixed Issues: - -* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. -* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. -* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. -* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. -* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). -* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. -* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). -* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. -* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. -* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. -* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. -* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. -* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. - -## CKEditor 4.1.1 - -New Features: - -* Added new translation: Albanian. - -Fixed Issues: - -* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. -* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. -* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. -* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. -* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. -* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). -* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). -* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. -* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. -* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. -* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. -* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. -* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. -* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). - -## CKEditor 4.1 - -Fixed Issues: - -* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. -* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. -* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. -* Minor issues in plugin integration with Advanced Content Filter: - * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. - * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. - * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. - -## CKEditor 4.1 RC - -New Features: - -* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. - - Brand new data filtering system that works in 2 modes: - - * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its - current configuration can handle. - * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data - will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. - - See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). -* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. -* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. -* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. -* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. -* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. -* Included in [#10103](http://dev.ckeditor.com/ticket/10103): - * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. - * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. -* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. - -## CKEditor 4.0.3 - -Fixed Issues: - -* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. -* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. -* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). - -## CKEditor 4.0.2 - -Fixed Issues: - -* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. -* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). -* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. -* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. -* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. -* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. -* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. -* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. -* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. -* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. -* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. -* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. -* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. -* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. -* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. -* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. -* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. -* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. -* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. - -## CKEditor 4.0.1.1 - -Fixed Issues: - -* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. - -## CKEditor 4.0.1 - -Fixed Issues: - -* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). -* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). -* [Magic Line](http://ckeditor.com/addon/magicline) plugin: - * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. - * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. - * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. -* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. -* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. -* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. -* Context menu: - * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. - * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. - * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. -* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. -* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. -* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. -* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. -* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. -* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. -* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. -* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. -* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. -* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. -* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. -* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. -* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. -* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. -* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. -* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. -* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). -* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. -* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. -* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. -* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. -* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. -* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. -* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. -* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. - - -## CKEditor 4.0 - -The first stable release of the new CKEditor 4 code line. - -The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever -possible. The list of relevant changes can be found in the [API Changes page of -the CKEditor 4 documentation][1]. - -[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" diff --git a/wqflask/wqflask/static/packages/ckeditor/LICENSE.md b/wqflask/wqflask/static/packages/ckeditor/LICENSE.md deleted file mode 100644 index b6e0b9ca..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/LICENSE.md +++ /dev/null @@ -1,1264 +0,0 @@ -Software License Agreement -========================== - -CKEditor - The text editor for Internet - http://ckeditor.com -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your -choice: - - - GNU General Public License Version 2 or later (the "GPL") - http://www.gnu.org/licenses/gpl.html - (See Appendix A) - - - GNU Lesser General Public License Version 2.1 or later (the "LGPL") - http://www.gnu.org/licenses/lgpl.html - (See Appendix B) - - - Mozilla Public License Version 1.1 or later (the "MPL") - http://www.mozilla.org/MPL/MPL-1.1.html - (See Appendix C) - -You are not required to, but if you want to explicitly declare the -license you have chosen to be bound to when using, reproducing, -modifying and distributing this software, just include a text file -titled "legal.txt" in your version of this software, indicating your -license choice. In any case, your choice will not restrict any -recipient of your version of this software to use, reproduce, modify -and distribute this software under any of the above licenses. - -Sources of Intellectual Property Included in CKEditor ------------------------------------------------------ - -Where not otherwise indicated, all CKEditor content is authored by -CKSource engineers and consists of CKSource-owned intellectual -property. In some specific instances, CKEditor will incorporate work -done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand -and product names are trademarks, registered trademarks or service -marks of their respective holders. - ---- - -Appendix A: The GPL License ---------------------------- - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software-to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - - -Appendix B: The LGPL License ----------------------------- - -GNU LESSER GENERAL PUBLIC LICENSE -Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - -Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software-to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages-typically libraries-of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - -GNU LESSER GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - -NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - -END OF TERMS AND CONDITIONS - - -Appendix C: The MPL License ---------------------------- - -MOZILLA PUBLIC LICENSE -Version 1.1 - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or otherwise making the - Covered Code available to a third party. - - 1.1. "Contributor" means each entity that creates or contributes to - the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Code, prior Modifications used by a Contributor, and the Modifications - made by that particular Contributor. - - 1.3. "Covered Code" means the Original Code or Modifications or the - combination of the Original Code and Modifications, in each case - including portions thereof. - - 1.4. "Electronic Distribution Mechanism" means a mechanism generally - accepted in the software development community for the electronic - transfer of data. - - 1.5. "Executable" means Covered Code in any form other than Source - Code. - - 1.6. "Initial Developer" means the individual or entity identified - as the Initial Developer in the Source Code notice required by Exhibit - A. - - 1.7. "Larger Work" means a work which combines Covered Code or - portions thereof with code not governed by the terms of this License. - - 1.8. "License" means this document. - - 1.8.1. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means any addition to or deletion from the - substance or structure of either the Original Code or any previous - Modifications. When Covered Code is released as a series of files, a - Modification is: - A. Any addition to or deletion from the contents of a file - containing Original Code or previous Modifications. - - B. Any new file that contains any part of the Original Code or - previous Modifications. - - 1.10. "Original Code" means Source Code of computer software code - which is described in the Source Code notice required by Exhibit A as - Original Code, and which, at the time of its release under this - License is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, process, - and apparatus claims, in any patent Licensable by grantor. - - 1.11. "Source Code" means the preferred form of the Covered Code for - making modifications to it, including all modules it contains, plus - any associated interface definition files, scripts used to control - compilation and installation of an Executable, or source code - differential comparisons against either the Original Code or another - well known, available Covered Code of the Contributor's choice. The - Source Code can be in a compressed or archival form, provided the - appropriate decompression or de-archiving software is widely available - for no charge. - - 1.12. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms of, this - License or a future version of this License issued under Section 6.1. - For legal entities, "You" includes any entity which controls, is - controlled by, or is under common control with You. For purposes of - this definition, "control" means (a) the power, direct or indirect, - to cause the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty percent - (50%) of the outstanding shares or beneficial ownership of such - entity. - -2. Source Code License. - - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, royalty-free, - non-exclusive license, subject to third party intellectual property - claims: - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer to use, reproduce, - modify, display, perform, sublicense and distribute the Original - Code (or portions thereof) with or without Modifications, and/or - as part of a Larger Work; and - - (b) under Patents Claims infringed by the making, using or - selling of Original Code, to make, have made, use, practice, - sell, and offer for sale, and/or otherwise dispose of the - Original Code (or portions thereof). - - (c) the licenses granted in this Section 2.1(a) and (b) are - effective on the date Initial Developer first distributes - Original Code under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: 1) for code that You delete from the Original Code; 2) - separate from the Original Code; or 3) for infringements caused - by: i) the modification of the Original Code or ii) the - combination of the Original Code with other software or devices. - - 2.2. Contributor Grant. - Subject to third party intellectual property claims, each Contributor - hereby grants You a world-wide, royalty-free, non-exclusive license - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor, to use, reproduce, modify, - display, perform, sublicense and distribute the Modifications - created by such Contributor (or portions thereof) either on an - unmodified basis, with other Modifications, as Covered Code - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either alone - and/or in combination with its Contributor Version (or portions - of such combination), to make, use, sell, offer for sale, have - made, and/or otherwise dispose of: 1) Modifications made by that - Contributor (or portions thereof); and 2) the combination of - Modifications made by that Contributor with its Contributor - Version (or portions of such combination). - - (c) the licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first makes Commercial Use of - the Covered Code. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: 1) for any code that Contributor has deleted from the - Contributor Version; 2) separate from the Contributor Version; - 3) for infringements caused by: i) third party modifications of - Contributor Version or ii) the combination of Modifications made - by that Contributor with other software (except as part of the - Contributor Version) or other devices; or 4) under Patent Claims - infringed by Covered Code in the absence of Modifications made by - that Contributor. - -3. Distribution Obligations. - - 3.1. Application of License. - The Modifications which You create or to which You contribute are - governed by the terms of this License, including without limitation - Section 2.2. The Source Code version of Covered Code may be - distributed only under the terms of this License or a future version - of this License released under Section 6.1, and You must include a - copy of this License with every copy of the Source Code You - distribute. You may not offer or impose any terms on any Source Code - version that alters or restricts the applicable version of this - License or the recipients' rights hereunder. However, You may include - an additional document offering the additional rights described in - Section 3.5. - - 3.2. Availability of Source Code. - Any Modification which You create or to which You contribute must be - made available in Source Code form under the terms of this License - either on the same media as an Executable version or via an accepted - Electronic Distribution Mechanism to anyone to whom you made an - Executable version available; and if made available via Electronic - Distribution Mechanism, must remain available for at least twelve (12) - months after the date it initially became available, or at least six - (6) months after a subsequent version of that particular Modification - has been made available to such recipients. You are responsible for - ensuring that the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a third party. - - 3.3. Description of Modifications. - You must cause all Covered Code to which You contribute to contain a - file documenting the changes You made to create that Covered Code and - the date of any change. You must include a prominent statement that - the Modification is derived, directly or indirectly, from Original - Code provided by the Initial Developer and including the name of the - Initial Developer in (a) the Source Code, and (b) in any notice in an - Executable version or related documentation in which You describe the - origin or ownership of the Covered Code. - - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If Contributor has knowledge that a license under a third party's - intellectual property rights is required to exercise the rights - granted by such Contributor under Sections 2.1 or 2.2, - Contributor must include a text file with the Source Code - distribution titled "LEGAL" which describes the claim and the - party making the claim in sufficient detail that a recipient will - know whom to contact. If Contributor obtains such knowledge after - the Modification is made available as described in Section 3.2, - Contributor shall promptly modify the LEGAL file in all copies - Contributor makes available thereafter and shall take other steps - (such as notifying appropriate mailing lists or newsgroups) - reasonably calculated to inform those who received the Covered - Code that new knowledge has been obtained. - - (b) Contributor APIs. - If Contributor's Modifications include an application programming - interface and Contributor has knowledge of patent licenses which - are reasonably necessary to implement that API, Contributor must - also include this information in the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed pursuant to - Section 3.4(a) above, Contributor believes that Contributor's - Modifications are Contributor's original creation(s) and/or - Contributor has sufficient rights to grant the rights conveyed by - this License. - - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each file of the Source - Code. If it is not possible to put such notice in a particular Source - Code file due to its structure, then You must include such notice in a - location (such as a relevant directory) where a user would be likely - to look for such a notice. If You created one or more Modification(s) - You may add your name as a Contributor to the notice described in - Exhibit A. You must also duplicate this License in any documentation - for the Source Code where You describe recipients' rights or ownership - rights relating to Covered Code. You may choose to offer, and to - charge a fee for, warranty, support, indemnity or liability - obligations to one or more recipients of Covered Code. However, You - may do so only on Your own behalf, and not on behalf of the Initial - Developer or any Contributor. You must make it absolutely clear than - any such warranty, support, indemnity or liability obligation is - offered by You alone, and You hereby agree to indemnify the Initial - Developer and every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of warranty, - support, indemnity or liability terms You offer. - - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form only if the - requirements of Section 3.1-3.5 have been met for that Covered Code, - and if You include a notice stating that the Source Code version of - the Covered Code is available under the terms of this License, - including a description of how and where You have fulfilled the - obligations of Section 3.2. The notice must be conspicuously included - in any notice in an Executable version, related documentation or - collateral in which You describe recipients' rights relating to the - Covered Code. You may distribute the Executable version of Covered - Code or ownership rights under a license of Your choice, which may - contain terms different from this License, provided that You are in - compliance with the terms of this License and that the license for the - Executable version does not attempt to limit or alter the recipient's - rights in the Source Code version from the rights set forth in this - License. If You distribute the Executable version under a different - license You must make it absolutely clear that any terms which differ - from this License are offered by You alone, not by the Initial - Developer or any Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred by - the Initial Developer or such Contributor as a result of any such - terms You offer. - - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code with other code - not governed by the terms of this License and distribute the Larger - Work as a single product. In such a case, You must make sure the - requirements of this License are fulfilled for the Covered Code. - -4. Inability to Comply Due to Statute or Regulation. - - If it is impossible for You to comply with any of the terms of this - License with respect to some or all of the Covered Code due to - statute, judicial order, or regulation then You must: (a) comply with - the terms of this License to the maximum extent possible; and (b) - describe the limitations and the code they affect. Such description - must be included in the LEGAL file described in Section 3.4 and must - be included with all distributions of the Source Code. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Application of this License. - - This License applies to code to which the Initial Developer has - attached the notice in Exhibit A and to related Covered Code. - -6. Versions of the License. - - 6.1. New Versions. - Netscape Communications Corporation ("Netscape") may publish revised - and/or new versions of the License from time to time. Each version - will be given a distinguishing version number. - - 6.2. Effect of New Versions. - Once Covered Code has been published under a particular version of the - License, You may always continue to use it under the terms of that - version. You may also choose to use such Covered Code under the terms - of any subsequent version of the License published by Netscape. No one - other than Netscape has the right to modify the terms applicable to - Covered Code created under this License. - - 6.3. Derivative Works. - If You create or use a modified version of this License (which you may - only do in order to apply it to code which is not already Covered Code - governed by this License), You must (a) rename Your license so that - the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", - "MPL", "NPL" or any confusingly similar phrase do not appear in your - license (except to note that your license differs from this License) - and (b) otherwise make it clear that Your version of the license - contains terms which differ from the Mozilla Public License and - Netscape Public License. (Filling in the name of the Initial - Developer, Original Code or Contributor in the notice described in - Exhibit A shall not of themselves be deemed to be modifications of - this License.) - -7. DISCLAIMER OF WARRANTY. - - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, - WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF - DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE - IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE - COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -8. TERMINATION. - - 8.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to cure - such breach within 30 days of becoming aware of the breach. All - sublicenses to the Covered Code which are properly granted shall - survive any termination of this License. Provisions which, by their - nature, must remain in effect beyond the termination of this License - shall survive. - - 8.2. If You initiate litigation by asserting a patent infringement - claim (excluding declatory judgment actions) against Initial Developer - or a Contributor (the Initial Developer or Contributor against whom - You file such action is referred to as "Participant") alleging that: - - (a) such Participant's Contributor Version directly or indirectly - infringes any patent, then any and all rights granted by such - Participant to You under Sections 2.1 and/or 2.2 of this License - shall, upon 60 days notice from Participant terminate prospectively, - unless if within 60 days after receipt of notice You either: (i) - agree in writing to pay Participant a mutually agreeable reasonable - royalty for Your past and future use of Modifications made by such - Participant, or (ii) withdraw Your litigation claim with respect to - the Contributor Version against such Participant. If within 60 days - of notice, a reasonable royalty and payment arrangement are not - mutually agreed upon in writing by the parties or the litigation claim - is not withdrawn, the rights granted by Participant to You under - Sections 2.1 and/or 2.2 automatically terminate at the expiration of - the 60 day notice period specified above. - - (b) any software, hardware, or device, other than such Participant's - Contributor Version, directly or indirectly infringes any patent, then - any rights granted to You by such Participant under Sections 2.1(b) - and 2.2(b) are revoked effective as of the date You first made, used, - sold, distributed, or had made, Modifications made by that - Participant. - - 8.3. If You assert a patent infringement claim against Participant - alleging that such Participant's Contributor Version directly or - indirectly infringes any patent where such claim is resolved (such as - by license or settlement) prior to the initiation of patent - infringement litigation, then the reasonable value of the licenses - granted by such Participant under Sections 2.1 or 2.2 shall be taken - into account in determining the amount or value of any payment or - license. - - 8.4. In the event of termination under Sections 8.1 or 8.2 above, - all end user license agreements (excluding distributors and resellers) - which have been validly granted by You or any distributor hereunder - prior to termination shall survive termination. - -9. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL - DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, - OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR - ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY - CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, - WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY - RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW - PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE - EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO - THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -10. U.S. GOVERNMENT END USERS. - - The Covered Code is a "commercial item," as that term is defined in - 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer - software" and "commercial computer software documentation," as such - terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 - C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), - all U.S. Government End Users acquire Covered Code with only those - rights set forth herein. - -11. MISCELLANEOUS. - - This License represents the complete agreement concerning subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. This License shall be governed by - California law provisions (except to the extent applicable law, if - any, provides otherwise), excluding its conflict-of-law provisions. - With respect to disputes in which at least one party is a citizen of, - or an entity chartered or registered to do business in the United - States of America, any litigation relating to this License shall be - subject to the jurisdiction of the Federal Courts of the Northern - District of California, with venue lying in Santa Clara County, - California, with the losing party responsible for costs, including - without limitation, court costs and reasonable attorneys' fees and - expenses. The application of the United Nations Convention on - Contracts for the International Sale of Goods is expressly excluded. - Any law or regulation which provides that the language of a contract - shall be construed against the drafter shall not apply to this - License. - -12. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or indirectly, - out of its utilization of rights under this License and You agree to - work with Initial Developer and Contributors to distribute such - responsibility on an equitable basis. Nothing herein is intended or - shall be deemed to constitute any admission of liability. - -13. MULTIPLE-LICENSED CODE. - - Initial Developer may designate portions of the Covered Code as - "Multiple-Licensed". "Multiple-Licensed" means that the Initial - Developer permits you to utilize portions of the Covered Code under - Your choice of the NPL or the alternative licenses, if any, specified - by the Initial Developer in the file described in Exhibit A. - -EXHIBIT A -Mozilla Public License. - - ``The contents of this file are subject to the Mozilla Public License - Version 1.1 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - License for the specific language governing rights and limitations - under the License. - - The Original Code is ______________________________________. - - The Initial Developer of the Original Code is ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. - - Contributor(s): ______________________________________. - - Alternatively, the contents of this file may be used under the terms - of the _____ license (the "[___] License"), in which case the - provisions of [______] License are applicable instead of those - above. If you wish to allow use of your version of this file only - under the terms of the [____] License and not to allow others to use - your version of this file under the MPL, indicate your decision by - deleting the provisions above and replace them with the notice and - other provisions required by the [___] License. If you do not delete - the provisions above, a recipient may use your version of this file - under either the MPL or the [___] License." - - [NOTE: The text of this Exhibit A may differ slightly from the text of - the notices in the Source Code files of the Original Code. You should - use the text of this Exhibit A rather than the text found in the - Original Code Source Code for Your Modifications.] diff --git a/wqflask/wqflask/static/packages/ckeditor/README.md b/wqflask/wqflask/static/packages/ckeditor/README.md deleted file mode 100644 index c5a55cd8..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/README.md +++ /dev/null @@ -1,39 +0,0 @@ -CKEditor 4 -========== - -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -http://ckeditor.com - See LICENSE.md for license information. - -CKEditor is a text editor to be used inside web pages. It's not a replacement -for desktop text editors like Word or OpenOffice, but a component to be used as -part of web applications and websites. - -## Documentation - -The full editor documentation is available online at the following address: -http://docs.ckeditor.com - -## Installation - -Installing CKEditor is an easy task. Just follow these simple steps: - - 1. **Download** the latest version from the CKEditor website: - http://ckeditor.com. You should have already completed this step, but be - sure you have the very latest version. - 2. **Extract** (decompress) the downloaded file into the root of your website. - -**Note:** CKEditor is by default installed in the `ckeditor` folder. You can -place the files in whichever you want though. - -## Checking Your Installation - -The editor comes with a few sample pages that can be used to verify that -installation proceeded properly. Take a look at the `samples` directory. - -To test your installation, just call the following page at your website: - - http://<your site>/<CKEditor installation path>/samples/index.html - -For example: - - http://www.example.com/ckeditor/samples/index.html diff --git a/wqflask/wqflask/static/packages/ckeditor/adapters/jquery.js b/wqflask/wqflask/static/packages/ckeditor/adapters/jquery.js deleted file mode 100644 index 3ec908b0..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/adapters/jquery.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= -a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", -!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); -return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, -100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); -return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/build-config.js b/wqflask/wqflask/static/packages/ckeditor/build-config.js deleted file mode 100644 index 5ea8379e..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/build-config.js +++ /dev/null @@ -1,179 +0,0 @@ -/** - * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -/** - * This file was added automatically by CKEditor builder. - * You may re-use it at any time to build CKEditor again. - * - * If you would like to build CKEditor online again - * (for example to upgrade), visit one the following links: - * - * (1) http://ckeditor.com/builder - * Visit online builder to build CKEditor from scratch. - * - * (2) http://ckeditor.com/builder/e6b8a045f8f984a69463975ca3e6524a - * Visit online builder to build CKEditor, starting with the same setup as before. - * - * (3) http://ckeditor.com/builder/download/e6b8a045f8f984a69463975ca3e6524a - * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. - * - * NOTE: - * This file is not used by CKEditor, you may remove it. - * Changing this file will not change your CKEditor configuration. - */ - -var CKBUILDER_CONFIG = { - skin: 'moono', - preset: 'full', - ignore: [ - '.bender', - 'bender.js', - 'bender-err.log', - 'bender-out.log', - 'dev', - '.DS_Store', - '.gitattributes', - '.gitignore', - 'Gruntfile.js', - '.idea', - '.jscsrc', - '.jshintignore', - '.jshintrc', - '.mailmap', - 'node_modules', - 'package.json', - 'README.md', - 'tests' - ], - plugins : { - 'a11yhelp' : 1, - 'about' : 1, - 'basicstyles' : 1, - 'bidi' : 1, - 'blockquote' : 1, - 'clipboard' : 1, - 'colorbutton' : 1, - 'colordialog' : 1, - 'contextmenu' : 1, - 'dialogadvtab' : 1, - 'div' : 1, - 'elementspath' : 1, - 'enterkey' : 1, - 'entities' : 1, - 'filebrowser' : 1, - 'find' : 1, - 'flash' : 1, - 'floatingspace' : 1, - 'font' : 1, - 'format' : 1, - 'forms' : 1, - 'horizontalrule' : 1, - 'htmlwriter' : 1, - 'iframe' : 1, - 'image' : 1, - 'indentblock' : 1, - 'indentlist' : 1, - 'justify' : 1, - 'language' : 1, - 'link' : 1, - 'list' : 1, - 'liststyle' : 1, - 'magicline' : 1, - 'maximize' : 1, - 'newpage' : 1, - 'pagebreak' : 1, - 'pastefromword' : 1, - 'pastetext' : 1, - 'preview' : 1, - 'print' : 1, - 'removeformat' : 1, - 'resize' : 1, - 'save' : 1, - 'scayt' : 1, - 'selectall' : 1, - 'showblocks' : 1, - 'showborders' : 1, - 'smiley' : 1, - 'sourcearea' : 1, - 'specialchar' : 1, - 'stylescombo' : 1, - 'tab' : 1, - 'table' : 1, - 'tabletools' : 1, - 'templates' : 1, - 'toolbar' : 1, - 'undo' : 1, - 'wsc' : 1, - 'wysiwygarea' : 1 - }, - languages : { - 'af' : 1, - 'ar' : 1, - 'bg' : 1, - 'bn' : 1, - 'bs' : 1, - 'ca' : 1, - 'cs' : 1, - 'cy' : 1, - 'da' : 1, - 'de' : 1, - 'el' : 1, - 'en' : 1, - 'en-au' : 1, - 'en-ca' : 1, - 'en-gb' : 1, - 'eo' : 1, - 'es' : 1, - 'et' : 1, - 'eu' : 1, - 'fa' : 1, - 'fi' : 1, - 'fo' : 1, - 'fr' : 1, - 'fr-ca' : 1, - 'gl' : 1, - 'gu' : 1, - 'he' : 1, - 'hi' : 1, - 'hr' : 1, - 'hu' : 1, - 'id' : 1, - 'is' : 1, - 'it' : 1, - 'ja' : 1, - 'ka' : 1, - 'km' : 1, - 'ko' : 1, - 'ku' : 1, - 'lt' : 1, - 'lv' : 1, - 'mk' : 1, - 'mn' : 1, - 'ms' : 1, - 'nb' : 1, - 'nl' : 1, - 'no' : 1, - 'pl' : 1, - 'pt' : 1, - 'pt-br' : 1, - 'ro' : 1, - 'ru' : 1, - 'si' : 1, - 'sk' : 1, - 'sl' : 1, - 'sq' : 1, - 'sr' : 1, - 'sr-latn' : 1, - 'sv' : 1, - 'th' : 1, - 'tr' : 1, - 'tt' : 1, - 'ug' : 1, - 'uk' : 1, - 'vi' : 1, - 'zh' : 1, - 'zh-cn' : 1 - } -}; \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/ckeditor.js b/wqflask/wqflask/static/packages/ckeditor/ckeditor.js deleted file mode 100644 index d35e8bc3..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/ckeditor.js +++ /dev/null @@ -1,1013 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"E8PB",version:"4.4.5",revision:"25cdcad",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var f=window.CKEDITOR_BASEPATH||"";if(!f)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var b=d[c].src.match(a);if(b){f=b[1];break}}-1==f.indexOf(":/")&&"//"!=f.slice(0,2)&&(f=0===f.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+ -f:location.href.match(/^[^\?]*\/(?:)/)[0]+f);if(!f)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return f}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded", -a,!1),d()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),d())}catch(c){}}function d(){for(var a;a=c.shift();)a()}var c=[];return function(d){function b(){try{document.documentElement.doScroll("left")}catch(p){setTimeout(b,1);return}a()}c.push(d);"complete"===document.readyState&&setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange", -a);window.attachEvent("onload",a);d=!1;try{d=!window.frameElement}catch(e){}document.documentElement.doScroll&&d&&b()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=e.getUrl;e.getUrl=function(a){return b.call(e,a)||c.call(e,a)}}return e}()); -CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var e=CKEDITOR.event.prototype,b;for(b in e)a[b]==null&&(a[b]=e[b])},CKEDITOR.event.prototype=function(){function a(a){var f=e(this);return f[a]||(f[a]=new b(a))}var e=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var f=0,d=this.listeners;f<d.length;f++)if(d[f].fn==a)return f;return-1}}; -return{define:function(c,f){var d=a.call(this,c);CKEDITOR.tools.extend(d,f,true)},on:function(c,f,d,b,e){function m(a,p,u,e){a={name:c,sender:this,editor:a,data:p,listenerData:b,stop:u,cancel:e,removeListener:j};return f.call(d,a)===false?false:a.data}function j(){u.removeListener(c,f)}var p=a.call(this,c);if(p.getListenerIndex(f)<0){p=p.listeners;d||(d=this);isNaN(e)&&(e=10);var u=this;m.fn=f;m.priority=e;for(var t=p.length-1;t>=0;t--)if(p[t].priority<=e){p.splice(t+1,0,m);return{removeListener:j}}p.unshift(m)}return{removeListener:j}}, -once:function(){var a=Array.prototype.slice.call(arguments),f=a[1];a[1]=function(a){a.removeListener();return f.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,f=function(){a=1},d=0,b=function(){d=1};return function(h,m,j){var p=e(this)[h],h=a,u=d;a=d=0;if(p){var t=p.listeners;if(t.length)for(var t=t.slice(0),y,n=0;n<t.length;n++){if(p.errorProof)try{y= -t[n].call(this,j,m,f,b)}catch(w){}else y=t[n].call(this,j,m,f,b);y===false?d=1:typeof y!="undefined"&&(m=y);if(a||d)break}}m=d?false:typeof m=="undefined"?true:m;a=h;d=u;return m}}(),fireOnce:function(a,f,d){f=this.fire(a,f,d);delete e(this)[a];return f},removeListener:function(a,f){var d=e(this)[a];if(d){var b=d.getListenerIndex(f);b>=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=e(this),f;for(f in a)delete a[f]},hasListeners:function(a){return(a=e(this)[a])&&a.listeners.length> -0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); -CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol== -"https:"};e.gecko=navigator.product=="Gecko"&&!e.webkit&&!e.ie;if(e.webkit)a.indexOf("chrome")>-1?e.chrome=true:e.safari=true;var b=0;if(e.ie){b=e.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;e.ie9Compat=b==9;e.ie8Compat=b==8;e.ie7Compat=b==7;e.ie6Compat=b<7||e.quirks}if(e.gecko){var c=a.match(/rv:([\d\.]+)/);if(c){c=c[1].split(".");b=c[0]*1E4+(c[1]||0)*100+(c[2]||0)*1}}e.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));e.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); -e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4||e.air&&b>=1||e.webkit&&b>=522||false);e.hidpi=window.devicePixelRatio>=2;e.needsBrFiller=e.gecko||e.webkit||e.ie&&b>10;e.needsNbspFiller=e.ie&&b<11;e.cssClass="cke_browser_"+(e.ie?"ie":e.gecko?"gecko":e.webkit?"webkit":"unknown");if(e.quirks)e.cssClass=e.cssClass+" cke_browser_quirks";if(e.ie)e.cssClass=e.cssClass+(" cke_browser_ie"+(e.quirks?"6 cke_browser_iequirks":e.version));if(e.air)e.cssClass=e.cssClass+" cke_browser_air"; -if(e.iOS)e.cssClass=e.cssClass+" cke_browser_ios";if(e.hidpi)e.cssClass=e.cssClass+" cke_hidpi";return e}()); -"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= -CKEDITOR.loadFullCore,e=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():e&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},e*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; -(function(){var a=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,f=/</g,d=/"/g,g=/&/g,h=/>/g,m=/</g,j=/"/g;CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,f){if(!a&&!f)return true;if(!a||!f||a.length!=f.length)return false;for(var d=0;d<a.length;d++)if(a[d]!=f[d])return false;return true},clone:function(a){var f;if(a&&a instanceof Array){f=[];for(var d=0;d<a.length;d++)f[d]=CKEDITOR.tools.clone(a[d]); -return f}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;f=new a.constructor;for(d in a)f[d]=CKEDITOR.tools.clone(a[d]);return f},capitalize:function(a,f){return a.charAt(0).toUpperCase()+(f?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var f=arguments.length,d,b;if(typeof(d=arguments[f-1])=="boolean")f--;else if(typeof(d=arguments[f-2])=="boolean"){b=arguments[f-1]; -f=f-2}for(var c=1;c<f;c++){var e=arguments[c],o;for(o in e)if(d===true||a[o]==null)if(!b||o in b)a[o]=e[o]}return a},prototypedCopy:function(a){var f=function(){};f.prototype=a;return new f},copy:function(a){var f={},d;for(d in a)f[d]=a[d];return f},isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"},isEmpty:function(a){for(var f in a)if(a.hasOwnProperty(f))return false;return true},cssVendorPrefix:function(a,f,d){if(d)return e+a+":"+f+";"+a+":"+f;d={};d[a]=f;d[e+a]=f; -return d},cssStyleToDomStyle:function(){var a=document.createElement("div").style,f=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?f:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),f,d=[],b=0;b<a.length;b++)if(f=a[b])/@import|[{}]/.test(f)?d.push("<style>"+f+"</style>"):d.push('<link type="text/css" rel=stylesheet href="'+f+'">');return d.join("")}, -htmlEncode:function(a){return(""+a).replace(b,"&").replace(c,">").replace(f,"<")},htmlDecode:function(a){return a.replace(g,"&").replace(h,">").replace(m,"<")},htmlEncodeAttr:function(a){return a.replace(d,""").replace(f,"<").replace(c,">")},htmlDecodeAttr:function(a){return a.replace(j,'"').replace(m,"<").replace(h,">")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,f){var d=f(a);d.prototype= -a.prototype;return d},setTimeout:function(a,f,d,b,c){c||(c=window);d||(d=c);return c.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},f||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(f){return f.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(f){return f.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(f){return f.replace(a,"")}}(),indexOf:function(a,f){if(typeof f=="function")for(var d=0,b=a.length;d<b;d++){if(f(a[d]))return d}else{if(a.indexOf)return a.indexOf(f); -d=0;for(b=a.length;d<b;d++)if(a[d]===f)return d}return-1},search:function(a,f){var d=CKEDITOR.tools.indexOf(a,f);return d>=0?a[d]:null},bind:function(a,f){return function(){return a.apply(f,arguments)}},createClass:function(a){var f=a.$,d=a.base,b=a.privates||a._,c=a.proto,a=a.statics;!f&&(f=function(){d&&this.base.apply(this,arguments)});if(b)var e=f,f=function(){var a=this._||(this._={}),f;for(f in b){var d=b[f];a[f]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}e.apply(this,arguments)};if(d){f.prototype= -this.prototypedCopy(d.prototype);f.prototype.constructor=f;f.base=d;f.baseProto=d.prototype;f.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}c&&this.extend(f.prototype,c,true);a&&this.extend(f,a,true);return f},addFunction:function(f,d){return a.push(function(){return f.apply(d||this,arguments)})-1},removeFunction:function(f){a[f]=null},callFunction:function(f){var d=a[f];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a= -/^-?\d+\.?\d*px$/,f;return function(d){f=CKEDITOR.tools.trim(d+"")+"px";return a.test(f)?f:d||""}}(),convertToPx:function(){var a;return function(f){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(f)){a.setStyle("width",f);return a.$.clientWidth}return f}}(),repeat:function(a,f){return Array(f+1).join(a)},tryThese:function(){for(var a, -f=0,d=arguments.length;f<d;f++){var b=arguments[f];try{a=b();break}catch(c){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var f=arguments,d=this;window.setTimeout(function(){a.apply(d,f)},0)}},normalizeCssText:function(a,f){var d=[],b,c=CKEDITOR.tools.parseCssText(a,true,f);for(b in c)d.push(b+":"+c[b]);d.sort();return d.length?d.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, -function(a,f,d,b){a=[f,d,b];for(f=0;f<3;f++)a[f]=("0"+parseInt(a[f],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,f,d){var b={};if(d){d=new CKEDITOR.dom.element("span");d.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(d.getAttribute("style")||"")}if(!a||a==";")return b;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,d,c){if(f){d=d.toLowerCase();d=="font-family"&&(c=c.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,",")); -c=CKEDITOR.tools.trim(c)}b[d]=c});return b},writeCssText:function(a,f){var d,b=[];for(d in a)b.push(d+":"+a[d]);f&&b.sort();return b.join("; ")},objectCompare:function(a,f,d){var b;if(!a&&!f)return true;if(!a||!f)return false;for(b in a)if(a[b]!=f[b])return false;if(!d)for(b in f)if(a[b]!=f[b])return false;return true},objectKeys:function(a){var f=[],d;for(d in a)f.push(d);return f},convertArrayToObject:function(a,f){var d={};arguments.length==1&&(f=true);for(var b=0,c=a.length;b<c;++b)d[a[b]]=f; -return d},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(f){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,f){function d(){c=(new Date).getTime();b=false;f()}var b,c=0;return{input:function(){if(!b){var f=(new Date).getTime()-c;f<a?b=setTimeout(d,a-f):d()}},reset:function(){b&&clearTimeout(b);b=c=0}}},enableHtml5Elements:function(a,f){for(var d=["abbr","article","aside","audio","bdi","canvas","data", -"datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],b=d.length,c;b--;){c=a.createElement(d[b]);f&&a.appendChild(c)}},checkIfAnyArrayItemMatches:function(a,f){for(var d=0,b=a.length;d<b;++d)if(a[d].match(f))return true;return false},checkIfAnyObjectPropertyMatches:function(a,f){for(var d in a)if(d.match(f))return true;return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}})(); -CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,e=function(a,f){for(var d=CKEDITOR.tools.clone(a),b=1;b<arguments.length;b++){var f=arguments[b],c;for(c in f)delete d[c]}return d},b={},c={},f={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},g={},h={"#":1},m={center:1,dir:1,noframes:1}; -a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},h,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,f,b,m);e={a:e(b,{a:1,button:1}),abbr:b,address:c, -area:g,article:a({style:1},c),aside:a({style:1},c),audio:a({source:1,track:1},c),b:b,base:g,bdi:b,bdo:b,blockquote:c,body:c,br:g,button:e(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:g,colgroup:{col:1},command:g,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:a({style:1},c),dl:{dt:1,dd:1},dt:c,em:b,embed:g,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},d),header:c,hgroup:{h1:1, -h2:1,h3:1,h4:1,h5:1,h6:1},hr:g,html:a({head:1,body:1},c,d),i:b,iframe:h,img:g,input:g,ins:b,kbd:b,keygen:g,label:b,legend:b,li:c,link:g,map:c,mark:b,menu:a({li:1},c),meta:g,meter:e(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:h,output:b,p:b,param:g,pre:b,progress:e(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:h,section:a({style:1},c),select:{optgroup:1,option:1},small:b,source:g,span:b,strong:b,style:h, -sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:h,tfoot:{tr:1},th:c,thead:{tr:1},time:e(b,{time:1}),title:h,tr:{th:1,td:1},track:g,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},c),wbr:g,acronym:b,applet:a({param:1},c),basefont:g,big:b,center:c,dialog:g,dir:{li:1},font:b,isindex:g,noframes:c,strike:b,tt:b};a(e,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},f,m),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1, -div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1, -wbr:1},$inline:b,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},e.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1, -small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return e}(); -CKEDITOR.dom.event=function(a){this.$=a}; -CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var e=this.$;e.preventDefault?e.preventDefault():e.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a= -this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2; -CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){if(a)this.$=a}; -CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(e){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners",b)}if(!b[e]){b=b[e]=a(this,e);this.$.addEventListener?this.$.addEventListener(e,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&& -this.$.attachEvent("on"+e,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),c=b&&b[a];if(c){this.$.removeEventListener?this.$.removeEventListener(a,c,false):this.$.detachEvent&&this.$.detachEvent("on"+a,c);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var c=a[b];this.$.detachEvent? -this.$.detachEvent("on"+b,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(); -(function(a){var e={};CKEDITOR.on("reset",function(){e={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return false}};a.setCustomData=function(a,c){var f=this.getUniqueId();(e[f]||(e[f]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$["data-cke-expando"];return(c=c&&e[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$["data-cke-expando"],c=c&&e[c],f,d;if(c){f=c[a];d=a in c;delete c[a]}return d?f:null};a.clearCustomData=function(){this.removeAllListeners(); -var a=this.$["data-cke-expando"];a&&delete e[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype); -CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11; -CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16; -CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,e){a.append(this,e);return a},clone:function(a,e){var b=this.$.cloneNode(a),c=function(f){f["data-cke-expando"]&&(f["data-cke-expando"]=false);if(f.nodeType==CKEDITOR.NODE_ELEMENT){e||f.removeAttribute("id",false);if(a)for(var f=f.childNodes,d=0;d<f.length;d++)c(f[d])}};c(b);return new CKEDITOR.dom.node(b)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$, -a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var e=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var f=c.parentNode;f&&e.unshift(this.getIndex.call({$:c},a));c=f}return e},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){var e=this.$,b=-1, -c;if(!this.$.parentNode)return b;do if(!a||!(e!=this.$&&e.nodeType==CKEDITOR.NODE_TEXT&&(c||!e.nodeValue))){b++;c=e.nodeType==CKEDITOR.NODE_TEXT}while(e=e.previousSibling);return b},getNextSourceNode:function(a,e,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getFirst&&this.getFirst(),f;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(f=(f||this).getParent());){if(b&&b(f,true)===false)return null;a=f.getNext()}return!a|| -b&&b(a)===false?null:e&&e!=a.type?a.getNextSourceNode(false,e,b):a},getPreviousSourceNode:function(a,e,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getLast&&this.getLast(),f;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&&(f=(f||this).getParent());){if(b&&b(f,true)===false)return null;a=f.getPrevious()}return!a||b&&b(a)===false?null:e&&a.type!=e?a.getPreviousSourceNode(false,e,b):a},getPrevious:function(a){var e= -this.$,b;do b=(e=e.previousSibling)&&e.nodeType!=10&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getNext:function(a){var e=this.$,b;do b=(e=e.nextSibling)&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getParent:function(a){var e=this.$.parentNode;return e&&(e.nodeType==CKEDITOR.NODE_ELEMENT||a&&e.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(e):null},getParents:function(a){var e=this,b=[];do b[a?"push":"unshift"](e);while(e=e.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this; -if(a.contains&&a.contains(this))return a;var e=this.contains?this:this.getParent();do if(e.contains(a))return e;while(e=e.getParent());return null},getPosition:function(a){var e=this.$,b=a.$;if(e.compareDocumentPosition)return e.compareDocumentPosition(b);if(e==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(e.contains){if(e.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(e))return CKEDITOR.POSITION_IS_CONTAINED+ -CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in e)return e.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:e.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var e=this.getAddress(),a=a.getAddress(),b=Math.min(e.length,a.length),c=0;c<=b-1;c++)if(e[c]!=a[c]){if(c<b)return e[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return e.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+ -CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,e){var b=this.$,c,f;if(!e)b=b.parentNode;if(typeof a=="function"){f=true;c=a}else{f=false;c=function(f){f=typeof f.nodeName=="string"?f.nodeName.toLowerCase():"";return typeof a=="string"?f==a:f in a}}for(;b;){if(c(f?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b);try{b=b.parentNode}catch(d){b=null}}return null},hasAscendant:function(a,e){var b=this.$;if(!e)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true; -b=b.parentNode}return false},move:function(a,e){a.append(this.remove(),e)},remove:function(a){var e=this.$,b=e.parentNode;if(b){if(a)for(;a=e.firstChild;)b.insertBefore(e.removeChild(a),e);b.removeChild(e)}return this},replace:function(a){this.insertBefore(a);a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(b-e.length); -this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(e.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove();continue}}break}if(CKEDITOR.env.needsBrFiller)(a=this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(){var a= -this;this.type!=CKEDITOR.NODE_ELEMENT&&(a=this.getParent());if(a&&typeof a.$.isContentEditable!="undefined")return!(a.$.isContentEditable||a.data("cke-editable"));for(;a;){if(a.data("cke-editable"))break;if(a.getAttribute("contentEditable")=="false")return true;if(a.getAttribute("contentEditable")=="true")break;a=a.getParent()}return!a}});CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject; -CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,e=a.compatMode=="CSS1Compat";return{width:(e?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(e?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop|| -a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject; -CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var e=new CKEDITOR.dom.element("link");e.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(e)}},appendStyleText:function(a){if(this.$.createStyleSheet){var e=this.$.createStyleSheet("");e.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return e|| -b.$.sheet},createElement:function(a,e){var b=new CKEDITOR.dom.element(a,this);if(e){e.attributes&&b.setAttributes(e.attributes);e.styles&&b.setStyles(e.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(e){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,e){for(var b= -this.$.documentElement,c=0;b&&c<a.length;c++){var f=a[c];if(e)for(var d=-1,g=0;g<b.childNodes.length;g++){var h=b.childNodes[g];if(!(e===true&&h.nodeType==3&&h.previousSibling&&h.previousSibling.nodeType==3)){d++;if(d==f){b=h;break}}}else b=b.childNodes[f]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,e){!(CKEDITOR.env.ie&&document.documentMode<=8)&&e&&(a=e+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; -return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+ -CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; -CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))}; -CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,e){var b=new CKEDITOR.dom.element("div",e);b.setHtml(a);return b.getFirst().remove()}; -CKEDITOR.dom.element.setMarker=function(a,e,b,c){var f=e.getCustomData("list_marker_id")||e.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),d=e.getCustomData("list_marker_names")||e.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[f]=e;d[b]=1;return e.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var e in a)CKEDITOR.dom.element.clearMarkers(a,a[e],1)}; -CKEDITOR.dom.element.clearMarkers=function(a,e,b){var c=e.getCustomData("list_marker_names"),f=e.getCustomData("list_marker_id"),d;for(d in c)e.removeCustomData(d);e.removeCustomData("list_marker_names");if(b){e.removeCustomData("list_marker_id");delete a[f]}}; -(function(){function a(a){var d=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();d=false}return function(){d||a.removeAttribute("id")}}function e(a,d){return"#"+a.$.id+" "+d.split(/,\s*/).join(", #"+a.$.id+" ")}function b(a){for(var d=0,b=0,e=c[a].length;b<e;b++)d=d+(parseInt(this.getComputedStyle(c[a][b])||0,10)||0);return d}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var d=this.$.className;d&&(RegExp("(?:^|\\s)"+a+"(?:\\s|$)", -"").test(d)||(d=d+(" "+a)));this.$.className=d||a;return this},removeClass:function(a){var d=this.getAttribute("class");if(d){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(d))(d=d.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,d){typeof a=="string"&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$,this.$.firstChild): -this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=null?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=this.getDocument().createElement("br"); -CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a){var d=new CKEDITOR.dom.range(this.getDocument());d.setStartAfter(this);d.setEndAfter(a);a=d.extractContents();d.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(f){}} -return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&& -(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(c){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p"); -a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a=this.$.attributes.getNamedItem(a); -return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}: -function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a===void 0){a= -parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<=8){var d=this.$.scopeName;d!="HTML"&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a}; -return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]== -a)return true;return false},isEditable:function(a){var d=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[d]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var d=this.clone(0,1),a=a.clone(0,1);d.removeAttributes(["_moz_dirty", -"data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode){d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return d.$.isEqualNode(a.$)}d=d.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var b=this.getParent();if(b.type==CKEDITOR.NODE_ELEMENT){b= -b.clone();b.setHtml(d);d=b.getHtml();b.setHtml(a);a=b.getHtml()}}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",d,b;if(a&&CKEDITOR.env.webkit){d=this.getWindow();if(!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement))a=(new CKEDITOR.dom.element(b)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false;for(var a=this.getChildren(),d=0,b=a.count();d< -b;d++){var c=a.getItem(d);if(!(c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-bookmark"))&&(c.type==CKEDITOR.NODE_ELEMENT&&!c.isEmptyInlineRemoveable()||c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return true;case "data-cke-expando":continue;default:if(b.specified)return true}}return false}: -function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return d>0&&(d>2||!b[a[0].nodeName]||d==2&&!b[a[1].nodeName])},hasAttribute:function(){function a(d){var f=this.$.attributes.getNamedItem(d);if(this.getName()=="input")switch(d){case "class":return this.$.className.length>0;case "checked":return!!this.$.checked;case "value":d=this.getAttribute("type");return d=="checkbox"||d=="radio"?this.$.value!="on":!!this.$.value}return!f?false:f.specified}return CKEDITOR.env.ie? -CKEDITOR.env.version<8?function(d){return d=="name"?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$,a=a.$;if(b!=a){var c;if(d)for(;c=b.lastChild;)a.insertBefore(b.removeChild(c),a.firstChild);else for(;c=b.firstChild;)a.appendChild(b.removeChild(c))}},mergeSiblings:function(){function a(d,f,b){if(f&&f.type==CKEDITOR.NODE_ELEMENT){for(var c=[];f.data("cke-bookmark")||f.isEmptyInlineRemoveable();){c.push(f); -f=b?f.getNext():f.getPrevious();if(!f||f.type!=CKEDITOR.NODE_ELEMENT)return}if(d.isIdentical(f)){for(var e=b?d.getLast():d.getFirst();c.length;)c.shift().move(d,!b);f.moveChildren(d,!b);f.remove();e&&e.type==CKEDITOR.NODE_ELEMENT&&e.mergeSiblings()}}}return function(d){if(d===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a, -f){this.$.setAttribute(a,f);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){d=="class"?this.$.className=b:d=="style"?this.$.style.cssText=b:d=="tabindex"?this.$.tabIndex=b:d=="checked"?this.$.checked=b:d=="contenteditable"?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if(d=="src"&&b.match(/^http:\/\//))try{a.apply(this,arguments)}catch(c){}else a.apply(this,arguments); -return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var d=0;d< -a.length;d++)this.removeAttribute(a[d]);else for(d in a)a.hasOwnProperty(d)&&this.removeAttribute(d)},removeStyle:function(a){var d=this.$.style;if(!d.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var b=["top","left","right","bottom"],c;a=="border"&&(c=["color","style","width"]);for(var d=[],e=0;e<b.length;e++)if(c)for(var j=0;j<c.length;j++)d.push([a,b[e],c[j]].join("-"));else d.push([a,b[e]].join("-"));for(a=0;a<d.length;a++)this.removeStyle(d[a])}else{d.removeProperty?d.removeProperty(a): -d.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,d){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=d;return this},setStyles:function(a){for(var d in a)this.setStyle(d,a[d]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", -"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,d=this.getElementsByTag("*"),b=0,c=d.count();b<c;b++){a=d.getItem(b);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var d=0,b=0,c=this.getDocument(),e=c.getBody(),j=c.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var p= -this.$.getBoundingClientRect(),u=c.$.documentElement,t=u.clientTop||e.$.clientTop||0,y=u.clientLeft||e.$.clientLeft||0,n=true;if(CKEDITOR.env.ie){n=c.getDocumentElement().contains(this);c=c.getBody().contains(this);n=j&&c||!j&&n}if(n){d=p.left+(!j&&u.scrollLeft||e.$.scrollLeft);d=d-y;b=p.top+(!j&&u.scrollTop||e.$.scrollTop);b=b-t}}else{e=this;for(c=null;e&&!(e.getName()=="body"||e.getName()=="html");){d=d+(e.$.offsetLeft-e.$.scrollLeft);b=b+(e.$.offsetTop-e.$.scrollTop);if(!e.equals(this)){d=d+(e.$.clientLeft|| -0);b=b+(e.$.clientTop||0)}for(;c&&!c.equals(e);){d=d-c.$.scrollLeft;b=b-c.$.scrollTop;c=c.getParent()}c=e;e=(p=e.$.offsetParent)?new CKEDITOR.dom.element(p):null}}if(a){e=this.getWindow();c=a.getWindow();if(!e.equals(c)&&e.$.frameElement){a=(new CKEDITOR.dom.element(e.$.frameElement)).getDocumentPosition(a);d=d+a.x;b=b+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!j){d=d+(this.$.clientLeft?1:0);b=b+(this.$.clientTop?1:0)}return{x:d,y:b}},scrollIntoView:function(a){var b= -this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var e=c.$.frameElement;e&&(b=new CKEDITOR.dom.element(e))}catch(m){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var e,m,j,p;function u(b,d){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,d);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+d}} -function t(a,b){var d={x:0,y:0};if(!a.is(n?"body":"html")){var c=a.$.getBoundingClientRect();d.x=c.left;d.y=c.top}c=a.getWindow();if(!c.equals(b)){c=t(CKEDITOR.dom.element.get(c.$.frameElement),b);d.x=d.x+c.x;d.y=d.y+c.y}return d}function y(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());j=a.getDocument();var n=j.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=n?j.getBody():j.getDocumentElement());j=a.getWindow();m=t(this,j);var w=t(a,j),o=this.$.offsetHeight; -e=this.$.offsetWidth;var r=a.$.clientHeight,i=a.$.clientWidth;j=m.x-y(this,"left")-w.x||0;p=m.y-y(this,"top")-w.y||0;e=m.x+e+y(this,"right")-(w.x+i)||0;m=m.y+o+y(this,"bottom")-(w.y+r)||0;if(p<0||m>0)u(0,b===true?p:b===false?m:p<0?p:m);if(c&&(j<0||e>0))u(j<0?j:e,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled"); -break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)}, -copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},e=0;e<c.length;e++){var m=c[e],j=m.nodeName.toLowerCase(),p;if(!(j in b))if(j=="checked"&&(p=this.getAttribute(j)))a.setAttribute(j,p);else if(!CKEDITOR.env.ie||this.hasAttribute(j)){p=this.getAttribute(j);if(p===null)p=m.nodeValue;a.setAttribute(j,p)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a); -this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var f=b.childNodes;if(c>=0&&c<f.length)return f[c]}return function(b){var c=this.$;if(b.slice)for(;b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")|| -a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances,b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!= -CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null},find:function(b){var c=a(this),b=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(e(this,b)));c();return b},findOne:function(b){var c=a(this),b=this.$.querySelector(e(this,b));c();return b?new CKEDITOR.dom.element(b):null},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var e=a(this);if(e!==false)for(var c=this.getChildren(),m=0;m<c.count();m++){e=c.getItem(m);e.type==CKEDITOR.NODE_ELEMENT?e.forEach(a,b):(!b||e.type==b)&&a(e)}}});var c={width:["border-left-width", -"border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,c,e){if(typeof c=="number"){if(e&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-b.call(this,a);this.setStyle(a,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,c){var e=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(e=e-b.call(this,a));return e}})(); -CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a}; -CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); -(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,f=c.startContainer;d=c.endContainer;var e=c.startOffset,p=c.endOffset,i,k=this.guard,l=this.type,q=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var x=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),s=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(p):d.getNext();this._.guardLTR=function(a,b){return(!b||!x.equals(a))&&(!s|| -!a.equals(s))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var g=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),j=f.type==CKEDITOR.NODE_ELEMENT?e?f.getChild(e-1):null:f.getPrevious();this._.guardRTL=function(a,b){return(!b||!g.equals(a))&&(!j||!a.equals(j))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var m=a?this._.guardRTL:this._.guardLTR;i=k?function(a,b){return m(a,b)===false?false:k(a,b)}:m;if(this.current)d=this.current[q](false,l,i);else{if(a)d.type== -CKEDITOR.NODE_ELEMENT&&(d=p>0?d.getChild(p-1):i(d,true)===false?null:d.getPreviousSourceNode(true,l,i));else{d=f;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(e)))d=i(f,true)===false?null:f.getNextSourceNode(true,l,i)}d&&i(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator||this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[q](false,l,i)}this.end();return this.current=null}function e(b){for(var c,d=null;c=a.call(this,b);)d=c;return d} -function b(a){if(j(a))return false;if(a.type==CKEDITOR.NODE_TEXT)return true;if(a.type==CKEDITOR.NODE_ELEMENT){if(a.is(CKEDITOR.dtd.$inline)||a.is("hr")||a.getAttribute("contenteditable")=="false")return true;var b;if(b=!CKEDITOR.env.needsBrFiller)if(b=a.is(p))a:{b=0;for(var c=a.getChildCount();b<c;++b)if(!j(a.getChild(b))){b=false;break a}b=true}if(b)return true}return false}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1}, -next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return e.call(this)},lastBackward:function(){return e.call(this,1)},reset:function(){delete this.current;this._={}}}});var c={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1, -"table-caption":1},f={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in f)&&c[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark= -function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var f,e;f=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(e=d.getParent())&&c(e);f=a?f:f||c(d);return!!(b^f)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit? -1:0;return function(d){if(b(d))d=1;else{d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());d=d.$.offsetWidth<=c}return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!g(a)&&!h(a)}return function(c){var f=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&d.test(c.getText());if(f){f=c.getParent();c=c.getNext(b);f=f.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^ -f)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var d=/^[\t\r\n ]*(?: |\xa0)$/,g=CKEDITOR.dom.walker.whitespaces(),h=CKEDITOR.dom.walker.bookmark(),m=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b=g(b)||h(b)||m(b);return!!(a^b)}};var j=CKEDITOR.dom.walker.ignored(),p=function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block); -CKEDITOR.dom.walker.editable=function(a){return function(c){return!!(a^b(c))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(h(a)||g(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&d.test(a.getText()))?a:false}})(); -CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var e=a instanceof CKEDITOR.dom.document;this.document=e?a:a.getDocument();this.root=e?a.getBody():a}; -(function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),f=CKEDITOR.dom.walker.bogus();return function(e){if(c(e)||b(e))return true;if(f(e)&&!a)return a=true;return e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(d)?false:true}}function e(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true:!a&&g(d)|| -d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&j(a)&&(b=a);return m(a)&&!(g(a)&&a.equals(b))})}}var c=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},f=function(a,b,c,d){a.optimizeBookmark();var f=a.startContainer,e=a.endContainer,o=a.startOffset,r=a.endOffset,i,k;if(e.type==CKEDITOR.NODE_TEXT)e=e.split(r); -else if(e.getChildCount()>0)if(r>=e.getChildCount()){e=e.append(a.document.createText(""));k=true}else e=e.getChild(r);if(f.type==CKEDITOR.NODE_TEXT){f.split(o);f.equals(e)&&(e=f.getNext())}else if(o)if(o>=f.getChildCount()){f=f.append(a.document.createText(""));i=true}else f=f.getChild(o).getPrevious();else{f=f.append(a.document.createText(""),1);i=true}var o=f.getParents(),r=e.getParents(),l,q,x;for(l=0;l<o.length;l++){q=o[l];x=r[l];if(!q.equals(x))break}for(var s=c,g,j,m,F=l;F<o.length;F++){g= -o[F];s&&!g.equals(f)&&(j=s.append(g.clone()));for(g=g.getNext();g;){if(g.equals(r[F])||g.equals(e))break;m=g.getNext();if(b==2)s.append(g.clone(true));else{g.remove();b==1&&s.append(g)}g=m}s&&(s=j)}s=c;for(c=l;c<r.length;c++){g=r[c];b>0&&!g.equals(e)&&(j=s.append(g.clone()));if(!o[c]||g.$.parentNode!=o[c].$.parentNode)for(g=g.getPrevious();g;){if(g.equals(o[c])||g.equals(f))break;m=g.getPrevious();if(b==2)s.$.insertBefore(g.$.cloneNode(true),s.$.firstChild);else{g.remove();b==1&&s.$.insertBefore(g.$, -s.$.firstChild)}g=m}s&&(s=j)}if(b==2){q=a.startContainer;if(q.type==CKEDITOR.NODE_TEXT){q.$.data=q.$.data+q.$.nextSibling.data;q.$.parentNode.removeChild(q.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(q&&x&&(f.$.parentNode!=q.$.parentNode||e.$.parentNode!=x.$.parentNode)){b=x.getIndex();i&&x.$.parentNode==f.$.parentNode&&b--;if(d&&q.type==CKEDITOR.NODE_ELEMENT){d=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none"> </span>', -a.document);d.insertAfter(q);q.mergeSiblings(false);a.moveToBookmark({startNode:d})}else a.setStart(x.getParent(),b)}a.collapse(true)}i&&f.remove();k&&e.$.parentNode&&e.remove()},d={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},g=CKEDITOR.dom.walker.bogus(),h=/^[\t\r\n ]*(?: |\xa0)$/,m=CKEDITOR.dom.walker.editable(),j=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype= -{clone:function(){var a=new CKEDITOR.dom.range(this.root);a.startContainer=this.startContainer;a.startOffset=this.startOffset;a.endContainer=this.endContainer;a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this.endContainer=this.startContainer;this.endOffset=this.startOffset}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed|| -f(this,2,a);return a},deleteContents:function(a){this.collapsed||f(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||f(this,1,b,a);return b},createBookmark:function(a){var b,c,d,f,e=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml(" ");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",d+(e?"C":"S"))}if(!e){c=b.clone();c.setHtml(" ");a&&c.setAttribute("id", -d+"E");f=this.clone();f.collapse();f.insertNode(c)}f=this.clone();f.collapse(true);f.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(e?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:e}},createBookmark2:function(){function a(b){var c=b.container,d=b.offset,f;f=c;var e=d;f=f.type!=CKEDITOR.NODE_ELEMENT||e===0||e==f.getChildCount()?0:f.getChild(e-1).type==CKEDITOR.NODE_TEXT&&f.getChild(e).type==CKEDITOR.NODE_TEXT; -if(f){c=c.getChild(d-1);d=c.getLength()}c.type==CKEDITOR.NODE_ELEMENT&&d>1&&(d=c.getChild(d-1).getIndex(true)+1);if(c.type==CKEDITOR.NODE_TEXT){f=c;for(e=0;(f=f.getPrevious())&&f.type==CKEDITOR.NODE_TEXT;)e=e+f.getLength();d=d+e}b.container=c;b.offset=d}return function(b){var c=this.collapsed,d={container:this.startContainer,offset:this.startOffset},f={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(f)}return{start:d.container.getAddress(b),end:c?null:f.container.getAddress(b), -startOffset:d.offset,endOffset:f.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}}, -getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,f;if(a.type==CKEDITOR.NODE_ELEMENT){f=a.getChildCount();if(f>c)a=a.getChild(c);else if(f<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){f=b.getChildCount();if(f>d)b=b.getChild(d).getPreviousSourceNode(true);else if(f<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b= -b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a): -this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,f=this.collapsed; -if((!a||f)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var e=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(e,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(f){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!f&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()|| -c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var e=this.getCommonAncestor(),o=this.root,r,i,k,l,q,x=false,s,g;s=this.startContainer;var j=this.startOffset;if(s.type==CKEDITOR.NODE_TEXT){if(j){s=!CKEDITOR.tools.trim(s.substring(0, -j)).length&&s;x=!!s}if(s&&!(l=s.getPrevious()))k=s.getParent()}else{j&&(l=s.getChild(j-1)||s.getLast());l||(k=s)}for(k=c(k);k||l;){if(k&&!l){!q&&k.equals(e)&&(q=true);if(f?k.isBlockBoundary():!o.contains(k))break;if(!x||k.getComputedStyle("display")!="inline"){x=false;q?r=k:this.setStartBefore(k)}l=k.getPrevious()}for(;l;){s=false;if(l.type==CKEDITOR.NODE_COMMENT)l=l.getPrevious();else{if(l.type==CKEDITOR.NODE_TEXT){g=l.getText();d.test(g)&&(l=null);s=/[\s\ufeff]$/.test(g)}else if((l.$.offsetWidth> -(CKEDITOR.env.webkit?1:0)||b&&l.is("br"))&&!l.data("cke-bookmark"))if(x&&CKEDITOR.dtd.$removeEmpty[l.getName()]){g=l.getText();if(d.test(g))l=null;else for(var j=l.$.getElementsByTagName("*"),m=0,F;F=j[m++];)if(!CKEDITOR.dtd.$removeEmpty[F.nodeName.toLowerCase()]){l=null;break}l&&(s=!!g.length)}else l=null;s&&(x?q?r=k:k&&this.setStartBefore(k):x=true);if(l){s=l.getPrevious();if(!k&&!s){k=l;l=null;break}l=s}else k=null}}k&&(k=c(k.getParent()))}s=this.endContainer;j=this.endOffset;k=l=null;q=x=false; -var h=function(a,b){var c=new CKEDITOR.dom.range(o);c.setStart(a,b);c.setEndAt(o,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return false;g=f!=a?f.getText():f.substring(b);if(d.test(g))return false}return true};if(s.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(s.substring(j)).length)x=true;else{x=!s.getLength();if(j==s.getLength()){if(!(l=s.getNext()))k= -s.getParent()}else h(s,j)&&(k=s.getParent())}else(l=s.getChild(j))||(k=s);for(;k||l;){if(k&&!l){!q&&k.equals(e)&&(q=true);if(f?k.isBlockBoundary():!o.contains(k))break;if(!x||k.getComputedStyle("display")!="inline"){x=false;q?i=k:k&&this.setEndAfter(k)}l=k.getNext()}for(;l;){s=false;if(l.type==CKEDITOR.NODE_TEXT){g=l.getText();h(l,0)||(l=null);s=/^[\s\ufeff]/.test(g)}else if(l.type==CKEDITOR.NODE_ELEMENT){if((l.$.offsetWidth>0||b&&l.is("br"))&&!l.data("cke-bookmark"))if(x&&CKEDITOR.dtd.$removeEmpty[l.getName()]){g= -l.getText();if(d.test(g))l=null;else{j=l.$.getElementsByTagName("*");for(m=0;F=j[m++];)if(!CKEDITOR.dtd.$removeEmpty[F.nodeName.toLowerCase()]){l=null;break}}l&&(s=!!g.length)}else l=null}else s=1;s&&x&&(q?i=k:this.setEndAfter(k));if(l){s=l.getNext();if(!k&&!s){k=l;l=null;break}l=s}else k=null}k&&(k=c(k.getParent()))}if(r&&i){e=r.contains(i)?i:r;this.setStartBefore(e);this.setEndAfter(e)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:k=new CKEDITOR.dom.range(this.root); -o=this.root;k.setStartAt(o,CKEDITOR.POSITION_AFTER_START);k.setEnd(this.startContainer,this.startOffset);k=new CKEDITOR.dom.walker(k);var J,A,E=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),v=null,z=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(v){if(v.equals(a)){v=null;return}}else v=a;else if(v)return;var b=E(a);b||(J=a);return b},f=function(a){var b=z(a);!b&&(a.is&&a.is("br"))&&(A=a);return b};k.guard=z;k=k.lastBackward(); -J=J||o;this.setStartAt(J,!J.is("br")&&(!k&&this.checkStartOfBlock()||k&&J.contains(k))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){k=this.clone();k=new CKEDITOR.dom.walker(k);var B=CKEDITOR.dom.walker.whitespaces(),D=CKEDITOR.dom.walker.bookmark();k.evaluator=function(a){return!B(a)&&!D(a)};if((k=k.previous())&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("br"))break}k=this.clone();k.collapse();k.setEndAt(o,CKEDITOR.POSITION_BEFORE_END);k=new CKEDITOR.dom.walker(k); -k.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?f:z;J=v=A=null;k=k.lastForward();J=J||o;this.setEndAt(J,!k&&this.checkEndOfBlock()||k&&J.contains(k)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);A&&this.setEndAfter(A)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,d=this.clone(),f=this.startContainer,e=this.endContainer,o=this.startOffset,g=this.endOffset,i=1,k=1;if(f&&f.type==CKEDITOR.NODE_TEXT)if(o)if(o>=f.getLength())d.setStartAfter(f);else{d.setStartBefore(f); -i=0}else d.setStartBefore(f);if(e&&e.type==CKEDITOR.NODE_TEXT)if(g)if(g>=e.getLength())d.setEndAfter(e);else{d.setEndAfter(e);k=0}else d.setEndBefore(e);var d=new CKEDITOR.dom.walker(d),l=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var q;d.guard=function(b,d){if(l(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(q)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()|| -b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!d&&b.type==CKEDITOR.NODE_ELEMENT&&(q=b);return true};if(i)(f=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(f,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(k){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!i&&!k)}},insertNode:function(a){this.optimizeBookmark();this.trim(false, -true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a, -b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this.startContainer=a;this.startOffset=b;if(!this.endContainer){this.endContainer=a;this.endOffset=b}c(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this.endContainer=a;this.endOffset=b;if(!this.startContainer){this.startContainer=a;this.startOffset=b}c(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+ -1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}c(this)}, -setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}c(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d); -d.trim();d.appendBogus();this.insertNode(d);this.moveToBookmark(c);return d},splitBlock:function(a){var b=new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),d=b.block,f=c.block,e=null;if(!b.blockLimit.equals(c.blockLimit))return null;if(a!="br"){if(!d){d=this.fixBlock(true,a);f=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}f||(f=this.fixBlock(false,a))}a=d&&this.checkStartOfBlock();b=f&&this.checkEndOfBlock(); -this.deleteContents();if(d&&d.equals(f))if(b){e=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(f,CKEDITOR.POSITION_AFTER_END);f=null}else if(a){e=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d=null}else{f=this.splitElement(d);d.is("ul","ol")||d.appendBogus()}return{previousBlock:d,nextBlock:f,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:e}},splitElement:function(a){if(!this.collapsed)return null; -this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(), -d=this[b?"endPath":"startPath"](),f=d.block||d.blockLimit,e;f&&!f.equals(d.root)&&!f.getFirst(a(f));){e=f.getParent();this[b?"setEndAt":"setStartAt"](f,CKEDITOR.POSITION_AFTER_END);f.remove(1);f=e}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var c=b==CKEDITOR.START,d=this.clone();d.collapse(c);d[c?"setStartAt": -"setEndAt"](a,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=e(c);return d[c?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0,c));h.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit, -CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));h.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()}, -getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")== -"false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&& -this.checkEndOfBlock()&&h.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if(a.getAttribute("contenteditable")=="false"&& -a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,f=c,e=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(e=d[b?"getLast":"getFirst"](j));!f&&!e&&(e=d[b?"getPrevious":"getNext"](j));a=e}return!!c},moveToClosestEditablePosition:function(a,b){var c=new CKEDITOR.dom.range(this.root),d=0,f,e=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];c.moveToPosition(a,e[b?0:1]);if(a.is(CKEDITOR.dtd.$block)){if(f=c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d= -1;if(f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)&&f.getAttribute("contenteditable")=="false"){c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(f,CKEDITOR.POSITION_AFTER_END)}else c.moveToPosition(f,e[b?1:0])}}else d=1;d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!= -CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer; -return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:b(),getPreviousEditableNode:b(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span> </span>",this.document),b,c,d,f=this.clone();f.optimize();if(d=f.startContainer.type==CKEDITOR.NODE_TEXT){c=f.startContainer.getText();b=f.startContainer.split(f.startOffset);a.insertAfter(f.startContainer)}else f.insertNode(a);a.scrollIntoView();if(d){f.startContainer.setText(c); -b.remove()}a.remove()}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict"; -(function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function e(a,b,c){for(a=a.getNextSourceNode(b,null,c);!g(a);)a=a.getNextSourceNode(b,null,c);return a}function b(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function c(a,d,f,e){a:{e==null&&(e=b(f));for(var g;g=e.shift();)if(g.getDtd().p){e={element:g,remaining:e}; -break a}e=null}if(!e)return 0;if((g=CKEDITOR.filter.instances[e.element.data("cke-filter")])&&!g.check(d))return c(a,d,f,e.remaining);d=new CKEDITOR.dom.range(e.element);d.selectNodeContents(e.element);d=d.createIterator();d.enlargeBr=a.enlargeBr;d.enforceRealBlocks=a.enforceRealBlocks;d.activeFilter=d.filter=g;a._.nestedEditable={element:e.element,container:f,remaining:e.remaining,iterator:d};return 1}function f(a,b,c){if(!b)return false;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b, -c?CKEDITOR.START:CKEDITOR.END)}var d=/^[\r\n\t ]+$/,g=CKEDITOR.dom.walker.bookmark(false,true),h=CKEDITOR.dom.walker.whitespaces(true),m=function(a){return g(a)&&h(a)},j={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var b,h,y,n,w,a=a||"p";if(this._.nestedEditable){if(b=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return b}this.activeFilter=this.filter;if(c(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter= -this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable=null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var o=this.range.clone();h=o.startPath();var r=o.endPath(),i=!o.collapsed&&f(o,h.block),k=!o.collapsed&&f(o,r.block,1);o.shrink(CKEDITOR.SHRINK_ELEMENT,true);i&&o.setStartAt(h.block,CKEDITOR.POSITION_BEFORE_END);k&&o.setEndAt(r.block,CKEDITOR.POSITION_AFTER_START);h=o.endContainer.hasAscendant("pre",true)|| -o.startContainer.hasAscendant("pre",true);o.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!o.collapsed){h=new CKEDITOR.dom.walker(o.clone());r=CKEDITOR.dom.walker.bookmark(true,true);h.evaluator=r;this._.nextNode=h.next();h=new CKEDITOR.dom.walker(o.clone());h.evaluator=r;h=h.previous();this._.lastNode=h.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&& -this._.lastNode.getParent().isBlockBoundary()){r=this.range.clone();r.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END);if(r.checkEndOfBlock()){r=new CKEDITOR.dom.elementPath(r.endContainer,r.root);this._.lastNode=(r.block||r.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!o.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=o.document.createText("");this._.lastNode.insertAfter(h)}o=null}this._.started=1;h=o}r=this._.nextNode;o=this._.lastNode;for(this._.nextNode= -null;r;){var i=0,k=r.hasAscendant("pre"),l=r.type!=CKEDITOR.NODE_ELEMENT,q=0;if(l)r.type==CKEDITOR.NODE_TEXT&&d.test(r.getText())&&(l=0);else{var x=r.getName();if(CKEDITOR.dtd.$block[x]&&r.getAttribute("contenteditable")=="false"){b=r;c(this,a,b);break}else if(r.isBlockBoundary(this.forceBrBreak&&!k&&{br:1})){if(x=="br")l=1;else if(!h&&!r.getChildCount()&&x!="hr"){b=r;y=r.equals(o);break}if(h){h.setEndAt(r,CKEDITOR.POSITION_BEFORE_START);if(x!="br")this._.nextNode=r}i=1}else{if(r.getFirst()){if(!h){h= -this.range.clone();h.setStartAt(r,CKEDITOR.POSITION_BEFORE_START)}r=r.getFirst();continue}l=1}}if(l&&!h){h=this.range.clone();h.setStartAt(r,CKEDITOR.POSITION_BEFORE_START)}y=(!i||l)&&r.equals(o);if(h&&!i)for(;!r.getNext(m)&&!y;){x=r.getParent();if(x.isBlockBoundary(this.forceBrBreak&&!k&&{br:1})){i=1;l=0;y||x.equals(o);h.setEndAt(x,CKEDITOR.POSITION_BEFORE_END);break}r=x;l=1;y=r.equals(o);q=1}l&&h.setEndAt(r,CKEDITOR.POSITION_AFTER_END);r=e(r,q,o);if((y=!r)||i&&h)break}if(!b){if(!h){this._.docEndMarker&& -this._.docEndMarker.remove();return this._.nextNode=null}b=new CKEDITOR.dom.elementPath(h.startContainer,h.root);r=b.blockLimit;i={div:1,th:1,td:1};b=b.block;if(!b&&r&&!this.enforceRealBlocks&&i[r.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!r.equals(h.root))b=r;else if(!b||this.enforceRealBlocks&&b.is(j)){b=this.range.document.createElement(a);h.extractContents().appendTo(b);b.trim();h.insertNode(b);n=w=true}else if(b.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){b= -b.clone(false);h.extractContents().appendTo(b);b.trim();w=h.splitBlock();n=!w.wasStartOfBlock;w=!w.wasEndOfBlock;h.insertNode(b)}}else if(!y)this._.nextNode=b.equals(o)?null:e(h.getBoundaryNodes().endNode,1,o)}if(n)(n=b.getPrevious())&&n.type==CKEDITOR.NODE_ELEMENT&&(n.getName()=="br"?n.remove():n.getLast()&&n.getLast().$.nodeName.toLowerCase()=="br"&&n.getLast().remove());if(w)(n=b.getLast())&&n.type==CKEDITOR.NODE_ELEMENT&&n.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||n.getPrevious(g)||n.getNext(g))&& -n.remove();if(!this._.nextNode)this._.nextNode=y||b.equals(o)||!o?null:e(b,1,o);return b}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); -CKEDITOR.command=function(a,e){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:e.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&& -this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:e.refresh&&e.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(c){return!c&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,e,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!e.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; -CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? -this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; -CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; -(function(){function a(a,b,c,d,f){var e,i,a=[];for(e in b){i=b[e];i=typeof i=="boolean"?{}:typeof i=="function"?{match:i}:Q(i);if(e.charAt(0)!="$")i.elements=e;if(c)i.featureName=c.toLowerCase();var q=i;q.elements=g(q.elements,/\s+/)||null;q.propertiesOnly=q.propertiesOnly||q.elements===true;var o=/\s*,\s*/,k=void 0;for(k in v){q[k]=g(q[k],o)||null;var l=q,B=z[k],s=g(q[z[k]],o),n=q[k],x=[],A=true,h=void 0;s?A=false:s={};for(h in n)if(h.charAt(0)=="!"){h=h.slice(1);x.push(h);s[h]=true;A=false}for(;h= -x.pop();){n[h]=n["!"+h];delete n["!"+h]}l[B]=(A?false:s)||null}q.match=q.match||null;d.push(i);a.push(i)}for(var b=f.elements,f=f.generic,D,c=0,d=a.length;c<d;++c){e=Q(a[c]);i=e.classes===true||e.styles===true||e.attributes===true;q=e;k=B=o=void 0;for(o in v)q[o]=r(q[o]);l=true;for(k in z){o=z[k];B=q[o];s=[];n=void 0;for(n in B)n.indexOf("*")>-1?s.push(RegExp("^"+n.replace(/\*/g,".*")+"$")):s.push(n);B=s;if(B.length){q[o]=B;l=false}}q.nothingRequired=l;q.noProperties=!(q.attributes||q.classes||q.styles); -if(e.elements===true||e.elements===null)f[i?"unshift":"push"](e);else{q=e.elements;delete e.elements;for(D in q)if(b[D])b[D][i?"unshift":"push"](e);else b[D]=[e]}}}function e(a,c,d,f){if(!a.match||a.match(c))if(f||h(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;f=d.validClasses;if(a)if(a===true)a=true;else{for(var e=0, -i=c.length,q;e<i;++e){q=c[e];f[q]||(f[q]=a(q))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return false;c.hadInvalidAttribute=f(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=f(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var d=false,e=a===true,i=b.length;i--;)if(e||a(b[i])){b.splice(i,1);d= -true}a=d}else a=false;c.hadInvalidClass=a||c.hadInvalidClass}}function f(a,b){if(!a)return false;var c=false,d=a===true,f;for(f in b)if(d||a(f)){delete b[f];c=true}return c}function d(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function g(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=J(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a): -false;var c={},d=0,f;for(f in a){c[f]=a[f];d++}return d?c:false}function h(a,b){if(a.nothingRequired)return true;var c,d,f,e;if(f=a.requiredClasses){e=b.classes;for(c=0;c<f.length;++c){d=f[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(e,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(e,d))return false}}return m(b.styles,a.requiredStyles)&&m(b.attributes,a.requiredAttributes)}function m(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in -a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function j(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=A;return b}function p(a){for(var b,c,d,f,e={},i=1,a=J(a);b=a.match(B);){if(c=b[2]){d=u(c,"styles");f=u(c,"attrs");c=u(c,"classes")}else d=f=c=null;e["$"+i++]={elements:b[1],classes:c,styles:d,attributes:f};a=a.slice(b[0].length)}return e}function u(a,b){var c=a.match(D[b]);return c?J(c[1]):null}function t(a){var b= -a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function y(a,b,d,f){var i=0,k;if(f.toHtml)b.name=b.name.replace(G,"$1");if(f.doCallbacks&&a.elementCallbacks){a:for(var l=a.elementCallbacks,B=0,s=l.length,g;B<s;++B)if(g=l[B](b)){k=g;break a}if(k)return k}if(f.doTransform)if(k=a._.transformations[b.name]){t(b);for(l=0;l<k.length;++l)q(a,b,k[l]);w(b)}if(f.doFilter){a:{l=b.name; -B=a._;a=B.allowedRules.elements[l];k=B.allowedRules.generic;l=B.disallowedRules.elements[l];B=B.disallowedRules.generic;s=f.skipRequired;g={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var n,r;if(!a&&!k)a=null;else{t(b);if(l){n=0;for(r=l.length;n<r;++n)if(c(l[n],b,g)===false){a=null;break a}}if(B){n=0;for(r=B.length;n<r;++n)c(B[n],b,g)}if(a){n=0;for(r=a.length;n< -r;++n)e(a[n],b,g,s)}if(k){n=0;for(r=k.length;n<r;++n)e(k[n],b,g,s)}a=g}}if(!a){d.push(b);return F}if(!a.valid){d.push(b);return F}r=a.validAttributes;var x=a.validStyles;k=a.validClasses;var l=b.attributes,A=b.styles,B=b.classes,s=b.classBackup,z=b.styleBackup,v,h,D=[];g=[];var j=/^data-cke-/;n=false;delete l.style;delete l["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(v in l)if(!r[v])if(j.test(v)){if(v!=(h=v.replace(/^data-cke-saved-/,""))&&!r[h]){delete l[v];n=true}}else{delete l[v]; -n=true}if(!a.allStyles||a.hadInvalidStyle){for(v in A)a.allStyles||x[v]?D.push(v+":"+A[v]):n=true;if(D.length)l.style=D.sort().join("; ")}else if(z)l.style=z;if(!a.allClasses||a.hadInvalidClass){for(v=0;v<B.length;++v)(a.allClasses||k[B[v]])&&g.push(B[v]);g.length&&(l["class"]=g.sort().join(" "));s&&g.length<s.split(/\s+/).length&&(n=true)}else s&&(l["class"]=s);n&&(i=F);if(!f.skipFinalValidation&&!o(b)){d.push(b);return F}}if(f.toHtml)b.name=b.name.replace(aa,"cke:$1");return i}function n(a){var b= -[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function w(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function o(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function r(a){if(!a)return false;if(a===true)return true; -var b=n(a);return function(c){return c in a||b&&c.match(b)}}function i(){return new CKEDITOR.htmlParser.element("br")}function k(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||N.$block[a.name])}function l(a,b,c){var d=a.name;if(N.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(i());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(N.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!k(a.previous)){b=i();b.insertBefore(a)}if(a.next&&!k(a.next)){b=i();b.insertAfter(a)}a.replaceWithChildren()}else{var d= -a.children,f;b:{f=N[b];for(var e=0,q=d.length,o;e<q;++e){o=d[e];if(o.type==CKEDITOR.NODE_ELEMENT&&!f[o.name]){f=false;break b}}f=true}if(f){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{f=a.parent;for(var e=f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||f.name=="body",l,q=d.length;q>0;){o=d[--q];if(e&&(o.type==CKEDITOR.NODE_TEXT||o.type==CKEDITOR.NODE_ELEMENT&&N.$inline[o.name])){if(!l){l=new CKEDITOR.htmlParser.element(b);l.insertAfter(a);c.push({check:"parent-down",el:l})}l.add(o,0)}else{l= -null;o.insertAfter(a);f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(o.type==CKEDITOR.NODE_ELEMENT&&!N[f.name][o.name])&&c.push({check:"el-up",el:o})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function q(a,b,c){var d,f;for(d=0;d<c.length;++d){f=c[d];if((!f.check||a.check(f.check,false))&&(!f.left||f.left(b))){f.right(b,ba);break}}}function x(a,b){var c=b.getDefinition(),d=c.attributes,f=c.styles,e,i,q,o;if(a.name!=c.element)return false; -for(e in d)if(e=="class"){c=d[e].split(/\s+/);for(q=a.classes.join("|");o=c.pop();)if(q.indexOf(o)==-1)return false}else if(a.attributes[e]!=d[e])return false;for(i in f)if(a.styles[i]!=f[i])return false;return true}function s(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function M(a){return function(b){return x(b,a)}}function R(a){return function(b,c){c[a](b)}}var N=CKEDITOR.dtd, -F=1,Q=CKEDITOR.tools.copy,J=CKEDITOR.tools.trim,A="cke-test",E=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a=this.editor=a; -this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(E[a.enterMode]+" "+E[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,f){if(!d(this,b,f))return false;var e,i;if(typeof b=="string")b=p(b); -else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,f);e=b.getDefinition();b={};f=e.attributes;b[e.element]=e={styles:e.styles,requiredStyles:e.styles&&CKEDITOR.tools.objectKeys(e.styles)};if(f){f=Q(f);e.classes=f["class"]?f["class"].split(/\s+/):null;e.requiredClasses=e.classes;delete f["class"];e.attributes=f;e.requiredAttributes=f&&CKEDITOR.tools.objectKeys(f)}}else if(CKEDITOR.tools.isArray(b)){for(e=0;e<b.length;++e)i=this.allow(b[e], -c,f);return i}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var f=this,e=[],i=this.editor&&this.editor.config.protectedSource,q,k=false,B={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){q=y(f,a,e,B);if(q&F)k= -true;else if(q&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var o,l,n;if(i)for(l=0;l<i.length;++l)if((n=d.match(i[l]))&&n[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(o=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&y(f,o,c,B);c=!c.length}c||e.push(a)}},null,true);e.length&&(k=true);for(var n,a=[],d=E[d||(this.editor? -this.editor.enterMode:CKEDITOR.ENTER_P)];c=e.pop();)c.type==CKEDITOR.NODE_ELEMENT?l(c,d,a):c.remove();for(;n=a.pop();){c=n.el;if(c.parent)switch(n.check){case "it":N.$removeEmpty[c.name]&&!c.children.length?l(c,d,a):o(c)||l(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!N[c.parent.name][c.name]&&l(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!N[c.parent.name][c.name]&&l(c.parent,d,a)}}return k},checkFeature:function(a){if(this.disabled|| -!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!d(this,b,true))return false;typeof b=="string"&&(b=p(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],f;for(b=0;b<a.length&&!f;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))f=c}if(f){for(b=0;b<a.length;++b)d.push(s(a[b], -f));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b, -c;if(!this.disabled&&a){var d=this._.transformations,f;for(f=0;f<a.length;++f){b=a[f];var e=void 0,i=void 0,q=void 0,o=void 0,l=void 0,k=void 0;c=[];for(i=0;i<b.length;++i){q=b[i];if(typeof q=="string"){q=q.split(/\s*:\s*/);o=q[0];l=null;k=q[1]}else{o=q.check;l=q.left;k=q.right}if(!e){e=q;e=e.element?e.element:o?o.match(/^([a-z0-9]+)/i)[0]:e.left.getDefinition().element}l instanceof CKEDITOR.style&&(l=M(l));c.push({check:o==e?null:o,left:l,right:typeof k=="string"?R(k):k})}b=e;d[b]||(d[b]=[]);d[b].push(c)}}}, -check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var f,e;if(typeof a=="string"){e=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(e in this._.cachedChecks)return this._.cachedChecks[e];d=p(a).$1;f=d.styles;var i=d.classes;d.name=d.elements;d.classes=i=i?i.split(/\s*,\s*/):[];d.styles=j(f);d.attributes=j(d.attributes);d.children=[];i.length&&(d.attributes["class"]=i.join(" "));if(f)d.attributes.style= -CKEDITOR.tools.writeCssText(d.styles);f=d}else{d=a.getDefinition();f=d.styles;i=d.attributes||{};if(f){f=Q(f);i.style=CKEDITOR.tools.writeCssText(f,true)}else f={};f={name:d.element,attributes:i,classes:i["class"]?i["class"].split(/\s+/):[],styles:f,children:[]}}var i=CKEDITOR.tools.clone(f),o=[],l;if(b!==false&&(l=this._.transformations[f.name])){for(d=0;d<l.length;++d)q(this,f,l[d]);w(f)}y(this,i,o,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=o.length>0?false: -CKEDITOR.tools.objectCompare(f.attributes,i.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[e]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var f=a.slice(),e;if(this.check(E[c]))return c;for(d||(f=f.reverse());e=f.pop();)if(this.check(e))return b[e];return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; -delete this.disallowedContent}};var v={styles:1,attributes:1,classes:1},z={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},B=/^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,D={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},G=/^cke:(object|embed|param)$/,aa=/^(object|embed|param)$/,ba=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, -"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],f=d&&d.match(/^(\d+)(?:\.\d*)?px$/);f?a.attributes[c]=f[1]:d==A&&(a.attributes[c]=A)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b= -a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:x,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,f=c.attributes,e,i,q,o;a.name=c.element;for(e in f)if(e=="class"){c=a.classes.join("|");for(q=f[e].split(/\s+/);o=q.pop();)c.indexOf(o)==-1&& -a.classes.push(o)}else a.attributes[e]=f[e];for(i in d)a.styles[i]=d[i]}}}})(); -(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true;(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}}, -lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function e(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?e.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;e.call(this)},b,this)}},add:function(a,e){var b=a.getCustomData("focusmanager");if(!b|| -b!=this){b&&b.remove(a);var b="focus",c="blur";if(e)if(CKEDITOR.env.ie){b="focusin";c="focusout"}else CKEDITOR.event.useCapture=1;var f={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,f.focus,this);a.on(c,f.blur,this);if(e)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",f)}},remove:function(a){a.removeCustomData("focusmanager");var e=a.removeCustomData("focusmanager_handlers");a.removeListener("blur", -e.blur);a.removeListener("focus",e.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this}; -(function(){var a,e=function(b){var b=b.data,f=b.getKeystroke(),d=this.keystrokes[f],e=this._.editor;a=e.fire("key",{keyCode:f,domEvent:b})===false;if(!a){d&&(a=e.execCommand(d,{from:"keystrokeHandler"})!==false);a||(a=!!this.blockedKeystrokes[f])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",e,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})(); -(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,e,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(e, -a);var c=this,e=function(){c[a].dir=c.rtl[a]?"rtl":"ltr";b(a,c[a])};this[a]?e():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),e,this)},detect:function(a,e){var b=this.languages,e=e||navigator.userLanguage||navigator.language||a,c=e.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),f=c[1],c=c[2];b[f+"-"+c]?f=f+"-"+c:b[f]||(f=null);CKEDITOR.lang.detect=f?function(){return f}:function(a){return a};return f||a}}})(); -CKEDITOR.scriptLoader=function(){var a={},e={};return{load:function(b,c,f,d){var g=typeof b=="string";g&&(b=[b]);f||(f=CKEDITOR);var h=b.length,m=[],j=[],p=function(a){c&&(g?c.call(f,a):c.call(f,m,j))};if(h===0)p(true);else{var u=function(a,b){(b?m:j).push(a);if(--h<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");p(b)}},t=function(b,c){a[b]=1;var d=e[b];delete e[b];for(var f=0;f<d.length;f++)d[f](b,c)},y=function(b){if(a[b])u(b,true);else{var d=e[b]||(e[b]=[]);d.push(u);if(!(d.length> -1)){var f=new CKEDITOR.dom.element("script");f.setAttributes({type:"text/javascript",src:b});if(c)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)f.$.onreadystatechange=function(){if(f.$.readyState=="loaded"||f.$.readyState=="complete"){f.$.onreadystatechange=null;t(b,true)}};else{f.$.onload=function(){setTimeout(function(){t(b,true)},0)};f.$.onerror=function(){t(b,false)}}f.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var n=0;n<h;n++)y(b[n])}}, -queue:function(){function a(){var b;(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(f,d){var e=this;c.push({scriptUrl:f,callback:function(){d&&d.apply(this,arguments);c.shift();a.call(e)}});c.length==1&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,e){this.basePath=a;this.fileName=e;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}}; -CKEDITOR.resourceManager.prototype={add:function(a,e){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=e||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(e&&e.dir||this.basePath+a+"/")},getFilePath:function(a){var e=this.externals[a]; -return CKEDITOR.getUrl(this.getPath(a)+(e?e.file:this.fileName+".js"))},addExternal:function(a,e,b){for(var a=a.split(","),c=0;c<a.length;c++){var f=a[c];b||(e=e.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[f]={dir:e,file:b||this.fileName+".js"}}},load:function(a,e,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,f=this.registered,d=[],g={},h={},m=0;m<a.length;m++){var j=a[m];if(j)if(!c[j]&&!f[j]){var p=this.getFilePath(j);d.push(p);p in g||(g[p]=[]);g[p].push(j)}else h[j]= -this.get(j)}CKEDITOR.scriptLoader.load(d,function(a,d){if(d.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+g[d[0]].join(",")+'" was not found at "'+d[0]+'".';for(var f=0;f<a.length;f++)for(var n=g[a[f]],j=0;j<n.length;j++){var o=n[j];h[o]=this.get(o);c[o]=1}e.call(b,h)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"); -CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var e={};return function(b,c,f){var d={},g=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(d,a);var b=[],h;for(h in a){var u=a[h],t=u&&u.requires;if(!e[h]){if(u.icons)for(var y=u.icons.split(","),n=y.length;n--;)CKEDITOR.skin.addIcon(y[n],u.path+"icons/"+(CKEDITOR.env.hidpi&&u.hidpi?"hidpi/":"")+y[n]+".png");e[h]=1}if(t){t.split&&(t=t.split(","));for(u=0;u<t.length;u++)d[t[u]]||b.push(t[u])}}if(b.length)g.call(this, -b);else{for(h in d){u=d[h];if(u.onLoad&&!u.onLoad._called){u.onLoad()===false&&delete d[h];u.onLoad._called=1}}c&&c.call(f||window,d)}},this)};g.call(this,b)}});CKEDITOR.plugins.setLang=function(a,e,b){var c=this.get(a),a=c.langEntries||(c.langEntries={}),c=c.lang||(c.lang=[]);c.split&&(c=c.split(","));CKEDITOR.tools.indexOf(c,e)==-1&&c.push(e);a[e]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this}; -CKEDITOR.ui.prototype={add:function(a,e,b){b.name=a.toLowerCase();var c=this.items[a]={type:e,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var e=this.items[a],b=e&&this._.handlers[e.type],c=e&&e.command&&this.editor.getCommand(e.command),b=b&&b.create.apply(this,e.args);this.instances[a]=b;c&&c.uiItems.push(b);if(b&&!b.type)b.type=e.type;return b},addHandler:function(a,e){this._.handlers[a]= -e},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+"_"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui); -(function(){function a(a,c,d){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(c!==void 0){if(c instanceof CKEDITOR.dom.element){if(!d)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&d==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(d==CKEDITOR.ELEMENT_MODE_INLINE?c.is(CKEDITOR.dtd.$editable)||c.is("textarea"):d==CKEDITOR.ELEMENT_MODE_REPLACE? -!c.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=d;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||e();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this); -this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){f(this,a.data.path)});this.on("activeFilterChange",function(){f(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){g(this,a)},0,this)}function e(){do var a="editor"+ -++t;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)c(this,a[b])}function c(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function f(a,b,c){if(b){var d,f,e=a.commands;for(f in e){d=e[f];(c||d.contextSensitive)&&d.refresh(a,b)}}}function d(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=y[b]||(y[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b|| -!d(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};d(a)});return true}function g(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=!(!c.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled"):a.element.isReadOnly():a.elementMode== -CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.hasAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor= -new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);h(a)});if(b&&b.customConfig!=null)a.config.customConfig=b.customConfig;d(a)||a.fireOnce("customConfigLoaded")}function h(a){CKEDITOR.skin.loadPart("editor",function(){m(a)})}function m(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection= -a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");j(a)})}function j(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);p(a)})}function p(a){var b=a.config,c=b.plugins,d=b.extraPlugins,f=b.removePlugins;if(d)var e=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(e,""),c=c+(","+d);if(f)var l=RegExp("(?:^|,)(?:"+f.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(l,"");CKEDITOR.env.air&& -(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],f=[],e=[];a.plugins=c;for(var i in c){var o=c[i],k=o.lang,g=null,r=o.requires,A;CKEDITOR.tools.isArray(r)&&(r=r.join(","));if(r&&(A=r.match(l)))for(;r=A.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[r,i]);if(k&&!a.lang[i]){k.split&&(k=k.split(","));if(CKEDITOR.tools.indexOf(k,a.langCode)>= -0)g=a.langCode;else{g=a.langCode.replace(/-.*/,"");g=g!=a.langCode&&CKEDITOR.tools.indexOf(k,g)>=0?g:CKEDITOR.tools.indexOf(k,"en")>=0?"en":k[0]}if(!o.langEntries||!o.langEntries[g])e.push(CKEDITOR.getUrl(o.path+"lang/"+g+".js"));else{a.lang[i]=o.langEntries[g];g=null}}f.push(g);d.push(o)}CKEDITOR.scriptLoader.load(e,function(){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var i=0;i<d.length;i++){var q=d[i];e===0&&(f[i]&&q.lang&&q.langEntries)&&(a.lang[q.name]=q.langEntries[f[i]]); -if(q[c[e]])q[c[e]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(i=0;i<a.config.blockedKeystrokes.length;i++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[i]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function u(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b): -a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var t=0,y={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var d=new CKEDITOR.command(this,b);this.mode&&c(this,d);return this.commands[a]=d},_attachToForm:function(){function a(d){b.updateElement();b._.required&&(!c.getValue()&&b.fire("required")===false)&&d.data.preventDefault()}var b=this,c=b.element,d=new CKEDITOR.dom.element(c.$.form);if(c.is("textarea")&& -d){d.on("submit",a);if(d.$.submit&&d.$.submit.call&&d.$.submit.apply)d.$.submit=CKEDITOR.tools.override(d.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}});b.on("destroy",function(){d.removeListener("submit",a)})}},destroy:function(a){this.fire("beforeDestroy");!a&&u.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed", -null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec", -d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&& -(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=true,f=b;if(b&&typeof b=="object"){c=b.internal;f=b.callback;d=!b.noSnapshot}!c&&d&&this.fire("saveSnapshot");if(f||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");f&&f.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==null||a;if(this.readOnly!= -a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return u.call(this)}, -setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,f=b.length;f--;){c=b[f];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode), -a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}}})})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3; -CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))","g")}}; -(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,e={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,f,d=0,g;c=this._.htmlPartsRegex.exec(b);){f=c.index;if(f>d){d=b.substring(d,f);if(g)g.push(d);else this.onText(d)}d= -this._.htmlPartsRegex.lastIndex;if(f=c[1]){f=f.toLowerCase();if(g&&CKEDITOR.dtd.$cdata[f]){this.onCDATA(g.join(""));g=null}if(!g){this.onTagClose(f);continue}}if(g)g.push(c[0]);else if(f=c[3]){f=f.toLowerCase();if(!/="/.test(f)){var h={},m;c=c[4];var j=!!(c&&c.charAt(c.length-1)=="/");if(c)for(;m=a.exec(c);){var p=m[1].toLowerCase();m=m[2]||m[3]||m[4]||"";h[p]=!m&&e[p]?p:CKEDITOR.tools.htmlDecodeAttr(m)}this.onTagOpen(f,h,j);!g&&CKEDITOR.dtd.$cdata[f]&&(g=[])}}else if(f=c[2])this.onComment(f)}if(b.length> -d)this.onText(b.substring(d,b.length))}}})(); -CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,e){e?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,e){typeof e=="string"&&(e=CKEDITOR.tools.htmlEncodeAttr(e));this._.output.push(" ",a,'="',e,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)}, -reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var e=this._.output.join("");a&&this.reset();return e}}});"use strict"; -(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,e=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(e,1);this.parent=null},replaceWith:function(a){var e=this.parent.children,b=CKEDITOR.tools.indexOf(e,this),c=a.previous=this.previous,f=a.next=this.next;c&&(c.next=a);f&&(f.previous=a);e[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var e=a.parent.children, -b=CKEDITOR.tools.indexOf(e,a),c=a.next;e.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var e=a.parent.children,b=CKEDITOR.tools.indexOf(e,a);e.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var e=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&& -b.type==CKEDITOR.NODE_ELEMENT;){if(e(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}}; -CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,e){var b=this.value;if(!(b=a.onComment(e,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value=b;return true},writeHtml:function(a,e){e&&this.filter(e);a.comment(this.value)}});"use strict"; -(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,e){if(!(this.value=a.onText(e,this.value,this))){this.remove();return false}},writeHtml:function(a,e){e&&this.filter(e);a.text(this.value)}})})();"use strict"; -(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}}; -(function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var e=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),f={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= -function(d,g,h){function m(a){var b;if(o.length>0)for(var c=0;c<o.length;c++){var d=o[c],f=d.name,e=CKEDITOR.dtd[f],l=i.name&&CKEDITOR.dtd[i.name];if((!l||l[f])&&(!a||!e||e[a]||!CKEDITOR.dtd[a])){if(!b){j();b=1}d=d.clone();d.parent=i;i=d;o.splice(c,1);c--}else if(f==i.name){u(i,i.parent,1);c--}}}function j(){for(;r.length;)u(r.shift(),i)}function p(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))? -c.value=d:a.children.length=b-1}}function u(b,c,d){var c=c||i||w,f=i;if(b.previous===void 0){if(t(c,b)){i=c;n.onTagOpen(h,{});b.returnPoint=c=i}p(b);(!a(b)||b.children.length)&&c.add(b);b.name=="pre"&&(l=false);b.name=="textarea"&&(k=false)}if(b.returnPoint){i=b.returnPoint;delete b.returnPoint}else i=d?c:f}function t(a,b){if((a==w||a.name=="body")&&h&&(!a.name||CKEDITOR.dtd[a.name][h])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&& -!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function y(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var n=new CKEDITOR.htmlParser,w=g instanceof CKEDITOR.htmlParser.element?g:typeof g=="string"?new CKEDITOR.htmlParser.element(g):new CKEDITOR.htmlParser.fragment,o=[],r=[],i=w,k=w.name=="textarea",l=w.name=="pre";n.onTagOpen=function(d,f,g,h){f=new CKEDITOR.htmlParser.element(d,f);if(f.isUnknown&&g)f.isEmpty= -true;f.isOptionalClose=h;if(a(f))o.push(f);else{if(d=="pre")l=true;else{if(d=="br"&&l){i.add(new CKEDITOR.htmlParser.text("\n"));return}d=="textarea"&&(k=true)}if(d=="br")r.push(f);else{for(;;){h=(g=i.name)?CKEDITOR.dtd[g]||(i._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!f.isUnknown&&!i.isUnknown&&!h[d])if(i.isOptionalClose)n.onTagClose(g);else if(d in b&&g in b){g=i.children;(g=g[g.length-1])&&g.name=="li"||u(g=new CKEDITOR.htmlParser.element("li"),i);!f.returnPoint&&(f.returnPoint=i); -i=g}else if(d in CKEDITOR.dtd.$listItem&&!y(d,g))n.onTagOpen(d=="li"?"ul":"dl",{},0,1);else if(g in e&&!y(d,g)){!f.returnPoint&&(f.returnPoint=i);i=i.parent}else{g in CKEDITOR.dtd.$inline&&o.unshift(i);if(i.parent)u(i,i.parent,1);else{f.isOrphan=1;break}}else break}m(d);j();f.parent=i;f.isEmpty?u(f):i=f}}};n.onTagClose=function(a){for(var b=o.length-1;b>=0;b--)if(a==o[b].name){o.splice(b,1);return}for(var c=[],d=[],f=i;f!=w&&f.name!=a;){f._.isBlockLike||d.unshift(f);c.push(f);f=f.returnPoint||f.parent}if(f!= -w){for(b=0;b<c.length;b++){var e=c[b];u(e,e.parent)}i=f;f._.isBlockLike&&j();u(f,f.parent);if(f==i)i=i.parent;o=o.concat(d)}a=="body"&&(h=false)};n.onText=function(a){if((!i._.hasInlineStarted||r.length)&&!l&&!k){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=i.name,d=b?CKEDITOR.dtd[b]||(i._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!k&&!d["#"]&&b in e){n.onTagOpen(f[b]||"");n.onText(a)}else{j();m();!l&&!k&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a); -if(t(i,a))this.onTagOpen(h,{},0,1);i.add(a)}};n.onCDATA=function(a){i.add(new CKEDITOR.htmlParser.cdata(a))};n.onComment=function(a){j();m();i.add(new CKEDITOR.htmlParser.comment(a))};n.parse(d);for(j();i!=w;)u(i,i.parent,1);p(w);return w};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length=== -0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a, -c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var f=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(f,this);b&&this.filterChildren(b,false,f);b=0;c=this.children;for(f=c.length;b<f;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var f=a(this);if(f!==false)for(var c=this.children,e=0;e<c.length;e++){f=c[e];f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):(!b||f.type==b)&&a(f)}},getFilterContext:function(a){return a|| -{}}}})();"use strict"; -(function(){function a(){this.rules=[]}function e(b,c,f,d){var e,h;for(e in c){(h=b[e])||(h=b[e]=new a);h.add(c[e],f,d)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var f;if(typeof c=="number")f=c;else if(c&&"priority"in -c)f=c.priority;typeof f!="number"&&(f=10);typeof c!="object"&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,f,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,f,c);a.elements&&e(this.elementsRules,a.elements,f,c);a.attributes&&e(this.attributesRules,a.attributes,f,c);a.text&&this.textRules.add(a.text,f,c);a.comment&&this.commentRules.add(a.comment,f,c);a.root&&this.rootRules.add(a.root,f,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a, -c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,f){return this.textRules.exec(a,c,f)},onComment:function(a,c,f){return this.commentRules.exec(a,c,f)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var f=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],d,e=0;e<3;e++)if(d=f[e]){d=d.exec(a,c,this);if(d===false)return null;if(d&&d!=c)return this.onNode(a,d);if(c.parent&&!c.name)break}return c}, -onNode:function(a,c){var f=c.type;return f==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):f==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):f==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,f,d){return(f=this.attributesRules[f])?f.exec(a,d,c,this):d}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,f){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:f})},addMany:function(a, -c,f){for(var d=[this.findIndex(c),0],e=0,h=a.length;e<h;e++)d.push({value:a[e],priority:c,options:f});this.rules.splice.apply(this.rules,d)},findIndex:function(a){for(var c=this.rules,f=c.length-1;f>=0&&a<c[f].priority;)f--;return f+1},exec:function(a,c){var f=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,d=Array.prototype.slice.call(arguments,1),e=this.rules,h=e.length,m,j,p,u;for(u=0;u<h;u++){if(f){m=c.type;j=c.name}p=e[u];if(!(a.nonEditable&&!p.options.applyToAll|| -a.nestedEditable&&p.options.excludeNestedEditable)){p=p.value.apply(null,d);if(p===false||f&&p&&(p.name!=j||p.type!=m))return p;p!=null&&(d[0]=c=p)}}return c},execOnName:function(a,c){for(var f=0,d=this.rules,e=d.length,h;c&&f<e;f++){h=d[f];!(a.nonEditable&&!h.options.applyToAll||a.nestedEditable&&h.options.excludeNestedEditable)&&(c=c.replace(h.value[0],h.value[1]))}return c}}})(); -(function(){function a(a,e){function k(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function q(a,f){return function(e){if(e.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var i=[],l=b(e),q,o;if(l)for(A(l,1)&&i.push(l);l;){if(d(l)&&(q=c(l))&&A(q))if((o=c(q))&&!d(o))i.push(q);else{k(r).insertAfter(q);q.remove()}l=l.previous}for(l=0;l<i.length;l++)i[l].remove();if(i=(typeof f=="function"?f(e):f)!==false)if(!r&&!CKEDITOR.env.needsBrFiller&& -e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)i=false;else if(!r&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||e.name in CKEDITOR.dtd.tr||e.name in CKEDITOR.dtd.$listItem))i=false;else{i=b(e);i=!i||e.name=="form"&&i.name=="input"}i&&e.add(k(a))}}}function A(a,b){if((!r||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(o))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0, -c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&r&&(!b||a.parent.name in v))return true;if(!r)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var s={elements:{}},r=e=="html",v=CKEDITOR.tools.extend({},l),z;for(z in v)"#"in i[z]||delete v[z];for(z in v)s.elements[z]=q(r,a.config.fillEmptyBlocks);s.root=q(r,false);s.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=b.attributes;if("data-cke-bogus"in e||"data-cke-eol"in -e)delete e["data-cke-bogus"];else{for(e=b.next;e&&f(e);)e=e.next;var i=c(b);!e&&d(b.parent)?g(b.parent,k(a)):d(e)&&(i&&!d(i))&&k(a).insertBefore(e)}}}}(r);return s}function e(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV?"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&f(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&f(a);)a=a.previous;return a}function f(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&& -a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in l||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function g(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next=b;b.previous=c}}function h(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function m(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}} -function j(a){return a.replace(R,function(a,b,c){return"<"+b+c.replace(N,function(a,b){return F.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function p(a,b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+y(c).replace(/</g,"<").replace(/>/g,">")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function u(a){return a.replace(A,function(a,b){return decodeURIComponent(b)})}function t(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g, -function(a){return"<\!--"+r+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function y(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function n(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function w(a,b){for(var c=[],d=b.config.protectedSource,f=b._.dataStore||(b._.dataStore= -{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),i=0;i<d.length;i++)a=a.replace(d[i],function(a){a=a.replace(e,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(e,function(a,b,d){return"<\!--"+r+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g, -"%2D%2D")+"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g,function(a,b){f[f.id]=decodeURIComponent(b);return"{cke_protected_"+f.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,f){return"<"+c+d+">"+n(y(f),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,d,f=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter; -this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(q);c.addRules(x,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true});d.addRules(s);d.addRules(M,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,c=w(c,b),c=p(c,J),c=j(c),c=p(c,Q),c=c.replace(E,"$1cke:$2"),c=c.replace(z,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi, -"$1data-cke-"+CKEDITOR.rnd+"-$2"),d=a.context||b.editable().getName(),f;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="<pre>"+c+"</pre>";f=1}d=b.document.createElement(d);d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");f&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(v,"$1$2");c=u(c);c=y(c);a.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,a.fixForBody===false?false:e(a.enterMode,b.config.autoParagraph))},null,null, -5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter,true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue=t(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i, -""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,e(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter,true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=f.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=y(c);c=n(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype= -{toHtml:function(a,b,c,d){var f=this.editor,e,i,l;if(b&&typeof b=="object"){e=b.context;c=b.fixForBody;d=b.dontFilter;i=b.filter;l=b.enterMode}else e=b;!e&&e!==null&&(e=f.editable().getName());return f.fire("toHtml",{dataValue:a,context:e,fixForBody:c,dontFilter:d,filter:i||f.filter,enterMode:l||f.enterMode}).dataValue},toDataFormat:function(a,b){var c,d,f;if(b){c=b.context;d=b.filter;f=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a, -filter:d||this.editor.filter,context:c,enterMode:f||this.editor.enterMode}).dataValue}};var o=/(?: |\xa0)$/,r="{cke_protected}",i=CKEDITOR.dtd,k=["caption","colgroup","col","thead","tfoot","tbody"],l=CKEDITOR.tools.extend({},i.$blockLimit,i.$block),q={elements:{input:h,textarea:h}},x={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},s={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width= -c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},M={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,f=0;f<c.length;f++){d="data-cke-saved-"+c[f];d in b&&delete b[c[f]]}}return a},table:function(a){a.children.slice(0).sort(function(a, -b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(k,a.name);d=CKEDITOR.tools.indexOf(k,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex():-1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable}, -style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];!b&&g(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:m,textarea:m},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false}}};if(CKEDITOR.env.ie)M.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})}; -var R=/<(a|area|img|input|source)\b([^>]*)>/gi,N=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,F=/^(href|src|name)$/i,Q=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,J=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,A=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,E=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,v=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,z=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; -CKEDITOR.htmlParser.element=function(a,e){this.name=a;this.attributes=e||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; -CKEDITOR.htmlParser.cssStyle=function(a){var e={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,f){c=="font-family"&&(f=f.replace(/["']/g,""));e[c.toLowerCase()]=f});return{rules:e,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],c; -for(c in e)e[c]&&a.push(c,":",e[c],";");return a.join("")}}}; -(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var e=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,e,h,b=d.getFilterContext(b);if(b.off)return true; -if(!d.parent)a.onRoot(b,d);for(;;){e=d.name;if(!(h=a.onElementName(b,e))){this.remove();return false}d.name=h;if(!(d=a.onElement(b,d))){this.remove();return false}if(d!==this){this.replaceWith(d);return false}if(d.name==e)break;if(d.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(d);return false}if(!d.name){this.replaceWithChildren();return false}}e=d.attributes;var m,j;for(m in e){j=m;for(h=e[m];;)if(j=a.onAttributeName(b,m))if(j!=m){delete e[m];m=j}else break;else{delete e[m];break}j&&((h=a.onAttribute(b, -d,j,h))===false?delete e[j]:e[j]=h)}d.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var d=this.name,g=[],h=this.attributes,m,j;a.openTag(d,h);for(m in h)g.push([m,h[m]]);a.sortAttributes&&g.sort(e);m=0;for(j=g.length;m<j;m++){h=g[m];a.attribute(h[0],h[1])}a.openTagClose(d,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(d)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a= -this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var f=0,d=this.children.length;f<d;++f)if(b(this.children[f]))return this.children[f];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0, -d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),e=0;e<b.length;++e)b[e].parent=d;d.children=b;if(b[0])b[0].previous=null;if(a>0)this.children[a-1].next=null;this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+ -a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)},getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable== -"false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),d=0;d<b.length;d=d+2)a[b[d]]=b[d+1];return a}},true)})(); -(function(){var a={},e=/{([^}]+)}/g,b=/([\\'])/g,c=/\n/g,f=/\r/g;CKEDITOR.template=function(d){if(a[d])this.output=a[d];else{var g=d.replace(b,"\\$1").replace(c,"\\n").replace(f,"\\r").replace(e,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[d]=Function("data","buffer","return buffer?buffer.push('"+g+"'):['"+g+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document); -CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!=a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]}; -(function(){var a={};CKEDITOR.addTemplate=function(e,b){var c=a[e];if(c)return c;c={name:e,source:b};CKEDITOR.fire("template",c);return a[e]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(e){return a[e]}})();(function(){var a=[];CKEDITOR.addCss=function(e){a.push(e)};CKEDITOR.getCss=function(){return a.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2; -CKEDITOR.TRISTATE_DISABLED=0; -(function(){CKEDITOR.inline=function(a,e){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var b=new CKEDITOR.editor(e,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is("textarea")?a:null;if(c){b.setData(c.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+c.getValue()+"</div>",CKEDITOR.document); -a.insertAfter(c);c.hide();c.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(c){b.container.clearCustomData();b.container.remove();c.show()}b.element.clearCustomData();delete b.element});return b}; -CKEDITOR.inlineAll=function(){var a,e,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),f=0,d=c.count();f<d;f++){a=c.getItem(f);if(a.getAttribute("contenteditable")=="true"){e={element:a,config:{}};CKEDITOR.fire("inline",e)!==false&&CKEDITOR.inline(a,e.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor"; -(function(){function a(a,f,d,g){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var h=new CKEDITOR.editor(f,a,g);if(g==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden");h._.required=a.hasAttribute("required");a.removeAttribute("required")}d&&h.setData(d,null,true);h.on("loaded",function(){b(h);g==CKEDITOR.ELEMENT_MODE_REPLACE&&(h.config.autoUpdateElement&& -a.$.form)&&h._attachToForm();h.setMode(h.config.startupMode,function(){h.resetDirty();h.status="ready";h.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,h)})});h.on("destroy",e);return h}function e(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,d=a.element,e=a.elementMode, -h=a.fire("uiSpace",{space:"top",html:""}).html,m=a.fire("uiSpace",{space:"bottom",html:""}).html,j=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':"")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'), -b=CKEDITOR.dom.element.createFromHtml(j.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:h?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+h+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:m?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+m+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(e==CKEDITOR.ELEMENT_MODE_REPLACE){d.hide();b.insertAfter(d)}else d.append(b); -a.container=b;h&&a.ui.space("top").unselectable();m&&a.ui.space("bottom").unselectable();d=a.config.width;e=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));e&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(e));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,f){return a(b,f,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,f,d){return a(b,f,d,CKEDITOR.ELEMENT_MODE_APPENDTO)}; -CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,e=a[b];if(e.name||e.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(e.className))continue}else if(typeof arguments[0]=="function"){d={};if(arguments[0](e,d)===false)continue}this.replace(e,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,e= -this._.modes;if(!(a==d.mode||!e||!e[a])){d.fire("beforeSetMode",a);if(d.mode){var h=d.checkDirty(),e=d._.previousModeData,m,j=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData=m=d.getData(1);if(d.mode=="source"&&e==m){d.fire("lockSnapshot",{forceUpdate:true});j=1}d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;h!==void 0&&!h&&d.resetDirty();j?d.fire("unlockSnapshot"):a=="wysiwyg"&&d.fire("saveSnapshot"); -setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,e){var h=this.container,m=this.ui.space("contents"),j=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,e=e?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):h;e.setSize("width",a,true);j&&(j.style.width="1%");m.setStyle("height",Math.max(b-(d?0:(e.$.offsetHeight||0)-(m.$.clientHeight||0)),0)+"px");j&&(j.style.width= -"100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg"; -(function(){function a(a){var b=a.editor,d=a.data.path,f=d.blockLimit,l=a.data.selection,q=l.getRanges()[0],x;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(l=e(l,d)){l.appendBogus();x=CKEDITOR.env.ie}if(g(b,d.block,f)&&q.collapsed&&!q.getCommonAncestor().isReadOnly()){d=q.clone();d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);f=new CKEDITOR.dom.walker(d);f.guard=function(a){return!c(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!f.checkForward()||d.checkStartOfBlock()&& -d.checkEndOfBlock()){b=q.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(c))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?: |\xa0)$/))&&b.remove();x=1;a.cancel()}}x&&q.select()}function e(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,e=d&&d.getLast(c);if(d&&d.isBlockBoundary()&&(!e||!(e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()))&&!d.is("pre")&&!d.getBogus())return d}function b(a){var b=a.data.getTarget(); -if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function c(a){return t(a)&&y(a)}function f(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function d(a){function b(a){return function(b,e){e&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(f))&&(d=b);if(!e&&c(b)&&(!a||!p(b)))return false}}var d,e=a.getRanges()[0],a=a.root,f={table:1,ul:1,ol:1, -dl:1};if(e.startPath().contains(f)){var q=e.clone();q.collapse(1);q.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(q);a.guard=b();a.checkBackward();if(d){q=e.clone();q.collapse();q.setEndAt(d,CKEDITOR.POSITION_AFTER_END);a=new CKEDITOR.dom.walker(q);a.guard=b(true);d=false;a.checkForward();return d}}return null}function g(a,b,c){return a.config.autoParagraph!==false&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&a.editable().equals(c)&&!b||b&&b.getAttribute("contenteditable")=="true"} -function h(a){a.editor.focus();a.editor.fire("saveSnapshot")}function m(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function j(a,b,c){for(var d=a.getCommonAncestor(b),b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&a.getChildCount()==1;)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a; -if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())||this.getWindow().focus()}},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a= -a=="focus"?"focusin":"focusout";b=f(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c, -b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){h(this);n(this,b||"html",a)},insertText:function(a){h(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre", -true)?CKEDITOR.ENTER_BR:b.activeEnterMode,b=c==CKEDITOR.ENTER_BR,d=CKEDITOR.tools,a=d.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"    "),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var e=/\n{2}/g;if(e.test(a))var f="<"+c+">",g="</"+c+">",a=f+a.replace(e,function(){return g+f})+g}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return d.repeat(a,2)}));a=a.replace(/^ | $/g," ");a=a.replace(/(>|\s) /g,function(a,b){return b+" "}).replace(/ (?=<)/g, -" ");n(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&w(b);var g,s;if(f)for(;(g=b.getCommonAncestor(0,1))&&(s=CKEDITOR.dtd[g.getName()])&&(!s||!s[e]);)if(g.getName()in -CKEDITOR.dtd.span)b.splitElement(g);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(g);b.collapse(true);g.remove()}else b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},insertElementIntoSelection:function(a){h(this);var b=this.editor,d=b.activeEnterMode,b=b.getSelection(),e=b.getRanges()[0],f=a.getName(),f=CKEDITOR.dtd.$block[f];if(this.insertElementIntoRange(a,e)){e.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(f)if((f=a.getNext(function(a){return c(a)&& -!p(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block))f.getDtd()["#"]?e.moveToElementEditStart(f):e.moveToElementEditEnd(a);else if(!f&&d!=CKEDITOR.ENTER_BR){f=e.fixBlock(true,d==CKEDITOR.ENTER_DIV?"div":"p");e.moveToElementEditStart(f)}}b.selectRanges([e]);m(this)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b)); -return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(u,function(a,b){return b}));a.setData(b, -null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a, -"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]= -+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker); -var f=a.config.contentsLangDirection;this.getDirection(1)!=f&&this.changeAttr("dir",f);var k=CKEDITOR.getCss();if(k){f=e.getHead();if(!f.getCustomData("stylesheet")){k=e.appendStyleText(k);k=new CKEDITOR.dom.element(k.ownerNode||k.owningElement);f.setCustomData("stylesheet",k);k.data("cke-temp",1)}}f=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",f+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a= -a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),e;if(c in l){var b=a.getSelection(),f,i=b.getRanges()[0],k=i.startPath(),g,h,j,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(f=b.getSelectedElement())||(f=d(b))){a.fire("saveSnapshot");i.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);f.remove();i.select(); -a.fire("saveSnapshot");e=1}else if(i.collapsed)if((g=k.block)&&(j=g[c?"getPrevious":"getNext"](t))&&j.type==CKEDITOR.NODE_ELEMENT&&j.is("table")&&i[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");i[c?"checkEndOfBlock":"checkStartOfBlock"]()&&g.remove();i["moveToElementEdit"+(c?"End":"Start")](j);i.select();a.fire("saveSnapshot");e=1}else if(k.blockLimit&&k.blockLimit.is("td")&&(h=k.blockLimit.getAscendant("table"))&&i.checkBoundaryOfElement(h,c?CKEDITOR.START:CKEDITOR.END)&&(j= -h[c?"getPrevious":"getNext"](t))){a.fire("saveSnapshot");i["moveToElementEdit"+(c?"End":"Start")](j);i.checkStartOfBlock()&&i.checkEndOfBlock()?j.remove():i.select();a.fire("saveSnapshot");e=1}else if((h=k.contains(["td","th","caption"]))&&i.checkBoundaryOfElement(h,c?CKEDITOR.START:CKEDITOR.END))e=1}return!e});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in l&&!this.getFirst(c)){this.appendBogus();b=a.createRange(); -b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}}); -CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();if(!b.getOuterHtml().replace(u,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a, -"key",function(b){b=b.data.domEvent.getKey();if(b in l){var c=b==8,d=a.getSelection().getRanges()[0],b=d.startPath();if(d.collapsed){var e;a:{var f=b.block;if(f)if(d[c?"checkStartOfBlock":"checkEndOfBlock"]())if(!d.moveToClosestEditablePosition(f,!c)||!d.collapsed)e=false;else{if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var i=d.startContainer.getChild(d.startOffset-(c?1:0));if(i&&i.type==CKEDITOR.NODE_ELEMENT&&i.is("hr")){a.fire("saveSnapshot");i.remove();e=true;break a}}if((d=d.startPath().block)&& -(!d||!d.contains(f))){a.fire("saveSnapshot");var k;(k=(c?d:f).getBogus())&&k.remove();e=a.getSelection();k=e.createBookmarks();(c?f:d).moveChildren(c?d:f,false);b.lastElement.mergeSiblings();j(f,d,!c);e.selectBookmarks(k);e=true}}else e=false;else e=false}if(!e)return}else{c=d;e=b.block;k=c.endPath().block;if(!e||!k||e.equals(k))b=false;else{a.fire("saveSnapshot");(f=e.getBogus())&&f.remove();c.deleteContents();if(k.getParent()){k.moveChildren(e,false);b.lastElement.mergeSiblings();j(e,k,true)}c= -a.getSelection().getRanges()[0];c.collapse(1);c.select();b=true}if(!b)return}a.getSelection().scrollIntoView();a.fire("saveSnapshot");return false}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref", -c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var p=CKEDITOR.dom.walker.bogus(),u=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi, -t=CKEDITOR.dom.walker.whitespaces(true),y=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty(); -c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d)if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('<span id="'+ -e+'" class="cke_voice_label">'+d+"</span>");c.append(d);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var n=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,i,l,k=[],q=d.range.startContainer;e=d.range.startPath();for(var q=h[q.getName()],g=0,s=c.getChildren(),j=s.count(),m=-1,p=-1,n=0,M=e.contains(h.$list);g<j;++g){e=s.getItem(g);if(a(e)){i=e.getName(); -if(M&&i in CKEDITOR.dtd.$list)k=k.concat(b(e,d));else{l=!!q[i];if(i=="br"&&e.data("cke-eol")&&(!g||g==j-1)){n=(f=g?k[g-1].node:s.getItem(g+1))&&(!a(f)||!f.is("br"));f=f&&a(f)&&h.$block[f.getName()]}m==-1&&!l&&(m=g);l||(p=g);k.push({isElement:1,isLineBreak:n,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:i,allowed:l});f=n=0}}else k.push({isElement:0,node:e,allowed:1})}if(m>-1)k[m].firstNotAllowed=1;if(p>-1)k[p].lastNotAllowed=1;return k}function d(b,c){var e=[],f=b.getChildren(),l=f.count(), -k,q=0,g=h[c],s=!b.is(h.$inline)||b.is("br");for(s&&e.push(" ");q<l;q++){k=f.getItem(q);a(k)&&!k.is(g)?e=e.concat(d(k,c)):e.push(k)}s&&e.push(" ");return e}function e(b){return b&&a(b)&&(b.is(h.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,c,d,e){var i=b.clone(),k,q;i.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((k=(new CKEDITOR.dom.walker(i)).next())&&a(k)&&s[k.getName()]&&(q=k.getPrevious())&&a(q)&&!q.getParent().equals(b.startContainer)&&d.contains(q)&&e.contains(k)&&k.isIdentical(q)){k.moveChildren(q); -k.remove();f(b,c,d,e)}}function q(b,c){function d(b,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,b[b.length-1]);if(f&&d(f,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var h=CKEDITOR.dtd,s={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},j={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},p=CKEDITOR.tools.extend({},h.$inline);delete p.br; -return function(s,n,u){var t=s.editor,A=t.getSelection().getRanges()[0],E=false;if(n=="unfiltered_html"){n="html";E=true}if(!A.checkReadOnly()){var v=(new CKEDITOR.dom.elementPath(A.startContainer,A.root)).blockLimit||A.root,n={type:n,dontFilter:E,editable:s,editor:t,range:A,blockLimit:v,mergeCandidates:[],zombies:[]},t=n.range,E=n.mergeCandidates,z,B,D,G;if(n.type=="text"&&t.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){z=CKEDITOR.dom.element.createFromHtml("<span> </span>",t.document);t.insertNode(z); -t.setStartAfter(z)}B=new CKEDITOR.dom.elementPath(t.startContainer);n.endPath=D=new CKEDITOR.dom.elementPath(t.endContainer);if(!t.collapsed){var v=D.block||D.blockLimit,y=t.getCommonAncestor();v&&(!v.equals(y)&&!v.contains(y)&&t.checkEndOfBlock())&&n.zombies.push(v);t.deleteContents()}for(;(G=a(t.startContainer)&&t.startContainer.getChild(t.startOffset-1))&&a(G)&&G.isBlockBoundary()&&B.contains(G);)t.moveToPosition(G,CKEDITOR.POSITION_BEFORE_END);f(t,n.blockLimit,B,D);if(z){t.setEndBefore(z);t.collapse(); -z.remove()}z=t.startPath();if(v=z.contains(e,false,1)){t.splitElement(v);n.inlineStylesRoot=v;n.inlineStylesPeak=z.lastElement}z=t.createBookmark();(v=z.startNode.getPrevious(c))&&a(v)&&e(v)&&E.push(v);(v=z.startNode.getNext(c))&&a(v)&&e(v)&&E.push(v);for(v=z.startNode;(v=v.getParent())&&e(v);)E.push(v);t.moveToBookmark(z);if(z=u){z=n.range;if(n.type=="text"&&n.inlineStylesRoot){G=n.inlineStylesPeak;t=G.getDocument().createText("{cke-peak}");for(E=n.inlineStylesRoot.getParent();!G.equals(E);){t=t.appendTo(G.clone()); -G=G.getParent()}u=t.getOuterHtml().split("{cke-peak}").join(u)}G=n.blockLimit.getName();if(/^\s+|\s+$/.test(u)&&"span"in CKEDITOR.dtd[G])var w='<span data-cke-marker="1"> </span>',u=w+u+w;u=n.editor.dataProcessor.toHtml(u,{context:null,fixForBody:false,dontFilter:n.dontFilter,filter:n.editor.activeFilter,enterMode:n.editor.activeEnterMode});G=z.document.createElement("body");G.setHtml(u);if(w){G.getFirst().remove();G.getLast().remove()}if((w=z.startPath().block)&&!(w.getChildCount()==1&&w.getBogus()))a:{var H; -if(G.getChildCount()==1&&a(H=G.getFirst())&&H.is(j)){w=H.getElementsByTag("*");z=0;for(E=w.count();z<E;z++){t=w.getItem(z);if(!t.is(p))break a}H.moveChildren(H.getParent(1));H.remove()}}n.dataWrapper=G;z=u}if(z){H=n.range;var w=H.document,C,u=n.blockLimit;z=0;var K;G=[];var I,S,E=t=0,L,U;B=H.startContainer;var v=n.endPath.elements[0],V;D=v.getPosition(B);y=!!v.getCommonAncestor(B)&&D!=CKEDITOR.POSITION_IDENTICAL&&!(D&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);B=b(n.dataWrapper,n); -for(q(B,H);z<B.length;z++){D=B[z];if(C=D.isLineBreak){C=H;L=u;var P=void 0,Y=void 0;if(D.hasBlockSibling)C=1;else{P=C.startContainer.getAscendant(h.$block,1);if(!P||!P.is({div:1,p:1}))C=0;else{Y=P.getPosition(L);if(Y==CKEDITOR.POSITION_IDENTICAL||Y==CKEDITOR.POSITION_CONTAINS)C=0;else{L=C.splitElement(P);C.moveToPosition(L,CKEDITOR.POSITION_AFTER_START);C=1}}}}if(C)E=z>0;else{C=H.startPath();if(!D.isBlock&&g(n.editor,C.block,C.blockLimit)&&(S=n.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&n.editor.config.autoParagraph!== -false?n.editor.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":false)){S=w.createElement(S);S.appendBogus();H.insertNode(S);CKEDITOR.env.needsBrFiller&&(K=S.getBogus())&&K.remove();H.moveToPosition(S,CKEDITOR.POSITION_BEFORE_END)}if((C=H.startPath().block)&&!C.equals(I)){if(K=C.getBogus()){K.remove();G.push(C)}I=C}D.firstNotAllowed&&(t=1);if(t&&D.isElement){C=H.startContainer;for(L=null;C&&!h[C.getName()][D.name];){if(C.equals(u)){C=null;break}L=C;C=C.getParent()}if(C){if(L){U=H.splitElement(L);n.zombies.push(U); -n.zombies.push(L)}}else{L=u.getName();V=!z;C=z==B.length-1;L=d(D.node,L);for(var P=[],Y=L.length,Z=0,$=void 0,X=0,W=-1;Z<Y;Z++){$=L[Z];if($==" "){if(!X&&(!V||Z)){P.push(new CKEDITOR.dom.text(" "));W=P.length}X=1}else{P.push($);X=0}}C&&W==P.length&&P.pop();V=P}}if(V){for(;C=V.pop();)H.insertNode(C);V=0}else H.insertNode(D.node);if(D.lastNotAllowed&&z<B.length-1){(U=y?v:U)&&H.setEndAt(U,CKEDITOR.POSITION_AFTER_START);t=0}H.collapse()}}n.dontMoveCaret=E;n.bogusNeededBlocks=G}K=n.range;var O;U=n.bogusNeededBlocks; -for(V=K.createBookmark();I=n.zombies.pop();)if(I.getParent()){S=K.clone();S.moveToElementEditStart(I);S.removeEmptyBlocksAtEnd()}if(U)for(;I=U.pop();)CKEDITOR.env.needsBrFiller?I.appendBogus():I.append(K.document.createText(" "));for(;I=n.mergeCandidates.pop();)I.mergeSiblings();K.moveToBookmark(V);if(!n.dontMoveCaret){for(I=a(K.startContainer)&&K.startContainer.getChild(K.startOffset-1);I&&a(I)&&!I.is(h.$empty);){if(I.isBlockBoundary())K.moveToPosition(I,CKEDITOR.POSITION_BEFORE_END);else{if(e(I)&& -I.getHtml().match(/(\s| )$/g)){O=null;break}O=K.clone();O.moveToPosition(I,CKEDITOR.POSITION_BEFORE_END)}I=I.getLast(c)}O&&K.moveToRange(O)}A.select();m(s)}}}(),w=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b= -a.count(),d;for(b;b-- >0;){d=a.getItem(b);if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),g=false;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();if(!f){f=d.clone();f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);f=a(f).lastForward();g=true}f||(f=e);if(f.is("table")){d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START); -d.collapse(true);f.remove()}else{f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",g));f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",g));(e=f.getBogus())&&e.remove();d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()})(); -(function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function e(){t=true;if(!u){b.call(this);u=CKEDITOR.tools.setTimeout(b, -200,this)}}function b(){u=null;if(t){CKEDITOR.tools.setTimeout(a,0,this);t=false}}function c(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var c=a.startContainer,d=a.getPreviousNode(y,null,c),e=a.getNextNode(y,null,c);return b(d)||b(e,1)||!d&&!e&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?true:false}function f(a){return a.getCustomData("cke-fillingChar")} -function d(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),f=e&&e.type!="None"&&e.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){d=[e.anchorOffset,e.focusOffset];f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0]--;f&&d[1]--;var h;f=e;if(!f.isCollapsed){h=f.getRangeAt(0);h.setStart(f.anchorNode,f.anchorOffset);h.setEnd(f.focusNode,f.focusOffset);h=h.collapsed}h&&d.unshift(d.pop())}}c.setText(g(c.getText())); -if(d){c=e.getRangeAt(0);c.setStart(c.startContainer,d[0]);c.setEnd(c.startContainer,d[1]);e.removeAllRanges();e.addRange(c)}}}function g(a){return a.replace(/\u200B( )?/g,function(a){return a[1]?" ":""})}function h(a,b,c){var d=a.on("focus",function(a){a.cancel()},null,null,-100);if(CKEDITOR.env.ie)var e=a.getDocument().on("selectionchange",function(a){a.cancel()},null,null,-100);else{var f=new CKEDITOR.dom.range(a);f.moveToElementEditStart(a);var g=a.getDocument().$.createRange();g.setStart(f.startContainer.$, -f.startOffset);g.collapse(1);b.removeAllRanges();b.addRange(g)}c&&a.focus();d.removeListener();e&&e.removeListener()}function m(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'"> </div>',a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START); -d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function j(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];if(e.length==1&&f.collapsed)if((d=f[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}} -function p(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,e;d;){if((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;e&&d.getAttribute("contentEditable")=="false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;e=c.endContainer;var f=c.startOffset,g=c.endOffset,h=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(f>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d)); -e&&e.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(e):h.setEndBefore(e));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS)){e.setStartAfter(d);e.collapsed||a.splice(b+1,0,e)}return true}return false};d.next()}}return a}var u,t,y=CKEDITOR.dom.walker.invisible(1),n=function(){function a(b){return function(a){var c=a.editor.createRange(); -c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;if(!(e=d.moveToClosestEditablePosition(b.selected,a)))e=d.moveToClosestEditablePosition(b.selected,!a);e&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();if(!e){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c, -38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=f.getSelection();a&&a.removeAllRanges()}var f=b.editor;f.on("contentDom",function(){function b(){A=new CKEDITOR.dom.selection(f.getSelection());A.lock()}function c(){k.removeListener("mouseup",c);n.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,b=a.createRange();a.type!="None"&&b.parentElement().ownerDocument==i.$&&b.select()}var i=f.document,k=CKEDITOR.document,g=f.editable(),h=i.getBody(), -n=i.getDocumentElement(),m=g.isInline(),p,A;CKEDITOR.env.gecko&&g.attachListener(g,"focus",function(a){a.removeListener();if(p!==0)if((a=f.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$){a=f.createRange();a.moveToElementEditStart(g);a.select()}},null,null,-2);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){p&&CKEDITOR.env.webkit&&(p=f._.previousActive&&f._.previousActive.equals(i.getActive()));f.unlockSelection(p);p=0},null,null,-1);g.attachListener(g,"mousedown", -function(){p=0});if(CKEDITOR.env.ie||m){w?g.attachListener(g,"beforedeactivate",b,null,null,-1):g.attachListener(f,"selectionCheck",b,null,null,-1);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){f.lockSelection(A);p=1},null,null,-1);g.attachListener(g,"mousedown",function(){p=0})}if(CKEDITOR.env.ie&&!m){var E;g.attachListener(g,"mousedown",function(a){if(a.data.$.button==2){a=f.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)E=f.window.getScrollPosition()}}); -g.attachListener(g,"mouseup",function(a){if(a.data.$.button==2&&E){f.document.$.documentElement.scrollLeft=E.x;f.document.$.documentElement.scrollTop=E.y}E=null});if(i.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)n.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=h.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(f){}d.setEndPoint(e.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){n.removeListener("mousemove", -b);k.removeListener("mouseup",c);n.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<n.$.clientHeight&&a.$.x<n.$.clientWidth){var d=h.$.createTextRange();try{d.moveToPoint(a.$.clientX,a.$.clientY)}catch(f){}var e=d.duplicate();n.on("mousemove",b);k.on("mouseup",c);n.on("mouseup",c)}});if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11)n.on("mousedown",function(a){if(a.data.getTarget().is("html")){k.on("mouseup",c);n.on("mouseup",c)}})}}g.attachListener(g,"selectionchange", -a,f);g.attachListener(g,"keyup",e,f);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){f.forceNextSelectionCheck();f.selectionChange(1)});if(m&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var v;g.attachListener(g,"mousedown",function(){v=1});g.attachListener(i.getDocumentElement(),"mouseup",function(){v&&e.call(f);v=0})}else g.attachListener(CKEDITOR.env.ie?g:i.getDocumentElement(),"mouseup",e,f);CKEDITOR.env.webkit&&g.attachListener(i,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:d(g)}}, -null,null,-1);g.attachListener(g,"keydown",j(f),null,null,-1)});f.on("setData",function(){f.unlockSelection();CKEDITOR.env.webkit&&c()});f.on("contentDomUnload",function(){f.unlockSelection()});if(CKEDITOR.env.ie9Compat)f.on("beforeDestroy",c,null,null,9);f.on("dataReady",function(){delete f._.fakeSelection;delete f._.hiddenSelectionContainer;f.selectionChange(1)});f.on("loadSnapshot",function(){var a=f.editable().getLast(function(a){return a.type==CKEDITOR.NODE_ELEMENT});a&&a.hasAttribute("data-cke-hidden-sel")&& -a.remove()},null,null,100);f.on("key",function(a){if(f.mode=="wysiwyg"){var b=f.getSelection();if(b.isFake){var c=n[a.data.keyCode];if(c)return c({editor:f,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){function b(){var a=e.editable();if(a)if(a=f(a)){var c=e.document.$.defaultView.getSelection();c.type=="Caret"&&c.anchorNode==a.$&&(j=1);h=a.getText();a.setText(g(h))}}function c(){var a=e.editable();if(a)if(a=f(a)){a.setText(h);if(j){e.document.$.defaultView.getSelection().setPosition(a.$, -a.getLength());j=0}}}var e=a.editor;if(CKEDITOR.env.webkit){e.on("selectionChange",function(){var a=e.editable(),b=f(a);b&&(b.getCustomData("ready")?d(a):b.setCustomData("ready",1))},null,null,-1);e.on("beforeSetMode",function(){d(e.editable())},null,null,-1);var h,j;e.on("beforeUndoImage",b);e.on("afterUndoImage",c);e.on("beforeGetData",b,null,null,0);e.on("getData",c)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:e).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection|| -this._.fakeSelection)&&!a)return this._.savedSelection||this._.fakeSelection;return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false}; -CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var w=typeof window.getSelection!= -"function",o=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection)var b=a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:o++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=a=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}c=w?this.document.$.selection:this.document.getWindow().$.getSelection();if(CKEDITOR.env.webkit)(c.type== -"None"&&this.document.getActive().equals(a)||c.type=="Caret"&&c.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&h(a,c);else if(CKEDITOR.env.gecko)c&&(this.document.getActive().equals(a)&&c.anchorNode&&c.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&h(a,c,true);else if(CKEDITOR.env.ie){b=this.document.getActive();if(w)c.type=="None"&&(b&&b.equals(this.document.getDocumentElement()))&&h(a,null,true);else{(c=c&&c.anchorNode)&&(c=new CKEDITOR.dom.node(c));b&&(b.equals(this.document.getDocumentElement())&& -c&&(a.equals(c)||a.contains(c)))&&h(a,null,true)}}var a=this.getNative(),d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||!(d.type==CKEDITOR.NODE_ELEMENT||d.type==CKEDITOR.NODE_TEXT)||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement= -null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var r={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=w?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:w?function(){var a=this._.cache;if(a.type)return a.type; -var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset- -c.startOffset==1&&r[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=w?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,i,g=b.duplicate(),l=0,h=e.length-1,A=-1,j,v;l<=h;){A=Math.floor((l+h)/2);f=e[A];g.moveToElementText(f);j=g.compareEndPoints("StartToStart", -b);if(j>0)h=A-1;else if(j<0)l=A+1;else return{container:d,offset:a(f)}}if(A==-1||A==e.length-1&&j<0){g.moveToElementText(d);g.setEndPoint("StartToStart",b);g=g.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!g){f=e[e.length-1];return f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length}}for(d=e.length;g>0&&d>0;){i=e[--d];if(i.nodeType==CKEDITOR.NODE_TEXT){v=i;g=g-i.nodeValue.length}}return{container:v,offset:-g}}g.collapse(j>0?true:false);g.setEndPoint(j> -0?"StartToStart":"EndToStart",b);g=g.text.replace(/(\r\n|\r)/g,"\n").length;if(!g)return{container:d,offset:a(f)+(j>0?0:1)};for(;g>0;)try{i=f[j>0?"previousSibling":"nextSibling"];if(i.nodeType==CKEDITOR.NODE_TEXT){g=g-i.nodeValue.length;v=i}f=i}catch(z){return{container:d,offset:a(f)}}return{container:v,offset:j>0?-g:v.nodeValue.length+g}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root); -d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=c.item(e),g=f.parentNode,i=0,a=new CKEDITOR.dom.range(this.root);i<g.childNodes.length&&g.childNodes[i]!=f;i++);a.setStart(new CKEDITOR.dom.node(g),i);a.setEnd(new CKEDITOR.dom.node(g), -i+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset);b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:p(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a= -this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent(); -b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&(!(c=a.getEnclosedNode())|| -!(c.type==CKEDITOR.NODE_ELEMENT&&r[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=w?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel= -null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty(); -a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}this.rev=o++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,e,f=0;f<a.length;++f){e=a[f];if(e.endContainer.equals(b))e.endOffset=Math.min(e.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var g= -CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();g&&!g.equals(this.root)&&g.focus()}else{var h;a:{var j,n;if(a.length==1&&!(n=a[0]).collapsed&&(h=n.getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT){n=n.clone();n.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((j=n.getEnclosedNode())&&j.type==CKEDITOR.NODE_ELEMENT)h=j;if(h.getAttribute("contenteditable")=="false")break a}h=void 0}if(h)this.fake(h);else{if(w){n=CKEDITOR.dom.walker.whitespaces(true);j=/\ufeff|\u00a0/;b={table:1, -tbody:1,tr:1};if(a.length>1){h=a[a.length-1];a[0].setEnd(h.endContainer,h.endOffset)}h=a[0];var a=h.collapsed,m,p,o;if((e=h.getEnclosedNode())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in r&&(!e.is("a")||!e.getText()))try{o=e.$.createControlRange();o.addElement(e.$);o.select();return}catch(t){}if(h.startContainer.type==CKEDITOR.NODE_ELEMENT&&h.startContainer.getName()in b||h.endContainer.type==CKEDITOR.NODE_ELEMENT&&h.endContainer.getName()in b){h.shrink(CKEDITOR.NODE_ELEMENT,true);a=h.collapsed}o= -h.createBookmark();b=o.startNode;if(!a)g=o.endNode;o=h.document.$.body.createTextRange();o.moveToElementText(b.$);o.moveStart("character",1);if(g){j=h.document.$.body.createTextRange();j.moveToElementText(g.$);o.setEndPoint("EndToEnd",j);o.moveEnd("character",-1)}else{m=b.getNext(n);p=b.hasAscendant("pre");m=!(m&&m.getText&&m.getText().match(j))&&(p||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));p=h.document.createElement("span");p.setHtml("");p.insertBefore(b);m&&h.document.createText("").insertBefore(b)}h.setStartBefore(b); -b.remove();if(a){if(m){o.moveStart("character",-1);o.select();h.document.$.selection.clear()}else o.select();h.moveToPosition(p,CKEDITOR.POSITION_BEFORE_START);p.remove()}else{h.setEndBefore(g);g.remove();o.select()}}else{g=this.getNative();if(!g)return;this.removeAllRanges();for(o=0;o<a.length;o++){if(o<a.length-1){m=a[o];p=a[o+1];j=m.clone();j.setStart(m.endContainer,m.endOffset);j.setEnd(p.startContainer,p.startOffset);if(!j.collapsed){j.shrink(CKEDITOR.NODE_ELEMENT,true);h=j.getCommonAncestor(); -j=j.getEnclosedNode();if(h.isReadOnly()||j&&j.isReadOnly()){p.setStart(m.startContainer,m.startOffset);a.splice(o--,1);continue}}}h=a[o];p=this.document.$.createRange();if(h.collapsed&&CKEDITOR.env.webkit&&c(h)){m=this.root;d(m,false);j=m.getDocument().createText("​");m.setCustomData("cke-fillingChar",j);h.insertNode(j);if((m=j.getNext())&&!j.getPrevious()&&m.type==CKEDITOR.NODE_ELEMENT&&m.getName()=="br"){d(this.root);h.moveToPosition(m,CKEDITOR.POSITION_BEFORE_START)}else h.moveToPosition(j,CKEDITOR.POSITION_AFTER_END)}p.setStart(h.startContainer.$, -h.startOffset);try{p.setEnd(h.endContainer.$,h.endOffset)}catch(A){if(A.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){h.collapse(1);p.setEnd(h.endContainer.$,h.endOffset)}else throw A;}g.addRange(p)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();m(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT; -c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=o++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b= -[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}a.isFake?this.fake(b[0].getEnclosedNode()):this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative(); -try{a&&a[w?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3; -(function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function e(b){var d=b.document;if(b.collapsed){d=o(this,d);b.insertNode(d);b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END)}else{var f=this.element,g=this._.definition,h,j=g.ignoreReadonly,i=j||g.includeReadonly;i==null&&(i=b.root.getCustomData("cke_includeReadonly"));var k=CKEDITOR.dtd[f]; -if(!k){h=true;k=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var n=b.createBookmark(),l=n.startNode,m=n.endNode,p=l,q;if(!j){var t=b.getCommonAncestor(),j=a(l,t),t=a(m,t);j&&(p=j.getNextSourceNode(true));t&&(m=t)}for(p.getPosition(m)==CKEDITOR.POSITION_FOLLOWING&&(p=0);p;){j=false;if(p.equals(m)){p=null;j=true}else{var r=p.type==CKEDITOR.NODE_ELEMENT?p.getName():null,t=r&&p.getAttribute("contentEditable")=="false",u=r&&p.getAttribute("data-nostyle");if(r&&p.data("cke-bookmark")){p= -p.getNextSourceNode(true);continue}if(t&&i&&CKEDITOR.dtd.$block[r])for(var s=p,w=c(s),x=void 0,F=w.length,M=0,s=F&&new CKEDITOR.dom.range(s.getDocument());M<F;++M){var x=w[M],X=CKEDITOR.filter.instances[x.data("cke-filter")];if(X?X.check(this):1){s.selectNodeContents(x);e.call(this,s)}}w=r?!k[r]||u?0:t&&!i?0:(p.getPosition(m)|Q)==Q&&(!g.childRule||g.childRule(p)):1;if(w)if((w=p.getParent())&&((w.getDtd()||CKEDITOR.dtd.span)[f]||h)&&(!g.parentRule||g.parentRule(w))){if(!q&&(!r||!CKEDITOR.dtd.$removeEmpty[r]|| -(p.getPosition(m)|Q)==Q)){q=b.clone();q.setStartBefore(p)}r=p.type;if(r==CKEDITOR.NODE_TEXT||t||r==CKEDITOR.NODE_ELEMENT&&!p.getChildCount()){for(var r=p,W;(j=!r.getNext(N))&&(W=r.getParent(),k[W.getName()])&&(W.getPosition(l)|J)==J&&(!g.childRule||g.childRule(W));)r=W;q.setEndAfter(r)}}else j=true;else j=true;p=p.getNextSourceNode(u||t)}if(j&&q&&!q.collapsed){for(var j=o(this,d),t=j.hasAttributes(),u=q.getCommonAncestor(),r={},w={},x={},F={},O,T,R;j&&u;){if(u.getName()==f){for(O in g.attributes)if(!F[O]&& -(R=u.getAttribute(T)))j.getAttribute(O)==R?w[O]=1:F[O]=1;for(T in g.styles)if(!x[T]&&(R=u.getStyle(T)))j.getStyle(T)==R?r[T]=1:x[T]=1}u=u.getParent()}for(O in w)j.removeAttribute(O);for(T in r)j.removeStyle(T);t&&!j.hasAttributes()&&(j=null);if(j){q.extractContents().appendTo(j);q.insertNode(j);y.call(this,j);j.mergeSiblings();CKEDITOR.env.ie||j.$.normalize()}else{j=new CKEDITOR.dom.element("span");q.extractContents().appendTo(j);q.insertNode(j);y.call(this,j);j.remove(true)}q=null}}b.moveToBookmark(n); -b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(i.getParent()),e=null,f=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;p.checkElementRemovable(h)&&(e=h)}for(g=0;g<c.elements.length;g++){h=c.elements[g];if(h==c.block||h==c.blockLimit)break;p.checkElementRemovable(h)&&(f=h)}f&&i.breakParent(f);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE, -1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,g=0,h;g<e.elements.length&&(h=e.elements[g]);g++){if(h==e.block||h==e.blockLimit)break;if(this.checkElementRemovable(h)){var j;if(a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(j=a.checkBoundaryOfElement(h,CKEDITOR.START)))){f=h;f.match=j?"start":"end"}else{h.mergeSiblings();h.is(this.element)?t.call(this,h):n(h,k(this)[h.getName()])}}}if(f){h=d;for(g=0;;g++){j=e.elements[g]; -if(j.equals(f))break;else if(j.match)continue;else j=j.clone();j.append(h);h=j}h[f.match=="start"?"insertBefore":"insertAfter"](f)}}else{var i=c.endNode,p=this;b();for(e=d;!e.equals(i);){f=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)){e.getName()==this.element?t.call(this,e):n(e,k(this)[e.getName()]);if(f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)){b();f=d.getNext()}}e=f}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function c(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")== -"true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function f(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&r(a,this)}function d(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&& -a.removeStyle(e)}}function g(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document,f;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){f=o(this,e,d);m(d,f)}a.moveToBookmark(b)}function h(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(e= -this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(e);m(d,e)}else t.call(this,d);a.moveToBookmark(b)}function m(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=p(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+| )/g, -" ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(g.getFirst());e=g.getFirst().remove()}else e.setHtml(f);b=e}else f?b=u(c?[a.getHtml()]:j(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,h;if((h=c.getPrevious(F))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("pre")){d=p(h.getHtml(),/\n$/,"")+"\n\n"+p(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);h.remove()}}else c&& -w(b)}function j(a){var b=[];p(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function p(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function u(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument())); -for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=p(e,/^[ \t]*\n/,""),e=p(e,/\n$/,""),e=p(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?" ":b?" "+CKEDITOR.tools.repeat(" ",a.length-1):CKEDITOR.tools.repeat(" ",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat(" ",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function t(a,b){var c=this._.definition, -d=c.attributes,c=c.styles,e=k(this)[a.getName()],f=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),g;for(g in d)if(!((g=="class"||this._.definition.fullMatch)&&a.getAttribute(g)!=l(g,d[g]))&&!(b&&g.slice(0,5)=="data-")){f=a.hasAttribute(g);a.removeAttribute(g)}for(var h in c)if(!(this._.definition.fullMatch&&a.getStyle(h)!=l(h,c[h],true))){f=f||!!a.getStyle(h);a.removeStyle(h)}n(a,e,x[a.getName()]);f&&(this._.definition.alwaysRemoveElement?w(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode== -CKEDITOR.ENTER_BR&&!a.hasAttributes()?w(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function y(a){for(var b=k(this),c=a.getElementsByTag(this.element),d,e=c.count();--e>=0;){d=c.getItem(e);d.isReadOnly()||t.call(this,d,true)}for(var f in b)if(f!=this.element){c=a.getElementsByTag(f);for(e=c.count()-1;e>=0;e--){d=c.getItem(e);d.isReadOnly()||n(d,b[f])}}}function n(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],f;if(f=a.getAttribute(e)){var g=b[d][1];(g===null|| -g.test&&g.test(f)||typeof g=="string"&&f==g)&&a.removeAttribute(e)}}c||w(a)}function w(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(F),d=a.getNext(F);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&& -d.mergeSiblings()}}}function o(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=r(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function r(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);return a}function i(a,b){for(var c in a)a[c]=a[c].replace(R,function(a, -c){return b[c]})}function k(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;if(typeof e=="string")f=e.toLowerCase();else{f=e.element?e.element.toLowerCase():a.element;g=e.attributes}e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function l(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a, -b);return d[c?"getStyle":"getAttribute"](a)}function q(a,b,c){for(var d=a.document,e=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,f,g=e.createIterator();f=g.getNextRange();)b.call(this,f,c);a.selectRanges(e);d.removeCustomData("doc_processing_style")}var x={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},s= -{a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},M=/\s*(?:;\s*|$)/,R=/#\((.+?)\)/g,N=CKEDITOR.dom.walker.bookmark(0,1),F=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);i(a.attributes, -b);i(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(x[c]?CKEDITOR.STYLE_BLOCK:s[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return q.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode; -q.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return q.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;q.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?g:this.type==CKEDITOR.STYLE_OBJECT?f:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange= -this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?h:this.type==CKEDITOR.STYLE_OBJECT?d:null;return this.removeFromRange(a)},applyToObject:function(a){r(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++){e=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(e==a.block||e==a.blockLimit))){if(this.type== -CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!(typeof this.element=="string"?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true},checkElementMatch:function(a,b){var c=this._.definition; -if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f){e++;d[g]=f[g]}if(g=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=g}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d=="string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e== -"string"&&(e=CKEDITOR.tools.parseCssText(e,true));g=void 0;for(g in d)if(!(g in e&&(e[g]==d[g]||d[g]=="inherit"||e[g]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=k(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0];if(d=a.getAttribute(d)){var e=b[c][1];if(e===null||typeof e== -"string"&&d==e||e.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'="',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c=a.attributes&&a.attributes.style||"", -d="";c.length&&(c=c.replace(M,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(M,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,true);return this.customHandlers[a.type]=b}; -var Q=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,J=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,true)};CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)}; -CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,e,b){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,b)}; -CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,e){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var e=0;e<b.length;e++){var d=b[e],g=d.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,g)}})}b.push({style:a,fn:e})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions); -else{var e=this,b=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){e._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){e._.stylesDefinitions=b[c];a(e._.stylesDefinitions)})}}}}); -CKEDITOR.dom.comment=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});"use strict"; -(function(){var a={},e={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(e[b]=1);CKEDITOR.dom.elementPath=function(b,f){var d=null,g=null,h=[],m=b,j,f=f||b.getDocument().getBody();do if(m.type==CKEDITOR.NODE_ELEMENT){h.push(m);if(!this.lastElement){this.lastElement=m;if(m.is(CKEDITOR.dtd.$object)||m.getAttribute("contenteditable")=="false")continue}if(m.equals(f))break;if(!g){j=m.getName(); -m.getAttribute("contenteditable")=="true"?g=m:!d&&e[j]&&(d=m);if(a[j]){var p;if(p=!d){if(j=j=="div"){a:{j=m.getChildren();p=0;for(var u=j.count();p<u;p++){var t=j.getItem(p);if(t.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[t.getName()]){j=true;break a}}j=false}j=!j}p=j}p?d=m:g=m}}}while(m=m.getParent());g||(g=f);this.block=d;this.blockLimit=g;this.root=f;this.elements=h}})(); -CKEDITOR.dom.elementPath.prototype={compare:function(a){var e=this.elements,a=a&&a.elements;if(!a||e.length!=a.length)return false;for(var b=0;b<e.length;b++)if(!e[b].equals(a[b]))return false;return true},contains:function(a,e,b){var c;typeof a=="string"&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?c=a:typeof a=="object"&&(c= -function(b){return b.getName()in a});var f=this.elements,d=f.length;e&&d--;if(b){f=Array.prototype.slice.call(f,0);f.reverse()}for(e=0;e<d;e++)if(c(f[e]))return f[e];return null},isContextFor:function(a){var e;if(a in CKEDITOR.dtd.$block){e=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!e.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}}; -CKEDITOR.dom.text=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node; -CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var e=this.$.parentNode,b=e.childNodes.length,c=this.getLength(),f=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(a),f);if(e.childNodes.length==b)if(a>=c){d=f.createText("");d.insertAfter(this)}else{a=f.createText("");a.insertAfter(d);a.remove()}return d},substring:function(a, -e){return typeof e!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}}); -(function(){function a(a,c,e){var d=a.serializable,g=c[e?"endContainer":"startContainer"],h=e?"endOffset":"startOffset",m=d?c.document.getById(a.startNode):a.startNode,a=d?c.document.getById(a.endNode):a.endNode;if(g.equals(m.getPrevious())){c.startOffset=c.startOffset-g.getLength()-a.getPrevious().getLength();g=a.getNext()}else if(g.equals(a.getPrevious())){c.startOffset=c.startOffset-g.getLength();g=a.getNext()}g.equals(m.getParent())&&c[h]++;g.equals(a.getParent())&&c[h]++;c[e?"endContainer":"startContainer"]= -g;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,e)};var e={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),e=[],d;return{getNextRange:function(g){d=d===void 0?0:d+1;var h=a[d];if(h&&a.length>1){if(!d)for(var m=a.length-1;m>=0;m--)e.unshift(a[m].createBookmark(true));if(g)for(var j=0;a[d+j+1];){for(var p=h.document,g=0,m=p.getById(e[j].endNode),p=p.getById(e[j+ -1].startNode);;){m=m.getNextSourceNode(false);if(p.equals(m))g=1;else if(c(m)||m.type==CKEDITOR.NODE_ELEMENT&&m.isBlockBoundary())continue;break}if(!g)break;j++}for(h.moveToBookmark(e.shift());j--;){m=a[++d];m.moveToBookmark(e.shift());h.setEnd(m.endContainer,m.endOffset)}}return h}}},createBookmarks:function(b){for(var c=[],e,d=0;d<this.length;d++){c.push(e=this[d].createBookmark(b,true));for(var g=d+1;g<this.length;g++){this[g]=a(e,this[g]);this[g]=a(e,this[g],true)}}return c},createBookmarks2:function(a){for(var c= -[],e=0;e<this.length;e++)c.push(this[e].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})(); -(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function e(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){b=b+("_"+c[e]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(e(a));d[a]=1}b&&b()} -function c(a){var b=a.getById(g);if(!b){b=a.getHead().append("style");b.setAttribute("id",g);b.setAttribute("type","text/css")}return b}function f(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var g=0;g<a.length;g++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[g].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&& -CKEDITOR.env.version<11?a[g].$.styleSheet.cssText=a[g].$.styleSheet.cssText+f:a[g].$.innerHTML=a[g].$.innerHTML+f}}var d={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(e(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a, -b,c,d,e){var f;if(a){a=a.toLowerCase();b&&(f=this.icons[a+"-rtl"]);f||(f=this.icons[a])}a=c||f&&f.path||"";d=d||f&&f.offset;e=e||f&&f.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){var c=CKEDITOR.skin.chameleon,d=[[m,a]];this.uiColor=a;f([b],c(this, -"editor"),d);f(h,c(this,"panel"),d)}).call(this,a)}});var g="cke_ui_color",h=[],m=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);h.push(a);var d=b.getUiColor();d&&f([a],CKEDITOR.skin.chameleon(b,"panel"),[[m,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); -(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var e=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(e&&e==b)}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc"; -CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(e=0;e<a.length;e++){CKEDITOR.editor.prototype.constructor.apply(a[e][0],a[e][1]);CKEDITOR.add(a[e][0])}}})();/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.skin.name="moono";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8"; -CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c, -a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), -panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; -return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g, -"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!= -this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})}, -this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),s=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(s.test(a)||"title"==a||"type"==a)&&delete b[a];return b};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,f){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];var e={role:a.role||"presentation"};a.includeLabel&&(e["aria-labelledby"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null, -e,function(){var e=[],g=a.required?" cke_required":"";if(a.labelLayout!="horizontal")e.push('<label class="cke_dialog_ui_labeled_label'+g+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',a.controlStyle?' style="'+a.controlStyle+'"':"",' role="presentation">',f.call(this,b,a),"</div>");else{g={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+ -g+'" id="'+c.labelId+'" for="'+c.inputId+'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+f.call(this,b,a)+"</span>"}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,g,e)}return e.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+ -a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,k=!1;b.on("load",function(){e.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(k=true)});e.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&k){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);k=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this, -b,a,d,function(){var b=['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var e in c)b.push(e+'="'+c[e]+'" ');b.push(" /></div>");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",e={};a.validate&&(this.validate=a.validate); -e.rows=a.rows||5;e.cols=a.cols||20;e["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e["aria-labelledby"]=this._.labelId;this._.required&&(e["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',c,'" '],b;for(b in e)a.push(b+'="'+CKEDITOR.tools.htmlEncode(e[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(f._["default"]), -"</textarea></div>");return a.join("")})}},checkbox:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),e=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked= -"checked";if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,"input",null,g);e.push(' <label id="',d,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return e.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var f=[],c=this;a.role="radiogroup"; -a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",i=0;i<a.items.length;i++){var j=a.items[i],h=j[2]!==void 0?j[2]:j[0],l=j[1]!==void 0?j[1]:j[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),h=CKEDITOR.tools.extend({},m,{title:h},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]== -l)o.checked="checked";p(m);p(h);if(typeof m.inputStyle!="undefined")m.style=m.inputStyle;m.keyboardFocusable=true;f.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b,h,q,"label",null,{id:n,"for":o.id},j[0]);e.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,f,e,d);return d.join("")});this._.children=f}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this); -var f=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){f.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(f.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var e=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button", -"aria-labelledby":e},'<span id="'+e+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}},select:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a);a.validate&&(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),e=[],d=[],g={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId}; -e.push('<div class="cke_dialog_ui_input_',a.type,'" role="presentation"');a.width&&e.push('style="width:'+a.width+'" ');e.push(">");if(a.size!=void 0)g.size=a.size;if(a.multiple!=void 0)g.multiple=a.multiple;p(c);for(var i=0,j;i<a.items.length&&(j=a.items[i]);i++)d.push('<option value="',CKEDITOR.tools.htmlEncode(j[1]!==void 0?j[1]:j[0]).replace(/"/g,"""),'" /> ',CKEDITOR.tools.htmlEncode(j[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.select=new CKEDITOR.ui.dialog.uiElement(b, -c,e,"select",null,g,d.join(""));e.push("</div>");return e.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a["default"]&&(a["default"]="");var f=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="', -f.frameId,'" title="',a.label,'" src="javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"></iframe>');return b.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d= -a["for"];if(!e||e.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var k=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var i=c.focus;if(i){var j=this.focus;this.focus=function(){("function"== -typeof i?i:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,k,"span",null,null,"");k=k.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",k[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push("<legend"+ -(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+e+"</legend>");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b= -CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()}, -isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, -focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype= -CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0< -b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this, -arguments);b.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,f,c=0;c<d.length&&(f=d[c]);c++)f.getElement().$.checked=f.getValue()==b;!a&&this.fire("change",{value:b})}, -getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&& -this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this,arguments);return null}}},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit(); -return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,f=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):f(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();var b="";f.size&&(b=f.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input"; -d.$.write(['<html dir="'+g+'" lang="'+i+'"><head><title>','
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/LICENSE.md b/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/LICENSE.md deleted file mode 100644 index 844ab4de..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/LICENSE.md +++ /dev/null @@ -1,28 +0,0 @@ -Software License Agreement -========================== - -**CKEditor SCAYT Plugin** -Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: - -* GNU General Public License Version 2 or later (the "GPL"): - http://www.gnu.org/licenses/gpl.html - -* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): - http://www.gnu.org/licenses/lgpl.html - -* Mozilla Public License Version 1.1 or later (the "MPL"): - http://www.mozilla.org/MPL/MPL-1.1.html - -You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. - -Sources of Intellectual Property Included in this plugin --------------------------------------------------------- - -Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/README.md b/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/README.md deleted file mode 100644 index 1231d91e..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/README.md +++ /dev/null @@ -1,25 +0,0 @@ -CKEditor SCAYT Plugin -===================== - -This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+. - -SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. - -Installation ------------- - -1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. -2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): - - config.extraPlugins = 'scayt'; - -That's all. SCAYT will appear on the editor toolbar and will be ready to use. - -License -------- - -Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). - -See LICENSE.md for more information. - -Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/options.js b/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/options.js deleted file mode 100644 index aec9a1c9..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/options.js +++ /dev/null @@ -1,17 +0,0 @@ -CKEDITOR.dialog.add("scaytDialog",function(f){var g=f.scayt,k='

'+g.getLocal("version")+g.getVersion()+"

"+g.getLocal("text_copyrights")+"

",l=CKEDITOR.document,i={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:g.getLang(),newLang:null,reset:function(){this.currentLang=g.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:g.getLocal("tab_options"),onShow:function(){},elements:[{type:"vbox", -id:"scaytOptions",children:function(){var a=g.getApplicationConfig(),e=[],b={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},d;for(d in a){var c={type:"checkbox"};c.id=d;c.label=g.getLocal(b[d]);e.push(c)}return e}(),onShow:function(){this.getChild();for(var a=f.scayt,e=0;e
',onShow:function(){var a=f.scayt.getLang();l.getById("scaytLang_"+a).$.checked=!0}}]}]},{id:"dictionaries",label:g.getLocal("tab_dictionaries"), -elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:g.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var e=a.sender,b=f.scayt;setTimeout(function(){e.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()&&e.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName())},0)}},{type:"hbox", -id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:g.getLocal("btn_createDic"),title:g.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),e=j,b=f.scayt,d=a.getContentElement("dictionaries","dictionaryName").getValue();b.createUserDictionary(d,function(c){c.error||e.toggleDictionaryButtons.call(a,!0);c.dialog=a;c.command="create";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="create"; -c.name=d;f.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"restoreDic",label:g.getLocal("btn_restoreDic"),title:g.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName").getValue();e.restoreUserDictionary(d,function(c){c.dialog=a;c.error||b.toggleDictionaryButtons.call(a,!0);c.command="restore";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="restore";c.name=d;f.fire("scaytUserDictionaryActionError", -c)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:g.getLocal("btn_deleteDic"),title:g.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName"),c=d.getValue();e.removeUserDictionary(c,function(e){d.setValue("");e.error||b.toggleDictionaryButtons.call(a,!1);e.dialog=a;e.command="remove";e.name=c;f.fire("scaytUserDictionaryAction",e)},function(b){b.dialog= -a;b.command="remove";b.name=c;f.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"renameDic",label:g.getLocal("btn_renameDic"),title:g.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=a.getContentElement("dictionaries","dictionaryName").getValue();e.renameUserDictionary(b,function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryAction",d)},function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryActionError",d)})}}]}, -{type:"html",id:"dicInfo",html:'
'+g.getLocal("text_descriptionDic")+"
"}]}]},{id:"about",label:g.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'
'+k+"
"}]}];f.on("scaytUserDictionaryAction",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;void 0===a.data.error?(c=d.getLocal("message_success_"+ -a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c),SCAYT.$(b.$).css({color:"blue"})):(""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c)),SCAYT.$(b.$).css({color:"red"}),null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()):e.getContentElement("dictionaries","dictionaryName").setValue(""))}); -f.on("scaytUserDictionaryActionError",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c));SCAYT.$(b.$).css({color:"red"});null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()): -e.getContentElement("dictionaries","dictionaryName").setValue("")});var j={title:g.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=f.config.scayt_uiTabs[1]){var a=j,e=a.getLangBoxes.call(this);e.getParent().setStyle("white-space","normal");a.renderLangList(e);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){i.reset()},onHide:function(){f.unlockSelection()}, -onShow:function(){f.fire("scaytDialogShown",this);if(0!=f.config.scayt_uiTabs[2]){var a=f.scayt,e=this.getContentElement("dictionaries","dictionaryName"),b=this.getContentElement("dictionaries","existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();b.hide();d.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),b.show()):(e.setValue(""), -d.show())}},onOk:function(){var a=j,e=f.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);e.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var e=this.getContentElement("dictionaries","existDic").getElement().getParent(),b=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(e.show(),b.hide()):(e.hide(),b.show())},getChangedOption:function(){var a={};if(1==f.config.scayt_uiTabs[0])for(var e=this.getContentElement("options", -"scaytOptions").getChild(),b=0;b'),g=new CKEDITOR.dom.element("label"),h=f.scayt;b.setStyles({"white-space":"normal",position:"relative"}); -c.on("click",function(a){i.newLang=a.sender.getValue()});g.appendText(a);g.setAttribute("for",d);b.append(c);b.append(g);e===h.getLang()&&(c.setAttribute("checked",!0),c.setAttribute("defaultChecked","defaultChecked"));return b},renderLangList:function(a){var e=a.find("#left-col-"+f.name).getItem(0),a=a.find("#right-col-"+f.name).getItem(0),b=g.getLangList(),d={},c=[],i=0,h;for(h in b.ltr)d[h]=b.ltr[h];for(h in b.rtl)d[h]=b.rtl[h];for(h in d)c.push([h,d[h]]);c.sort(function(a,b){var c=0;a[1]>b[1]? -c=1:a[1]'+a.options+"",'"],l=h.length,a=0;a');var m="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();d.push('");a%g==g-1&&d.push("")}if(a");d.push("")}d.push("
"); -e={type:"html",id:"smileySelector",html:d.join(""),onLoad:function(a){i=a.sender},focus:function(){var a=this;setTimeout(function(){a.getElement().getElementsByTag("a").getItem(0).focus()},0)},onClick:k,style:"width: 100%; border-collapse: separate;"};return{title:f.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.gif deleted file mode 100644 index 21f81a2f..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.png deleted file mode 100644 index 559e5e71..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.gif deleted file mode 100644 index c912d99b..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.png deleted file mode 100644 index c05d2be3..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.gif deleted file mode 100644 index 4162a7b2..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.png deleted file mode 100644 index a711c0d8..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.gif deleted file mode 100644 index 0e420cba..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.png deleted file mode 100644 index e0b8e5c6..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.gif deleted file mode 100644 index b5133427..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.png deleted file mode 100644 index a1891a34..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.gif deleted file mode 100644 index 9b2a1005..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.png deleted file mode 100644 index 53247a88..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embaressed_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embaressed_smile.gif deleted file mode 100644 index 8d39f252..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embaressed_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.gif deleted file mode 100644 index 8d39f252..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.png deleted file mode 100644 index 34904b66..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.gif deleted file mode 100644 index 5294ec48..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.png deleted file mode 100644 index 44398ad1..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.gif deleted file mode 100644 index 160be8ef..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.png deleted file mode 100644 index df409e62..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.gif deleted file mode 100644 index ffb23db0..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.png deleted file mode 100644 index a4f2f363..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.gif deleted file mode 100644 index ceb6e2d9..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.png deleted file mode 100644 index 0c4a9240..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.gif deleted file mode 100644 index 3177355f..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.png deleted file mode 100644 index abc4e2d0..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.gif deleted file mode 100644 index fdcf5c33..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.png deleted file mode 100644 index 0f2649b7..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.gif deleted file mode 100644 index cca0729d..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.png deleted file mode 100644 index f20f3bf3..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.gif deleted file mode 100644 index 7d93474c..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.png deleted file mode 100644 index fdaa28b7..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.gif deleted file mode 100644 index 44c37996..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.png deleted file mode 100644 index 5e63785e..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.gif deleted file mode 100644 index 5c8bee30..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.png deleted file mode 100644 index 1823481f..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.gif deleted file mode 100644 index 9cc37029..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.png deleted file mode 100644 index d4e8b22a..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.gif deleted file mode 100644 index 81e05b0f..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.png deleted file mode 100644 index 56553fbe..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tounge_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tounge_smile.gif deleted file mode 100644 index 81e05b0f..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tounge_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif deleted file mode 100644 index eef4fc00..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png deleted file mode 100644 index f9714d1b..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.gif deleted file mode 100644 index 6d3d64bd..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.png deleted file mode 100644 index 7c99c3fc..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt deleted file mode 100644 index baadd2b7..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -cs.js Found: 118 Missing: 0 -cy.js Found: 118 Missing: 0 -de.js Found: 118 Missing: 0 -el.js Found: 16 Missing: 102 -eo.js Found: 118 Missing: 0 -et.js Found: 31 Missing: 87 -fa.js Found: 24 Missing: 94 -fi.js Found: 23 Missing: 95 -fr.js Found: 118 Missing: 0 -hr.js Found: 23 Missing: 95 -it.js Found: 118 Missing: 0 -nb.js Found: 118 Missing: 0 -nl.js Found: 118 Missing: 0 -no.js Found: 118 Missing: 0 -tr.js Found: 118 Missing: 0 -ug.js Found: 39 Missing: 79 -zh-cn.js Found: 118 Missing: 0 diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ar.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ar.js deleted file mode 100644 index acb6c923..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ar.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستفهام غير صحيحة",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/bg.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/bg.js deleted file mode 100644 index 0bf8749e..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/bg.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ca.js deleted file mode 100644 index e6504372..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ca.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení", -laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit", -Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex", -Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla", -Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu", -aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi", -igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi", -divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex", -374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant", -asymp:"Gairebé igual a"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cs.js deleted file mode 100644 index c2b38f0f..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cs.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", -not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku", -Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm", -Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou", -Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo", -acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo", -icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo", -uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá", -8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cy.js deleted file mode 100644 index 77f59f61..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cy.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", -reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig", -Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom", -Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild", -Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig", -aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom", -euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom", -otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod", -OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith", -diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/de.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/de.js deleted file mode 100644 index 6b3ce87e..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/de.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen", -reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex", -Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex", -Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent", -Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben", -aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema", -eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut", -ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex", -sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/el.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/el.js deleted file mode 100644 index e7c2a219..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/el.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",rdquo:"Δεξιός χαρακτήρας διπλού εισαγωγικού",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων", -ordf:"Feminine ordinal indicator",laquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",not:"Not sign",reg:"Σύμβολο σημάτων κατατεθέν",macr:"Μακρόν",deg:"Σύμβολο βαθμού",sup2:"Εκτεθειμένο δύο",sup3:"Εκτεθειμένο τρία",acute:"Οξεία",micro:"Σύμβολο μικρού",para:"Σύμβολο παραγράφου",middot:"Μέση τελεία",cedil:"Υπογεγραμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Γνήσιο κλάσμα ενός τετάρτου",frac12:"Γνήσιο κλάσμα ενός δεύτερου",frac34:"Γνήσιο κλάσμα τριών τετάρτων", -iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γράμμα A με βαρεία",Aacute:"Λατινικό κεφαλαίο γράμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Atilde:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Auml:"Λατινικό κεφαλαίο γράμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω",AElig:"Λατινικό κεφαλαίο γράμμα Æ",Ccedil:"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη",Egrave:"Λατινικό κεφαλαίο γράμμα E με βαρεία",Eacute:"Λατινικό κεφαλαίο γράμμα E με οξεία",Ecirc:"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη ", -Euml:"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γράμμα I με βαρεία",Iacute:"Λατινικό κεφαλαίο γράμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γράμμα I με περισπωμένη",Iuml:"Λατινικό κεφαλαίο γράμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γράμμα Eth",Ntilde:"Λατινικό κεφαλαίο γράμμα N με περισπωμένη",Ograve:"Λατινικό κεφαλαίο γράμμα O με βαρεία",Oacute:"Λατινικό κεφαλαίο γράμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη ",Otilde:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη", -Ouml:"Λατινικό κεφαλαίο γράμμα O με διαλυτικά",times:"Σύμβολο πολλαπλασιασμού",Oslash:"Λατινικό κεφαλαίο γράμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γράμμα U με βαρεία",Uacute:"Λατινικό κεφαλαίο γράμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γράμμα U με περισπωμένη",Uuml:"Λατινικό κεφαλαίο γράμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γράμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γράμμα Thorn",szlig:"Λατινικό μικρό γράμμα απότομο s",agrave:"Λατινικό μικρό γράμμα a με βαρεία",aacute:"Λατινικό μικρό γράμμα a με οξεία", -acirc:"Λατινικό μικρό γράμμα a με περισπωμένη",atilde:"Λατινικό μικρό γράμμα a με περισπωμένη",auml:"Λατινικό μικρό γράμμα a με διαλυτικά",aring:"Λατινικό μικρό γράμμα a με δακτύλιο πάνω",aelig:"Λατινικό μικρό γράμμα æ",ccedil:"Λατινικό μικρό γράμμα c με υπογεγραμμένη",egrave:"Λατινικό μικρό γράμμα ε με βαρεία",eacute:"Λατινικό μικρό γράμμα e με οξεία",ecirc:"Λατινικό μικρό γράμμα e με περισπωμένη",euml:"Λατινικό μικρό γράμμα e με διαλυτικά",igrave:"Λατινικό μικρό γράμμα i με βαρεία",iacute:"Λατινικό μικρό γράμμα i με οξεία", -icirc:"Λατινικό μικρό γράμμα i με περισπωμένη",iuml:"Λατινικό μικρό γράμμα i με διαλυτικά",eth:"Λατινικό μικρό γράμμα eth",ntilde:"Λατινικό μικρό γράμμα n με περισπωμένη",ograve:"Λατινικό μικρό γράμμα o με βαρεία",oacute:"Λατινικό μικρό γράμμα o με οξεία ",ocirc:"Λατινικό πεζό γράμμα o με περισπωμένη",otilde:"Λατινικό μικρό γράμμα o με περισπωμένη ",ouml:"Λατινικό μικρό γράμμα o με διαλυτικά",divide:"Σύμβολο διαίρεσης",oslash:"Λατινικό μικρό γράμμα o με περισπωμένη",ugrave:"Λατινικό μικρό γράμμα u με βαρεία", -uacute:"Λατινικό μικρό γράμμα u με οξεία",ucirc:"Λατινικό μικρό γράμμα u με περισπωμένη",uuml:"Λατινικό μικρό γράμμα u με διαλυτικά",yacute:"Λατινικό μικρό γράμμα y με οξεία",thorn:"Λατινικό μικρό γράμμα thorn",yuml:"Λατινικό μικρό γράμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ",oelig:"Λατινικό μικρό σύμπλεγμα oe",372:"Λατινικό κεφαλαίο γράμμα W με περισπωμένη",374:"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη",373:"Λατινικό μικρό γράμμα w με περισπωμένη",375:"Λατινικό μικρό γράμμα y με περισπωμένη", -sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Οριζόντια αποσιωπητικά",trade:"Σύμβολο εμπορικού κατατεθέν",9658:"Μαύρος δείκτης που δείχνει προς τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αριστερά-δεξιά",diams:"Μαύρο διαμάντι",asymp:"Σχεδόν ίσο με"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js deleted file mode 100644 index 5a147863..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en.js deleted file mode 100644 index 26f61c2e..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/eo.js deleted file mode 100644 index d44b0d2e..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/eo.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", -sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao", -Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo", -Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno", -szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao", -igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno", -uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo", -bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/es.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/es.js deleted file mode 100644 index 79d437f9..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/es.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares", -not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave", -Aacute:"Letra A latina mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis", -Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis", -times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo", -acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave", -iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada", -ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo", -373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/et.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/et.js deleted file mode 100644 index 22c90561..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/et.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer", -bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fa.js deleted file mode 100644 index e0b27c59..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fa.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده", -macr:"نشان خط بالای حرف",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصف",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حرف A بزرگ لاتین با تلفظ غلیظ",Aacute:"حرف A بزرگ لاتین با تلفظ شدید",Acirc:"حرف A بزرگ لاتین با دور",Atilde:"حرف A بزرگ لاتین با صدای کامی", -Auml:"حرف A بزرگ لاتین با نشان سواگیری",Aring:"حرف A بزرگ لاتین با حلقه بالا",AElig:"حرف Æ بزرگ لاتین",Ccedil:"حرف C بزرگ لاتین با نشان سواگیری",Egrave:"حرف E بزرگ لاتین با تلفظ درشت",Eacute:"حرف E بزرگ لاتین با تلفظ زیر",Ecirc:"حرف E بزرگ لاتین با خمان",Euml:"حرف E بزرگ لاتین با نشان سواگیری",Igrave:"حرف I بزرگ لاتین با تلفظ درشت",Iacute:"حرف I بزرگ لاتین با تلفظ ریز",Icirc:"حرف I بزرگ لاتین با خمان",Iuml:"حرف I بزرگ لاتین با نشان سواگیری",ETH:"حرف لاتین بزرگ واکه ترتیبی",Ntilde:"حرف N بزرگ لاتین با مد", -Ograve:"حرف O بزرگ لاتین با تلفظ درشت",Oacute:"حرف O بزرگ لاتین با تلفظ ریز",Ocirc:"حرف O بزرگ لاتین با خمان",Otilde:"حرف O بزرگ لاتین با مد",Ouml:"حرف O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حرف O بزرگ لاتین با میان خط",Ugrave:"حرف U بزرگ لاتین با تلفظ درشت",Uacute:"حرف U بزرگ لاتین با تلفظ ریز",Ucirc:"حرف U بزرگ لاتین با خمان",Uuml:"حرف U بزرگ لاتین با نشان سواگیری",Yacute:"حرف Y بزرگ لاتین با تلفظ ریز",THORN:"حرف بزرگ لاتین خاردار",szlig:"حرف کوچک لاتین شارپ s",agrave:"حرف a کوچک لاتین با تلفظ درشت", -aacute:"حرف a کوچک لاتین با تلفظ ریز",acirc:"حرف a کوچک لاتین با خمان",atilde:"حرف a کوچک لاتین با صدای کامی",auml:"حرف a کوچک لاتین با نشان سواگیری",aring:"حرف a کوچک لاتین گوشواره دار",aelig:"حرف کوچک لاتین æ",ccedil:"حرف c کوچک لاتین با نشان سدیل",egrave:"حرف e کوچک لاتین با تلفظ درشت",eacute:"حرف e کوچک لاتین با تلفظ ریز",ecirc:"حرف e کوچک لاتین با خمان",euml:"حرف e کوچک لاتین با نشان سواگیری",igrave:"حرف i کوچک لاتین با تلفظ درشت",iacute:"حرف i کوچک لاتین با تلفظ ریز",icirc:"حرف i کوچک لاتین با خمان", -iuml:"حرف i کوچک لاتین با نشان سواگیری",eth:"حرف کوچک لاتین eth",ntilde:"حرف n کوچک لاتین با صدای کامی",ograve:"حرف o کوچک لاتین با تلفظ درشت",oacute:"حرف o کوچک لاتین با تلفظ زیر",ocirc:"حرف o کوچک لاتین با خمان",otilde:"حرف o کوچک لاتین با صدای کامی",ouml:"حرف o کوچک لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حرف o کوچک لاتین با میان خط",ugrave:"حرف u کوچک لاتین با تلفظ درشت",uacute:"حرف u کوچک لاتین با تلفظ ریز",ucirc:"حرف u کوچک لاتین با خمان",uuml:"حرف u کوچک لاتین با نشان سواگیری",yacute:"حرف y کوچک لاتین با تلفظ ریز", -thorn:"حرف کوچک لاتین خاردار",yuml:"حرف y کوچک لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند کوچک لاتین oe",372:"حرف W بزرگ لاتین با خمان",374:"حرف Y بزرگ لاتین با خمان",373:"حرف w کوچک لاتین با خمان",375:"حرف y کوچک لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذف افقی",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"فلش راست",rArr:"فلش دوتایی راست",hArr:"فلش دوتایی چپ راست",diams:"نشان الماس سیاه", -asymp:"تقریبا برابر با"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fi.js deleted file mode 100644 index 6d701e3c..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fi.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js deleted file mode 100644 index d19e2e42..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", -not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma", -Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe", -Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma", -eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe", -373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr.js deleted file mode 100644 index 2d1ad096..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", -not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron", -Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu", -Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron", -auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu", -ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe", -373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/gl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/gl.js deleted file mode 100644 index f16d3667..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/gl.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura", -not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave", -Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese", -Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese", -times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo", -acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave", -iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal", -ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo", -373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/he.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/he.js deleted file mode 100644 index dcfc50f0..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/he.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום", -macr:"מקרון (הגיה ארוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה אמצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן אורדינאלי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה רבעים בשבר פשוט",iquest:"סימן שאלה הפוך",Agrave:"אות לטינית A עם גרש (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde", -Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"אות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"אות לטינית E עם גרש (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"אות לטינית I עם גרש (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis", -ETH:"אות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"אות לטינית O עם גרש (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"אות לטינית U עם גרש (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis", -Yacute:"Latin capital letter Y with acute accent",THORN:"אות לטינית Thorn גדולה",szlig:"אות לטינית s חדה קטנה",agrave:"אות לטינית a עם גרש (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"אות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"אות לטינית e עם גרש (Grave)",eacute:"Latin small letter e with acute accent", -ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"אות לטינית i עם גרש (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"אות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"אות לטינית o עם גרש (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis", -divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"אות לטינית u עם גרש (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"אות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex", -373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמארק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"חץ לימין",rArr:"חץ כפול לימין",hArr:"חץ כפול לימין ושמאל",diams:"יהלום מלא",asymp:"כמעט שווה"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hr.js deleted file mode 100644 index af10255d..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hr.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", -reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latinično veliko slovo A sa oštrim naglaskom", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", -Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hu.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hu.js deleted file mode 100644 index 79483051..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hu.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel", -reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel", -Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel", -Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű", -agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel", -icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel", -uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele", -9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/id.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/id.js deleted file mode 100644 index 4928f400..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/id.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/it.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/it.js deleted file mode 100644 index 894b56ce..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/it.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", -not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave", -Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso", -Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso", -Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S", -agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto", -ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto", -ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn", -yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale", -trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ja.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ja.js deleted file mode 100644 index 84fb8fa2..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ja.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", -frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O", -times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth", -ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸", -rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/km.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/km.js deleted file mode 100644 index 65a7518d..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/km.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សេន",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រេ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ku.js deleted file mode 100644 index 4917d4ad..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ku.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ", -ordf:"هێڵ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی چەپ",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی چەپی خواروو",para:"نیشانەی پەڕەگراف",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"هێڵ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار", -Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری", -Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری", -times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری", -atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ", -icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار", -uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری", -375:"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری",sbquo:"نیشانەی فاریزەی نزم",8219:"نیشانەی فاریزەی بەرزی پێچەوانە",bdquo:"دوو فاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی ڕەشی دەستی ڕاست",bull:"فیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست و چەپ",diams:"ڕەشی پاقڵاوەیی",asymp:"نیشانەی یەکسانە"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/lv.js deleted file mode 100644 index 50a77d36..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/lv.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā vienkārtīga pēdiņa",rsquo:"Labā vienkārtīga pēdiņa",ldquo:"Kreisā dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs", -laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi", -Aacute:"Lielais latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi", -Igrave:"Lielais latīņu burts I ar uzsvaras zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi", -times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi", -acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi", -icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ", -uacute:"Mazs latīņu burts u ar akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ", -sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nb.js deleted file mode 100644 index 0cdcde20..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nb.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", -reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", -Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", -times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", -ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", -uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", -rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nl.js deleted file mode 100644 index 68edf37f..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nl.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", -reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe", -Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu", -Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave", -Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema", -aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe", -iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave", -uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe", -375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/no.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/no.js deleted file mode 100644 index eecc56c9..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/no.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", -reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", -Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", -times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", -ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", -uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", -rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pl.js deleted file mode 100644 index f21a09db..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego", -laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania", -Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim", -Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym", -Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim", -eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą", -divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym", -375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka w lewo",diams:"Czarny znak karo",asymp:"Znak prawie równe"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js deleted file mode 100644 index e3f78319..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", -macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema", -Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo", -Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema", -aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo", -otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo", -373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt.js deleted file mode 100644 index 11ef746a..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo do Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão Simples",mdash:"Travessão Longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo do Cêntimo",pound:"Símbolo da Libra",curren:"Símbolo de Moeda",yen:"Símbolo do Iene",brvbar:"Barra quebrada",sect:"Símbolo de Secção",uml:"Trema",copy:"Símbolo dos Direitos de Autor",ordf:"Indicador ordinal feminino", -laquo:"Aspa esquerda ângulo duplo",not:"Não Símbolo",reg:"Símbolo de Registado",macr:"Mácron",deg:"Símbolo de Grau",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de Micro",para:"Símbolo de Parágrafo",middot:"Ponto do Meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo pra Direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrugação invertido",Agrave:"Letra maiúscula latina A com acento grave", -Aacute:"Letra maiúscula latina A com acento agudo",Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra Maiúscula Latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema", -Igrave:"Letra maiúscula latina I com acento grave",Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ðð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema", -times:"Símbolo de Multiplicação",Oslash:"Letra maiúscula O com barra",Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo", -atilde:"Letra minúscula latina a com til",auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo", -icirc:"Letra minúscula latina i com circunflexo",iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de Divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave", -uacute:"Letra minúscula latina u com acento agudo",ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo", -sbquo:"Aspa Simples inferior-9",8219:"Aspa Simples superior invertida-9",bdquo:"Aspa Duplas inferior-9",hellip:"Elipse Horizontal ",trade:"Símbolo de Marca Registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ru.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ru.js deleted file mode 100644 index 866e8659..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ru.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»", -not:"Отрицание",reg:"Знак охраны смежных прав\\t",macr:"Макрон",deg:"Градус",sup2:"Надстрочное два",sup3:"Надстрочное три",acute:"Акут",micro:"Микро",para:"Абзац",middot:"Интерпункт",cedil:"Седиль",sup1:"Надстрочная единица",ordm:"Порядковое числительное",raquo:"Правая кавычка-«ёлочка»",frac14:"Одна четвертая",frac12:"Одна вторая",frac34:"Три четвёртых",iquest:"Перевёрнутый вопросительный знак",Agrave:"Латинская заглавная буква А с апострофом",Aacute:"Латинская заглавная буква A с ударением",Acirc:"Латинская заглавная буква А с циркумфлексом", -Atilde:"Латинская заглавная буква А с тильдой",Auml:"Латинская заглавная буква А с тремой",Aring:"Латинская заглавная буква А с кольцом над ней",AElig:"Латинская большая буква Æ",Ccedil:"Латинская заглавная буква C с седилью",Egrave:"Латинская заглавная буква Е с апострофом",Eacute:"Латинская заглавная буква Е с ударением",Ecirc:"Латинская заглавная буква Е с циркумфлексом",Euml:"Латинская заглавная буква Е с тремой",Igrave:"Латинская заглавная буква I с апострофом",Iacute:"Латинская заглавная буква I с ударением", -Icirc:"Латинская заглавная буква I с циркумфлексом",Iuml:"Латинская заглавная буква I с тремой",ETH:"Латинская большая буква Eth",Ntilde:"Латинская заглавная буква N с тильдой",Ograve:"Латинская заглавная буква O с апострофом",Oacute:"Латинская заглавная буква O с ударением",Ocirc:"Латинская заглавная буква O с циркумфлексом",Otilde:"Латинская заглавная буква O с тильдой",Ouml:"Латинская заглавная буква O с тремой",times:"Знак умножения",Oslash:"Латинская большая перечеркнутая O",Ugrave:"Латинская заглавная буква U с апострофом", -Uacute:"Латинская заглавная буква U с ударением",Ucirc:"Латинская заглавная буква U с циркумфлексом",Uuml:"Латинская заглавная буква U с тремой",Yacute:"Латинская заглавная буква Y с ударением",THORN:"Латинская заглавная буква Thorn",szlig:"Знак диеза",agrave:"Латинская маленькая буква a с апострофом",aacute:"Латинская маленькая буква a с ударением",acirc:"Латинская маленькая буква a с циркумфлексом",atilde:"Латинская маленькая буква a с тильдой",auml:"Латинская маленькая буква a с тремой",aring:"Латинская маленькая буква a с кольцом", -aelig:"Латинская маленькая буква æ",ccedil:"Латинская маленькая буква с с седилью",egrave:"Латинская маленькая буква е с апострофом",eacute:"Латинская маленькая буква е с ударением",ecirc:"Латинская маленькая буква е с циркумфлексом",euml:"Латинская маленькая буква е с тремой",igrave:"Латинская маленькая буква i с апострофом",iacute:"Латинская маленькая буква i с ударением",icirc:"Латинская маленькая буква i с циркумфлексом",iuml:"Латинская маленькая буква i с тремой",eth:"Латинская маленькая буква eth", -ntilde:"Латинская маленькая буква n с тильдой",ograve:"Латинская маленькая буква o с апострофом",oacute:"Латинская маленькая буква o с ударением",ocirc:"Латинская маленькая буква o с циркумфлексом",otilde:"Латинская маленькая буква o с тильдой",ouml:"Латинская маленькая буква o с тремой",divide:"Знак деления",oslash:"Латинская строчная перечеркнутая o",ugrave:"Латинская маленькая буква u с апострофом",uacute:"Латинская маленькая буква u с ударением",ucirc:"Латинская маленькая буква u с циркумфлексом", -uuml:"Латинская маленькая буква u с тремой",yacute:"Латинская маленькая буква y с ударением",thorn:"Латинская маленькая буква thorn",yuml:"Латинская маленькая буква y с тремой",OElig:"Латинская прописная лигатура OE",oelig:"Латинская строчная лигатура oe",372:"Латинская заглавная буква W с циркумфлексом",374:"Латинская заглавная буква Y с циркумфлексом",373:"Латинская маленькая буква w с циркумфлексом",375:"Латинская маленькая буква y с циркумфлексом",sbquo:"Нижняя одинарная кавычка",8219:"Правая одинарная кавычка", -bdquo:"Левая двойная кавычка",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер списка",rarr:"Стрелка вправо",rArr:"Двойная стрелка вправо",hArr:"Двойная стрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/si.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/si.js deleted file mode 100644 index 1255a350..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/si.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්‍යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම", -macr:"මුද්‍රිත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", -Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sk.js deleted file mode 100644 index 2d226d06..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sk.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", -reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom", -Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom", -Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom", -Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad", -aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom", -oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami", -OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo", -hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sl.js deleted file mode 100644 index 84759b62..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Evro znak",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"En pomišljaj",mdash:"Em pomišljaj",iexcl:"Obrnjen klicaj",cent:"Cent znak",pound:"Funt znak",curren:"Znak valute",yen:"Jen znak",brvbar:"Zlomljena črta",sect:"Znak oddelka",uml:"Diaeresis",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi obrnjen dvojni kotni narekovaj",not:"Ne znak",reg:"Registrirani znak", -macr:"Macron",deg:"Znak stopinj",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Mikro znak",para:"Pilcrow znak",middot:"Sredinska pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"Moški zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena četrtina",frac12:"Ena polovica",frac34:"Tri četrtine",iquest:"Obrnjen vprašaj",Agrave:"Velika latinska črka A s krativcem",Aacute:"Velika latinska črka A z ostrivcem",Acirc:"Velika latinska črka A s strešico",Atilde:"Velika latinska črka A z tildo", -Auml:"Velika latinska črka A z diaeresis-om",Aring:"Velika latinska črka A z obročem",AElig:"Velika latinska črka Æ",Ccedil:"Velika latinska črka C s cedillo",Egrave:"Velika latinska črka E s krativcem",Eacute:"Velika latinska črka E z ostrivcem",Ecirc:"Velika latinska črka E s strešico",Euml:"Velika latinska črka E z diaeresis-om",Igrave:"Velika latinska črka I s krativcem",Iacute:"Velika latinska črka I z ostrivcem",Icirc:"Velika latinska črka I s strešico",Iuml:"Velika latinska črka I z diaeresis-om", -ETH:"Velika latinska črka Eth",Ntilde:"Velika latinska črka N s tildo",Ograve:"Velika latinska črka O s krativcem",Oacute:"Velika latinska črka O z ostrivcem",Ocirc:"Velika latinska črka O s strešico",Otilde:"Velika latinska črka O s tildo",Ouml:"Velika latinska črka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika prečrtana latinska črka O",Ugrave:"Velika latinska črka U s krativcem",Uacute:"Velika latinska črka U z ostrivcem",Ucirc:"Velika latinska črka U s strešico",Uuml:"Velika latinska črka U z diaeresis-om", -Yacute:"Velika latinska črka Y z ostrivcem",THORN:"Velika latinska črka Thorn",szlig:"Mala ostra latinska črka s",agrave:"Mala latinska črka a s krativcem",aacute:"Mala latinska črka a z ostrivcem",acirc:"Mala latinska črka a s strešico",atilde:"Mala latinska črka a s tildo",auml:"Mala latinska črka a z diaeresis-om",aring:"Mala latinska črka a z obročem",aelig:"Mala latinska črka æ",ccedil:"Mala latinska črka c s cedillo",egrave:"Mala latinska črka e s krativcem",eacute:"Mala latinska črka e z ostrivcem", -ecirc:"Mala latinska črka e s strešico",euml:"Mala latinska črka e z diaeresis-om",igrave:"Mala latinska črka i s krativcem",iacute:"Mala latinska črka i z ostrivcem",icirc:"Mala latinska črka i s strešico",iuml:"Mala latinska črka i z diaeresis-om",eth:"Mala latinska črka eth",ntilde:"Mala latinska črka n s tildo",ograve:"Mala latinska črka o s krativcem",oacute:"Mala latinska črka o z ostrivcem",ocirc:"Mala latinska črka o s strešico",otilde:"Mala latinska črka o s tildo",ouml:"Mala latinska črka o z diaeresis-om", -divide:"Znak za deljenje",oslash:"Mala prečrtana latinska črka o",ugrave:"Mala latinska črka u s krativcem",uacute:"Mala latinska črka u z ostrivcem",ucirc:"Mala latinska črka u s strešico",uuml:"Mala latinska črka u z diaeresis-om",yacute:"Mala latinska črka y z ostrivcem",thorn:"Mala latinska črka thorn",yuml:"Mala latinska črka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska črka W s strešico",374:"Velika latinska črka Y s strešico", -373:"Mala latinska črka w s strešico",375:"Mala latinska črka y s strešico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"Črni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puščica",rArr:"Desno-usmerjena dvojna puščica",hArr:"Leva in desna dvojna puščica",diams:"Črna kara",asymp:"Skoraj enako"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sq.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sq.js deleted file mode 100644 index c7098005..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sq.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë", -Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika", -Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika", -times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë", -acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë", -iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes", -ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor", -373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sv.js deleted file mode 100644 index 8f741b93..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sv.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", -not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex", -Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex", -Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ", -ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø", -ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken", -trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/th.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/th.js deleted file mode 100644 index ae0b00e5..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/th.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัญลักษณ์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tr.js deleted file mode 100644 index 3dd220a3..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tr.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti", -not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi", -Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi", -ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi", -THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi", -igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi", -uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti", -bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tt.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tt.js deleted file mode 100644 index 2eadb9f7..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tt.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Section sign",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя", -not:"Not sign",reg:"Теркәләнгән булу билгесе",macr:"Макрон",deg:"Градус билгесе",sup2:"Икенче өске индекс",sup3:"Өченче өске индекс",acute:"Басым билгесе",micro:"Микро билгесе",para:"Параграф билгесе",middot:"Middle dot",cedil:"Седиль",sup1:"Беренче өске индекс",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршысыман җәя",frac14:"Гади дүрттән бер билгесе",frac12:"Гади икедән бер билгесе",frac34:"Гади дүрттән өч билгесе",iquest:"Әйләндерелгән өндәү билгесе",Agrave:"Гравис белән латин A баш хәрефе", -Aacute:"Басым билгесе белән латин A баш хәрефе",Acirc:"Циркумфлекс белән латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Диерезис белән латин A баш хәрефе",Aring:"Өстендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Гравис белән латин E баш хәрефе",Eacute:"Басым билгесе белән латин E баш хәрефе",Ecirc:"Циркумфлекс белән латин E баш хәрефе",Euml:"Диерезис белән латин E баш хәрефе",Igrave:"Гравис белән латин I баш хәрефе", -Iacute:"Басым билгесе белән латин I баш хәрефе",Icirc:"Циркумфлекс белән латин I баш хәрефе",Iuml:"Диерезис белән латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Гравис белән латин O баш хәрефе",Oacute:"Басым билгесе белән латин O баш хәрефе",Ocirc:"Циркумфлекс белән латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Диерезис белән латин O баш хәрефе",times:"Тапкырлау билгесе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Гравис белән латин U баш хәрефе", -Uacute:"Басым билгесе белән латин U баш хәрефе",Ucirc:"Циркумфлекс белән латин U баш хәрефе",Uuml:"Диерезис белән латин U баш хәрефе",Yacute:"Басым билгесе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Гравис белән латин a юл хәрефе",aacute:"Басым билгесе белән латин a юл хәрефе",acirc:"Циркумфлекс белән латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Диерезис белән латин a юл хәрефе",aring:"Өстендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе", -ccedil:"Седиль белән латин c юл хәрефе",egrave:"Гравис белән латин e юл хәрефе",eacute:"Басым билгесе белән латин e юл хәрефе",ecirc:"Циркумфлекс белән латин e юл хәрефе",euml:"Диерезис белән латин e юл хәрефе",igrave:"Гравис белән латин i юл хәрефе",iacute:"Басым билгесе белән латин i юл хәрефе",icirc:"Циркумфлекс белән латин i юл хәрефе",iuml:"Диерезис белән латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Гравис белән латин o юл хәрефе",oacute:"Басым билгесе белән латин o юл хәрефе", -ocirc:"Циркумфлекс белән латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Диерезис белән латин o юл хәрефе",divide:"Бүлү билгесе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Гравис белән латин u юл хәрефе",uacute:"Басым билгесе белән латин u юл хәрефе",ucirc:"Циркумфлекс белән латин u юл хәрефе",uuml:"Диерезис белән латин u юл хәрефе",yacute:"Басым билгесе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Диерезис белән латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе", -oelig:"Латин лигатура oe юл хәрефе",372:"Циркумфлекс белән латин W баш хәрефе",374:"Циркумфлекс белән латин Y баш хәрефе",373:"Циркумфлекс белән латин w юл хәрефе",375:"Циркумфлекс белән латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма эллипс",trade:"Сәүдә маркасы билгесе",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow", -diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ug.js deleted file mode 100644 index 51f4c1d9..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ug.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", -deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent", -Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ", -ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent", -oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn", -yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/uk.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/uk.js deleted file mode 100644 index 845e7524..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/uk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки", -not:"Заперечення",reg:"Знак охорони суміжних прав",macr:"Макрон",deg:"Знак градуса",sup2:"два у верхньому індексі",sup3:"три у верхньому індексі",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індексі",ordm:"Чоловічий порядковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питання",Agrave:"Велика латинська A з гравісом",Aacute:"Велика латинська А з акутом", -Acirc:"Велика латинська А з циркумфлексом",Atilde:"Велика латинська А з тильдою",Auml:"Велике латинське А з умлаутом",Aring:"Велика латинська A з кільцем згори",AElig:"Велика латинська Æ",Ccedil:"Велика латинська C з седиллю",Egrave:"Велика латинська E з гравісом",Eacute:"Велика латинська E з акутом",Ecirc:"Велика латинська E з циркумфлексом",Euml:"Велика латинська А з умлаутом",Igrave:"Велика латинська I з гравісом",Iacute:"Велика латинська I з акутом",Icirc:"Велика латинська I з циркумфлексом", -Iuml:"Велика латинська І з умлаутом",ETH:"Велика латинська Eth",Ntilde:"Велика латинська N з тильдою",Ograve:"Велика латинська O з гравісом",Oacute:"Велика латинська O з акутом",Ocirc:"Велика латинська O з циркумфлексом",Otilde:"Велика латинська O з тильдою",Ouml:"Велика латинська О з умлаутом",times:"Знак множення",Oslash:"Велика латинська перекреслена O ",Ugrave:"Велика латинська U з гравісом",Uacute:"Велика латинська U з акутом",Ucirc:"Велика латинська U з циркумфлексом",Uuml:"Велика латинська U з умлаутом", -Yacute:"Велика латинська Y з акутом",THORN:"Велика латинська Торн",szlig:"Мала латинська есцет",agrave:"Мала латинська a з гравісом",aacute:"Мала латинська a з акутом",acirc:"Мала латинська a з циркумфлексом",atilde:"Мала латинська a з тильдою",auml:"Мала латинська a з умлаутом",aring:"Мала латинська a з кільцем згори",aelig:"Мала латинська æ",ccedil:"Мала латинська C з седиллю",egrave:"Мала латинська e з гравісом",eacute:"Мала латинська e з акутом",ecirc:"Мала латинська e з циркумфлексом",euml:"Мала латинська e з умлаутом", -igrave:"Мала латинська i з гравісом",iacute:"Мала латинська i з акутом",icirc:"Мала латинська i з циркумфлексом",iuml:"Мала латинська i з умлаутом",eth:"Мала латинська Eth",ntilde:"Мала латинська n з тильдою",ograve:"Мала латинська o з гравісом",oacute:"Мала латинська o з акутом",ocirc:"Мала латинська o з циркумфлексом",otilde:"Мала латинська o з тильдою",ouml:"Мала латинська o з умлаутом",divide:"Знак ділення",oslash:"Мала латинська перекреслена o",ugrave:"Мала латинська u з гравісом",uacute:"Мала латинська u з акутом", -ucirc:"Мала латинська u з циркумфлексом",uuml:"Мала латинська u з умлаутом",yacute:"Мала латинська y з акутом",thorn:"Мала латинська торн",yuml:"Мала латинська y з умлаутом",OElig:"Велика латинська лігатура OE",oelig:"Мала латинська лігатура oe",372:"Велика латинська W з циркумфлексом",374:"Велика латинська Y з циркумфлексом",373:"Мала латинська w з циркумфлексом",375:"Мала латинська y з циркумфлексом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки", -hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер списку",rarr:"Стрілка вправо",rArr:"Подвійна стрілка вправо",hArr:"Подвійна стрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Наближено дорівнює"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/vi.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/vi.js deleted file mode 100644 index d4e4d37a..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/vi.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự", -reg:"Ký tự đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tự độ",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trọng âm",micro:"Ký tự micro",para:"Ký tự đoạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lưới",sup1:"Ký tự trồi lên cấp 1",ordm:"Ký tự biểu hiện giống đực",raquo:"Chọn dấu ngoặc đôi phải",frac14:"Tỉ lệ một phần tư",frac12:"Tỉ lệ một nửa",frac34:"Tỉ lệ ba phần tư",iquest:"Chuyển đổi dấu chấm hỏi",Agrave:"Ký tự la-tinh viết hoa A với dấu huyền",Aacute:"Ký tự la-tinh viết hoa A với dấu sắc", -Acirc:"Ký tự la-tinh viết hoa A với dấu mũ",Atilde:"Ký tự la-tinh viết hoa A với dấu ngã",Auml:"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu",Aring:"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu",AElig:"Ký tự la-tinh viết hoa của Æ",Ccedil:"Ký tự la-tinh viết hoa C với dấu móc bên dưới",Egrave:"Ký tự la-tinh viết hoa E với dấu huyền",Eacute:"Ký tự la-tinh viết hoa E với dấu sắc",Ecirc:"Ký tự la-tinh viết hoa E với dấu mũ",Euml:"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu", -Igrave:"Ký tự la-tinh viết hoa I với dấu huyền",Iacute:"Ký tự la-tinh viết hoa I với dấu sắc",Icirc:"Ký tự la-tinh viết hoa I với dấu mũ",Iuml:"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu",ETH:"Viết hoa của ký tự Eth",Ntilde:"Ký tự la-tinh viết hoa N với dấu ngã",Ograve:"Ký tự la-tinh viết hoa O với dấu huyền",Oacute:"Ký tự la-tinh viết hoa O với dấu sắc",Ocirc:"Ký tự la-tinh viết hoa O với dấu mũ",Otilde:"Ký tự la-tinh viết hoa O với dấu ngã",Ouml:"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu", -times:"Ký tự phép toán nhân",Oslash:"Ký tự la-tinh viết hoa A với dấu ngã xuống",Ugrave:"Ký tự la-tinh viết hoa U với dấu huyền",Uacute:"Ký tự la-tinh viết hoa U với dấu sắc",Ucirc:"Ký tự la-tinh viết hoa U với dấu mũ",Uuml:"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu",Yacute:"Ký tự la-tinh viết hoa Y với dấu sắc",THORN:"Phần viết hoa của ký tự Thorn",szlig:"Ký tự viết nhỏ la-tinh của chữ s",agrave:"Ký tự la-tinh thường với dấu huyền",aacute:"Ký tự la-tinh thường với dấu sắc",acirc:"Ký tự la-tinh thường với dấu mũ", -atilde:"Ký tự la-tinh thường với dấu ngã",auml:"Ký tự la-tinh thường với dấu hai chấm trên đầu",aring:"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu",aelig:"Ký tự la-tinh viết thường của æ",ccedil:"Ký tự la-tinh viết thường của c với dấu móc bên dưới",egrave:"Ký tự la-tinh viết thường e với dấu huyền",eacute:"Ký tự la-tinh viết thường e với dấu sắc",ecirc:"Ký tự la-tinh viết thường e với dấu mũ",euml:"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu",igrave:"Ký tự la-tinh viết thường i với dấu huyền", -iacute:"Ký tự la-tinh viết thường i với dấu sắc",icirc:"Ký tự la-tinh viết thường i với dấu mũ",iuml:"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu",eth:"Ký tự la-tinh viết thường của eth",ntilde:"Ký tự la-tinh viết thường n với dấu ngã",ograve:"Ký tự la-tinh viết thường o với dấu huyền",oacute:"Ký tự la-tinh viết thường o với dấu sắc",ocirc:"Ký tự la-tinh viết thường o với dấu mũ",otilde:"Ký tự la-tinh viết thường o với dấu ngã",ouml:"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu", -divide:"Ký hiệu phép tính chia",oslash:"Ký tự la-tinh viết thường o với dấu ngã",ugrave:"Ký tự la-tinh viết thường u với dấu huyền",uacute:"Ký tự la-tinh viết thường u với dấu sắc",ucirc:"Ký tự la-tinh viết thường u với dấu mũ",uuml:"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu",yacute:"Ký tự la-tinh viết thường y với dấu sắc",thorn:"Ký tự la-tinh viết thường của chữ thorn",yuml:"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu",OElig:"Ký tự la-tinh viết hoa gạch nối OE",oelig:"Ký tự la-tinh viết thường gạch nối OE", -372:"Ký tự la-tinh viết hoa W với dấu mũ",374:"Ký tự la-tinh viết hoa Y với dấu mũ",373:"Ký tự la-tinh viết thường w với dấu mũ",375:"Ký tự la-tinh viết thường y với dấu mũ",sbquo:"Dấu ngoặc đơn thấp số-9",8219:"Dấu ngoặc đơn đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc đơn số-9",hellip:"Tĩnh dược chiều ngang",trade:"Ký tự thương hiệu",9658:"Ký tự trỏ về hướng bên phải màu đen",bull:"Ký hiệu",rarr:"Mũi tên hướng bên phải",rArr:"Mũi tên hướng bên phải dạng đôi",hArr:"Mũi tên hướng bên trái dạng đôi",diams:"Ký hiệu hình thoi", -asymp:"Gần bằng với"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js deleted file mode 100644 index 6896e912..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", -Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O", -Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I", -iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y", -373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh.js deleted file mode 100644 index 7bc2b556..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"Broken bar",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"Micro sign",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"Vulgar fraction one half", -frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"拉丁大寫字母 E 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis", -Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis", -times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde", -auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis", -eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex", -uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark", -hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/specialchar.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/specialchar.js deleted file mode 100644 index c4d1696b..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/specialchar.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j); -var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml(" "),e.getContentElement("info","htmlPreview").getElement().setHtml(" "),b.getParent().removeClass("cke_light_background"), -j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault(); -break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)): -d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=[''],d=0,g=b.length,h,e;d');for(var j=0;j'+h+''+e+"")}else f.push('")}f.push("")}f.push("
 ');f.push("
",''+l.options+"");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab, -title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox", -align:"top",children:[{type:"html",html:"
"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"
 
"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", -html:"
 
"}]}]}]}]}]}}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/table.js b/wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/table.js deleted file mode 100644 index 6f656817..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/table.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;kl&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& -a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); -a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:" "},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", -this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", -html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")|| -b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align"); -a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]}, -f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()): -a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor"); -return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f, -{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align", -"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d
'),d='';a.image&&b&&(d+='');d+='");k.on("click",function(){p(a.html)});return k}function p(a){var b=CKEDITOR.dialog.getCurrent();b.getValueOf("selectTpl","chkInsertOpt")?(c.fire("saveSnapshot"),c.setData(a,function(){b.hide();var a=c.createRange();a.moveToElementEditStart(c.editable());a.select();setTimeout(function(){c.fire("saveSnapshot")},0)})):(c.insertHtml(a),b.hide())}function i(a){var b=a.data.getTarget(), -c=g.equals(b);if(c||g.contains(b)){var d=a.data.getKeystroke(),f=g.getElementsByTag("a"),e;if(f){if(c)e=f.getItem(0);else switch(d){case 40:e=b.getNext();break;case 38:e=b.getPrevious();break;case 13:case 32:b.fire("click")}e&&(e.focus(),a.data.preventDefault())}}}var h=CKEDITOR.plugins.get("templates");CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(h.path+"dialogs/templates.css"));var g,h="cke_tpl_list_label_"+CKEDITOR.tools.getNextNumber(),f=c.lang.templates,l=c.config;return{title:c.lang.templates.title, -minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:"selectTpl",label:f.title,elements:[{type:"vbox",padding:5,children:[{id:"selectTplText",type:"html",html:""+f.selectPromptMsg+""},{id:"templatesList",type:"html",focus:!0,html:'
'+f.options+""},{id:"chkInsertOpt",type:"checkbox",label:f.insertOption, -"default":l.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var a=this.getContentElement("selectTpl","templatesList");g=a.getElement();CKEDITOR.loadTemplates(l.templates_files,function(){var b=(l.templates||"default").split(",");if(b.length){var c=g;c.setHtml("");for(var d=0,h=b.length;d'+f.emptyListMsg+"")});this._.element.on("keydown",i)},onHide:function(){this._.element.removeListener("keydown",i)}}})})(); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/default.js b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/default.js deleted file mode 100644 index d8c172e3..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/default.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'

Type the title here

Type the text here

'},{title:"Strange Template",image:"template2.gif",description:"A template that defines two colums, each one with a title, and some text.", -html:'

Title 1

Title 2

Text 1Text 2

More text goes here.

'},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.",html:'

Title goes here

Table title
   
   
   

Type the text here

'}]}); \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template1.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template1.gif deleted file mode 100644 index efdabbeb..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template1.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template2.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template2.gif deleted file mode 100644 index d1cebb3a..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template2.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template3.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template3.gif deleted file mode 100644 index db41cb4f..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template3.gif and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/LICENSE.md b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/LICENSE.md deleted file mode 100644 index 6096de23..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/LICENSE.md +++ /dev/null @@ -1,28 +0,0 @@ -Software License Agreement -========================== - -**CKEditor WSC Plugin** -Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: - -* GNU General Public License Version 2 or later (the "GPL"): - http://www.gnu.org/licenses/gpl.html - -* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): - http://www.gnu.org/licenses/lgpl.html - -* Mozilla Public License Version 1.1 or later (the "MPL"): - http://www.mozilla.org/MPL/MPL-1.1.html - -You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. - -Sources of Intellectual Property Included in this plugin --------------------------------------------------------- - -Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/README.md b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/README.md deleted file mode 100644 index 346e2ab1..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/README.md +++ /dev/null @@ -1,25 +0,0 @@ -CKEditor WebSpellChecker Plugin -=============================== - -This plugin brings Web Spell Checker (WSC) into CKEditor. - -WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. - -Installation ------------- - -1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. -2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): - - config.extraPlugins = 'wsc'; - -That's all. WSC will appear on the editor toolbar and will be ready to use. - -License -------- - -Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). - -See LICENSE.md for more information. - -Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/ciframe.html b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/ciframe.html deleted file mode 100644 index 8e0a10df..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/ciframe.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - -

- diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/tmpFrameset.html deleted file mode 100644 index 61203e03..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.css b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.css deleted file mode 100644 index da2f1743..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.css +++ /dev/null @@ -1,82 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license -*/ - -html, body -{ - background-color: transparent; - margin: 0px; - padding: 0px; -} - -body -{ - padding: 10px; -} - -body, td, input, select, textarea -{ - font-size: 11px; - font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; -} - -.midtext -{ - padding:0px; - margin:10px; -} - -.midtext p -{ - padding:0px; - margin:10px; -} - -.Button -{ - border: #737357 1px solid; - color: #3b3b1f; - background-color: #c7c78f; -} - -.PopupTabArea -{ - color: #737357; - background-color: #e3e3c7; -} - -.PopupTitleBorder -{ - border-bottom: #d5d59d 1px solid; -} -.PopupTabEmptyArea -{ - padding-left: 10px; - border-bottom: #d5d59d 1px solid; -} - -.PopupTab, .PopupTabSelected -{ - border-right: #d5d59d 1px solid; - border-top: #d5d59d 1px solid; - border-left: #d5d59d 1px solid; - padding: 3px 5px 3px 5px; - color: #737357; -} - -.PopupTab -{ - margin-top: 1px; - border-bottom: #d5d59d 1px solid; - cursor: pointer; -} - -.PopupTabSelected -{ - font-weight: bold; - cursor: default; - padding-top: 4px; - border-bottom: #f1f1e3 1px solid; - background-color: #f1f1e3; -} diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.js b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.js deleted file mode 100644 index 443145c9..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.html or http://ckeditor.com/license -*/ -(function(){function y(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]=f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires; -if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,f=a.fn||null,g=a.id||"",e=a.target||window,i=a.message||{id:g};a.message&&"[object Object]"== -b.call(a.message)&&(a.message.id||(a.message.id=g),i=a.message);a=window.JSON.stringify(i,f);e.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}}, -misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){return!(0===a.offsetWidth||0==a.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display))},hasClass:function(a,b){return!(!a.className||!a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(), -a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null, -text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"},Suggestions:{instance:null,text:"Suggestions"}};var z=function(b){var c,d;for(d in b)c=b[d].instance.getElement().getFirst()|| -b[d].instance.getElement(),c.setText(a.LocalizationComing[d])},A=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}},j,q;a.framesetHtml=function(b){return"'};a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var f=a.iframeNumber+"_"+c;b.getElement().setHtml(d); -d=document.getElementById(f);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('iframe
- - - - -

- CKEditor Samples » Create and Destroy Editor Instances for Ajax Applications -

-
-

- This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing - area will be displayed in a <div> element. -

-

- For details of how to create this setup check the source code of this sample page - for JavaScript code responsible for the creation and destruction of a CKEditor instance. -

-
-

Click the buttons to create and remove a CKEditor instance.

-

- - -

- -
-
- - - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/api.html b/wqflask/wqflask/static/packages/ckeditor/samples/api.html deleted file mode 100644 index a957eed0..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/api.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - API Usage — CKEditor Sample - - - - - - -

- CKEditor Samples » Using CKEditor JavaScript API -

-
-

- This sample shows how to use the - CKEditor JavaScript API - to interact with the editor at runtime. -

-

- For details on how to create this setup check the source code of this sample page. -

-
- - -
- -
-
- - - - -

-

- - -
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/appendto.html b/wqflask/wqflask/static/packages/ckeditor/samples/appendto.html deleted file mode 100644 index b8467702..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/appendto.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - Append To Page Element Using JavaScript Code — CKEditor Sample - - - - -

- CKEditor Samples » Append To Page Element Using JavaScript Code -

-
-
-

- The CKEDITOR.appendTo() method serves to to place editors inside existing DOM elements. Unlike CKEDITOR.replace(), - a target container to be replaced is no longer necessary. A new editor - instance is inserted directly wherever it is desired. -

-
CKEDITOR.appendTo( 'container_id',
-	{ /* Configuration options to be used. */ }
-	'Editor content to be used.'
-);
-
- -
-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/logo.png b/wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/logo.png deleted file mode 100644 index b4d5979e..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/logo.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/outputxhtml.css b/wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/outputxhtml.css deleted file mode 100644 index fa0ff379..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/outputxhtml.css +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - * - * Styles used by the XHTML 1.1 sample page (xhtml.html). - */ - -/** - * Basic definitions for the editing area. - */ -body -{ - font-family: Arial, Verdana, sans-serif; - font-size: 80%; - color: #000000; - background-color: #ffffff; - padding: 5px; - margin: 0px; -} - -/** - * Core styles. - */ - -.Bold -{ - font-weight: bold; -} - -.Italic -{ - font-style: italic; -} - -.Underline -{ - text-decoration: underline; -} - -.StrikeThrough -{ - text-decoration: line-through; -} - -.Subscript -{ - vertical-align: sub; - font-size: smaller; -} - -.Superscript -{ - vertical-align: super; - font-size: smaller; -} - -/** - * Font faces. - */ - -.FontComic -{ - font-family: 'Comic Sans MS'; -} - -.FontCourier -{ - font-family: 'Courier New'; -} - -.FontTimes -{ - font-family: 'Times New Roman'; -} - -/** - * Font sizes. - */ - -.FontSmaller -{ - font-size: smaller; -} - -.FontLarger -{ - font-size: larger; -} - -.FontSmall -{ - font-size: 8pt; -} - -.FontBig -{ - font-size: 14pt; -} - -.FontDouble -{ - font-size: 200%; -} - -/** - * Font colors. - */ -.FontColor1 -{ - color: #ff9900; -} - -.FontColor2 -{ - color: #0066cc; -} - -.FontColor3 -{ - color: #ff0000; -} - -.FontColor1BG -{ - background-color: #ff9900; -} - -.FontColor2BG -{ - background-color: #0066cc; -} - -.FontColor3BG -{ - background-color: #ff0000; -} - -/** - * Indentation. - */ - -.Indent1 -{ - margin-left: 40px; -} - -.Indent2 -{ - margin-left: 80px; -} - -.Indent3 -{ - margin-left: 120px; -} - -/** - * Alignment. - */ - -.JustifyLeft -{ - text-align: left; -} - -.JustifyRight -{ - text-align: right; -} - -.JustifyCenter -{ - text-align: center; -} - -.JustifyFull -{ - text-align: justify; -} - -/** - * Other. - */ - -code -{ - font-family: courier, monospace; - background-color: #eeeeee; - padding-left: 1px; - padding-right: 1px; - border: #c0c0c0 1px solid; -} - -kbd -{ - padding: 0px 1px 0px 1px; - border-width: 1px 2px 2px 1px; - border-style: solid; -} - -blockquote -{ - color: #808080; -} diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/posteddata.php b/wqflask/wqflask/static/packages/ckeditor/samples/assets/posteddata.php deleted file mode 100644 index 6b26aae3..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/assets/posteddata.php +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - Sample — CKEditor - - - -

- CKEditor — Posted Data -

- - - - - - - - - $value ) - { - if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) - continue; - - if ( get_magic_quotes_gpc() ) - $value = htmlspecialchars( stripslashes((string)$value) ); - else - $value = htmlspecialchars( (string)$value ); -?> - - - - - -
Field NameValue
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/sample.jpg b/wqflask/wqflask/static/packages/ckeditor/samples/assets/sample.jpg deleted file mode 100644 index 9498271c..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/samples/assets/sample.jpg and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/languages.js b/wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/languages.js deleted file mode 100644 index 3f7ff624..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/languages.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian", -is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese", -zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name - - - - - Data Filtering — CKEditor Sample - - - - - -

- CKEditor Samples » Data Filtering and Features Activation -

-
-

- This sample page demonstrates the idea of Advanced Content Filter - (ACF), a sophisticated - tool that takes control over what kind of data is accepted by the editor and what - kind of output is produced. -

-

When and what is being filtered?

-

- ACF controls - every single source of data that comes to the editor. - It process both HTML that is inserted manually (i.e. pasted by the user) - and programmatically like: -

-
-editor.setData( '<p>Hello world!</p>' );
-
-

- ACF discards invalid, - useless HTML tags and attributes so the editor remains "clean" during - runtime. ACF behaviour - can be configured and adjusted for a particular case to prevent the - output HTML (i.e. in CMS systems) from being polluted. - - This kind of filtering is a first, client-side line of defense - against "tag soups", - the tool that precisely restricts which tags, attributes and styles - are allowed (desired). When properly configured, ACF - is an easy and fast way to produce a high-quality, intentionally filtered HTML. -

- -

How to configure or disable ACF?

-

- Advanced Content Filter is enabled by default, working in "automatic mode", yet - it provides a set of easy rules that allow adjusting filtering rules - and disabling the entire feature when necessary. The config property - responsible for this feature is config.allowedContent. -

-

- By "automatic mode" is meant that loaded plugins decide which kind - of content is enabled and which is not. For example, if the link - plugin is loaded it implies that <a> tag is - automatically allowed. Each plugin is given a set - of predefined ACF rules - that control the editor until - config.allowedContent - is defined manually. -

-

- Let's assume our intention is to restrict the editor to accept (produce) paragraphs - only: no attributes, no styles, no other tags. - With ACF - this is very simple. Basically set - config.allowedContent to 'p': -

-
-var editor = CKEDITOR.replace( textarea_id, {
-	allowedContent: 'p'
-} );
-
-

- Now try to play with allowed content: -

-
-// Trying to insert disallowed tag and attribute.
-editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
-alert( editor.getData() );
-
-// Filtered data is returned.
-"<p>Hello world!</p>"
-
-

- What happened? Since config.allowedContent: 'p' is set the editor assumes - that only plain <p> are accepted. Nothing more. This is why - style attribute and <em> tag are gone. The same - filtering would happen if we pasted disallowed HTML into this editor. -

-

- This is just a small sample of what ACF - can do. To know more, please refer to the sample section below and - the official Advanced Content Filter guide. -

-

- You may, of course, want CKEditor to avoid filtering of any kind. - To get rid of ACF, - basically set - config.allowedContent to true like this: -

-
-CKEDITOR.replace( textarea_id, {
-	allowedContent: true
-} );
-
- -

Beyond data flow: Features activation

-

- ACF is far more than - I/O control: the entire - UI of the editor is adjusted to what - filters restrict. For example: if <a> tag is - disallowed - by ACF, - then accordingly link command, toolbar button and link dialog - are also disabled. Editor is smart: it knows which features must be - removed from the interface to match filtering rules. -

-

- CKEditor can be far more specific. If <a> tag is - allowed by filtering rules to be used but it is restricted - to have only one attribute (href) - config.allowedContent = 'a[!href]', then - "Target" tab of the link dialog is automatically disabled as target - attribute isn't included in ACF rules - for <a>. This behaviour applies to dialog fields, context - menus and toolbar buttons. -

- -

Sample configurations

-

- There are several editor instances below that present different - ACF setups. All of them, - except the last inline instance, share the same HTML content to visualize - how different filtering rules affect the same input data. -

-
- -
- -
-

- This editor is using default configuration ("automatic mode"). It means that - - config.allowedContent is defined by loaded plugins. - Each plugin extends filtering rules to make it's own associated content - available for the user. -

-
- - - -
- -
- -
- -
-

- This editor is using a custom configuration for - ACF: -

-
-CKEDITOR.replace( 'editor2', {
-	allowedContent:
-		'h1 h2 h3 p blockquote strong em;' +
-		'a[!href];' +
-		'img(left,right)[!src,alt,width,height];' +
-		'table tr th td caption;' +
-		'span{!font-family};' +'
-		'span{!color};' +
-		'span(!marker);' +
-		'del ins'
-} );
-
-

- The following rules may require additional explanation: -

-
    -
  • - h1 h2 h3 p blockquote strong em - These tags - are accepted by the editor. Any tag attributes will be discarded. -
  • -
  • - a[!href] - href attribute is obligatory - for <a> tag. Tags without this attribute - are disarded. No other attribute will be accepted. -
  • -
  • - img(left,right)[!src,alt,width,height] - src - attribute is obligatory for <img> tag. - alt, width, height - and class attributes are accepted but - class must be either class="left" - or class="right" -
  • -
  • - table tr th td caption - These tags - are accepted by the editor. Any tag attributes will be discarded. -
  • -
  • - span{!font-family}, span{!color}, - span(!marker) - <span> tags - will be accepted if either font-family or - color style is set or class="marker" - is present. -
  • -
  • - del ins - These tags - are accepted by the editor. Any tag attributes will be discarded. -
  • -
-

- Please note that UI of the - editor is different. It's a response to what happened to the filters. - Since text-align isn't allowed, the align toolbar is gone. - The same thing happened to subscript/superscript, strike, underline - (<u>, <sub>, <sup> - are disallowed by - config.allowedContent) and many other buttons. -

-
- - -
- -
- -
- -
-

- This editor is using a custom configuration for - ACF. - Note that filters can be configured as an object literal - as an alternative to a string-based definition. -

-
-CKEDITOR.replace( 'editor3', {
-	allowedContent: {
-		'b i ul ol big small': true,
-		'h1 h2 h3 p blockquote li': {
-			styles: 'text-align'
-		},
-		a: { attributes: '!href,target' },
-		img: {
-			attributes: '!src,alt',
-			styles: 'width,height',
-			classes: 'left,right'
-		}
-	}
-} );
-
-
- - -
- -
- -
- -
-

- This editor is using a custom set of plugins and buttons. -

-
-CKEDITOR.replace( 'editor4', {
-	removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
-	removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
-	format_tags: 'p;h1;h2;h3;pre;address'
-} );
-
-

- As you can see, removing plugins and buttons implies filtering. - Several tags are not allowed in the editor because there's no - plugin/button that is responsible for creating and editing this - kind of content (for example: the image is missing because - of removeButtons: 'Image'). The conclusion is that - ACF works "backwards" - as well: modifying UI - elements is changing allowed content rules. -

-
- - -
- -
- -
- -
-

- This editor is built on editable <h1> element. - ACF takes care of - what can be included in <h1>. Note that there - are no block styles in Styles combo. Also why lists, indentation, - blockquote, div, form and other buttons are missing. -

-

- ACF makes sure that - no disallowed tags will come to <h1> so the final - markup is valid. If the user tried to paste some invalid HTML - into this editor (let's say a list), it would be automatically - converted into plain text. -

-
-

- Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. -

-
- - - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/divreplace.html b/wqflask/wqflask/static/packages/ckeditor/samples/divreplace.html deleted file mode 100644 index 873c8c2e..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/divreplace.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - Replace DIV — CKEditor Sample - - - - - - -

- CKEditor Samples » Replace DIV with CKEditor on the Fly -

-
-

- This sample shows how to automatically replace <div> elements - with a CKEditor instance on the fly, following user's doubleclick. The content - that was previously placed inside the <div> element will now - be moved into CKEditor editing area. -

-

- For details on how to create this setup check the source code of this sample page. -

-
-

- Double-click any of the following <div> elements to transform them into - editor instances. -

-
-

- Part 1 -

-

- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. -

-
-
-

- Part 2 -

-

- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. -

-

- Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus - sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum - vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. -

-
-
-

- Part 3 -

-

- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/index.html b/wqflask/wqflask/static/packages/ckeditor/samples/index.html deleted file mode 100644 index 09e08bde..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - CKEditor Samples - - - -

- CKEditor Samples -

-
-
-

- Basic Samples -

-
-
Replace textarea elements by class name
-
Automatic replacement of all textarea elements of a given class with a CKEditor instance.
- -
Replace textarea elements by code
-
Replacement of textarea elements with CKEditor instances by using a JavaScript call.
- -
Create editors with jQuery
-
Creating standard and inline CKEditor instances with jQuery adapter.
-
- -

- Basic Customization -

-
-
User Interface color
-
Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.
- -
User Interface languages
-
Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.
-
- - -

Plugins

-
-
Magicline plugin
-
Using the Magicline plugin to access difficult focus spaces.
- -
Full page support
-
CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>.
-
-
-
-

- Inline Editing -

-
-
Massive inline editor creation
-
Turn all elements with contentEditable = true attribute into inline editors.
- -
Convert element into an inline editor by code
-
Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.
- -
Replace textarea with inline editor New!
-
A form with a textarea that is replaced by an inline editor at runtime.
- - -
- -

- Advanced Samples -

-
-
Data filtering and features activation New!
-
Data filtering and automatic features activation basing on configuration.
- -
Replace DIV elements on the fly
-
Transforming a div element into an instance of CKEditor with a mouse click.
- -
Append editor instances
-
Appending editor instances to existing DOM elements.
- -
Create and destroy editor instances for Ajax applications
-
Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.
- -
Basic usage of the API
-
Using the CKEditor JavaScript API to interact with the editor at runtime.
- -
XHTML-compliant style
-
Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.
- -
Read-only mode
-
Using the readOnly API to block introducing changes to the editor contents.
- -
"Tab" key-based navigation
-
Navigating among editor instances with tab key.
- - - -
Using the JavaScript API to customize dialog windows
-
Using the dialog windows API to customize dialog windows without changing the original editor code.
- -
Using the "Enter" key in CKEditor
-
Configuring the behavior of Enter and Shift+Enter keys.
- -
Output for Flash
-
Configuring CKEditor to produce HTML code that can be used with Adobe Flash.
- -
Output HTML
-
Configuring CKEditor to produce legacy HTML 4 code.
- -
Toolbar Configurations
-
Configuring CKEditor to display full or custom toolbar layout.
- -
-
-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/inlineall.html b/wqflask/wqflask/static/packages/ckeditor/samples/inlineall.html deleted file mode 100644 index f82af1db..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/inlineall.html +++ /dev/null @@ -1,311 +0,0 @@ - - - - - - Massive inline editing — CKEditor Sample - - - - - - -
-

CKEditor Samples » Massive inline editing

-
-

This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with contentEditable attribute set to value true:

-
<div contenteditable="true" > ... </div>
-

Click inside of any element below to start editing.

-
-
-
- -
-
-
-

- Fusce vitae porttitor -

-

- - Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor. - -

-

- Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum nisl nulla sem in metus. Maecenas wisi. Donec nec erat volutpat. -

-
-

- Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. - Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum -

-
-
-

- Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu. -

-
-

Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.

-

Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

-
-
-
-
-

- Integer condimentum sit amet -

-

- Aenean nonummy a, mattis varius. Cras aliquet. - Praesent magna non mattis ac, rhoncus nunc, rhoncus eget, cursus pulvinar mollis.

-

Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.

-

Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.

-
-
-

- Praesent wisi accumsan sit amet nibh -

-

Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.

-

Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce gravida, erat vitae augue. Fusce urna fringilla gravida.

-

In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.

-
-
-
-
-

- CKEditor logo -

-

Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.

-

- Nullam laoreet vel consectetuer tellus suscipit -

-
    -
  • Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.
  • -
  • Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.
  • -
  • Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.
  • -
-

Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus.

-

Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.

-

Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

-
-
-
-
- Tags of this article: -

- inline, editing, floating, CKEditor -

-
-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/inlinebycode.html b/wqflask/wqflask/static/packages/ckeditor/samples/inlinebycode.html deleted file mode 100644 index 4e475367..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/inlinebycode.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - Inline Editing by Code — CKEditor Sample - - - - - -

- CKEditor Samples » Inline Editing by Code -

-
-

- This sample shows how to create an inline editor instance of CKEditor. It is created - with a JavaScript call using the following code: -

-
-// This property tells CKEditor to not activate every element with contenteditable=true element.
-CKEDITOR.disableAutoInline = true;
-
-var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );
-
-

- Note that editable in the code above is the id - attribute of the <div> element to be converted into an inline instance. -

-
-
-

Saturn V carrying Apollo 11 Apollo 11

- -

Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

- -

Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

- -

Broadcasting and quotes

- -

Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

- -
-

One small step for [a] man, one giant leap for mankind.

-
- -

Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

- -
-

[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

-
- -

Technical details

- - - - - - - - - - - - - - - - - - - - - - - -
Mission crew
PositionAstronaut
CommanderNeil A. Armstrong
Command Module PilotMichael Collins
Lunar Module PilotEdwin "Buzz" E. Aldrin, Jr.
- -

Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

- -
    -
  1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
  2. -
  3. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
  4. -
  5. Lunar Module for landing on the Moon.
  6. -
- -

After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

- -
-

Source: Wikipedia.org

-
- - - - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/inlinetextarea.html b/wqflask/wqflask/static/packages/ckeditor/samples/inlinetextarea.html deleted file mode 100644 index fd27c0f1..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/inlinetextarea.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - Replace Textarea with Inline Editor — CKEditor Sample - - - - - -

- CKEditor Samples » Replace Textarea with Inline Editor -

-
-

- You can also create an inline editor from a textarea - element. In this case the textarea will be replaced - by a div element with inline editing enabled. -

-
-// "article-body" is the name of a textarea element.
-var editor = CKEDITOR.inline( 'article-body' );
-
-
-
-

This is a sample form with some fields

-

- Title:
-

-

- Article Body (Textarea converted to CKEditor):
- -

-

- -

-
- - - - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/jquery.html b/wqflask/wqflask/static/packages/ckeditor/samples/jquery.html deleted file mode 100644 index 380b8284..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/jquery.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - jQuery Adapter — CKEditor Sample - - - - - - - - -

- CKEditor Samples » Create Editors with jQuery -

-
-
-

- This sample shows how to use the jQuery adapter. - Note that you have to include both CKEditor and jQuery scripts before including the adapter. -

- -
-<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
-<script src="/ckeditor/ckeditor.js"></script>
-<script src="/ckeditor/adapters/jquery.js"></script>
-
- -

Then you can replace HTML elements with a CKEditor instance using the ckeditor() method.

- -
-$( document ).ready( function() {
-	$( 'textarea#editor1' ).ckeditor();
-} );
-
-
- -

Inline Example

- -
-

Saturn V carrying Apollo 11Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

-

Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth. -

Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

-

One small step for [a] man, one giant leap for mankind.

Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

-
- -
- -

Classic (iframe-based) Example

- - - -

- - - - - -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/my_dialog.js deleted file mode 100644 index 3edd0728..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/my_dialog.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -CKEDITOR.dialog.add( 'myDialog', function( editor ) { - return { - title: 'My Dialog', - minWidth: 400, - minHeight: 200, - contents: [ - { - id: 'tab1', - label: 'First Tab', - title: 'First Tab', - elements: [ - { - id: 'input1', - type: 'text', - label: 'Text Field' - }, - { - id: 'select1', - type: 'select', - label: 'Select Field', - items: [ - [ 'option1', 'value1' ], - [ 'option2', 'value2' ] - ] - } - ] - }, - { - id: 'tab2', - label: 'Second Tab', - title: 'Second Tab', - elements: [ - { - id: 'button1', - type: 'button', - label: 'Button Field' - } - ] - } - ] - }; -} ); - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/dialog.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/dialog.html deleted file mode 100644 index df09d25b..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/dialog.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - Using API to Customize Dialog Windows — CKEditor Sample - - - - - - - - - -

- CKEditor Samples » Using CKEditor Dialog API -

-
-

- This sample shows how to use the - CKEditor Dialog API - to customize CKEditor dialog windows without changing the original editor code. - The following customizations are being done in the example below: -

-

- For details on how to create this setup check the source code of this sample page. -

-
-

A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

-
    -
  1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
  2. -
  3. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.
  4. -
- - -

The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

-
    -
  1. Adding dialog tab – Add new tab "My Tab" to dialog window.
  2. -
  3. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
  4. -
  5. Adding dialog window fields – Add "My Custom Field" to the dialog window.
  6. -
  7. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
  8. -
  9. Setting default values for dialog window fields – Set default value of "Text Field" text field.
  10. -
  11. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
  12. -
- - - - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/enterkey.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/enterkey.html deleted file mode 100644 index 2d515012..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/enterkey.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - ENTER Key Configuration — CKEditor Sample - - - - - - - - -

- CKEditor Samples » ENTER Key Configuration -

-
-

- This sample shows how to configure the Enter and Shift+Enter keys - to perform actions specified in the - enterMode - and shiftEnterMode - parameters, respectively. - You can choose from the following options: -

-
    -
  • ENTER_P – new <p> paragraphs are created;
  • -
  • ENTER_BR – lines are broken with <br> elements;
  • -
  • ENTER_DIV – new <div> blocks are created.
  • -
-

- The sample code below shows how to configure CKEditor to create a <div> block when Enter key is pressed. -

-
-CKEDITOR.replace( 'textarea_id', {
-	enterMode: CKEDITOR.ENTER_DIV
-});
-

- Note that textarea_id in the code above is the id attribute of - the <textarea> element to be replaced. -

-
-
- When Enter is pressed:
- -
-
- When Shift+Enter is pressed:
- -
-
-
-

-
- -

-

- -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla deleted file mode 100644 index 27e68ccd..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf deleted file mode 100644 index dbe17b6b..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js deleted file mode 100644 index 95fdf0a7..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js +++ /dev/null @@ -1,18 +0,0 @@ -var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;cf){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;ke.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= -O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", -c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& -e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;fe.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ -h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='');g.outerHTML='"+h+"";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& -(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} -function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), -e.ie&&(e.win&&typeof d.styleSheets!=i&&0\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", -O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== -r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), -e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, -0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;be.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== -b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= -d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c - - - - - Output for Flash — CKEditor Sample - - - - - - - - - - - -

- CKEditor Samples » Producing Flash Compliant HTML Output -

-
-

- This sample shows how to configure CKEditor to output - HTML code that can be used with - - Adobe Flash. - The code will contain a subset of standard HTML elements like <b>, - <i>, and <p> as well as HTML attributes. -

-

- To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard - JavaScript call, and define CKEditor features to use HTML elements and attributes. -

-

- For details on how to create this setup check the source code of this sample page. -

-
-

- To see how it works, create some content in the editing area of CKEditor on the left - and send it to the Flash object on the right side of the page by using the - Send to Flash button. -

- - - - - -
- - -

- -

-
-
-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputhtml.html deleted file mode 100644 index f25697df..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputhtml.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - HTML Compliant Output — CKEditor Sample - - - - - - - - - -

- CKEditor Samples » Producing HTML Compliant Output -

-
-

- This sample shows how to configure CKEditor to output valid - HTML 4.01 code. - Traditional HTML elements like <b>, - <i>, and <font> are used in place of - <strong>, <em>, and CSS styles. -

-

- To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard - JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. -

-

- A snippet of the configuration code can be seen below; check the source of this page for - full definition: -

-
-CKEDITOR.replace( 'textarea_id', {
-	coreStyles_bold: { element: 'b' },
-	coreStyles_italic: { element: 'i' },
-
-	fontSize_style: {
-		element: 'font',
-		attributes: { 'size': '#(size)' }
-	}
-
-	...
-});
-
-
-

- - - -

-

- -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/magicline.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/magicline.html deleted file mode 100644 index 800fbb3b..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/magicline.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - Using Magicline plugin — CKEditor Sample - - - - - - - -

- CKEditor Samples » Using Magicline plugin -

-
-

- This sample shows the advantages of Magicline plugin - which is to enhance the editing process. Thanks to this plugin, - a number of difficult focus spaces which are inaccessible due to - browser issues can now be focused. -

-

- Magicline plugin shows a red line with a handler - which, when clicked, inserts a paragraph and allows typing. To see this, - focus an editor and move your mouse above the focus space you want - to access. The plugin is enabled by default so no additional - configuration is necessary. -

-
-
- -
-

- This editor uses a default Magicline setup. -

-
- - -
-
-
- -
-

- This editor is using a blue line. -

-
-CKEDITOR.replace( 'editor2', {
-	magicline_color: 'blue'
-});
-
- - -
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/toolbar.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/toolbar.html deleted file mode 100644 index 6cf2ddf1..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/toolbar.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - Toolbar Configuration — CKEditor Sample - - - - - - - -

- CKEditor Samples » Toolbar Configuration -

-
-

- This sample page demonstrates editor with loaded full toolbar (all registered buttons) and, if - current editor's configuration modifies default settings, also editor with modified toolbar. -

- -

Since CKEditor 4 there are two ways to configure toolbar buttons.

- -

By config.toolbar

- -

- You can explicitly define which buttons are displayed in which groups and in which order. - This is the more precise setting, but less flexible. If newly added plugin adds its - own button you'll have to add it manually to your config.toolbar setting as well. -

- -

To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:

- -
-CKEDITOR.replace( 'textarea_id', {
-	toolbar: [
-		{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] },	// Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
-		[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],			// Defines toolbar group without name.
-		'/',																					// Line break - next group will be placed in new line.
-		{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
-	]
-});
- -

By config.toolbarGroups

- -

- You can define which groups of buttons (like e.g. basicstyles, clipboard - and forms) are displayed and in which order. Registered buttons are associated - with toolbar groups by toolbar property in their definition. - This setting's advantage is that you don't have to modify toolbar configuration - when adding/removing plugins which register their own buttons. -

- -

To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:

- -
-CKEDITOR.replace( 'textarea_id', {
-	toolbarGroups: [
-		{ name: 'document',	   groups: [ 'mode', 'document' ] },			// Displays document group with its two subgroups.
- 		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },			// Group's name will be used to create voice label.
- 		'/',																// Line break - next group will be placed in new line.
- 		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
- 		{ name: 'links' }
-	]
-
-	// NOTE: Remember to leave 'toolbar' property with the default value (null).
-});
-
- - - -
-

Full toolbar configuration

-

Below you can see editor with full toolbar, generated automatically by the editor.

-

- Note: To create editor instance with full toolbar you don't have to set anything. - Just leave toolbar and toolbarGroups with the default, null values. -

- -

-	
- - - - - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/fullpage.html deleted file mode 100644 index 174a25f3..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/fullpage.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - Full Page Editing — CKEditor Sample - - - - - - - - - -

- CKEditor Samples » Full Page Editing -

-
-

- This sample shows how to configure CKEditor to edit entire HTML pages, from the - <html> tag to the </html> tag. -

-

- The CKEditor instance below is inserted with a JavaScript call using the following code: -

-
-CKEDITOR.replace( 'textarea_id', {
-	fullPage: true,
-	allowedContent: true
-});
-
-

- Note that textarea_id in the code above is the id attribute of - the <textarea> element to be replaced. -

-

- The allowedContent in the code above is set to true to disable content filtering. - Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. -

-
-
- - - -

- -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/readonly.html b/wqflask/wqflask/static/packages/ckeditor/samples/readonly.html deleted file mode 100644 index 58f97069..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/readonly.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - Using the CKEditor Read-Only API — CKEditor Sample - - - - - -

- CKEditor Samples » Using the CKEditor Read-Only API -

-
-

- This sample shows how to use the - setReadOnly - API to put editor into the read-only state that makes it impossible for users to change the editor contents. -

-

- For details on how to create this setup check the source code of this sample page. -

-
-
-

- -

-

- - -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/replacebyclass.html b/wqflask/wqflask/static/packages/ckeditor/samples/replacebyclass.html deleted file mode 100644 index 6fc3e6fe..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/replacebyclass.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - Replace Textareas by Class Name — CKEditor Sample - - - - -

- CKEditor Samples » Replace Textarea Elements by Class Name -

-
-

- This sample shows how to automatically replace all <textarea> elements - of a given class with a CKEditor instance. -

-

- To replace a <textarea> element, simply assign it the ckeditor - class, as in the code below: -

-
-<textarea class="ckeditor" name="editor1"></textarea>
-
-

- Note that other <textarea> attributes (like id or name) need to be adjusted to your document. -

-
-
-

- - -

-

- -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/replacebycode.html b/wqflask/wqflask/static/packages/ckeditor/samples/replacebycode.html deleted file mode 100644 index e5a4c5ba..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/replacebycode.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - Replace Textarea by Code — CKEditor Sample - - - - -

- CKEditor Samples » Replace Textarea Elements Using JavaScript Code -

-
-
-

- This editor is using an <iframe> element-based editing area, provided by the Wysiwygarea plugin. -

-
-CKEDITOR.replace( 'textarea_id' )
-
-
- - -

- -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/sample.css b/wqflask/wqflask/static/packages/ckeditor/samples/sample.css deleted file mode 100644 index 8fd71aaa..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/sample.css +++ /dev/null @@ -1,365 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ - -html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre -{ - line-height: 1.5; -} - -body -{ - padding: 10px 30px; -} - -input, textarea, select, option, optgroup, button, td, th -{ - font-size: 100%; -} - -pre -{ - -moz-tab-size: 4; - -o-tab-size: 4; - -webkit-tab-size: 4; - tab-size: 4; -} - -pre, code, kbd, samp, tt -{ - font-family: monospace,monospace; - font-size: 1em; -} - -body { - width: 960px; - margin: 0 auto; -} - -code -{ - background: #f3f3f3; - border: 1px solid #ddd; - padding: 1px 4px; - - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -abbr -{ - border-bottom: 1px dotted #555; - cursor: pointer; -} - -.new, .beta -{ - text-transform: uppercase; - font-size: 10px; - font-weight: bold; - padding: 1px 4px; - margin: 0 0 0 5px; - color: #fff; - float: right; - - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -.new -{ - background: #FF7E00; - border: 1px solid #DA8028; - text-shadow: 0 1px 0 #C97626; - - -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; - -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; - box-shadow: 0 2px 3px 0 #FFA54E inset; -} - -.beta -{ - background: #18C0DF; - border: 1px solid #19AAD8; - text-shadow: 0 1px 0 #048CAD; - font-style: italic; - - -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; - -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; - box-shadow: 0 2px 3px 0 #50D4FD inset; -} - -h1.samples -{ - color: #0782C1; - font-size: 200%; - font-weight: normal; - margin: 0; - padding: 0; -} - -h1.samples a -{ - color: #0782C1; - text-decoration: none; - border-bottom: 1px dotted #0782C1; -} - -.samples a:hover -{ - border-bottom: 1px dotted #0782C1; -} - -h2.samples -{ - color: #000000; - font-size: 130%; - margin: 15px 0 0 0; - padding: 0; -} - -p, blockquote, address, form, pre, dl, h1.samples, h2.samples -{ - margin-bottom: 15px; -} - -ul.samples -{ - margin-bottom: 15px; -} - -.clear -{ - clear: both; -} - -fieldset -{ - margin: 0; - padding: 10px; -} - -body, input, textarea -{ - color: #333333; - font-family: Arial, Helvetica, sans-serif; -} - -body -{ - font-size: 75%; -} - -a.samples -{ - color: #189DE1; - text-decoration: none; -} - -form -{ - margin: 0; - padding: 0; -} - -pre.samples -{ - background-color: #F7F7F7; - border: 1px solid #D7D7D7; - overflow: auto; - padding: 0.25em; - white-space: pre-wrap; /* CSS 2.1 */ - word-wrap: break-word; /* IE7 */ -} - -#footer -{ - clear: both; - padding-top: 10px; -} - -#footer hr -{ - margin: 10px 0 15px 0; - height: 1px; - border: solid 1px gray; - border-bottom: none; -} - -#footer p -{ - margin: 0 10px 10px 10px; - float: left; -} - -#footer #copy -{ - float: right; -} - -#outputSample -{ - width: 100%; - table-layout: fixed; -} - -#outputSample thead th -{ - color: #dddddd; - background-color: #999999; - padding: 4px; - white-space: nowrap; -} - -#outputSample tbody th -{ - vertical-align: top; - text-align: left; -} - -#outputSample pre -{ - margin: 0; - padding: 0; -} - -.description -{ - border: 1px dotted #B7B7B7; - margin-bottom: 10px; - padding: 10px 10px 0; - overflow: hidden; -} - -label -{ - display: block; - margin-bottom: 6px; -} - -/** - * CKEditor editables are automatically set with the "cke_editable" class - * plus cke_editable_(inline|themed) depending on the editor type. - */ - -/* Style a bit the inline editables. */ -.cke_editable.cke_editable_inline -{ - cursor: pointer; -} - -/* Once an editable element gets focused, the "cke_focus" class is - added to it, so we can style it differently. */ -.cke_editable.cke_editable_inline.cke_focus -{ - box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; - outline: none; - background: #eee; - cursor: text; -} - -/* Avoid pre-formatted overflows inline editable. */ -.cke_editable_inline pre -{ - white-space: pre-wrap; - word-wrap: break-word; -} - -/** - * Samples index styles. - */ - -.twoColumns, -.twoColumnsLeft, -.twoColumnsRight -{ - overflow: hidden; -} - -.twoColumnsLeft, -.twoColumnsRight -{ - width: 45%; -} - -.twoColumnsLeft -{ - float: left; -} - -.twoColumnsRight -{ - float: right; -} - -dl.samples -{ - padding: 0 0 0 40px; -} -dl.samples > dt -{ - display: list-item; - list-style-type: disc; - list-style-position: outside; - margin: 0 0 3px; -} -dl.samples > dd -{ - margin: 0 0 3px; -} -.warning -{ - color: #ff0000; - background-color: #FFCCBA; - border: 2px dotted #ff0000; - padding: 15px 10px; - margin: 10px 0; -} - -/* Used on inline samples */ - -blockquote -{ - font-style: italic; - font-family: Georgia, Times, "Times New Roman", serif; - padding: 2px 0; - border-style: solid; - border-color: #ccc; - border-width: 0; -} - -.cke_contents_ltr blockquote -{ - padding-left: 20px; - padding-right: 8px; - border-left-width: 5px; -} - -.cke_contents_rtl blockquote -{ - padding-left: 8px; - padding-right: 20px; - border-right-width: 5px; -} - -img.right { - border: 1px solid #ccc; - float: right; - margin-left: 15px; - padding: 5px; -} - -img.left { - border: 1px solid #ccc; - float: left; - margin-right: 15px; - padding: 5px; -} - -.marker -{ - background-color: Yellow; -} diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/sample.js b/wqflask/wqflask/static/packages/ckeditor/samples/sample.js deleted file mode 100644 index b25482d3..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/sample.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -// Tool scripts for the sample pages. -// This file can be ignored and is not required to make use of CKEditor. - -( function() { - CKEDITOR.on( 'instanceReady', function( ev ) { - // Check for sample compliance. - var editor = ev.editor, - meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), - requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], - missing = [], - i; - - if ( requires.length ) { - for ( i = 0; i < requires.length; i++ ) { - if ( !editor.plugins[ requires[ i ] ] ) - missing.push( '' + requires[ i ] + '' ); - } - - if ( missing.length ) { - var warn = CKEDITOR.dom.element.createFromHtml( - '
' + - 'To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.' + - '
' - ); - warn.insertBefore( editor.container ); - } - } - - // Set icons. - var doc = new CKEDITOR.dom.document( document ), - icons = doc.find( '.button_icon' ); - - for ( i = 0; i < icons.count(); i++ ) { - var icon = icons.getItem( i ), - name = icon.getAttribute( 'data-icon' ), - style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); - - icon.addClass( 'cke_button_icon' ); - icon.addClass( 'cke_button__' + name + '_icon' ); - icon.setAttribute( 'style', style ); - icon.setStyle( 'float', 'none' ); - - } - } ); -} )(); diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/sample_posteddata.php b/wqflask/wqflask/static/packages/ckeditor/samples/sample_posteddata.php deleted file mode 100644 index e4869b7c..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/sample_posteddata.php +++ /dev/null @@ -1,16 +0,0 @@ -
-
--------------------------------------------------------------------------------------------
-  CKEditor - Posted Data
-
-  We are sorry, but your Web server does not support the PHP language used in this script.
-
-  Please note that CKEditor can be used with any other server-side language than just PHP.
-  To save the content created with CKEditor you need to read the POST data on the server
-  side and write it to a file or the database.
-
-  Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-  For licensing, see LICENSE.md or http://ckeditor.com/license
--------------------------------------------------------------------------------------------
-
-
*/ include "assets/posteddata.php"; ?> diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/tabindex.html b/wqflask/wqflask/static/packages/ckeditor/samples/tabindex.html deleted file mode 100644 index 89521668..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/tabindex.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - TAB Key-Based Navigation — CKEditor Sample - - - - - - -

- CKEditor Samples » TAB Key-Based Navigation -

-
-

- This sample shows how tab key navigation among editor instances is - affected by the tabIndex attribute from - the original page element. Use TAB key to move between the editors. -

-
-

- -

-
-

- -

-

- -

- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/uicolor.html b/wqflask/wqflask/static/packages/ckeditor/samples/uicolor.html deleted file mode 100644 index ce4b2a26..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/uicolor.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - UI Color Picker — CKEditor Sample - - - - -

- CKEditor Samples » UI Color -

-
-

- This sample shows how to automatically replace <textarea> elements - with a CKEditor instance with an option to change the color of its user interface.
- Note:The UI skin color feature depends on the CKEditor skin - compatibility. The Moono and Kama skins are examples of skins that work with it. -

-
-
-

- This editor instance has a UI color value defined in configuration to change the skin color, - To specify the color of the user interface, set the uiColor property: -

-
-CKEDITOR.replace( 'textarea_id', {
-	uiColor: '#14B8C4'
-});
-

- Note that textarea_id in the code above is the id attribute of - the <textarea> element to be replaced. -

-

- - -

-

- -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/uilanguages.html b/wqflask/wqflask/static/packages/ckeditor/samples/uilanguages.html deleted file mode 100644 index 66acca43..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/uilanguages.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - User Interface Globalization — CKEditor Sample - - - - - -

- CKEditor Samples » User Interface Languages -

-
-

- This sample shows how to automatically replace <textarea> elements - with a CKEditor instance with an option to change the language of its user interface. -

-

- It pulls the language list from CKEditor _languages.js file that contains the list of supported languages and creates - a drop-down list that lets the user change the UI language. -

-

- By default, CKEditor automatically localizes the editor to the language of the user. - The UI language can be controlled with two configuration options: - language and - - defaultLanguage. The defaultLanguage setting specifies the - default CKEditor language to be used when a localization suitable for user's settings is not available. -

-

- To specify the user interface language that will be used no matter what language is - specified in user's browser or operating system, set the language property: -

-
-CKEDITOR.replace( 'textarea_id', {
-	// Load the German interface.
-	language: 'de'
-});
-

- Note that textarea_id in the code above is the id attribute of - the <textarea> element to be replaced. -

-
-
-

- Available languages ( languages!):
- -
- - (You may see strange characters if your system does not support the selected language) - -

-

- - -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/xhtmlstyle.html b/wqflask/wqflask/static/packages/ckeditor/samples/xhtmlstyle.html deleted file mode 100644 index f219d11d..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/samples/xhtmlstyle.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - XHTML Compliant Output — CKEditor Sample - - - - - - -

- CKEditor Samples » Producing XHTML Compliant Output -

-
-

- This sample shows how to configure CKEditor to output valid - XHTML 1.1 code. - Deprecated elements (<font>, <u>) or attributes - (size, face) will be replaced with XHTML compliant code. -

-

- To add a CKEditor instance outputting valid XHTML code, load the editor using a standard - JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. -

-

- A snippet of the configuration code can be seen below; check the source of this page for - full definition: -

-
-CKEDITOR.replace( 'textarea_id', {
-	contentsCss: 'assets/outputxhtml.css',
-
-	coreStyles_bold: {
-		element: 'span',
-		attributes: { 'class': 'Bold' }
-	},
-	coreStyles_italic: {
-		element: 'span',
-		attributes: { 'class': 'Italic' }
-	},
-
-	...
-});
-
-
-

- - - -

-

- -

-
- - - diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog.css deleted file mode 100644 index 1504938d..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie.css deleted file mode 100644 index 93cf7aed..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie7.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie7.css deleted file mode 100644 index 4b98ae57..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie8.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie8.css deleted file mode 100644 index 4f2edca9..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_iequirks.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_iequirks.css deleted file mode 100644 index bb36a95d..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor.css deleted file mode 100644 index 324526ce..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_gecko.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_gecko.css deleted file mode 100644 index 22df7efb..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_gecko.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie.css deleted file mode 100644 index 42119784..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie7.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie7.css deleted file mode 100644 index a6607e88..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie8.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie8.css deleted file mode 100644 index c10fce39..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_iequirks.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_iequirks.css deleted file mode 100644 index 61637ae7..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons.png deleted file mode 100644 index 1ec992d9..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons_hidpi.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons_hidpi.png deleted file mode 100644 index 6e103c05..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons_hidpi.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/arrow.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/arrow.png deleted file mode 100644 index d72b5f3b..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/arrow.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/close.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/close.png deleted file mode 100644 index 6a04ab52..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/close.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/close.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/close.png deleted file mode 100644 index e406c2c3..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/close.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock-open.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock-open.png deleted file mode 100644 index edbd12f3..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock-open.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock.png deleted file mode 100644 index 1b87bbb7..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/refresh.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/refresh.png deleted file mode 100644 index c6c2b86e..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/refresh.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock-open.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock-open.png deleted file mode 100644 index 04769877..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock-open.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock.png deleted file mode 100644 index c5a14400..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/refresh.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/refresh.png deleted file mode 100644 index 1ff63c30..00000000 Binary files a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/refresh.png and /dev/null differ diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/readme.md b/wqflask/wqflask/static/packages/ckeditor/skins/moono/readme.md deleted file mode 100644 index d086fe9b..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -"Moono" Skin -==================== - -This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor -[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by -the CKEditor team. "Moono" is maintained by the core developers. - -For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) -documentation. - -Features -------------------- -"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. -It comes with the following features: - -- Chameleon feature with brightness, -- high-contrast compatibility, -- graphics source provided in SVG. - -Directory Structure -------------------- - -CSS parts: -- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, -- **mainui.css**: the file contains styles of entire editor outline structures, -- **toolbar.css**: the file contains styles of the editor toolbar space (top), -- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, -- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded -until the first panel open up, -- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), -- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, -it's not loaded until the first menu open up, -- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, -- **reset.css**: the file defines the basis of style resets among all editor UI spaces, -- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, -- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. - -Other parts: -- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, -- **icons/**: contains all skin defined icons, -- **images/**: contains a fill general used images, -- **dev/**: contains SVG source of the skin icons. - -License -------- - -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). - -See LICENSE.md for more information. diff --git a/wqflask/wqflask/static/packages/ckeditor/styles.js b/wqflask/wqflask/static/packages/ckeditor/styles.js deleted file mode 100644 index 18e4316b..00000000 --- a/wqflask/wqflask/static/packages/ckeditor/styles.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -// This file contains style definitions that can be used by CKEditor plugins. -// -// The most common use for it is the "stylescombo" plugin, which shows a combo -// in the editor toolbar, containing all styles. Other plugins instead, like -// the div plugin, use a subset of the styles on their feature. -// -// If you don't have plugins that depend on this file, you can simply ignore it. -// Otherwise it is strongly recommended to customize this file to match your -// website requirements and design properly. - -CKEDITOR.stylesSet.add( 'default', [ - /* Block Styles */ - - // These styles are already available in the "Format" combo ("format" plugin), - // so they are not needed here by default. You may enable them to avoid - // placing the "Format" combo in the toolbar, maintaining the same features. - /* - { name: 'Paragraph', element: 'p' }, - { name: 'Heading 1', element: 'h1' }, - { name: 'Heading 2', element: 'h2' }, - { name: 'Heading 3', element: 'h3' }, - { name: 'Heading 4', element: 'h4' }, - { name: 'Heading 5', element: 'h5' }, - { name: 'Heading 6', element: 'h6' }, - { name: 'Preformatted Text',element: 'pre' }, - { name: 'Address', element: 'address' }, - */ - - { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, - { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, - { - name: 'Special Container', - element: 'div', - styles: { - padding: '5px 10px', - background: '#eee', - border: '1px solid #ccc' - } - }, - - /* Inline Styles */ - - // These are core styles available as toolbar buttons. You may opt enabling - // some of them in the Styles combo, removing them from the toolbar. - // (This requires the "stylescombo" plugin) - /* - { name: 'Strong', element: 'strong', overrides: 'b' }, - { name: 'Emphasis', element: 'em' , overrides: 'i' }, - { name: 'Underline', element: 'u' }, - { name: 'Strikethrough', element: 'strike' }, - { name: 'Subscript', element: 'sub' }, - { name: 'Superscript', element: 'sup' }, - */ - - { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, - - { name: 'Big', element: 'big' }, - { name: 'Small', element: 'small' }, - { name: 'Typewriter', element: 'tt' }, - - { name: 'Computer Code', element: 'code' }, - { name: 'Keyboard Phrase', element: 'kbd' }, - { name: 'Sample Text', element: 'samp' }, - { name: 'Variable', element: 'var' }, - - { name: 'Deleted Text', element: 'del' }, - { name: 'Inserted Text', element: 'ins' }, - - { name: 'Cited Work', element: 'cite' }, - { name: 'Inline Quotation', element: 'q' }, - - { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, - { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, - - /* Object Styles */ - - { - name: 'Styled image (left)', - element: 'img', - attributes: { 'class': 'left' } - }, - - { - name: 'Styled image (right)', - element: 'img', - attributes: { 'class': 'right' } - }, - - { - name: 'Compact table', - element: 'table', - attributes: { - cellpadding: '5', - cellspacing: '0', - border: '1', - bordercolor: '#ccc' - }, - styles: { - 'border-collapse': 'collapse' - } - }, - - { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, - { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } -] ); - -- cgit v1.2.3 From 0f72dfa50f821d389022a30539a96244685d6192 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 08:29:00 +0000 Subject: User manager no longer uses SQL --- wqflask/wqflask/user_manager.py | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py index ebca4807..a0605803 100644 --- a/wqflask/wqflask/user_manager.py +++ b/wqflask/wqflask/user_manager.py @@ -23,9 +23,6 @@ import urlparse import simplejson as json -import sqlalchemy -from sqlalchemy import orm - #from redis import StrictRedis import redis Redis = redis.StrictRedis() @@ -46,7 +43,6 @@ from wqflask.database import db_session from wqflask import model from utility import Bunch, Struct, after -from utility.tools import LOG_SQL, LOG_SQL_ALCHEMY import logging from utility.logger import getLogger @@ -223,6 +219,7 @@ class UserSession(object): def user_ob(self): """Actual sqlalchemy record""" # Only look it up once if needed, then store it + raise "OBSOLETE: use ElasticSearch instead" try: if LOG_SQL_ALCHEMY: logging.getLogger('sqlalchemy.pool').setLevel(logging.DEBUG) @@ -844,19 +841,6 @@ def register(): return render_template("new_security/register_user.html", values=params, errors=errors) - - -#@app.route("/n/login", methods=('GET', 'POST')) -#def login(): -# return user_manager.login() -# -#@app.route("/manage/verify") -#def verify(): -# user_manager.verify_email() -# return render_template("new_security/verified.html") - - - ################################# Sign and unsign ##################################### def url_for_hmac(endpoint, **values): -- cgit v1.2.3 From ff7150cb80f6962e02270b40b54512c6f39ea2f1 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 08:44:02 +0000 Subject: Remove file --- wqflask/wqflask/static/dbdoc/TODO.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 wqflask/wqflask/static/dbdoc/TODO.md diff --git a/wqflask/wqflask/static/dbdoc/TODO.md b/wqflask/wqflask/static/dbdoc/TODO.md deleted file mode 100644 index c0a8bab7..00000000 --- a/wqflask/wqflask/static/dbdoc/TODO.md +++ /dev/null @@ -1 +0,0 @@ -TODO: Add all database documentation into this folder -- cgit v1.2.3 From 0a5c128249c7d2fe3fc7760892614f8a93d68e3c Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 08:48:44 +0000 Subject: Config files are store in https://github.com/genenetwork/gn-deploy-servers repo --- wqflask/other_config/dot.pylintrc | 249 ------------------------ wqflask/other_config/nginx-old.conf | 108 ----------- wqflask/other_config/nginx_conf/gn2-lei.conf | 41 ---- wqflask/other_config/nginx_conf/gn2-zach.conf | 52 ----- wqflask/other_config/nginx_conf/gn2.conf | 41 ---- wqflask/other_config/nginx_conf/gn2_sam.conf | 42 ---- wqflask/other_config/nginx_conf/penguin.conf | 44 ----- wqflask/other_config/pylintrc | 264 -------------------------- 8 files changed, 841 deletions(-) delete mode 100644 wqflask/other_config/dot.pylintrc delete mode 100644 wqflask/other_config/nginx-old.conf delete mode 100644 wqflask/other_config/nginx_conf/gn2-lei.conf delete mode 100644 wqflask/other_config/nginx_conf/gn2-zach.conf delete mode 100644 wqflask/other_config/nginx_conf/gn2.conf delete mode 100644 wqflask/other_config/nginx_conf/gn2_sam.conf delete mode 100644 wqflask/other_config/nginx_conf/penguin.conf delete mode 100644 wqflask/other_config/pylintrc diff --git a/wqflask/other_config/dot.pylintrc b/wqflask/other_config/dot.pylintrc deleted file mode 100644 index 2774300a..00000000 --- a/wqflask/other_config/dot.pylintrc +++ /dev/null @@ -1,249 +0,0 @@ -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Profiled execution. -profile=no - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS - -# Pickle collected data for later comparisons. -persistent=yes - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - - -[MESSAGES CONTROL] - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time. -#enable= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). -#disable= - - -[REPORTS] - -# Set the output format. Available formats are text, parseable, colorized, msvs -# (visual studio) and html -output-format=colorized - -# Include message's id in output -include-ids=no - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - -# Tells whether to display a full report or only the messages -reports=yes - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Add a comment according to your evaluation note. This is used by the global -# evaluation report (RP0004). -comment=no - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -[TYPECHECK] - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# List of classes names for which member attributes should not be checked -# (useful for classes with attributes dynamically set). -ignored-classes=SQLObject - -# When zope mode is activated, add a predefined set of Zope acquired attributes -# to generated-members. -zope=no - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E0201 when accessed. Python regular -# expressions are accepted. -generated-members=REQUEST,acl_users,aq_parent - - -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=4 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - - -[BASIC] - -# Required attributes for module, separated by a comma -required-attributes= - -# List of builtins function names that should not be used, separated by a comma -bad-functions=map,filter,apply,input - -# Regular expression which should only match correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression which should only match correct module level names -const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Regular expression which should only match correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression which should only match correct function names -function-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct method names -method-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct instance attribute names -attr-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct argument names -argument-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct variable names -variable-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct list comprehension / -# generator expression variable names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_ - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# Regular expression which should only match functions or classes name which do -# not require a docstring -no-docstring-rgx=__.*__ - - -[VARIABLES] - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching the beginning of the name of dummy variables -# (i.e. not used). -dummy-variables-rgx=_|dummy - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - - -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module -max-module-lines=1000 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - - -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,string,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled) -int-import-graph= - - -[DESIGN] - -# Maximum number of arguments for function / method -max-args=5 - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore -ignored-argument-names=_.* - -# Maximum number of locals for function / method body -max-locals=15 - -# Maximum number of return / yield for function / method body -max-returns=6 - -# Maximum number of branch for function / method body -max-branchs=12 - -# Maximum number of statements in function / method body -max-statements=50 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - - -[CLASSES] - -# List of interface methods to ignore, separated by a comma. This is used for -# instance to not check methods defines in Zope's Interface base class. -ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception" -overgeneral-exceptions=Exception diff --git a/wqflask/other_config/nginx-old.conf b/wqflask/other_config/nginx-old.conf deleted file mode 100644 index 65ee768c..00000000 --- a/wqflask/other_config/nginx-old.conf +++ /dev/null @@ -1,108 +0,0 @@ - -#user nobody; -worker_processes 1; - -#error_log logs/error.log; -#error_log logs/error.log notice; -#error_log logs/error.log info; - -#pid logs/nginx.pid; - - -events { - worker_connections 1024; -} - - -http { - include mime.types; - default_type application/octet-stream; - - #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - # '$status $body_bytes_sent "$http_referer" ' - # '"$http_user_agent" "$http_x_forwarded_for"'; - - #access_log logs/access.log main; - - sendfile on; - #tcp_nopush on; - - #keepalive_timeout 0; - keepalive_timeout 65; - - gzip on; - - server { - # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/ - listen 80; - - server_name _; - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - location ^~ /css/ { - root /home/sam/gene/wqflask/wqflask/static/; - } - - location ^~ /javascript/ { - root /home/sam/gene/wqflask/wqflask/static/; - } - -# location ^~ /image/ { -# root /home/sam/gene/wqflask/wqflask/static/; -# } - - location ^~ /images/ { - root /home/sam/gene/wqflask/wqflask/static/; - } - - location / { - proxy_pass http://127.0.0.1:5000/; - proxy_redirect off; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - - } - - - # another virtual host using mix of IP-, name-, and port-based configuration - # - #server { - # listen 8000; - # listen somename:8080; - # server_name somename alias another.alias; - - # location / { - # root html; - # index index.html index.htm; - # } - #} - - - # HTTPS server - # - #server { - # listen 443; - # server_name localhost; - - # ssl on; - # ssl_certificate cert.pem; - # ssl_certificate_key cert.key; - - # ssl_session_timeout 5m; - - # ssl_protocols SSLv2 SSLv3 TLSv1; - # ssl_ciphers HIGH:!aNULL:!MD5; - # ssl_prefer_server_ciphers on; - - # location / { - # root html; - # index index.html index.htm; - # } - #} - -} diff --git a/wqflask/other_config/nginx_conf/gn2-lei.conf b/wqflask/other_config/nginx_conf/gn2-lei.conf deleted file mode 100644 index 893ad435..00000000 --- a/wqflask/other_config/nginx_conf/gn2-lei.conf +++ /dev/null @@ -1,41 +0,0 @@ -server { - # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/ - listen 80; - - server_name gn2-lei.genenetwork.org; - - access_log /var/log/nginx/lei_access.log; - error_log /var/log/nginx/lei_error.log; - - location ^~ /css/ { - root /gene/wqflask/wqflask/static/; - } - - location ^~ /javascript/ { - root /gene/wqflask/wqflask/static/; - } - -# location ^~ /image/ { -# root /gene/wqflask/wqflask/static/; -# } - - location ^~ /images/ { - root /gene/wqflask/wqflask/static/; - } - - ### New - added by Sam - #location ^~ /static/ { - # root /gene/wqflask/wqflask/static/; - #} - - location / { - proxy_pass http://127.0.0.1:5001/; - proxy_redirect off; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - proxy_read_timeout 40m; - } -} diff --git a/wqflask/other_config/nginx_conf/gn2-zach.conf b/wqflask/other_config/nginx_conf/gn2-zach.conf deleted file mode 100644 index 38347292..00000000 --- a/wqflask/other_config/nginx_conf/gn2-zach.conf +++ /dev/null @@ -1,52 +0,0 @@ -server { - # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/ - listen 80; - - server_name gn2-zach.genenetwork.org; - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - location ^~ /css/ { - root /gene/wqflask/wqflask/static/; - } - - location ^~ /javascript/ { - root /gene/wqflask/wqflask/static/; - } - -# location ^~ /image/ { -# root /gene/wqflask/wqflask/static/; -# } - - location ^~ /images/ { - root /gene/wqflask/wqflask/static/; - } - - ### New - added by Sam - #location ^~ /static/ { - # root /gene/wqflask/wqflask/static/; - #} - - location /plink_gemma/ { - root /home/zas1024/gene/wqflask/wqflask/; - autoindex on; - } - - location /download/ { - root /home/zas1024/gene/wqflask/wqflask/; - autoindex on; - } - - location / { - proxy_pass http://127.0.0.1:5002/; - proxy_redirect off; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - proxy_read_timeout 40m; - } -} - diff --git a/wqflask/other_config/nginx_conf/gn2.conf b/wqflask/other_config/nginx_conf/gn2.conf deleted file mode 100644 index a51b4113..00000000 --- a/wqflask/other_config/nginx_conf/gn2.conf +++ /dev/null @@ -1,41 +0,0 @@ -server { - # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/ - listen 80; - - server_name gn2.genenetwork.org; - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - location ^~ /css/ { - root /gene/wqflask/wqflask/static/; - } - - location ^~ /javascript/ { - root /gene/wqflask/wqflask/static/; - } - -# location ^~ /image/ { -# root /gene/wqflask/wqflask/static/; -# } - - location ^~ /images/ { - root /gene/wqflask/wqflask/static/; - } - - ### New - added by Sam - #location ^~ /static/ { - # root /gene/wqflask/wqflask/static/; - #} - - location / { - proxy_pass http://127.0.0.1:5000/; - proxy_redirect off; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - proxy_read_timeout 40m; - } -} diff --git a/wqflask/other_config/nginx_conf/gn2_sam.conf b/wqflask/other_config/nginx_conf/gn2_sam.conf deleted file mode 100644 index f9abbbd2..00000000 --- a/wqflask/other_config/nginx_conf/gn2_sam.conf +++ /dev/null @@ -1,42 +0,0 @@ -server { - # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/ - listen 80; - - server_name gn2_sam.genenetwork.org; - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - location ^~ /css/ { - root /gene/wqflask/wqflask/static/; - } - - location ^~ /javascript/ { - root /gene/wqflask/wqflask/static/; - } - -# location ^~ /image/ { -# root /gene/wqflask/wqflask/static/; -# } - - location ^~ /images/ { - root /gene/wqflask/wqflask/static/; - } - - ### New - added by Sam - #location ^~ /static/ { - # root /gene/wqflask/wqflask/static/; - #} - - location / { - proxy_pass http://127.0.0.1:5005/; - proxy_redirect off; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - proxy_read_timeout 40m; - } -} - diff --git a/wqflask/other_config/nginx_conf/penguin.conf b/wqflask/other_config/nginx_conf/penguin.conf deleted file mode 100644 index c819951c..00000000 --- a/wqflask/other_config/nginx_conf/penguin.conf +++ /dev/null @@ -1,44 +0,0 @@ -server { - # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/ - - client_max_body_size 20M; - listen 80; - - server_name penguin.uthsc.edu; - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - location ^~ /css/ { - root /gene/wqflask/wqflask/static/; - } - - location ^~ /javascript/ { - root /gene/wqflask/wqflask/static/; - } - -# location ^~ /image/ { -# root /gene/wqflask/wqflask/static/; -# } - - location ^~ /images/ { - root /gene/wqflask/wqflask/static/; - } - - ### New - added by Sam - #location ^~ /static/ { - # root /gene/wqflask/wqflask/static/; - #} - - location / { - proxy_pass http://127.0.0.1:5000/; - proxy_redirect off; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - proxy_read_timeout 40m; - } -} - diff --git a/wqflask/other_config/pylintrc b/wqflask/other_config/pylintrc deleted file mode 100644 index b23af7a4..00000000 --- a/wqflask/other_config/pylintrc +++ /dev/null @@ -1,264 +0,0 @@ -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Profiled execution. -profile=no - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS - -# Pickle collected data for later comparisons. -persistent=yes - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - - -[MESSAGES CONTROL] - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time. See also the "--disable" option for examples. -#enable= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once).You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use"--disable=all --enable=classes -# --disable=W" -disable=no-init, star-args, no-member, import-error - - -[REPORTS] - -# Set the output format. Available formats are text, parseable, colorized, msvs -# (visual studio) and html. You can also give a reporter class, eg -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Include message's id in output -include-ids=no - -# Include symbolic ids of messages in output -symbols=no - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - -# Tells whether to display a full report or only the messages -reports=yes - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Add a comment according to your evaluation note. This is used by the global -# evaluation report (RP0004). -comment=no - - -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=4 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - - -[VARIABLES] - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching the beginning of the name of dummy variables -# (i.e. not used). -dummy-variables-rgx=_|dummy - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - - -[BASIC] - -# Required attributes for module, separated by a comma -required-attributes= - -# List of builtins function names that should not be used, separated by a comma -bad-functions=map,filter,apply,input - -# Regular expression which should only match correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression which should only match correct module level names -const-rgx=(([A-Z_][A-Za-z0-9_]*)|(__.*__))$ - -# Regular expression which should only match correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression which should only match correct function names -function-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct method names -method-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct instance attribute names -attr-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct argument names -argument-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct variable names -variable-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct list comprehension / -# generator expression variable names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_ - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# Regular expression which should only match functions or classes name which do -# not require a docstring -no-docstring-rgx=__.*__ - - -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module -max-module-lines=1000 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -[TYPECHECK] - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# List of classes names for which member attributes should not be checked -# (useful for classes with attributes dynamically set). -ignored-classes=SQLObject - -# When zope mode is activated, add a predefined set of Zope acquired attributes -# to generated-members. -zope=no - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E0201 when accessed. Python regular -# expressions are accepted. -generated-members=REQUEST,acl_users,aq_parent - - -[DESIGN] - -# Maximum number of arguments for function / method -max-args=5 - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore -ignored-argument-names=_.* - -# Maximum number of locals for function / method body -max-locals=15 - -# Maximum number of return / yield for function / method body -max-returns=6 - -# Maximum number of branch for function / method body -max-branchs=12 - -# Maximum number of statements in function / method body -max-statements=50 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - - -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,string,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled) -int-import-graph= - - -[CLASSES] - -# List of interface methods to ignore, separated by a comma. This is used for -# instance to not check methods defines in Zope's Interface base class. -ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception" -overgeneral-exceptions=Exception -- cgit v1.2.3 From 0c600598b4f1c8a19b3bf13aa6cb197494a9c122 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 08:49:53 +0000 Subject: Testing moved to Python --- test/lib/gntest.rb | 6 ---- test/lib/link_checker.rb | 50 ------------------------------ test/lib/main_web_functionality.rb | 62 -------------------------------------- test/lib/mapping.rb | 58 ----------------------------------- test/lib/navigation.rb | 43 -------------------------- 5 files changed, 219 deletions(-) delete mode 100644 test/lib/gntest.rb delete mode 100644 test/lib/link_checker.rb delete mode 100644 test/lib/main_web_functionality.rb delete mode 100644 test/lib/mapping.rb delete mode 100644 test/lib/navigation.rb diff --git a/test/lib/gntest.rb b/test/lib/gntest.rb deleted file mode 100644 index 5b21b3d5..00000000 --- a/test/lib/gntest.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'minitest/autorun' -require 'mechanize' -require 'json' - -# ---- Use some default parameters if not set -$host = "http://localhost:5003" if !$host diff --git a/test/lib/link_checker.rb b/test/lib/link_checker.rb deleted file mode 100644 index 36cb36c8..00000000 --- a/test/lib/link_checker.rb +++ /dev/null @@ -1,50 +0,0 @@ - -SKIP = "mailto:" - -class LinkChecker -end - -describe LinkChecker do - before do - @agent = Mechanize.new - @agent.agent.http.ca_file = '/etc/ssl/certs/ca-certificates.crt' - end - - it "Get to front page" do - page = @agent.get($host) - page.links.each do |link| - puts link.href - if link.href !~ /#{SKIP}/ # /static\/dbdoc\/Hippocampus/ and link.href !~ /mailto:|glossary.html|sample_r|grits.eecs.utk.edu|correlationAnnotation.html/ - # Fetch link, program will crash with exception if link is broken - linkpage = @agent.get(link.href) - puts "Link to #{link.href} is valid, response code #{linkpage.code}" - end - end - - end - - describe LinkChecker do - it "Get to trait page" do - page = @agent.get($host+'/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P') - # p page - - # Get to trait page for 1435395_s_at - # form2 = show_trait_page.forms_with("trait_page")[0] - # form2.fields[30].name.must_equal "variance:C57BL/6J" - # form2.fields[30].value.must_equal "15.287" - - # Test every link on the page to check if it's broken or not - page.links.each do |link| - puts link.href - if link.href !~ /#{SKIP}/ # /static\/dbdoc\/Hippocampus/ and link.href !~ /mailto:|glossary.html|sample_r|grits.eecs.utk.edu|correlationAnnotation.html/ - # Fetch link, program will crash with exception if link is broken - linkpage = @agent.get(link.href) - puts "Link to #{link.href} is valid, response code #{linkpage.code}" - end - end - - end - - end - -end diff --git a/test/lib/main_web_functionality.rb b/test/lib/main_web_functionality.rb deleted file mode 100644 index 9ae49995..00000000 --- a/test/lib/main_web_functionality.rb +++ /dev/null @@ -1,62 +0,0 @@ -# In these tests we navigate from the main page to search - -class MainWebFunctionality -end - -describe MainWebFunctionality do - before do - @agent = Mechanize.new - @agent.agent.http.ca_file = '/etc/ssl/certs/ca-certificates.crt' - end - - describe MainWebFunctionality do - - it "Get to trait page" do - page = @agent.get($host) - p page - form = page.forms[1] - form.buttons[0].value.must_equal "Search" # main menu is loaded - - # http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC_M2_0606_P&search_terms_or=&search_terms_and=MEAN%3D%2815+16%29+LRS%3D%2823+46%29&FormID=searchResult - form.fields[0].value.must_equal "searchResult" - form.fields[2].value = "MEAN=(15 16) LRS=(23 46)" - form.fields[3].value = "mouse" - form.fields[4].value = "BXD" - form.fields[5].value = "Hippocampus mRNA" - form.fields[6].value = "HC_M2_0606_P" - search_page = @agent.submit(form, form.buttons.first) - p "==================" - p search_page - probe_link = search_page.links.find { |l| l.text =~ /1435395_s_at/ } - probe_link.uri.to_s.must_equal "/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P" - show_trait_page = probe_link.click - # p show_trait_page - - # Get to trait page for 1435395_s_at - - form2 = show_trait_page.forms_with("trait_page")[0] - # [name: corr_dataset value: HC_M2_0606_P] - form2.fields.select { |fld| fld.name == 'corr_dataset' }.first.value.must_equal 'HC_M2_0606_P' - if $options[:database] == :small - form2.fields[30].name.must_equal "value:DBA/2J" - else - form2.fields[30].name.must_equal "variance:C57BL/6J" - end - # form2.fields[30].value.must_equal "15.287" - - # Test every link on the page to check if it's broken or not - break if not $options[:link_checker] - show_trait_page.links.each do |link| - puts link.href - if link.href !~ /static\/dbdoc\/Hippocampus/ and link.href !~ /glossary.html|sample_r|grits.eecs.utk.edu|correlationAnnotation.html/ - # Fetch link, program will crash with exception if link is broken - linkpage = @agent.get(link.href) - puts "Link to #{link.href} is valid, response code #{linkpage.code}" - end - end - - end - - end - -end diff --git a/test/lib/mapping.rb b/test/lib/mapping.rb deleted file mode 100644 index 20e5bd40..00000000 --- a/test/lib/mapping.rb +++ /dev/null @@ -1,58 +0,0 @@ -# In these tests we navigate from the main page to a specific trait then hit the different mapping tool buttons (In this case pylMM and r/qtl) followed by computing the results (marker regressions). - -require 'gntest' - -class MappingTest -end - -describe MappingTest do - before do - @agent = Mechanize.new - @agent.agent.http.ca_file = '/etc/ssl/certs/ca-certificates.crt' - end - - describe MappingTest do - it "pylmm mapping tool selection" do - url = $host+'/marker_regression' - - json = JSON::load(File.read('test/data/input/mapping/1435395_s_at_HC_M2_0606_P.json')) - json["method"] = "pylmm" - # p json - page = @agent.post(URI.encode(url), json) - # Unpacking the page is slow - somehow - but the run is enough as a test - # form = page.forms_with("marker_regression")[0] - # form.fields.select { |fld| fld.name == 'dataset' }.first.value.must_equal 'HC_M2_0606_P' - # form.fields.select { |fld| fld.name == 'value:BXD1' }.first.value.must_equal '6.749' - end - end - - describe MappingTest do - it "R/qtl mapping tool selection" do - url = $host+'/marker_regression' # ?trait_id=1435395_s_at&dataset=HC_M2_0606_P' - - json = JSON::load(File.read('test/data/input/mapping/1435395_s_at_HC_M2_0606_P.json')) - # p json - page = @agent.post(URI.encode(url), - json, - ({'Content-Type' => 'application/x-www-form-urlencoded'})) - form = page.forms_with("marker_regression")[0] - p form - form.fields.select { |fld| fld.name == 'dataset' }.first.value.must_equal 'HC_M2_0606_P' - form.fields.select { |fld| fld.name == 'value:BXD1' }.first.value.must_equal "15.034" - end - end - - describe MappingTest do - it "CIM mapping tool selection (using reaper)" do - url = $host+'/marker_regression' - - json = JSON::load(File.read('test/data/input/mapping/1435395_s_at_HC_M2_0606_P.json')) - json["method"] = "reaper" - page = @agent.post(URI.encode(url), json) - form = page.forms_with("marker_regression")[0] - form.fields.select { |fld| fld.name == 'dataset' }.first.value.must_equal 'HC_M2_0606_P' - form.fields.select { |fld| fld.name == 'value:BXD1' }.first.value.must_equal "15.034" - end - end - -end diff --git a/test/lib/navigation.rb b/test/lib/navigation.rb deleted file mode 100644 index ee9f41d2..00000000 --- a/test/lib/navigation.rb +++ /dev/null @@ -1,43 +0,0 @@ -# In these tests we navigate from the main page to a specific trait then hit the different mapping tool buttons (In this case pylMM and r/qtl) followed by computing the results (marker regressions). - - -class MappingTest -end - -describe MappingTest do - before do - @agent = Mechanize.new - @agent.agent.http.ca_file = '/etc/ssl/certs/ca-certificates.crt' - end - - describe MappingTest do - it "pyLMM mapping tool selection" do - break if $options[:skip_broken] - page = @agent.get($host+'/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P') -#Navigates to http://localhost:5003/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P and clicks respective buttons. - link = page.link_with(text: 'pyLMM') - page = link.click - puts page.uri - link = page.link_with(text: 'Compute') - page = link.click - puts page.uri - probe_link.uri.to_s.must_equal "/marker_regression" - end - end - -end - -describe MappingTest do - it "R/qtl mapping tool selection" do - break if $options[:skip_broken] - page = @agent.get($host+'/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P') - link = page.link_with(text: 'R/qtl') - page = link.click - puts page.uri - form.field_with(:name => 'Methods').options[2].select - link = page.link_with(text: 'Compute') - page = link.click - puts page.uri - probe_link.uri.to_s.must_equal "/marker_regression" - end -end -- cgit v1.2.3 From 9961d9af171ac61a72b69a845c8a8e438676b995 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 08:51:04 +0000 Subject: Testing moved to Python --- bin/mechnical-rob | 111 ------------------------------------------------------ 1 file changed, 111 deletions(-) delete mode 100755 bin/mechnical-rob diff --git a/bin/mechnical-rob b/bin/mechnical-rob deleted file mode 100755 index be223d94..00000000 --- a/bin/mechnical-rob +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env ruby - - -USAGE = <0 - ARGV.shift - else - "http://localhost:5003" - end - -$stderr.print "Testing <",$host,">\n" - -require 'mechanize' -require 'minitest/spec' -require 'minitest/autorun' - -# These are the actual testing modules - -libpath = File.dirname(File.dirname(__FILE__)) -$: << File.join(libpath,'test/lib') - -require 'main_web_functionality' - -if options[:all] or options[:mapping] - require 'mapping' -end - -if options[:all] or options[:link_checker] - require 'link_checker' -end - -if options[:all] or options[:navigation] - require 'navigation' -end -- cgit v1.2.3 From 9544ca2e6461b267c28d9a4c7fe976bc34f10be3 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Mon, 2 Apr 2018 08:52:52 +0000 Subject: Version bump Config files are store in https://github.com/genenetwork/gn-deploy-servers repo --- etc/VERSION | 2 +- etc/nginx-genenetwork.conf | 54 ---------------------------------------------- 2 files changed, 1 insertion(+), 55 deletions(-) delete mode 100644 etc/nginx-genenetwork.conf diff --git a/etc/VERSION b/etc/VERSION index ca9e199c..a4320e6f 100644 --- a/etc/VERSION +++ b/etc/VERSION @@ -1 +1 @@ -2.11-rc1 +2.11-rc2 diff --git a/etc/nginx-genenetwork.conf b/etc/nginx-genenetwork.conf deleted file mode 100644 index 06fd3c57..00000000 --- a/etc/nginx-genenetwork.conf +++ /dev/null @@ -1,54 +0,0 @@ -user nobody; -worker_processes 4; -pid /var/run/nginx.pid; - -error_log /var/log/nginx/error.log; - -events { - worker_connections 16; -} - -http { - include mime.types; - # default_type application/octet-stream; - - # sendfile on; - keepalive_timeout 480; - - server { - listen 80; - server_name localhost; - - location / { - root html; - index index.html index.htm; - } - - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root html; - } - } - - server { - listen 80; - server_name test-gn2.genenetwork.org; - access_log logs/test-gn2.access.log; - - proxy_connect_timeout 3000; - proxy_send_timeout 3000; - proxy_read_timeout 3000; - send_timeout 3000; - - location / { - # proxy_set_header Host $host; - proxy_set_header Host $http_host; - # proxy_redirect off; - proxy_set_header Connection keep-alive; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $server_name; - proxy_pass http://127.0.0.1:5003; - } - } -} -- cgit v1.2.3 From b17b78a46aec1ca515bfef7168232020cf09a151 Mon Sep 17 00:00:00 2001 From: zsloan Date: Mon, 2 Apr 2018 15:55:39 +0000 Subject: Just added link to staging branch to header bar --- wqflask/wqflask/templates/base.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html index 237a65f3..41bdaddc 100644 --- a/wqflask/wqflask/templates/base.html +++ b/wqflask/wqflask/templates/base.html @@ -76,6 +76,9 @@ Sign in {% endif %} +
  • + Use Staging Branch +
  • Use GeneNetwork 1
  • -- cgit v1.2.3 From d3e4021452f2bf6677fe1dbdf98749030bd2dd3b Mon Sep 17 00:00:00 2001 From: zsloan Date: Mon, 2 Apr 2018 21:54:13 +0000 Subject: Fixed error that caused server to not start with new user code --- wqflask/wqflask/user_manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py index a0605803..ac3824a7 100644 --- a/wqflask/wqflask/user_manager.py +++ b/wqflask/wqflask/user_manager.py @@ -54,7 +54,7 @@ import requests from utility.elasticsearch_tools import get_elasticsearch_connection, get_user_by_unique_column, get_item_by_unique_column, save_user, es_save_data from smtplib import SMTP -from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD +from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY THREE_DAYS = 60 * 60 * 24 * 3 #THREE_DAYS = 45 @@ -219,7 +219,7 @@ class UserSession(object): def user_ob(self): """Actual sqlalchemy record""" # Only look it up once if needed, then store it - raise "OBSOLETE: use ElasticSearch instead" + # raise "OBSOLETE: use ElasticSearch instead" try: if LOG_SQL_ALCHEMY: logging.getLogger('sqlalchemy.pool').setLevel(logging.DEBUG) -- cgit v1.2.3 From 78dbe4a00956edf347170888d057459a592fd57e Mon Sep 17 00:00:00 2001 From: zsloan Date: Mon, 2 Apr 2018 22:20:38 +0000 Subject: Fixed link for staging server --- wqflask/wqflask/templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html index 41bdaddc..64daa1cc 100644 --- a/wqflask/wqflask/templates/base.html +++ b/wqflask/wqflask/templates/base.html @@ -77,7 +77,7 @@ {% endif %}
  • - Use Staging Branch + Use Staging Branch
  • Use GeneNetwork 1 -- cgit v1.2.3 From fb57f05083b0512b7bb9f9e15b6cc6efaded5a1f Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Tue, 3 Apr 2018 07:50:28 +0000 Subject: @acenteno added data upload scripts into main repo --- scripts/maintenance/QTL_Reaper_v6.py | 108 ++++++++ scripts/maintenance/README.txt | 66 +++++ .../Update_Case_Attributes_MySQL_tab.py | 27 ++ scripts/maintenance/delete_genotypes.py | 33 +++ scripts/maintenance/delete_phenotypes.py | 35 +++ scripts/maintenance/load_genotypes.py | 154 ++++++++++++ scripts/maintenance/load_phenotypes.py | 171 +++++++++++++ scripts/maintenance/readProbeSetMean_v7.py | 274 +++++++++++++++++++++ scripts/maintenance/readProbeSetSE_v7.py | 254 +++++++++++++++++++ 9 files changed, 1122 insertions(+) create mode 100755 scripts/maintenance/QTL_Reaper_v6.py create mode 100644 scripts/maintenance/README.txt create mode 100644 scripts/maintenance/Update_Case_Attributes_MySQL_tab.py create mode 100755 scripts/maintenance/delete_genotypes.py create mode 100755 scripts/maintenance/delete_phenotypes.py create mode 100755 scripts/maintenance/load_genotypes.py create mode 100755 scripts/maintenance/load_phenotypes.py create mode 100755 scripts/maintenance/readProbeSetMean_v7.py create mode 100755 scripts/maintenance/readProbeSetSE_v7.py diff --git a/scripts/maintenance/QTL_Reaper_v6.py b/scripts/maintenance/QTL_Reaper_v6.py new file mode 100755 index 00000000..e50dbd40 --- /dev/null +++ b/scripts/maintenance/QTL_Reaper_v6.py @@ -0,0 +1,108 @@ +####### To run this program do: python QTL_Reaper_v2.py 235 +#Where 163 is the ProbeSetFreeze Id of the database that we want to calculate #the LRS +#!/usr/bin/python +import sys +import os +import reaper +import MySQLdb +import time + +con = MySQLdb.Connect(db='db_webqtl',user='username',passwd='', host="localhost") +cursor = con.cursor() + +genotypeDir = '/gnshare/gn/web/genotypes/' +genotype_1 = reaper.Dataset() + +#####get all of the genotypes +cursor.execute('select Id, Name from InbredSet') +results = cursor.fetchall() +InbredSets = {} +for item in results: + InbredSets[item[0]] = genotypeDir+str(item[1])+'.geno' + +ProbeSetFreezeIds=sys.argv[1:] +if ProbeSetFreezeIds: + #####convert the Ids to integer + ProbeSetFreezeIds=map(int, ProbeSetFreezeIds) + +else: + #####get all of the dataset that need be updated + cursor.execute('select distinct(ProbeSetFreezeId) from ProbeSetXRef where pValue is NULL order by ProbeSetFreezeId desc') + results = cursor.fetchall() + ProbeSetFreezeIds = [] + for item in results: + ProbeSetFreezeIds.append(item[0]) + +####human dataset can NOT use this program calculate the LRS, ignore it +if ProbeSetFreezeIds.__contains__(215): + ProbeSetFreezeIds.remove(215) + +#output_file = open ('/home/xzhou/work/DatabaseTools/cal_LRS_Additive_result.txt', 'w') + +#####update +for ProbeSetFreezeId in ProbeSetFreezeIds: + cursor.execute(""" + select InbredSetId + from ProbeFreeze, ProbeSetFreeze + where ProbeFreeze.Id=ProbeSetFreeze.ProbeFreezeId and ProbeSetFreeze.Id=%d + """%ProbeSetFreezeId); + + InbredSetId = cursor.fetchone()[0] + if InbredSetId==3: + InbredSetId=1 + #if InbredSetId==12: + # InbredSetId=2 + + print ProbeSetFreezeId, InbredSets[InbredSetId] + + genotype_1.read(InbredSets[InbredSetId]) + locuses = [] + for geno in genotype_1: + for locus in geno: + locuses.append(locus.name) + + cursor.execute('select ProbeSetId, Locus, DataId from ProbeSetXRef where ProbeSetFreezeId=%s'%ProbeSetFreezeId) + ProbeSetXRefInfos = cursor.fetchall() + + kj=0 + for aProbeSetXRef in ProbeSetXRefInfos: + ProbeSetId, Locus, DataId = aProbeSetXRef + prgy = genotype_1.prgy + + cursor.execute("select Strain.Name, ProbeSetData.value from Strain, ProbeSetData where Strain.Id = ProbeSetData.StrainId and ProbeSetData.Id = %d" % DataId) + results = cursor.fetchall() + if not results: + continue + _strains = [] + _values = [] + for item2 in results: + strain, value = item2 + if strain in prgy: + _strains.append(strain) + _values.append(value) + if not _strains or not _values: + continue + + if len(_strains) < 8: + continue + qtlresults = genotype_1.regression(strains = _strains, trait = _values) + _max = max(qtlresults) + _locus = _max.locus.name + _additive = _max.additive + _max = _max.lrs + + #output_file.write('%s\t%s\t%s\t%s\t%s\n' % (ProbeSetFreezeId, ProbeSetId, _locus, _max, _additive)) + + # _max(LRS) maybe is infinite sometimes, so define it as a very big number + if _max == float('inf'): + _max = 10000 + + cursor.execute('update ProbeSetXRef set Locus=%s, LRS=%s, additive=%s where ProbeSetId=%s and ProbeSetFreezeId=%s', \ + (_locus, _max, _additive, ProbeSetId, ProbeSetFreezeId)) + + kj += 1 + if kj%1000==0: + print ProbeSetFreezeId, InbredSets[InbredSetId],kj + + + print ProbeSetFreezeIds diff --git a/scripts/maintenance/README.txt b/scripts/maintenance/README.txt new file mode 100644 index 00000000..8604a5c9 --- /dev/null +++ b/scripts/maintenance/README.txt @@ -0,0 +1,66 @@ +Theses are Python2 scripts used for uploading data into the MySQL +database (current as per April 2018) + + +Last updated by A.Centeno 4-2-18 +========================== +load_genotypes.py +========================== +Mainly used to enter genotype batch records +Run load_genotypes.py as: +python delete_genotypes.py /home/acenteno/copyfrom_spring211/Maintenance/dataset/Arthur-Geno-Pheno-Data/Load_Genotypes/config.ini + +========================== +delete_genotypes.py +========================== +Mainly used to delete genotype batch records +Run delete_genotypes.py as: +python delete_genotypes.py /home/acenteno/copyfrom_spring211/Maintenance/dataset/Arthur-Geno-Pheno-Data/Delete_Genotypes/config.ini + +========================== +load_phenotypes.py +========================== +Mainly used to enter phenotype trait batch records +Run load_phenotypes.py as: +python load_phenotypes.py /home/acenteno/copyfrom_spring211/Maintenance/dataset/Arthur-Geno-Pheno-Data/Load_Phenotypes/config.ini + +========================== +delete_phenotypes.py +========================== +Mainly used to delete phenotype trait full records +Run delete_phenotypes.py as: +python delete_phenotypes.py /home/acenteno/copyfrom_spring211/Maintenance/dataset/Arthur-Geno-Pheno-Data/Delete_Phenotypes/config.ini + +========================== +QTL_Reaper_v6.py +========================== +Mainly used to perform QTL reaper and obtain Max LRS values. +Run QTL_Reaper_v6.py as: +python QTL_Reaper_v6.py (and GN accession number here) + +========================== +Update_Case_Attributes_MySQL_tab.py +========================== +Mainly used to enter Case attributes. +Run Update_Case_Attributes_MySQL_tab.py as: +python Update_Case_Attributes_MySQL_tab.py + +========================== +readProbeSetMean_v7.py +========================== +Mainly used to enter mean expression data. +Run readProbeSetMean_v7.py as: +python readProbeSetMean_v7.py + +========================== +readProbeSetSE_v7.py +========================== +Mainly used to enter Standard Error values from expression data. +Run readProbeSetSE_v7.py as: +python readProbeSetSE_v7.py + +========================== +MYSQL command CALCULATE MEANS NEW Structure: +========================== +Mainly used to calculate mean from expression data values. +update ProbeSetXRef set mean = (select AVG(value) from ProbeSetData where ProbeSetData.Id = ProbeSetXRef.DataId) where ProbeSetXRef.ProbeSetFreezeId = 811; diff --git a/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py b/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py new file mode 100644 index 00000000..0f8602c9 --- /dev/null +++ b/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py @@ -0,0 +1,27 @@ +#!/usr/bin/python2 +######################################################################## +# Last Updated Apr 11, 2016 By Arthur and Zach +######################################################################## +import string +import sys +import MySQLdb +import getpass +import time +import csv +######################################################################## + +mydb = MySQLdb.connect(host='localhost', + user='username', + passwd='', + db='db_webqtl') +cursor = mydb.cursor() + +csv_data = csv.reader(file('GN711_pvalues.txt'), delimiter ="\t") +for row in csv_data: + + cursor.execute("""UPDATE ProbeSetXRef SET pValue = %s WHERE ProbeSetFreezeId = %s AND ProbeSetId = %s """, + (row)) +#close the connection to the database. +mydb.commit() +cursor.close() +print "Done" \ No newline at end of file diff --git a/scripts/maintenance/delete_genotypes.py b/scripts/maintenance/delete_genotypes.py new file mode 100755 index 00000000..fa693f0f --- /dev/null +++ b/scripts/maintenance/delete_genotypes.py @@ -0,0 +1,33 @@ +import sys +import csv + +import utilities +import datastructure +import genotypes + +def main(argv): + # config + config = utilities.get_config(argv[1]) + print "config:" + for item in config.items('config'): + print "\t%s" % (str(item)) + # var + print "variable:" + inbredsetid = config.get('config', 'inbredsetid') + print "\tinbredsetid: %s" % inbredsetid + # datafile + datafile = open(config.get('config', 'datafile'), 'r') + datafile = csv.reader(datafile, delimiter='\t', quotechar='"') + datafile.next() + delrowcount = 0 + for row in datafile: + if len(row) == 0: + continue + genoname = row[0] + delrowcount += genotypes.delete(genoname, inbredsetid) + print "deleted %d genotypes" % (delrowcount) + +if __name__ == "__main__": + print "command line arguments:\n\t%s" % sys.argv + main(sys.argv) + print "exit successfully" diff --git a/scripts/maintenance/delete_phenotypes.py b/scripts/maintenance/delete_phenotypes.py new file mode 100755 index 00000000..326c466e --- /dev/null +++ b/scripts/maintenance/delete_phenotypes.py @@ -0,0 +1,35 @@ +import sys +import csv + +import utilities +import datastructure +import phenotypes + +def main(argv): + # config + config = utilities.get_config(argv[1]) + print "config:" + for item in config.items('config'): + print "\t%s" % (str(item)) + # var + print "variable:" + inbredsetid = config.get('config', 'inbredsetid') + print "\tinbredsetid: %s" % inbredsetid + # datafile + datafile = open(config.get('config', 'datafile'), 'r') + datafile = csv.reader(datafile, delimiter='\t', quotechar='"') + delrowcount = 0 + for row in datafile: + if len(row) == 0: + continue + try: + publishxrefid = int(row[0]) + except: + continue + delrowcount += phenotypes.delete(publishxrefid=publishxrefid, inbredsetid=inbredsetid) + print "deleted %d phenotypes" % (delrowcount) + +if __name__ == "__main__": + print "command line arguments:\n\t%s" % sys.argv + main(sys.argv) + print "exit successfully" diff --git a/scripts/maintenance/load_genotypes.py b/scripts/maintenance/load_genotypes.py new file mode 100755 index 00000000..338483f4 --- /dev/null +++ b/scripts/maintenance/load_genotypes.py @@ -0,0 +1,154 @@ +import sys +import re + +import utilities +import datastructure + +def main(argv): + config = utilities.get_config(argv[1]) + print("config file:") + for item in config.items('config'): + print("\t%s" % str(item)) + parse_genofile(config, fetch_parameters(config)) + +def fetch_parameters(config): + config_dic = {} + config_dic['inbredsetid'] = config.get('config', 'inbredsetid') + config_dic["speciesid"] = datastructure.get_species(config_dic['inbredsetid'])[0] + config_dic['genofreezeid'] = datastructure.get_genofreeze_byinbredsetid(config_dic['inbredsetid'])[0] + config_dic['dataid'] = datastructure.get_nextdataid_genotype() + config_dic['genofile'] = config.get('config', 'genofile') + print("config dictionary:") + for k, v in config_dic.items(): + print("\t%s: %s" % (k, v)) + return config_dic + +def parse_genofile(config, config_dic): + genofile = open(config_dic['genofile'], 'r') + meta_dic = {} + for line in genofile: + line = line.strip() + if len(line) == 0: + continue + if line.startswith('#'): + continue + if line.startswith('@'): + line = line.strip('@') + items = line.split(';') + for item in items: + kv = re.split(':|=', item) + meta_dic[kv[0].strip()] = kv[1].strip() + continue + if line.lower().startswith("chr"): + # + print("geno file meta dictionary:") + for k, v in meta_dic.items(): + print("\t%s: %s" % (k, v)) + # + print("geno file head:\n\t%s" % line) + strainnames = line.split()[4:] + config_dic['strains'] = datastructure.get_strains_bynames(inbredsetid=config_dic['inbredsetid'], strainnames=strainnames, updatestrainxref="yes") + continue + # geno file line, marker + marker_dic = parse_marker(line) + marker_dic['genoid'] = check_or_insert_geno(config_dic, marker_dic) + if check_genoxref(config_dic, marker_dic): + continue + insert_genodata(config, config_dic, marker_dic) + insert_genoxref(config_dic, marker_dic) + config_dic['dataid'] += 1 + genofile.close() + +def parse_marker(line): + marker_dic = {} + cells = line.split() + marker_dic['chromosome'] = cells[0] + marker_dic['locus'] = cells[1] + marker_dic['cm'] = cells[2] + marker_dic['mb'] = cells[3] + marker_dic['values'] = cells[4:] + return marker_dic + +def check_or_insert_geno(config_dic, marker_dic): + cursor, con = utilities.get_cursor() + sql = """ + SELECT Geno.`Id` + FROM Geno + WHERE Geno.`SpeciesId`=%s + AND Geno.`Name` like %s + """ + cursor.execute(sql, (config_dic["speciesid"], marker_dic['locus'])) + result = cursor.fetchone() + if result: + genoid = result[0] + print("get geno record: %d" % genoid) + else: + sql = """ + INSERT INTO Geno + SET + Geno.`SpeciesId`=%s, + Geno.`Name`=%s, + Geno.`Marker_Name`=%s, + Geno.`Chr`=%s, + Geno.`Mb`=%s + """ + cursor.execute(sql, (config_dic['speciesid'], marker_dic['locus'], marker_dic['locus'], marker_dic['chromosome'], marker_dic['mb'])) + rowcount = cursor.rowcount + genoid = con.insert_id() + print("INSERT INTO Geno: %d record: %d" % (rowcount, genoid)) + return genoid + +def check_genoxref(config_dic, marker_dic): + cursor, con = utilities.get_cursor() + sql = """ + select GenoXRef.* + from GenoXRef + where GenoXRef.`GenoFreezeId`=%s + AND GenoXRef.`GenoId`=%s + """ + cursor.execute(sql, (config_dic['genofreezeid'], marker_dic['genoid'])) + rowcount = cursor.rowcount + return rowcount + +def insert_genodata(config, config_dic, marker_dic): + cursor, con = utilities.get_cursor() + for index, strain in enumerate(config_dic['strains']): + strainid = strain[0] + value = utilities.to_db_string(marker_dic['values'][index], None) + if not value: + continue + value = config.get('config', "genovalue_" + value) + try: + number = int(value) + except: + continue + if not number in [-1, 0, 1]: + continue + sql = """ + INSERT INTO GenoData + SET + GenoData.`Id`=%s, + GenoData.`StrainId`=%s, + GenoData.`value`=%s + """ + cursor.execute(sql, (config_dic['dataid'], strainid, number)) + +def insert_genoxref(config_dic, marker_dic): + cursor, con = utilities.get_cursor() + sql = """ + INSERT INTO GenoXRef + SET + GenoXRef.`GenoFreezeId`=%s, + GenoXRef.`GenoId`=%s, + GenoXRef.`DataId`=%s, + GenoXRef.`cM`=%s, + GenoXRef.`Used_for_mapping`=%s + """ + cursor.execute(sql, (config_dic['genofreezeid'], marker_dic['genoid'], config_dic['dataid'], marker_dic['cm'], 'N')) + rowcount = cursor.rowcount + print("INSERT INTO GenoXRef: %d record" % (rowcount)) + +if __name__ == "__main__": + print("command line arguments:\n\t%s" % sys.argv) + main(sys.argv) + print("exit successfully") diff --git a/scripts/maintenance/load_phenotypes.py b/scripts/maintenance/load_phenotypes.py new file mode 100755 index 00000000..c3c6570b --- /dev/null +++ b/scripts/maintenance/load_phenotypes.py @@ -0,0 +1,171 @@ +import sys +import csv + +import utilities +import datastructure + +def main(argv): + # config + config = utilities.get_config(argv[1]) + print "config:" + for item in config.items('config'): + print "\t%s" % (str(item)) + # var + inbredsetid = config.get('config', 'inbredsetid') + print "inbredsetid: %s" % inbredsetid + species = datastructure.get_species(inbredsetid) + speciesid = species[0] + print "speciesid: %s" % speciesid + dataid = datastructure.get_nextdataid_phenotype() + print "next data id: %s" % dataid + cursor, con = utilities.get_cursor() + # datafile + datafile = open(config.get('config', 'datafile'), 'r') + phenotypedata = csv.reader(datafile, delimiter='\t', quotechar='"') + phenotypedata_head = phenotypedata.next() + print "phenotypedata head:\n\t%s" % phenotypedata_head + strainnames = phenotypedata_head[1:] + strains = datastructure.get_strains_bynames(inbredsetid=inbredsetid, strainnames=strainnames, updatestrainxref="yes") + # metafile + metafile = open(config.get('config', 'metafile'), 'r') + phenotypemeta = csv.reader(metafile, delimiter='\t', quotechar='"') + phenotypemeta_head = phenotypemeta.next() + print "phenotypemeta head:\n\t%s" % phenotypemeta_head + print + # load + for metarow in phenotypemeta: + # + datarow_value = phenotypedata.next() + datarow_se = phenotypedata.next() + datarow_n = phenotypedata.next() + # Phenotype + sql = """ + INSERT INTO Phenotype + SET + Phenotype.`Pre_publication_description`=%s, + Phenotype.`Post_publication_description`=%s, + Phenotype.`Original_description`=%s, + Phenotype.`Pre_publication_abbreviation`=%s, + Phenotype.`Post_publication_abbreviation`=%s, + Phenotype.`Lab_code`=%s, + Phenotype.`Submitter`=%s, + Phenotype.`Owner`=%s, + Phenotype.`Authorized_Users`=%s, + Phenotype.`Units`=%s + """ + cursor.execute(sql, ( + utilities.to_db_string(metarow[1], None), + utilities.to_db_string(metarow[2], None), + utilities.to_db_string(metarow[3], None), + utilities.to_db_string(metarow[4], None), + utilities.to_db_string(metarow[5], None), + utilities.to_db_string(metarow[6], None), + utilities.to_db_string(metarow[7], None), + utilities.to_db_string(metarow[8], None), + utilities.to_db_string(metarow[9], ""), + utilities.to_db_string(metarow[18], ""), + )) + rowcount = cursor.rowcount + phenotypeid = con.insert_id() + print "INSERT INTO Phenotype: %d record: %d" % (rowcount, phenotypeid) + # Publication + publicationid = None # reset + pubmed_id = utilities.to_db_string(metarow[0], None) + if pubmed_id: + sql = """ + SELECT Publication.`Id` + FROM Publication + WHERE Publication.`PubMed_ID`=%s + """ + cursor.execute(sql, (pubmed_id)) + re = cursor.fetchone() + if re: + publicationid = re[0] + print "get Publication record: %d" % publicationid + if not publicationid: + sql = """ + INSERT INTO Publication + SET + Publication.`PubMed_ID`=%s, + Publication.`Abstract`=%s, + Publication.`Authors`=%s, + Publication.`Title`=%s, + Publication.`Journal`=%s, + Publication.`Volume`=%s, + Publication.`Pages`=%s, + Publication.`Month`=%s, + Publication.`Year`=%s + """ + cursor.execute(sql, ( + utilities.to_db_string(metarow[0], None), + utilities.to_db_string(metarow[12], None), + utilities.to_db_string(metarow[10], ""), + utilities.to_db_string(metarow[11], None), + utilities.to_db_string(metarow[13], None), + utilities.to_db_string(metarow[14], None), + utilities.to_db_string(metarow[15], None), + utilities.to_db_string(metarow[16], None), + utilities.to_db_string(metarow[17], ""), + )) + rowcount = cursor.rowcount + publicationid = con.insert_id() + print "INSERT INTO Publication: %d record: %d" % (rowcount, publicationid) + # data + for index, strain in enumerate(strains): + # + strainid = strain[0] + value = utilities.to_db_float(datarow_value[index+1], None) + se = utilities.to_db_float(datarow_se[index+1], None) + n = utilities.to_db_int(datarow_n[index+1], None) + # + if value is not None: + sql = """ + INSERT INTO PublishData + SET + PublishData.`Id`=%s, + PublishData.`StrainId`=%s, + PublishData.`value`=%s + """ + cursor.execute(sql, (dataid, strainid, value)) + if se is not None: + sql = """ + INSERT INTO PublishSE + SET + PublishSE.`DataId`=%s, + PublishSE.`StrainId`=%s, + PublishSE.`error`=%s + """ + cursor.execute(sql, (dataid, strainid, se)) + if n is not None: + sql = """ + INSERT INTO NStrain + SET + NStrain.`DataId`=%s, + NStrain.`StrainId`=%s, + NStrain.`count`=%s + """ + cursor.execute(sql, (dataid, strainid, n)) + # PublishXRef + sql = """ + INSERT INTO PublishXRef + SET + PublishXRef.`InbredSetId`=%s, + PublishXRef.`PhenotypeId`=%s, + PublishXRef.`PublicationId`=%s, + PublishXRef.`DataId`=%s, + PublishXRef.`comments`=%s + """ + cursor.execute(sql, (inbredsetid, phenotypeid, publicationid, dataid, "")) + rowcount = cursor.rowcount + publishxrefid = con.insert_id() + print "INSERT INTO PublishXRef: %d record: %d" % (rowcount, publishxrefid) + # for loop next + dataid += 1 + print + # release + con.close() + +if __name__ == "__main__": + print "command line arguments:\n\t%s" % sys.argv + main(sys.argv) + print "exit successfully" diff --git a/scripts/maintenance/readProbeSetMean_v7.py b/scripts/maintenance/readProbeSetMean_v7.py new file mode 100755 index 00000000..e9c8f25c --- /dev/null +++ b/scripts/maintenance/readProbeSetMean_v7.py @@ -0,0 +1,274 @@ +#!/usr/bin/python2 +"""This script use the nearest marker to the transcript as control, increasing permutation rounds according to the p-value""" + +######################################################################## +# Last Updated Sep 27, 2011 by Xiaodong +######################################################################## +import string +import sys +import MySQLdb +import getpass +import time +#import pdb + +#pdb.set_trace() + +######################################################################## + +def translateAlias(str): + if str == "B6": + return "C57BL/6J" + elif str == "D2": + return "DBA/2J" + else: + return str + +######################################################################## +# +# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile +# +######################################################################## + +dataStart = 1 + +GeneChipId = int( raw_input("Enter GeneChipId:") ) +ProbeSetFreezeId = int( raw_input("Enter ProbeSetFreezeId:") ) +input_file_name = raw_input("Enter file name with suffix:") + +fp = open("%s" % input_file_name, 'rb') + +try: + passwd = getpass.getpass('Please enter mysql password here : ') + con = MySQLdb.Connect(db='db_webqtl',host='localhost', user='username',passwd=passwd) + + db = con.cursor() + print "You have successfully connected to mysql.\n" +except: + print "You entered incorrect password.\n" + sys.exit(0) + +time0 = time.time() + +######################################################################### +# +# Check if each line have same number of members +# generate the gene list of expression data here +# +######################################################################### +print 'Checking if each line have same number of members' + +GeneList = [] +isCont = 1 +header = fp.readline() +header = string.split(string.strip(header),'\t') +header = map(string.strip, header) +nfield = len(header) +line = fp.readline() + +kj=0 +while line: + line2 = string.split(string.strip(line),'\t') + line2 = map(string.strip, line2) + if len(line2) != nfield: + print "Error : " + line + isCont = 0 + + GeneList.append(line2[0]) + line = fp.readline() + + kj+=1 + if kj%100000 == 0: + print 'checked ',kj,' lines' + +GeneList = map(string.lower, GeneList) +GeneList.sort() + +if isCont==0: + sys.exit(0) + + +print 'used ',time.time()-time0,' seconds' +######################################################################### +# +# Check if each strain exist in database +# generate the string id list of expression data here +# +######################################################################### +print 'Checking if each strain exist in database' + +isCont = 1 +fp.seek(0) +header = fp.readline() +header = string.split(string.strip(header),'\t') +header = map(string.strip, header) +header = map(translateAlias, header) +header = header[dataStart:] +Ids = [] +for item in header: + try: + db.execute('select Id from Strain where Name = "%s"' % item) + Ids.append(db.fetchall()[0][0]) + except: + print item,'does not exist, check the if the strain name is correct' + isCont=0 + +if isCont==0: + sys.exit(0) + + +print 'used ',time.time()-time0,' seconds' +######################################################################## +# +# Check if each ProbeSet exist in database +# +######################################################################## +print 'Check if each ProbeSet exist in database' + +##---- find PID is name or target ----## +line = fp.readline() +line = fp.readline() +line2 = string.split(string.strip(line),'\t') +line2 = map(string.strip, line2) +PId = line2[0] + +db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' % (PId, GeneChipId) ) +results = db.fetchall() +IdStr = 'TargetId' +if len(results)>0: + IdStr = 'Name' + + +##---- get Name/TargetId list from database ----## +db.execute('select distinct(%s) from ProbeSet where ChipId=%d order by %s' % (IdStr, GeneChipId, IdStr)) +results = db.fetchall() + +Names = [] +for item in results: + Names.append(item[0]) + +print Names + +Names = map(string.lower, Names) + +Names.sort() # -- Fixed the lower case problem of ProbeSets affx-mur_b2_at doesn't exist --# + + +##---- compare genelist with names ----## +x=y=0 +x1=-1 +GeneList2=[] +while xNames[y]: + y += 1 + + if x%100000==0: + print 'check Name, checked %d lines'%x + +while x0: + cmd = ','.join(values1) + cmd = 'insert into ProbeSetData values %s' % cmd + db.execute(cmd) + + cmd = ','.join(values2) + cmd = 'insert into ProbeSetXRef(ProbeSetFreezeId, ProbeSetId, DataId) values %s' % cmd + db.execute(cmd) + +con.close() diff --git a/scripts/maintenance/readProbeSetSE_v7.py b/scripts/maintenance/readProbeSetSE_v7.py new file mode 100755 index 00000000..fd6f0bb8 --- /dev/null +++ b/scripts/maintenance/readProbeSetSE_v7.py @@ -0,0 +1,254 @@ +#!/usr/bin/python2 +"""This script use the nearest marker to the transcript as control, increasing permutation rounds according to the p-value""" +######################################################################## +# Last Updated Sep 27, 2011 by Xiaodong +# This version fix the bug that incorrectly exclude the first 2 probesetIDs +######################################################################## + +import string +import sys +import MySQLdb +import getpass +import time + + +def translateAlias(str): + if str == "B6": + return "C57BL/6J" + elif str == "D2": + return "DBA/2J" + else: + return str + +######################################################################## +# +# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile +# +######################################################################## + +dataStart = 1 + +GeneChipId = int( raw_input("Enter GeneChipId:") ) +ProbeSetFreezeId = int( raw_input("Enter ProbeSetFreezeId:") ) +input_file_name = raw_input("Enter file name with suffix:") + +fp = open("%s" % input_file_name, 'rb') + + +try: + passwd = getpass.getpass('Please enter mysql password here : ') + con = MySQLdb.Connect(db='db_webqtl',host='localhost', user='username',passwd=passwd) + + db = con.cursor() + print "You have successfully connected to mysql.\n" +except: + print "You entered incorrect password.\n" + sys.exit(0) + +time0 = time.time() +######################################################################## +# +# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile +# +######################################################################## + +#GeneChipId = 4 +#dataStart = 1 +#ProbeSetFreezeId = 359 #JAX Liver 6C Affy M430 2.0 (Jul11) MDP +#fp = open("GSE10493_AllSamples_6C_Z_AvgSE.txt", 'rb') + + +######################################################################### +# +# Check if each line have same number of members +# generate the gene list of expression data here +# +######################################################################### +print 'Checking if each line have same number of members' + +GeneList = [] +isCont = 1 +header = fp.readline() +header = string.split(string.strip(header),'\t') +header = map(string.strip, header) +nfield = len(header) +line = fp.readline() + +kj=0 +while line: + line2 = string.split(string.strip(line),'\t') + line2 = map(string.strip, line2) + if len(line2) != nfield: + print "Error : " + line + isCont = 0 + + GeneList.append(line2[0]) + line = fp.readline() + + kj+=1 + if kj%100000 == 0: + print 'checked ',kj,' lines' + +GeneList = map(string.lower, GeneList) +GeneList.sort() + +if isCont==0: + sys.exit(0) + + +print 'used ',time.time()-time0,' seconds' +######################################################################### +# +# Check if each strain exist in database +# generate the string id list of expression data here +# +######################################################################### +print 'Checking if each strain exist in database' + +isCont = 1 +fp.seek(0) +header = fp.readline() +header = string.split(string.strip(header),'\t') +header = map(string.strip, header) +header = map(translateAlias, header) +header = header[dataStart:] +Ids = [] +for item in header: + try: + db.execute('select Id from Strain where Name = "%s"' % item) + Ids.append(db.fetchall()[0][0]) + except: + print item,'does not exist, check the if the strain name is correct' + isCont=0 + +if isCont==0: + sys.exit(0) + + +print 'used ',time.time()-time0,' seconds' +######################################################################## +# +# Check if each ProbeSet exist in database +# +######################################################################## +print 'Check if each ProbeSet exist in database' + +##---- find PID is name or target ----## +line = fp.readline() +line = fp.readline() +line2 = string.split(string.strip(line),'\t') +line2 = map(string.strip, line2) +PId = line2[0] + +db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' % (PId, GeneChipId)) +results = db.fetchall() +IdStr = 'TargetId' +if len(results)>0: + IdStr = 'Name' + + +##---- get Name/TargetId list from database ----## +db.execute('select distinct(%s) from ProbeSet where ChipId=%d order by %s' % (IdStr, GeneChipId, IdStr)) +results = db.fetchall() + +Names = [] +for item in results: + Names.append(item[0]) +Names = map(string.lower, Names) +Names.sort() # -- Fixed the lower case problem of ProbeSets affx-mur_b2_at doesn't exist --# + +##---- compare genelist with names ----## +x=y=0 +x1=-1 +GeneList2=[] +while xNames[y]: + y += 1 + + if x%100000==0: + print 'check Name, checked %d lines'%x + +while x0: + DataValues = ','.join(DataValues) + cmd = 'insert ProbeSetSE values %s' % DataValues + db.execute(cmd) + +con.close() + + -- cgit v1.2.3 From 2f4a16b5974e32cf1f1d6f5af8bbc8d39840e24b Mon Sep 17 00:00:00 2001 From: zsloan Date: Wed, 4 Apr 2018 16:01:00 +0000 Subject: Switched to plotly probability plot Removed a variety of scripts that weren't being used on the trait page --- .../new/javascript/plotly_probability_plot.js | 246 +++++++++++++++++++++ wqflask/wqflask/templates/show_trait.html | 15 +- .../wqflask/templates/show_trait_statistics.html | 4 +- 3 files changed, 248 insertions(+), 17 deletions(-) create mode 100644 wqflask/wqflask/static/new/javascript/plotly_probability_plot.js diff --git a/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js b/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js new file mode 100644 index 00000000..49fd53b1 --- /dev/null +++ b/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js @@ -0,0 +1,246 @@ +// Generated by CoffeeScript 1.9.2 +(function() { + var get_z_scores, redraw_prob_plot, root; + + root = typeof exports !== "undefined" && exports !== null ? exports : this; + + get_z_scores = function(n) { + var i, j, osm_uniform, ref, x; + osm_uniform = new Array(n); + osm_uniform[n - 1] = Math.pow(0.5, 1.0 / n); + osm_uniform[0] = 1 - osm_uniform[n - 1]; + for (i = j = 1, ref = n - 2; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) { + osm_uniform[i] = (i + 1 - 0.3175) / (n + 0.365); + } + return (function() { + var k, len, results; + results = []; + for (k = 0, len = osm_uniform.length; k < len; k++) { + x = osm_uniform[k]; + results.push(jStat.normal.inv(x, 0, 1)); + } + return results; + })(); + }; + + redraw_prob_plot = function(samples, sample_group) { + var container, h, margin, totalh, totalw, w; + h = 600; + w = 600; + margin = { + left: 60, + top: 40, + right: 40, + bottom: 40, + inner: 5 + }; + totalh = h + margin.top + margin.bottom; + totalw = w + margin.left + margin.right; + container = $("#prob_plot_container"); + container.width(totalw); + container.height(totalh); + var W, all_samples, chart, data, intercept, make_data, names, pvalue, pvalue_str, slope, sorted_names, sorted_values, sw_result, test_str, x, z_scores; + all_samples = samples[sample_group]; + names = (function() { + var j, len, ref, results; + ref = _.keys(all_samples); + results = []; + for (j = 0, len = ref.length; j < len; j++) { + x = ref[j]; + if (all_samples[x] !== null) { + results.push(x); + } + } + return results; + })(); + sorted_names = names.sort(function(x, y) { + return all_samples[x].value - all_samples[y].value; + }); + max_decimals = 0 + sorted_values = (function() { + var j, len, results; + results = []; + for (j = 0, len = sorted_names.length; j < len; j++) { + x = sorted_names[j]; + results.push(all_samples[x].value); + if (all_samples[x].value.countDecimals() > max_decimals) { + max_decimals = all_samples[x].value.countDecimals()-1 + } + } + return results; + })(); + //ZS: 0.1 indicates buffer, increase to increase buffer + y_domain = [sorted_values[0] - (sorted_values.slice(-1)[0] - sorted_values[0])*0.1, sorted_values.slice(-1)[0] + (sorted_values.slice(-1)[0] - sorted_values[0])*0.1] + sw_result = ShapiroWilkW(sorted_values); + W = sw_result.w.toFixed(3); + pvalue = sw_result.p.toFixed(3); + pvalue_str = pvalue > 0.05 ? pvalue.toString() : "" + pvalue + ""; + test_str = "Shapiro-Wilk test statistic is " + W + " (p = " + pvalue_str + ")"; + z_scores = get_z_scores(sorted_values.length); + //ZS: 0.1 indicates buffer, increase to increase buffer + x_domain = [z_scores[0] - (z_scores.slice(-1)[0] - z_scores[0])*0.1, z_scores.slice(-1)[0] + (z_scores.slice(-1)[0] - z_scores[0])*0.1] + slope = jStat.stdev(sorted_values); + intercept = jStat.mean(sorted_values); + make_data = function(group_name) { + var sample, value, z_score; + return { + key: js_data.sample_group_types[group_name], + slope: slope, + intercept: intercept, + values: (function() { + var j, len, ref, ref1, results; + ref = _.zip(get_z_scores(sorted_values.length), sorted_values, sorted_names); + results = []; + for (j = 0, len = ref.length; j < len; j++) { + ref1 = ref[j], z_score = ref1[0], value = ref1[1], sample = ref1[2]; + if (sample in samples[group_name]) { + results.push({ + x: z_score, + y: value, + name: sample + }); + } + } + return results; + })() + }; + }; + data = [make_data('samples_primary'), make_data('samples_other'), make_data('samples_all')]; + console.log("THE DATA IS:", data); + x_values = {} + y_values = {} + point_names = {} + for (i = 0; i < 3; i++){ + these_x_values = [] + these_y_values = [] + these_names = [] + for (j = 0; j < data[i].values.length; j++){ + these_x_values.push(data[i].values[j].x) + these_y_values.push(data[i].values[j].y) + these_names.push(data[i].values[j].name) + } + if (i == 0){ + x_values['samples_primary'] = these_x_values + y_values['samples_primary'] = these_y_values + point_names['samples_primary'] = these_names + } else if (i == 1) { + x_values['samples_other'] = these_x_values + y_values['samples_other'] = these_y_values + point_names['samples_other'] = these_names + } else { + x_values['samples_all'] = these_x_values + y_values['samples_all'] = these_y_values + point_names['samples_all'] = these_names + } + } + + intercept_line = {} + + if (sample_group == "samples_primary"){ + first_x = Math.floor(x_values['samples_primary'][0]) + first_x = first_x - first_x*0.1 + last_x = Math.ceil(x_values['samples_primary'][x_values['samples_primary'].length - 1]) + last_x = last_x + last_x*0.1 + first_value = data[0].intercept + data[0].slope * first_x + last_value = data[0].intercept + data[0].slope * last_x + intercept_line['samples_primary'] = [[first_x, last_x], [first_value, last_value]] + } else if (sample_group == "samples_other") { + first_x = Math.floor(x_values['samples_other'][0]) + first_x = first_x - first_x*0.1 + last_x = Math.ceil(x_values['samples_other'][x_values['samples_other'].length - 1]) + last_x = last_x + last_x*0.1 + first_value = data[1].intercept + data[1].slope * first_x + last_value = data[1].intercept + data[1].slope * last_x + intercept_line['samples_other'] = [[first_x, last_x], [first_value, last_value]] + } else { + first_x = Math.floor(x_values['samples_all'][0]) + first_x = first_x - first_x*0.1 + last_x = Math.ceil(x_values['samples_all'][x_values['samples_all'].length - 1]) + first_value = data[2].intercept + data[2].slope * first_x + last_x = last_x + last_x*0.1 + last_value = data[2].intercept + data[2].slope * last_x + intercept_line['samples_all'] = [[first_x, last_x], [first_value, last_value]] + } + + var layout = { + margin: { + l: 50, + r: 30, + t: 30, + b: 80 + }, + xaxis: { + range: [first_x, last_x], + zeroline: false, + visible: true, + linecolor: 'black', + linewidth: 1, + }, + yaxis: { + zeroline: false, + visible: true, + linecolor: 'black', + linewidth: 1, + } + } + + var primary_trace = { + x: x_values['samples_primary'], + y: y_values['samples_primary'], + mode: 'markers', + type: 'scatter', + name: js_data.sample_group_types['samples_primary'], + text: point_names['samples_primary'] + } + if ("samples_other" in js_data.sample_group_types) { + var other_trace = { + x: x_values['samples_other'], + y: y_values['samples_other'], + mode: 'markers', + type: 'scatter', + name: js_data.sample_group_types['samples_other'], + text: point_names['samples_other'] + } + } + + if (sample_group == "samples_primary"){ + var primary_intercept_trace = { + x: intercept_line['samples_primary'][0], + y: intercept_line['samples_primary'][1], + mode: 'lines', + type: 'scatter', + name: 'Intercept', + } + } else if (sample_group == "samples_other"){ + var other_intercept_trace = { + x: intercept_line['samples_other'][0], + y: intercept_line['samples_other'][1], + mode: 'lines', + type: 'scatter', + name: 'Intercept', + } + } else { + var all_intercept_trace = { + x: intercept_line['samples_all'][0], + y: intercept_line['samples_all'][1], + mode: 'lines', + type: 'scatter', + name: 'Intercept', + } + } + + if (sample_group == "samples_primary"){ + var data = [primary_trace, primary_intercept_trace] + } else if (sample_group == "samples_other"){ + var data = [other_trace, other_intercept_trace] + } else { + var data = [primary_trace, other_trace, all_intercept_trace] + } + + console.log("TRACE:", data) + Plotly.newPlot('prob_plot_div', data, layout) + }; + + root.redraw_prob_plot_impl = redraw_prob_plot; + +}).call(this); diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html index dd4325e7..5d128b4a 100644 --- a/wqflask/wqflask/templates/show_trait.html +++ b/wqflask/wqflask/templates/show_trait.html @@ -133,34 +133,21 @@ - - - - - - - - + - - - - - -