Plugin Directory

Changeset 3460397


Ignore:
Timestamp:
02/12/2026 10:25:52 PM (7 weeks ago)
Author:
ejointjp
Message:

Update to version 2.2.0 from GitHub

Location:
blogcard-for-wp
Files:
6 added
26 edited
1 copied

Legend:

Unmodified
Added
Removed
  • blogcard-for-wp/tags/2.2.0/blogcard-for-wp.php

    r3451275 r3460397  
    55 * Plugin URI: https://wordpress.org/plugins/blogcard-for-wp/
    66 * Description: URLを入力してブログカードを生成するブロックプラグイン
    7  * Version: 2.1.2
     7 * Version: 2.2.0
    88 * Author: Takashi Fujisaki
    99 * License: GPL v2 or later
     
    1818// プラグインの定数
    1919define( 'WPBC_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
     20
     21// 管理画面設定の読み込み
     22require_once WPBC_PLUGIN_PATH . 'includes/admin-settings.php';
    2023
    2124/**
     
    4952    // ブロックの登録
    5053    register_block_type( WPBC_PLUGIN_PATH . 'build/block.json' );
     54
     55    // 設定をブロックエディタに渡す
     56    add_action( 'enqueue_block_editor_assets', 'wpbc_enqueue_editor_assets' );
    5157}
    5258add_action( 'init', 'wpbc_init' );
     59
     60/**
     61 * ブロックエディタ用アセットのエンキュー
     62 */
     63function wpbc_enqueue_editor_assets() {
     64    $options  = get_option( 'wpbc_settings' );
     65    $settings = array(
     66        'external_target' => isset( $options['external_target'] ) ? $options['external_target'] : '_blank',
     67        'internal_target' => isset( $options['internal_target'] ) ? $options['internal_target'] : '_self',
     68    );
     69
     70    wp_add_inline_script(
     71        'wp-blocks',
     72        'window.wpbcSettings = ' . json_encode( $settings ) . ';',
     73        'before'
     74    );
     75}
    5376
    5477/**
     
    249272        }
    250273
    251         // キャッシュに保存(24時間)
    252         set_transient( $cache_key, $metadata, 24 * HOUR_IN_SECONDS );
     274        // キャッシュ期間を取得(デフォルト24時間)
     275        $options        = get_option( 'wpbc_settings' );
     276        $cache_duration = isset( $options['cache_duration'] ) ? (int) $options['cache_duration'] : 24;
     277        $expiration     = $cache_duration * HOUR_IN_SECONDS;
     278
     279        // キャッシュに保存
     280        set_transient( $cache_key, $metadata, $expiration );
    253281
    254282        return $metadata;
     
    394422        }
    395423
    396         // ファビコンを取得
     424        // Faviconを取得
    397425        $favicon_url = wpbc_get_favicon_url( $xpath, $url );
    398426        if ( $favicon_url ) {
     
    404432    $metadata['cached'] = false;
    405433
    406     // キャッシュに保存(24時間)
    407     set_transient( $cache_key, $metadata, 24 * HOUR_IN_SECONDS );
     434    // キャッシュ期間を取得(デフォルト24時間)
     435    $options        = get_option( 'wpbc_settings' );
     436    $cache_duration = isset( $options['cache_duration'] ) ? (int) $options['cache_duration'] : 24;
     437    $expiration     = $cache_duration * HOUR_IN_SECONDS;
     438
     439    // キャッシュに保存
     440    set_transient( $cache_key, $metadata, $expiration );
    408441
    409442    return $metadata;
     
    450483    foreach ( $sorted_posts as $post ) {
    451484        $results[] = array(
    452             'id'        => $post->ID,
    453             'title'     => get_the_title( $post->ID ),
    454             'url'       => get_permalink( $post->ID ),
    455             'type'      => get_post_type( $post->ID ),
    456             'date'      => get_the_date( 'Y-m-d', $post->ID ),
    457             'thumbnail' => get_the_post_thumbnail_url( $post->ID, 'thumbnail' ),
     485            'id'          => $post->ID,
     486            'title'       => get_the_title( $post->ID ),
     487            'url'         => get_permalink( $post->ID ),
     488            'type'        => get_post_type( $post->ID ),
     489            'date'        => get_the_date( 'Y-m-d', $post->ID ),
     490            'thumbnail'   => get_the_post_thumbnail_url( $post->ID, 'large' ),
     491            'description' => get_the_excerpt( $post->ID ),
    458492        );
    459493    }
     
    538572
    539573/**
    540  * ファビコンを取得する関数
     574 * Faviconを取得する関数
    541575 */
    542576function wpbc_get_favicon_url( $xpath, $base_url ) {
    543577    $favicon_url = null;
    544578
    545     // ファビコンのURLを取得するクエリ(優先順位順)
     579    // FaviconのURLを取得するクエリ(優先順位順)
    546580    $queries = array(
    547581        "//link[@rel='icon' and @type='image/svg+xml']",
     
    566600                $temp_url = wpbc_convert_to_absolute_url( $temp_url, $base_url );
    567601
    568                 // ファビコンのURLが有効かチェック
     602                // FaviconのURLが有効かチェック
    569603                if ( wpbc_check_favicon_exists( $temp_url ) ) {
    570604                    return $temp_url;
     
    574608    }
    575609
    576     // ドメイン直下のファビコンを探す
     610    // ドメイン直下のFaviconを探す
    577611    $default_favicons = array(
    578612        wpbc_convert_to_absolute_url( '/favicon.svg', $base_url ),
     
    610644
    611645/**
    612  * ファビコンが存在するかチェックする
     646 * Faviconが存在するかチェックする
    613647 */
    614648function wpbc_check_favicon_exists( $url ) {
  • blogcard-for-wp/tags/2.2.0/build/block.json

    r3451271 r3460397  
    33  "apiVersion": 3,
    44  "name": "su/blogcard",
    5   "version": "2.1.0",
     5  "version": "2.2.0",
    66  "title": "ブログカード",
    77  "category": "su-blocks",
     
    8585      "type": "string",
    8686      "default": ""
     87    },
     88    "isManual": {
     89      "type": "boolean",
     90      "default": false
    8791    }
    8892  }
  • blogcard-for-wp/tags/2.2.0/build/index-rtl.css

    r3451271 r3460397  
    1 .wp-block-su-blogcard.is-selected{padding:1rem}.wp-block-su-blogcard:not(.is-selected){& .wp-blogcard{margin:0!important}}.wp-blogcard-item{pointer-events:none}.wpbc-search-results{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;right:0;overflow-y:auto;position:absolute;left:0;top:100%;z-index:1000}.wpbc-search-results-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:8px 12px}.wpbc-search-close{align-items:center;background:none;border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;font-size:18px;height:24px;justify-content:center;padding:0;transition:all .2s;width:24px}.wpbc-search-close:hover{background:#e9ecef;color:#333}.wpbc-search-results-list{margin:0;max-height:400px;overflow-y:auto;padding-right:0}.wpbc-search-result-item{border-bottom:1px solid #f0f0f0;cursor:pointer;display:flex;flex-direction:row-reverse;padding:12px;transition:background-color .2s}.wpbc-search-result-item:hover{background-color:#f8f9fa}.wpbc-search-result-item:last-child{border-bottom:none}.wpbc-search-result-thumbnail{flex-shrink:0;height:50px;margin-left:12px}.wpbc-search-result-thumbnail img{border-radius:4px;height:50px;object-fit:cover;width:50px}.wpbc-search-result-content{flex:1;min-width:0}.wpbc-search-result-title{color:#333;font-size:14px;font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpbc-search-result-meta{color:#666;display:flex;font-size:12px;gap:8px;margin-bottom:4px}.wpbc-search-result-type{background:#e9ecef;border-radius:3px;font-size:11px;padding:2px 6px}.wpbc-search-result-excerpt{color:#666;display:-webkit-box;font-size:12px;-webkit-line-clamp:2;line-height:1.4;overflow:hidden;-webkit-box-orient:vertical}.wpbc-search-loading,.wpbc-search-no-results{color:#666;font-size:14px;padding:20px;text-align:center}.wpbc-show-link-button{cursor:pointer;font-size:.75rem}.blogcard-url-input{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px}.blogcard-actions{text-align:center}.blogcard-actions .button{margin:0 5px}.editor-post-featured-image__toggle:has(* img){aspect-ratio:16/9;height:auto}
     1.wp-block-su-blogcard{box-sizing:initial}.wp-block-su-blogcard.is-selected{padding:1rem}.wp-block-su-blogcard:not(.is-selected){& .wp-blogcard{margin:0!important}}.wp-blogcard-item{pointer-events:none}.wpbc-search-input{position:relative;&:has(input[disabled]),input[disabled]{color:var(--color-text-light)}input[disabled]{border-color:var(--color-ui)}}.wpbc-search-buttons{margin-top:.75rem;span{font-size:.75rem;margin-right:.5rem}}.wpbc-search-results{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;right:0;overflow-y:auto;position:absolute;left:0;top:100%;z-index:1000}.wpbc-search-results-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:8px 12px}.wpbc-search-close{align-items:center;background:none;border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;font-size:18px;height:24px;justify-content:center;padding:0;transition:all .2s;width:24px}.wpbc-search-close:hover{background:#e9ecef;color:#333}.wpbc-search-results-list{margin:0;max-height:400px;overflow-y:auto;padding-right:0}.wpbc-search-result-item{border-bottom:1px solid #f0f0f0;cursor:pointer;display:flex;flex-direction:row-reverse;padding:12px;transition:background-color .2s}.wpbc-search-result-item:hover{background-color:#f8f9fa}.wpbc-search-result-item:last-child{border-bottom:none}.wpbc-search-result-thumbnail{flex-shrink:0;height:50px;margin-left:12px}.wpbc-search-result-thumbnail img{border-radius:4px;height:50px;object-fit:cover;width:89px}.wpbc-search-result-content{flex:1;min-width:0}.wpbc-search-result-title{color:#333;font-size:14px;font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpbc-search-result-meta{color:#666;display:flex;font-size:12px;gap:8px;margin-bottom:4px}.wpbc-search-result-type{background:#e9ecef;border-radius:3px;font-size:11px;padding:2px 6px}.wpbc-search-result-excerpt{color:#666;display:-webkit-box;font-size:12px;-webkit-line-clamp:2;line-height:1.4;overflow:hidden;-webkit-box-orient:vertical}.wpbc-search-loading,.wpbc-search-no-results{color:#666;font-size:14px;padding:20px;text-align:center}.wpbc-show-link-button{cursor:pointer;font-size:.75rem}.wpbc-cached-label{color:var(--color-text-light);font-size:.625rem;line-height:1;padding:.125rem .25rem}.blogcard-url-input{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px}.blogcard-actions{text-align:center}.blogcard-preview{margin-top:.75rem}.blogcard-actions .button{margin:0 5px}.editor-post-featured-image__toggle:has(* img){aspect-ratio:16/9;height:auto}
  • blogcard-for-wp/tags/2.2.0/build/index.asset.php

    r3451271 r3460397  
    1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => 'b6bb65f13f0b0f2321d8');
     1<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '5dd1ee7d806b20c47405');
  • blogcard-for-wp/tags/2.2.0/build/index.css

    r3451271 r3460397  
    1 .wp-block-su-blogcard.is-selected{padding:1rem}.wp-block-su-blogcard:not(.is-selected){& .wp-blogcard{margin:0!important}}.wp-blogcard-item{pointer-events:none}.wpbc-search-results{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;left:0;overflow-y:auto;position:absolute;right:0;top:100%;z-index:1000}.wpbc-search-results-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:8px 12px}.wpbc-search-close{align-items:center;background:none;border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;font-size:18px;height:24px;justify-content:center;padding:0;transition:all .2s;width:24px}.wpbc-search-close:hover{background:#e9ecef;color:#333}.wpbc-search-results-list{margin:0;max-height:400px;overflow-y:auto;padding-left:0}.wpbc-search-result-item{border-bottom:1px solid #f0f0f0;cursor:pointer;display:flex;flex-direction:row-reverse;padding:12px;transition:background-color .2s}.wpbc-search-result-item:hover{background-color:#f8f9fa}.wpbc-search-result-item:last-child{border-bottom:none}.wpbc-search-result-thumbnail{flex-shrink:0;height:50px;margin-right:12px}.wpbc-search-result-thumbnail img{border-radius:4px;height:50px;object-fit:cover;width:50px}.wpbc-search-result-content{flex:1;min-width:0}.wpbc-search-result-title{color:#333;font-size:14px;font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpbc-search-result-meta{color:#666;display:flex;font-size:12px;gap:8px;margin-bottom:4px}.wpbc-search-result-type{background:#e9ecef;border-radius:3px;font-size:11px;padding:2px 6px}.wpbc-search-result-excerpt{color:#666;display:-webkit-box;font-size:12px;-webkit-line-clamp:2;line-height:1.4;overflow:hidden;-webkit-box-orient:vertical}.wpbc-search-loading,.wpbc-search-no-results{color:#666;font-size:14px;padding:20px;text-align:center}.wpbc-show-link-button{cursor:pointer;font-size:.75rem}.blogcard-url-input{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px}.blogcard-actions{text-align:center}.blogcard-actions .button{margin:0 5px}.editor-post-featured-image__toggle:has(* img){aspect-ratio:16/9;height:auto}
     1.wp-block-su-blogcard{box-sizing:initial}.wp-block-su-blogcard.is-selected{padding:1rem}.wp-block-su-blogcard:not(.is-selected){& .wp-blogcard{margin:0!important}}.wp-blogcard-item{pointer-events:none}.wpbc-search-input{position:relative;&:has(input[disabled]),input[disabled]{color:var(--color-text-light)}input[disabled]{border-color:var(--color-ui)}}.wpbc-search-buttons{margin-top:.75rem;span{font-size:.75rem;margin-left:.5rem}}.wpbc-search-results{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;left:0;overflow-y:auto;position:absolute;right:0;top:100%;z-index:1000}.wpbc-search-results-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:8px 12px}.wpbc-search-close{align-items:center;background:none;border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;font-size:18px;height:24px;justify-content:center;padding:0;transition:all .2s;width:24px}.wpbc-search-close:hover{background:#e9ecef;color:#333}.wpbc-search-results-list{margin:0;max-height:400px;overflow-y:auto;padding-left:0}.wpbc-search-result-item{border-bottom:1px solid #f0f0f0;cursor:pointer;display:flex;flex-direction:row-reverse;padding:12px;transition:background-color .2s}.wpbc-search-result-item:hover{background-color:#f8f9fa}.wpbc-search-result-item:last-child{border-bottom:none}.wpbc-search-result-thumbnail{flex-shrink:0;height:50px;margin-right:12px}.wpbc-search-result-thumbnail img{border-radius:4px;height:50px;object-fit:cover;width:89px}.wpbc-search-result-content{flex:1;min-width:0}.wpbc-search-result-title{color:#333;font-size:14px;font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpbc-search-result-meta{color:#666;display:flex;font-size:12px;gap:8px;margin-bottom:4px}.wpbc-search-result-type{background:#e9ecef;border-radius:3px;font-size:11px;padding:2px 6px}.wpbc-search-result-excerpt{color:#666;display:-webkit-box;font-size:12px;-webkit-line-clamp:2;line-height:1.4;overflow:hidden;-webkit-box-orient:vertical}.wpbc-search-loading,.wpbc-search-no-results{color:#666;font-size:14px;padding:20px;text-align:center}.wpbc-show-link-button{cursor:pointer;font-size:.75rem}.wpbc-cached-label{color:var(--color-text-light);font-size:.625rem;line-height:1;padding:.125rem .25rem}.blogcard-url-input{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px}.blogcard-actions{text-align:center}.blogcard-preview{margin-top:.75rem}.blogcard-actions .button{margin:0 5px}.editor-post-featured-image__toggle:has(* img){aspect-ratio:16/9;height:auto}
  • blogcard-for-wp/tags/2.2.0/build/index.js

    r3451271 r3460397  
    1 (()=>{"use strict";var e,t={486:(e,t,n)=>{const l=window.wp.blocks,r=window.React,a=window.wp.blockEditor,c=window.wp.element,o=window.wp.i18n,s=window.wp.apiFetch;var i=n.n(s);const p=window.wp.components;function u(e){return!(!e||e.length<10)&&URL.canParse(e)}function m(e){if(!e)return!1;try{const t=new URL(e),n=new URL(window.location.href).hostname,l=t.hostname;return n===l||!(!n.endsWith("."+l)&&!l.endsWith("."+n))}catch{return!1}}function d({results:e,isLoading:t,onSelect:n,onClose:l,error:a}){return(0,r.createElement)("div",{className:"wpbc-search-results"},(0,r.createElement)("div",{className:"wpbc-search-results-header"},(0,r.createElement)("span",null,(0,o.__)("検索結果","wpbc")),(0,r.createElement)("button",{type:"button",className:"wpbc-search-close",onClick:l},"×")),t?(0,r.createElement)("div",{className:"wpbc-search-loading"},(0,r.createElement)(p.Spinner,null),(0,o.__)("検索中...","wpbc")):a?(0,r.createElement)("div",{className:"wpbc-search-error",style:{color:"#cc0000",padding:"10px",textAlign:"center"}},a):e&&e.length>0?(0,r.createElement)("ul",{className:"wpbc-search-results-list"},e.map(e=>(0,r.createElement)("li",{key:e.id,className:"wpbc-search-result-item",onClick:()=>n(e)},e.thumbnail&&(0,r.createElement)("div",{className:"wpbc-search-result-thumbnail"},(0,r.createElement)("img",{src:e.thumbnail,alt:e.title,width:"60",height:"60"})),(0,r.createElement)("div",{className:"wpbc-search-result-content"},(0,r.createElement)("div",{className:"wpbc-search-result-title"},e.title),(0,r.createElement)("div",{className:"wpbc-search-result-meta"},(0,r.createElement)("span",{className:"wpbc-search-result-type"},"post"===e.type?(0,o.__)("投稿","wpbc"):(0,o.__)("固定ページ","wpbc")),(0,r.createElement)("span",{className:"wpbc-search-result-date"},e.date)),e.excerpt&&(0,r.createElement)("div",{className:"wpbc-search-result-excerpt"},e.excerpt))))):(0,r.createElement)("div",{className:"wpbc-search-no-results"},(0,o.__)("検索結果が見つかりませんでした","wpbc")))}function b({value:e,onChange:t,onKeyDown:n,onSelectResult:l,placeholder:a=(0,o.__)("https://example.com or キーワード","wpbc"),label:s=(0,o.__)("URLまたはサイト内検索","wpbc"),showSearch:m=!1,disabled:b=!1}){const h=u(e),[w,g]=(0,c.useState)([]),[_,f]=(0,c.useState)(!1),[E,v]=(0,c.useState)(!1),[y,x]=(0,c.useState)(""),C=(0,c.useRef)(null),k=(0,c.useCallback)(async e=>{if(!e||e.length<2)return g([]),v(!1),void x("");C.current&&C.current.abort(),C.current=new AbortController,f(!0),x("");try{const t=await i()({path:`/wpbc/v1/search?q=${encodeURIComponent(e)}`,method:"GET",signal:C.current.signal});t&&t.success?(g(t.data||[]),v(!0),x("")):(g([]),v(!1),x((0,o.__)("検索に失敗しました。","wpbc")))}catch(e){if("AbortError"===e.name)return;g([]),v(!1),x((0,o.__)("検索中にエラーが発生しました。","wpbc"))}finally{f(!1)}},[]);return(0,c.useEffect)(()=>{if(m&&!b){if(!e||""===e.trim())return g([]),v(!1),void x("");if(!h){const t=setTimeout(()=>{k(e)},300);return()=>{clearTimeout(t),C.current&&C.current.abort()}}g([]),v(!1),x("")}},[e,m,b,h,k]),(0,c.useEffect)(()=>{h&&(g([]),v(!1),f(!1),x(""))},[h]),(0,c.useEffect)(()=>()=>{C.current&&C.current.abort()},[]),(0,r.createElement)("div",{style:{position:"relative"}},(0,r.createElement)(p.TextControl,{label:s,value:e,onChange:t,onKeyDown:t=>{"Enter"===t.key&&(t.preventDefault(),u(e)&&n&&n(t))},placeholder:a,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),m&&!b&&e&&""!==e.trim()&&!u(e)&&(E||y)&&(0,r.createElement)(d,{results:w,isLoading:_,onSelect:e=>{t(e.url),l&&l(e),v(!1),g([])},onClose:()=>{v(!1),g([])},error:y}))}function h({attributes:e}){const{url:t,title:n,description:l,thumbnailUrl:a,thumbnailId:c,showThumbnail:o,favicon:s,target:i="_blank",noopener:p=!0,nofollow:u=!1,noreferrer:m=!1,sponsored:d=!1,ugc:b=!1,isSelected:h=!1}=e,w=[];p&&w.push("noopener"),m&&w.push("noreferrer"),u&&w.push("nofollow"),d&&w.push("sponsored"),b&&w.push("ugc");const g=w.length>0?w.join(" "):"",_=a,f=o&&_;return(0,r.createElement)("article",{className:"wp-blogcard",cite:t},(0,r.createElement)("a",{href:t,target:i||void 0,rel:g||void 0,className:"wp-blogcard-item"},f&&(0,r.createElement)("figure",{className:"wp-blogcard-figure"},(0,r.createElement)("img",{src:_,alt:"","aria-hidden":"true"})),(0,r.createElement)("div",{className:"wp-blogcard-content"},(0,r.createElement)("div",{className:"wp-blogcard-title"},n),(0,r.createElement)("div",{className:"wp-blogcard-description"},l),(0,r.createElement)("div",{className:"wp-blogcard-cite"},s&&(0,r.createElement)("img",{className:"wp-blogcard-favicon",src:s,alt:"","aria-hidden":"true"}),(0,r.createElement)("div",{className:"wp-blogcard-domain"},function(e){try{return new URL(e).hostname}catch{return""}}(t))))))}function w({url:e,cached:t,onOpenLink:n}){return(0,r.createElement)("div",{className:"blogcard-preview-footer",style:{marginTop:"10px",display:"flex",justifyContent:"space-between",alignItems:"center"}},(0,r.createElement)("div",{style:{fontSize:"12px",color:"#666",display:"flex",alignItems:"center",gap:"4px"}},t&&(0,r.createElement)("span",{style:{padding:"2px 6px",borderRadius:"3px",fontSize:"10px",fontWeight:"bold"}},"CACHED")),(0,r.createElement)(p.Button,{type:"button",className:"wpbc-show-link-button",onClick:()=>n(e),disabled:!e,variant:"secondary",size:"small"},(0,o.__)("リンク先を表示","wpbc")))}function g({error:e,errorCode:t}){return e?(0,r.createElement)("div",{style:{color:"#cc0000",fontSize:"14px",margin:"8px 0",padding:"8px 0"}},e,t&&(0,r.createElement)("span",{style:{marginLeft:"8px",color:"#666",fontSize:"12px"}},"(",t,")")):null}function _({message:e=(0,o.__)("メタデータを取得中...","wpbc")}){return(0,r.createElement)("div",{style:{textAlign:"center",padding:"1.25rem"}},(0,r.createElement)(p.Spinner,null),(0,r.createElement)("p",{style:{fontSize:"0.875rem"}},e))}function f({attributes:e,setAttributes:t,inputUrl:n,setInputUrl:l,handleKeyDown:c}){const{target:s,noopener:i,nofollow:u,noreferrer:m,sponsored:d,ugc:b,showThumbnail:h,title:w,description:g,thumbnailUrl:_,thumbnailId:f}=e,v=()=>f&&_?(0,r.createElement)("div",{style:{width:"100%",aspectRatio:"16/9",overflow:"hidden",borderRadius:"4px",backgroundColor:"#f0f0f0",display:"flex",alignItems:"center",justifyContent:"center"}},(0,r.createElement)("img",{src:_,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})):(0,r.createElement)("div",{style:{backgroundColor:"#f0f0f0",borderRadius:"4px",display:"flex",alignItems:"center",justifyContent:"center",color:"#666",fontSize:"14px"}},(0,o.__)("サムネイルを設定","wpbc"));return(0,r.createElement)(a.InspectorControls,null,(0,r.createElement)(p.PanelBody,{title:(0,o.__)("ブロック設定","wpbc"),initialOpen:!0},(0,r.createElement)(p.TextControl,{label:(0,o.__)("URL","wpbc"),value:n,onChange:e=>l(e),onKeyDown:c,placeholder:(0,o.__)("https://example.com or キーワード","wpbc")}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("TARGET属性","wpbc")),(0,r.createElement)(p.SelectControl,{label:(0,o.__)("TARGET属性","wpbc"),value:s,onChange:e=>{t("_blank"===e?{target:e,noopener:!0}:{target:e})},options:[{label:(0,o.__)("なし","wpbc"),value:""},{label:(0,o.__)("_blank(別タブ)","wpbc"),value:"_blank"},{label:(0,o.__)("_self (同じタブ)","wpbc"),value:"_self"}]}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("Rel属性","wpbc")),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("noopener を追加","wpbc"),checked:i,disabled:"_blank"===s,onChange:e=>t({noopener:e})}),"_blank"===s&&(0,r.createElement)("p",{style:{fontSize:"12px",color:"#666",margin:"8px 0"}},(0,o.__)("_blankの場合はセキュリティ上noopenerが必須です","wpbc")),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("rel=nofollow を追加","wpbc"),checked:u,onChange:e=>t({nofollow:e})}),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("rel=noreferrer を追加","wpbc"),checked:m,onChange:e=>t({noreferrer:e})}),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("rel=sponsored を追加","wpbc"),checked:d,onChange:e=>t({sponsored:e})}),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("rel=ugc を追加","wpbc"),checked:b,onChange:e=>t({ugc:e})}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("サムネイル","wpbc")),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("サムネイルを表示しない","wpbc"),checked:!h,onChange:e=>t({showThumbnail:!e})}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("タイトルを手動で入力","wpbc")),(0,r.createElement)(p.TextControl,{label:(0,o.__)("タイトル","wpbc"),value:w,onChange:e=>t({title:e}),placeholder:(0,o.__)("タイトルを入力","wpbc")}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("説明文を手動で入力","wpbc")),(0,r.createElement)(p.TextControl,{label:(0,o.__)("説明文","wpbc"),value:g,onChange:e=>t({description:e}),placeholder:(0,o.__)("説明文を入力","wpbc")}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)(p.BaseControl,{label:(0,o.__)("サムネイルを手動で設定","wpbc")},(0,r.createElement)(a.MediaUploadCheck,null,(0,r.createElement)(a.MediaUpload,{onSelect:e=>{t({thumbnailId:e.id,thumbnailUrl:e.url,showThumbnail:!0})},allowedTypes:["image"],value:f,render:({open:e})=>(0,r.createElement)(p.Button,{onClick:e,className:"editor-post-featured-image__toggle"},(0,r.createElement)(v,null))})),(0,r.createElement)(p.Button,{style:{marginTop:"0.5rem"},className:"is-tertiary",onClick:()=>{t({thumbnailId:0,thumbnailUrl:"",showThumbnail:!1})}},(0,o.__)("クリア","wpbc"))),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("キャッシュ管理","wpbc")),(0,r.createElement)("div",{style:{display:"flex",gap:"10px",flexWrap:"wrap"}},(0,r.createElement)(p.Button,{secondary:!0,onClick:E("plugin"),style:{fontSize:"12px"}},(0,o.__)("ブログカードキャッシュクリア","wpbc")),(0,r.createElement)(p.Button,{isDestructive:!0,onClick:()=>{confirm((0,o.__)("全てのWordPressキャッシュをクリアしますか?","wpbc"))&&E("all")()},style:{fontSize:"12px"}},(0,o.__)("全キャッシュクリア","wpbc")))))}function E(e="plugin"){return async()=>{try{const t=await i()({path:"/wpbc/v1/clear-cache",method:"POST",data:{type:e}});t.success?alert(t.message):alert((0,o.__)("キャッシュのクリアに失敗しました。","wpbc"))}catch(e){console.error("Cache clear error:",e),alert((0,o.__)("キャッシュのクリア中にエラーが発生しました。","wpbc"))}}}(0,l.registerBlockType)("su/blogcard",{edit:function({attributes:e,setAttributes:t}){const{url:n,showThumbnail:l,title:s,description:p,thumbnailUrl:d,favicon:E}=e,[v,y]=(0,c.useState)(n||""),[x,C]=(0,c.useState)(!1),[k,T]=(0,c.useState)(""),[N,S]=(0,c.useState)(""),[R,U]=(0,c.useState)(!1),O=(0,a.useBlockProps)(),I=O.className?.includes("is-selected")||!1,D=e=>{"Enter"===e.key&&(e.preventDefault(),u(v)&&(v!==n&&t({url:"",title:"",description:"",thumbnailUrl:"",showThumbnail:!1,favicon:""}),(async()=>{if(!v||v.trim().length<10||!u(v))return T(""),void S("");C(!0),T(""),S("");try{const e=m(v)?`/wpbc/v1/internal-metadata?url=${encodeURIComponent(v)}`:"/wpbc/v1/metadata",n=await i()({path:e,method:m(v)?"GET":"POST",data:m(v)?void 0:{url:v}});if(n.success){const e=n.data;t({url:v,title:e.title||v,description:e.description||"",thumbnailUrl:e.thumbnail||"",showThumbnail:!!e.thumbnail,favicon:e.favicon||""}),U(!0===e.cached),T(""),S("")}else{const e=n.message||n.data?.message||(0,o.__)("メタデータの取得に失敗しました。","wpbc"),t=n.code||n.data?.code||"UNKNOWN_ERROR";T(e),S(t)}}catch(e){const t=e.status||e.code||"NETWORK_ERROR";let n=e.message||(0,o.__)("メタデータの取得中にエラーが発生しました。","wpbc");e.data&&e.data.message&&(n=e.data.message),T(n),S(t)}finally{C(!1)}})()))},z=e=>{y(e.url),T(""),S(""),U(!1),t({url:e.url,title:e.title||e.url,description:e.excerpt||"",thumbnailUrl:e.thumbnail||"",showThumbnail:!!e.thumbnail,favicon:e.favicon||""})};return(0,r.createElement)("div",{...O},(0,r.createElement)(f,{attributes:e,setAttributes:t,inputUrl:v,setInputUrl:y,handleKeyDown:D}),n||k?(0,r.createElement)("div",null,x&&(0,r.createElement)(_,null),I&&(0,r.createElement)(b,{key:"selected-search-input",value:v,onChange:e=>y(e),onKeyDown:D,onSelectResult:z,showSearch:!0,disabled:!1}),(0,r.createElement)(g,{error:k,errorCode:N}),!x&&!k&&n&&(0,r.createElement)("div",{className:"blogcard-preview"},(0,r.createElement)(h,{attributes:{url:n,title:s,description:p,thumbnailUrl:d,showThumbnail:l,favicon:E,isSelected:I}}),I&&(0,r.createElement)(w,{url:n,cached:R,onOpenLink:e=>{window.open(e,"_blank")}}))):(0,r.createElement)(b,{key:"placeholder-search-input",value:v,onChange:e=>y(e),onKeyDown:D,onSelectResult:z,showSearch:!0,disabled:!1}))},save:function(){return null}})}},n={};function l(e){var r=n[e];if(void 0!==r)return r.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,l),a.exports}l.m=t,e=[],l.O=(t,n,r,a)=>{if(!n){var c=1/0;for(p=0;p<e.length;p++){for(var[n,r,a]=e[p],o=!0,s=0;s<n.length;s++)(!1&a||c>=a)&&Object.keys(l.O).every(e=>l.O[e](n[s]))?n.splice(s--,1):(o=!1,a<c&&(c=a));if(o){e.splice(p--,1);var i=r();void 0!==i&&(t=i)}}return t}a=a||0;for(var p=e.length;p>0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[n,r,a]},l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={57:0,350:0};l.O.j=t=>0===e[t];var t=(t,n)=>{var r,a,[c,o,s]=n,i=0;if(c.some(t=>0!==e[t])){for(r in o)l.o(o,r)&&(l.m[r]=o[r]);if(s)var p=s(l)}for(t&&t(n);i<c.length;i++)a=c[i],l.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return l.O(p)},n=globalThis.webpackChunkblogcard_for_wp=globalThis.webpackChunkblogcard_for_wp||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var r=l.O(void 0,[350],()=>l(486));r=l.O(r)})();
     1(()=>{"use strict";var e,t={486:(e,t,l)=>{const a=window.wp.blocks,n=window.React,r=window.wp.blockEditor,c=window.wp.element,o=window.wp.i18n,s=window.wp.apiFetch;var i=l.n(s);const p=window.wp.components;function m(e){return!(!e||e.length<10)&&URL.canParse(e)}function u(e){if(!e)return!1;try{const t=new URL(e),l=new URL(window.location.href).hostname,a=t.hostname;return l===a||!(!l.endsWith("."+a)&&!a.endsWith("."+l))}catch{return!1}}function d({results:e,isLoading:t,onSelect:l,onClose:a,error:r}){return(0,n.createElement)("div",{className:"wpbc-search-results"},(0,n.createElement)("div",{className:"wpbc-search-results-header"},(0,n.createElement)("span",null,(0,o.__)("検索結果","wpbc")),(0,n.createElement)("button",{type:"button",className:"wpbc-search-close",onClick:a},"×")),t?(0,n.createElement)("div",{className:"wpbc-search-loading"},(0,n.createElement)(p.Spinner,null),(0,o.__)("検索中...","wpbc")):r?(0,n.createElement)("div",{className:"wpbc-search-error",style:{color:"#cc0000",padding:"10px",textAlign:"center"}},r):e&&e.length>0?(0,n.createElement)("ul",{className:"wpbc-search-results-list"},e.map(e=>(0,n.createElement)("li",{key:e.id,className:"wpbc-search-result-item",onClick:()=>l(e)},e.thumbnail&&(0,n.createElement)("div",{className:"wpbc-search-result-thumbnail"},(0,n.createElement)("img",{src:e.thumbnail,alt:e.title,width:"60",height:"60"})),(0,n.createElement)("div",{className:"wpbc-search-result-content"},(0,n.createElement)("div",{className:"wpbc-search-result-title"},e.title),(0,n.createElement)("div",{className:"wpbc-search-result-meta"},(0,n.createElement)("span",{className:"wpbc-search-result-type"},"post"===e.type?(0,o.__)("投稿","wpbc"):(0,o.__)("固定ページ","wpbc")),(0,n.createElement)("span",{className:"wpbc-search-result-date"},e.date)),e.excerpt&&(0,n.createElement)("div",{className:"wpbc-search-result-excerpt"},e.excerpt))))):(0,n.createElement)("div",{className:"wpbc-search-no-results"},(0,o.__)("検索結果が見つかりませんでした","wpbc")))}function b({value:e,onChange:t,onKeyDown:l,onSelectResult:a,placeholder:r=(0,o.__)("https://example.com or キーワード","wpbc"),label:s=(0,o.__)("URLまたはサイト内検索","wpbc"),showSearch:u=!1,disabled:b=!1}){const h=m(e),[w,_]=(0,c.useState)([]),[g,E]=(0,c.useState)(!1),[f,v]=(0,c.useState)(!1),[y,x]=(0,c.useState)(""),C=(0,c.useRef)(null),k=(0,c.useCallback)(async e=>{if(!e||e.length<2)return _([]),v(!1),void x("");C.current&&C.current.abort(),C.current=new AbortController,E(!0),x("");try{const t=await i()({path:`/wpbc/v1/search?q=${encodeURIComponent(e)}`,method:"GET",signal:C.current.signal});t&&t.success?(_(t.data||[]),v(!0),x("")):(_([]),v(!1),x((0,o.__)("検索に失敗しました。","wpbc")))}catch(e){if("AbortError"===e.name)return;_([]),v(!1),x((0,o.__)("検索中にエラーが発生しました。","wpbc"))}finally{E(!1)}},[]);return(0,c.useEffect)(()=>{if(u&&!b){if(!e||""===e.trim())return _([]),v(!1),void x("");if(!h){const t=setTimeout(()=>{k(e)},300);return()=>{clearTimeout(t),C.current&&C.current.abort()}}_([]),v(!1),x("")}},[e,u,b,h,k]),(0,c.useEffect)(()=>{h&&(_([]),v(!1),E(!1),x(""))},[h]),(0,c.useEffect)(()=>()=>{C.current&&C.current.abort()},[]),(0,n.createElement)("div",{className:"wpbc-search-input"},(0,n.createElement)(p.TextControl,{label:s,value:e,onChange:t,onKeyDown:t=>{"Enter"===t.key&&(t.preventDefault(),m(e)&&l&&l(t))},placeholder:r,disabled:b,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),u&&!b&&e&&""!==e.trim()&&!m(e)&&(f||y)&&(0,n.createElement)(d,{results:w,isLoading:g,onSelect:e=>{t(e.url),a&&a(e),v(!1),_([])},onClose:()=>{v(!1),_([])},error:y}))}function h({attributes:e}){const{url:t,title:l,description:a,thumbnailUrl:r,thumbnailId:c,showThumbnail:o,favicon:s,target:i="_blank",noopener:p=!0,nofollow:m=!1,noreferrer:u=!1,sponsored:d=!1,ugc:b=!1,isSelected:h=!1,isManual:w=!1}=e,_=[];p&&_.push("noopener"),u&&_.push("noreferrer"),m&&_.push("nofollow"),d&&_.push("sponsored"),b&&_.push("ugc");const g=_.length>0?_.join(" "):"",E=r,f=o&&E,v=w&&h&&!l,y=w&&h&&!a;return(0,n.createElement)("article",{className:"wp-blogcard",cite:t},(0,n.createElement)("a",{href:t,target:i||void 0,rel:g||void 0,className:"wp-blogcard-item"},f&&(0,n.createElement)("figure",{className:"wp-blogcard-figure"},(0,n.createElement)("img",{src:E,alt:"","aria-hidden":"true"})),(0,n.createElement)("div",{className:"wp-blogcard-content"},(0,n.createElement)("div",{className:"wp-blogcard-title"},l||(v?(0,n.createElement)("span",{className:"wp-blogcard-placeholder"},"Title Placeholder"):"")),(0,n.createElement)("div",{className:"wp-blogcard-description"},a||(y?(0,n.createElement)("span",{className:"wp-blogcard-placeholder"},"Description Placeholder"):"")),(0,n.createElement)("div",{className:"wp-blogcard-cite"},s&&(0,n.createElement)("img",{className:"wp-blogcard-favicon",src:s||"",alt:"","aria-hidden":"true"}),(0,n.createElement)("div",{className:"wp-blogcard-domain"},function(e){try{return new URL(e).hostname}catch{return""}}(t))))))}function w({url:e,cached:t,onOpenLink:l}){return(0,n.createElement)(p.Flex,{className:"blogcard-preview-footer",justify:"space-between",align:"center",style:{marginTop:"0.25rem"}},(0,n.createElement)(p.FlexItem,null,t?(0,n.createElement)("div",{className:"wpbc-cached-label"},"Cached"):null),(0,n.createElement)(p.FlexItem,null,(0,n.createElement)(p.Button,{type:"button",className:"wpbc-show-link-button",onClick:()=>l(e),disabled:!e,variant:"tertiary",size:"medium"},(0,o.__)("リンク先を確認","wpbc"))))}function _({error:e,errorCode:t}){return e?(0,n.createElement)("div",{style:{color:"#cc0000",fontSize:"14px",margin:"8px 0",padding:"8px 0"}},e,t&&(0,n.createElement)("span",{style:{marginLeft:"8px",color:"#666",fontSize:"12px"}},"(",t,")")):null}function g({message:e=(0,o.__)("メタデータを取得中...","wpbc")}){return(0,n.createElement)("div",{style:{textAlign:"center",padding:"1.25rem"}},(0,n.createElement)(p.Spinner,null),(0,n.createElement)("p",{style:{fontSize:"0.875rem"}},e))}function E({attributes:e,setAttributes:t,inputUrl:l,setInputUrl:a,handleKeyDown:c}){const{target:s,noopener:i,nofollow:m,noreferrer:u,sponsored:d,ugc:b,showThumbnail:h,title:w,description:_,thumbnailUrl:g,thumbnailId:E,favicon:v}=e,y=()=>E&&g?(0,n.createElement)("div",{style:{width:"100%",aspectRatio:"16/9",overflow:"hidden",borderRadius:"4px",backgroundColor:"#f0f0f0",display:"flex",alignItems:"center",justifyContent:"center"}},(0,n.createElement)("img",{src:g,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})):(0,n.createElement)("div",{style:{backgroundColor:"#f0f0f0",borderRadius:"4px",display:"flex",alignItems:"center",justifyContent:"center",color:"#666",fontSize:"14px"}},(0,o.__)("サムネイルを設定","wpbc"));return(0,n.createElement)(r.InspectorControls,null,(0,n.createElement)(p.PanelBody,{title:(0,o.__)("ブロック設定","wpbc"),initialOpen:!0},(0,n.createElement)(p.TextControl,{label:(0,o.__)("URL","wpbc"),value:l,onChange:e=>a(e),onKeyDown:c,placeholder:(0,o.__)("https://example.com or キーワード","wpbc")}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("TARGET属性","wpbc")),(0,n.createElement)(p.SelectControl,{label:(0,o.__)("TARGET属性","wpbc"),value:s,onChange:e=>{t("_blank"===e?{target:e,noopener:!0}:{target:e})},options:[{label:(0,o.__)("なし","wpbc"),value:""},{label:(0,o.__)("_blank(別タブ)","wpbc"),value:"_blank"},{label:(0,o.__)("_self (同じタブ)","wpbc"),value:"_self"}]}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("Rel属性","wpbc")),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("noopener を追加","wpbc"),checked:i,disabled:"_blank"===s,onChange:e=>t({noopener:e})}),"_blank"===s&&(0,n.createElement)("p",{style:{fontSize:"12px",color:"#666",margin:"8px 0"}},(0,o.__)("_blankの場合はセキュリティ上noopenerが必須です","wpbc")),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("rel=nofollow を追加","wpbc"),checked:m,onChange:e=>t({nofollow:e})}),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("rel=noreferrer を追加","wpbc"),checked:u,onChange:e=>t({noreferrer:e})}),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("rel=sponsored を追加","wpbc"),checked:d,onChange:e=>t({sponsored:e})}),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("rel=ugc を追加","wpbc"),checked:b,onChange:e=>t({ugc:e})}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("サムネイル","wpbc")),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("サムネイルを表示しない","wpbc"),checked:!h,onChange:e=>t({showThumbnail:!e})}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("タイトルを手動で入力","wpbc")),(0,n.createElement)(p.TextControl,{label:(0,o.__)("タイトル","wpbc"),value:w,onChange:e=>t({title:e}),placeholder:(0,o.__)("タイトルを入力","wpbc")}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("説明文を手動で入力","wpbc")),(0,n.createElement)(p.TextControl,{label:(0,o.__)("説明文","wpbc"),value:_,onChange:e=>t({description:e}),placeholder:(0,o.__)("説明文を入力","wpbc")}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("Faviconを手動で入力","wpbc")),(0,n.createElement)(p.TextControl,{label:(0,o.__)("Favicon URL","wpbc"),value:v,onChange:e=>t({favicon:e}),placeholder:(0,o.__)("https://example.com/favicon.ico","wpbc")}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)(p.BaseControl,{label:(0,o.__)("サムネイルを手動で設定","wpbc")},(0,n.createElement)(r.MediaUploadCheck,null,(0,n.createElement)(r.MediaUpload,{onSelect:e=>{t({thumbnailId:e.id,thumbnailUrl:e.url,showThumbnail:!0})},allowedTypes:["image"],value:E,render:({open:e})=>(0,n.createElement)(p.Button,{onClick:e,className:"editor-post-featured-image__toggle"},(0,n.createElement)(y,null))})),(0,n.createElement)(p.Button,{style:{marginTop:"0.5rem"},className:"is-tertiary",onClick:()=>{t({thumbnailId:0,thumbnailUrl:"",showThumbnail:!1})}},(0,o.__)("クリア","wpbc"))),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("キャッシュ管理","wpbc")),(0,n.createElement)("div",{style:{display:"flex",gap:"10px",flexWrap:"wrap"}},(0,n.createElement)(p.Button,{secondary:!0,onClick:f("plugin"),style:{fontSize:"12px"}},(0,o.__)("このブログカードのキャッシュをクリア","wpbc")),(0,n.createElement)(p.Button,{isDestructive:!0,onClick:()=>{f("all")()}},(0,o.__)("すべてのブログカードのキャッシュをクリア","wpbc")))))}function f(e="plugin"){return async()=>{try{const t=await i()({path:"/wpbc/v1/clear-cache",method:"POST",data:{type:e}});t.success?alert(t.message):alert((0,o.__)("キャッシュのクリアに失敗しました。","wpbc"))}catch(e){console.error("Cache clear error:",e),alert((0,o.__)("キャッシュのクリア中にエラーが発生しました。","wpbc"))}}}const v=()=>window.wpbcSettings||{external_target:"_blank",internal_target:"_self"};(0,a.registerBlockType)("su/blogcard",{edit:function({attributes:e,setAttributes:t}){const{url:l,title:a,description:s,thumbnailUrl:d,showThumbnail:f,favicon:y,isManual:x}=e,[C,k]=(0,c.useState)(l||""),[N,T]=(0,c.useState)(!1),[S,R]=(0,c.useState)(""),[U,O]=(0,c.useState)(""),[I,B]=(0,c.useState)(!1),F=(0,r.useBlockProps)(),L=F.className?.includes("is-selected")||!1,D=async()=>{if(!C||C.trim().length<10||!m(C))return R(""),void O("");T(!0),R(""),O("");try{const e=u(C)?`/wpbc/v1/internal-metadata?url=${encodeURIComponent(C)}`:"/wpbc/v1/metadata",l=await i()({path:e,method:u(C)?"GET":"POST",data:u(C)?void 0:{url:C}});if(l.success){const e=l.data,a=v(),n=u(C)?a.internal_target:a.external_target;t({url:C,title:e.title||C,description:e.description||"",thumbnailUrl:e.thumbnail||"",showThumbnail:!!e.thumbnail,favicon:e.favicon||"",target:n,isManual:!1}),B(!0===e.cached),R(""),O("")}else{const e=l.message||l.data?.message||(0,o.__)("メタデータの取得に失敗しました。","wpbc"),t=l.code||l.data?.code||"UNKNOWN_ERROR";R(e),O(t)}}catch(e){const t=e.status||e.code||"NETWORK_ERROR";let l=e.message||(0,o.__)("メタデータの取得中にエラーが発生しました。","wpbc");e.data&&e.data.message&&(l=e.data.message),R(l),O(t)}finally{T(!1)}},j=e=>{if("Enter"===e.key){if(e.preventDefault(),l)return;m(C)&&D()}};return(0,n.createElement)("div",{...F},(0,n.createElement)(E,{attributes:e,setAttributes:t,inputUrl:C,setInputUrl:k,handleKeyDown:j}),l?(0,n.createElement)(n.Fragment,null,N&&(0,n.createElement)(g,null),L&&(0,n.createElement)("div",{className:"wpbc-input-wrapper"},(0,n.createElement)(b,{key:"locked-search-input",value:C,onChange:k,showSearch:!1,disabled:!0,label:"",placeholder:(0,o.__)("https://example.com","wpbc"),help:(0,o.__)("URLを変更するにはブロックを削除して再作成してください","wpbc")})),(0,n.createElement)(_,{error:S,errorCode:U}),!N&&!S&&(0,n.createElement)("div",{className:"blogcard-preview"},(0,n.createElement)(h,{attributes:{url:l,title:a,description:s,thumbnailUrl:d,showThumbnail:f,favicon:y,isManual:x,isSelected:L}}),L&&(0,n.createElement)(w,{url:l,cached:I,onOpenLink:e=>{window.open(e,"_blank")}}))):(0,n.createElement)(n.Fragment,null,(0,n.createElement)(n.Fragment,null,(0,n.createElement)(b,{key:"placeholder-search-input",value:C,onChange:k,onKeyDown:j,onSelectResult:e=>{k(e.url),R(""),O(""),B(!1);const l=v(),a=u(e.url)?l.internal_target:l.external_target;t({url:e.url,title:e.title||e.url,description:e.description||e.excerpt||"",thumbnailUrl:e.thumbnail||"",showThumbnail:!!e.thumbnail,favicon:e.favicon||"",target:a,isManual:!1})},showSearch:!0,disabled:!1,placeholder:(0,o.__)("https://example.com or 検索キーワード","wpbc")}),C&&m(C)&&(0,n.createElement)(p.Flex,{gap:2,className:"wpbc-search-buttons",justify:"flex-end"},(0,n.createElement)(p.FlexItem,null,(0,n.createElement)(p.Button,{variant:"tertiary",onClick:()=>{C&&t({url:C,title:"",description:"",thumbnailUrl:"",showThumbnail:!1,favicon:"",isManual:!0})},disabled:N},(0,o.__)("手動で作成","wpbc"))),(0,n.createElement)(p.FlexItem,null,(0,n.createElement)(p.Button,{variant:"primary",onClick:D,isBusy:N,disabled:N},(0,o.__)("検索して作成","wpbc")," ",(0,n.createElement)("span",null,"Enter"))))),N&&(0,n.createElement)(g,null),(0,n.createElement)(_,{error:S,errorCode:U})))},save:function(){return null}})}},l={};function a(e){var n=l[e];if(void 0!==n)return n.exports;var r=l[e]={exports:{}};return t[e](r,r.exports,a),r.exports}a.m=t,e=[],a.O=(t,l,n,r)=>{if(!l){var c=1/0;for(p=0;p<e.length;p++){for(var[l,n,r]=e[p],o=!0,s=0;s<l.length;s++)(!1&r||c>=r)&&Object.keys(a.O).every(e=>a.O[e](l[s]))?l.splice(s--,1):(o=!1,r<c&&(c=r));if(o){e.splice(p--,1);var i=n();void 0!==i&&(t=i)}}return t}r=r||0;for(var p=e.length;p>0&&e[p-1][2]>r;p--)e[p]=e[p-1];e[p]=[l,n,r]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var l in t)a.o(t,l)&&!a.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={57:0,350:0};a.O.j=t=>0===e[t];var t=(t,l)=>{var n,r,[c,o,s]=l,i=0;if(c.some(t=>0!==e[t])){for(n in o)a.o(o,n)&&(a.m[n]=o[n]);if(s)var p=s(a)}for(t&&t(l);i<c.length;i++)r=c[i],a.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return a.O(p)},l=globalThis.webpackChunkblogcard_for_wp=globalThis.webpackChunkblogcard_for_wp||[];l.forEach(t.bind(null,0)),l.push=t.bind(null,l.push.bind(l))})();var n=a.O(void 0,[350],()=>a(486));n=a.O(n)})();
  • blogcard-for-wp/tags/2.2.0/build/style-index-rtl.css

    r3451275 r3460397  
    1 :where(.wp-block-su-blogcard){margin-block:1.5rem}.wp-block-su-blogcard{container-type:inline-size;--color-text:#18181b;--color-text-light:#71717b;--color-ui:#e4e4e7;--color-surface:#f4f4f5;--color-background:#fff;--border-radius:0.75rem;--padding:1.25rem 1.5rem;--image-width:28%}.dark .wp-block-su-blogcard{--color-text:#f4f4f5;--color-text-light:#9f9fa9;--color-ui:#27272a;--color-surface:#18181b;--color-background:#09090b;--color-white:#09090b}.wp-blogcard{background-color:var(--color-background);border:1px solid var(--color-ui);border-radius:var(--border-radius);color:var(--color-text);overflow:hidden;transition:background-color .2s ease;&:hover{background-color:var(--color-surface);color:var(--color-text)}}.wp-blogcard-item{display:flex;flex-direction:row-reverse;text-decoration:none!important}.wp-blogcard-figure{align-self:stretch;flex-shrink:0;height:auto;margin:0;overflow:hidden;width:var(--image-width)}.wp-blogcard-figure img{height:100%;object-fit:cover;width:100%}.wp-blogcard-content{display:flex;flex:1;flex-direction:column;gap:.5rem;padding:var(--padding)}.wp-blogcard-title{color:var(--color-text);display:-webkit-box;font-kerning:normal;font-size:.875rem;font-weight:700;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-description{display:none}.wp-blogcard-cite{align-items:center;color:#999;display:flex;font-size:.9rem;margin:0}.wp-blogcard-favicon{border-radius:.125rem;height:16px;margin-left:.5rem;width:16px}.wp-blogcard-domain{color:var(--color-text-light);font-size:.675rem}@container (min-width: 32rem){.wp-blogcard-title{font-size:1rem}.wp-blogcard-description{color:var(--color-text-light);display:-webkit-box;font-size:.75rem;hyphens:auto;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-domain{font-size:.75rem}}
     1:where(.wp-block-su-blogcard){margin-block:1.5rem}.wp-block-su-blogcard{container-type:inline-size;--color-text:#18181b;--color-text-light:#71717b;--color-ui:#e4e4e7;--color-surface:#f4f4f5;--color-background:#fff;--border-radius:0.75rem;--padding:1.25rem 1.5rem;--image-width:28%}.dark .wp-block-su-blogcard{--color-text:#f4f4f5;--color-text-light:#9f9fa9;--color-ui:#27272a;--color-surface:#18181b;--color-background:#09090b;--color-white:#09090b}.wp-blogcard{background-color:var(--color-background);border:1px solid var(--color-ui);border-radius:var(--border-radius);color:var(--color-text);overflow:hidden;transition:background-color .2s ease;&:hover{background-color:var(--color-surface);color:var(--color-text)}}.wp-blogcard-item{display:flex;flex-direction:row-reverse;text-decoration:none!important}.wp-blogcard-figure{align-self:stretch;flex-shrink:0;height:auto;margin:0;overflow:hidden;width:var(--image-width)}.wp-blogcard-figure img{height:100%;object-fit:cover;width:100%}.wp-blogcard-content{display:flex;flex:1;flex-direction:column;gap:.5rem;padding:var(--padding)}.wp-blogcard-title{color:var(--color-text);display:-webkit-box;font-kerning:normal;font-size:.875rem;font-weight:700;-webkit-line-clamp:2;line-height:1.5;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-description{display:none}.wp-blogcard-cite{align-items:center;color:#999;display:flex;font-size:.9rem;margin:0}.wp-blogcard-favicon{border-radius:.125rem;height:16px;margin-left:.5rem;width:16px}.wp-blogcard-domain{color:var(--color-text-light);font-size:.675rem}@container (min-width: 32rem){.wp-blogcard-title{font-size:1rem}.wp-blogcard-description{color:var(--color-text-light);display:-webkit-box;font-size:.75rem;hyphens:auto;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-domain{font-size:.75rem}}
  • blogcard-for-wp/tags/2.2.0/build/style-index.css

    r3451275 r3460397  
    1 :where(.wp-block-su-blogcard){margin-block:1.5rem}.wp-block-su-blogcard{container-type:inline-size;--color-text:#18181b;--color-text-light:#71717b;--color-ui:#e4e4e7;--color-surface:#f4f4f5;--color-background:#fff;--border-radius:0.75rem;--padding:1.25rem 1.5rem;--image-width:28%}.dark .wp-block-su-blogcard{--color-text:#f4f4f5;--color-text-light:#9f9fa9;--color-ui:#27272a;--color-surface:#18181b;--color-background:#09090b;--color-white:#09090b}.wp-blogcard{background-color:var(--color-background);border:1px solid var(--color-ui);border-radius:var(--border-radius);color:var(--color-text);overflow:hidden;transition:background-color .2s ease;&:hover{background-color:var(--color-surface);color:var(--color-text)}}.wp-blogcard-item{display:flex;flex-direction:row-reverse;text-decoration:none!important}.wp-blogcard-figure{align-self:stretch;flex-shrink:0;height:auto;margin:0;overflow:hidden;width:var(--image-width)}.wp-blogcard-figure img{height:100%;object-fit:cover;width:100%}.wp-blogcard-content{display:flex;flex:1;flex-direction:column;gap:.5rem;padding:var(--padding)}.wp-blogcard-title{color:var(--color-text);display:-webkit-box;font-kerning:normal;font-size:.875rem;font-weight:700;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-description{display:none}.wp-blogcard-cite{align-items:center;color:#999;display:flex;font-size:.9rem;margin:0}.wp-blogcard-favicon{border-radius:.125rem;height:16px;margin-right:.5rem;width:16px}.wp-blogcard-domain{color:var(--color-text-light);font-size:.675rem}@container (min-width: 32rem){.wp-blogcard-title{font-size:1rem}.wp-blogcard-description{color:var(--color-text-light);display:-webkit-box;font-size:.75rem;hyphens:auto;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-domain{font-size:.75rem}}
     1:where(.wp-block-su-blogcard){margin-block:1.5rem}.wp-block-su-blogcard{container-type:inline-size;--color-text:#18181b;--color-text-light:#71717b;--color-ui:#e4e4e7;--color-surface:#f4f4f5;--color-background:#fff;--border-radius:0.75rem;--padding:1.25rem 1.5rem;--image-width:28%}.dark .wp-block-su-blogcard{--color-text:#f4f4f5;--color-text-light:#9f9fa9;--color-ui:#27272a;--color-surface:#18181b;--color-background:#09090b;--color-white:#09090b}.wp-blogcard{background-color:var(--color-background);border:1px solid var(--color-ui);border-radius:var(--border-radius);color:var(--color-text);overflow:hidden;transition:background-color .2s ease;&:hover{background-color:var(--color-surface);color:var(--color-text)}}.wp-blogcard-item{display:flex;flex-direction:row-reverse;text-decoration:none!important}.wp-blogcard-figure{align-self:stretch;flex-shrink:0;height:auto;margin:0;overflow:hidden;width:var(--image-width)}.wp-blogcard-figure img{height:100%;object-fit:cover;width:100%}.wp-blogcard-content{display:flex;flex:1;flex-direction:column;gap:.5rem;padding:var(--padding)}.wp-blogcard-title{color:var(--color-text);display:-webkit-box;font-kerning:normal;font-size:.875rem;font-weight:700;-webkit-line-clamp:2;line-height:1.5;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-description{display:none}.wp-blogcard-cite{align-items:center;color:#999;display:flex;font-size:.9rem;margin:0}.wp-blogcard-favicon{border-radius:.125rem;height:16px;margin-right:.5rem;width:16px}.wp-blogcard-domain{color:var(--color-text-light);font-size:.675rem}@container (min-width: 32rem){.wp-blogcard-title{font-size:1rem}.wp-blogcard-description{color:var(--color-text-light);display:-webkit-box;font-size:.75rem;hyphens:auto;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-domain{font-size:.75rem}}
  • blogcard-for-wp/tags/2.2.0/languages/blogcard-for-wp-en_US.po

    r3357123 r3460397  
    66msgid ""
    77msgstr ""
    8 "Project-Id-Version: Blogcard for WP 2.0.0\n"
     8"Project-Id-Version: Blogcard for WP 2.1.2\n"
    99"Report-Msgid-Bugs-To: \n"
    1010"POT-Creation-Date: 2024-12-19 12:00+0000\n"
     
    2727
    2828#: src/components/Controls.js:91
     29#: src/components/SearchInput.js:13
     30#: src/components/SearchInput.js:178
    2931msgid "https://example.com or キーワード"
    3032msgstr "https://example.com or keywords"
    3133
    3234#: src/components/Controls.js:96
     35#: src/components/Controls.js:98
    3336msgid "TARGET属性"
    3437msgstr "TARGET Attribute"
     
    106109msgstr "Enter description"
    107110
     111#: src/components/Controls.js:180
     112msgid "Faviconを手動で入力"
     113msgstr "Enter Favicon Manually"
     114
     115#: src/components/Controls.js:182
     116msgid "Favicon URL"
     117msgstr "Favicon URL"
     118
     119#: src/components/Controls.js:185
     120msgid "https://example.com/favicon.ico"
     121msgstr "https://example.com/favicon.ico"
     122
    108123#: src/components/Controls.js:77
    109124msgid "サムネイルを設定"
     
    123138
    124139#: src/components/Controls.js:228
    125 msgid "ブログカードキャッシュクリア"
    126 msgstr "Clear Blog Card Cache"
    127 
    128 #: src/components/Controls.js:235
    129 msgid "全てのWordPressキャッシュをクリアしますか?"
    130 msgstr "Clear all WordPress cache?"
    131 
    132 #: src/components/Controls.js:243
    133 msgid "全キャッシュクリア"
    134 msgstr "Clear All Cache"
     140msgid "このブログカードのキャッシュをクリア"
     141msgstr "Clear cache for this blog card"
     142
     143#: src/components/Controls.js:236
     144msgid "すべてのブログカードのキャッシュをクリア"
     145msgstr "Clear cache for all blog cards"
    135146
    136147#: src/components/Controls.js:264
     
    147158
    148159#: src/components/PreviewFooter.js:46
    149 msgid "リンク先を表示"
    150 msgstr "View Link"
     160msgid "リンク先を確認"
     161msgstr "Check Link"
    151162
    152163#: src/components/SearchInput.js:14
     
    182193msgstr "No search results found"
    183194
     195#: src/edit.jsx:165
     196#: src/edit.jsx:198
     197msgid "検索して作成"
     198msgstr "Search & Create"
     199
     200#: src/edit.jsx:174
     201#: src/edit.jsx:188
     202msgid "手動で作成"
     203msgstr "Create Manually"
     204
     205#: src/edit.jsx:215
     206#: src/edit.jsx:239
     207msgid "https://example.com"
     208msgstr "https://example.com"
     209
     210#: src/edit.jsx:216
     211#: src/edit.jsx:240
     212msgid "URLを変更するにはブロックを削除して再作成してください"
     213msgstr "To change the URL, please delete the block and recreate it"
     214
    184215#: src/edit.js:88
     216#: blogcard-for-wp.php:155
     217#: blogcard-for-wp.php:214
    185218msgid "メタデータの取得に失敗しました。"
    186219msgstr "Failed to fetch metadata."
     
    199232
    200233#: blogcard-for-wp.php:106
     234#: blogcard-for-wp.php:134
     235#: blogcard-for-wp.php:143
     236#: blogcard-for-wp.php:171
     237#: blogcard-for-wp.php:194
    201238msgid "URLが指定されていません。"
    202239msgstr "URL is not specified."
    203240
    204241#: blogcard-for-wp.php:204
     242#: blogcard-for-wp.php:241
     243#: blogcard-for-wp.php:264
    205244msgid "無効なURL形式です。"
    206245msgstr "Invalid URL format."
    207246
    208247#: blogcard-for-wp.php:256
     248#: blogcard-for-wp.php:296
     249#: blogcard-for-wp.php:324
    209250msgid "サーバーの応答が遅すぎます。しばらく時間をおいてから再度お試しください。"
    210251msgstr "Server response is too slow. Please try again after a while."
    211252
    212253#: blogcard-for-wp.php:260
     254#: blogcard-for-wp.php:300
     255#: blogcard-for-wp.php:328
    213256msgid "サーバーに接続できませんでした。"
    214257msgstr "Could not connect to server."
    215258
    216259#: blogcard-for-wp.php:264
     260#: blogcard-for-wp.php:304
     261#: blogcard-for-wp.php:332
    217262msgid "SSL証明書の検証に失敗しました。"
    218263msgstr "SSL certificate verification failed."
    219264
    220265#: blogcard-for-wp.php:278
     266#: blogcard-for-wp.php:318
     267#: blogcard-for-wp.php:346
    221268msgid "HTTPエラーが発生しました"
    222269msgstr "HTTP error occurred"
    223270
    224271#: blogcard-for-wp.php:281
     272#: blogcard-for-wp.php:321
     273#: blogcard-for-wp.php:349
    225274msgid "ページが見つかりません (404)"
    226275msgstr "Page not found (404)"
    227276
    228277#: blogcard-for-wp.php:284
     278#: blogcard-for-wp.php:324
     279#: blogcard-for-wp.php:352
    229280msgid "アクセスが拒否されました (403)"
    230281msgstr "Access denied (403)"
    231282
    232283#: blogcard-for-wp.php:287
     284#: blogcard-for-wp.php:327
     285#: blogcard-for-wp.php:355
    233286msgid "サーバーエラーが発生しました (500)"
    234287msgstr "Server error occurred (500)"
    235288
    236289#: blogcard-for-wp.php:290
     290#: blogcard-for-wp.php:330
     291#: blogcard-for-wp.php:358
    237292msgid "サービスが利用できません (503)"
    238293msgstr "Service unavailable (503)"
    239294
    240295#: blogcard-for-wp.php:293
     296#: blogcard-for-wp.php:333
     297#: blogcard-for-wp.php:361
    241298msgid "HTTPエラーが発生しました (%d)"
    242299msgstr "HTTP error occurred (%d)"
    243300
    244301#: blogcard-for-wp.php:376
     302#: blogcard-for-wp.php:419
     303#: blogcard-for-wp.php:452
    245304msgid "検索クエリが指定されていません。"
    246305msgstr "Search query is not specified."
    247306
    248307#: blogcard-for-wp.php:432
     308#: blogcard-for-wp.php:476
     309#: blogcard-for-wp.php:509
    249310msgid "指定されたURLの投稿が見つかりません。"
    250311msgstr "Post not found for the specified URL."
    251312
    252313#: blogcard-for-wp.php:478
     314#: blogcard-for-wp.php:522
     315#: blogcard-for-wp.php:555
    253316msgid "全てのキャッシュをクリアしました。"
    254317msgstr "All cache cleared."
    255318
    256319#: blogcard-for-wp.php:486
     320#: blogcard-for-wp.php:530
     321#: blogcard-for-wp.php:563
    257322msgid "ブログカードのキャッシュをクリアしました。"
    258323msgstr "Blog card cache cleared."
     324
     325#: includes/admin-settings.php:16
     326msgid "SU Blogcard"
     327msgstr "SU Blogcard"
     328
     329#: includes/admin-settings.php:33
     330msgid "一般設定"
     331msgstr "General Settings"
     332
     333#: includes/admin-settings.php:40
     334msgid "外部リンクのターゲット"
     335msgstr "External Link Target"
     336
     337#: includes/admin-settings.php:48
     338msgid "内部リンクのターゲット"
     339msgstr "Internal Link Target"
     340
     341#: includes/admin-settings.php:56
     342msgid "キャッシュ保持期間"
     343msgstr "Cache Duration"
     344
     345#: includes/admin-settings.php:64
     346msgid "データ削除設定"
     347msgstr "Data Deletion Settings"
     348
     349#: includes/admin-settings.php:98
     350#: includes/admin-settings.php:113
     351msgid "_blank (新しいタブで開く)"
     352msgstr "_blank (Open in new tab)"
     353
     354#: includes/admin-settings.php:99
     355#: includes/admin-settings.php:114
     356msgid "_self (同じタブで開く)"
     357msgstr "_self (Open in same tab)"
     358
     359#: includes/admin-settings.php:101
     360msgid "外部サイトへのリンクのデフォルトのターゲット属性を設定します。"
     361msgstr "Sets the default target attribute for links to external sites."
     362
     363#: includes/admin-settings.php:116
     364msgid "自サイト内へのリンクのデフォルトのターゲット属性を設定します。"
     365msgstr "Sets the default target attribute for links within your own site."
     366
     367#: includes/admin-settings.php:128
     368msgid "ブログカードのメタデータ情報のキャッシュ保持期間を設定します(単位:時間)。"
     369msgstr "Sets the cache retention period for blog card metadata (in hours)."
     370
     371#: includes/admin-settings.php:141
     372msgid "プラグイン削除時にすべてのデータ(設定とキャッシュ)を削除する"
     373msgstr "Delete all data (settings and cache) when deleting the plugin"
     374
     375#: includes/admin-settings.php:143
     376msgid "この設定を有効にすると、プラグインをアンインストールした際に、保存された設定とキャッシュデータがすべて削除されます。"
     377msgstr "If this setting is enabled, all saved settings and cache data will be deleted when the plugin is uninstalled."
  • blogcard-for-wp/tags/2.2.0/languages/blogcard-for-wp.pot

    r3357123 r3460397  
    77msgid ""
    88msgstr ""
    9 "Project-Id-Version: Blogcard for WP 2.0.0\n"
     9"Project-Id-Version: Blogcard for WP 2.1.2\n"
    1010"Report-Msgid-Bugs-To: \n"
    1111"POT-Creation-Date: 2024-12-19 12:00+0000\n"
     
    2828
    2929#: src/components/Controls.js:91
     30#: src/components/SearchInput.js:13
     31#: src/components/SearchInput.js:178
    3032msgid "https://example.com or キーワード"
    3133msgstr ""
    3234
    3335#: src/components/Controls.js:96
    34 msgid "TARGET属性"
    35 msgstr ""
    36 
    3736#: src/components/Controls.js:98
    3837msgid "TARGET属性"
     
    111110msgstr ""
    112111
     112#: src/components/Controls.js:180
     113msgid "Faviconを手動で入力"
     114msgstr ""
     115
     116#: src/components/Controls.js:182
     117msgid "Favicon URL"
     118msgstr ""
     119
     120#: src/components/Controls.js:185
     121msgid "https://example.com/favicon.ico"
     122msgstr ""
     123
    113124#: src/components/Controls.js:77
    114125msgid "サムネイルを設定"
     
    128139
    129140#: src/components/Controls.js:228
    130 msgid "ブログカードキャッシュクリア"
    131 msgstr ""
    132 
    133 #: src/components/Controls.js:235
    134 msgid "全てのWordPressキャッシュをクリアしますか?"
    135 msgstr ""
    136 
    137 #: src/components/Controls.js:243
    138 msgid "全キャッシュクリア"
     141msgid "このブログカードのキャッシュをクリア"
     142msgstr ""
     143
     144#: src/components/Controls.js:236
     145msgid "すべてのブログカードのキャッシュをクリア"
    139146msgstr ""
    140147
     
    152159
    153160#: src/components/PreviewFooter.js:46
    154 msgid "リンク先を表示"
    155 msgstr ""
    156 
    157 #: src/components/SearchInput.js:13
    158 msgid "https://example.com or キーワード"
     161msgid "リンク先を確認"
    159162msgstr ""
    160163
     
    191194msgstr ""
    192195
     196#: src/edit.jsx:165
     197#: src/edit.jsx:198
     198msgid "検索して作成"
     199msgstr ""
     200
     201#: src/edit.jsx:174
     202#: src/edit.jsx:188
     203msgid "手動で作成"
     204msgstr ""
     205
     206#: src/edit.jsx:215
     207#: src/edit.jsx:239
     208msgid "https://example.com"
     209msgstr ""
     210
     211#: src/edit.jsx:216
     212#: src/edit.jsx:240
     213msgid "URLを変更するにはブロックを削除して再作成してください"
     214msgstr ""
     215
    193216#: src/edit.js:88
     217#: blogcard-for-wp.php:155
     218#: blogcard-for-wp.php:214
    194219msgid "メタデータの取得に失敗しました。"
    195220msgstr ""
     
    208233
    209234#: blogcard-for-wp.php:106
     235#: blogcard-for-wp.php:134
     236#: blogcard-for-wp.php:143
     237#: blogcard-for-wp.php:171
     238#: blogcard-for-wp.php:194
    210239msgid "URLが指定されていません。"
    211240msgstr ""
    212241
    213 #: blogcard-for-wp.php:118
    214 msgid "メタデータの取得に失敗しました。"
    215 msgstr ""
    216 
    217 #: blogcard-for-wp.php:134
    218 msgid "URLが指定されていません。"
    219 msgstr ""
    220 
    221242#: blogcard-for-wp.php:204
     243#: blogcard-for-wp.php:241
     244#: blogcard-for-wp.php:264
    222245msgid "無効なURL形式です。"
    223246msgstr ""
    224247
    225248#: blogcard-for-wp.php:256
     249#: blogcard-for-wp.php:296
     250#: blogcard-for-wp.php:324
    226251msgid "サーバーの応答が遅すぎます。しばらく時間をおいてから再度お試しください。"
    227252msgstr ""
    228253
    229254#: blogcard-for-wp.php:260
     255#: blogcard-for-wp.php:300
     256#: blogcard-for-wp.php:328
    230257msgid "サーバーに接続できませんでした。"
    231258msgstr ""
    232259
    233260#: blogcard-for-wp.php:264
     261#: blogcard-for-wp.php:304
     262#: blogcard-for-wp.php:332
    234263msgid "SSL証明書の検証に失敗しました。"
    235264msgstr ""
    236265
    237266#: blogcard-for-wp.php:278
     267#: blogcard-for-wp.php:318
     268#: blogcard-for-wp.php:346
    238269msgid "HTTPエラーが発生しました"
    239270msgstr ""
    240271
    241272#: blogcard-for-wp.php:281
     273#: blogcard-for-wp.php:321
     274#: blogcard-for-wp.php:349
    242275msgid "ページが見つかりません (404)"
    243276msgstr ""
    244277
    245278#: blogcard-for-wp.php:284
     279#: blogcard-for-wp.php:324
     280#: blogcard-for-wp.php:352
    246281msgid "アクセスが拒否されました (403)"
    247282msgstr ""
    248283
    249284#: blogcard-for-wp.php:287
     285#: blogcard-for-wp.php:327
     286#: blogcard-for-wp.php:355
    250287msgid "サーバーエラーが発生しました (500)"
    251288msgstr ""
    252289
    253290#: blogcard-for-wp.php:290
     291#: blogcard-for-wp.php:330
     292#: blogcard-for-wp.php:358
    254293msgid "サービスが利用できません (503)"
    255294msgstr ""
    256295
    257296#: blogcard-for-wp.php:293
     297#: blogcard-for-wp.php:333
     298#: blogcard-for-wp.php:361
    258299msgid "HTTPエラーが発生しました (%d)"
    259300msgstr ""
    260301
    261302#: blogcard-for-wp.php:376
     303#: blogcard-for-wp.php:419
     304#: blogcard-for-wp.php:452
    262305msgid "検索クエリが指定されていません。"
    263306msgstr ""
    264307
    265308#: blogcard-for-wp.php:432
     309#: blogcard-for-wp.php:476
     310#: blogcard-for-wp.php:509
    266311msgid "指定されたURLの投稿が見つかりません。"
    267312msgstr ""
    268313
    269314#: blogcard-for-wp.php:478
     315#: blogcard-for-wp.php:522
     316#: blogcard-for-wp.php:555
    270317msgid "全てのキャッシュをクリアしました。"
    271318msgstr ""
    272319
    273320#: blogcard-for-wp.php:486
     321#: blogcard-for-wp.php:530
     322#: blogcard-for-wp.php:563
    274323msgid "ブログカードのキャッシュをクリアしました。"
    275324msgstr ""
     325
     326#: includes/admin-settings.php:16
     327msgid "SU Blogcard"
     328msgstr ""
     329
     330#: includes/admin-settings.php:33
     331msgid "一般設定"
     332msgstr ""
     333
     334#: includes/admin-settings.php:40
     335msgid "外部リンクのターゲット"
     336msgstr ""
     337
     338#: includes/admin-settings.php:48
     339msgid "内部リンクのターゲット"
     340msgstr ""
     341
     342#: includes/admin-settings.php:56
     343msgid "キャッシュ保持期間"
     344msgstr ""
     345
     346#: includes/admin-settings.php:64
     347msgid "データ削除設定"
     348msgstr ""
     349
     350#: includes/admin-settings.php:98
     351#: includes/admin-settings.php:113
     352msgid "_blank (新しいタブで開く)"
     353msgstr ""
     354
     355#: includes/admin-settings.php:99
     356#: includes/admin-settings.php:114
     357msgid "_self (同じタブで開く)"
     358msgstr ""
     359
     360#: includes/admin-settings.php:101
     361msgid "外部サイトへのリンクのデフォルトのターゲット属性を設定します。"
     362msgstr ""
     363
     364#: includes/admin-settings.php:116
     365msgid "自サイト内へのリンクのデフォルトのターゲット属性を設定します。"
     366msgstr ""
     367
     368#: includes/admin-settings.php:128
     369msgid "ブログカードのメタデータ情報のキャッシュ保持期間を設定します(単位:時間)。"
     370msgstr ""
     371
     372#: includes/admin-settings.php:141
     373msgid "プラグイン削除時にすべてのデータ(設定とキャッシュ)を削除する"
     374msgstr ""
     375
     376#: includes/admin-settings.php:143
     377msgid "この設定を有効にすると、プラグインをアンインストールした際に、保存された設定とキャッシュデータがすべて削除されます。"
     378msgstr ""
  • blogcard-for-wp/tags/2.2.0/readme-ja.txt

    r3451271 r3460397  
    55Tested up to: 6.8.2
    66Requires PHP: 7.4
    7 Stable tag: 2.1.0
     7Stable tag: 2.2.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    1818バージョン2.0.0からの新機能で、サイト内検索からブログカードを作ることができるようになりました。
    1919これによって、自分のサイト内の記事を検索ワードからブログカード化できるようになりました。
     20
     21バージョン2.2.0では、外部リンクと内部リンクのデフォルトターゲット属性、キャッシュ保持期間、データ削除オプションを設定できる設定ページが追加されました。また、FaviconのURLを手動で設定できるようになりました。
    2022
    2123> **【重要な変更点】(2.1.0〜)**
     
    3638* **サイト内検索**: サイト内の投稿を検索してブログカード化可能
    3739* **ダークモード対応** .darkクラスによるダークモードに対応
     40* **高度な管理機能**: デフォルトのリンクターゲット、キャッシュ期間、手動Favicon設定が可能
    3841
    3942== インストール ==
     
    100103
    101104== Changelog ==
     105
     106= 2.2.0 =
     107* 新機能: 外部リンク・内部リンクのデフォルトターゲット属性を設定する機能を追加。
     108* 新機能: FaviconのURLを手動で設定する機能を追加。
     109* 新機能: キャッシュ保持期間を設定する機能を追加。
     110* 新機能: アンインストール時にプラグインデータを削除するオプションを追加。
     111* 改善: ブロックエディターのUIレイアウトを調整。
     112* 更新: 内部コード構造のリファクタリング。
     113
     114= 2.1.2 =
     115* CSSの更新。
    102116
    103117= 2.1.0 =
  • blogcard-for-wp/tags/2.2.0/readme.txt

    r3451275 r3460397  
    55Tested up to: 6.9
    66Requires PHP: 7.4
    7 Stable tag: 2.1.2
     7Stable tag: 2.2.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    3838* **Site Search**: Search and convert internal posts into blog cards
    3939* **Dark Mode Support**: Supports dark mode with .dark class
     40* **Advanced Management**: Configure default link targets, cache duration, and manual favicon support
    4041
    4142== Installation ==
     
    102103
    103104== Changelog ==
     105
     106= 2.2.0 =
     107* New Feature: Added settings page for default link target attributes and cache configuration.
     108* New Feature: Added ability to manually set Favicon URL.
     109* Improvement: Updated block editor UI layout.
     110* Improvement: Added option to delete plugin data on uninstallation.
     111* Update: Refactored internal code structure.
    104112
    105113= 2.1.2 =
  • blogcard-for-wp/trunk/blogcard-for-wp.php

    r3451275 r3460397  
    55 * Plugin URI: https://wordpress.org/plugins/blogcard-for-wp/
    66 * Description: URLを入力してブログカードを生成するブロックプラグイン
    7  * Version: 2.1.2
     7 * Version: 2.2.0
    88 * Author: Takashi Fujisaki
    99 * License: GPL v2 or later
     
    1818// プラグインの定数
    1919define( 'WPBC_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
     20
     21// 管理画面設定の読み込み
     22require_once WPBC_PLUGIN_PATH . 'includes/admin-settings.php';
    2023
    2124/**
     
    4952    // ブロックの登録
    5053    register_block_type( WPBC_PLUGIN_PATH . 'build/block.json' );
     54
     55    // 設定をブロックエディタに渡す
     56    add_action( 'enqueue_block_editor_assets', 'wpbc_enqueue_editor_assets' );
    5157}
    5258add_action( 'init', 'wpbc_init' );
     59
     60/**
     61 * ブロックエディタ用アセットのエンキュー
     62 */
     63function wpbc_enqueue_editor_assets() {
     64    $options  = get_option( 'wpbc_settings' );
     65    $settings = array(
     66        'external_target' => isset( $options['external_target'] ) ? $options['external_target'] : '_blank',
     67        'internal_target' => isset( $options['internal_target'] ) ? $options['internal_target'] : '_self',
     68    );
     69
     70    wp_add_inline_script(
     71        'wp-blocks',
     72        'window.wpbcSettings = ' . json_encode( $settings ) . ';',
     73        'before'
     74    );
     75}
    5376
    5477/**
     
    249272        }
    250273
    251         // キャッシュに保存(24時間)
    252         set_transient( $cache_key, $metadata, 24 * HOUR_IN_SECONDS );
     274        // キャッシュ期間を取得(デフォルト24時間)
     275        $options        = get_option( 'wpbc_settings' );
     276        $cache_duration = isset( $options['cache_duration'] ) ? (int) $options['cache_duration'] : 24;
     277        $expiration     = $cache_duration * HOUR_IN_SECONDS;
     278
     279        // キャッシュに保存
     280        set_transient( $cache_key, $metadata, $expiration );
    253281
    254282        return $metadata;
     
    394422        }
    395423
    396         // ファビコンを取得
     424        // Faviconを取得
    397425        $favicon_url = wpbc_get_favicon_url( $xpath, $url );
    398426        if ( $favicon_url ) {
     
    404432    $metadata['cached'] = false;
    405433
    406     // キャッシュに保存(24時間)
    407     set_transient( $cache_key, $metadata, 24 * HOUR_IN_SECONDS );
     434    // キャッシュ期間を取得(デフォルト24時間)
     435    $options        = get_option( 'wpbc_settings' );
     436    $cache_duration = isset( $options['cache_duration'] ) ? (int) $options['cache_duration'] : 24;
     437    $expiration     = $cache_duration * HOUR_IN_SECONDS;
     438
     439    // キャッシュに保存
     440    set_transient( $cache_key, $metadata, $expiration );
    408441
    409442    return $metadata;
     
    450483    foreach ( $sorted_posts as $post ) {
    451484        $results[] = array(
    452             'id'        => $post->ID,
    453             'title'     => get_the_title( $post->ID ),
    454             'url'       => get_permalink( $post->ID ),
    455             'type'      => get_post_type( $post->ID ),
    456             'date'      => get_the_date( 'Y-m-d', $post->ID ),
    457             'thumbnail' => get_the_post_thumbnail_url( $post->ID, 'thumbnail' ),
     485            'id'          => $post->ID,
     486            'title'       => get_the_title( $post->ID ),
     487            'url'         => get_permalink( $post->ID ),
     488            'type'        => get_post_type( $post->ID ),
     489            'date'        => get_the_date( 'Y-m-d', $post->ID ),
     490            'thumbnail'   => get_the_post_thumbnail_url( $post->ID, 'large' ),
     491            'description' => get_the_excerpt( $post->ID ),
    458492        );
    459493    }
     
    538572
    539573/**
    540  * ファビコンを取得する関数
     574 * Faviconを取得する関数
    541575 */
    542576function wpbc_get_favicon_url( $xpath, $base_url ) {
    543577    $favicon_url = null;
    544578
    545     // ファビコンのURLを取得するクエリ(優先順位順)
     579    // FaviconのURLを取得するクエリ(優先順位順)
    546580    $queries = array(
    547581        "//link[@rel='icon' and @type='image/svg+xml']",
     
    566600                $temp_url = wpbc_convert_to_absolute_url( $temp_url, $base_url );
    567601
    568                 // ファビコンのURLが有効かチェック
     602                // FaviconのURLが有効かチェック
    569603                if ( wpbc_check_favicon_exists( $temp_url ) ) {
    570604                    return $temp_url;
     
    574608    }
    575609
    576     // ドメイン直下のファビコンを探す
     610    // ドメイン直下のFaviconを探す
    577611    $default_favicons = array(
    578612        wpbc_convert_to_absolute_url( '/favicon.svg', $base_url ),
     
    610644
    611645/**
    612  * ファビコンが存在するかチェックする
     646 * Faviconが存在するかチェックする
    613647 */
    614648function wpbc_check_favicon_exists( $url ) {
  • blogcard-for-wp/trunk/build/block.json

    r3451271 r3460397  
    33  "apiVersion": 3,
    44  "name": "su/blogcard",
    5   "version": "2.1.0",
     5  "version": "2.2.0",
    66  "title": "ブログカード",
    77  "category": "su-blocks",
     
    8585      "type": "string",
    8686      "default": ""
     87    },
     88    "isManual": {
     89      "type": "boolean",
     90      "default": false
    8791    }
    8892  }
  • blogcard-for-wp/trunk/build/index-rtl.css

    r3451271 r3460397  
    1 .wp-block-su-blogcard.is-selected{padding:1rem}.wp-block-su-blogcard:not(.is-selected){& .wp-blogcard{margin:0!important}}.wp-blogcard-item{pointer-events:none}.wpbc-search-results{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;right:0;overflow-y:auto;position:absolute;left:0;top:100%;z-index:1000}.wpbc-search-results-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:8px 12px}.wpbc-search-close{align-items:center;background:none;border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;font-size:18px;height:24px;justify-content:center;padding:0;transition:all .2s;width:24px}.wpbc-search-close:hover{background:#e9ecef;color:#333}.wpbc-search-results-list{margin:0;max-height:400px;overflow-y:auto;padding-right:0}.wpbc-search-result-item{border-bottom:1px solid #f0f0f0;cursor:pointer;display:flex;flex-direction:row-reverse;padding:12px;transition:background-color .2s}.wpbc-search-result-item:hover{background-color:#f8f9fa}.wpbc-search-result-item:last-child{border-bottom:none}.wpbc-search-result-thumbnail{flex-shrink:0;height:50px;margin-left:12px}.wpbc-search-result-thumbnail img{border-radius:4px;height:50px;object-fit:cover;width:50px}.wpbc-search-result-content{flex:1;min-width:0}.wpbc-search-result-title{color:#333;font-size:14px;font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpbc-search-result-meta{color:#666;display:flex;font-size:12px;gap:8px;margin-bottom:4px}.wpbc-search-result-type{background:#e9ecef;border-radius:3px;font-size:11px;padding:2px 6px}.wpbc-search-result-excerpt{color:#666;display:-webkit-box;font-size:12px;-webkit-line-clamp:2;line-height:1.4;overflow:hidden;-webkit-box-orient:vertical}.wpbc-search-loading,.wpbc-search-no-results{color:#666;font-size:14px;padding:20px;text-align:center}.wpbc-show-link-button{cursor:pointer;font-size:.75rem}.blogcard-url-input{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px}.blogcard-actions{text-align:center}.blogcard-actions .button{margin:0 5px}.editor-post-featured-image__toggle:has(* img){aspect-ratio:16/9;height:auto}
     1.wp-block-su-blogcard{box-sizing:initial}.wp-block-su-blogcard.is-selected{padding:1rem}.wp-block-su-blogcard:not(.is-selected){& .wp-blogcard{margin:0!important}}.wp-blogcard-item{pointer-events:none}.wpbc-search-input{position:relative;&:has(input[disabled]),input[disabled]{color:var(--color-text-light)}input[disabled]{border-color:var(--color-ui)}}.wpbc-search-buttons{margin-top:.75rem;span{font-size:.75rem;margin-right:.5rem}}.wpbc-search-results{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;right:0;overflow-y:auto;position:absolute;left:0;top:100%;z-index:1000}.wpbc-search-results-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:8px 12px}.wpbc-search-close{align-items:center;background:none;border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;font-size:18px;height:24px;justify-content:center;padding:0;transition:all .2s;width:24px}.wpbc-search-close:hover{background:#e9ecef;color:#333}.wpbc-search-results-list{margin:0;max-height:400px;overflow-y:auto;padding-right:0}.wpbc-search-result-item{border-bottom:1px solid #f0f0f0;cursor:pointer;display:flex;flex-direction:row-reverse;padding:12px;transition:background-color .2s}.wpbc-search-result-item:hover{background-color:#f8f9fa}.wpbc-search-result-item:last-child{border-bottom:none}.wpbc-search-result-thumbnail{flex-shrink:0;height:50px;margin-left:12px}.wpbc-search-result-thumbnail img{border-radius:4px;height:50px;object-fit:cover;width:89px}.wpbc-search-result-content{flex:1;min-width:0}.wpbc-search-result-title{color:#333;font-size:14px;font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpbc-search-result-meta{color:#666;display:flex;font-size:12px;gap:8px;margin-bottom:4px}.wpbc-search-result-type{background:#e9ecef;border-radius:3px;font-size:11px;padding:2px 6px}.wpbc-search-result-excerpt{color:#666;display:-webkit-box;font-size:12px;-webkit-line-clamp:2;line-height:1.4;overflow:hidden;-webkit-box-orient:vertical}.wpbc-search-loading,.wpbc-search-no-results{color:#666;font-size:14px;padding:20px;text-align:center}.wpbc-show-link-button{cursor:pointer;font-size:.75rem}.wpbc-cached-label{color:var(--color-text-light);font-size:.625rem;line-height:1;padding:.125rem .25rem}.blogcard-url-input{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px}.blogcard-actions{text-align:center}.blogcard-preview{margin-top:.75rem}.blogcard-actions .button{margin:0 5px}.editor-post-featured-image__toggle:has(* img){aspect-ratio:16/9;height:auto}
  • blogcard-for-wp/trunk/build/index.asset.php

    r3451271 r3460397  
    1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => 'b6bb65f13f0b0f2321d8');
     1<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '5dd1ee7d806b20c47405');
  • blogcard-for-wp/trunk/build/index.css

    r3451271 r3460397  
    1 .wp-block-su-blogcard.is-selected{padding:1rem}.wp-block-su-blogcard:not(.is-selected){& .wp-blogcard{margin:0!important}}.wp-blogcard-item{pointer-events:none}.wpbc-search-results{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;left:0;overflow-y:auto;position:absolute;right:0;top:100%;z-index:1000}.wpbc-search-results-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:8px 12px}.wpbc-search-close{align-items:center;background:none;border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;font-size:18px;height:24px;justify-content:center;padding:0;transition:all .2s;width:24px}.wpbc-search-close:hover{background:#e9ecef;color:#333}.wpbc-search-results-list{margin:0;max-height:400px;overflow-y:auto;padding-left:0}.wpbc-search-result-item{border-bottom:1px solid #f0f0f0;cursor:pointer;display:flex;flex-direction:row-reverse;padding:12px;transition:background-color .2s}.wpbc-search-result-item:hover{background-color:#f8f9fa}.wpbc-search-result-item:last-child{border-bottom:none}.wpbc-search-result-thumbnail{flex-shrink:0;height:50px;margin-right:12px}.wpbc-search-result-thumbnail img{border-radius:4px;height:50px;object-fit:cover;width:50px}.wpbc-search-result-content{flex:1;min-width:0}.wpbc-search-result-title{color:#333;font-size:14px;font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpbc-search-result-meta{color:#666;display:flex;font-size:12px;gap:8px;margin-bottom:4px}.wpbc-search-result-type{background:#e9ecef;border-radius:3px;font-size:11px;padding:2px 6px}.wpbc-search-result-excerpt{color:#666;display:-webkit-box;font-size:12px;-webkit-line-clamp:2;line-height:1.4;overflow:hidden;-webkit-box-orient:vertical}.wpbc-search-loading,.wpbc-search-no-results{color:#666;font-size:14px;padding:20px;text-align:center}.wpbc-show-link-button{cursor:pointer;font-size:.75rem}.blogcard-url-input{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px}.blogcard-actions{text-align:center}.blogcard-actions .button{margin:0 5px}.editor-post-featured-image__toggle:has(* img){aspect-ratio:16/9;height:auto}
     1.wp-block-su-blogcard{box-sizing:initial}.wp-block-su-blogcard.is-selected{padding:1rem}.wp-block-su-blogcard:not(.is-selected){& .wp-blogcard{margin:0!important}}.wp-blogcard-item{pointer-events:none}.wpbc-search-input{position:relative;&:has(input[disabled]),input[disabled]{color:var(--color-text-light)}input[disabled]{border-color:var(--color-ui)}}.wpbc-search-buttons{margin-top:.75rem;span{font-size:.75rem;margin-left:.5rem}}.wpbc-search-results{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;left:0;overflow-y:auto;position:absolute;right:0;top:100%;z-index:1000}.wpbc-search-results-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:8px 12px}.wpbc-search-close{align-items:center;background:none;border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;font-size:18px;height:24px;justify-content:center;padding:0;transition:all .2s;width:24px}.wpbc-search-close:hover{background:#e9ecef;color:#333}.wpbc-search-results-list{margin:0;max-height:400px;overflow-y:auto;padding-left:0}.wpbc-search-result-item{border-bottom:1px solid #f0f0f0;cursor:pointer;display:flex;flex-direction:row-reverse;padding:12px;transition:background-color .2s}.wpbc-search-result-item:hover{background-color:#f8f9fa}.wpbc-search-result-item:last-child{border-bottom:none}.wpbc-search-result-thumbnail{flex-shrink:0;height:50px;margin-right:12px}.wpbc-search-result-thumbnail img{border-radius:4px;height:50px;object-fit:cover;width:89px}.wpbc-search-result-content{flex:1;min-width:0}.wpbc-search-result-title{color:#333;font-size:14px;font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpbc-search-result-meta{color:#666;display:flex;font-size:12px;gap:8px;margin-bottom:4px}.wpbc-search-result-type{background:#e9ecef;border-radius:3px;font-size:11px;padding:2px 6px}.wpbc-search-result-excerpt{color:#666;display:-webkit-box;font-size:12px;-webkit-line-clamp:2;line-height:1.4;overflow:hidden;-webkit-box-orient:vertical}.wpbc-search-loading,.wpbc-search-no-results{color:#666;font-size:14px;padding:20px;text-align:center}.wpbc-show-link-button{cursor:pointer;font-size:.75rem}.wpbc-cached-label{color:var(--color-text-light);font-size:.625rem;line-height:1;padding:.125rem .25rem}.blogcard-url-input{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px}.blogcard-actions{text-align:center}.blogcard-preview{margin-top:.75rem}.blogcard-actions .button{margin:0 5px}.editor-post-featured-image__toggle:has(* img){aspect-ratio:16/9;height:auto}
  • blogcard-for-wp/trunk/build/index.js

    r3451271 r3460397  
    1 (()=>{"use strict";var e,t={486:(e,t,n)=>{const l=window.wp.blocks,r=window.React,a=window.wp.blockEditor,c=window.wp.element,o=window.wp.i18n,s=window.wp.apiFetch;var i=n.n(s);const p=window.wp.components;function u(e){return!(!e||e.length<10)&&URL.canParse(e)}function m(e){if(!e)return!1;try{const t=new URL(e),n=new URL(window.location.href).hostname,l=t.hostname;return n===l||!(!n.endsWith("."+l)&&!l.endsWith("."+n))}catch{return!1}}function d({results:e,isLoading:t,onSelect:n,onClose:l,error:a}){return(0,r.createElement)("div",{className:"wpbc-search-results"},(0,r.createElement)("div",{className:"wpbc-search-results-header"},(0,r.createElement)("span",null,(0,o.__)("検索結果","wpbc")),(0,r.createElement)("button",{type:"button",className:"wpbc-search-close",onClick:l},"×")),t?(0,r.createElement)("div",{className:"wpbc-search-loading"},(0,r.createElement)(p.Spinner,null),(0,o.__)("検索中...","wpbc")):a?(0,r.createElement)("div",{className:"wpbc-search-error",style:{color:"#cc0000",padding:"10px",textAlign:"center"}},a):e&&e.length>0?(0,r.createElement)("ul",{className:"wpbc-search-results-list"},e.map(e=>(0,r.createElement)("li",{key:e.id,className:"wpbc-search-result-item",onClick:()=>n(e)},e.thumbnail&&(0,r.createElement)("div",{className:"wpbc-search-result-thumbnail"},(0,r.createElement)("img",{src:e.thumbnail,alt:e.title,width:"60",height:"60"})),(0,r.createElement)("div",{className:"wpbc-search-result-content"},(0,r.createElement)("div",{className:"wpbc-search-result-title"},e.title),(0,r.createElement)("div",{className:"wpbc-search-result-meta"},(0,r.createElement)("span",{className:"wpbc-search-result-type"},"post"===e.type?(0,o.__)("投稿","wpbc"):(0,o.__)("固定ページ","wpbc")),(0,r.createElement)("span",{className:"wpbc-search-result-date"},e.date)),e.excerpt&&(0,r.createElement)("div",{className:"wpbc-search-result-excerpt"},e.excerpt))))):(0,r.createElement)("div",{className:"wpbc-search-no-results"},(0,o.__)("検索結果が見つかりませんでした","wpbc")))}function b({value:e,onChange:t,onKeyDown:n,onSelectResult:l,placeholder:a=(0,o.__)("https://example.com or キーワード","wpbc"),label:s=(0,o.__)("URLまたはサイト内検索","wpbc"),showSearch:m=!1,disabled:b=!1}){const h=u(e),[w,g]=(0,c.useState)([]),[_,f]=(0,c.useState)(!1),[E,v]=(0,c.useState)(!1),[y,x]=(0,c.useState)(""),C=(0,c.useRef)(null),k=(0,c.useCallback)(async e=>{if(!e||e.length<2)return g([]),v(!1),void x("");C.current&&C.current.abort(),C.current=new AbortController,f(!0),x("");try{const t=await i()({path:`/wpbc/v1/search?q=${encodeURIComponent(e)}`,method:"GET",signal:C.current.signal});t&&t.success?(g(t.data||[]),v(!0),x("")):(g([]),v(!1),x((0,o.__)("検索に失敗しました。","wpbc")))}catch(e){if("AbortError"===e.name)return;g([]),v(!1),x((0,o.__)("検索中にエラーが発生しました。","wpbc"))}finally{f(!1)}},[]);return(0,c.useEffect)(()=>{if(m&&!b){if(!e||""===e.trim())return g([]),v(!1),void x("");if(!h){const t=setTimeout(()=>{k(e)},300);return()=>{clearTimeout(t),C.current&&C.current.abort()}}g([]),v(!1),x("")}},[e,m,b,h,k]),(0,c.useEffect)(()=>{h&&(g([]),v(!1),f(!1),x(""))},[h]),(0,c.useEffect)(()=>()=>{C.current&&C.current.abort()},[]),(0,r.createElement)("div",{style:{position:"relative"}},(0,r.createElement)(p.TextControl,{label:s,value:e,onChange:t,onKeyDown:t=>{"Enter"===t.key&&(t.preventDefault(),u(e)&&n&&n(t))},placeholder:a,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),m&&!b&&e&&""!==e.trim()&&!u(e)&&(E||y)&&(0,r.createElement)(d,{results:w,isLoading:_,onSelect:e=>{t(e.url),l&&l(e),v(!1),g([])},onClose:()=>{v(!1),g([])},error:y}))}function h({attributes:e}){const{url:t,title:n,description:l,thumbnailUrl:a,thumbnailId:c,showThumbnail:o,favicon:s,target:i="_blank",noopener:p=!0,nofollow:u=!1,noreferrer:m=!1,sponsored:d=!1,ugc:b=!1,isSelected:h=!1}=e,w=[];p&&w.push("noopener"),m&&w.push("noreferrer"),u&&w.push("nofollow"),d&&w.push("sponsored"),b&&w.push("ugc");const g=w.length>0?w.join(" "):"",_=a,f=o&&_;return(0,r.createElement)("article",{className:"wp-blogcard",cite:t},(0,r.createElement)("a",{href:t,target:i||void 0,rel:g||void 0,className:"wp-blogcard-item"},f&&(0,r.createElement)("figure",{className:"wp-blogcard-figure"},(0,r.createElement)("img",{src:_,alt:"","aria-hidden":"true"})),(0,r.createElement)("div",{className:"wp-blogcard-content"},(0,r.createElement)("div",{className:"wp-blogcard-title"},n),(0,r.createElement)("div",{className:"wp-blogcard-description"},l),(0,r.createElement)("div",{className:"wp-blogcard-cite"},s&&(0,r.createElement)("img",{className:"wp-blogcard-favicon",src:s,alt:"","aria-hidden":"true"}),(0,r.createElement)("div",{className:"wp-blogcard-domain"},function(e){try{return new URL(e).hostname}catch{return""}}(t))))))}function w({url:e,cached:t,onOpenLink:n}){return(0,r.createElement)("div",{className:"blogcard-preview-footer",style:{marginTop:"10px",display:"flex",justifyContent:"space-between",alignItems:"center"}},(0,r.createElement)("div",{style:{fontSize:"12px",color:"#666",display:"flex",alignItems:"center",gap:"4px"}},t&&(0,r.createElement)("span",{style:{padding:"2px 6px",borderRadius:"3px",fontSize:"10px",fontWeight:"bold"}},"CACHED")),(0,r.createElement)(p.Button,{type:"button",className:"wpbc-show-link-button",onClick:()=>n(e),disabled:!e,variant:"secondary",size:"small"},(0,o.__)("リンク先を表示","wpbc")))}function g({error:e,errorCode:t}){return e?(0,r.createElement)("div",{style:{color:"#cc0000",fontSize:"14px",margin:"8px 0",padding:"8px 0"}},e,t&&(0,r.createElement)("span",{style:{marginLeft:"8px",color:"#666",fontSize:"12px"}},"(",t,")")):null}function _({message:e=(0,o.__)("メタデータを取得中...","wpbc")}){return(0,r.createElement)("div",{style:{textAlign:"center",padding:"1.25rem"}},(0,r.createElement)(p.Spinner,null),(0,r.createElement)("p",{style:{fontSize:"0.875rem"}},e))}function f({attributes:e,setAttributes:t,inputUrl:n,setInputUrl:l,handleKeyDown:c}){const{target:s,noopener:i,nofollow:u,noreferrer:m,sponsored:d,ugc:b,showThumbnail:h,title:w,description:g,thumbnailUrl:_,thumbnailId:f}=e,v=()=>f&&_?(0,r.createElement)("div",{style:{width:"100%",aspectRatio:"16/9",overflow:"hidden",borderRadius:"4px",backgroundColor:"#f0f0f0",display:"flex",alignItems:"center",justifyContent:"center"}},(0,r.createElement)("img",{src:_,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})):(0,r.createElement)("div",{style:{backgroundColor:"#f0f0f0",borderRadius:"4px",display:"flex",alignItems:"center",justifyContent:"center",color:"#666",fontSize:"14px"}},(0,o.__)("サムネイルを設定","wpbc"));return(0,r.createElement)(a.InspectorControls,null,(0,r.createElement)(p.PanelBody,{title:(0,o.__)("ブロック設定","wpbc"),initialOpen:!0},(0,r.createElement)(p.TextControl,{label:(0,o.__)("URL","wpbc"),value:n,onChange:e=>l(e),onKeyDown:c,placeholder:(0,o.__)("https://example.com or キーワード","wpbc")}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("TARGET属性","wpbc")),(0,r.createElement)(p.SelectControl,{label:(0,o.__)("TARGET属性","wpbc"),value:s,onChange:e=>{t("_blank"===e?{target:e,noopener:!0}:{target:e})},options:[{label:(0,o.__)("なし","wpbc"),value:""},{label:(0,o.__)("_blank(別タブ)","wpbc"),value:"_blank"},{label:(0,o.__)("_self (同じタブ)","wpbc"),value:"_self"}]}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("Rel属性","wpbc")),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("noopener を追加","wpbc"),checked:i,disabled:"_blank"===s,onChange:e=>t({noopener:e})}),"_blank"===s&&(0,r.createElement)("p",{style:{fontSize:"12px",color:"#666",margin:"8px 0"}},(0,o.__)("_blankの場合はセキュリティ上noopenerが必須です","wpbc")),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("rel=nofollow を追加","wpbc"),checked:u,onChange:e=>t({nofollow:e})}),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("rel=noreferrer を追加","wpbc"),checked:m,onChange:e=>t({noreferrer:e})}),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("rel=sponsored を追加","wpbc"),checked:d,onChange:e=>t({sponsored:e})}),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("rel=ugc を追加","wpbc"),checked:b,onChange:e=>t({ugc:e})}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("サムネイル","wpbc")),(0,r.createElement)(p.ToggleControl,{label:(0,o.__)("サムネイルを表示しない","wpbc"),checked:!h,onChange:e=>t({showThumbnail:!e})}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("タイトルを手動で入力","wpbc")),(0,r.createElement)(p.TextControl,{label:(0,o.__)("タイトル","wpbc"),value:w,onChange:e=>t({title:e}),placeholder:(0,o.__)("タイトルを入力","wpbc")}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("説明文を手動で入力","wpbc")),(0,r.createElement)(p.TextControl,{label:(0,o.__)("説明文","wpbc"),value:g,onChange:e=>t({description:e}),placeholder:(0,o.__)("説明文を入力","wpbc")}),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)(p.BaseControl,{label:(0,o.__)("サムネイルを手動で設定","wpbc")},(0,r.createElement)(a.MediaUploadCheck,null,(0,r.createElement)(a.MediaUpload,{onSelect:e=>{t({thumbnailId:e.id,thumbnailUrl:e.url,showThumbnail:!0})},allowedTypes:["image"],value:f,render:({open:e})=>(0,r.createElement)(p.Button,{onClick:e,className:"editor-post-featured-image__toggle"},(0,r.createElement)(v,null))})),(0,r.createElement)(p.Button,{style:{marginTop:"0.5rem"},className:"is-tertiary",onClick:()=>{t({thumbnailId:0,thumbnailUrl:"",showThumbnail:!1})}},(0,o.__)("クリア","wpbc"))),(0,r.createElement)("hr",{style:{margin:"20px 0"}}),(0,r.createElement)("h4",null,(0,o.__)("キャッシュ管理","wpbc")),(0,r.createElement)("div",{style:{display:"flex",gap:"10px",flexWrap:"wrap"}},(0,r.createElement)(p.Button,{secondary:!0,onClick:E("plugin"),style:{fontSize:"12px"}},(0,o.__)("ブログカードキャッシュクリア","wpbc")),(0,r.createElement)(p.Button,{isDestructive:!0,onClick:()=>{confirm((0,o.__)("全てのWordPressキャッシュをクリアしますか?","wpbc"))&&E("all")()},style:{fontSize:"12px"}},(0,o.__)("全キャッシュクリア","wpbc")))))}function E(e="plugin"){return async()=>{try{const t=await i()({path:"/wpbc/v1/clear-cache",method:"POST",data:{type:e}});t.success?alert(t.message):alert((0,o.__)("キャッシュのクリアに失敗しました。","wpbc"))}catch(e){console.error("Cache clear error:",e),alert((0,o.__)("キャッシュのクリア中にエラーが発生しました。","wpbc"))}}}(0,l.registerBlockType)("su/blogcard",{edit:function({attributes:e,setAttributes:t}){const{url:n,showThumbnail:l,title:s,description:p,thumbnailUrl:d,favicon:E}=e,[v,y]=(0,c.useState)(n||""),[x,C]=(0,c.useState)(!1),[k,T]=(0,c.useState)(""),[N,S]=(0,c.useState)(""),[R,U]=(0,c.useState)(!1),O=(0,a.useBlockProps)(),I=O.className?.includes("is-selected")||!1,D=e=>{"Enter"===e.key&&(e.preventDefault(),u(v)&&(v!==n&&t({url:"",title:"",description:"",thumbnailUrl:"",showThumbnail:!1,favicon:""}),(async()=>{if(!v||v.trim().length<10||!u(v))return T(""),void S("");C(!0),T(""),S("");try{const e=m(v)?`/wpbc/v1/internal-metadata?url=${encodeURIComponent(v)}`:"/wpbc/v1/metadata",n=await i()({path:e,method:m(v)?"GET":"POST",data:m(v)?void 0:{url:v}});if(n.success){const e=n.data;t({url:v,title:e.title||v,description:e.description||"",thumbnailUrl:e.thumbnail||"",showThumbnail:!!e.thumbnail,favicon:e.favicon||""}),U(!0===e.cached),T(""),S("")}else{const e=n.message||n.data?.message||(0,o.__)("メタデータの取得に失敗しました。","wpbc"),t=n.code||n.data?.code||"UNKNOWN_ERROR";T(e),S(t)}}catch(e){const t=e.status||e.code||"NETWORK_ERROR";let n=e.message||(0,o.__)("メタデータの取得中にエラーが発生しました。","wpbc");e.data&&e.data.message&&(n=e.data.message),T(n),S(t)}finally{C(!1)}})()))},z=e=>{y(e.url),T(""),S(""),U(!1),t({url:e.url,title:e.title||e.url,description:e.excerpt||"",thumbnailUrl:e.thumbnail||"",showThumbnail:!!e.thumbnail,favicon:e.favicon||""})};return(0,r.createElement)("div",{...O},(0,r.createElement)(f,{attributes:e,setAttributes:t,inputUrl:v,setInputUrl:y,handleKeyDown:D}),n||k?(0,r.createElement)("div",null,x&&(0,r.createElement)(_,null),I&&(0,r.createElement)(b,{key:"selected-search-input",value:v,onChange:e=>y(e),onKeyDown:D,onSelectResult:z,showSearch:!0,disabled:!1}),(0,r.createElement)(g,{error:k,errorCode:N}),!x&&!k&&n&&(0,r.createElement)("div",{className:"blogcard-preview"},(0,r.createElement)(h,{attributes:{url:n,title:s,description:p,thumbnailUrl:d,showThumbnail:l,favicon:E,isSelected:I}}),I&&(0,r.createElement)(w,{url:n,cached:R,onOpenLink:e=>{window.open(e,"_blank")}}))):(0,r.createElement)(b,{key:"placeholder-search-input",value:v,onChange:e=>y(e),onKeyDown:D,onSelectResult:z,showSearch:!0,disabled:!1}))},save:function(){return null}})}},n={};function l(e){var r=n[e];if(void 0!==r)return r.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,l),a.exports}l.m=t,e=[],l.O=(t,n,r,a)=>{if(!n){var c=1/0;for(p=0;p<e.length;p++){for(var[n,r,a]=e[p],o=!0,s=0;s<n.length;s++)(!1&a||c>=a)&&Object.keys(l.O).every(e=>l.O[e](n[s]))?n.splice(s--,1):(o=!1,a<c&&(c=a));if(o){e.splice(p--,1);var i=r();void 0!==i&&(t=i)}}return t}a=a||0;for(var p=e.length;p>0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[n,r,a]},l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={57:0,350:0};l.O.j=t=>0===e[t];var t=(t,n)=>{var r,a,[c,o,s]=n,i=0;if(c.some(t=>0!==e[t])){for(r in o)l.o(o,r)&&(l.m[r]=o[r]);if(s)var p=s(l)}for(t&&t(n);i<c.length;i++)a=c[i],l.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return l.O(p)},n=globalThis.webpackChunkblogcard_for_wp=globalThis.webpackChunkblogcard_for_wp||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var r=l.O(void 0,[350],()=>l(486));r=l.O(r)})();
     1(()=>{"use strict";var e,t={486:(e,t,l)=>{const a=window.wp.blocks,n=window.React,r=window.wp.blockEditor,c=window.wp.element,o=window.wp.i18n,s=window.wp.apiFetch;var i=l.n(s);const p=window.wp.components;function m(e){return!(!e||e.length<10)&&URL.canParse(e)}function u(e){if(!e)return!1;try{const t=new URL(e),l=new URL(window.location.href).hostname,a=t.hostname;return l===a||!(!l.endsWith("."+a)&&!a.endsWith("."+l))}catch{return!1}}function d({results:e,isLoading:t,onSelect:l,onClose:a,error:r}){return(0,n.createElement)("div",{className:"wpbc-search-results"},(0,n.createElement)("div",{className:"wpbc-search-results-header"},(0,n.createElement)("span",null,(0,o.__)("検索結果","wpbc")),(0,n.createElement)("button",{type:"button",className:"wpbc-search-close",onClick:a},"×")),t?(0,n.createElement)("div",{className:"wpbc-search-loading"},(0,n.createElement)(p.Spinner,null),(0,o.__)("検索中...","wpbc")):r?(0,n.createElement)("div",{className:"wpbc-search-error",style:{color:"#cc0000",padding:"10px",textAlign:"center"}},r):e&&e.length>0?(0,n.createElement)("ul",{className:"wpbc-search-results-list"},e.map(e=>(0,n.createElement)("li",{key:e.id,className:"wpbc-search-result-item",onClick:()=>l(e)},e.thumbnail&&(0,n.createElement)("div",{className:"wpbc-search-result-thumbnail"},(0,n.createElement)("img",{src:e.thumbnail,alt:e.title,width:"60",height:"60"})),(0,n.createElement)("div",{className:"wpbc-search-result-content"},(0,n.createElement)("div",{className:"wpbc-search-result-title"},e.title),(0,n.createElement)("div",{className:"wpbc-search-result-meta"},(0,n.createElement)("span",{className:"wpbc-search-result-type"},"post"===e.type?(0,o.__)("投稿","wpbc"):(0,o.__)("固定ページ","wpbc")),(0,n.createElement)("span",{className:"wpbc-search-result-date"},e.date)),e.excerpt&&(0,n.createElement)("div",{className:"wpbc-search-result-excerpt"},e.excerpt))))):(0,n.createElement)("div",{className:"wpbc-search-no-results"},(0,o.__)("検索結果が見つかりませんでした","wpbc")))}function b({value:e,onChange:t,onKeyDown:l,onSelectResult:a,placeholder:r=(0,o.__)("https://example.com or キーワード","wpbc"),label:s=(0,o.__)("URLまたはサイト内検索","wpbc"),showSearch:u=!1,disabled:b=!1}){const h=m(e),[w,_]=(0,c.useState)([]),[g,E]=(0,c.useState)(!1),[f,v]=(0,c.useState)(!1),[y,x]=(0,c.useState)(""),C=(0,c.useRef)(null),k=(0,c.useCallback)(async e=>{if(!e||e.length<2)return _([]),v(!1),void x("");C.current&&C.current.abort(),C.current=new AbortController,E(!0),x("");try{const t=await i()({path:`/wpbc/v1/search?q=${encodeURIComponent(e)}`,method:"GET",signal:C.current.signal});t&&t.success?(_(t.data||[]),v(!0),x("")):(_([]),v(!1),x((0,o.__)("検索に失敗しました。","wpbc")))}catch(e){if("AbortError"===e.name)return;_([]),v(!1),x((0,o.__)("検索中にエラーが発生しました。","wpbc"))}finally{E(!1)}},[]);return(0,c.useEffect)(()=>{if(u&&!b){if(!e||""===e.trim())return _([]),v(!1),void x("");if(!h){const t=setTimeout(()=>{k(e)},300);return()=>{clearTimeout(t),C.current&&C.current.abort()}}_([]),v(!1),x("")}},[e,u,b,h,k]),(0,c.useEffect)(()=>{h&&(_([]),v(!1),E(!1),x(""))},[h]),(0,c.useEffect)(()=>()=>{C.current&&C.current.abort()},[]),(0,n.createElement)("div",{className:"wpbc-search-input"},(0,n.createElement)(p.TextControl,{label:s,value:e,onChange:t,onKeyDown:t=>{"Enter"===t.key&&(t.preventDefault(),m(e)&&l&&l(t))},placeholder:r,disabled:b,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),u&&!b&&e&&""!==e.trim()&&!m(e)&&(f||y)&&(0,n.createElement)(d,{results:w,isLoading:g,onSelect:e=>{t(e.url),a&&a(e),v(!1),_([])},onClose:()=>{v(!1),_([])},error:y}))}function h({attributes:e}){const{url:t,title:l,description:a,thumbnailUrl:r,thumbnailId:c,showThumbnail:o,favicon:s,target:i="_blank",noopener:p=!0,nofollow:m=!1,noreferrer:u=!1,sponsored:d=!1,ugc:b=!1,isSelected:h=!1,isManual:w=!1}=e,_=[];p&&_.push("noopener"),u&&_.push("noreferrer"),m&&_.push("nofollow"),d&&_.push("sponsored"),b&&_.push("ugc");const g=_.length>0?_.join(" "):"",E=r,f=o&&E,v=w&&h&&!l,y=w&&h&&!a;return(0,n.createElement)("article",{className:"wp-blogcard",cite:t},(0,n.createElement)("a",{href:t,target:i||void 0,rel:g||void 0,className:"wp-blogcard-item"},f&&(0,n.createElement)("figure",{className:"wp-blogcard-figure"},(0,n.createElement)("img",{src:E,alt:"","aria-hidden":"true"})),(0,n.createElement)("div",{className:"wp-blogcard-content"},(0,n.createElement)("div",{className:"wp-blogcard-title"},l||(v?(0,n.createElement)("span",{className:"wp-blogcard-placeholder"},"Title Placeholder"):"")),(0,n.createElement)("div",{className:"wp-blogcard-description"},a||(y?(0,n.createElement)("span",{className:"wp-blogcard-placeholder"},"Description Placeholder"):"")),(0,n.createElement)("div",{className:"wp-blogcard-cite"},s&&(0,n.createElement)("img",{className:"wp-blogcard-favicon",src:s||"",alt:"","aria-hidden":"true"}),(0,n.createElement)("div",{className:"wp-blogcard-domain"},function(e){try{return new URL(e).hostname}catch{return""}}(t))))))}function w({url:e,cached:t,onOpenLink:l}){return(0,n.createElement)(p.Flex,{className:"blogcard-preview-footer",justify:"space-between",align:"center",style:{marginTop:"0.25rem"}},(0,n.createElement)(p.FlexItem,null,t?(0,n.createElement)("div",{className:"wpbc-cached-label"},"Cached"):null),(0,n.createElement)(p.FlexItem,null,(0,n.createElement)(p.Button,{type:"button",className:"wpbc-show-link-button",onClick:()=>l(e),disabled:!e,variant:"tertiary",size:"medium"},(0,o.__)("リンク先を確認","wpbc"))))}function _({error:e,errorCode:t}){return e?(0,n.createElement)("div",{style:{color:"#cc0000",fontSize:"14px",margin:"8px 0",padding:"8px 0"}},e,t&&(0,n.createElement)("span",{style:{marginLeft:"8px",color:"#666",fontSize:"12px"}},"(",t,")")):null}function g({message:e=(0,o.__)("メタデータを取得中...","wpbc")}){return(0,n.createElement)("div",{style:{textAlign:"center",padding:"1.25rem"}},(0,n.createElement)(p.Spinner,null),(0,n.createElement)("p",{style:{fontSize:"0.875rem"}},e))}function E({attributes:e,setAttributes:t,inputUrl:l,setInputUrl:a,handleKeyDown:c}){const{target:s,noopener:i,nofollow:m,noreferrer:u,sponsored:d,ugc:b,showThumbnail:h,title:w,description:_,thumbnailUrl:g,thumbnailId:E,favicon:v}=e,y=()=>E&&g?(0,n.createElement)("div",{style:{width:"100%",aspectRatio:"16/9",overflow:"hidden",borderRadius:"4px",backgroundColor:"#f0f0f0",display:"flex",alignItems:"center",justifyContent:"center"}},(0,n.createElement)("img",{src:g,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})):(0,n.createElement)("div",{style:{backgroundColor:"#f0f0f0",borderRadius:"4px",display:"flex",alignItems:"center",justifyContent:"center",color:"#666",fontSize:"14px"}},(0,o.__)("サムネイルを設定","wpbc"));return(0,n.createElement)(r.InspectorControls,null,(0,n.createElement)(p.PanelBody,{title:(0,o.__)("ブロック設定","wpbc"),initialOpen:!0},(0,n.createElement)(p.TextControl,{label:(0,o.__)("URL","wpbc"),value:l,onChange:e=>a(e),onKeyDown:c,placeholder:(0,o.__)("https://example.com or キーワード","wpbc")}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("TARGET属性","wpbc")),(0,n.createElement)(p.SelectControl,{label:(0,o.__)("TARGET属性","wpbc"),value:s,onChange:e=>{t("_blank"===e?{target:e,noopener:!0}:{target:e})},options:[{label:(0,o.__)("なし","wpbc"),value:""},{label:(0,o.__)("_blank(別タブ)","wpbc"),value:"_blank"},{label:(0,o.__)("_self (同じタブ)","wpbc"),value:"_self"}]}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("Rel属性","wpbc")),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("noopener を追加","wpbc"),checked:i,disabled:"_blank"===s,onChange:e=>t({noopener:e})}),"_blank"===s&&(0,n.createElement)("p",{style:{fontSize:"12px",color:"#666",margin:"8px 0"}},(0,o.__)("_blankの場合はセキュリティ上noopenerが必須です","wpbc")),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("rel=nofollow を追加","wpbc"),checked:m,onChange:e=>t({nofollow:e})}),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("rel=noreferrer を追加","wpbc"),checked:u,onChange:e=>t({noreferrer:e})}),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("rel=sponsored を追加","wpbc"),checked:d,onChange:e=>t({sponsored:e})}),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("rel=ugc を追加","wpbc"),checked:b,onChange:e=>t({ugc:e})}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("サムネイル","wpbc")),(0,n.createElement)(p.ToggleControl,{label:(0,o.__)("サムネイルを表示しない","wpbc"),checked:!h,onChange:e=>t({showThumbnail:!e})}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("タイトルを手動で入力","wpbc")),(0,n.createElement)(p.TextControl,{label:(0,o.__)("タイトル","wpbc"),value:w,onChange:e=>t({title:e}),placeholder:(0,o.__)("タイトルを入力","wpbc")}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("説明文を手動で入力","wpbc")),(0,n.createElement)(p.TextControl,{label:(0,o.__)("説明文","wpbc"),value:_,onChange:e=>t({description:e}),placeholder:(0,o.__)("説明文を入力","wpbc")}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("Faviconを手動で入力","wpbc")),(0,n.createElement)(p.TextControl,{label:(0,o.__)("Favicon URL","wpbc"),value:v,onChange:e=>t({favicon:e}),placeholder:(0,o.__)("https://example.com/favicon.ico","wpbc")}),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)(p.BaseControl,{label:(0,o.__)("サムネイルを手動で設定","wpbc")},(0,n.createElement)(r.MediaUploadCheck,null,(0,n.createElement)(r.MediaUpload,{onSelect:e=>{t({thumbnailId:e.id,thumbnailUrl:e.url,showThumbnail:!0})},allowedTypes:["image"],value:E,render:({open:e})=>(0,n.createElement)(p.Button,{onClick:e,className:"editor-post-featured-image__toggle"},(0,n.createElement)(y,null))})),(0,n.createElement)(p.Button,{style:{marginTop:"0.5rem"},className:"is-tertiary",onClick:()=>{t({thumbnailId:0,thumbnailUrl:"",showThumbnail:!1})}},(0,o.__)("クリア","wpbc"))),(0,n.createElement)("hr",{style:{margin:"20px 0"}}),(0,n.createElement)("h4",null,(0,o.__)("キャッシュ管理","wpbc")),(0,n.createElement)("div",{style:{display:"flex",gap:"10px",flexWrap:"wrap"}},(0,n.createElement)(p.Button,{secondary:!0,onClick:f("plugin"),style:{fontSize:"12px"}},(0,o.__)("このブログカードのキャッシュをクリア","wpbc")),(0,n.createElement)(p.Button,{isDestructive:!0,onClick:()=>{f("all")()}},(0,o.__)("すべてのブログカードのキャッシュをクリア","wpbc")))))}function f(e="plugin"){return async()=>{try{const t=await i()({path:"/wpbc/v1/clear-cache",method:"POST",data:{type:e}});t.success?alert(t.message):alert((0,o.__)("キャッシュのクリアに失敗しました。","wpbc"))}catch(e){console.error("Cache clear error:",e),alert((0,o.__)("キャッシュのクリア中にエラーが発生しました。","wpbc"))}}}const v=()=>window.wpbcSettings||{external_target:"_blank",internal_target:"_self"};(0,a.registerBlockType)("su/blogcard",{edit:function({attributes:e,setAttributes:t}){const{url:l,title:a,description:s,thumbnailUrl:d,showThumbnail:f,favicon:y,isManual:x}=e,[C,k]=(0,c.useState)(l||""),[N,T]=(0,c.useState)(!1),[S,R]=(0,c.useState)(""),[U,O]=(0,c.useState)(""),[I,B]=(0,c.useState)(!1),F=(0,r.useBlockProps)(),L=F.className?.includes("is-selected")||!1,D=async()=>{if(!C||C.trim().length<10||!m(C))return R(""),void O("");T(!0),R(""),O("");try{const e=u(C)?`/wpbc/v1/internal-metadata?url=${encodeURIComponent(C)}`:"/wpbc/v1/metadata",l=await i()({path:e,method:u(C)?"GET":"POST",data:u(C)?void 0:{url:C}});if(l.success){const e=l.data,a=v(),n=u(C)?a.internal_target:a.external_target;t({url:C,title:e.title||C,description:e.description||"",thumbnailUrl:e.thumbnail||"",showThumbnail:!!e.thumbnail,favicon:e.favicon||"",target:n,isManual:!1}),B(!0===e.cached),R(""),O("")}else{const e=l.message||l.data?.message||(0,o.__)("メタデータの取得に失敗しました。","wpbc"),t=l.code||l.data?.code||"UNKNOWN_ERROR";R(e),O(t)}}catch(e){const t=e.status||e.code||"NETWORK_ERROR";let l=e.message||(0,o.__)("メタデータの取得中にエラーが発生しました。","wpbc");e.data&&e.data.message&&(l=e.data.message),R(l),O(t)}finally{T(!1)}},j=e=>{if("Enter"===e.key){if(e.preventDefault(),l)return;m(C)&&D()}};return(0,n.createElement)("div",{...F},(0,n.createElement)(E,{attributes:e,setAttributes:t,inputUrl:C,setInputUrl:k,handleKeyDown:j}),l?(0,n.createElement)(n.Fragment,null,N&&(0,n.createElement)(g,null),L&&(0,n.createElement)("div",{className:"wpbc-input-wrapper"},(0,n.createElement)(b,{key:"locked-search-input",value:C,onChange:k,showSearch:!1,disabled:!0,label:"",placeholder:(0,o.__)("https://example.com","wpbc"),help:(0,o.__)("URLを変更するにはブロックを削除して再作成してください","wpbc")})),(0,n.createElement)(_,{error:S,errorCode:U}),!N&&!S&&(0,n.createElement)("div",{className:"blogcard-preview"},(0,n.createElement)(h,{attributes:{url:l,title:a,description:s,thumbnailUrl:d,showThumbnail:f,favicon:y,isManual:x,isSelected:L}}),L&&(0,n.createElement)(w,{url:l,cached:I,onOpenLink:e=>{window.open(e,"_blank")}}))):(0,n.createElement)(n.Fragment,null,(0,n.createElement)(n.Fragment,null,(0,n.createElement)(b,{key:"placeholder-search-input",value:C,onChange:k,onKeyDown:j,onSelectResult:e=>{k(e.url),R(""),O(""),B(!1);const l=v(),a=u(e.url)?l.internal_target:l.external_target;t({url:e.url,title:e.title||e.url,description:e.description||e.excerpt||"",thumbnailUrl:e.thumbnail||"",showThumbnail:!!e.thumbnail,favicon:e.favicon||"",target:a,isManual:!1})},showSearch:!0,disabled:!1,placeholder:(0,o.__)("https://example.com or 検索キーワード","wpbc")}),C&&m(C)&&(0,n.createElement)(p.Flex,{gap:2,className:"wpbc-search-buttons",justify:"flex-end"},(0,n.createElement)(p.FlexItem,null,(0,n.createElement)(p.Button,{variant:"tertiary",onClick:()=>{C&&t({url:C,title:"",description:"",thumbnailUrl:"",showThumbnail:!1,favicon:"",isManual:!0})},disabled:N},(0,o.__)("手動で作成","wpbc"))),(0,n.createElement)(p.FlexItem,null,(0,n.createElement)(p.Button,{variant:"primary",onClick:D,isBusy:N,disabled:N},(0,o.__)("検索して作成","wpbc")," ",(0,n.createElement)("span",null,"Enter"))))),N&&(0,n.createElement)(g,null),(0,n.createElement)(_,{error:S,errorCode:U})))},save:function(){return null}})}},l={};function a(e){var n=l[e];if(void 0!==n)return n.exports;var r=l[e]={exports:{}};return t[e](r,r.exports,a),r.exports}a.m=t,e=[],a.O=(t,l,n,r)=>{if(!l){var c=1/0;for(p=0;p<e.length;p++){for(var[l,n,r]=e[p],o=!0,s=0;s<l.length;s++)(!1&r||c>=r)&&Object.keys(a.O).every(e=>a.O[e](l[s]))?l.splice(s--,1):(o=!1,r<c&&(c=r));if(o){e.splice(p--,1);var i=n();void 0!==i&&(t=i)}}return t}r=r||0;for(var p=e.length;p>0&&e[p-1][2]>r;p--)e[p]=e[p-1];e[p]=[l,n,r]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var l in t)a.o(t,l)&&!a.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={57:0,350:0};a.O.j=t=>0===e[t];var t=(t,l)=>{var n,r,[c,o,s]=l,i=0;if(c.some(t=>0!==e[t])){for(n in o)a.o(o,n)&&(a.m[n]=o[n]);if(s)var p=s(a)}for(t&&t(l);i<c.length;i++)r=c[i],a.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return a.O(p)},l=globalThis.webpackChunkblogcard_for_wp=globalThis.webpackChunkblogcard_for_wp||[];l.forEach(t.bind(null,0)),l.push=t.bind(null,l.push.bind(l))})();var n=a.O(void 0,[350],()=>a(486));n=a.O(n)})();
  • blogcard-for-wp/trunk/build/style-index-rtl.css

    r3451275 r3460397  
    1 :where(.wp-block-su-blogcard){margin-block:1.5rem}.wp-block-su-blogcard{container-type:inline-size;--color-text:#18181b;--color-text-light:#71717b;--color-ui:#e4e4e7;--color-surface:#f4f4f5;--color-background:#fff;--border-radius:0.75rem;--padding:1.25rem 1.5rem;--image-width:28%}.dark .wp-block-su-blogcard{--color-text:#f4f4f5;--color-text-light:#9f9fa9;--color-ui:#27272a;--color-surface:#18181b;--color-background:#09090b;--color-white:#09090b}.wp-blogcard{background-color:var(--color-background);border:1px solid var(--color-ui);border-radius:var(--border-radius);color:var(--color-text);overflow:hidden;transition:background-color .2s ease;&:hover{background-color:var(--color-surface);color:var(--color-text)}}.wp-blogcard-item{display:flex;flex-direction:row-reverse;text-decoration:none!important}.wp-blogcard-figure{align-self:stretch;flex-shrink:0;height:auto;margin:0;overflow:hidden;width:var(--image-width)}.wp-blogcard-figure img{height:100%;object-fit:cover;width:100%}.wp-blogcard-content{display:flex;flex:1;flex-direction:column;gap:.5rem;padding:var(--padding)}.wp-blogcard-title{color:var(--color-text);display:-webkit-box;font-kerning:normal;font-size:.875rem;font-weight:700;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-description{display:none}.wp-blogcard-cite{align-items:center;color:#999;display:flex;font-size:.9rem;margin:0}.wp-blogcard-favicon{border-radius:.125rem;height:16px;margin-left:.5rem;width:16px}.wp-blogcard-domain{color:var(--color-text-light);font-size:.675rem}@container (min-width: 32rem){.wp-blogcard-title{font-size:1rem}.wp-blogcard-description{color:var(--color-text-light);display:-webkit-box;font-size:.75rem;hyphens:auto;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-domain{font-size:.75rem}}
     1:where(.wp-block-su-blogcard){margin-block:1.5rem}.wp-block-su-blogcard{container-type:inline-size;--color-text:#18181b;--color-text-light:#71717b;--color-ui:#e4e4e7;--color-surface:#f4f4f5;--color-background:#fff;--border-radius:0.75rem;--padding:1.25rem 1.5rem;--image-width:28%}.dark .wp-block-su-blogcard{--color-text:#f4f4f5;--color-text-light:#9f9fa9;--color-ui:#27272a;--color-surface:#18181b;--color-background:#09090b;--color-white:#09090b}.wp-blogcard{background-color:var(--color-background);border:1px solid var(--color-ui);border-radius:var(--border-radius);color:var(--color-text);overflow:hidden;transition:background-color .2s ease;&:hover{background-color:var(--color-surface);color:var(--color-text)}}.wp-blogcard-item{display:flex;flex-direction:row-reverse;text-decoration:none!important}.wp-blogcard-figure{align-self:stretch;flex-shrink:0;height:auto;margin:0;overflow:hidden;width:var(--image-width)}.wp-blogcard-figure img{height:100%;object-fit:cover;width:100%}.wp-blogcard-content{display:flex;flex:1;flex-direction:column;gap:.5rem;padding:var(--padding)}.wp-blogcard-title{color:var(--color-text);display:-webkit-box;font-kerning:normal;font-size:.875rem;font-weight:700;-webkit-line-clamp:2;line-height:1.5;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-description{display:none}.wp-blogcard-cite{align-items:center;color:#999;display:flex;font-size:.9rem;margin:0}.wp-blogcard-favicon{border-radius:.125rem;height:16px;margin-left:.5rem;width:16px}.wp-blogcard-domain{color:var(--color-text-light);font-size:.675rem}@container (min-width: 32rem){.wp-blogcard-title{font-size:1rem}.wp-blogcard-description{color:var(--color-text-light);display:-webkit-box;font-size:.75rem;hyphens:auto;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-domain{font-size:.75rem}}
  • blogcard-for-wp/trunk/build/style-index.css

    r3451275 r3460397  
    1 :where(.wp-block-su-blogcard){margin-block:1.5rem}.wp-block-su-blogcard{container-type:inline-size;--color-text:#18181b;--color-text-light:#71717b;--color-ui:#e4e4e7;--color-surface:#f4f4f5;--color-background:#fff;--border-radius:0.75rem;--padding:1.25rem 1.5rem;--image-width:28%}.dark .wp-block-su-blogcard{--color-text:#f4f4f5;--color-text-light:#9f9fa9;--color-ui:#27272a;--color-surface:#18181b;--color-background:#09090b;--color-white:#09090b}.wp-blogcard{background-color:var(--color-background);border:1px solid var(--color-ui);border-radius:var(--border-radius);color:var(--color-text);overflow:hidden;transition:background-color .2s ease;&:hover{background-color:var(--color-surface);color:var(--color-text)}}.wp-blogcard-item{display:flex;flex-direction:row-reverse;text-decoration:none!important}.wp-blogcard-figure{align-self:stretch;flex-shrink:0;height:auto;margin:0;overflow:hidden;width:var(--image-width)}.wp-blogcard-figure img{height:100%;object-fit:cover;width:100%}.wp-blogcard-content{display:flex;flex:1;flex-direction:column;gap:.5rem;padding:var(--padding)}.wp-blogcard-title{color:var(--color-text);display:-webkit-box;font-kerning:normal;font-size:.875rem;font-weight:700;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-description{display:none}.wp-blogcard-cite{align-items:center;color:#999;display:flex;font-size:.9rem;margin:0}.wp-blogcard-favicon{border-radius:.125rem;height:16px;margin-right:.5rem;width:16px}.wp-blogcard-domain{color:var(--color-text-light);font-size:.675rem}@container (min-width: 32rem){.wp-blogcard-title{font-size:1rem}.wp-blogcard-description{color:var(--color-text-light);display:-webkit-box;font-size:.75rem;hyphens:auto;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-domain{font-size:.75rem}}
     1:where(.wp-block-su-blogcard){margin-block:1.5rem}.wp-block-su-blogcard{container-type:inline-size;--color-text:#18181b;--color-text-light:#71717b;--color-ui:#e4e4e7;--color-surface:#f4f4f5;--color-background:#fff;--border-radius:0.75rem;--padding:1.25rem 1.5rem;--image-width:28%}.dark .wp-block-su-blogcard{--color-text:#f4f4f5;--color-text-light:#9f9fa9;--color-ui:#27272a;--color-surface:#18181b;--color-background:#09090b;--color-white:#09090b}.wp-blogcard{background-color:var(--color-background);border:1px solid var(--color-ui);border-radius:var(--border-radius);color:var(--color-text);overflow:hidden;transition:background-color .2s ease;&:hover{background-color:var(--color-surface);color:var(--color-text)}}.wp-blogcard-item{display:flex;flex-direction:row-reverse;text-decoration:none!important}.wp-blogcard-figure{align-self:stretch;flex-shrink:0;height:auto;margin:0;overflow:hidden;width:var(--image-width)}.wp-blogcard-figure img{height:100%;object-fit:cover;width:100%}.wp-blogcard-content{display:flex;flex:1;flex-direction:column;gap:.5rem;padding:var(--padding)}.wp-blogcard-title{color:var(--color-text);display:-webkit-box;font-kerning:normal;font-size:.875rem;font-weight:700;-webkit-line-clamp:2;line-height:1.5;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-description{display:none}.wp-blogcard-cite{align-items:center;color:#999;display:flex;font-size:.9rem;margin:0}.wp-blogcard-favicon{border-radius:.125rem;height:16px;margin-right:.5rem;width:16px}.wp-blogcard-domain{color:var(--color-text-light);font-size:.675rem}@container (min-width: 32rem){.wp-blogcard-title{font-size:1rem}.wp-blogcard-description{color:var(--color-text-light);display:-webkit-box;font-size:.75rem;hyphens:auto;-webkit-line-clamp:2;margin:0;overflow:hidden;word-break:break-word;-webkit-box-orient:vertical}.wp-blogcard-domain{font-size:.75rem}}
  • blogcard-for-wp/trunk/languages/blogcard-for-wp-en_US.po

    r3357123 r3460397  
    66msgid ""
    77msgstr ""
    8 "Project-Id-Version: Blogcard for WP 2.0.0\n"
     8"Project-Id-Version: Blogcard for WP 2.1.2\n"
    99"Report-Msgid-Bugs-To: \n"
    1010"POT-Creation-Date: 2024-12-19 12:00+0000\n"
     
    2727
    2828#: src/components/Controls.js:91
     29#: src/components/SearchInput.js:13
     30#: src/components/SearchInput.js:178
    2931msgid "https://example.com or キーワード"
    3032msgstr "https://example.com or keywords"
    3133
    3234#: src/components/Controls.js:96
     35#: src/components/Controls.js:98
    3336msgid "TARGET属性"
    3437msgstr "TARGET Attribute"
     
    106109msgstr "Enter description"
    107110
     111#: src/components/Controls.js:180
     112msgid "Faviconを手動で入力"
     113msgstr "Enter Favicon Manually"
     114
     115#: src/components/Controls.js:182
     116msgid "Favicon URL"
     117msgstr "Favicon URL"
     118
     119#: src/components/Controls.js:185
     120msgid "https://example.com/favicon.ico"
     121msgstr "https://example.com/favicon.ico"
     122
    108123#: src/components/Controls.js:77
    109124msgid "サムネイルを設定"
     
    123138
    124139#: src/components/Controls.js:228
    125 msgid "ブログカードキャッシュクリア"
    126 msgstr "Clear Blog Card Cache"
    127 
    128 #: src/components/Controls.js:235
    129 msgid "全てのWordPressキャッシュをクリアしますか?"
    130 msgstr "Clear all WordPress cache?"
    131 
    132 #: src/components/Controls.js:243
    133 msgid "全キャッシュクリア"
    134 msgstr "Clear All Cache"
     140msgid "このブログカードのキャッシュをクリア"
     141msgstr "Clear cache for this blog card"
     142
     143#: src/components/Controls.js:236
     144msgid "すべてのブログカードのキャッシュをクリア"
     145msgstr "Clear cache for all blog cards"
    135146
    136147#: src/components/Controls.js:264
     
    147158
    148159#: src/components/PreviewFooter.js:46
    149 msgid "リンク先を表示"
    150 msgstr "View Link"
     160msgid "リンク先を確認"
     161msgstr "Check Link"
    151162
    152163#: src/components/SearchInput.js:14
     
    182193msgstr "No search results found"
    183194
     195#: src/edit.jsx:165
     196#: src/edit.jsx:198
     197msgid "検索して作成"
     198msgstr "Search & Create"
     199
     200#: src/edit.jsx:174
     201#: src/edit.jsx:188
     202msgid "手動で作成"
     203msgstr "Create Manually"
     204
     205#: src/edit.jsx:215
     206#: src/edit.jsx:239
     207msgid "https://example.com"
     208msgstr "https://example.com"
     209
     210#: src/edit.jsx:216
     211#: src/edit.jsx:240
     212msgid "URLを変更するにはブロックを削除して再作成してください"
     213msgstr "To change the URL, please delete the block and recreate it"
     214
    184215#: src/edit.js:88
     216#: blogcard-for-wp.php:155
     217#: blogcard-for-wp.php:214
    185218msgid "メタデータの取得に失敗しました。"
    186219msgstr "Failed to fetch metadata."
     
    199232
    200233#: blogcard-for-wp.php:106
     234#: blogcard-for-wp.php:134
     235#: blogcard-for-wp.php:143
     236#: blogcard-for-wp.php:171
     237#: blogcard-for-wp.php:194
    201238msgid "URLが指定されていません。"
    202239msgstr "URL is not specified."
    203240
    204241#: blogcard-for-wp.php:204
     242#: blogcard-for-wp.php:241
     243#: blogcard-for-wp.php:264
    205244msgid "無効なURL形式です。"
    206245msgstr "Invalid URL format."
    207246
    208247#: blogcard-for-wp.php:256
     248#: blogcard-for-wp.php:296
     249#: blogcard-for-wp.php:324
    209250msgid "サーバーの応答が遅すぎます。しばらく時間をおいてから再度お試しください。"
    210251msgstr "Server response is too slow. Please try again after a while."
    211252
    212253#: blogcard-for-wp.php:260
     254#: blogcard-for-wp.php:300
     255#: blogcard-for-wp.php:328
    213256msgid "サーバーに接続できませんでした。"
    214257msgstr "Could not connect to server."
    215258
    216259#: blogcard-for-wp.php:264
     260#: blogcard-for-wp.php:304
     261#: blogcard-for-wp.php:332
    217262msgid "SSL証明書の検証に失敗しました。"
    218263msgstr "SSL certificate verification failed."
    219264
    220265#: blogcard-for-wp.php:278
     266#: blogcard-for-wp.php:318
     267#: blogcard-for-wp.php:346
    221268msgid "HTTPエラーが発生しました"
    222269msgstr "HTTP error occurred"
    223270
    224271#: blogcard-for-wp.php:281
     272#: blogcard-for-wp.php:321
     273#: blogcard-for-wp.php:349
    225274msgid "ページが見つかりません (404)"
    226275msgstr "Page not found (404)"
    227276
    228277#: blogcard-for-wp.php:284
     278#: blogcard-for-wp.php:324
     279#: blogcard-for-wp.php:352
    229280msgid "アクセスが拒否されました (403)"
    230281msgstr "Access denied (403)"
    231282
    232283#: blogcard-for-wp.php:287
     284#: blogcard-for-wp.php:327
     285#: blogcard-for-wp.php:355
    233286msgid "サーバーエラーが発生しました (500)"
    234287msgstr "Server error occurred (500)"
    235288
    236289#: blogcard-for-wp.php:290
     290#: blogcard-for-wp.php:330
     291#: blogcard-for-wp.php:358
    237292msgid "サービスが利用できません (503)"
    238293msgstr "Service unavailable (503)"
    239294
    240295#: blogcard-for-wp.php:293
     296#: blogcard-for-wp.php:333
     297#: blogcard-for-wp.php:361
    241298msgid "HTTPエラーが発生しました (%d)"
    242299msgstr "HTTP error occurred (%d)"
    243300
    244301#: blogcard-for-wp.php:376
     302#: blogcard-for-wp.php:419
     303#: blogcard-for-wp.php:452
    245304msgid "検索クエリが指定されていません。"
    246305msgstr "Search query is not specified."
    247306
    248307#: blogcard-for-wp.php:432
     308#: blogcard-for-wp.php:476
     309#: blogcard-for-wp.php:509
    249310msgid "指定されたURLの投稿が見つかりません。"
    250311msgstr "Post not found for the specified URL."
    251312
    252313#: blogcard-for-wp.php:478
     314#: blogcard-for-wp.php:522
     315#: blogcard-for-wp.php:555
    253316msgid "全てのキャッシュをクリアしました。"
    254317msgstr "All cache cleared."
    255318
    256319#: blogcard-for-wp.php:486
     320#: blogcard-for-wp.php:530
     321#: blogcard-for-wp.php:563
    257322msgid "ブログカードのキャッシュをクリアしました。"
    258323msgstr "Blog card cache cleared."
     324
     325#: includes/admin-settings.php:16
     326msgid "SU Blogcard"
     327msgstr "SU Blogcard"
     328
     329#: includes/admin-settings.php:33
     330msgid "一般設定"
     331msgstr "General Settings"
     332
     333#: includes/admin-settings.php:40
     334msgid "外部リンクのターゲット"
     335msgstr "External Link Target"
     336
     337#: includes/admin-settings.php:48
     338msgid "内部リンクのターゲット"
     339msgstr "Internal Link Target"
     340
     341#: includes/admin-settings.php:56
     342msgid "キャッシュ保持期間"
     343msgstr "Cache Duration"
     344
     345#: includes/admin-settings.php:64
     346msgid "データ削除設定"
     347msgstr "Data Deletion Settings"
     348
     349#: includes/admin-settings.php:98
     350#: includes/admin-settings.php:113
     351msgid "_blank (新しいタブで開く)"
     352msgstr "_blank (Open in new tab)"
     353
     354#: includes/admin-settings.php:99
     355#: includes/admin-settings.php:114
     356msgid "_self (同じタブで開く)"
     357msgstr "_self (Open in same tab)"
     358
     359#: includes/admin-settings.php:101
     360msgid "外部サイトへのリンクのデフォルトのターゲット属性を設定します。"
     361msgstr "Sets the default target attribute for links to external sites."
     362
     363#: includes/admin-settings.php:116
     364msgid "自サイト内へのリンクのデフォルトのターゲット属性を設定します。"
     365msgstr "Sets the default target attribute for links within your own site."
     366
     367#: includes/admin-settings.php:128
     368msgid "ブログカードのメタデータ情報のキャッシュ保持期間を設定します(単位:時間)。"
     369msgstr "Sets the cache retention period for blog card metadata (in hours)."
     370
     371#: includes/admin-settings.php:141
     372msgid "プラグイン削除時にすべてのデータ(設定とキャッシュ)を削除する"
     373msgstr "Delete all data (settings and cache) when deleting the plugin"
     374
     375#: includes/admin-settings.php:143
     376msgid "この設定を有効にすると、プラグインをアンインストールした際に、保存された設定とキャッシュデータがすべて削除されます。"
     377msgstr "If this setting is enabled, all saved settings and cache data will be deleted when the plugin is uninstalled."
  • blogcard-for-wp/trunk/languages/blogcard-for-wp.pot

    r3357123 r3460397  
    77msgid ""
    88msgstr ""
    9 "Project-Id-Version: Blogcard for WP 2.0.0\n"
     9"Project-Id-Version: Blogcard for WP 2.1.2\n"
    1010"Report-Msgid-Bugs-To: \n"
    1111"POT-Creation-Date: 2024-12-19 12:00+0000\n"
     
    2828
    2929#: src/components/Controls.js:91
     30#: src/components/SearchInput.js:13
     31#: src/components/SearchInput.js:178
    3032msgid "https://example.com or キーワード"
    3133msgstr ""
    3234
    3335#: src/components/Controls.js:96
    34 msgid "TARGET属性"
    35 msgstr ""
    36 
    3736#: src/components/Controls.js:98
    3837msgid "TARGET属性"
     
    111110msgstr ""
    112111
     112#: src/components/Controls.js:180
     113msgid "Faviconを手動で入力"
     114msgstr ""
     115
     116#: src/components/Controls.js:182
     117msgid "Favicon URL"
     118msgstr ""
     119
     120#: src/components/Controls.js:185
     121msgid "https://example.com/favicon.ico"
     122msgstr ""
     123
    113124#: src/components/Controls.js:77
    114125msgid "サムネイルを設定"
     
    128139
    129140#: src/components/Controls.js:228
    130 msgid "ブログカードキャッシュクリア"
    131 msgstr ""
    132 
    133 #: src/components/Controls.js:235
    134 msgid "全てのWordPressキャッシュをクリアしますか?"
    135 msgstr ""
    136 
    137 #: src/components/Controls.js:243
    138 msgid "全キャッシュクリア"
     141msgid "このブログカードのキャッシュをクリア"
     142msgstr ""
     143
     144#: src/components/Controls.js:236
     145msgid "すべてのブログカードのキャッシュをクリア"
    139146msgstr ""
    140147
     
    152159
    153160#: src/components/PreviewFooter.js:46
    154 msgid "リンク先を表示"
    155 msgstr ""
    156 
    157 #: src/components/SearchInput.js:13
    158 msgid "https://example.com or キーワード"
     161msgid "リンク先を確認"
    159162msgstr ""
    160163
     
    191194msgstr ""
    192195
     196#: src/edit.jsx:165
     197#: src/edit.jsx:198
     198msgid "検索して作成"
     199msgstr ""
     200
     201#: src/edit.jsx:174
     202#: src/edit.jsx:188
     203msgid "手動で作成"
     204msgstr ""
     205
     206#: src/edit.jsx:215
     207#: src/edit.jsx:239
     208msgid "https://example.com"
     209msgstr ""
     210
     211#: src/edit.jsx:216
     212#: src/edit.jsx:240
     213msgid "URLを変更するにはブロックを削除して再作成してください"
     214msgstr ""
     215
    193216#: src/edit.js:88
     217#: blogcard-for-wp.php:155
     218#: blogcard-for-wp.php:214
    194219msgid "メタデータの取得に失敗しました。"
    195220msgstr ""
     
    208233
    209234#: blogcard-for-wp.php:106
     235#: blogcard-for-wp.php:134
     236#: blogcard-for-wp.php:143
     237#: blogcard-for-wp.php:171
     238#: blogcard-for-wp.php:194
    210239msgid "URLが指定されていません。"
    211240msgstr ""
    212241
    213 #: blogcard-for-wp.php:118
    214 msgid "メタデータの取得に失敗しました。"
    215 msgstr ""
    216 
    217 #: blogcard-for-wp.php:134
    218 msgid "URLが指定されていません。"
    219 msgstr ""
    220 
    221242#: blogcard-for-wp.php:204
     243#: blogcard-for-wp.php:241
     244#: blogcard-for-wp.php:264
    222245msgid "無効なURL形式です。"
    223246msgstr ""
    224247
    225248#: blogcard-for-wp.php:256
     249#: blogcard-for-wp.php:296
     250#: blogcard-for-wp.php:324
    226251msgid "サーバーの応答が遅すぎます。しばらく時間をおいてから再度お試しください。"
    227252msgstr ""
    228253
    229254#: blogcard-for-wp.php:260
     255#: blogcard-for-wp.php:300
     256#: blogcard-for-wp.php:328
    230257msgid "サーバーに接続できませんでした。"
    231258msgstr ""
    232259
    233260#: blogcard-for-wp.php:264
     261#: blogcard-for-wp.php:304
     262#: blogcard-for-wp.php:332
    234263msgid "SSL証明書の検証に失敗しました。"
    235264msgstr ""
    236265
    237266#: blogcard-for-wp.php:278
     267#: blogcard-for-wp.php:318
     268#: blogcard-for-wp.php:346
    238269msgid "HTTPエラーが発生しました"
    239270msgstr ""
    240271
    241272#: blogcard-for-wp.php:281
     273#: blogcard-for-wp.php:321
     274#: blogcard-for-wp.php:349
    242275msgid "ページが見つかりません (404)"
    243276msgstr ""
    244277
    245278#: blogcard-for-wp.php:284
     279#: blogcard-for-wp.php:324
     280#: blogcard-for-wp.php:352
    246281msgid "アクセスが拒否されました (403)"
    247282msgstr ""
    248283
    249284#: blogcard-for-wp.php:287
     285#: blogcard-for-wp.php:327
     286#: blogcard-for-wp.php:355
    250287msgid "サーバーエラーが発生しました (500)"
    251288msgstr ""
    252289
    253290#: blogcard-for-wp.php:290
     291#: blogcard-for-wp.php:330
     292#: blogcard-for-wp.php:358
    254293msgid "サービスが利用できません (503)"
    255294msgstr ""
    256295
    257296#: blogcard-for-wp.php:293
     297#: blogcard-for-wp.php:333
     298#: blogcard-for-wp.php:361
    258299msgid "HTTPエラーが発生しました (%d)"
    259300msgstr ""
    260301
    261302#: blogcard-for-wp.php:376
     303#: blogcard-for-wp.php:419
     304#: blogcard-for-wp.php:452
    262305msgid "検索クエリが指定されていません。"
    263306msgstr ""
    264307
    265308#: blogcard-for-wp.php:432
     309#: blogcard-for-wp.php:476
     310#: blogcard-for-wp.php:509
    266311msgid "指定されたURLの投稿が見つかりません。"
    267312msgstr ""
    268313
    269314#: blogcard-for-wp.php:478
     315#: blogcard-for-wp.php:522
     316#: blogcard-for-wp.php:555
    270317msgid "全てのキャッシュをクリアしました。"
    271318msgstr ""
    272319
    273320#: blogcard-for-wp.php:486
     321#: blogcard-for-wp.php:530
     322#: blogcard-for-wp.php:563
    274323msgid "ブログカードのキャッシュをクリアしました。"
    275324msgstr ""
     325
     326#: includes/admin-settings.php:16
     327msgid "SU Blogcard"
     328msgstr ""
     329
     330#: includes/admin-settings.php:33
     331msgid "一般設定"
     332msgstr ""
     333
     334#: includes/admin-settings.php:40
     335msgid "外部リンクのターゲット"
     336msgstr ""
     337
     338#: includes/admin-settings.php:48
     339msgid "内部リンクのターゲット"
     340msgstr ""
     341
     342#: includes/admin-settings.php:56
     343msgid "キャッシュ保持期間"
     344msgstr ""
     345
     346#: includes/admin-settings.php:64
     347msgid "データ削除設定"
     348msgstr ""
     349
     350#: includes/admin-settings.php:98
     351#: includes/admin-settings.php:113
     352msgid "_blank (新しいタブで開く)"
     353msgstr ""
     354
     355#: includes/admin-settings.php:99
     356#: includes/admin-settings.php:114
     357msgid "_self (同じタブで開く)"
     358msgstr ""
     359
     360#: includes/admin-settings.php:101
     361msgid "外部サイトへのリンクのデフォルトのターゲット属性を設定します。"
     362msgstr ""
     363
     364#: includes/admin-settings.php:116
     365msgid "自サイト内へのリンクのデフォルトのターゲット属性を設定します。"
     366msgstr ""
     367
     368#: includes/admin-settings.php:128
     369msgid "ブログカードのメタデータ情報のキャッシュ保持期間を設定します(単位:時間)。"
     370msgstr ""
     371
     372#: includes/admin-settings.php:141
     373msgid "プラグイン削除時にすべてのデータ(設定とキャッシュ)を削除する"
     374msgstr ""
     375
     376#: includes/admin-settings.php:143
     377msgid "この設定を有効にすると、プラグインをアンインストールした際に、保存された設定とキャッシュデータがすべて削除されます。"
     378msgstr ""
  • blogcard-for-wp/trunk/readme-ja.txt

    r3451271 r3460397  
    55Tested up to: 6.8.2
    66Requires PHP: 7.4
    7 Stable tag: 2.1.0
     7Stable tag: 2.2.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    1818バージョン2.0.0からの新機能で、サイト内検索からブログカードを作ることができるようになりました。
    1919これによって、自分のサイト内の記事を検索ワードからブログカード化できるようになりました。
     20
     21バージョン2.2.0では、外部リンクと内部リンクのデフォルトターゲット属性、キャッシュ保持期間、データ削除オプションを設定できる設定ページが追加されました。また、FaviconのURLを手動で設定できるようになりました。
    2022
    2123> **【重要な変更点】(2.1.0〜)**
     
    3638* **サイト内検索**: サイト内の投稿を検索してブログカード化可能
    3739* **ダークモード対応** .darkクラスによるダークモードに対応
     40* **高度な管理機能**: デフォルトのリンクターゲット、キャッシュ期間、手動Favicon設定が可能
    3841
    3942== インストール ==
     
    100103
    101104== Changelog ==
     105
     106= 2.2.0 =
     107* 新機能: 外部リンク・内部リンクのデフォルトターゲット属性を設定する機能を追加。
     108* 新機能: FaviconのURLを手動で設定する機能を追加。
     109* 新機能: キャッシュ保持期間を設定する機能を追加。
     110* 新機能: アンインストール時にプラグインデータを削除するオプションを追加。
     111* 改善: ブロックエディターのUIレイアウトを調整。
     112* 更新: 内部コード構造のリファクタリング。
     113
     114= 2.1.2 =
     115* CSSの更新。
    102116
    103117= 2.1.0 =
  • blogcard-for-wp/trunk/readme.txt

    r3451275 r3460397  
    55Tested up to: 6.9
    66Requires PHP: 7.4
    7 Stable tag: 2.1.2
     7Stable tag: 2.2.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    3838* **Site Search**: Search and convert internal posts into blog cards
    3939* **Dark Mode Support**: Supports dark mode with .dark class
     40* **Advanced Management**: Configure default link targets, cache duration, and manual favicon support
    4041
    4142== Installation ==
     
    102103
    103104== Changelog ==
     105
     106= 2.2.0 =
     107* New Feature: Added settings page for default link target attributes and cache configuration.
     108* New Feature: Added ability to manually set Favicon URL.
     109* Improvement: Updated block editor UI layout.
     110* Improvement: Added option to delete plugin data on uninstallation.
     111* Update: Refactored internal code structure.
    104112
    105113= 2.1.2 =
Note: See TracChangeset for help on using the changeset viewer.