PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.11
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.11
1.1.11 1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 0.8.9 0.8.8 All 35 releases
← All changes | includes/my-wordpress/integrations/woocommerce.php +72 -10 1.1.0 → 1.1.11 View file →
@@ -1899,37 +1899,63 @@
1899 1899
1900 1900 /**
1901 1901 * Register the integration bundle.
1902 1902 *
1903 + * Cache-busted by `filemtime`, like the window bundle it rides along
1904 + * with (see `openstation_my_wordpress_register_assets()`). The bundle
1905 + * is fetched lazily by URL, so a `ver` that only moves on release
1906 + * would let a browser's cached copy outlive builds within one — a
1907 + * stale companion against a fresh WP Explorer bundle is a contract
1908 + * drift no error message points at.
1909 + *
1903 1910 * @return void
1904 1911 */
1905 1912 function openstation_my_wordpress_woo_register_assets() {
1913 + $js_path = OPENSTATION_DIR . 'assets/js/my-wordpress-woocommerce' . openstation_asset_suffix() . '.js';
1906 1914 wp_register_script(
1907 1915 'os-my-wordpress-woocommerce',
1908 - OPENSTATION_URL . 'assets/js/my-wordpress-woocommerce' . ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' ) . '.js',
1916 + OPENSTATION_URL . 'assets/js/my-wordpress-woocommerce' . openstation_asset_suffix() . '.js',
1909 1917 array( 'wp-hooks' ),
1910 - OPENSTATION_VERSION,
1918 + file_exists( $js_path ) ? (string) filemtime( $js_path ) : OPENSTATION_VERSION,
1911 1919 true
1912 1920 );
1913 1921 wp_set_script_translations( 'os-my-wordpress-woocommerce', 'desktop-mode' );
1914 1922
1923 + $css_path = OPENSTATION_DIR . 'assets/css/my-wordpress-woocommerce.css';
1915 1924 wp_register_style(
1916 1925 'os-my-wordpress-woocommerce',
1917 1926 OPENSTATION_URL . 'assets/css/my-wordpress-woocommerce.css',
1918 1927 array( 'desktop-mode-my-wordpress' ),
1919 - OPENSTATION_VERSION
1928 + file_exists( $css_path ) ? (string) filemtime( $css_path ) : OPENSTATION_VERSION
1920 1929 );
1921 1930 }
1922 1931 add_action( 'init', 'openstation_my_wordpress_woo_register_assets', 5 );
1923 1932
1924 1933 /**
1925 - * Enqueue the integration bundle.
1934 + * Attach the integration's config to its script handle.
1926 1935 *
1936 + * NOTHING is enqueued here, and that is the point. The bundle
1937 + * subscribes to the WP Explorer app's `preview-extras` /
1938 + * `group-extras` actions, so it has to be in the tab before the app's
1939 + * client view paints — but not one moment sooner. It travels as a
1940 + * companion of the app window (see
1941 + * `openstation_my_wordpress_woo_app_window_args()` below), which
1942 + * means the shell loads it when the window first opens and a merchant
1943 + * who never opens the explorer never downloads it at all. The
1944 + * stylesheet travels the same way (the `styles` arg): every selector
1945 + * in it is scoped to surfaces inside the explorer or the Customer
1946 + * window, so on any document not showing those —
1947 + * it was pure parse weight.
1948 + *
1927 1949 * Only for users who can open the site window on a store — everyone
1928 - * else pays nothing. The bundle subscribes to the site window's
1929 - * `preview-extras` / `group-extras` actions, which is why it has to be
1930 - * present before the (lazily loaded) window bundle paints.
1950 + * else pays nothing.
1931 1951 *
1952 + * Runs at priority 5, ahead of `openstation_enqueue_assets()` at 10:
1953 + * that is where the boot payload is built, and it harvests this
1954 + * inline blob off the registered handle so the lazy loader can
1955 + * replay it around the script tag. Attaching later would ship the
1956 + * bundle with no config.
1957 + *
1932 1958 * @return void
1933 1959 */
1934 1960 function openstation_my_wordpress_woo_enqueue() {
1935 1961 if ( ! openstation_my_wordpress_woo_active() ) {
@@ -1941,10 +1967,8 @@
1941 1967 if ( ! openstation_my_wordpress_user_can_use() ) {
1942 1968 return;
1943 1969 }
1944 1970
1945 - wp_enqueue_script( 'os-my-wordpress-woocommerce' );
1946 - wp_enqueue_style( 'os-my-wordpress-woocommerce' );
1947 1971 wp_add_inline_script(
1948 1972 'os-my-wordpress-woocommerce',
1949 1973 sprintf(
1950 1974 'window.openStationWooConfig=%s;',
@@ -1975,5 +1999,43 @@
1975 1999 ),
1976 2000 'before'
1977 2001 );
1978 2002 }
1979 -add_action( 'admin_enqueue_scripts', 'openstation_my_wordpress_woo_enqueue', 20 );
2003 +add_action( 'admin_enqueue_scripts', 'openstation_my_wordpress_woo_enqueue', 5 );
2004 +
2005 +/**
2006 + * Attach the bundle and stylesheet to the WP Explorer app.
2007 + *
2008 + * The app fires the `os.my-wordpress.*` seams this bundle subscribes
2009 + * to (`preview-extras`, `group-extras`, `list-tile`, the banding and
2010 + * user filters), and its rows carry the `openstation_woo` /
2011 + * `openstation_woo_customer` facts. `scripts` handles load in order
2012 + * immediately before the window's own script, so the integration is
2013 + * listening by the time the app's client view fires the seams — as a
2014 + * first-open companion, costing nothing until the window opens. The
2015 + * config blob rides the handle (see
2016 + * `openstation_my_wordpress_woo_enqueue()`), so it arrives with the
2017 + * bundle. The `styles` handle keeps its `wp_register_style`
2018 + * dependency on the shared explorer sheet, so its equal-specificity
2019 + * overrides (the ribbon and panel chrome) still win by source order.
2020 + *
2021 + * @param array $window_args Args passed to `openstation_register_window()`.
2022 + * @param string $app_id App id.
2023 + * @return array
2024 + */
2025 +function openstation_my_wordpress_woo_app_window_args( $window_args, $app_id ) {
2026 + if ( 'my-wordpress' !== (string) $app_id || ! is_array( $window_args ) || ! openstation_my_wordpress_woo_active() ) {
2027 + return $window_args;
2028 + }
2029 +
2030 + $scripts = isset( $window_args['scripts'] ) ? (array) $window_args['scripts'] : array();
2031 + $scripts[] = 'os-my-wordpress-woocommerce';
2032 +
2033 + $styles = isset( $window_args['styles'] ) ? (array) $window_args['styles'] : array();
2034 + $styles[] = 'os-my-wordpress-woocommerce';
2035 +
2036 + $window_args['scripts'] = $scripts;
2037 + $window_args['styles'] = $styles;
2038 +
2039 + return $window_args;
2040 +}
2041 +add_filter( 'openstation_app_window_args', 'openstation_my_wordpress_woo_app_window_args', 10, 2 );