'name' => 'Admin\Settings\Email', 'hook' => 'admin_init', ], [ 'name' => 'Admin\Settings\Captcha\Page', 'hook' => 'admin_init', ], [ 'name' => 'Admin\Settings\Payments', 'hook' => 'admin_init', ], [ 'name' => 'Admin\Tools\Tools', 'hook' => 'current_screen', ], [ 'name' => 'Admin\Payments\Payments', 'hook' => 'init', ], [ 'name' => 'Admin\Payments\Views\Overview\Ajax', 'hook' => 'admin_init', 'run' => 'hooks', 'condition' => wpforms_is_admin_ajax(), ], [ 'name' => 'Admin\Tools\Importers', 'hook' => 'admin_init', 'run' => 'load', 'condition' => wp_doing_ajax(), ], [ 'name' => 'Admin\Pages\Addons', 'id' => 'addons_page', ], [ 'name' => 'Admin\Pages\ConstantContact', 'hook' => 'admin_init', ], [ 'name' => 'Forms\Fields\Richtext\EntryViewContent', ], [ 'name' => 'Admin\DashboardWidget', 'hook' => wpforms()->is_pro() ? 'admin_init' : 'init', ], [ 'name' => 'Emails\Preview', 'hook' => 'admin_init', ], [ 'name' => 'Admin\Addons\GoogleSheets', 'hook' => 'admin_init', ], [ 'name' => 'Admin\PluginList', 'id' => 'plugin_list', 'hook' => 'admin_init', ], [ 'name' => 'Admin\Splash\SplashScreen', 'id' => 'splash_screen', 'hook' => 'admin_init', ], [ 'name' => 'Admin\Splash\SplashCache', 'id' => 'splash_cache', 'hook' => 'plugins_loaded', ], [ 'name' => 'Admin\Splash\SplashUpgrader', 'id' => 'splash_upgrader', 'hook' => 'plugins_loaded', ] ); } /** * Populate Caches related classes. * * @since 1.8.7 */ private function populate_caches() { array_push( $this->classes, [ 'name' => 'LicenseApi\PluginUpdateCache', 'id' => 'license_api_plugin_update_cache', ], [ 'name' => 'LicenseApi\PluginInfoCache', 'id' => 'license_api_plugin_info_cache', ], [ 'name' => 'LicenseApi\ValidateKeyCache', 'id' => 'license_api_validate_key_cache', ] ); } /** * Populate Fields related classes. * * @since 1.8.2 */ private function populate_fields() { $this->classes[] = [ 'name' => 'Forms\Fields\PaymentCheckbox\Field', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\PaymentMultiple\Field', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\PaymentSelect\Field', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\PaymentSingle\Field', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\PaymentTotal\Field', 'hook' => 'init', ]; // Load custom captcha field class. $this->classes[] = [ 'name' => 'Forms\Fields\CustomCaptcha\Field', ]; $this->classes[] = [ 'name' => 'Forms\Fields\Layout\Field', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\Layout\Process', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\Layout\Notifications', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\Repeater\Field', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\Repeater\Process', 'id' => 'repeater_process', 'hook' => 'init', ]; $this->classes[] = [ 'name' => 'Forms\Fields\Repeater\Notification [ 'label' => esc_html__( 'Page Title Selector', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => 'h1.entry-title', 'placeholder' => 'h1.entry-title', 'description' => esc_html__( 'Elementor lets you hide the page title. This works for themes that have "h1.entry-title" selector. If your theme\'s selector is different, please enter it above.', 'elementor' ), 'label_block' => true, 'ai' => [ 'active' => false, ], 'selectors' => [ // Hack to convert the value into a CSS selector. '' => '}{{VALUE}}{display: var(--page-title-display)', ], ] ); $this->add_control( 'stretched_section_container', [ 'label' => esc_html__( 'Stretched Section Fit To', 'elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => 'body', 'description' => esc_html__( 'Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width.', 'elementor' ), 'label_block' => true, 'frontend_available' => true, 'ai' => [ 'active' => false, ], ] ); /** * @var PageTemplatesModule $page_templates_module */ $page_templates_module = Plugin::$instance->modules_manager->get_modules( 'page-templates' ); $page_templates = $page_templates_module->add_page_templates( [], null, null ); // Removes the Theme option from the templates because 'default' is already handled. unset( $page_templates[ PageTemplatesModule::TEMPLATE_THEME ] ); $page_template_control_options = [ 'label' => esc_html__( 'Default Page Layout', 'elementor' ), 'options' => [ // This is here because the "Theme" string is different than the default option's string. 'default' => esc_html__( 'Theme', 'elementor' ), ] + $page_templates, ]; $page_templates_module->add_template_controls( $this->parent, 'default_page_template', $page_template_control_options ); $this->end_controls_section(); $this->start_controls_section( 'section_breakpoints', [ 'label' => esc_html__( 'Breakpoints', 'elementor' ), 'tab' => $this->get_id(), ] ); $prefix = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX; $options = []; foreach ( $breakpoints_default_config as $breakpoint_key => $breakpoint ) { $options[ $prefix . $breakpoint_key ] = $breakpoint['label']; } if ( Plugin::$instance->experiments->is_feature_active( 'additional_custom_breakpoints' ) ) { $active_breakpoints_control_type = Controls_Manager::SELECT2; } else { $active_breakpoints_control_type = Controls_Manager::HIDDEN; } $this->add_control( self::ACTIVE_BREAKPOINTS_CONTROL_ID, [ 'label' => esc_html__( 'Active Breakpoints', 'elementor' ), 'type' => $active_breakpoints_control_type, 'description' => esc_html__( 'Mobile and Tablet options cannot be deleted.', 'elementor' ), 'options' => $options, 'default' => [ $prefix . $breakpoint_key_mobile, $prefix . $breakpoint_key_tablet, ], 'select2options' => [ 'allowClear' => false, ], 'lockedOptions' => [ $prefix . $breakpoint_key_mobile, $prefix . $breakpoint_key_tablet, ], 'label_block' => true, 'render_type' => 'none', 'frontend_available' => true, 'multiple' => true, ] ); $this->add_breakpoints_controls(); // Include the old mobile and tablet breakpoint controls as hidden for backwards compatibility. $this->add_control( 'viewport_md', [ 'type' => Controls_Manager::HIDDEN ] ); $this->add_control( 'viewport_lg', [ 'type' => Controls_Manager::HIDDEN ] ); $this->end_controls_section(); } /** * Before Save * * Runs Before the Kit document is saved. * * For backwards compatibility, when the mobile and tablet breakpoints are updated, we also update the * old breakpoint settings ('viewport_md', 'viewport_lg' ) with the saved values + 1px. The reason 1px * is added is because the old breakpoints system was min-width based, and the new system introduced in * Elementor v3.2.0 is max-width based. * * @since 3.2.0 * * @param array $data * @return array $data */ public function before_save( array $data ) { // When creating a default kit, $data['settings'] is empty and should remain empty, so settings. if ( empty( $data['settings'] ) ) { return $data; } $prefix = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX; $mobile_breakpoint_key = $prefix . Breakpoints_Manager::BREAKPOINT_KEY_MOBILE; $tablet_breakpoint_key = $prefix . Breakpoints_Manager::BREAKPOINT_KEY_TABLET; $default_breakpoint_config = Breakpoints_Manager::get_default_config(); // Update the old mobile breakpoint. If the setting is empty, use the default value. $data['settings'][ $prefix . 'md' ] = empty( $data['settings'][ $mobile_breakpoint_key ] ) ? $default_breakpoint_config[ Breakpoints_Manager::BREAKPOINT_KEY_MOBILE ]['default_value'] + 1 : $data['settings'][ $mobile_breakpoint_key ] + 1; // Update the old tablet breakpoint. If the setting is empty, use the default value. $data['settings'][ $prefix . 'lg' ] = empty( $data['settings'][ $tablet_breakpoint_key ] ) ? $default_breakpoint_config[ Breakpoints_Manager::BREAKPOINT_KEY_TABLET ]['default_value'] + 1 : $data['settings'][ $tablet_breakpoint_key ] + 1; return $data; } public function on_save( $data ) { if ( ! isset( $data['settings'] ) || ( isset( $data['settings']['post_status'] ) && Document::STATUS_PUBLISH !== $data['settings']['post_status'] ) ) { return; } $should_compile_css = false; $breakpoints_default_config = Breakpoints_Manager::get_default_config(); foreach ( $breakpoints_default_config as $breakpoint_key => $default_config ) { $breakpoint_setting_key = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX . $breakpoint_key; if ( isset( $data['settings'][ $breakpoint_setting_key ] ) ) { $should_compile_css = true; } } if ( $should_compile_css ) { Breakpoints_Manager::compile_stylesheet_templates(); } } private function add_breakpoints_controls() { $default_breakpoints_config = Breakpoints_Manager::get_default_config(); $prefix = Breakpoints_Manager::BREAKPOINT_SETTING_PREFIX; // If the ACB experiment is inactive, only add the mobile and tablet controls. if ( ! Plugin::$instance->experiments->is_feature_active( 'additional_custom_breakpoints' ) ) { $default_breakpoints_config = array_intersect_key( $default_breakpoints_config, array_flip( [ Breakpoints_Manager::BREAKPOINT_KEY_MOBILE, Breakpoints_Manager::BREAKPOINT_KEY_TABLET ] ) ); } // Add a control for each of the **default** breakpoints. foreach ( $default_breakpoints_config as $breakpoint_key => $default_breakpoint_config ) { $this->add_control( 'breakpoint_' . $breakpoint_key . '_heading', [ About – Joint Rise Trading
A Few Words About

JOINT RISE TRADING

Keith Keller

Joint Rise Trading:

Joint Rise Trading is a fully functional Steel Fabrication Company. Serving the needs of a broad spectrum clients in different industries.

We Manufacture, Supply, erect and install the following to our clients specific needs:

Steel structures:
Our Steel Structures can be designed for a number of different applications, fromIndustrial to domestic uses.

Steel Structures are designed to incorporate different roofing options for ventilation,insulation and natural light. The structures can also be designed to accommodate Crane Rails , Staircases and extra floor levels as per the client’s needs.

All our structures are Engineer Approved.

Gates:
Our Gates can be manufactured from stainless steel , mild steel or wrought iron. All the gates can be custom designed to the specific application and style of the clients needs.

Palisades:
Palisade fencing are available in a variety of heights and spike designs with additional security applications that can be added to improve the security of the fence.

Balustrades:
Balustrades are manufactured from stainless steel , mild steel or glass to the sight specific lay out and in the clients choice of material.

Staircases:
Staircases are designed to our clients requirements. All staircases come in a range of materials such as stainless steel and mild steel. We do all types of staircases such as
spiral and floating.

Get In Touch


Facebook-f


Linkedin-in






































Our Services

Joint Rise Trading also offer the following Services :

Guillotining

Bending

Steel Fabrication

Cutting

Drilling

Plasma Cuttng

Joint Rise Trading at Work:




























































































352

Projects Completed

120+

Happy Customers

12

Awards Received

15

Years In Service

Best Ranked By:

nclogo kinderlogo2