SharePoint Designer 2007 : 無償ダウンロード化

Expression Web と機能が結構かぶってるよなーと思ってたらこうくるとは

これが社内での SharePoint の活用につながれば…?まぁ、さしあたっては少し便利な HTML エディタゲットといったところか。

Word 文書からきれいな HTML とはてな記法で出力する - はじめに

社内向けページに情報を載せるときに、すでに Word で作成されている文書を HTML に変換することがしばしば。
すでにあるページのスタイルに合わせつつ HTML を生成するのはなかなか手間がかかる。Word の HTML 生成は非常に汚いソースになるしその後の整形が必要、かといって自前ではじめから HTML を作ると人によってフォーマットが変わる余地があったりとあまり美しくない。
そこで VSTO の勉強がてら、Word の文書をきれいな HTML に変換するアプリを作ってみる。

  • 組み込みスタイルの「見出し1」だと、<h1> で、見出し2なら <h2> のようにスタイルでの指定を原則とする(色指定その他も)
  • 貼り付けられている画像は適切なサイズにリサイズして HTML と併せて出力する
  • 表もそれなりに処理する
  • 半角全角の統一処理などを行う(参考:Windows Azureクラウド・サービス+.NETクライアントの例 − @IT)
  • ついでにはてな記法でも出力できるようにする
  • 図形や SmartArt その他はとりあえず無視

さて、いつ頃できるかな…

後で試す:SharePoint 関連ツール

便利そうな CodePlex にあった SharePoint 関係のツールメモ、後で試して書き直す。

SharePoint Content Deployment Wizard

下記について、エクスポートとインポートができるツール?

  • site collections
  • webs
  • lists
  • folders
  • list items (including files)

SharePoint Solution Installer

Setup.exe.config をちょっと編集するだけで wsp パッケージのインストーラが作れるツール。名前の通りインストーラだった。作成したパッケージを本番環境へ展開する際に使ったり?(4/4更新)

SharePoint SmartTemplates for Visual Studio

Visual Studio 向けのプロジェクトテンプレートで、ASCX(Web User Parts) を作成すると、WSP の作成と SharePoint Solution Installer を使ったインストーラ一式の作成までが自動化できる。触った感じでは VSeWSS でいいような気がする。(インストーラを作成してくれるのは便利だけど) (4/4更新)

Community Kit for SharePoint

Blog, Wiki, ディスカッションなどを強化するソリューションパッケージ、デフォルトであるなんちゃって Blog が Blog へ昇格か。

WSPBuilder

WSP パッケージを作成するためのツール?

SharePointにJavaScriptでTickerを実装する - まとめ

まとめると、

ということで。

はてなダイアリーで jQuery を使うには?

外部サイトに jQuery.js をおいて読み出すしかないかなぁ?ファイルも1日1画像ファイルが原則っぽくて微妙に不便…、SkyDriveあたりにプラグインのソースとかおいて公開するかなぁ。

SharePointにJavaScriptでTickerを実装する - Tickerの作成(2)

Ticker を表示させる jQuery プラグインを探していた際に見つけた、jQuery liScroll - a jQuery News Ticker を参考にしながら目的の動作を実装してみる。

////////////////////////////////////////////////////////////////////////////////
//    jQuery Plugin - dl Ticker (by Kz)
 
jQuery.fn.dlTicker = function ( settings ) {
    settings = jQuery.extend({
        moveDuration: 1000,
        showDuration: 5000,
        hoverTip: true
    }, settings);
    
    return this.each ( function() {
        var dl = $(this);
        dl.addClass('dlTicker_base');                                //    <dl class="dlTicker_base">***</dl>へ
        dl.wrap('<div class="dlTikcer_mask"></div>');                //    <div class="dlTikcer_mask"><dl>***</dl></div>へ
        dl.parent().wrap('<div class="dlTicker_container"></div>');    //    <div class="dlTicker_container"><div class="dlTikcer_mask"><dl>***</dl></div></div>へ
        var containerWidth = dl.parent().parent().width();            //    dlTikcer_maskのwidth
 
        if ( settings.hoverTip ) {
            dl.parent().parent().parent().append('<div class="dlTicker_tips" id="dlTicker_tips" style="left: -9000; top: -9000;"></div>');        
            $('#dlTicker_tips').html($('dd:eq(0)', dl).html());
            $('#dlTicker_tips').hide();
        }        
 
        dl.find('dt').hide();
        dl.find('dd').hide();
        $('dt:eq(0)', dl).show();
        dl.width(containerWidth);
 
        var itemCount = 0;
        var eventTimer = null
        
        function endAnimate() {
            eventTimer = null;
            var oldItemCount = itemCount;
            if ( (++itemCount) >= dl.find('dt').length ) {
                itemCount = 0;
            }
            $('dt:eq(' + oldItemCount + ')', dl).hide();
            $('dt:eq(' + itemCount + ')', dl).show();
            $('#dlTicker_tips').html($('dd:eq(' + itemCount + ')', dl).html());
    
            //dl.animate({left: '-'+containerWidth}, 'fast');
            dl.css('left', containerWidth);
            scroll();
        }
        
        function scroll() {
            dl.animate(
                { left: 0 },
                settings.moveDuration,
                'swing',
                function() {    //    アニメーションが終わったら
                    eventTimer = setTimeout(endAnimate, settings.showDuration);
                }
            );
        }
        scroll();
        if ( settings.hoverTip ) {
            dl.hover(
                function() {
                    var pos = dl.offset();
                    var height = dl.height();
                    $('#dlTicker_tips').css('left', pos.left).css('top', pos.top + height);
                    $('#dlTicker_tips').fadeIn('normal');
                    if ( eventTimer ) {
                        clearTimeout(eventTimer);
                        eventTimer = null;
                    }
                },
                function() {
                    $('#dlTicker_tips').fadeOut('normal');
                    $('#dlTicker_tips').css('left', -9000).css('top', -9000);
                    $('#dlTicker_tips').hide();
                    eventTimer = setTimeout(endAnimate, settings.showDuration);
                }
            );
        }
    });
};

んで、↓のように使う。setInterval を使って定期的に dl を再構築していく。


<div id="tickerPlace" />
<script type="text/javascript">
   1:  
   2: <!--
   3: setInterval('createTicker()', 30 * 60 * 1000);
   4: function createTicker()
   5: {
   6:     MOSS.Lists.getListItems({
   7:         listName: '{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}',
   8:         query: '<Query><OrderBy><FieldRef Name="Modified" Ascending="FALSE"></FieldRef></OrderBy></Query>',
   9:         fields: '<ViewFields><FieldRef Name="ID" /><FieldRef Name="Title" /><FieldRef Name="Body" /><FieldRef Name="ServerUrl" /><FieldRef Name="Modified" /></ViewFields>',
  10:         rowLimit: '5',
  11:         callback: function(result) {
  12:             if ( result.error ) {
  13:                 alert('Code : ' + result.error.code + '\nReason : ' + result.error.reason + '\nDetail' + result.error.detail);
  14:             }
  15:             var html = '<dl id="ticker">';
  16:             for ( var i = 0; i < result.rows.length; i++ )
  17:             {
  18:                 var r = result.rows[i];
  19:                 var vals = r.getAttribute('ows_ServerUrl').split('/');    vals.pop();
  20:                 var url = vals.join("/") + '/DispForm.aspx?ID=' + r.getAttribute('ows_ID');    //    アイテムへのリンク
  21:                 html += '<dt><a href="' + url + '">' + r.getAttribute('ows_Title') + 
  22:                         '</a><span>(' + r.getAttribute('ows_Modified') + ')</span></dt>'
  23:                 html += '<dd>' + r.getAttribute('ows_Body') + '</dd>';
  24:             }
  25:             html += '</dl>';
  26:             $('#tickerPlace').html(html);
  27:             $('#ticker').dlTicker();
  28:         }});
  29: }
  30: //-->
</script>
<style type="text/css">
.dlTicker_container
{
    border: 1px slolid #000;
    background-color: #fff;
    width: 738px;
    height: 30px;
    margin: 0;
    padding: 0;
    overflow: hidden;
}
.dlTikcer_mask
{
    position: relative;
    left: 10px;
    top: 8px;
    width: 718px;
    overflow: hidden;
}
.dlTicker_base
{
    position: relative;
    left: 750px;
    list-style-type: none;
    margin: 0px;
    padding: 0px;
}
.dlTicker_tips
{
    display: block;
    overflow: auto;
    position: absolute;
    border: 1px #000 solid;
    background-color: #eee;
    padding: 5px 10px 5px 10px;
    color: #000;
    width: 500px;
    max-height: 200px;
}
</style>