שיחת משתמש:1Or/Redirect.js

תוכן הדף אינו נתמך בשפות אחרות.
מתוך ויקיפדיה, האנציקלופדיה החופשית

אור שלום.

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

מה שאתה כנראה רוצה לעשות זה להוסיף פרמטר createonly=true , ואולי גם להוסיף .fail עם הסבר. כמו כן, לא בטוח שאתה רוצה לזרוק notify על כל אחד - נראה יותר נכון לחכות לכולם, ואז להודיע.

במילים אחרות, משהו כזה:

				var redirect =  "#הפניה [[" + mw.config.get('wgPageName') + "]]";
				var failed = [];
				var tasks = Article.split("|").map( function(pageName) {
					return Api.post({
						action : 'edit',
						title : pageName,
						text: redirect,
						createonly: true,
						token : mw.user.tokens.get('csrfToken')
					})
					.fail( function() { failed.push(pageName) } ); // remember who failed

				// next line is a bit strange: $.when() accepts any number of deferred objects, but not an array.
				// use .apply($, arr) to overcome this.
				$.when.apply($, tasks)
					.done( function() { mw.notify('') } ) /* write the A-Ok message here */
					.fail( function() { mw.notify( 'failed to create the following pages ' + failed.join(', ') } );

יש כאן משהו טיפה טריקי - בקריאה ל- $.when() (שמוסבר כאן): הקריאה הזו מוכנה לקבל הרבה הבטחות, וחוזרת כשכולן הסתיימו, מי בהצלחה ומי בכישלון. בגלל ש-when רוצה את כל ההבטחות כפרמטרים נפרדים ולא כמערך, צריך עוד "טריק": הקריאה ל-apply "פורסת" את המערך לרשימה של פרמטרים נפרדים, כמו ש-when מבקשת. זה מוסבר כאן.

בכולופן, הדבר החשוב זה להוסיף createonly - אתה לא רוצה שמישהו שמשתמש בסקריפט הזה, ובלי כוונה מעביר שם של דף קיים, יפרוס את הדף הקיים ויחליף אותו בהפניה. בברכה - קיפודנחש 03:17, 21 ביוני 2017 (IDT)[תגובה]

וואו, תודה ענקית () על ההשקעה. יש רק בעיה אחת, אם הדף כבר קיים, זה לא מודיע. יש לי פתרון להציע, אבל הוא לא נראה לי אידאלי. בהערכה רבה, אורשיחה07:26, 21 ביוני 2017 (IDT)[תגובה]
אור, נסה סקריפט קצר מאד שמנסה לכתוב בדף קיים עם createonly. אתה אפילו לא חייב לכתוב סקריפט - עשה זאת מהקונסול, ותן לזה איזה פונקציית done קצרה שכותבת משהו לקונסול, ואיזה fail קצרה שכותבת משהו אחר, ותראה שזה נכשל. יכול להיות שקטע הקוד שכתבתי לך לא עובד בדיוק - זו הייתה סקיצה, שלא בדקתי אפילו אם היא קוד תקין, שלא לדבר על זה שלא בדקתי אם זה עושה את מה שאמרתי... אין לי ספק שעם קצת חפירה, אתה תשכנע את הקוד לעבוד. העיקרון עצמו נכון - הפניתי אותך לשני דפי תיעוד, תתחיל לחפור... רק ככה לומדים. אין לי ספק שתוך זמן קצר אני אבוא אליך לקבל עצות... אם אתה מחפש מה לשפר בכלי הנוכחי, נסה אולי להשתמש בדיאלוג וב-texarea (או משהו דומה - ראה למשל את אשף התבניות), במקום prompt ו-confirm. למשתמשים יהיה נוח יותר להזין, נניח הפניה בשורה, או אפילו כל הפניה באלמנט input נפרד, במקום שורה אחת ארוכה כשההפניות מופרדים במקלות (ועד שאתה עושה זאת, כדאי אולי לתת trim - לא בטוח אם קלט כזה: " הפניה 1 | הפניה 2 ", כלומר עם רווחים, לא יותר דפים עם שמות בעייתיים. יותר בטוח לקצץ רווחים לפני הקריאה ל-API. בברכה - קיפודנחש 09:27, 21 ביוני 2017 (IDT)[תגובה]
הבעיה הייתה שזה כבר המשיך את הסקריפט לפני שכל הבקשות לAPI בוצעו. במקום לשבור את הראש, עשיתי שזה יודיע כל פעם מחדש, וחסכתי את הצורך בwhen, מה גם שלא ממש הבנתי מה הקטע של זה. ניסיתי לקרוא, פשוט הרמה של האנגלית שלי ממש בסיסית ומדריכים כאלה זה פרויקט בשבילי. קיצצתי את הרווחים. בנוגע לשיפור עם הדיאלוג, אני אראה עכשיו מה אני יכול לעשות. אורשיחה10:00, 21 ביוני 2017 (IDT)[תגובה]
המעבר לדיאלוג בוצע. אורשיחה11:05, 21 ביוני 2017 (IDT)[תגובה]

────────────────────────────────────────────────────────────────────────────────────────────────────

קיפודנחש ואור, למיטב זכרוני כבר קודם הסקריפט לא דרס הפניות שהיו קיימות כבר. כמו כן הצורה העכשווית אולי נראית יפה יותר אך יש בה שתי בעיות עיקריות, פחות נח להוסיף יותר מהפניה אחת, צריך להקליק עוד פעמיים לפני כל הפניה נוספת במקום המשך הקלדה (אולי אפשר לשלב את שניהם, ומקל יפריד אוטומטית לשתי הפניות נפרדות, בנוסף לאפשרות "עוד הפניה"). השנייה היא שקודם צצה חלונית עם רשימת ההפניות לאישור שאלו ההפניות הרצויות, אם תוכל להחזיר יהיה נחמד. כמו כן, היה נדמה לי ממה שקראתי מהערותיו של קיפוד שהסקריפט עכשיו יציג הודעת שגיאת כאשר הוא מנסה ליצור הפניה על דף קיים, והוא לא, הוא ממשיך להודיע רק על הצלחות. תודה, מלא כל הארץ כבודישלח הודעה ל-013-28143 • כ"ז בסיוון ה'תשע"ז • 17:35, 21 ביוני 2017 (IDT)[תגובה]

עכשיו ברירת המחדל היא שיש שלוש אפשרויות, תמיד אפשר לא למלא. אין את האישור מכיוון שעכשיו יותר נוח להסתכל על התיבות ולערוך אותן, פשוט צריך להסתכל פעמיים לפני שלוחצים "בצע". נכון, הוא מודיע רק על הצלחות, כי הייתה לי בעיה עם המנגנון של זה (זה שיבש שם משהו בלולאות). לא נורא, אני מעדיף תמיד להתמקד בחיובי אורשיחה17:46, 21 ביוני 2017 (IDT)[תגובה]
שלוש זה לא נחמד, אבל לא תמיד מספיק (אני עוסק בשמות ערביים בהם שייך מספר רב בשל צורות תעתיק חופשי רבות; כרגע ספציפית אני עוסק בהפניות לקוראן שאז בכלל ישנם תרגומים שונים, ולכן ממלא 5-20 בפעם). אשמח אם תוכל לקודד כך שיהיה ניתן לעבור משורה לשורה באמצעות אנטר, ואם אין שורה נוספת האנטר יוסיף עוד אחת (או כפתור הטאב שכבר עובר בין שורות, שיוסיף שורות חסרות, או בכלל המקל). בברכה, מלא כל הארץ כבודישלח הודעה ל-013-28143 • כ"ח בסיוון ה'תשע"ז • 18:06, 21 ביוני 2017 (IDT)[תגובה]
אז ככה: עכשיו פשוט תלחץ על התיבה הראשונה ותעבור בין התיבות באמצעות הטאב. כל לחיצה על Enter (כשאתה בדיאלוג) תגרום להופעה של עוד תיבה. אני ממליץ ללחוץ בהתחלה על כמה שאתה צריך ואז לעבור ביניהם באמצעות הטאב. אורשיחה07:20, 22 ביוני 2017 (IDT)[תגובה]
תודה, מלא כל הארץ כבודישלח הודעה ל-013-28143 • כ"ח בסיוון ה'תשע"ז • 10:28, 22 ביוני 2017 (IDT)[תגובה]
אור, בלחיצה על אנטר קל מאד לבדוק אם יש שדה ריק, ורק אם אין להוסיף. (נניח משהו כמו: empties = $('input.inputR').filter(function(){ return this.value === ""; } ).length;
אבל מה שיותר מעניין, למה אתה לא ממש גם fail שיודיע על כישלון? נסה להריץ בקונסול
new mw.Api().post({ 				action : 'edit',
							title : 'ויקיפדיה:מזנון',
							text: 'bla',
							createonly: true,
							token : mw.user.tokens.get('csrfToken')
						}
).fail( function(error) { mw.notify('could not create page becuase ' + error, { type:'error'}); } );
ותראה אם יש הודעה על כישלון לשמור משום שהמזנון כבר קיים... אצלי זה עובד. קיפודנחש 02:06, 23 ביוני 2017 (IDT)[תגובה]
אני לא יודע אם זה רצוי שזה יוסיף רק אם אין שדה ריק. לי אישית יותר נוח ללחוץ המון פעמים בהתחלה על אנטר ואז לדפדף מאשר ללחוץ לדפדף ללחוץ לדפדף... גם אצלי זה עובד, אבל משום מה זה שבר שם משהו. ניסיתי עכשיו, זה עובד, אבל משום מה אם תנסה (עמוד ראשי, ישראל, אוכל) זה ייתן לך שש התראות במקום שלוש. יש לך רעיון איך לפתור את זה?
אורשיחה06:12, 23 ביוני 2017 (IDT)[תגובה]

ייבוא הסקריפט[עריכת קוד מקור]

שלום אור, ישר כח על הסקריפט הנפלא! ייבאתי אותו לs:משתמש:מושך בשבט/Redirect.js, אבל הוא לא פועל במרחב הביאור. מה צריך למחוק מהסקריפט? תמייג: עורכי ממשקמשתמש:Daryagמשתמש:IKhitronמשתמש:Kotzמשתמש:Mikey641משתמש:Uziel302משתמש:חיים 7משתמש:יונה בנדלאקמשתמש:מיכי י-םמשתמש:עלימשתמש:ערןמשתמש:קיפודנחשמשתמש:שמוליק --מושך בשבטשיחה • ט"ז בחשוון ה'תשפ"א • 18:43, 2 בנובמבר 2020 (IST)[תגובה]

מה זה מרחב הביאור? בשורה השנייה או השלישית של הסקריפט כתוב: if (mw.config.get("wgNamespaceNumber") === 0) {משמעות השורה הזו היא שהסקריפט פועל רק במרחב הראשי - אפס, 0. כנראה "מרחב הביאור" בו מדובר הוא מרחב שם שמספרו שונה מאפס. שחקו עם השורה הזו עד שהסקריפט יעבוד במרחב הביאור. אם רוצים שהסקריפט יפעל במספר מרחבי שם, נניח 4, 12, וגם אפס, אפשר לכתוב משהו כמו
if ( $.inArray(mw.config.get('wgNamespaceNumber'), [0, 4, 12]) + 1 )
בהצלחה. קיפודנחש 21:26, 2 בנובמבר 2020 (IST)[תגובה]
ממש תודה! עוד משהו, כרגע יש 3 תיבות להפניה ואפשר ללחוץ על "עוד הפניה". איך אפשר לשנות את זה? וגם, יש אפשרות שאני לא אצטרך למלאתקציר כל פעם ויהיה תקציר אוטומטי? תודה! --מושך בשבטשיחה • ט"ז בחשוון ה'תשפ"א • 15:06, 3 בנובמבר 2020 (IST)[תגובה]