/** * Get the list of parameters for this form. * @return array List of parameters that this form requires. */ public static function get_parameters() { $r = array_merge(iform_report_get_report_parameters(), iform_map_get_map_parameters(), array(array('name' => 'indicia_species_layer_feature_type', 'caption' => 'Feature type for Indicia species layer', 'description' => 'Set to the name of a feature type on GeoServer that will be loaded to display the Indicia species data for the selected record. ' . 'Leave empty for no layer. Normally this should be set to a feature type that exposes the cache_occurrences table.', 'type' => 'text_input', 'required' => true, 'default' => 'indicia:cache_occurrences', 'group' => 'Other Map Settings'), array('name' => 'indicia_species_layer_filter_field', 'caption' => 'Field to filter on', 'description' => 'Set to the name of a field exposed by the feature type which contains the external key defined for the species ' . 'and can therefore be used to filter the layer. ', 'type' => 'text_input', 'required' => true, 'default' => 'taxa_taxon_list_external_key', 'group' => 'Other Map Settings'), array('name' => 'indicia_species_layer_slds', 'caption' => 'SLD files from GeoServer for Indicia species layer', 'description' => 'Set to the names of SLD files available on the GeoServer for the rendering of the Indicia species layer, or leave blank for default. ' . 'Provide one per species layer you are going to allow on the map. Layer styles will be cycled through.', 'type' => 'textarea', 'required' => false, 'default' => "dist_point_red\ndist_point_blue", 'group' => 'Other Map Settings'))); foreach ($r as &$param) { if ($param['name'] === 'report_name') { $param['default'] = 'library/taxa/occurrence_counts_summary_by_external_key'; } elseif ($param['name'] === 'indicia_species_layer_filter_field') { $param['default'] = 'taxa_taxon_list_external_key'; } elseif ($param['name'] === 'param_presets') { $param['default'] = "date_from=\ndate_to=\nsurvey_id=\nquality=C\nlocation_id={profile_location}\ntaxon_groups={profile_taxon_groups}\ncurrentUser={profile_indicia_user_id}"; } } return $r; }
/** * Get the list of parameters for this form. * @return array List of parameters that this form requires. * @todo: Implement this method */ public static function get_parameters() { return array_merge(iform_report_get_report_parameters(), array(array('name' => 'header', 'caption' => 'Header', 'description' => 'HTML to insert into the header of the report output.', 'type' => 'textarea', 'required' => false, 'group' => 'Output templates'), array('name' => 'footer', 'caption' => 'Footer', 'description' => 'HTML to insert into the footer of the report output.', 'type' => 'textarea', 'required' => false, 'group' => 'Output templates'), array('name' => 'bands', 'caption' => 'Report Bands', 'description' => 'A list of bands which are output once per report row in the order provided. ' . 'Bands may also be configured to output as a header band, only when the value of a certain field changes between rows. ' . 'For example if a report is sorted by site name, then a band can be emmitted only when the site name value changes and can display ' . 'the new site name as a header.', 'group' => 'Output templates', 'required' => false, 'type' => 'jsonwidget', 'schema' => '{ "type":"seq", "title":"Bands", "sequence": [ { "type":"map", "title":"Band", "mapping": { "content":{"type":"str","desc":"Contains an HTML template for the output of the band. The ' . 'template can contain replacements for each field value in the row, e.g. the ' . 'replacement {survey} is replaced with the value of the field called survey. The actual replacements ' . 'available depends on the selected report\'s output fields."}, "triggerFields":{"type":"seq","sequence":[{"type":"str"}]} } } ] }'))); }
/** * Get the list of parameters for this form. * @return array List of parameters that this form requires. */ public static function get_parameters() { return array_merge(iform_report_get_report_parameters(), array(array('name' => 'columns_config', 'caption' => 'Columns Configuration', 'description' => 'Define a list of columns with various configuration options when you want to override the ' . 'default output of the report.', 'type' => 'jsonwidget', 'schema' => '{ "type":"seq", "title":"Columns List", "sequence": [ { "type":"map", "title":"Column", "mapping": { "fieldname": {"type":"str","desc":"Name of the field to output in this column. Does not need to be specified when using the template option."}, "display": {"type":"str","desc":"Caption of the column, which defaults to the fieldname if not specified."}, "actions": { "type":"seq", "title":"Actions List", "sequence": [{ "type":"map", "title":"Actions", "desc":"List of actions to make available for each row in the grid.", "mapping": { "caption": {"type":"str","desc":"Display caption for the action\'s link."}, "visibility_field": {"type":"str","desc":"Optional name of a field in the data which contains true or false to define the visibility of this action."}, "url": {"type":"str","desc":"A url that the action link will point to, unless overridden by JavaScript. The url can contain tokens which ' . 'will be subsituted for field values, e.g. for http://www.example.com/image/{id} the {id} is replaced with a field called id in the current row. ' . 'Can also use the subsitution {currentUrl} to link back to the current page, {rootFolder} to represent the folder on the server that the current PHP page is running from, and ' . '{imageFolder} for the image upload folder"}, "urlParams": { "type":"map", "subtype":"str", "desc":"List of parameters to append to the URL link, with field value replacements such as {id} begin replaced ' . 'by the value of the id field for the current row." }, "class": {"type":"str","desc":"CSS class to attach to the action link."}, "javascript": {"type":"str","desc":"JavaScript that will be run when the link is clicked. Can contain field value substitutions ' . 'such as {id} which is replaced by the value of the id field for the current row. Because the javascript may pass the field values as parameters to functions, ' . 'there are escaped versions of each of the replacements available for the javascript action type. Add -escape-quote or ' . '-escape-dblquote to the fieldname. For example this would be valid in the action javascript: foo(\\"{bar-escape-dblquote}\\"); ' . 'even if the field value contains a double quote which would have broken the syntax."} } }] }, "visible": {"type":"bool","desc":"Should this column be shown? Hidden columns can still be used in templates or actions."}, "template": {"type":"txt","desc":"Allows you to create columns that contain dynamic content using a template, rather than just the output ' . 'of a field. The template text can contain fieldnames in braces, which will be replaced by the respective field values. ' . 'Note that template columns cannot be sorted by clicking grid headers." } } } ] }', 'required' => false, 'group' => 'Report Settings'), array('name' => 'gallery_col_count', 'caption' => 'Gallery Column Count', 'description' => 'If set to a value greater than one, then each grid row will contain more than one record of data from the database, allowing ' . ' a gallery style view to be built.', 'type' => 'int', 'required' => false, 'default' => 1, 'group' => 'Report Settings'), array('name' => 'items_per_page', 'caption' => 'Items per page', 'description' => 'Maximum number of rows shown on each page of the table', 'type' => 'int', 'default' => 20, 'required' => true, 'group' => 'Report Settings'), array('name' => 'download_link', 'caption' => 'Download link', 'description' => 'Should a link be made available to download the report content as CSV?', 'type' => 'checkbox', 'default' => 1, 'required' => false, 'group' => 'Report Settings'), array('name' => 'footer', 'caption' => 'Footer', 'description' => 'Additional HTML to include in the report footer area.', 'type' => 'textarea', 'required' => false, 'group' => 'Report Settings'))); }
/** * Get the list of parameters for this form. * @return array List of parameters that this form requires. */ public static function get_parameters() { return array_merge(iform_report_get_report_parameters(), array(array('name' => 'columns_config', 'caption' => 'Columns Configuration', 'description' => 'Define a list of columns with various configuration options when you want to override the ' . 'default output of the report.', 'type' => 'jsonwidget', 'schema' => '{ "type":"seq", "title":"Columns List", "sequence": [ { "type":"map", "title":"Column", "mapping": { "fieldname": {"type":"str","desc":"Name of the field to output in this column. Does not need to be specified when using the template option."}, "display": {"type":"str","desc":"Caption of the column, which defaults to the fieldname if not specified."}, "actions": { "type":"seq", "title":"Actions List", "sequence": [{ "type":"map", "title":"Actions", "desc":"List of actions to make available for each row in the grid.", "mapping": { "caption": {"type":"str","desc":"Display caption for the action\'s link."}, "img": {"type":"str","desc":"Set img to the path to an image to use an image for the action instead of a text caption - the caption ' . 'then becomes the image\'s title. The image path can contain {rootFolder} to be replaced by the root folder of the site, in this ' . 'case it excludes the path parameter used in Drupal when dirty URLs are used (since this is a direct link to a URL)."}, "visibility_field": {"type":"str","desc":"Optional name of a field in the data which contains true or false to define the visibility of this action."}, "url": {"type":"str","desc":"A url that the action link will point to, unless overridden by JavaScript. The url can contain tokens which ' . 'will be subsituted for field values, e.g. for http://www.example.com/image/{id} the {id} is replaced with a field called id in the current row. ' . 'Can also use the subsitution {currentUrl} to link back to the current page, {rootFolder} to represent the folder on the server that the current PHP page is running from, and ' . '{imageFolder} for the image upload folder"}, "urlParams": { "type":"map", "subtype":"str", "desc":"List of parameters to append to the URL link, with field value replacements such as {id} begin replaced ' . 'by the value of the id field for the current row." }, "class": {"type":"str","desc":"CSS class to attach to the action link."}, "javascript": {"type":"str","desc":"JavaScript that will be run when the link is clicked. Can contain field value substitutions ' . 'such as {id} which is replaced by the value of the id field for the current row. Because the javascript may pass the field values as parameters to functions, ' . 'there are escaped versions of each of the replacements available for the javascript action type. Add -escape-quote or ' . '-escape-dblquote to the fieldname. For example this would be valid in the action javascript: foo(\\"{bar-escape-dblquote}\\"); ' . 'even if the field value contains a double quote which would have broken the syntax."} } }] }, "visible": {"type":"bool","desc":"Should this column be shown? Hidden columns can still be used in templates or actions."}, "template": {"type":"txt","desc":"Allows you to create columns that contain dynamic content using a template, rather than just the output ' . 'of a field. The template text can contain fieldnames in braces, which will be replaced by the respective field values. ' . 'Note that template columns cannot be sorted by clicking grid headers." }, "json": {"type":"bool","desc":"Set to true if the column contains a json string object with properties that can be decoded to give strings that ' . 'can be used as replacements in a template."}, "update": { "type":"map", "title":"Update Specification", "desc":"Defines the configuration to allow this field to update the database via AJAX. This assumes assume that we have access through iform_ajaxproxy.", "mapping": { "permission": {"type":"str","desc":"The CMS permission that the user must have in order for the field to be editable. If left blank then all users may update it."}, "method": {"type":"str","desc":"Ajax proxy method, e.g. loc"}, "tablename": {"type":"str","desc":"Submission table name: used to create the form field names from which the submission is built; e.g. location"}, "fieldname": {"type":"str","desc":"Field name for this field in submission; e.g. code"}, "website_id": {"type":"str","desc":"website_id"}, "class": {"type":"str","desc":"Class name to apply to input control."}, "parameters": { "type":"map", "subtype":"str", "desc":"List of parameters to copy from the report to the submission; with field value replacements such as {id} begin replaced ' . 'by the value of the id field for the current row." } } } } } ] }', 'required' => false, 'group' => 'Report Settings'), array('name' => 'gallery_col_count', 'caption' => 'Gallery Column Count', 'description' => 'If set to a value greater than one, then each grid row will contain more than one record of data from the database, allowing ' . ' a gallery style view to be built.', 'type' => 'int', 'required' => false, 'default' => 1, 'group' => 'Report Settings'), array('name' => 'download_link', 'caption' => 'Download link', 'description' => 'Should a link be made available to download the report content as CSV?', 'type' => 'checkbox', 'default' => 1, 'required' => false, 'group' => 'Report Settings'), array('name' => 'footer', 'caption' => 'Footer', 'description' => 'Additional HTML to include in the report footer area. If using this to create internal links, the replacement {rootFolder} can be used to give the path to the root of the site.', 'type' => 'textarea', 'required' => false, 'group' => 'Report Settings'))); }
/** * Get the list of parameters for this form. * @return array List of parameters that this form requires. */ public static function get_parameters() { return array_merge(iform_report_get_report_parameters(), iform_map_get_map_parameters(), array(array('name' => 'layer_picker', 'caption' => 'Include Layer Picker', 'description' => 'Choose whether to include a layer picker and where to include it. Use the ' . 'CSS id map-layer-picker for styling. Note that including the layer picker automatically removes the ' . 'layerSwitcher control from the map.', 'type' => 'select', 'required' => true, 'options' => array('none' => 'Exclude the layer picker', 'before' => 'Include the layer picker before the map.', 'after' => 'Include the layer picker after the map.'), 'default' => 'none', 'group' => 'Report Map Settings'), array('name' => 'legend', 'caption' => 'Include Legend', 'description' => 'Choose whether to include a legend and where to include it. Use the ' . 'CSS id map-legend for styling.', 'type' => 'select', 'required' => true, 'options' => array('none' => 'Exclude the legend', 'before' => 'Include the legend before the map.', 'after' => 'Include the legend after the map.'), 'default' => 'after', 'group' => 'Report Map Settings'), array('name' => 'map_toolbar_pos', 'caption' => 'Map Toolbar Position', 'description' => 'Specify the position of the map toolbar. Either use \'map\' to place it in the corner of the map, ' . '\\top\' to place it at the top, \'bottom\' to place it at the bottom, or provide the CSS ID of a div element on the page that the ' . 'toolbar should be added to.', 'type' => 'text_input', 'required' => true, 'default' => 'top', 'group' => 'Report Map Settings'), array('name' => 'click_on_map_mode', 'caption' => 'Click to query map', 'description' => 'Choose the behaviour you want when clicking on distribution points on the map. The output can display as a popup, ' . 'or can be loaded into the div specified in the next parameter. If you select to filter Indicia ' . 'report grids, then this assumes you have built a page containing other report grids e.g. by following ' . '<a href="http://code.google.com/p/indicia/wiki/DrupalDashboardReporting">this tutorial</a>. The report you are using must ' . 'have a parameter of type "idlist" which allows the report to filter to the selection on the map.', 'type' => 'select', 'options' => array('none' => 'No action', 'popup' => 'Display output in a popup', 'div' => 'Display output in a div', 'report' => 'Filter any Indicia report grids with the same report group setting'), 'default' => 'popup', 'group' => 'Report Map Settings'), array('name' => 'click_on_map_div', 'caption' => 'Click to query map output div', 'description' => 'If you choose to display a data grid when clicking on the map distribution points, specify the name of the div ' . 'to display the output in here. ', 'type' => 'text_input', 'required' => false, 'group' => 'Report Map Settings'), array('name' => 'click_on_map_columns', 'caption' => 'Columns displayed on click', 'description' => 'Specify each report column you want to output when clicking on the map on a separate line. Each column must be represented as a key=value pair ' . 'with the column name as the key and the display label as the value.', 'type' => 'textarea', 'required' => false, 'group' => 'Report Map Settings'), array('name' => 'geoserver_layer', 'caption' => 'GeoServer Layer', 'description' => 'For improved mapping performance, specify a layer on GeoServer which ' . 'has the same attributes and output as the report file. Then the report map can output ' . 'the contents of this layer filtered by the report parameters, rather than build a layer ' . 'from the report data.', 'type' => 'text_input', 'required' => false, 'group' => 'WMS Mapping'), array('name' => 'geoserver_layer_style', 'caption' => 'GeoServer Layer Style', 'description' => 'Optional name of the SLD file available on GeoServer which is to be applied to the GeoServer layer.', 'type' => 'text_input', 'required' => false, 'group' => 'WMS Mapping'), array('name' => 'cql_template', 'caption' => 'CQL Filter Template', 'description' => 'Use with the geoserver_layer to provide a template for the CQL to filter the layer ' . 'according to the parameters of the report. For example, if you are using the report called ' . '<em>map_occurrences_by_survey</em> then you can set the geoserver_layer to the indicia:detail_occurrences ' . 'layer and set this to <em>INTERSECTS(geom, #searchArea#) AND survey_id=#survey#</em>.', 'type' => 'textarea', 'required' => false, 'group' => 'WMS Mapping'))); }
/** * Get the list of parameters for this form. * @return array List of parameters that this form requires. */ public static function get_parameters() { return array_merge(iform_report_get_report_parameters(), array(array('name' => 'chart_type', 'caption' => 'Chart Type', 'description' => 'Type of chart.', 'type' => 'select', 'lookupValues' => array('line' => lang::get('Line'), 'bar' => lang::get('bar'), 'pie' => lang::get('Pie')), 'required' => true, 'default' => 'line', 'group' => 'Basic Chart Options'), array('name' => 'width', 'caption' => 'Chart Width', 'description' => 'Width of the output chart in pixels.', 'type' => 'text_input', 'required' => true, 'default' => 500, 'group' => 'Basic Chart Options'), array('name' => 'height', 'caption' => 'Chart Height', 'description' => 'Height of the output chart in pixels.', 'type' => 'text_input', 'required' => true, 'default' => 500, 'group' => 'Basic Chart Options'), array('name' => 'y_values', 'caption' => 'Y Values', 'description' => 'Fields containing the y values or pie segment sizes, comma separated if this is a multi-series chart.', 'type' => 'text_input', 'required' => true, 'group' => 'Basic Chart Options'), array('name' => 'x_values', 'caption' => 'X Values', 'description' => 'Fields containing the x values when the x-axis contains numerical values rather than labels, ' . 'comma separated if this is a multi-series chart.', 'type' => 'text_input', 'required' => false, 'group' => 'Basic Chart Options'), array('name' => 'x_labels', 'caption' => 'X Labels', 'description' => 'Fields containing the x labels or pie segment titles when the x-axis contains arbitrary labels, ' . 'comma separated if this is a multi-series chart.', 'type' => 'text_input', 'required' => false, 'group' => 'Basic Chart Options'), array('name' => 'renderer_options', 'caption' => 'Renderer Options', 'description' => 'Editor for the renderer options to pass to the chart. For full details of the options available, ' . 'see <a href="http://www.jqplot.com/docs/files/plugins/jqplot-barRenderer-js.html">bar chart renderer options</a>, ' . '<a href="http://www.jqplot.com/docs/files/plugins/jqplot-lineRenderer-js.html">line charts rendered options<a/> or ' . '<a href="http://www.jqplot.com/docs/files/plugins/jqplot-pieRenderer-js.html">pie chart renderer options</a>.', 'type' => 'jsonwidget', 'schema' => '{ "type":"map", "title":"Renderer Options", "mapping":{ "barPadding":{"title":"Bar Padding", "type":"int","desc":"Number of pixels between adjacent bars at the same axis value."}, "barMargin":{"title":"Bar Margin", "type":"int","desc":"Number of pixels between groups of bars at adjacent axis values."}, "barDirection":{"title":"Bar Direction", "type":"str","desc":"Select vertical for up and down bars or horizontal for side to side bars","enum":["vertical","horizontal"]}, "barWidth":{"title":"Bar Width", "type":"int","desc":"Width of the bar in pixels (auto by devaul)."}, "shadowOffset":{"title":"Bar or Pie Slice Shadow Offset", "type":"number","desc":"Offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last."}, "shadowDepth":{"title":"Bar or Pie Slice Shadow Depth", "type":"int","desc":"Number of strokes to apply to the shadow, each stroke offset shadowOffset from the last."}, "shadowAlpha":{"title":"Bar or Pie Slice Shadow Alpha", "type":"number","desc":"Transparency of the shadow (0 = transparent, 1 = opaque)"}, "waterfall":{"title":"Bar Waterfall","type":"bool","desc":"Check to enable waterfall plot."}, "groups":{"type":"int","desc":"Group bars into this many groups."}, "varyBarColor":{"type":"bool","desc":"Check to color each bar of a series separately rather than have every bar of a given series the same color."}, "highlightMouseOver":{"type":"bool","desc":"Check to highlight slice, bar or filled line plot when mouse over."}, "highlightMouseDown":{"type":"bool","desc":"Check to highlight slice, bar or filled line plot when mouse down."}, "highlightColors":{"type":"seq","desc":"An array of colors to use when highlighting a bar or pie slice.", "sequence":[{"type":"str"}] }, "highlightColor":{"type":"str","desc":"A colour to use when highlighting an area on a filled line plot."}, "diameter":{"title":"Pie Diameter","type":"int","desc":"Outer diameter of the pie, auto computed by default."}, "padding":{"title":"Pie Padding","type":"int","desc":"padding between the pie and plot edges, legend, etc."}, "sliceMargin":{"title":"Pie Slice Margin","type":"int","desc":"Angular spacing between pie slices in degrees."}, "fill":{"title":"Pie Fill", "type":"bool","desc":"true or false, whether to fill the slices."}, "dataLabels":{"title":"Pie Data Labels", "type":"str","desc":"Select what to display as labels on pie slices.", "enum":["label","value","percent"] }, "showDataLabels":{"title":"Pie Show Data Labels", "type":"bool","desc":"Check to show data labels on pie slices."}, "dataLabelFormatString":{"title":"Pie Data Label Format String", "type":"str","desc":"Format string for data labels. %s is replaced with the label, %d with the value, %d%% with the percentage."}, "dataLabelThreshold":{"title":"Pie Data Label Threshold", "type":"int","desc":"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":{"title":"Pie Data Label Position Factor", "type":"number","desc":"A Multiplier (0-1) of the pie radius which controls position of label on slice."}, "dataLabelNudge":{"title":"Pie Data Label Nudge", "type":"number","desc":"Number of pixels to slide the label away from (+) or toward (-) the center of the pie."}, "dataLabelCenterOn":{"title":"Pie Data Label Centre On", "type":"bool","desc":"Check to center the data label at its position."}, "startAngle":{"title":"Pie Start Angle", "type":"int","desc":"Angle to start drawing pie in degrees."} } }', 'required' => false, 'group' => 'Advanced Chart Options'), array('name' => 'legend_options', 'caption' => 'Legend Options', 'description' => 'Editor for the legend options to pass to the chart. For full details of the options available, ' . 'see <a href="http://www.jqplot.com/docs/files/jqplot-core-js.html#Legend">chart legend options</a>. ' . 'For example, set the value to <em>{"show":true,"location":"ne"}</em> to show the legend in the top-right ' . '(north east) corner.', 'type' => 'jsonwidget', 'schema' => '{ "type":"map", "title":"Legend Options", "mapping":{ "show":{"type":"bool","desc":"Whether to display the legend on the graph."}, "location":{"type":"str","desc":"Placement of the legend (compass direction).","enum":["nw","n","ne","e","se","s","sw","w"]}, "labels":{"type":"seq","desc":"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.", "sequence":[{"type":"str"}]}, "showLabels":{"type":"bool","desc":"Check to show the label text on the legend."}, "showSwatch":{"type":"bool","desc":"Check to show the color swatches on the legend."}, "placement":{"type":"str","desc":"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. Outside places the legend ouside the grid area, but does not shrink the grid which can cause the legend to overflow the plot container.", "enum":["insideGrid","outsideGrid","outside"]}, "border":{"type":"str","desc":"CSS spec for the border around the legend box."}, "background":{"type":"str","desc":"CSS spec for the background of the legend box."}, "textColor":{"type":"str","desc":"CSS color spec for the legend text."}, "fontFamily":{"type":"str","desc":"CSS font-family spec for the legend text."}, "fontSize":{"type":"str","desc":"CSS font-size spec for the legend text."}, "rowSpacing":{"type":"str","desc":"CSS padding-top spec for the rows in the legend."}, "marginTop":{"type":"str","desc":"CSS margin for the legend DOM element."}, "marginRight":{"type":"str","desc":"CSS margin for the legend DOM element."}, "marginBottom":{"type":"str","desc":"CSS margin for the legend DOM element."}, "marginLeft":{"type":"str","desc":"CSS margin for the legend DOM element."} } }', 'required' => false, 'group' => 'Advanced Chart Options'), array('name' => 'series_options', 'caption' => 'Series Options', 'description' => 'A list of series options to pass to the chart with one entry per series. ' . 'Applies to line and bar charts only. For full details of the options available, see ' . '<a href="http://www.jqplot.com/docs/files/jqplot-core-js.html#Series">chart series options</a>. ', 'type' => 'jsonwidget', 'schema' => '{ "type":"seq", "title":"Series List", "sequence": [ { "type":"map", "title":"Series", "mapping": { "show": {"type":"bool"}, "label": {"type":"str"}, "showlabel": {"type":"bool"}, "color": {"type":"str","desc":"Specify the colour using CSS format, e.g. #ffffff or a named colour."}, "lineWidth": {"type":"number","desc":"Width of the line in pixels."}, "shadow": {"type":"bool"}, "shadowAngle": {"type":"int","desc":"Shadow angle in degrees."}, "shadowOffset": {"type":"number","desc":"Shadow offset from line in pixels."}, "shadowDepth": {"type":"int","desc":"Number of times shadow is stroked, each stroke offset shadowOffset from the last."}, "shadowAlpha": {"type":"number","desc":"Alpha channel transparency of shadow. 0 = transparent."}, "breakOnNull": {"type":"bool","desc":"Whether line segments should be be broken at null value. False will join point on either side of line."}, "showLine": {"type":"bool","desc":"Whether to actually draw the line or not. Series will still be renderered, even if no line is drawn."}, "showMarker": {"type":"bool","desc":"Whether or not to show the markers at the data points."}, "rendererOptions": {"type":"map", "mapping": { } }, "markerOptions": {"type":"map", "mapping": { "style": {"type":"str","enum":["diamond","circle","square","x","plus","dash","filledDiamond","filledCircle","filledSquare"]}, "size": {"type":"int"}, "color": {"type":"str"} } }, "fill": {"type":"bool","desc":"True or false, wether to fill under lines or in bars. May not be implemented in all renderers."}, "fillColor": {"type":"str","desc":"CSS color spec to use for fill under line. Defaults to line color."}, "fillAlpha": {"type":"number","desc":"Alpha transparency to apply to the fill under the line (between 0 and 1). Use this to adjust alpha separate from fill color."}, "useNegativeColors": {"type":"bool","desc":"True to color negative values differently in filled and bar charts."}, "trendline": { "type":"map", "mapping": { "show": {"type":"bool"}, "color":{"type":"str","desc":"Specify the colour using CSS format, e.g. #ffffff or a named colour."} } } } } ] }', 'required' => false, 'group' => 'Advanced Chart Options'), array('name' => 'axes_options', 'caption' => 'Axes Options', 'description' => 'Editor for axes options to pass to the chart. Provide entries for yaxis and xaxis as required. ' . 'Applies to line and bar charts only. For full details of the options available, see ' . '<a href="http://www.jqplot.com/docs/files/jqplot-core-js.html#Axis">chart axes options</a>. ' . 'For example, <em>{"yaxis":{"min":0,"max":100}}</em>.', 'type' => 'jsonwidget', 'required' => false, 'group' => 'Advanced Chart Options', 'schema' => '{ "type":"map", "title":"Axis options", "mapping":{ "xaxis":{ "type":"map", "mapping":{ "show":{"type":"bool"}, "tickOptions":{"type":"map","mapping":{ "mark":{"type":"str","desc":"Tick mark type on the axis.","enum":["inside","outside","cross"]}, "showMark":{"type":"bool"}, "showGridline":{"type":"bool"}, "isMinorTick":{"type":"bool"}, "markSize":{"type":"int","desc":"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":{"type":"bool"}, "showLabel":{"type":"bool"}, "formatString":{"type":"bool","desc":"Text used to construct the tick labels, with %s being replaced by the label."}, "fontFamily":{"type":"str","desc":"CSS spec for the font-family css attribute."}, "fontSize":{"type":"str","desc":"CSS spec for the font-size css attribute."}, "textColor":{"type":"str","desc":"CSS spec for the color attribute."}, }}, "labelOptions":{"type":"map","mapping":{ "label":{"type":"str","desc":"Label for the axis."}, "show":{"type":"bool","desc":"Check to show the axis label."}, "escapeHTML":{"type":"bool","desc":"Check to escape HTML entities in the label."}, }}, "min":{"type":"number","desc":"minimum value of the axis (in data units, not pixels)."}, "max":{"type":"number","desc":"maximum value of the axis (in data units, not pixels)."}, "autoscale":{"type":"bool","desc":"Autoscale the axis min and max values to provide sensible tick spacing."}, "pad":{"type":"number","desc":"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":{"type":"number","desc":"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":{"type":"numer","desc":"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."}, "numberTicks":{"type":"int","desc":"Desired number of ticks."}, "tickInterval":{"type":"number","desc":"Number of units between ticks."}, "showTicks":{"type":"bool","desc":"Whether to show the ticks (both marks and labels) or not."}, "showTickMarks":{"type":"bool","desc":"Wether to show the tick marks (line crossing grid) or not."}, "showMinorTicks":{"type":"bool","desc":"Wether or not to show minor ticks."}, "useSeriesColor":{"type":"bool","desc":"Use the color of the first series associated with this axis for the tick marks and line bordering this axis."}, "borderWidth":{"type":"int","desc":"Width of line stroked at the border of the axis."}, "borderColor":{"type":"str","desc":"Color of the border adjacent to the axis."}, "syncTicks":{"type":"bool","desc":"Check to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up."}, "tickSpacing":{"type":"","desc":"Approximate pixel spacing between ticks on graph. Used during autoscaling. This number will be an upper bound, actual spacing will be less."} } }, "yaxis":{ "type":"map", "mapping":{ "show":{"type":"bool"}, "tickOptions":{"type":"map","mapping":{ "mark":{"type":"str","desc":"Tick mark type on the axis.","enum":["inside","outside","cross"]}, "showMark":{"type":"bool"}, "showGridline":{"type":"bool"}, "isMinorTick":{"type":"bool"}, "markSize":{"type":"int","desc":"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":{"type":"bool"}, "showLabel":{"type":"bool"}, "formatString":{"type":"bool","desc":"Text used to construct the tick labels, with %s being replaced by the label."}, "fontFamily":{"type":"str","desc":"CSS spec for the font-family css attribute."}, "fontSize":{"type":"str","desc":"CSS spec for the font-size css attribute."}, "textColor":{"type":"str","desc":"CSS spec for the color attribute."}, }}, "labelOptions":{"type":"map","mapping":{ "label":{"type":"str","desc":"Label for the axis."}, "show":{"type":"bool","desc":"Check to show the axis label."}, "escapeHTML":{"type":"bool","desc":"Check to escape HTML entities in the label."}, }}, "min":{"type":"number","desc":"minimum value of the axis (in data units, not pixels)."}, "max":{"type":"number","desc":"maximum value of the axis (in data units, not pixels)."}, "autoscale":{"type":"bool","desc":"Autoscale the axis min and max values to provide sensible tick spacing."}, "pad":{"type":"number","desc":"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":{"type":"number","desc":"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":{"type":"numer","desc":"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."}, "numberTicks":{"type":"int","desc":"Desired number of ticks."}, "tickInterval":{"type":"number","desc":"Number of units between ticks."}, "showTicks":{"type":"bool","desc":"Whether to show the ticks (both marks and labels) or not."}, "showTickMarks":{"type":"bool","desc":"Wether to show the tick marks (line crossing grid) or not."}, "showMinorTicks":{"type":"bool","desc":"Wether or not to show minor ticks."}, "useSeriesColor":{"type":"bool","desc":"Use the color of the first series associated with this axis for the tick marks and line bordering this axis."}, "borderWidth":{"type":"int","desc":"Width of line stroked at the border of the axis."}, "borderColor":{"type":"str","desc":"Color of the border adjacent to the axis."}, "syncTicks":{"type":"bool","desc":"Check to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up."}, "tickSpacing":{"type":"","desc":"Approximate pixel spacing between ticks on graph. Used during autoscaling. This number will be an upper bound, actual spacing will be less."} } } } }'))); }