Changeset 3460397
- Timestamp:
- 02/12/2026 10:25:52 PM (7 weeks ago)
- Location:
- blogcard-for-wp
- Files:
-
- 6 added
- 26 edited
- 1 copied
-
tags/2.2.0 (copied) (copied from blogcard-for-wp/trunk)
-
tags/2.2.0/blogcard-for-wp.php (modified) (11 diffs)
-
tags/2.2.0/build/block.json (modified) (2 diffs)
-
tags/2.2.0/build/index-rtl.css (modified) (1 diff)
-
tags/2.2.0/build/index.asset.php (modified) (1 diff)
-
tags/2.2.0/build/index.css (modified) (1 diff)
-
tags/2.2.0/build/index.js (modified) (1 diff)
-
tags/2.2.0/build/style-index-rtl.css (modified) (1 diff)
-
tags/2.2.0/build/style-index.css (modified) (1 diff)
-
tags/2.2.0/includes (added)
-
tags/2.2.0/includes/admin-settings.php (added)
-
tags/2.2.0/languages/blogcard-for-wp-en_US.mo (modified) (previous)
-
tags/2.2.0/languages/blogcard-for-wp-en_US.po (modified) (7 diffs)
-
tags/2.2.0/languages/blogcard-for-wp.pot (modified) (7 diffs)
-
tags/2.2.0/readme-ja.txt (modified) (4 diffs)
-
tags/2.2.0/readme.txt (modified) (3 diffs)
-
tags/2.2.0/uninstall.php (added)
-
trunk/blogcard-for-wp.php (modified) (11 diffs)
-
trunk/build/block.json (modified) (2 diffs)
-
trunk/build/index-rtl.css (modified) (1 diff)
-
trunk/build/index.asset.php (modified) (1 diff)
-
trunk/build/index.css (modified) (1 diff)
-
trunk/build/index.js (modified) (1 diff)
-
trunk/build/style-index-rtl.css (modified) (1 diff)
-
trunk/build/style-index.css (modified) (1 diff)
-
trunk/includes (added)
-
trunk/includes/admin-settings.php (added)
-
trunk/languages/blogcard-for-wp-en_US.mo (modified) (previous)
-
trunk/languages/blogcard-for-wp-en_US.po (modified) (7 diffs)
-
trunk/languages/blogcard-for-wp.pot (modified) (7 diffs)
-
trunk/readme-ja.txt (modified) (4 diffs)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/uninstall.php (added)
Legend:
- Unmodified
- Added
- Removed
-
blogcard-for-wp/tags/2.2.0/blogcard-for-wp.php
r3451275 r3460397 5 5 * Plugin URI: https://wordpress.org/plugins/blogcard-for-wp/ 6 6 * Description: URLを入力してブログカードを生成するブロックプラグイン 7 * Version: 2. 1.27 * Version: 2.2.0 8 8 * Author: Takashi Fujisaki 9 9 * License: GPL v2 or later … … 18 18 // プラグインの定数 19 19 define( 'WPBC_PLUGIN_PATH', plugin_dir_path( __FILE__ ) ); 20 21 // 管理画面設定の読み込み 22 require_once WPBC_PLUGIN_PATH . 'includes/admin-settings.php'; 20 23 21 24 /** … … 49 52 // ブロックの登録 50 53 register_block_type( WPBC_PLUGIN_PATH . 'build/block.json' ); 54 55 // 設定をブロックエディタに渡す 56 add_action( 'enqueue_block_editor_assets', 'wpbc_enqueue_editor_assets' ); 51 57 } 52 58 add_action( 'init', 'wpbc_init' ); 59 60 /** 61 * ブロックエディタ用アセットのエンキュー 62 */ 63 function 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 } 53 76 54 77 /** … … 249 272 } 250 273 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 ); 253 281 254 282 return $metadata; … … 394 422 } 395 423 396 // ファビコンを取得424 // Faviconを取得 397 425 $favicon_url = wpbc_get_favicon_url( $xpath, $url ); 398 426 if ( $favicon_url ) { … … 404 432 $metadata['cached'] = false; 405 433 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 ); 408 441 409 442 return $metadata; … … 450 483 foreach ( $sorted_posts as $post ) { 451 484 $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 ), 458 492 ); 459 493 } … … 538 572 539 573 /** 540 * ファビコンを取得する関数574 * Faviconを取得する関数 541 575 */ 542 576 function wpbc_get_favicon_url( $xpath, $base_url ) { 543 577 $favicon_url = null; 544 578 545 // ファビコンのURLを取得するクエリ(優先順位順)579 // FaviconのURLを取得するクエリ(優先順位順) 546 580 $queries = array( 547 581 "//link[@rel='icon' and @type='image/svg+xml']", … … 566 600 $temp_url = wpbc_convert_to_absolute_url( $temp_url, $base_url ); 567 601 568 // ファビコンのURLが有効かチェック602 // FaviconのURLが有効かチェック 569 603 if ( wpbc_check_favicon_exists( $temp_url ) ) { 570 604 return $temp_url; … … 574 608 } 575 609 576 // ドメイン直下の ファビコンを探す610 // ドメイン直下のFaviconを探す 577 611 $default_favicons = array( 578 612 wpbc_convert_to_absolute_url( '/favicon.svg', $base_url ), … … 610 644 611 645 /** 612 * ファビコンが存在するかチェックする646 * Faviconが存在するかチェックする 613 647 */ 614 648 function wpbc_check_favicon_exists( $url ) { -
blogcard-for-wp/tags/2.2.0/build/block.json
r3451271 r3460397 3 3 "apiVersion": 3, 4 4 "name": "su/blogcard", 5 "version": "2. 1.0",5 "version": "2.2.0", 6 6 "title": "ブログカード", 7 7 "category": "su-blocks", … … 85 85 "type": "string", 86 86 "default": "" 87 }, 88 "isManual": { 89 "type": "boolean", 90 "default": false 87 91 } 88 92 } -
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 6 6 msgid "" 7 7 msgstr "" 8 "Project-Id-Version: Blogcard for WP 2. 0.0\n"8 "Project-Id-Version: Blogcard for WP 2.1.2\n" 9 9 "Report-Msgid-Bugs-To: \n" 10 10 "POT-Creation-Date: 2024-12-19 12:00+0000\n" … … 27 27 28 28 #: src/components/Controls.js:91 29 #: src/components/SearchInput.js:13 30 #: src/components/SearchInput.js:178 29 31 msgid "https://example.com or キーワード" 30 32 msgstr "https://example.com or keywords" 31 33 32 34 #: src/components/Controls.js:96 35 #: src/components/Controls.js:98 33 36 msgid "TARGET属性" 34 37 msgstr "TARGET Attribute" … … 106 109 msgstr "Enter description" 107 110 111 #: src/components/Controls.js:180 112 msgid "Faviconを手動で入力" 113 msgstr "Enter Favicon Manually" 114 115 #: src/components/Controls.js:182 116 msgid "Favicon URL" 117 msgstr "Favicon URL" 118 119 #: src/components/Controls.js:185 120 msgid "https://example.com/favicon.ico" 121 msgstr "https://example.com/favicon.ico" 122 108 123 #: src/components/Controls.js:77 109 124 msgid "サムネイルを設定" … … 123 138 124 139 #: 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" 140 msgid "このブログカードのキャッシュをクリア" 141 msgstr "Clear cache for this blog card" 142 143 #: src/components/Controls.js:236 144 msgid "すべてのブログカードのキャッシュをクリア" 145 msgstr "Clear cache for all blog cards" 135 146 136 147 #: src/components/Controls.js:264 … … 147 158 148 159 #: src/components/PreviewFooter.js:46 149 msgid "リンク先を 表示"150 msgstr " ViewLink"160 msgid "リンク先を確認" 161 msgstr "Check Link" 151 162 152 163 #: src/components/SearchInput.js:14 … … 182 193 msgstr "No search results found" 183 194 195 #: src/edit.jsx:165 196 #: src/edit.jsx:198 197 msgid "検索して作成" 198 msgstr "Search & Create" 199 200 #: src/edit.jsx:174 201 #: src/edit.jsx:188 202 msgid "手動で作成" 203 msgstr "Create Manually" 204 205 #: src/edit.jsx:215 206 #: src/edit.jsx:239 207 msgid "https://example.com" 208 msgstr "https://example.com" 209 210 #: src/edit.jsx:216 211 #: src/edit.jsx:240 212 msgid "URLを変更するにはブロックを削除して再作成してください" 213 msgstr "To change the URL, please delete the block and recreate it" 214 184 215 #: src/edit.js:88 216 #: blogcard-for-wp.php:155 217 #: blogcard-for-wp.php:214 185 218 msgid "メタデータの取得に失敗しました。" 186 219 msgstr "Failed to fetch metadata." … … 199 232 200 233 #: 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 201 238 msgid "URLが指定されていません。" 202 239 msgstr "URL is not specified." 203 240 204 241 #: blogcard-for-wp.php:204 242 #: blogcard-for-wp.php:241 243 #: blogcard-for-wp.php:264 205 244 msgid "無効なURL形式です。" 206 245 msgstr "Invalid URL format." 207 246 208 247 #: blogcard-for-wp.php:256 248 #: blogcard-for-wp.php:296 249 #: blogcard-for-wp.php:324 209 250 msgid "サーバーの応答が遅すぎます。しばらく時間をおいてから再度お試しください。" 210 251 msgstr "Server response is too slow. Please try again after a while." 211 252 212 253 #: blogcard-for-wp.php:260 254 #: blogcard-for-wp.php:300 255 #: blogcard-for-wp.php:328 213 256 msgid "サーバーに接続できませんでした。" 214 257 msgstr "Could not connect to server." 215 258 216 259 #: blogcard-for-wp.php:264 260 #: blogcard-for-wp.php:304 261 #: blogcard-for-wp.php:332 217 262 msgid "SSL証明書の検証に失敗しました。" 218 263 msgstr "SSL certificate verification failed." 219 264 220 265 #: blogcard-for-wp.php:278 266 #: blogcard-for-wp.php:318 267 #: blogcard-for-wp.php:346 221 268 msgid "HTTPエラーが発生しました" 222 269 msgstr "HTTP error occurred" 223 270 224 271 #: blogcard-for-wp.php:281 272 #: blogcard-for-wp.php:321 273 #: blogcard-for-wp.php:349 225 274 msgid "ページが見つかりません (404)" 226 275 msgstr "Page not found (404)" 227 276 228 277 #: blogcard-for-wp.php:284 278 #: blogcard-for-wp.php:324 279 #: blogcard-for-wp.php:352 229 280 msgid "アクセスが拒否されました (403)" 230 281 msgstr "Access denied (403)" 231 282 232 283 #: blogcard-for-wp.php:287 284 #: blogcard-for-wp.php:327 285 #: blogcard-for-wp.php:355 233 286 msgid "サーバーエラーが発生しました (500)" 234 287 msgstr "Server error occurred (500)" 235 288 236 289 #: blogcard-for-wp.php:290 290 #: blogcard-for-wp.php:330 291 #: blogcard-for-wp.php:358 237 292 msgid "サービスが利用できません (503)" 238 293 msgstr "Service unavailable (503)" 239 294 240 295 #: blogcard-for-wp.php:293 296 #: blogcard-for-wp.php:333 297 #: blogcard-for-wp.php:361 241 298 msgid "HTTPエラーが発生しました (%d)" 242 299 msgstr "HTTP error occurred (%d)" 243 300 244 301 #: blogcard-for-wp.php:376 302 #: blogcard-for-wp.php:419 303 #: blogcard-for-wp.php:452 245 304 msgid "検索クエリが指定されていません。" 246 305 msgstr "Search query is not specified." 247 306 248 307 #: blogcard-for-wp.php:432 308 #: blogcard-for-wp.php:476 309 #: blogcard-for-wp.php:509 249 310 msgid "指定されたURLの投稿が見つかりません。" 250 311 msgstr "Post not found for the specified URL." 251 312 252 313 #: blogcard-for-wp.php:478 314 #: blogcard-for-wp.php:522 315 #: blogcard-for-wp.php:555 253 316 msgid "全てのキャッシュをクリアしました。" 254 317 msgstr "All cache cleared." 255 318 256 319 #: blogcard-for-wp.php:486 320 #: blogcard-for-wp.php:530 321 #: blogcard-for-wp.php:563 257 322 msgid "ブログカードのキャッシュをクリアしました。" 258 323 msgstr "Blog card cache cleared." 324 325 #: includes/admin-settings.php:16 326 msgid "SU Blogcard" 327 msgstr "SU Blogcard" 328 329 #: includes/admin-settings.php:33 330 msgid "一般設定" 331 msgstr "General Settings" 332 333 #: includes/admin-settings.php:40 334 msgid "外部リンクのターゲット" 335 msgstr "External Link Target" 336 337 #: includes/admin-settings.php:48 338 msgid "内部リンクのターゲット" 339 msgstr "Internal Link Target" 340 341 #: includes/admin-settings.php:56 342 msgid "キャッシュ保持期間" 343 msgstr "Cache Duration" 344 345 #: includes/admin-settings.php:64 346 msgid "データ削除設定" 347 msgstr "Data Deletion Settings" 348 349 #: includes/admin-settings.php:98 350 #: includes/admin-settings.php:113 351 msgid "_blank (新しいタブで開く)" 352 msgstr "_blank (Open in new tab)" 353 354 #: includes/admin-settings.php:99 355 #: includes/admin-settings.php:114 356 msgid "_self (同じタブで開く)" 357 msgstr "_self (Open in same tab)" 358 359 #: includes/admin-settings.php:101 360 msgid "外部サイトへのリンクのデフォルトのターゲット属性を設定します。" 361 msgstr "Sets the default target attribute for links to external sites." 362 363 #: includes/admin-settings.php:116 364 msgid "自サイト内へのリンクのデフォルトのターゲット属性を設定します。" 365 msgstr "Sets the default target attribute for links within your own site." 366 367 #: includes/admin-settings.php:128 368 msgid "ブログカードのメタデータ情報のキャッシュ保持期間を設定します(単位:時間)。" 369 msgstr "Sets the cache retention period for blog card metadata (in hours)." 370 371 #: includes/admin-settings.php:141 372 msgid "プラグイン削除時にすべてのデータ(設定とキャッシュ)を削除する" 373 msgstr "Delete all data (settings and cache) when deleting the plugin" 374 375 #: includes/admin-settings.php:143 376 msgid "この設定を有効にすると、プラグインをアンインストールした際に、保存された設定とキャッシュデータがすべて削除されます。" 377 msgstr "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 7 7 msgid "" 8 8 msgstr "" 9 "Project-Id-Version: Blogcard for WP 2. 0.0\n"9 "Project-Id-Version: Blogcard for WP 2.1.2\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 11 "POT-Creation-Date: 2024-12-19 12:00+0000\n" … … 28 28 29 29 #: src/components/Controls.js:91 30 #: src/components/SearchInput.js:13 31 #: src/components/SearchInput.js:178 30 32 msgid "https://example.com or キーワード" 31 33 msgstr "" 32 34 33 35 #: src/components/Controls.js:96 34 msgid "TARGET属性"35 msgstr ""36 37 36 #: src/components/Controls.js:98 38 37 msgid "TARGET属性" … … 111 110 msgstr "" 112 111 112 #: src/components/Controls.js:180 113 msgid "Faviconを手動で入力" 114 msgstr "" 115 116 #: src/components/Controls.js:182 117 msgid "Favicon URL" 118 msgstr "" 119 120 #: src/components/Controls.js:185 121 msgid "https://example.com/favicon.ico" 122 msgstr "" 123 113 124 #: src/components/Controls.js:77 114 125 msgid "サムネイルを設定" … … 128 139 129 140 #: 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 "全キャッシュクリア" 141 msgid "このブログカードのキャッシュをクリア" 142 msgstr "" 143 144 #: src/components/Controls.js:236 145 msgid "すべてのブログカードのキャッシュをクリア" 139 146 msgstr "" 140 147 … … 152 159 153 160 #: src/components/PreviewFooter.js:46 154 msgid "リンク先を表示" 155 msgstr "" 156 157 #: src/components/SearchInput.js:13 158 msgid "https://example.com or キーワード" 161 msgid "リンク先を確認" 159 162 msgstr "" 160 163 … … 191 194 msgstr "" 192 195 196 #: src/edit.jsx:165 197 #: src/edit.jsx:198 198 msgid "検索して作成" 199 msgstr "" 200 201 #: src/edit.jsx:174 202 #: src/edit.jsx:188 203 msgid "手動で作成" 204 msgstr "" 205 206 #: src/edit.jsx:215 207 #: src/edit.jsx:239 208 msgid "https://example.com" 209 msgstr "" 210 211 #: src/edit.jsx:216 212 #: src/edit.jsx:240 213 msgid "URLを変更するにはブロックを削除して再作成してください" 214 msgstr "" 215 193 216 #: src/edit.js:88 217 #: blogcard-for-wp.php:155 218 #: blogcard-for-wp.php:214 194 219 msgid "メタデータの取得に失敗しました。" 195 220 msgstr "" … … 208 233 209 234 #: 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 210 239 msgid "URLが指定されていません。" 211 240 msgstr "" 212 241 213 #: blogcard-for-wp.php:118214 msgid "メタデータの取得に失敗しました。"215 msgstr ""216 217 #: blogcard-for-wp.php:134218 msgid "URLが指定されていません。"219 msgstr ""220 221 242 #: blogcard-for-wp.php:204 243 #: blogcard-for-wp.php:241 244 #: blogcard-for-wp.php:264 222 245 msgid "無効なURL形式です。" 223 246 msgstr "" 224 247 225 248 #: blogcard-for-wp.php:256 249 #: blogcard-for-wp.php:296 250 #: blogcard-for-wp.php:324 226 251 msgid "サーバーの応答が遅すぎます。しばらく時間をおいてから再度お試しください。" 227 252 msgstr "" 228 253 229 254 #: blogcard-for-wp.php:260 255 #: blogcard-for-wp.php:300 256 #: blogcard-for-wp.php:328 230 257 msgid "サーバーに接続できませんでした。" 231 258 msgstr "" 232 259 233 260 #: blogcard-for-wp.php:264 261 #: blogcard-for-wp.php:304 262 #: blogcard-for-wp.php:332 234 263 msgid "SSL証明書の検証に失敗しました。" 235 264 msgstr "" 236 265 237 266 #: blogcard-for-wp.php:278 267 #: blogcard-for-wp.php:318 268 #: blogcard-for-wp.php:346 238 269 msgid "HTTPエラーが発生しました" 239 270 msgstr "" 240 271 241 272 #: blogcard-for-wp.php:281 273 #: blogcard-for-wp.php:321 274 #: blogcard-for-wp.php:349 242 275 msgid "ページが見つかりません (404)" 243 276 msgstr "" 244 277 245 278 #: blogcard-for-wp.php:284 279 #: blogcard-for-wp.php:324 280 #: blogcard-for-wp.php:352 246 281 msgid "アクセスが拒否されました (403)" 247 282 msgstr "" 248 283 249 284 #: blogcard-for-wp.php:287 285 #: blogcard-for-wp.php:327 286 #: blogcard-for-wp.php:355 250 287 msgid "サーバーエラーが発生しました (500)" 251 288 msgstr "" 252 289 253 290 #: blogcard-for-wp.php:290 291 #: blogcard-for-wp.php:330 292 #: blogcard-for-wp.php:358 254 293 msgid "サービスが利用できません (503)" 255 294 msgstr "" 256 295 257 296 #: blogcard-for-wp.php:293 297 #: blogcard-for-wp.php:333 298 #: blogcard-for-wp.php:361 258 299 msgid "HTTPエラーが発生しました (%d)" 259 300 msgstr "" 260 301 261 302 #: blogcard-for-wp.php:376 303 #: blogcard-for-wp.php:419 304 #: blogcard-for-wp.php:452 262 305 msgid "検索クエリが指定されていません。" 263 306 msgstr "" 264 307 265 308 #: blogcard-for-wp.php:432 309 #: blogcard-for-wp.php:476 310 #: blogcard-for-wp.php:509 266 311 msgid "指定されたURLの投稿が見つかりません。" 267 312 msgstr "" 268 313 269 314 #: blogcard-for-wp.php:478 315 #: blogcard-for-wp.php:522 316 #: blogcard-for-wp.php:555 270 317 msgid "全てのキャッシュをクリアしました。" 271 318 msgstr "" 272 319 273 320 #: blogcard-for-wp.php:486 321 #: blogcard-for-wp.php:530 322 #: blogcard-for-wp.php:563 274 323 msgid "ブログカードのキャッシュをクリアしました。" 275 324 msgstr "" 325 326 #: includes/admin-settings.php:16 327 msgid "SU Blogcard" 328 msgstr "" 329 330 #: includes/admin-settings.php:33 331 msgid "一般設定" 332 msgstr "" 333 334 #: includes/admin-settings.php:40 335 msgid "外部リンクのターゲット" 336 msgstr "" 337 338 #: includes/admin-settings.php:48 339 msgid "内部リンクのターゲット" 340 msgstr "" 341 342 #: includes/admin-settings.php:56 343 msgid "キャッシュ保持期間" 344 msgstr "" 345 346 #: includes/admin-settings.php:64 347 msgid "データ削除設定" 348 msgstr "" 349 350 #: includes/admin-settings.php:98 351 #: includes/admin-settings.php:113 352 msgid "_blank (新しいタブで開く)" 353 msgstr "" 354 355 #: includes/admin-settings.php:99 356 #: includes/admin-settings.php:114 357 msgid "_self (同じタブで開く)" 358 msgstr "" 359 360 #: includes/admin-settings.php:101 361 msgid "外部サイトへのリンクのデフォルトのターゲット属性を設定します。" 362 msgstr "" 363 364 #: includes/admin-settings.php:116 365 msgid "自サイト内へのリンクのデフォルトのターゲット属性を設定します。" 366 msgstr "" 367 368 #: includes/admin-settings.php:128 369 msgid "ブログカードのメタデータ情報のキャッシュ保持期間を設定します(単位:時間)。" 370 msgstr "" 371 372 #: includes/admin-settings.php:141 373 msgid "プラグイン削除時にすべてのデータ(設定とキャッシュ)を削除する" 374 msgstr "" 375 376 #: includes/admin-settings.php:143 377 msgid "この設定を有効にすると、プラグインをアンインストールした際に、保存された設定とキャッシュデータがすべて削除されます。" 378 msgstr "" -
blogcard-for-wp/tags/2.2.0/readme-ja.txt
r3451271 r3460397 5 5 Tested up to: 6.8.2 6 6 Requires PHP: 7.4 7 Stable tag: 2. 1.07 Stable tag: 2.2.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 18 18 バージョン2.0.0からの新機能で、サイト内検索からブログカードを作ることができるようになりました。 19 19 これによって、自分のサイト内の記事を検索ワードからブログカード化できるようになりました。 20 21 バージョン2.2.0では、外部リンクと内部リンクのデフォルトターゲット属性、キャッシュ保持期間、データ削除オプションを設定できる設定ページが追加されました。また、FaviconのURLを手動で設定できるようになりました。 20 22 21 23 > **【重要な変更点】(2.1.0〜)** … … 36 38 * **サイト内検索**: サイト内の投稿を検索してブログカード化可能 37 39 * **ダークモード対応** .darkクラスによるダークモードに対応 40 * **高度な管理機能**: デフォルトのリンクターゲット、キャッシュ期間、手動Favicon設定が可能 38 41 39 42 == インストール == … … 100 103 101 104 == Changelog == 105 106 = 2.2.0 = 107 * 新機能: 外部リンク・内部リンクのデフォルトターゲット属性を設定する機能を追加。 108 * 新機能: FaviconのURLを手動で設定する機能を追加。 109 * 新機能: キャッシュ保持期間を設定する機能を追加。 110 * 新機能: アンインストール時にプラグインデータを削除するオプションを追加。 111 * 改善: ブロックエディターのUIレイアウトを調整。 112 * 更新: 内部コード構造のリファクタリング。 113 114 = 2.1.2 = 115 * CSSの更新。 102 116 103 117 = 2.1.0 = -
blogcard-for-wp/tags/2.2.0/readme.txt
r3451275 r3460397 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 2. 1.27 Stable tag: 2.2.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 38 38 * **Site Search**: Search and convert internal posts into blog cards 39 39 * **Dark Mode Support**: Supports dark mode with .dark class 40 * **Advanced Management**: Configure default link targets, cache duration, and manual favicon support 40 41 41 42 == Installation == … … 102 103 103 104 == 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. 104 112 105 113 = 2.1.2 = -
blogcard-for-wp/trunk/blogcard-for-wp.php
r3451275 r3460397 5 5 * Plugin URI: https://wordpress.org/plugins/blogcard-for-wp/ 6 6 * Description: URLを入力してブログカードを生成するブロックプラグイン 7 * Version: 2. 1.27 * Version: 2.2.0 8 8 * Author: Takashi Fujisaki 9 9 * License: GPL v2 or later … … 18 18 // プラグインの定数 19 19 define( 'WPBC_PLUGIN_PATH', plugin_dir_path( __FILE__ ) ); 20 21 // 管理画面設定の読み込み 22 require_once WPBC_PLUGIN_PATH . 'includes/admin-settings.php'; 20 23 21 24 /** … … 49 52 // ブロックの登録 50 53 register_block_type( WPBC_PLUGIN_PATH . 'build/block.json' ); 54 55 // 設定をブロックエディタに渡す 56 add_action( 'enqueue_block_editor_assets', 'wpbc_enqueue_editor_assets' ); 51 57 } 52 58 add_action( 'init', 'wpbc_init' ); 59 60 /** 61 * ブロックエディタ用アセットのエンキュー 62 */ 63 function 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 } 53 76 54 77 /** … … 249 272 } 250 273 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 ); 253 281 254 282 return $metadata; … … 394 422 } 395 423 396 // ファビコンを取得424 // Faviconを取得 397 425 $favicon_url = wpbc_get_favicon_url( $xpath, $url ); 398 426 if ( $favicon_url ) { … … 404 432 $metadata['cached'] = false; 405 433 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 ); 408 441 409 442 return $metadata; … … 450 483 foreach ( $sorted_posts as $post ) { 451 484 $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 ), 458 492 ); 459 493 } … … 538 572 539 573 /** 540 * ファビコンを取得する関数574 * Faviconを取得する関数 541 575 */ 542 576 function wpbc_get_favicon_url( $xpath, $base_url ) { 543 577 $favicon_url = null; 544 578 545 // ファビコンのURLを取得するクエリ(優先順位順)579 // FaviconのURLを取得するクエリ(優先順位順) 546 580 $queries = array( 547 581 "//link[@rel='icon' and @type='image/svg+xml']", … … 566 600 $temp_url = wpbc_convert_to_absolute_url( $temp_url, $base_url ); 567 601 568 // ファビコンのURLが有効かチェック602 // FaviconのURLが有効かチェック 569 603 if ( wpbc_check_favicon_exists( $temp_url ) ) { 570 604 return $temp_url; … … 574 608 } 575 609 576 // ドメイン直下の ファビコンを探す610 // ドメイン直下のFaviconを探す 577 611 $default_favicons = array( 578 612 wpbc_convert_to_absolute_url( '/favicon.svg', $base_url ), … … 610 644 611 645 /** 612 * ファビコンが存在するかチェックする646 * Faviconが存在するかチェックする 613 647 */ 614 648 function wpbc_check_favicon_exists( $url ) { -
blogcard-for-wp/trunk/build/block.json
r3451271 r3460397 3 3 "apiVersion": 3, 4 4 "name": "su/blogcard", 5 "version": "2. 1.0",5 "version": "2.2.0", 6 6 "title": "ブログカード", 7 7 "category": "su-blocks", … … 85 85 "type": "string", 86 86 "default": "" 87 }, 88 "isManual": { 89 "type": "boolean", 90 "default": false 87 91 } 88 92 } -
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 6 6 msgid "" 7 7 msgstr "" 8 "Project-Id-Version: Blogcard for WP 2. 0.0\n"8 "Project-Id-Version: Blogcard for WP 2.1.2\n" 9 9 "Report-Msgid-Bugs-To: \n" 10 10 "POT-Creation-Date: 2024-12-19 12:00+0000\n" … … 27 27 28 28 #: src/components/Controls.js:91 29 #: src/components/SearchInput.js:13 30 #: src/components/SearchInput.js:178 29 31 msgid "https://example.com or キーワード" 30 32 msgstr "https://example.com or keywords" 31 33 32 34 #: src/components/Controls.js:96 35 #: src/components/Controls.js:98 33 36 msgid "TARGET属性" 34 37 msgstr "TARGET Attribute" … … 106 109 msgstr "Enter description" 107 110 111 #: src/components/Controls.js:180 112 msgid "Faviconを手動で入力" 113 msgstr "Enter Favicon Manually" 114 115 #: src/components/Controls.js:182 116 msgid "Favicon URL" 117 msgstr "Favicon URL" 118 119 #: src/components/Controls.js:185 120 msgid "https://example.com/favicon.ico" 121 msgstr "https://example.com/favicon.ico" 122 108 123 #: src/components/Controls.js:77 109 124 msgid "サムネイルを設定" … … 123 138 124 139 #: 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" 140 msgid "このブログカードのキャッシュをクリア" 141 msgstr "Clear cache for this blog card" 142 143 #: src/components/Controls.js:236 144 msgid "すべてのブログカードのキャッシュをクリア" 145 msgstr "Clear cache for all blog cards" 135 146 136 147 #: src/components/Controls.js:264 … … 147 158 148 159 #: src/components/PreviewFooter.js:46 149 msgid "リンク先を 表示"150 msgstr " ViewLink"160 msgid "リンク先を確認" 161 msgstr "Check Link" 151 162 152 163 #: src/components/SearchInput.js:14 … … 182 193 msgstr "No search results found" 183 194 195 #: src/edit.jsx:165 196 #: src/edit.jsx:198 197 msgid "検索して作成" 198 msgstr "Search & Create" 199 200 #: src/edit.jsx:174 201 #: src/edit.jsx:188 202 msgid "手動で作成" 203 msgstr "Create Manually" 204 205 #: src/edit.jsx:215 206 #: src/edit.jsx:239 207 msgid "https://example.com" 208 msgstr "https://example.com" 209 210 #: src/edit.jsx:216 211 #: src/edit.jsx:240 212 msgid "URLを変更するにはブロックを削除して再作成してください" 213 msgstr "To change the URL, please delete the block and recreate it" 214 184 215 #: src/edit.js:88 216 #: blogcard-for-wp.php:155 217 #: blogcard-for-wp.php:214 185 218 msgid "メタデータの取得に失敗しました。" 186 219 msgstr "Failed to fetch metadata." … … 199 232 200 233 #: 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 201 238 msgid "URLが指定されていません。" 202 239 msgstr "URL is not specified." 203 240 204 241 #: blogcard-for-wp.php:204 242 #: blogcard-for-wp.php:241 243 #: blogcard-for-wp.php:264 205 244 msgid "無効なURL形式です。" 206 245 msgstr "Invalid URL format." 207 246 208 247 #: blogcard-for-wp.php:256 248 #: blogcard-for-wp.php:296 249 #: blogcard-for-wp.php:324 209 250 msgid "サーバーの応答が遅すぎます。しばらく時間をおいてから再度お試しください。" 210 251 msgstr "Server response is too slow. Please try again after a while." 211 252 212 253 #: blogcard-for-wp.php:260 254 #: blogcard-for-wp.php:300 255 #: blogcard-for-wp.php:328 213 256 msgid "サーバーに接続できませんでした。" 214 257 msgstr "Could not connect to server." 215 258 216 259 #: blogcard-for-wp.php:264 260 #: blogcard-for-wp.php:304 261 #: blogcard-for-wp.php:332 217 262 msgid "SSL証明書の検証に失敗しました。" 218 263 msgstr "SSL certificate verification failed." 219 264 220 265 #: blogcard-for-wp.php:278 266 #: blogcard-for-wp.php:318 267 #: blogcard-for-wp.php:346 221 268 msgid "HTTPエラーが発生しました" 222 269 msgstr "HTTP error occurred" 223 270 224 271 #: blogcard-for-wp.php:281 272 #: blogcard-for-wp.php:321 273 #: blogcard-for-wp.php:349 225 274 msgid "ページが見つかりません (404)" 226 275 msgstr "Page not found (404)" 227 276 228 277 #: blogcard-for-wp.php:284 278 #: blogcard-for-wp.php:324 279 #: blogcard-for-wp.php:352 229 280 msgid "アクセスが拒否されました (403)" 230 281 msgstr "Access denied (403)" 231 282 232 283 #: blogcard-for-wp.php:287 284 #: blogcard-for-wp.php:327 285 #: blogcard-for-wp.php:355 233 286 msgid "サーバーエラーが発生しました (500)" 234 287 msgstr "Server error occurred (500)" 235 288 236 289 #: blogcard-for-wp.php:290 290 #: blogcard-for-wp.php:330 291 #: blogcard-for-wp.php:358 237 292 msgid "サービスが利用できません (503)" 238 293 msgstr "Service unavailable (503)" 239 294 240 295 #: blogcard-for-wp.php:293 296 #: blogcard-for-wp.php:333 297 #: blogcard-for-wp.php:361 241 298 msgid "HTTPエラーが発生しました (%d)" 242 299 msgstr "HTTP error occurred (%d)" 243 300 244 301 #: blogcard-for-wp.php:376 302 #: blogcard-for-wp.php:419 303 #: blogcard-for-wp.php:452 245 304 msgid "検索クエリが指定されていません。" 246 305 msgstr "Search query is not specified." 247 306 248 307 #: blogcard-for-wp.php:432 308 #: blogcard-for-wp.php:476 309 #: blogcard-for-wp.php:509 249 310 msgid "指定されたURLの投稿が見つかりません。" 250 311 msgstr "Post not found for the specified URL." 251 312 252 313 #: blogcard-for-wp.php:478 314 #: blogcard-for-wp.php:522 315 #: blogcard-for-wp.php:555 253 316 msgid "全てのキャッシュをクリアしました。" 254 317 msgstr "All cache cleared." 255 318 256 319 #: blogcard-for-wp.php:486 320 #: blogcard-for-wp.php:530 321 #: blogcard-for-wp.php:563 257 322 msgid "ブログカードのキャッシュをクリアしました。" 258 323 msgstr "Blog card cache cleared." 324 325 #: includes/admin-settings.php:16 326 msgid "SU Blogcard" 327 msgstr "SU Blogcard" 328 329 #: includes/admin-settings.php:33 330 msgid "一般設定" 331 msgstr "General Settings" 332 333 #: includes/admin-settings.php:40 334 msgid "外部リンクのターゲット" 335 msgstr "External Link Target" 336 337 #: includes/admin-settings.php:48 338 msgid "内部リンクのターゲット" 339 msgstr "Internal Link Target" 340 341 #: includes/admin-settings.php:56 342 msgid "キャッシュ保持期間" 343 msgstr "Cache Duration" 344 345 #: includes/admin-settings.php:64 346 msgid "データ削除設定" 347 msgstr "Data Deletion Settings" 348 349 #: includes/admin-settings.php:98 350 #: includes/admin-settings.php:113 351 msgid "_blank (新しいタブで開く)" 352 msgstr "_blank (Open in new tab)" 353 354 #: includes/admin-settings.php:99 355 #: includes/admin-settings.php:114 356 msgid "_self (同じタブで開く)" 357 msgstr "_self (Open in same tab)" 358 359 #: includes/admin-settings.php:101 360 msgid "外部サイトへのリンクのデフォルトのターゲット属性を設定します。" 361 msgstr "Sets the default target attribute for links to external sites." 362 363 #: includes/admin-settings.php:116 364 msgid "自サイト内へのリンクのデフォルトのターゲット属性を設定します。" 365 msgstr "Sets the default target attribute for links within your own site." 366 367 #: includes/admin-settings.php:128 368 msgid "ブログカードのメタデータ情報のキャッシュ保持期間を設定します(単位:時間)。" 369 msgstr "Sets the cache retention period for blog card metadata (in hours)." 370 371 #: includes/admin-settings.php:141 372 msgid "プラグイン削除時にすべてのデータ(設定とキャッシュ)を削除する" 373 msgstr "Delete all data (settings and cache) when deleting the plugin" 374 375 #: includes/admin-settings.php:143 376 msgid "この設定を有効にすると、プラグインをアンインストールした際に、保存された設定とキャッシュデータがすべて削除されます。" 377 msgstr "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 7 7 msgid "" 8 8 msgstr "" 9 "Project-Id-Version: Blogcard for WP 2. 0.0\n"9 "Project-Id-Version: Blogcard for WP 2.1.2\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 11 "POT-Creation-Date: 2024-12-19 12:00+0000\n" … … 28 28 29 29 #: src/components/Controls.js:91 30 #: src/components/SearchInput.js:13 31 #: src/components/SearchInput.js:178 30 32 msgid "https://example.com or キーワード" 31 33 msgstr "" 32 34 33 35 #: src/components/Controls.js:96 34 msgid "TARGET属性"35 msgstr ""36 37 36 #: src/components/Controls.js:98 38 37 msgid "TARGET属性" … … 111 110 msgstr "" 112 111 112 #: src/components/Controls.js:180 113 msgid "Faviconを手動で入力" 114 msgstr "" 115 116 #: src/components/Controls.js:182 117 msgid "Favicon URL" 118 msgstr "" 119 120 #: src/components/Controls.js:185 121 msgid "https://example.com/favicon.ico" 122 msgstr "" 123 113 124 #: src/components/Controls.js:77 114 125 msgid "サムネイルを設定" … … 128 139 129 140 #: 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 "全キャッシュクリア" 141 msgid "このブログカードのキャッシュをクリア" 142 msgstr "" 143 144 #: src/components/Controls.js:236 145 msgid "すべてのブログカードのキャッシュをクリア" 139 146 msgstr "" 140 147 … … 152 159 153 160 #: src/components/PreviewFooter.js:46 154 msgid "リンク先を表示" 155 msgstr "" 156 157 #: src/components/SearchInput.js:13 158 msgid "https://example.com or キーワード" 161 msgid "リンク先を確認" 159 162 msgstr "" 160 163 … … 191 194 msgstr "" 192 195 196 #: src/edit.jsx:165 197 #: src/edit.jsx:198 198 msgid "検索して作成" 199 msgstr "" 200 201 #: src/edit.jsx:174 202 #: src/edit.jsx:188 203 msgid "手動で作成" 204 msgstr "" 205 206 #: src/edit.jsx:215 207 #: src/edit.jsx:239 208 msgid "https://example.com" 209 msgstr "" 210 211 #: src/edit.jsx:216 212 #: src/edit.jsx:240 213 msgid "URLを変更するにはブロックを削除して再作成してください" 214 msgstr "" 215 193 216 #: src/edit.js:88 217 #: blogcard-for-wp.php:155 218 #: blogcard-for-wp.php:214 194 219 msgid "メタデータの取得に失敗しました。" 195 220 msgstr "" … … 208 233 209 234 #: 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 210 239 msgid "URLが指定されていません。" 211 240 msgstr "" 212 241 213 #: blogcard-for-wp.php:118214 msgid "メタデータの取得に失敗しました。"215 msgstr ""216 217 #: blogcard-for-wp.php:134218 msgid "URLが指定されていません。"219 msgstr ""220 221 242 #: blogcard-for-wp.php:204 243 #: blogcard-for-wp.php:241 244 #: blogcard-for-wp.php:264 222 245 msgid "無効なURL形式です。" 223 246 msgstr "" 224 247 225 248 #: blogcard-for-wp.php:256 249 #: blogcard-for-wp.php:296 250 #: blogcard-for-wp.php:324 226 251 msgid "サーバーの応答が遅すぎます。しばらく時間をおいてから再度お試しください。" 227 252 msgstr "" 228 253 229 254 #: blogcard-for-wp.php:260 255 #: blogcard-for-wp.php:300 256 #: blogcard-for-wp.php:328 230 257 msgid "サーバーに接続できませんでした。" 231 258 msgstr "" 232 259 233 260 #: blogcard-for-wp.php:264 261 #: blogcard-for-wp.php:304 262 #: blogcard-for-wp.php:332 234 263 msgid "SSL証明書の検証に失敗しました。" 235 264 msgstr "" 236 265 237 266 #: blogcard-for-wp.php:278 267 #: blogcard-for-wp.php:318 268 #: blogcard-for-wp.php:346 238 269 msgid "HTTPエラーが発生しました" 239 270 msgstr "" 240 271 241 272 #: blogcard-for-wp.php:281 273 #: blogcard-for-wp.php:321 274 #: blogcard-for-wp.php:349 242 275 msgid "ページが見つかりません (404)" 243 276 msgstr "" 244 277 245 278 #: blogcard-for-wp.php:284 279 #: blogcard-for-wp.php:324 280 #: blogcard-for-wp.php:352 246 281 msgid "アクセスが拒否されました (403)" 247 282 msgstr "" 248 283 249 284 #: blogcard-for-wp.php:287 285 #: blogcard-for-wp.php:327 286 #: blogcard-for-wp.php:355 250 287 msgid "サーバーエラーが発生しました (500)" 251 288 msgstr "" 252 289 253 290 #: blogcard-for-wp.php:290 291 #: blogcard-for-wp.php:330 292 #: blogcard-for-wp.php:358 254 293 msgid "サービスが利用できません (503)" 255 294 msgstr "" 256 295 257 296 #: blogcard-for-wp.php:293 297 #: blogcard-for-wp.php:333 298 #: blogcard-for-wp.php:361 258 299 msgid "HTTPエラーが発生しました (%d)" 259 300 msgstr "" 260 301 261 302 #: blogcard-for-wp.php:376 303 #: blogcard-for-wp.php:419 304 #: blogcard-for-wp.php:452 262 305 msgid "検索クエリが指定されていません。" 263 306 msgstr "" 264 307 265 308 #: blogcard-for-wp.php:432 309 #: blogcard-for-wp.php:476 310 #: blogcard-for-wp.php:509 266 311 msgid "指定されたURLの投稿が見つかりません。" 267 312 msgstr "" 268 313 269 314 #: blogcard-for-wp.php:478 315 #: blogcard-for-wp.php:522 316 #: blogcard-for-wp.php:555 270 317 msgid "全てのキャッシュをクリアしました。" 271 318 msgstr "" 272 319 273 320 #: blogcard-for-wp.php:486 321 #: blogcard-for-wp.php:530 322 #: blogcard-for-wp.php:563 274 323 msgid "ブログカードのキャッシュをクリアしました。" 275 324 msgstr "" 325 326 #: includes/admin-settings.php:16 327 msgid "SU Blogcard" 328 msgstr "" 329 330 #: includes/admin-settings.php:33 331 msgid "一般設定" 332 msgstr "" 333 334 #: includes/admin-settings.php:40 335 msgid "外部リンクのターゲット" 336 msgstr "" 337 338 #: includes/admin-settings.php:48 339 msgid "内部リンクのターゲット" 340 msgstr "" 341 342 #: includes/admin-settings.php:56 343 msgid "キャッシュ保持期間" 344 msgstr "" 345 346 #: includes/admin-settings.php:64 347 msgid "データ削除設定" 348 msgstr "" 349 350 #: includes/admin-settings.php:98 351 #: includes/admin-settings.php:113 352 msgid "_blank (新しいタブで開く)" 353 msgstr "" 354 355 #: includes/admin-settings.php:99 356 #: includes/admin-settings.php:114 357 msgid "_self (同じタブで開く)" 358 msgstr "" 359 360 #: includes/admin-settings.php:101 361 msgid "外部サイトへのリンクのデフォルトのターゲット属性を設定します。" 362 msgstr "" 363 364 #: includes/admin-settings.php:116 365 msgid "自サイト内へのリンクのデフォルトのターゲット属性を設定します。" 366 msgstr "" 367 368 #: includes/admin-settings.php:128 369 msgid "ブログカードのメタデータ情報のキャッシュ保持期間を設定します(単位:時間)。" 370 msgstr "" 371 372 #: includes/admin-settings.php:141 373 msgid "プラグイン削除時にすべてのデータ(設定とキャッシュ)を削除する" 374 msgstr "" 375 376 #: includes/admin-settings.php:143 377 msgid "この設定を有効にすると、プラグインをアンインストールした際に、保存された設定とキャッシュデータがすべて削除されます。" 378 msgstr "" -
blogcard-for-wp/trunk/readme-ja.txt
r3451271 r3460397 5 5 Tested up to: 6.8.2 6 6 Requires PHP: 7.4 7 Stable tag: 2. 1.07 Stable tag: 2.2.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 18 18 バージョン2.0.0からの新機能で、サイト内検索からブログカードを作ることができるようになりました。 19 19 これによって、自分のサイト内の記事を検索ワードからブログカード化できるようになりました。 20 21 バージョン2.2.0では、外部リンクと内部リンクのデフォルトターゲット属性、キャッシュ保持期間、データ削除オプションを設定できる設定ページが追加されました。また、FaviconのURLを手動で設定できるようになりました。 20 22 21 23 > **【重要な変更点】(2.1.0〜)** … … 36 38 * **サイト内検索**: サイト内の投稿を検索してブログカード化可能 37 39 * **ダークモード対応** .darkクラスによるダークモードに対応 40 * **高度な管理機能**: デフォルトのリンクターゲット、キャッシュ期間、手動Favicon設定が可能 38 41 39 42 == インストール == … … 100 103 101 104 == Changelog == 105 106 = 2.2.0 = 107 * 新機能: 外部リンク・内部リンクのデフォルトターゲット属性を設定する機能を追加。 108 * 新機能: FaviconのURLを手動で設定する機能を追加。 109 * 新機能: キャッシュ保持期間を設定する機能を追加。 110 * 新機能: アンインストール時にプラグインデータを削除するオプションを追加。 111 * 改善: ブロックエディターのUIレイアウトを調整。 112 * 更新: 内部コード構造のリファクタリング。 113 114 = 2.1.2 = 115 * CSSの更新。 102 116 103 117 = 2.1.0 = -
blogcard-for-wp/trunk/readme.txt
r3451275 r3460397 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 2. 1.27 Stable tag: 2.2.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 38 38 * **Site Search**: Search and convert internal posts into blog cards 39 39 * **Dark Mode Support**: Supports dark mode with .dark class 40 * **Advanced Management**: Configure default link targets, cache duration, and manual favicon support 40 41 41 42 == Installation == … … 102 103 103 104 == 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. 104 112 105 113 = 2.1.2 =
Note: See TracChangeset
for help on using the changeset viewer.