User talk:Cacycle/wikEd development/Archive 001

spans
Adding this to the WikEdWikifyHTML function will take care of the annoying " text " tags that comes when you paste, at least from MS Word. At least i feel that these only makes a lot of mess in the wiki-code(a new span is added for each bold, underline, td etc), and since a wiki generally has the same language on the whole page i don't really see the need for this. regExp = /(.*?)<\/span>/g; while(regExp.test(obj.html) == true) { obj.html = obj.html.replace(regExp, '$1'); }

I'm also trying to get this to work with IE & Opera (primarily IE). If you know some things that IE faults on, it would be great to know :) Zido 13:33, 21 June 2007 (UTC)


 * Thanks, for the tip, I will fix that function. What do you mean by "some things that IE faults on". Cacycle 21:16, 21 June 2007 (UTC)
 * Just what problems are caused by IE so that it doesn't work.. I've found a lot, and I'm working to figure out how to fix them. Some of the most "severe" problems is the getSelection that doesn't work to well (at least with IE 6). I've created a getSel(obj) function that gets the selection in both Firefox and IE (i'm not too sure wether this works yet though, since the buttons are still not working in IE (reason follows)). Also, that addEventListener doesn't work. I've make a check to see wether addEventListener exists, and if not it uses the proipatary attachEvent function for IE instead. Most of it doesn't work yet though, but I have hopes :) Zido 14:00, 22 June 2007 (UTC)
 * Cool, thanks for your efforts! It is probably a good idea to write wrapper functions for incompatibilities, so that the browser-specific code is encapsulated from the rest of the program. It would probably be easier to focus first on a working user interface - that would make testing the more advanced functions easier. Cacycle 14:53, 22 June 2007 (UTC)

Wysiwyg Experiments
Currently I'm using WikEd as a base to understand how to incorporate a WYSIWYG into a MediaWiki engine. I've managed to do some basic incorporation with TinyMCE. I'm posting here to get contact with you Cacycle and go over how you setup the button click for the WikEd (as in coded in the hook). I'm developing an Open Source project to make the editing in a Mediawiki be a wysiwyg.

Anyways getting to a point: Upon Editing the editpage.php to have the include tags for TinyMCE scripted right into the page, it worked. While doing the Monobook.js failed miserably and never loaded. This experiment makes me believe that IE doesn't like loading scripts from external sources properly. Feel free to delete this section and email me. Santaferra 23:43, 26 June 2007 (UTC)


 * Please use this page or my Wikipedia talk page to stay in contact. It would be relatively easy to make wikEd into a WISYWIG editor (if one thinks that's a good idea...). The main problem is probably to make the code IE compatible. Please see the wikEd homepage for the Mediawiki setting that are needed to enable monobook.js scripts. Cacycle 01:04, 27 June 2007 (UTC)
 * Sounds like a plan. Santaferra 22:10, 27 June 2007 (UTC)

wikEd development
I am currently trying to get this program to work on IE7, as that is what I use and I would like to use this on my GuildWiki account, see here. I have written several programs on there so I am hoping I will get this to be able to work on IE. I will let you know what I find out. Thanks. -Rein Of Terror

wikEd and RegExTypoFix
Hi. I saw today that wikEd now uses the RegExTypo list directly. That's a great feature, so thank you! I also notice that you've marked four of the regexes as giving errors in JavaScript. I looked this up and the problem is that JavaScript doesn't support regex lookbehinds (maybe you already know this). I've posted a request on the talk page to see if we can find a different regex so that wikEd can use it too. Please help if you can. Thanks Rjwilmsi 22:01, 7 September 2007 (UTC)
 * I have commented the respective lines out for wikEd by adding the "//". Do you know if AutoWikiBrowser still parses these lines (i.e. if it requires the tags to start with a new line). Cacycle 22:50, 7 September 2007 (UTC)
 * If parse means use, then the answer is no - I've tested AWB and the // commented rules are not used. I'm hoping that one of the RegExTypoFix regex experts will be able to find another way to write those rules without the lookbehinds. Rjwilmsi 09:33, 9 September 2007 (UTC)

Startup in MSIE 7 without error
wikEd 0.9.45rc starts up in MSIE 7 without an error message! The browser test has to be bypassed by using the user configuration settings from this article page. Cacycle 03:08, 26 September 2007 (UTC)

Some IE 7 (and possibly earlier) fixes.
Despite the previous comment, I'm not able to load an edit page with stock wikEd.js without errors. However, I spent some time tracking down the errors I was getting and fixing them on my local copy of wikEd.js. I still get one error right away, because IE7 doesn't even like the simple HTML code wikEd emits to make the IFRAME, but if I bypass that I can continue a bit further. So far I've managed to get the text of the article loaded into wikEd's edit window with no further errors, and can get a few of the buttons to work: the "jump to preview" and "jump to editor" buttons appear to be working, and the "toggle wikEd and normal editor" button works to turn off wikEd, but it doesn't seem to turn it back on.

Anyway, here are the changed I've made so far. The problem, obviously, is that IE doesn't implement the W3C DOM standard in any remotely sensible fashion. The good news is that most of the standard behaviors are present, just named wrong. There's only one so far that just doesn't exist anywhere. In the fixes I've made so far, my philosophy has been to avoid checking for "is MSIE", because the meaning of that may change; who knows, IE might actually grow a real JS engine. For now I've been checking at run-time for the presence of what we need, but this can be optimized later by conditionally defining the entire functions as needed. This works most of the time because most browsers either mimic IE, or actually follow the standard (Opera seems to do a bit of both).

window.WikEdGetStyle = function(element, styleProperty) { if (element != null) { if (document.defaultView && document.defaultView.getComputedStyle) { return document.defaultView.getComputedStyle(element, null)[styleProperty]; } else if (element.currentStyle) { var style = element.currentStyle[styleProperty]; if (style == "inherit") { return WikEdGetStyle(element.parent, styleProperty); } else { return style; }		} else { return element.style[styleProperty]; }	} }
 * document.defaultView: IE doesn't have this object; in fact, it does not have any way at all to get the calculated style sheet values. For now, the best I could do was to get the current cascaded value and try to account for "inherit"; this works most of the time but will choke on values like "smaller" and "auto".  The new function is:

window.WikEdAddEventListener = function(domElement, eventType, handler, useCapture) { domElement.addEventListener ? domElement.addEventListener(eventType, handler, useCapture); : domElement.attachEvent('on' + eventType, handler); return; }
 * addEventListener: IE calls this attachEvent; the code already did sort-of the right thing if wikEdMSIE was set, but since we're bypassing browser detection that didn't help. Also, the orginal only worked in IE if the element getting an event was the root window.  A better way is:

window.WikEdEditButtonHandler = function(event) { var obj = event.currentTarget ? event.currentTarget : event.srcElement;
 * event.currentTarget: IE calls this event.srcElement. I was able to get the button handlers to work, or at least not crash, with this:

eval(wikEdEditButtonHandler[obj.id]); return; }

// // WikEdGetSelection: cross-browser method to get the current selection. // window.WikEdGetSelection = function { return wikEdFrameWindow.getSelection ? wikEdFrameWindow.getSelection : wikEdFrameDocument.selection; }
 * getSelection and removeAllRanges: IE has a selection object, but on the document, not the window; the object has an empty method. These can be used as follows.  After defining these two functions, I changed ever instance of   to   and every instance of   to   (using sel instead of obj.sel as appropriate):

// // WikEdClearSelection: cross-browser method to clear the current selected text. // window.WikEdClearSelection = function (sel) { sel.removeAllRanges ? sel.removeAllRanges : sel.empty; return; }

Kutulu (Talk)


 * Hey Kutulu, great, many thanks. I will add your changes to the next release. WikEdGetStyle is currently only used to get the text direction of the main window (ltr or rtl). Сасусlе 12:53, 16 October 2007 (UTC)


 * I have now added your changes to version 0.9.47. I have also made the style addition cross-browser. It does not look very elegant and it has to rely on browser detection, please see window.WikEdStyleSheet (line 8155). It now looks really like wikEd, even if it does not work. Thanks again, Сасусlе 03:34, 18 October 2007 (UTC)


 * I had completely forgotten about style addition. The fix I made was actually pretty easy, and looks like it works as expected:

this.addRules = function(rules) { if ( this.styleElement.innerHtml ) {                   this.styleElement.innerHTML = rules; }               else {                   this.styleElement.cssText = rules; }               return; }


 * Unfortunately I'm getting down to the part where things get really messy: dealing with ranges and selections. The problem here is that the "Selection" concept isn't part of the W3C standard; it's a Mozilla extension from the NS4 days, that IE doesn't implement at all, and other browsers implement to various degrees.  IE has a thing called a "TextRange" that is a cross between a Selection and a Range, and if all you want is to grab the selected text, it's actually simpler.  But when you try to get more complex, things fall apart.  My quick syntax fixes earlier don't really help much, because the objects you get back from my new WikEdCreateRange and WikEdGetSelection methods are fundamentally different from each other, so I think that approach isn't going to work.


 * I'll need to spend more time tracing and reading and understanding the flow of the wikEd text manipulation to see if there are IE-specific operations for everything you're doing. The one that struck me as tricky right off the top is the find, because IE's TextRange has no concept of "multiple ranges" the way Mozilla's selection does, but that can probably be worked around.  I'll keep you posted :)  Kutulu 21:08, 18 October 2007 (UTC)


 * Had I known about cssText... Yes, the range/selection manipulations are very difficult to make cross-browser, if at all. Maybe we should focus first on the range/selection-independent functions. This includes the combo input boxes (the drop-down does not work) and WikEdButton for the text-independent buttons. It would also be nice to turn on designmode for the frame :-) Thanks, Сасусlе 01:08, 19 October 2007 (UTC)

Cross Browser Support - Text area manipulation
Not sure why the wheel is being re-invented here. An extensive library of cross-browser javascript methods is available here under GNU. As an example, below, the functions needed to enable textarea manipulation.

// xDef r2, Copyright 2001-2011 Michael Foster (Cross-Browser.com) // Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL function xDef { for (var i=0, l=arguments.length; i<l; ++i) { if (typeof(arguments[i]) === 'undefined') return false; } return true; }

// xGetElementById r2, Copyright 2001-2007 Michael Foster (Cross-Browser.com) // Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL function xGetElementById(e) { if (typeof(e) == 'string') { if (document.getElementById) e = document.getElementById(e); else if (document.all) e = document.all[e]; else e = null; } return e; }

// xTextArea r1, Copyright 2010 Krum Pet (bitbucket.org/krumpet) // Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL function xTextArea(textArea) {

function loadFrom(textArea) {

var t = {}, // object describing contents of teaxtarea text, range, slice;

t.update = function { update(t) };

t.ta = textArea; text = textArea.value;

range = getSelectionRange(t.ta); t.scrollTop = t.ta.scrollTop;

slice = function (s, e) { return normalize_newlines(text.substring(s, e) || ''); }

t.pre = slice(0, range.start); t.sel = slice(range.start, range.end); t.post = slice(range.end, text.length);

return t;   }

function getSelectionRange(textArea) {

if (xDef(textArea.selectionStart)) { return { start: textArea.selectionStart, end: textArea.selectionEnd };       }

if( xDef(document.selection) ){

rSel = document.selection.createRange; rPre = rSel.duplicate; rPre.moveToElementText( textArea ) rPre.setEndPoint( 'EndToStart', rSel );

return { start: rPre.text.length, end: rPre.text.length + rSel.text.length };       }        return {start: 0, end: 0}; }

function setSelectionRange(textArea, start, end) {

if(xDef(textArea.setSelectionRange)) { textArea.setSelectionRange(start, end); return; }       if(xDef(textArea.createTextRange)) { range = textArea.createTextRange; range.collapse(true); range.moveEnd('character', end); range.moveStart('character', start); range.select; }   }

function normalize_newlines(s) { return s.replace(/(?:\r\n)|\r/g, '\n'); }

function update(t) {

var start = t.pre.length, end = start + t.sel.length, txt;

t.ta.scrollTop = t.scrollTop;

txt = normalize_newlines(t.pre + t.sel + t.post); t.ta.value = txt;

if (xDef(t.ta.selectionStart)) { if (txt.length != t.ta.value.length) { start = start + t.pre.split('\n').length - 1; end = start + t.sel.length + t.sel.split('\n').length -1; }       }        setSelectionRange(t.ta, start, end); }

textArea = xGetElementById(textArea); if (textArea) return loadFrom(textArea); /* When this function is called with a textarea element (or its id) a javascript object will be returned. The object will have these properties:

- o.pre = The text in the text area prior to any selection. - o.sel = The selected text. - o.post = The text appearing after the selection.

Any of these properties may be manipulated at will using normal string functions.

Also these:

- o.scrollTop = a copy of the scrollTop property of the textarea when the function was called. - o.ta == the textarea object (not id). (Should be considered readonly).

When all the changes have been made, call o.update to set up the textarea apropriatly. } 212.125.69.106 (talk) 09:38, 25 August 2011 (UTC) aka Simon

IE7 "toggle button" fixes
I've tracked down and fixed a problem I was having with the various "toggle" buttons in IE. It turns out that IE and FF have a different idea of what type the "checked" attribute is supposed to be. returns a string in most browsers, but a boolean in IE. The IE behavior makes it a pain in the tail to write a single line of code that works correctly in all cases: getAttribute('checked') evaluates to true even if its value is "false", but (getAttribute('checked') == "true") evaluates to false if its value is true. I had to do this:

// // WikEdIsChecked: cross-platform function to check if a toggle button is "checked" // window.WikEdIsChecked = function(element) { // Normal Browsers: 'checked' is a string if ( typeof(element.getAttribute('checked')) == 'string' ) { return (element.getAttribute('checked') == 'true'); }   // IE: 'checked' is a bool. (also handles case when 'checked' is missing) else { return element.getAttribute('checked'); } }

Good news is, this got several buttons working, including the "hide toolbar" button that I've been using as my benchmark. It also get the toggle fullscreen and toggle wikEd buttons to run the correct event handler, but not quite work for other reasons that I should be able to fix pretty quickly. Kutulu 20:52, 19 October 2007 (UTC)
 * Added to wikEd 0.9.48 as "WikEdGetAttribute: MS IE compatibility wrapper for element.getAttribute" (rewrite for Greasemonkey compatibility). Сасусlе 19:53, 27 October 2007 (UTC)

Events fixed

 * I have also more or less fixed the events for the upcoming release. Сасусlе 05:25, 28 October 2007 (UTC)
 * Fixed events are online (0.9.48c) but target detection need tweaking (mouseout from grip bar of minimized button bars). Сасусlе 17:00, 28 October 2007 (UTC)

MS IE designmode
I have serious problems to turn on designmode for MS IE, doing so somehow interferes with accessing wikEdFrameBody, see code below line 1768 ("// turn on designmode for non-Mozilla"). Сасусlе 17:00, 28 October 2007 (UTC)
 * In the current version 0.9.55 the frame can now be edited in MS IE. The designmode='on' had to set before filling the frame with content. Сасусlе 05:19, 25 November 2007 (UTC)


 * I have fixed the events in wikEd 0.9.55a dev, zoom and diff preview work fine. Сасусlе 19:58, 25 November 2007 (UTC)

long cookie problem
(Moved to User_talk:Cacycle/wikEd) Сасусlе 13:46, 26 November 2007 (UTC)

IE7
(Moved to User_talk:Cacycle/wikEd) Сасусlе 05:18, 7 December 2007 (UTC)

Colors
(Moved to User_talk:Cacycle/wikEd) Сасусlе 05:18, 7 December 2007 (UTC)

Safari
Lets all rejoice !!! User:TheDJ/wikEd dev.js. There are quite a few workarounds in place there, but rest assured that in essence I am now running a fully working wikEd on Safari 3. Most issues I ran into are basic DOM issues that I had already seen in other scripts. The list of hacks so far:


 * add Safari browserchecks (note the check for pre 500 which makes sure we deal with Safari 3)
 * use wikEdSkipBrowserTest in my monobook.js
 * document.write of script elements breaks the DOM in some cases. (I always use importScript as defined in MediaWiki:Common.js, because document.write on Safari has a tendency to sometimes end up smack in the middle of the actual body instead of the head of the HTML. This seems to happen on long pages, when a document.write'en javascript itself does a document.write)
 * Failing addRules. Safari does have innerHTML, but it gives a DOM NO_MODIFICATION_ALLOWED_ERR. This might be related to though not the same bug as this one. I tried forcing the usage of cssText instead. This gives no errors, but it doesn't work either. I'm using "addRule" now, but it makes the code very dirty. Would be nice if a better method could be found.
 * document.createRange gives DOM error because document != wikEdFrameBody.ownerDocument
 * Check for currentNode.hasChildNodes before entering the for loop. diff this turned out to be a symptom of another problem.
 * range.cloneContents problem. If the range is empty, null is returned instead of an empty documentfragment. This was breaking all the "fixing buttons" if no text was selected in the edit frame. solution
 * Broken FixBasic results. string concat issue with paramaters that are undefined. solution
 * Hmm. the line paragraph issue made me ponder if similar replace constructs to these are the cause for this error. Went digging trough the web and found this blogpost. Note that since that post, all Safari bugs there have been fixed to follow ECMA and thus will return "undefined" now. So i think all these replace( ..., function(p, p1, p2 ){} ) cases will need a rewrite.
 * Broken wikEd-disabler next to "log out". caused by missing test for wikEdSkipBrowserTest. solution
 * Issue with line/paragraph endings that are spuriously inserted into newly added text when we are in wikEd mode. Notice the whitespace I accidently introduced here.

See the diff for all the changes. So other Safari users are welcome to try it out and if you find a problem, then please let me know. --TheDJ (talk • contribs) 02:28, 28 February 2008 (UTC)
 * Wow - cool! I will check it and add the changes to the main release. Thanks, Сасусlе 03:14, 28 February 2008 (UTC)
 * Some of my changes are perhaps not suitable for direct inclusion into wikEd. Especially the CSS loading I think. There are also several more bugs present, but its a real start. I'll add some more info and bugs to the above list. --TheDJ (talk • contribs) 11:23, 28 February 2008 (UTC)

Page Caching
(Moved to User_talk:Cacycle/wikEd. Сасусlе 03:15, 16 April 2008 (UTC))

Epiphany
(Moved to User_talk:Cacycle/wikEd. For general discussions, bug reports, or feature requests, please use the general wikEd discussion page.Cacycle (talk) 15:08, 28 June 2008 (UTC)))

WikEd Light?
(Moved to User_talk:Cacycle/wikEd. For general discussions, bug reports, or feature requests, please use the general wikEd discussion page. Cacycle (talk) 21:33, 19 September 2008 (UTC)

i18n version status?
Hi! As the one who translated wikEd into Swedish, I'd like to know whether or not any changes are available for versions >0.9.79. Also, I'd like to know whether I as a translator am supposed to do anything special with regards to the beta? It would be nice to translate it so that it is ready when launched as a release version. :) W n C? 14:05, 26 January 2010 (UTC)

I will add the required translations to the language pages so that they can be translated from English. Cacycle (talk) 21:16, 25 February 2010 (UTC)

wikEd-dev.js
Hi! On both FF and Safari on OS X 10.6.4 I get a popup with my User-agent string when including wiked-dev.js via the style sheet's js page. Should I just remove the reference to wiked-dev.js from my css-js, or would I miss developmental features then? (E.g., beta-testing of future releases) W n C? 16:58, 23 August 2010 (UTC)


 * Currently, wiked-dev it is used for bug testing only. Also, it is not updated very often and lagged many versions behind the current version. If you do not develop wikEd yourself I suggest that you use the standard wikEd :-) Cacycle (talk) 21:14, 23 August 2010 (UTC)

After clicking preview button redirect to Main_page
(Moved to User_talk:Cacycle/wikEd). Cacycle (talk) 09:51, 2 October 2010 (UTC)

Callback on preview
(Moved to User_talk:Cacycle/wikEd). Cacycle (talk) 22:31, 27 November 2010 (UTC)

(For general discussions, bug reports, or feature requests, please use the general wikEd discussion page.)

Fixing common mistakes with one button (very Beta)
Hello Cacycle, I testing your tool since 2 weeks, and I can say this feature is also unfortunately  unusable. I have not found a page that has been fixed correctly (using FF4, Chrome12). There are incredible number of examples (I would write a complete site of Bugs), so I would propose to mark this in your documentation as Beta. I would propose to outsource this part of your tool and let it do by a external tool (there are some)!? That would be a beneficial division of labor that enhances the quality of work for all. I say all this just to help, otherwise I think this tool will not more find widespread use (especially after Vector). (Yes I'm not a native speaker) (Generally the standard Hotkeys also don't working anymore) Greetings -- «( P E R H E L I O N )»* 15:03, 3 July 2011 (UTC)

Access keys disabled
Although I very rarely use the tool, I was wondering why the standard MediaWiki access keys are disabled!? -- πϵρήλιο ℗  18:49, 24 October 2012 (UTC)