לכותבי הפוסטים בעברית (Internet Explorer – AddIn)

28 בדצמבר 2008

2 תגובות

 


הבעייה בלכתוב פוסטים בעברית היא ידועה, אז נכון שמי שמשתמש עם ה Live Writer, החיים שלו הרבה יותר קלים, אבל עדיין יש הרבה בלוגרים (אני בתוכם, ואל תשאלו אותי למה) שכותבים את הפוסטים באתר, אז כדי לכתוב בעברית ובאנגלית (קוד) באותו פוסט, צריך לעבור את התהליך המעצבן הבא.

 

ללחוץ על הלחצן html בסרגל כלים,

לחכות 30 שניות עד שהדף יגמור להטען,

להוסיף: div dir=rtl align=right, (או להפך באנגלית),

וללחוץ על update.

 

נשמע פשוט, לא ?

 

אז כשאתם עושים את זה הרבה פעמים, זה כבר מתחיל לעצבן, ויותר גרוע, הרבה פעמים יוצא keft במקום left, ואתם מגלים את זה רק בסוף אחרי שעשיתם publish כי ה preview לא יודע שעשיתם טעות, כי מבחינתו מספיק ltr כדי להפוך צד.

 

בקיצר, זה מאוד מעצבן.

 

אז ביום רביעי שעבר, החלטתי שזהו, חייבת להיות דרך שתפתור לי את הבעייה, התחלתי לחפש איך מוסיפים AddIn ל Internet Explorer,

חפשתי וחפשתי, וכל הזמן הגעתי רק לתוצאות של חברות מסחריות, שכותבים Templete ל Visual Studio, שאפשר לייצר דרכו AddIn,

 

כמובן שלא התכוונתי להשקיע 150$ במוצר שלהם אז המשכתי לחפש, וביאושי הוספתי את מילות הקסם (לא יודע למה לא עשיתי את זה קודם) CodeProject, כמובן שמיד הגעתי לתוצאה המבוקשת, העתקתי משם את הקוד, ושיניתי אותו כדי שיתאים למה שאנחנו צריכים.

 

אחרי שתתקינו את ה AddIn הזה, (אחרי שתחלצו, זה נמצא תחת BlogDirectionInstaller\Debug) שכתבתי, תקבלו בלחיצה ימנית על העכבר (מחוץ לתיבת הטקסט שבו כותבים את הפוסט) שני תוספות נחמדות. (יש מצב שאתם צריכים לסגור את כל ה browsers)

 

 

AddIn Pic

 

כמו שאתם רואים, נוספו שני לחצנים, אחד לכתיבה באנגלית, והשני לכתיבה בעברית,

לחיצה על כל אחד מהם תוסיף בסוף ה html את ה div המתאים.

(תזכרו שהעכבר יכול להיות בכל מקום באתר, אבל מחוץ לתיבת הטקסט שבו עורכים את הפוסט)

 

——————————

 

למעשה התלבטתי האם להוסיף בפוסט הזה גם את כל ההסברים הטכניים, או להשאיר את זה לפוסט אחר, בסוף הפוסט הנוכחי ניצח, וזה הסבה שבניגוד להרגלי, הפוסט מופיע גם בקטגוריית פיתוח וגם במומחי מיחשוב.

 

טוב, אז לפני שנראה מה ה Installer עושה, ואיך מוסיפים AddIn, נראה מה רץ ברקע כשאנחנו לוחצים על אחד משני התוספות,

 

אז כמובן שרץ script כלשהו, שהנה הוא לפניכם:

 

<SCRIPT LANGUAGE = "JavaScript">

    // Get the window object where the context menu was opened.

    var oWindow = window.external.menuArguments;

 

    // Get the document object exposed through oWindow.

    var oDocument = oWindow.document;


    {

        for(var i = 0; i < oDocument.frames.length; i++)

        {

             var editor = oDocument.frames[i];

             if(editor.document.URL == 'http://blogs.microsoft.co.il/tiny_mce/jscripts/tiny_mce/blank.htm')

             {

                 var docEditor = editor.document;

                 var divHeb = '<div dir = "rtl" align = "right">&nbsp;</div>';

                 docEditor.body.innerHTML = docEditor.body.innerHTML + divHeb;

                 break;

             }

         }

     }

 </SCRIPT>

 

 

(נורא מעצבן שאין את ה Copy As Html גם עבור דפי html)

 

הנה ההסברים:

בהתחלה אנחנו מקבלים reference אל ה window שבו נפתח ה Contex Menu.

לאחריו, אנחנו מקבלים reference אל ה document שלו.

אנחנו בודקים האם האתר שבו אנחנו נמצאים, הוא האתר של הבלוגים והדף הנוכחי הוא הדך שבו כותבים פוסטים חדשים. (לפי ה url)

אנחנו רצים בלולאה על כל ה frames של הדף.

במדה וכן, אנחנו בודקים האם ה document של ה frame הוא העורך של ה html.

אם מצאנו אותו, אנחנו מוסיפים ל body את ה div המתאים (ב script הנוכחי, לעברית)

 

כמובן שברגע שהאחראי על האתר ישנה את הקוד של האתר, זה יכול להיות שינוי שמות של urls, או שינוי של frames, ה addin יפסיק לעבוד)

 

 

אחרי שהבנו, מה הסקריפט שרץ ברקע, נראה איך מקנפגים שהוא ירוץ.

אז כל המידע נמצא כאן.

בגדול ב – registry תחת: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt

אתם מוסיפים key שהשם שלו יופיע ב context menu, וב data של ה default כותבים את המיקום של הקובץ שבו נמצא הסקריפט שלנו.

 

 

 ונעבור גם על הקוד של ה Installer.

(הבטחתי כבר לפני חודש לגיא בורשטיין שאני אכתוב מאמר על ה Installer של Visual Studio, אבל זה עדיין לא מוכן, בתקווה שהוא יהיה מוכן בקרוב, ולכן לא אעבור על כל הקונספט של ה Installer).

 

בלינק שנתתי למעלה, יש את כל הקוד של ה AddIn, שמכיל שני פרויקטים, פרויקט אחד של ה Installer שמעתיק את שני קבצי ה Html שמכילים את הסקריפטים שראינו למעלה, ומריץ את הקוד של הפרויקט השני (הוא מריץ את זה כי זה מוגדר ב Custom Action של ה Installer, כשהמאמר על ה Installer יהיה מוכן, אני מבטיח להוסיף לינק).

 

הקוד שרץ בזמן ההתקנה נראה כך:

 



    1 public override void Install(IDictionary stateSaver)


    2 {


    3     base.Install(stateSaver);


    4     //grab the target director and add to install.installstate


    5     stateSaver.Add("TargetDir", Context.Parameters["DP_TargetDir"]);


    6 }


    7 


    8 public override void Commit(IDictionary savedState)


    9 {


   10     base.Commit(savedState);


   11 


   12     string targetDir = savedState["TargetDir"].ToString();


   13 


   14     AddToRegistry(Path.Combine(targetDir, "DirectionHeb.html"),


   15                   "Microsoft Blog – Direction Hebrew");


   16 


   17     AddToRegistry(Path.Combine(targetDir, "DirectionEng.html"),


   18                   "Microsoft Blog – Direction English");


   19 }


   20 


   21 private void AddToRegistry(string file, string title)


   22 {


   23     try


   24     {


   25         RegistryKey key;


   26         string regPath = @"SOFTWARE\Microsoft\Internet Explorer\MenuExt\ ";


   27         string subKey = regPath + title;


   28 


   29         key = Registry.CurrentUser.CreateSubKey(subKey);


   30         key.SetValue(null, string.Format("file://{0}", file));


   31 


   32         key.Close();


   33     }


   34     catch (Exception ex)


   35     {


   36        MessageBox.Show(ex.Message);


   37     }


   38 }


   39 


   40 protected override void OnBeforeUninstall(IDictionary savedState)


   41 {


   42     base.OnBeforeUninstall(savedState);


   43 


   44     //removing items from the context menu of IE


   45     string subKeyHeb = @"SOFTWARE\Microsoft\Internet Explorer\MenuExt\


   46                         Microsoft Blog – Direction Hebrew";


   47 


   48     string subKeyEng = @"SOFTWARE\Microsoft\Internet Explorer\MenuExt\


   49                         Microsoft Blog – Direction English";


   50 


   51     try


   52     {


   53         Registry.CurrentUser.DeleteSubKey(subKeyHeb);


   54     }


   55     catch { }


   56 


   57     try


   58     {


   59         Registry.CurrentUser.DeleteSubKey(subKeyEng);


   60     }


   61     catch { }


   62 }


 

במתודה Install, אנחנו שומרים את ה path שנשלח כפרמטר מההתקנה.

במתודה Commit, אנחנו מוסיפים ל registry, את שני הערכים החדשים, כל פעם מפעילים את המתודה AddToRegistry שמקבלת את המיקום של הקובץ, והשם שיופיע ב Context Menu

ובמתודה OnBeforeUninstall, מנסים להסיר את הרישום ב registry.

 

טוב, אז אני מקווה שעשיתי לכותבי הפוסטים בעברית חיים יותר קלים.

ותהנו.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

2 תגובות

  1. Baruch Frei28 בדצמבר 2008 ב 10:48

    יפה מאד. אבל עדיין לא הבנתי למה לא להשתמש בWLW ?
    שבאמת עושה את החיים יותר קלים ופותר גם את הבעיה של פוסטים שנעלמים בזמן הPublish…

    הגב
  2. אבי12 באוגוסט 2010 ב 19:08

    תודה על הטיפ.
    האם זה אפשרי להוסיף קו מפריד בין קבוצות התפריטים, או לסדר בסדר אחר

    הגב