Create cards-ru.coffee

Create cards-ru.coffee

Russian translation for all cards.

error: pathspec 'cards-ru.coffee' did not match any file(s) known to git

--- cards-ru.coffee
+++ cards-ru.coffee
@@ -0,0 +1,783 @@
+exportObj = exports ? this
+
+exportObj.codeToLanguage ?= {}
+exportObj.codeToLanguage.de = 'Russian'
+
+exportObj.translations ?= {}
+# This is here mostly as a template for other languages.
+exportObj.translations.Russian =
+    action:
+        "Barrel Roll": "Бочка"
+        "Boost": "Ускорение"
+        "Evade": "Уклонение"
+        "Focus": "Концентрация"
+        "Target Lock": "Захват цели"
+        "Recover": "Recover"
+        "Reinforce": "Reinforce"
+        "Jam": "Jam"
+        "Coordinate": "Coordinate"
+        "Cloak": "Маскировка"
+    slot:
+        "Astromech": "Астромех"
+        "Bomb": "Бомба"
+        "Cannon": "Дополнительное Орудие"
+        "Crew": "Экипаж"
+        "Elite": "Талант"
+        "Missile": "Ракета"
+        "System": "Система"
+        "Torpedo": "Торпеда"
+        "Turret": "Турель"
+        "Cargo": "Cargo"
+        "Hardpoint": "Hardpoint"
+        "Team": "Team"
+        "Illicit": "Нелегальный"
+        "Salvaged Astromech": "захваченный Астромех"
+    sources: # needed?
+        "Core": "База"
+        "A-Wing Expansion Pack": "Дополнение A-Wing"
+        "B-Wing Expansion Pack": "Дополнение B-Wing"
+        "X-Wing Expansion Pack": "Дополнение X-Wing"
+        "Y-Wing Expansion Pack": "Дополнение Y-Wing"
+        "Millennium Falcon Expansion Pack": "Дополнение Сокол Тысячелетия"
+        "HWK-290 Expansion Pack": "Дополнение HWK-290"
+        "TIE Fighter Expansion Pack": "Дополнение TIE-Fighter"
+        "TIE Interceptor Expansion Pack": "Дополнение TIE-Interceptor"
+        "TIE Bomber Expansion Pack": "Дополнение TIE-Bomber"
+        "TIE Advanced Expansion Pack": "Дополнение TIE-Advanced"
+        "Lambda-Class Shuttle Expansion Pack": "Дополнение Lambda-class Shuttle"
+        "Slave I Expansion Pack": "Дополнение Sklave I"
+        "Imperial Aces Expansion Pack": "Дополнение Imperial Aces"
+        "Rebel Transport Expansion Pack": "Дополнение Rebel Transport"
+        "Z-95 Headhunter Expansion Pack": "Дополнение Z-95-Headhunter"
+        "TIE Defender Expansion Pack": "Дополнение TIE-Defender"
+        "E-Wing Expansion Pack": "Дополнение E-Wing"
+        "TIE Phantom Expansion Pack": "Дополнение TIE-Phantom"
+        "Tantive IV Expansion Pack": "Дополнение Tantive IV"
+        "Rebel Aces Expansion Pack": "Дополнение Rebel Aces"
+        "YT-2400 Freighter Expansion Pack": "Дополнение YT-2400 Freighter"
+        "VT-49 Decimator Expansion Pack": "Дополнение VT-49 Decimator"
+        "StarViper Expansion Pack": "Дополнение StarViper"
+        "M3-A Interceptor Expansion Pack": "Дополнение M3-A Interceptor"
+        "IG-2000 Expansion Pack": "Дополнение IG-2000"
+        "Most Wanted Expansion Pack": "Дополнение Most Wanted"
+        "Imperial Raider Expansion Pack": "Дополнение Imperial Raider"
+    ui:
+        shipSelectorPlaceholder: "Выберите корабль"
+        pilotSelectorPlaceholder: "Выберите пилота"
+        upgradePlaceholder: (translator, language, slot) ->
+            "Нет #{translator language, 'слота', slot} улучшения"
+        modificationPlaceholder: "Нет модификации"
+        titlePlaceholder: "Нет названия"
+        upgradeHeader: (translator, language, slot) ->
+            "#{translator language, 'Слот', slot} улучшения"
+        unreleased: "не выпущено"
+        epic: "Эпик"
+        limited: "ограничено"
+    byCSSSelector:
+        '.translate.sort-cards-by': 'Сортировать карты по'
+        '.xwing-card-browser option[value="name"]': 'Имени'
+        '.xwing-card-browser option[value="source"]': 'Источнику'
+        '.xwing-card-browser option[value="type-by-points"]': 'Типу (Очки)'
+        '.xwing-card-browser option[value="type-by-name"]': 'Типу (Имени)'
+        '.xwing-card-browser .translate.select-a-card': 'Выберите карту из списка слева'
+        '.xwing-card-browser .info-range td': 'Reichweite'
+        # Info well
+        '.info-well .info-ship td.info-header': 'Корабль'
+        '.info-well .info-skill td.info-header': 'Мастерство'
+        '.info-well .info-actions td.info-header': 'Действия'
+        '.info-well .info-upgrades td.info-header': 'Улучшения'
+        '.info-well .info-range td.info-header': 'Дистанция'
+        # Squadron edit buttons
+        '.clear-squad' : 'Новый отряд'
+        '.save-list' : 'Сохранить'
+        '.save-list-as' : 'Сохранить как'
+        '.delete-list' : 'Удалить'
+        '.backend-list-my-squads' : 'Загрузить отряд'
+        '.view-as-text' : ' Печать\Просмотр как Text'
+        '.randomize' : 'Случайно'
+        '.randomize-options' : 'Опции генератора случайности'
+        # Print/View modal
+        '.bbcode-list' : 'Скопируйте BBCode ниже и вставьте в пост на форуме.<textarea></textarea>'
+        '.vertical-space-checkbox' : """Добавить пространство для карт повреждений\улучшений на распечатке. <input type="checkbox" class="toggle-vertical-space" />"""
+        '.color-print-checkbox' : """Печать в цвете. <input type="checkbox" class="toggle-color-print" />"""
+        '.print-list' : ' Печать'
+        # Randomizer options
+        '.do-randomize' : 'Случайно!'
+        # Top tab bar
+        '#empireTab' : 'Галактическая империя'
+        '#rebelTab' : 'Альянс повстанцев'
+        '#scumTab' : 'Негодяи'
+        '#browserTab' : 'Список карт'
+        '#aboutTab' : 'О сервисе'
+    singular:
+        'pilots': 'Пилоты'
+        'modifications': 'Модификации'
+        'titles': 'Названия'
+    types:
+        'Pilot': 'Пилот'
+        'Modification': 'Modifikation'
+        'Title': 'Название'
+
+exportObj.cardLoaders ?= {}
+exportObj.cardLoaders.Russian = () ->
+    exportObj.cardLanguage = 'Russian'
+
+    # Assumes cards-common has been loaded
+    basic_cards = exportObj.basicCardData()
+    exportObj.canonicalizeShipNames basic_cards
+
+    exportObj.ships = basic_cards.ships
+
+    # Move TIE Interceptor to TIE-Abfangjц╓ger
+    #exportObj.renameShip 'TIE Interceptor', 'TIE-Abfangjц╓ger'
+    # Move Z-95 Headhunter to Z-95-Kopfjц╓ger
+    #exportObj.renameShip 'Z-95 Headhunter', 'Z-95-Kopfjц╓ger'
+    # Move TIE Defender to TIE-Jagdbomber
+    #exportObj.renameShip 'TIE Defender', 'TIE-Jagdbomber'
+    # Move Lambda-Class Shuttle to Raumfц╓hre der Lambda-Klasse
+    #exportObj.renameShip 'Lambda-Class Shuttle', 'Raumfц╓hre der Lambda-Klasse'
+    # Move GR-75 Medium Transport to Medium-Transporter GR-75
+    #exportObj.renameShip 'GR-75 Medium Transport', 'Medium-Transporter GR-75'
+    # Move CR90 Corvette (Fore) to CR90-Korvette (Bug)
+    #exportObj.renameShip 'CR90 Corvette (Fore)', 'CR90-Korvette (Bug)'
+    # Move CR90 Corvette (Aft) to CR90-Korvette (Heck)
+    #exportObj.renameShip 'CR90 Corvette (Aft)', 'CR90-Korvette (Heck)'
+    # Move M3-A Interceptor to M3-A Abfangjц╓ger
+    #exportObj.renameShip 'M3-A Interceptor', 'M3-A Abfangjц╓ger'
+
+    pilot_translations =
+        "Wedge Antilles":
+            text: """Во время атаки, уменьшите значение Мобильности защищающегося на 1 (значение не может быть меньше нуля)."""
+        "Garven Dreis":
+            text: """После использования жетона Концентрации вы можете передать его любому другому дружественному кораблю, находящемуся на Дистанции 1-2 (вместо сброса)."""
+        "Biggs Darklighter":
+            text: """Другие дружественные корабли на Дистанции 1 не могут быть атакованы, если целью можете быть выбраны вы."""
+        "Luke Skywalker":
+            text: """Во время защиты вы можете заменить один из результатов %FOCUS% на результат %EVADE%"""
+        '"Dutch" Vander':
+            text: """После захвата цели, выберите любой другой дружественный корабль на Дистанции 1-2. Выбранный корабль может немедленно получить жетон Захвата Цели."""
+        "Horton Salm":
+            text: """Во время атаки на Дистанции 2-3 вы можете перебросить любое количество ваших кубиков, не имеющих какого-либо результата."""
+        '"Winged Gundark"':
+            text: """Во время атаки на Дистанции 1 вы можете заменить один из ваших %HIT% результатов на %CRIT% результат."""
+        '"Night Beast"':
+            text: """После выполнения зеленого манёвра вы можете выполнить свободное действие Концентрация."""
+        '"Backstabber"':
+            text: """Если во время атаки вы находитесь вне сектора стрельбы обороняющегося корабля, бросайте на один кубик атаки больше."""
+        '"Dark Curse"':
+            text: """Во время обороны, атакующие вас корабли, не могут использовать маркеры Концентрации или перебрасывать кубики атаки."""
+        '"Mauler Mithel"':
+            text: """Когда атакуете на Дистанции 1 бросайте на один кубик атаки больше."""
+        '"Howlrunner"':
+            text: """Когда другой дружественный корабль атакует на Дистанции 1 основным оружием, он может перебросить один кубик атаки."""
+        "Maarek Stele":
+            text: """Когда ваша атака наносит Критическое повреждение атакуемому кораблю, вместо 1 возьмите 3 карты Повреждений. Выберете 1 из них, а остальные сбросьте."""
+        "Darth Vader":
+            text: """Во время шага «Выполните Действие» в фазе Активации, вы можете выполнить 2 действия."""
+        "\"Fel's Wrath\"":
+            text: """Когда количество карт Повреждений будет равно или превышать значение корпуса вашего корабля, корабль не разрушается до конца этой боевой фазы."""
+        "Turr Phennir":
+            text: """После выполнения атаки вы можете выполнить свободное действие Бочка или Ускорение."""
+        "Soontir Fel":
+            text: """Когда вы получаете жетон Стресса, можете так же получить жетон Концентрация для этого корабля."""
+        "Tycho Celchu":
+            text: """Вы можете выполнять действия даже при наличии у вас жетона Стресса."""
+        "Arvel Crynyd":
+            text: """Вы можете выбрать целью для атаки вражеский корабль, находящийся в вашем секторе стрельбы, даже если вы его касаетесь."""
+        "Chewbacca":
+            text: """Если вы получили карту Повреждений лицом вверх, немедленно переверните эту карту лицом вниз (без применения ее свойств)."""
+        "Lando Calrissian":
+            text: """После выполнения зелёного манёвра, выберите 1 дружественный корабль на Дистанции 1. Этот корабль может выполнить любое из действий, указанных в его карте, как свободное."""
+        "Han Solo":
+            text: """Во время атаки вы можете перебросить все ваши кубики. Если вы выбрали это, то должно быть переброшено их максимальное возможное количество."""
+        "Kath Scarlet":
+            text: """Во время атаки, обороняющийся получает один жетон Стресса, если хотя бы один из результатов %CRIT% был отменён."""
+        "Boba Fett":
+            text: """Когда вы вскрываете манёвр %BANKLEFT% или %BANKRIGHT%, вы можете заменить его на другой манёвр той же скорости."""
+        "Krassis Trelix":
+            text: """Во время атаки Дополнительным оружием, вы можете перебросить один кубик атаки."""
+        "Ten Numb":
+            text: """Во время атаки, один из ваших результатов %CRIT% нельзя отменить кубиком защиты."""
+        "Ibtisam":
+            text: """Во время атаки или обороны вы можете перебросить один из ваших кубиков, если у вас есть хотя бы один жетон Стресса."""
+        "Roark Garnet":
+            text: '''После начала фазы боя, выберете любой другой дружественный корабль на Дистанции 1-3. До конца фазы, Мастерство пилота выбранного корабля считается равным 12.'''
+        "Kyle Katarn":
+            text: """В начале фазы боя вы можете передать один из ваших жетонов Концентрации другому дружественному кораблю на Дистанции 1-3."""
+        "Jan Ors":
+            text: """Когда другой дружественный корабль атакует на Дистанции 1-3 и у вас нет жетона Стресса, вы можете получить один жетон Стресса, чтобы позволить этому кораблю бросить один дополнительный кубик атаки."""
+        "Captain Jonus":
+            text: """Когда другой дружественный корабль атакует на Дистанции 1, используя дополнительное оружие, он может перебросить до двух кубиков атаки."""
+        "Major Rhymer":
+            text: """Во время атаки дополнительным оружием, вы можете увеличить или уменьшить дистанцию использования оружия на один, в пределах Дистанции 1-3."""
+        "Captain Kagi":
+            text: """Когда вражеский корабль получает жетон Захвата цели, он должен использовать ваш корабль в качестве цели, если может."""
+        "Colonel Jendon":
+            text: """В начале фазы боя, вы можете передать один из ваших голубых жетонов Захвата цели дружественному кораблю на Дистанции 1, если у него таковых не имеется."""
+        "Captain Yorr":
+            text: """Вы можете получить жетон Стресса вместо любого другого дружественного корабля на Дистанции 1-2, если у вас таких жетонов два или менее."""
+        "Lieutenant Lorrir":
+            text: """При выполнении действия Бочка вы можете получить 1 жетон Стресса и использовать шаблоны (%BANKLEFT% 1) или (%BANKRIGHT% 1) вместо (%STRAIGHT% 1)."""
+        "Tetran Cowall":
+            text: """Когда вы вскрываете маневр %UTURN%, вы можете считать скорость этого маневра как "1," "3," или "5"."""
+        "Kir Kanos":
+            text: """Во время атаки на Дистанции 2-3 вы можете сбросить один жетон уклонения, чтобы добавить к броску один %HIT% результат."""
+        "Carnor Jax":
+            text: """Вражеские корабли на Дистанции 1 не могут выполнять действия Уклонения или Концентрации, и не могут сбрасывать соответствующие жетоны."""
+        "Lieutenant Blount":
+            text: """Ваша атака считается успешной, даже если защищающийся успешно отменил все повреждения."""
+        "Airen Cracken":
+            text: """После выполнения атаки вы можете выбрать другой дружественный корабль на Дистанции 1. Этот корабль может выполнить ."""
+        "Colonel Vessery":
+            text: """Во время атаки, после броска ваших кубиков атаки, сразу можете получить Захват цели на защищающегося, если он уже имеет красный жетон захвата цели."""
+        "Rexler Brath":
+            text: """После выполнения атаки, принесшей противнику как минимум одну карту Повреждения, вы можете сбросить один жетон Концентрации для переворота нанесенных карт Повреждений лицом вверх."""
+        "Etahn A'baht":
+            text: """Когда корабль противника находится внутри вашего сектора стрельбы на Дистанции 1-3, и защищается, то атакующий может изменить один из %HIT% результатов на %CRIT% результат."""
+        "Corran Horn":
+            text: """В начале фазы Завершения вы можете выполнить одну атаку. Вы не можете атаковать в течении следующего раунда."""
+        '"Echo"':
+            text: """Когда вы сбрасываете режим Маскировки, вы должны использовать шаблоны (%BANKRIGHT% 2) или (%BANKLEFT% 2) вместо (%STRAIGHT% 2)."""
+        '"Whisper"':
+            text: """После выполнения успешной атаки вы можете получить один жетон КОнцентрации на ваш корабль."""
+        "Wes Janson":
+            text: """После выполнения атаки вы можете удалить один жетон Концентрации, Уклонения или голубой жетон захвата цели с защищающегося корабя."""
+        "Jek Porkins":
+            text: """Когда вы получаете жетон стресса, вы можете удалить его и бросить один кубик атаки. На результате %HIT% получите на этот корабль карту Повреждения лицом вниз."""
+        '"Hobbie" Klivian':
+            text: """Когда вы получаете или тратите Захват цели, вы можете удалить один жетон стресса с вашего корабля."""
+        "Tarn Mison":
+            text: """Когда корабль противника объявил вас целью для своей атаки, вы можете получить Захват цели на этот корабль."""
+        "Jake Farrell":
+            text: """После выполнения действия Концентрации или получения жетона Концентрации, вы можете совершить свободное действие Ускорение или Бочка."""
+        "Gemmer Sojan":
+            text: """Пока вы находитесь на Дистанции 1 от, по крайней мере одного, корабля противника, увеличьте показатель вашей маневренности на один."""
+        "Keyan Farlander":
+            text: """Когда атакуете, вы можете удалить один жетон Стресса для замены всех ваших %FOCUS% результатов на %HIT% результаты."""
+        "Nera Dantels":
+            text: """Вы можете выполнять атаки торпедами %TORPEDO% по кораблям противника, находящимися вне вашего сектора стрельбы."""
+        # "CR90 Corvette (Crippled Aft)":
+        #     name: "CR90-Korvette (Heck-Lahmgelegt)"
+        #     ship: "CR90-Korvette (Heck)"
+        #     text: """Folgende Manц╤ver darfst du weder wц╓hlen noch ausfц╪hren: (%STRAIGHT% 4), (%BANKLEFT% 2), or (%BANKRIGHT% 2) ."""
+        # "CR90 Corvette (Crippled Fore)":
+        #     name: "CR90-Korvette (Bug-Lahmgelegt)"
+        #     ship: "CR90-Korvette (Bug)"
+        "Dash Rendar":
+            text: """Вы можете игнорировать жетоны преград в фазе Активации и когда совершаете Действия."""
+        '"Leebo"':
+            text: """Когда вы получаете карту Повреждения лицом вверх, вытяните одну дополнительную карту Повреждения, выберите одну для применения, вторую сбросьте."""
+        "Eaden Vrill":
+            text: """Когда вы атакуете основным орудием корабль с жетоном Стресса, кидайте один дополнительный кубик атаки."""
+        "Rear Admiral Chiraneau":
+            text: """При атаке на Дистанции 1-2, вы можете поменять один из ваших результатов %FOCUS% на %CRIT% результат."""
+        "Commander Kenkirk":
+            text: """Если у вас нет щитов и есть хотя бы одна карта Повреждения, увеличьте вашу маневренность на один."""
+        "Captain Oicunn":
+            text: """После выполнения маневра каждый вражеский корабль, с которым вы соприкасаетесь, получает одно повреждение."""
+        "Prince Xizor":
+            text: """При защите, дружественный корабль на Дистанции 1 может получить один неотмененный результат %HIT% или %CRIT% вместо вас."""
+        "Guri":
+            text: """В начале фазы Боя, если вы на Дистанции 1 от вражеского корабля, вы можете назначить один жетон концентрации вашему кораблю."""
+        "Serissu":
+            text: """Когда другой дружественный корабль на Дистанции 1 защищается, он может перебросить один кубик защиты."""
+        "Laetin A'shera":
+            text: """После того как вы выполнили защиту от вражеской атаки, если атака не попала, вы можете назначить один жетон уклонения вашему кораблю."""
+        "IG-88A":
+            text: """После выполнения вами атаки, которая уничтожила цель, вы можете восстановить один щит."""
+        "IG-88B":
+            text: """Единожды в раунд, после выполнения атаки, которая не попала, вы можете осуществить атаку из имеющегося дополнительного орудия %CANNON%."""
+        "IG-88C":
+            text: """После выполнения вами действия Ускорения, вы можете совершить свободное действие Уклонения."""
+        "IG-88D":
+            text: """Вы можете осуществлять маневры (%SLOOPLEFT% 3) или (%SLOOPRIGHT% 3) используя соответствующие шаблоны (%TURNLEFT% 3) или (%TURNRIGHT% 3) ."""
+        "Boba Fett (Scum)":
+            text: """При атаке или защите, вы можете перебросить один ваш кубик за каждый вражеский корабль на Дистанции 1."""
+        "Kath Scarlet (Scum)":
+            text: """При атаке корабля в вашем вспомогательном секторе стрельбы, бросайте один дополнительный кубик атаки."""
+        "Emon Azzameen":
+            text: """При сбросе бомбы, вы можете использовать шаблоны [%TURNLEFT% 3], [%STRAIGHT% 3], или [%TURNRIGHT% 3] вместо шаблона [%STRAIGHT% 1]."""
+        "Kavil":
+            text: """При атаке корабля вне вашего сектора обстрела бросайте один дополнительный кубик атаки."""
+        "Drea Renthal":
+            text: """После того как вы использовали Захват цели вы можете получить один жетон Стресса для выполнения Захвата цели."""
+        "Dace Bonearm":
+            text: """Когда вражеский корабль на Дистанции 1-3 получает как минимум один жетон Иона, и у вас нет жетонов Стресса, вы можете получить один жетон Стресса и нанести этому кораблю одно повреждение."""
+        "Palob Godalhi":
+            text: """В начале фазы Боя, вы можете удалить один жетон %FOCUS% или %EVADE% с вражеского корабля на Дистанции 1-2 и назначить его своему кораблю."""
+        "Torkil Mux":
+            text: """В начале фазы Активации выберите один вражеский корабль на Дистанции 1-2. До конца фазы Боя считайте Мастерство пилота этого корабля как "0"."""
+        "N'Dru Suhlak":
+            text: """При атаке, если на Дистанции 1-2 нет других дружественных кораблей, бростайте один дополнительный кубик атаки."""
+        "Kaa'To Leeachos":
+            text: """В начале фазы Боя вы можете удалить один жетон %FOCUS% или %EVADE% с другого дружественного корабля на Дистанции 1-2, и назначить его себе."""
+        "Commander Alozen":
+            text: """В начале фазы Боя вы можете получить Захват цели на вражеский корабль на Дистанции 1."""
+        "Raider-class Corvette (Fore)":
+            text: """Once per round, ??? perform a primary ??? attack, you may spend 2 e??? perform another primary wea???"""
+        "Juno Eclipse":
+            text: """Когда вы открываете свой маневр, вы можете увеличить или уменьшить его скорость на единицу (до минимума в 1)."""
+        "Zertik Strom":
+            text: """Вражеский корабль на Дистанции 1 не может использовать бонус дистанции при выполнении атаки."""
+        "Lieutenant Colzet":
+            text: """В начале фазы Завершения вы можете использовать имеющийся Захват цели на вражеский корабль, для того чтобы перевернуть лицом вверх одну случайную из имеющихся у него карт Повреждений."""
+        "Latts Razzi":
+            text: """Когда дружественный корабль объявляет атаку, вы можете использовать имеющийся Захват цели на защищающемся корабле для уменьшения его маневренности на единицу на время этой атаки."""
+        "Graz the Hunter":
+            text: """При защите, если атакующий в вашем секторе обстрела, бросайте один дополнительный кубик защиты."""
+        "Esege Tuketu":
+            text: """Когда другой дружественный корабль на Дистанции 1-2 атакует, вы можете считать ваш жетон %FOCUS% как принадлежащий ему."""
+        '"Redline"':
+            text: """Вы можете осуществлять два захвата цели на один корабль. Когда вы осуществляете Захват цели, вы можете получить второй Захват цели  на этот корабль."""
+        '"Deathrain"':
+            text: """При сбросе бомбы, вы можете использовать передние направляющие вашего корабля. После сброса бомбы вы можете осуществить свободное действие Бочка."""
+        "Moralo Eval":
+            text: """Вы можете осуществлять атаки дополнительным орудием %CANNON% против кораблей в вашем дополнительном секторе обстрела."""
+        'Gozanti-class Cruiser':
+            text: """After you execute a maneuver, you may deploy up to 2 attached ships."""
+        '"Scourge"':
+            text: """When attacking a defender that has 1 or more Damage cards, roll 1 additional attack die."""
+        "The Inquisitor":
+            text: """When attacking with your primary weapon at Range 2-3, treat the range of the attack as Range 1."""
+        "Zuckuss":
+            text: """When attacking, you may roll 1 additional attack die.  If you do, the defender rolls 1 additional defense die."""
+        "Dengar":
+            text: """Once per round after defending, if the attacker is inside your firing arc, you may perform an attack against the that ship."""
+
+    upgrade_translations =
+        "Ion Cannon Turret":
+            text: """Атака: Атакуйте 1 корабль (даже если он находится вне сектора обстрела).%LINEBREAK%Если попадаете по цели, атакованный корабль получает 1 Повреждение и 1 жетон Иона. Затем отмените все результаты кубиков."""
+        "Proton Torpedoes":
+            text: """Атака (Захват цели):Потратьте жетон Захвата Цели и сбросьте эту карту для того, чтобы выполнить эту атаку. Вы можете заменить 1 из ваших %FOCUS% результатов на результат %CRIT%."""
+        "R2 Astromech":
+            text: """Манёвры со скоростью 1 и 2 вы можете считать как зелёные манёвры."""
+        "R2-D2":
+            text: """После выполнения зелёного манёвра вы можете восстановить 1 Щит (до максимума доступного вам)."""
+        "R2-F2":
+            text: """Действие: Вы можете увеличить значение Маневренности на 1 до конца текущего раунда."""
+        "R5-D8":
+            text: """Действие: Бросьте 1 кубик защиты. %LINEBREAK%В случае выпадения %EVADE% или %FOCUS% результата вы можете сбросить 1 карту из ваших не-критических Повреждений."""
+        "R5-K6":
+            text: """После сброса жетона Захвата цели, бросьте1 кубик защиты.%LINEBREAK%В случае выпадения результата %EVADE% немедленно получите жетон Захвата цели на тот же самый корабль. Вы не можете
+потратить его во время этой атаки."""
+        "R5 Astromech":
+            text: """Во время фазы Завершения вы можете выбрать 1 из ваших карт Критических Повреждений с заголовком Корабль  и перевернуть её лицом вниз."""
+        "Determination":
+            text: """Когда вы получаете карту Критического повреждения
+с заголовком Пилот, немедленно сбросьте её без выполнения её эффекта."""
+        "Swarm Tactics":
+            text: """В начале фазы Боя выберите дружественный корабль на Дистанции 1. %LINEBREAK%До конца этой фазы пилот выбранного корабля имеет значение Мастерства пилота такое же как, и у вас."""
+        "Squad Leader":
+            text: """Действие: Выберите один корабль на Дистанции 1-2, пилот которого имеет Мастерство ниже вашего.
Выбранный корабль может немедленно выполнить 1 свободное действие."""
+        "Expert Handling":
+            text: """Действие: Выполните свободное действие Бочка. Если у вас нет пиктограммы действия %BARRELROLL%, получите 1 жетон Стресса.%LINEBREAK%Затем вы можете удалить с вашего корабля 1 жетон Захвата цели противника."""
+        "Marksmanship":
+            text: """Действие: Во время атаки в
+текущем раунде вы можете поменять 1 ваш выпавший
+результат %FOCUS% на %CRIT%, и все остальные ваши результаты %FOCUS% на результат %HIT%."""
+        "Concussion Missiles":
+            text: """Атака (Захват цели):  Потратьте жетон
+Захвата цели и сбросьте эту карту для того, чтобы выполнить эту атаку. %LINEBREAK%Вы можете заменить 1 выпавший пустой результат на %HIT% результат."""
+        "Cluster Missiles":
+            text: """Атака (Захват цели):  Потратьте жетон
+Захвата Цели и сбросьте эту карту для того, чтобы выполнить эту атаку
+дважды."""
+        "Daredevil":
+            text: """Действие: Выполните белый
+(%TURNLEFT% 1) или (%TURNRIGHT% 1) манёвр. Затем бросьте два кубика атаки, если вы не имеете действия %BOOST%. Получите
+попадания %HIT% и %CRIT%, если таковые выпали."""
+        "Elusiveness":
+            text: """Во время защиты, вы можете получить 1 жетон Стресса
+и выбрать 1 кубик атаки. Нападающий должен перебросить этот кубик.
+Если у вас есть хотя бы 1 жетон Стресса, вы не можете использовать эту
+способность."""
+        "Homing Missiles":
+            text: """Атака (Захват цели): Сбросьте эту карту для того, чтобы выполнить эту атаку.%LINEBREAK%Обороняющийся корабль не
+может использовать жетон Уклонения во время этой атаки."""
+        "Push the Limit":
+            text: """Единожды во время раунда, после выполнения
+действия вы можете выполнить 1 из имеющихся у вас на Панели действий,
+как свободное.%LINEBREAK%Затем получите 1 жетон Стресса."""
+        "Deadeye":
+            text: """Вы можете считать «Атака [Захват Цели]», как «Атака [Концентрация]:»
 Когда правило Атаки гласит, что жетон Захвата Цели должен быть потрачен, вы можете потратить жетон Концентрации вместо этого."""
+        "Expose":
+            text: """Действие: До конца этого раунда увеличьте величину вашего основного оружия на 1, и уменьшите на 1 показатель вашей Маневренности."""
+        "Gunner":
+            text: """Если в результате выполнения атаки у вас нет попаданий, немедленно выполните атаку из основного оружия. Вы не можете выполнять других атак в этом раунде."""
+        "Ion Cannon":
+            text: """Атака: Атакуйте 1 корабль. %LINEBREAK%Если попадаете по цели, атакованный корабль получает 1 Повреждение и
+1 жетон Иона. Затем отмените все результаты кубиков."""
+        "Heavy Laser Cannon":
+            text: """Атака: Атакуйте 1 корабль. %LINEBREAK%Сразу после броска кубиков атаки вы должны заменить все ваши %CRIT% результаты, на %HIT% результаты ."""
+        "Seismic Charges":
+            text: """После вскрытия своего маневра вы можете сбросить эту карту и выставить 1 жетон Сейсмического заряда.%LINEBREAK%Этот заряд детонирует в конце фазы активации."""
+        "Mercenary Copilot":
+            text: """Во время атаки на Дистанции 3, вы можете заменить один из ваших %HIT% результатов на %CRIT%."""
+        "Assault Missiles":
+            text: """Атака (Захват цели): Потратьте жетон
+Захвата Цели и сбросьте эту карту для того, чтобы выполнить эту атаку.%LINEBREAK%Если эта атака попадёт, другие корабли на Дистанции 1 от обороняющегося получат 1 Повреждение."""
+        "Veteran Instincts":
+            text: """Увеличьте Мастерство вашего пилота на 2."""
+        "Proximity Mines":
+            text: """Действие: Сбросьте эту карту и выставите 1 жетон Мины.%LINEBREAK%При совершении кораблем манёвра, если его база и шаблон маневра накрывают этот жетон, мина детонирует."""
+        "Weapons Engineer":
+            text: """Вы можете иметь 2 Захвата цели (по 1 на каждом
+из кораблей).

Во время получения Захвата цели вы можете отметить 2 разных корабля."""
+        "Draw Their Fire":
+            text: """
+Когда любой дружественный корабль на Дистанции 1 получает попадание от атаки, вы можете принять на себя 1 не отменённый %CRIT% результат, вместо этого корабля."""
+        "Luke Skywalker":
+            text: """%DE_REBELONLY%%LINEBREAK%Если в результате выполнения атаки у вас нет попаданий, немедленно выполните атаку из основного оружия. Вы можете заменить 1 %FOCUS% результат на %HIT%. Вы не можете выполнять других атак в этом раунде."""
+        "Nien Nunb":
+            text: """%DE_REBELONLY%%LINEBREAK%Вы можете считать
+любые %STRAIGHT% манёвры зелёными."""
+        "Chewbacca":
+            name: "Chewbacca (Crew)"
+            text: """%DE_REBELONLY%%LINEBREAK%Когда вы получаете карту Повреждения, вы можете немедленно сбросить эту карту и восстановить 1 щит.%LINEBREAK%Затем сбросьте эту карту улучшения."""
+        "Advanced Proton Torpedoes":
+            text: """Атака (Захват цели): Потратьте жетон Захвата цели и сбросьте эту карту для того, чтобы выполнить эту атаку.%LINEBREAK%Вы можете заменить до 3 пустых результатов на %FOCUS% результаты."""
+        "Autoblaster":
+            text: """Атака: Атакуйте один корабль.%LINEBREAK%Ваши %HIT% результаты не могут быть отменены кубиками защиты.%LINEBREAK%Обороняющий может отменять %CRIT% результаты до %HIT% результатов."""
+        "Fire-Control System":
+            text: """После выполнение атаки вы можете получить жетон Захвата Цели на оборонявшийся корабль"""
+        "Blaster Turret":
+            text: """Атака (Концентрация): Потратьте 1 жетон Концентрации для выполнения этой атаки против 1 корабля противника (даже если противник находится вне вашего сектора обстрела)."""
+        "Recon Specialist":
+            text: """При выполнении действия Концентрация добавьте ещё 1 жетон Концентрация вашему кораблю."""
+        "Saboteur":
+            text: """Действие: Выберите один вражеский корабль на Дистанции 1 и бросьте кубик атаки. При выпадении %HIT% или %CTRIT% результата, выберите одну перевернутую карту повреждений этого корабля, положите её лицом вверх и исполните указанные в ней инструкции."""
+        "Intelligence Agent":
+            text: """В начале фазы Активации выберите один корабль на Дистанции 1-2. Вы можете посмотреть на выбранный этим кораблём манёвр."""
+        "Proton Bombs":
+            text: """После вскрытия своего маневра вы можете сбросить эту карту чтобы выставить 1 жетон Протонной бомбы. %LINEBREAK%Этот заряд детонирует в конце фазы Активации."""
+        "Adrenaline Rush":
+            text: """При вскрытии красного манёвра вы можете сбросить эту карту и считать данный манёвр белым до конца фазы Активации."""
+        "Advanced Sensors":
+            text: """Непосредственно перед вскрытием вашего манёвра вы можете выполнить 1 свободное действие.%LINEBREAK%Если вы используете эту возможность, вы должны пропустить шаг «Выполнение Действия» в текущем раунде."""
+        "Sensor Jammer":
+            text: """Во время обороны вы можете заменить 1 из %HIT% результатов атакующего на %FOCUS% результат.%LINEBREAK%Атаковавший не может перебросить этот кубик."""
+        "Darth Vader":
+            name: "Darth Vader (Crew)"
+            text: """%DE_IMPERIALONLY%%LINEBREAK%После выполнения вами атаки вражеского корабля вы можете получить 2 повреждения, чтобы вражеский корабль получил 1 критическое повреждение."""
+        "Rebel Captive":
+            text: """%DE_IMPERIALONLY%%LINEBREAK%Единожды за раунд, первый корабль, объявивший вас целью для атаки, немедленно получает 1 жетон Стресса."""
+        "Flight Instructor":
+            text: """Во время обороны вы можете перебросить 1 из ваших %FOCUS% результатов. Если величина Мастерства нападающего пилота «2» или менее, вы можете перебросить 1 из ваших пустых результатов, вместо %FOCUS%."""
+        "Navigator":
+            text: """Во время вскрытия манёвра вы можете выбрать другой манёвр такого же направления.%LINEBREAK%Красный манёвр не может быть выбран, если у вас уже есть хотя бы 1 жетон Стресса.""
+        "Opportunist":
+            text: """Во время атаки, если защищающийся не имеет жетонов Концентрации или Уклонения, вы можете получить 1 жетон Стресса и бросить 1 дополнительный кубик атаки. %LINEBREAK%Вы не можете использовать эту способность при наличии у вас жетона Стресса."""
+        "Comms Booster":
+            text: """"""Энергия: Потратьте 1 энергию и удалите все жетоны стресса на дружественном корабле на Дистанции 1-3. Затем положите 1 жетон концентрации на этот корабль."""
+        "Slicer Tools":
+            text: """Действие: Выберите 1 или более вражеских кораблей, имеющих жетоны стресса на Дистанции 1-3. Для каждого выбранного корабля вы можете потратить 1 энергию, чтобы нанести 1 Повреждение."""
+        "Shield Projector":
+            text: """Когда корабль противника объявляет своей целью маленький или большой корабль, вы можете потратить 3 энергии, чтобы принудить этот корабль выбрать целью ва, если это возможно."""
+        "Ion Pulse Missiles":
+            text: """Атака (Захват цели):
Сбросьте эту карту для выполнения этой атаки.%LINEBREAK%Если эта атака попала, защищающийся получает 1 повреждение и 2 жетона иона. Затем все результаты кубиков отменяются."""
+        "Wingman":
+            text: """Вначале фазы Боя удалите 1 жетон стресса с другого дружественного корабля на Дистанции 1."""
+        "Decoy":
+            text: """В начале фазы Боя вы можете выбрать 1 дружественный корабль на Дистанции 1-2. Обменяйтесь показателями Мастерства пилота вашего и пилота выбранного корабля до конца фазы."""
+        "Outmaneuver":
+            text: """При атаке корабля, находящегося в вашем секторе обстрела, уменьшите значение Маневренности этого корабля на 1 (до минимума 0), если вы находитесь вне его сектора обстрела."""
+        "Predator":
+            text: """Во время атаки вы можете перебросить 1 кубик атаки. Если значение Мастерства защищающегося пилота равно ‘’2’’ или меньше, вы можете перебросить 2 кубика атаки."""
+        "Flechette Torpedoes":
+            name: "Flechet-Torpedos"
+            text: """Атака (Захват цели):
Потратьте жетон захвата цели и сбросьте эту карту для того, чтобы выполнить эту атаку.%LINEBREAK%После выполнения этой атаки защищающийся получает 1 жетон стресса, если значение корпуса его корабля равно 4 или меньше."""
+        "R7 Astromech":
+            text: """Один раз за раунд во время
+защиты, если вы имеете захват цели на нападающем, вы можете сбросить захват цели и выбрать любые или все брошенные кубики атаки. Атакующий должен перебросить выбранные кубики."""
+        "R7-T1":
+            text: """Действие:  Выберите корабль противника на Дистанции 1-2. Если вы находитесь в секторе обстрела этого корабля, вы можете получить Захват цели на этот корабль. Затем вы можете выполнить свободное действие Ускорение."""
+        "Tactician":
+            text: """После выполнения атаки по кораблю, находящемуся в вашем секторе обстрела и на Дистанции 2, этот корабль получает 1 жетон стресса."""
+        "R2-D2 (Crew)":
+            name: "R2-D2 (Crew)"
+            text: """%DE_REBELONLY%%LINEBREAK% В конце фазы Завершения, если у вашего корабля нет щитов, вы можете восстановить один щит и кинуть кубик атаки. В случае результата %HIT% случайно выберите одну из карт повреждений, лежащих лицом вниз, и переверните. Затем выполните её инструкции."""
+        "C-3PO":
+            text: """%DE_REBELONLY%%LINEBREAK%Один раз за раунд, до броска 1 или более кубиков защиты, назовите количестве будущих результатов %EVADE%. Если выпало ровно столько %EVADE% результатов (до изменения результатов броска), добавьте 1 результат %EVADE%."""
+        "Single Turbolasers":
+            name: "Einzelne Turbolasers"
+            text: """Angriff (Energie): gib 2 Energie von dieser Karte aus, um mit dieser Sekundц╓rwaffe anzugreifen. Der Verteidiger verwendet zum Verteidigen seinen doppelten Wendigkeitswert. Du darfst 1 deiner %FOCUS% in ein %HIT% ц╓ndern."""
+        "Quad Laser Cannons":
+            name: "Vierlings-Laserkanone"
+            text: """Angriff (Energie): Gib 1 Energie von dieser Karte aus, um mit dieser Sekundц╓rwaffe anzugreifen. Wenn der Angriff verfehlt, kannst du sofort 1 Energie von dieser Karte ausgeben, um den Angriff zu wiederholen."""
+        "Tibanna Gas Supplies":
+            name: "Tibanna-Gas-Vorrц╓te"
+            text: """Energie: Du kannst diese Karte ablegen, um 3 Energie zu erzeugen."""
+        "Ionization Reactor":
+            name: "Ionenreaktor"
+            text: """Energie: Gib 5 Energie von dieser Karte aus und lege sie ab, damit jedes andere Schiff in Reichweite 1 einen Schaden nimmt und einen Ionenmarker bekommt."""
+        "Engine Booster":
+            name: "Nachbrenner"
+            text: """Unmittelbar bevor du dein Manц╤verrad aufdeckst, kannst du 1 Energie ausgeben, um ein weiц÷es (%STRAIGHT% 1)-Manц╤ver auszufц╪hren. Wenn es dadurch zur ц°berschneidung mit einem anderen Schiff kц╓me, darfst du diese Fц╓higkeit nicht nutzen."""
+        "R3-A2":
+            name: "R3-A2"
+            text: """При объявлении цели вашей атаки, если она находится в вашем секторе обстрела, вы можете получить 1 жетон Стресса чтобы защищающийся тоже получил 1 жетон Стресса."""
+        "R2-D6":
+            text: """Вам доступно %ELITE% Улучшение.%LINEBREAK%Вы не можете использовать экипировать этого дроида если %ELITE% уже есть на панели Улучшений, или мастерство вашего пилота 2 или меньше."""
+        "Enhanced Scopes":
+            text: """Во время фазы Активации, рассматривайте Мастерство вашего пилота как "0"."""
+        "Chardaan Refit":
+            text: """A-WING only. %LINEBREAK%Эта карта имеет отрицательную стоимость."""
+        "Proton Rockets":
+            text: """Атака (Концентрация): %LINEBREAK%Сбросьте эту карту для того, чтобы выполнить эту атаку. Вы можете бросить дополнительные кубики атаки в количестве, равном показателю вашей Маневренности, но не более 3."""
+        "Kyle Katarn":
+            name: "Kyle Katarn (Crew)"
+            text: """%DE_REBELONLY%%LINEBREAK%После удаления жетона стресса с вашего корабля, вы можете назначить ему жетон концентрации."""
+        "Jan Ors":
+            name: "Jan Ors (Crew)"
+            text: """%DE_REBELONLY%%LINEBREAK%Один раз в раунд вы можете назначить дружественному кораблю на Дистанции 1-3 жетон уклонения, вместо выполнения данным кораблем действия концентрации или получения этим кораблем жетона концентрации."""
+        "Toryn Farr":
+            text: """%DE_HUGESHIPONLY%%LINEBREAK%%DE_REBELONLY%%LINEBREAK%Aktion: Gib X Energie aus, um X feindliche Schiffe in Reichweite 1-2 zu wц╓hlen. Sц╓mtliche Fokus-, Ausweich- und blauen Zielerfassungsmarker dieser Schiffe werden entfernt."""
+        # TODO Check card formatting
+        "R4-D6":
+            text: """Когда вас атаковали и есть как минимум 3 неотмененных %HIT% результата, вы можете выбрать отменить эти результаты, пока не останется 2. За каждый отмененный таким образом %HIT% получите 1 жетон стресса."""
+        "R5-P9":
+            text: """В конце фазы Боя вы можете потратить 1 из ваших жетонов концентрации для восстановления одного щита (до максимума, доступного вам)."""
+        "WED-15 Repair Droid":
+            name: "WED-15 Reparaturdroide"
+            text: """%DE_HUGESHIPONLY%%LINEBREAK%Aktion: gib 1 Energie aus, um 1 deiner verdeckten Schadenskarten abzulegen oder gib 3 Energie aus, um 1 deiner offenen Schadenskarten abzulegen."""
+        "Carlist Rieekan":
+            text: """%DE_HUGESHIPONLY%%LINEBREAK%%DE_REBELONLY%%LINEBREAK%Zu Beginn der Aktivierungsphase kannst du diese Karte ablegen, damit bis zum Ende der Phase der Pilotenwert aller freundlichen Schiffe 12 betrц╓gt."""
+        "Jan Dodonna":
+            text: """%DE_HUGESHIPONLY%%LINEBREAK%%DE_REBELONLY%%LINEBREAK%Wenn ein anderes freundliches Schiff in Reichweite 1 angreift, darf es 1 seiner gewц╪rfelten %HIT% in ein %CRIT% ц╓ndern."""
+        "Expanded Cargo Hold":
+            name: "Erweiterter Ladebereich"
+            text: """Ein Mal pro Runde darfst du, wenn du eine offene Schadenskarte erhц╓ltst, frei wц╓hlen, ob du sie vom Schadensstapel Bug oder Heck ziehen willst."""
+            ship: "Medium-Transporter GR-75"
+        "Backup Shield Generator":
+            name: "Sekundц╓rer Schildgenerator"
+            text: """Am Ende jeder Runde kannst du 1 Energie ausgeben, um 1 Schild wiederaufzuladen (bis maximal zum Schildwert)."""
+        "EM Emitter":
+            name: "EM-Emitter"
+            text: """Wenn du bei einem Angriff die Schussbahn versperrst, bekommst der Verteidiger 3 zusц╓tzliche Verteidigungswц╪rfel (anstatt 1)."""
+        "Frequency Jammer":
+            name: "Stц╤rsender (Fracht)"
+            text: """Wenn du die Aktion Stц╤rsignal durchfц╪hrst, wц╓hle 1 feindliches Schiff ohne Stressmarker in Reichweite 1 des vom Stц╤rsignal betroffenen Schiffs. Das gewц╓hlte Schiff erhц╓lt 1 Stressmarker."""
+        "Han Solo":
+            name: "Han Solo (Crew)"
+            text: """%DE_REBELONLY%%LINEBREAK%При атаке, если у вас есть захват цели на защищающемся, то вы можете сбросить захват цели для изменения всех ваших %FOCUS% результатов на %HIT% результаты."""
+        "Leia Organa":
+            text: """%DE_REBELONLY%%LINEBREAK%В начале фазы Активации вы можете сбросить эту карту, чтобы позволить всем дружественным кораблям, раскрывающим красный маневр, рассматривать этот маневр белым до конца этой фазы."""
+        "Targeting Coordinator":
+            text: """Energy: You may spend 1 energy to choose 1 friendly ship at Range 1-2.  Acquire a target lock, then assign the blue target lock token to the chosen ship."""
+        "Raymus Antilles":
+            text: """%DE_HUGESHIPONLY%%LINEBREAK%%DE_REBELONLY%%LINEBREAK%Wц╓hle zu Beginn der Aktivierungsphase 1 feindliches Schiff in Reichweite 1-3. Du kannst dir das gewц╓hlte Manц╤ver dieses Schiffes ansehen. Wenn es weiц÷ ist, bekommt dieses Schiff 1 Stressmarker."""
+        "Gunnery Team":
+            name: "Bordschц╪tzenteam"
+            text: """Einmal pro Runde kannst du beim Angreifen mit einer Sekundц╓rwaffe 1 Energie ausgeben, um 1 gewц╪rfelte Leerseite in ein %HIT% zu ц╓ndern."""
+        "Sensor Team":
+            name: "Sensortechnikerteam"
+            text: """Du kannst feindliche Schiffe in Reichweite 1-5 in die Zielerfassung nehmen (anstatt in Reichweite 1-3)."""
+        "Engineering Team":
+            name: "Ingenieurteam"
+            text: """Wenn du in der Aktivierungsphase ein %STRAIGHT% Manц╤ver aufdeckst, bekommst du im Schritt "Energie gewinnen" 1 zusц╓tzlichen Energiemarker."""
+        "Lando Calrissian":
+            name: "Lando Calrissian (Crew)"
+            text: """%DE_REBELONLY%%LINEBREAK%Действие: %LINEBREAK% Киньте два зеленых кубика. За каждый %FOCUS% результат назначьте 1 жетон Концентрации вашему кораблю. За каждый %EVADE% результат назначьте 1 жетон Уклонения вашему кораблю."""
+        "Mara Jade":
+            text: """%DE_IMPERIALONLY%%LINEBREAK%В конце фазы Боя каждый вражеский корабль на Дистанции 1, не имеющий жетона Стресса, получает 1 жетон Стресса."""
+        "Fleet Officer":
+            text: """Действие: %LINEBREAK% Выберите до 2 дружественных кораблей на Дистанции 1-2, и назначьте 1 жетон Концентрации каждому из этих кораблей. Затем получите жетон Стресса."""
+        "Targeting Coordinator":
+            text: """Energie: Du kannst 1 Energie ausgeben, um 1 freundliches Schiff in Reichweite1-2 zu wц╓hlen. Nimm dann ein Schiff in die Zielerfassung und gibt den blauen Zielerfassungsmarker dem gewц╓hlten Schiff."""
+        "Lone Wolf":
+            text: """При атаке или защите, если не Дистанции 1-2 не других дружественных кораблей, вы можете перебросить один пустой результат."""
+        "Stay On Target":
+            text: """Когда вы вскрываете маневр, вы можете изменить его на другой доступный вам маневр той же скорости.%LINEBREAK% Считайте этот маневр как красный маневр."""
+        "Dash Rendar":
+            name: "Dash Rendar (Crew)"
+            text: """%DE_REBELONLY%%LINEBREAK%Вы можете атаковать находясь на препятствии."""
+        '"Leebo"':
+            name: '"Leebo" (Crew)'
+            text: """%DE_REBELONLY%%LINEBREAK%Действие: %LINEBREAK% Осуществите свободное действие Ускорение. Затем получите 1 жетон Иона."""
+        "Ruthlessness":
+            text: """%DE_IMPERIALONLY%%LINEBREAK%После совершения атаки, которая попала в цель, вы должны выбрать один другой корабль на Дистанции 1 от цели (кроме своего). Этот корабль получает 1 Повреждение."""
+        "Intimidation":
+            text: """Пока вы касаетесь вражеского корабля, уменьшите его значение Маневренности на 1."""
+        "Ysanne Isard":
+            text: """%DE_IMPERIALONLY%%LINEBREAK%В начале фазы Боя, если у вас нет щитов и есть хотя бы одна карта Повреждения, вы можете выполнить свободное действие %EVADE%."""
+        "Moff Jerjerrod":
+            text: """%DE_IMPERIALONLY%%LINEBREAK%Когда вы получаете карту Повреждения лицом вверх, вы можете сбросить эту карту, или другую карту %CREW% для того, чтобы перевернуть эту карту Повреждения рубашкой вверх (без применения её свойств)."""
+        "Ion Torpedoes":
+            text: """Атака (Захват цели): %LINEBREAK%Потратье захват цели и сбросьте эту карту чтобы выполнить эту атаку. %LINEBREAK%Если атака попала, то защищающийся и все корабли на Дистанции 1 от него получают по 1 жетону Иона."""
+        "Bodyguard":
+            text: """%DE_SCUMONLY%%LINEBREAK%В начале фазы боя вы можете потратить жетон концентрации для выбора дружественного корабля на Дистанции 1, с мастерством пилота выше чем у вас. Увеличьте его значение Маневренности на 1 до конца раунда."""
+        "Calculation":
+            text: """При атаке вы можете потратить жетон Концентрации для изменения 1 значения %FOCUS% на значение %CRIT%."""
+        "Accuracy Corrector":
+            text: """При атаке, на шаге "Изменения кубиков атаки" вы можете отменить все значения ваших кубиков. Затем, вы можете добавить два результата %HIT% к броску.%LINEBREAK%Ваши кубики не могут быть модифицированы снова в течении этой атаки."""
+        "Inertial Dampeners":
+            text: """Когда вы вскрываете свой маневр, вы можете скинуть эту карту для выполнения белого маневра [0%STOP%] вместо выбранного. Затем получите 1 жетон Стресса."""
+        "Flechette Cannon":
+            text: """Атака: Атакуйте один корабль.%LINEBREAK%Если эта атака попала, защищающийся получает 1 повреждение и, если у него нет Стресса, он также получает 1 жетон Стресса. Затем отмените все результаты кубиков."""
+        '"Mangler" Cannon':
+            text: """Атака: Атакуйте один корабль%LINEBREAK%При атаке вы можете поменять один результат %HIT% на %CRIT%."""
+        "Dead Man's Switch":
+            text: """Когда ваш корабль уничтожен, каждый корабль на Дистанции 1 получает 1 Повреждение."""
+        "Feedback Array":
+            text: """В течении фазы Боя, вместо осуществления атаки вы можете получить 1 жетон Иона и 1 Повреждение для того, чтобы выбрать один вражеский корабль на Дистанции 1. Этот корабль получает 1 повреждение."""
+        '"Hot Shot" Blaster':
+            text: """Атака: %LINEBREAK%Скиньте эту карту для атаки одного корабля (даже если он вне вашего  сектора обстрела)."""
+        "Greedo":
+            text: """%DE_SCUMONLY%%LINEBREAK%Первый раз когда вы атакуете в каждом раунде, и первый раз когда вы защищаетесь в каждом раунде, первая карта Повреждения применяется рубашкой вниз."""
+        "Salvaged Astromech":
+            text: """Когда вы получаете карту Повреждения с заголовком Корабль, вы можете немедленно сбросить эту карту (до применения её эффекта).%LINEBREAK%Затем сбросьте эту карту."""
+        "Bomb Loadout":
+            text: """Y-Wing only.%LINEBREAK%Ваша панель улучшений содержит пиктограмму %BOMB%"""
+        '"Genius"':
+            text: """Если вы снаряжены бомбой, которая сбрасывается при вскрытии маневра, то вы можете сбросить её после выполнения маневра."""
+        "Unhinged Astromech":
+            text: """Вы можете считать все маневры со скоростью 3 как зеленые маневры."""
+        "R4-B11":
+            text: """При атаке, если у вас есть захват цели на защищающегося, вы можете сбросить этот захват цели для выбора некоторых или всех кубиков защиты. Защищающийся должен перебросить выбранные кубики."""
+        "Autoblaster Turret":Атака: Атакуйте один корабль (даже если он вне вашего сектора обстрела)%LINEBREAK%Ваши результаты %HIT% не могут быть отменены кубиками защиты. Защищающийся может отменить результаты %CRIT% перед результатами %HIT%."""
+        "R4 Agromech":
+            text: """При атаке, после того как вы использовали жетон Концентрации, вы можете получить Захват цели на обороняющемся."""
+        "K4 Security Droid":
+            text: """%DE_SCUMONLY%%LINEBREAK%После выполнения зеленого маневра вы можете осуществить Захват цели."""
+        "Outlaw Tech":
+            text: """%DE_SCUMONLY%%LINEBREAK%После выполнения красного маневра вы можете получить 1 жетон Концентрации."""
+        "Advanced Targeting Computer":
+            text: """TIE Advanced only.%LINEBREAK%При атаке из основного оружия, если у вас есть захват цели на обороняющемся, вы можете добавить 1 результат %CRIT% к вашим результатам. Если вы делаете это, то вы не можете потратить Захват цели в течении этой атаки."""
+        "Ion Cannon Battery":
+            text: """Attack (energy): Spend 2 energy from this card to perform this attack.  If this attack hits, the defender suffers 1 critical damage and receives 1 ion token.  Then cancel all dice results."""
+        "Emperor Palpatine":
+            text: """%IMPERIALONLY%%LINEBREAK%Once per round, you may change a friendly ship's die result to any other die result.  That die result cannot be modified again."""
+        "Bossk":
+            text: """%SCUMONLY%%LINEBREAK%After you perform an attack that does not hit, if you are not stressed, you must receive 1 stress token. Then assign 1 focus token to your ship and acquire a target lock on the defender."""
+        "Lightning Reflexes":
+            text: """%SMALLSHIPONLY%%LINEBREAK%After you execute a white or green maneuver on your dial, you may discard this card to rotate your ship 180°.  Then receive 1 stress token after the "Check Pilot Stress" step."""
+        "Twin Laser Turret":
+            text: """Attack: Perform this attack twice (even against a ship outside your firing arc).

Each time this attack hits, the defender suffers 1 damage.  Then cancel all dice results."""
+        "Plasma Torpedoes":
+            text: """Attack (target lock): Spend your target lock and discard this card to perform this attack.

If this attack hits, after dealing damage, remove 1 shield token from the defender."""
+        "Ion Bombs":
+            text: """When you reveal your maneuver dial, you may discard this card to drop 1 ion bomb token.

This token detonates at the end of the Activation phase.

Ion Bombs Token: When this bomb token detonates, each ship at Range 1 of the token receives 2 ion tokens.  Then discard this token."""
+        "Conner Net":
+            text: """Action: Discard this card to drop 1 Conner Net token.

When a ship's base or maneuver template overlaps this token, this token detonates.

Conner Net Token: When this bomb token detonates, the ship that moved through or overlapped this token suffers 1 damage, receives 2 ion tokens, and skips its "Perform Action" step.  Then discard this token."""
+        "Bombardier":
+            text: """When dropping a bomb, you may use the (%STRAIGHT% 2) template instead of the (%STRAIGHT% 1) template."""
+        "Cluster Mines":
+            text: """Action: Discard this card to drop 3 cluster mine tokens.

When a ship's base or maneuver template overlaps a cluster mine token, that token detonates.

Cluster Mines Tokens: When one of these bomb tokens detonates, the ship that moved through or overlapped this token rolls 2 attack dice and suffers all damage (%HIT%) rolled.  Then discard this token."""
+        'Crack Shot':
+            text: '''When attacking a ship inside your firing arc, you may discard this card to cancel 1 of the defender's %EVADE% results.'''
+        "Advanced Homing Missiles":
+            text: """Attack (target lock): Discard this card to perform this attack.%LINEBREAK%If this attack hits, deal 1 faceup Damage card to the defender.  Then cancel all dice results."""
+        'Agent Kallus':
+            text: '''%IMPERIALONLY%%LINEBREAK%At the start of the first round, choose 1 enemy small or large ship.  When attacking or defending against that ship, you may change 1 of your %FOCUS% results to a %HIT% or %EVADE% result.'''
+        'XX-23 S-Thread Tracers':
+            text: """Attack (focus): Discard this card to perform this attack.  If this attack hits, each friendly ship at Range 1-2 of you may acquire a target lock on the defender.  Then cancel all dice results."""
+        "Tractor Beam":
+            text: """Attack: Attack 1 ship.%LINEBREAK%If this attack hits, the defender receives 1 tractor beam token.  Then cancel all dice results."""
+        "Cloaking Device":
+            text: """%SMALLSHIPONLY%%LINEBREAK%Action: Perform a free cloak action.%LINEBREAK%At the end of each round, if you are cloaked, roll 1 attack die.  On a %FOCUS% result, discard this card, then decloak or discard your cloak token."""
+
+    modification_translations =
+        "Stealth Device":
+            text: """Ваша Маневренности увеличена на 1. Сбросьте эту карту, если вы получили попадание при атаке."""
+        "Shield Upgrade":
+            text: """Щиты вашего корабля увеличиваются на 1."""
+        "Engine Upgrade":
+            text: """На Панель действий добавляется действие %BOOST%"""
+        "Anti-Pursuit Lasers":
+            text: """%DE_LARGESHIPONLY%%LINEBREAK%После того как вражеский корабль совершит манёвр, который приводит его к столкновению с вашим, бросьте 1 кубик атаки. В случае выпадения %HIT% или %CRIT% результата вражеский корабль получает 1 повреждение."""
+        "Targeting Computer":
+            text: """На Панель действий добавляется действие %TARGETLOCK%."""
+        "Hull Upgrade":
+            text: """Значение корпуса вашего корабля увеличивается на 1."""
+        "Munitions Failsafe":
+            text: """При атаке второстепенным оружием, по инструкции которого вам требуется сбросить карту для выполнения этой атаки, не сбрасывайте карту, если атака не принесла успеха."""
+        "Stygium Particle Accelerator":
+            text: """Когда вы выполняете любое из действий Сброса Маскировки или Маскировки, вы можете получить свободное действие Уклонения."""
+        "Advanced Cloaking Device":
+            text: """После выполнения атаки, вы можете выполнить свободное действие маскировки."""
+        "Combat Retrofit":
+            ship: "Medium-Transporter GR-75"
+            text: """Erhц╤he deinen Hц╪llenwert um 2 und deinen Schildwert um 1."""
+        "B-Wing/E2":
+            text: """На вашу панель Улучшений добавляется улучшение %CREW%."""
+        "Countermeasures":
+            text: """%DE_LARGESHIPONLY%%LINEBREAK%В начале фазы Боя вы можете сбросить эту карту для увеличения Маневрености вашего корабля на 1 до конца раунда. Затем вы можете скинуть 1 вражеский захват цели со своего корабля."""
+        "Experimental Interface":
+            text: """Единожды за раунд, после выполнения действия вы можете выполнить свободное действие c экипированной карты Улучшения с заголовком Действие. Затем получите 1 жетон Стресса."""
+        "Tactical Jammer":
+            text: """%DE_LARGESHIPONLY%%LINEBREAK%Ваш корабль может быть влияет на вражеские атаки как препятствие."""
+        "Autothrusters":
+            text: """При защите, если вы за пределами Дистанции 2 или вне сектора обстрела атакующего корабля, вы можете поменять один пустой результат на результат %EVADE%. Вы можете экипировать это улучшение только если корабль имеет действие %BOOST%."""
+        "Twin Ion Engine Mk. II":
+            text: """You may treat all bank maneuvers (%BANKLEFT% and %BANKRIGHT%) as green maneuvers."""
+        "Maneuvering Fins":
+            text: """When you reveal a turn maneuver (%TURNLEFT% or %TURNRIGHT%), you may rotate your dial to the corresponding bank maneuver (%BANKLEFT% or %BANKRIGHT%) of the same speed."""
+        "Ion Projector":
+            text: """%LARGESHIPONLY%%LINEBREAK%After an enemy ship executes a maneuver that causes it to overlap your ship, roll 1 attack die.  On a %HIT% or %CRIT% result, the enemy ship receives 1 ion token."""
+
+
+    title_translations =
+        "Slave I":
+            text: """Firespray-31 only.%LINEBREAK%Ваша панель улучшений содержит пиктограмму %TORPEDO%."""
+        "Millennium Falcon":
+            text: """YT-1300 only%LINEBREAK%Ваша панель Улучшений содержит пиктограмму %EVADE%"""
+        "Moldy Crow":
+            text: """HWK-290 only.%LINEBREAK%В течении фазы Завершения не убирайте неиспользованные жетоны Концентрации с вашего корабля."""
+        "ST-321":
+            text: """Lambda-class Shuttle only.%LINEBREAK%Вы можете осуществлять Захват цели на любой корабль на игровом поле."""
+        "Royal Guard TIE":
+            text: """TIE Interceptor only.%LINEBREAK%Вы можете экипировать до двух разных Улучшений-модификации (вместо одного).%LINEBREAK%Вы не можете экипировать это улучшение если Мастерство пилота "4" и меньше."""
+        "Dodonna's Pride":
+            name: "Dodonnas Stolz"
+            ship: "CR90-Korvette (Bug)"
+            text: """Nur fц╪r CR90-Korvette (Bug).%LINEBREAK%Wenn du die Aktion Koordination durchfц╪hrst, kannst du 2 freundliche Schiffe wц╓hlen (anstatt 1). Jedes dieser Schiffe darf 1 freie Aktion durchfц╪hren."""
+        "A-Wing Test Pilot":
+            text: """A-Wing only.%LINEBREAK%Ваша панель Улучшений получает 1 пиктограмму %ELITE%.%LINEBREAK%Вы не можете экипировать 2 одинаковых Улучшения %ELITE%. Вы не можете экипировать это улучшение, если мастерство пилота "1" и меньше."""
+        "Tantive IV":
+            ship: "CR90-Korvette (Bug)"
+            text: """Nur fц╪r CR90-Korvette (Bug).%LINEBREAK%Die Aufwertungsleiste deiner Bugsektion erhц╓lt 1 zusц╓tzliches %CREW% und 1 zusц╓tzliches %TEAM% ."""
+        "Bright Hope":
+            ship: "Medium-Transporter GR-75"
+            text: """Nur fц╪r Medium-Transporter GR-75.%LINEBREAK%Wenn neben deiner Bugsektion ein Verstц╓rkungsmarker liegt, fц╪gt er 2 %EVADE% hinzu (anstatt 1)."""
+        "Quantum Storm":
+            ship: "Medium-Transporter GR-75"
+            text: """Nur fц╪r Medium-Transporter GR-75.%LINEBREAK%Wenn du zu Beginn der Endphase 1 Energiemarker oder weniger hast, gewinnst du 1 Energiemarker."""
+        "Dutyfree":
+            ship: "Medium-Transporter GR-75"
+            text: """Nur fц╪r Medium-Transporter GR-75.%LINEBREAK%Bei der Aktion Stц╤rsignal kannst du ein feindliches Schiff in Reichweite 1-3 (statt 1-2) wц╓hlen."""
+        "Jaina's Light":
+            name: "Jainas Licht"
+            ship: "CR90-Korvette (Bug)"
+            text: """Nur fц╪r CR90-Korvette (Bug).%LINEBREAK%Wenn du verteidigst, darfst du einmal pro Angriff eine soeben erhaltene, offene Schadenskarte ablegen und dafц╪r eine neue offene Schadenskarte ziehen."""
+        "Outrider":
+            text: """YT-2400 only.%LINEBREAK%Пока вы снаряжены Дополнительным Орудием %CANNON% вы не можете атаковать основным орудием, и вы можете атаковать Дополнительным Орудием %CANNON% корабли вне вашего сектора обстрела."""
+        "Dauntless":
+            text: """VT-49 Decimator only.%LINEBREAK%После выполнения маневра, который привел к перекрытию другого корабля вы можете осуществить 1 свободное действие. Затем получите 1 жетон Стресса."""
+        "Virago":
+            text: """StarViper only.%LINEBREAK%Ваша панель Улучшений содержит пиктограммы %SYSTEM% и %ILLICIT%.%LINEBREAK%Вы не можете экипировать это улучшение, если Мастерство пилота "3" или ниже."""
+        '"Heavy Scyk" Interceptor (Cannon)':
+            text: """M3-A Interceptor only.%LINEBREAK%Ваша панель Улучшений содержит пиктограмму %CANNON%, %TORPEDO%, или %MISSILE%."""
+        '"Heavy Scyk" Interceptor (Torpedo)':
+            text: """M3-A Interceptor only.%LINEBREAK%Ваша панель Улучшений содержит пиктограмму %CANNON%, %TORPEDO%, или %MISSILE%."""
+        '"Heavy Scyk" Interceptor (Missile)':
+            text: """M3-A Interceptor only.%LINEBREAK%Ваша панель Улучшений содержит пиктограмму %CANNON%, %TORPEDO%, или %MISSILE%."""
+        "IG-2000":
+            text: """Aggressor only.%LINEBREAK%Вы обладаете способностью пилота каждого другого дружественного корабля с улучшением IG-2000 (в дополнение к вашей способности пилота)."""
+        "BTL-A4 Y-Wing":
+            text: """Y-Wing only.%LINEBREAK%Вы не можете атаковать корабли вне вашего сектора обстрела. После атаки основным оружием вы можете немедленно атаковать дополнительным орудием %TURRET%."""
+        "Andrasta":
+            text: """Firespray-31 only.%LINEBREAK%Ваша панель Улучшений содержит две дополнительные пиктограммы %BOMB%."""
+        "TIE/x1":
+            text: """TIE Advanced only.%LINEBREAK%Ваша панель улучшения содержит пиктограмму %SYSTEM%.%LINEBREAK%Если вы экипируете Улучшение %SYSTEM%, его стоимость уменьшается на 4 (до минимальной стоимости "0")."""
+        "Ghost":
+            text: """VCX-100 only.%LINEBREAK%Equip the Phantom title card to a friendly Attack Shuttle and dock it to this ship.%LINEBREAK%After you execute a maneuver, you may deploy it from your rear guides."""
+        "Phantom":
+            text: """While you are docked, the Ghost can perform primary weapon attacks from its special firing arc, and, at the end of the Combat phase, it may perform an additional attack with an equipped %TURRET%. If it performs this attack, it cannot attack again this round."""
+        "TIE/v1":
+            text: """TIE Advanced Prototype only.%LINEBREAK%After you acquire a target lock, you may perform a free evade action."""
+        "Mist Hunter":
+            text: """G-1A starfighter only.%LINEBREAK%Your upgrade bar gains the %BARRELROLL% Upgrade icon.%LINEBREAK%You must equip 1 "Tractor Beam" Upgrade card (paying its squad point cost as normal)."""
+        "Punishing One":
+            text: """JumpMaster 5000 only.%LINEBREAK%Increase your primary weapon value by 1."""
+
+    exportObj.setupCardData basic_cards, pilot_translations, upgrade_translations, modification_translations, title_translations


log text fixed

log text fixed

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/AppGyver/supersonic.git/'


temporarely disable aws.update test suite

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/andrewjcasal/koding.git/'


A couple minor bug fixes. https://edx.lighthouseapp.com/projects/102637/tickets/173 https://edx.lighthouseapp.com/projects/102637/tickets/177

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bmedx/modulestore.git/'


Changed name of "code" toolbar button to "Code block".


Retain excludedUrls setting, so testers can revert to previous versions.

--- background_scripts/exclusions.coffee
+++ background_scripts/exclusions.coffee
@@ -74,4 +74,6 @@
   Exclusions.setRules(parseLegacyRules(Settings.get("excludedUrls")))
   # We'll keep a backup of the excludedUrls setting, just in case (and for testing).
   Settings.set("excludedUrlsBackup",Settings.get("excludedUrls")) if not Settings.has("excludedUrlsBackup")
-  Settings.clear("excludedUrls")
+  # TODO (smblott): Uncomment the following line.  It's commented for now so that anyone trying out this code
+  # can revert to previous versions.
+  # Settings.clear("excludedUrls")


update log file path in production env

update log file path in production env

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bekite/knignish.git/'


Add and clear markers method added

Add and clear markers method added

--- lib/pusht.coffee
+++ lib/pusht.coffee
@@ -284,7 +284,7 @@

     @pairingChannel.bind 'pusher:subscription_succeeded', (members) =>

-      @pairingChannel.trigger 'client-joined', {joined:true}
+      @pairingChannel.trigger 'client-joined', {colour: @markerColour}

     @pairingChannel.bind 'client-joined', (data) =>
@@ -348,29 +348,29 @@
       setTimeout =>
         if (@editor.getLastBufferRow() + 1) > lineCount
           newLineNumber = @editor.getCursorBufferPosition().toArray()[0]
-          $("atom-text-editor#pusht::shadow .line-number").each (index, line) =>
-            $(line).removeClass(@markerColour)
-
-          $("atom-text-editor#pusht::shadow .line-number-#{newLineNumber}").addClass(@markerColour)
+          @clearMyMarkers()
+          @addMarker(newLineNumber, @markerColour)
           lineCount = @editor.getLineCount()
       , 100

     @editor.onDidChangeCursorPosition (event) =>
       if event.newBufferPosition.toArray()[0] isnt event.oldBufferPosition.toArray()[0]
         newLineNumber = event.newBufferPosition.toArray()[0]
-
-        $("atom-text-editor#pusht::shadow .line-number").each (index, line) =>
-          $(line).removeClass(@markerColour)
-
-        $("atom-text-editor#pusht::shadow .line-number-#{newLineNumber}").addClass(@markerColour)
+        @clearMyMarkers()
+        @addMarker(newLineNumber, @markerColour)

     @editor.onDidChangeSelectionRange (event) =>
       rows = event.newBufferRange.getRows()
-      $("atom-text-editor#pusht::shadow .line-number").each (index, line) =>
-        $(line).removeClass(@markerColour)
+      @clearMyMarkers()
       _.each rows, (row) =>
-        $("atom-text-editor#pusht::shadow .line-number-#{row}").addClass(@markerColour)
-
+        @addMarker(row, @markerColour)
+
+  clearMyMarkers: ->
+    $("atom-text-editor#pusht::shadow .line-number").each (index, line) =>
+      $(line).removeClass(@markerColour)
+
+  addMarker: (line, colour) ->
+    $("atom-text-editor#pusht::shadow .line-number-#{line}").addClass(colour)

   shareCurrentFile: (buffer)->
     currentFile = buffer.getText()


remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/netguru/people.git/'


Update

Update

--- test/daemon/runner.coffee
+++ test/daemon/runner.coffee
@@ -1,6 +1,6 @@
 assert = require 'assert'
 sinon = require 'sinon'
-runner = require '../../src/daemon/runner'
+runner = require '../src/runner'

 describe 'runner', ->


Added test for UseUTF8

Added test for UseUTF8

error: pathspec 'test/rules/UseUTF8.coffee' did not match any file(s) known to git

--- test/rules/UseUTF8.coffee
+++ test/rules/UseUTF8.coffee
@@ -0,0 +1,21 @@
+expect = require('chai').expect
+rule = require "./../../src/rules/#{require('path').basename(__filename, '.coffee')}"
+
+describe 'UseUTF8', ->
+    it 'should catch non-UTF-8 charsets', ->
+        expect rule::validate """
+        meta(charset='nonUTF8')
+        """
+        .to.be.false
+
+    it 'should pass UTF-8 charsets', ->
+        expect rule::validate """
+        meta(charset='UTF-8')
+        """
+        .to.be.true
+
+    it 'should ignore other elements', ->
+        expect rule::validate """
+        div(charset='nonUTF8')
+        """
+        .to.be.true


Create coldfusion.coffee

Create coldfusion.coffee

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/dvingo/atom-beautify.git/'


Added test for getHostname()

Added test for getHostname()

error: pathspec 'test/helpers-test.coffee' did not match any file(s) known to git

--- test/helpers-test.coffee
+++ test/helpers-test.coffee
@@ -0,0 +1,23 @@
+vows = require 'vows'
+assert = require 'assert'
+helpers = require '../src/helpers'
+
+vows
+  .describe('Helpers')
+  .addBatch
+    'getHostname(http://google.com)':
+      topic: ->
+        helpers.getHostname 'http://google.com'
+
+      'returns "google.com"': (topic) ->
+        assert.equal topic, 'google.com'
+
+    'getHostname(http://blog.github.com)':
+      topic: ->
+        helpers.getHostname 'http://blog.github.com'
+
+      'returns "blog.github.com"': (topic) ->
+        assert.equal topic, 'blog.github.com'
+
+
+  .export(module)


add test

add test

error: pathspec 'test/hinoki-trace.coffee' did not match any file(s) known to git

--- test/hinoki-trace.coffee
+++ test/hinoki-trace.coffee
@@ -0,0 +1,79 @@
+Promise = require 'bluebird'
+hinoki = require 'hinoki'
+trace = require '../src/hinoki-trace'
+
+module.exports =
+
+  'no-trace': (test) ->
+    test.expect 1
+    c =
+      factories:
+        plus: ->
+          (a, b) -> a + b
+
+    c.factoryResolvers = []
+    c.factoryResolvers.push trace.newTracingResolver ['square'],
+      callback: ->
+        test.fail()
+
+    hinoki.get(c, 'plus').then (plus) ->
+      test.equals plus(1, 3), 4
+      test.done()
+
+  'single sync trace': (test) ->
+    test.expect 2
+    c =
+      factories:
+        plus: ->
+          (a, b) -> a + b
+
+    traces = []
+
+    c.factoryResolvers = []
+    c.factoryResolvers.push trace.newTracingResolver ['plus'],
+      callback: (x) ->
+        traces.push x
+
+    hinoki.get(c, 'plus').then (plus) ->
+      test.equals plus(1, 3), 4
+      test.deepEqual traces, [
+        {type: 'call', id: 'plus', traceId: 0, args: [1, 3]}
+        {type: 'return', id: 'plus', traceId: 0, value: 4}
+      ]
+      test.done()
+
+  'single async trace': (test) ->
+    test.expect 3
+
+    promises = []
+
+    c =
+      factories:
+        plus: ->
+          (a, b) ->
+            promise = Promise.delay(a + b, 10)
+            promises.push promise
+            return promise
+
+    traces = []
+
+    c.factoryResolvers = []
+    c.factoryResolvers.push trace.newTracingResolver ['plus'],
+      callback: (x) ->
+        traces.push x
+
+    hinoki.get(c, 'plus').then (plus) ->
+      promise = plus(1, 3)
+      test.deepEqual traces, [
+        {type: 'call', id: 'plus', traceId: 0, args: [1, 3]}
+        {type: 'promiseReturn', id: 'plus', traceId: 0, promise: promises[0]}
+      ]
+      promise.then (sum) ->
+        test.equals sum, 4
+        test.deepEqual traces, [
+          {type: 'call', id: 'plus', traceId: 0, args: [1, 3]}
+          {type: 'promiseReturn', id: 'plus', traceId: 0, promise: promises[0]}
+          {type: 'promiseResolve', id: 'plus', traceId: 0, value: 4}
+        ]
+
+        test.done()


domain: add signature annotations

domain: add signature annotations


example json content...

example json content...

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/damianb/crimson.git/'


Nuke the config between specs

Nuke the config between specs

--- spec/spec-helper.coffee
+++ spec/spec-helper.coffee
@@ -2,6 +2,7 @@
 $ = require 'jquery'
 _ = require 'underscore'
 Keymap = require 'keymap'
+Config = require 'config'
 Point = require 'point'
 Project = require 'project'
 Directory = require 'directory'
@@ -21,6 +22,7 @@
   window.resetTimeouts()

   # don't load or save user configuration
+  window.config = new Config()
   spyOn(config, 'load')
   spyOn(config, 'save')
   config.assignDefaults()


Added setGoalState

Added setGoalState

--- app/lib/world/GoalManager.coffee
+++ app/lib/world/GoalManager.coffee
@@ -212,6 +212,16 @@
         else
           state[progressObjectName][thang] = false

+  setGoalState: (goalID, status) ->
+    state = @goalStates[goalID]
+    state.status = status
+    if overallStatus = @checkOverallStatus true
+      matchedGoals = (_.find(@goals, {id: goalID}) for goalID, goalState of @goalStates when goalState.status is overallStatus)
+      mostEagerGoal = _.min matchedGoals, 'worldEndsAfter'
+      victory = overallStatus is "success"
+      tentative = overallStatus is "success"
+      @world.endWorld victory, mostEagerGoal.worldEndsAfter, tentative if mostEagerGoal isnt Infinity
+
   updateGoalState: (goalID, thangID, progressObjectName, frameNumber) ->
     # A thang has done something related to the goal!
     # Mark it down and update the goal state.


Define JasmineSugar.Arguments module

Define JasmineSugar.Arguments module

error: pathspec 'src/arguments.coffee' did not match any file(s) known to git

--- src/arguments.coffee
+++ src/arguments.coffee
@@ -0,0 +1,2 @@
+JasmineSugar.Arguments = ()->
+  this


main.coffee: do not store access_token as GitHubAccount property

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rremizov/github-notifier.git/'


Dynamic navbar.

Dynamic navbar.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/alpire/picoCTF-web.git/'


Add player class

Add player class

error: pathspec 'coffee/models/player.coffee' did not match any file(s) known to git

--- coffee/models/player.coffee
+++ coffee/models/player.coffee
@@ -0,0 +1,2 @@
+class Tetrus.Player
+


added button test

added button test

[#95231438]

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/netguru/review.git/'


updated comment

updated comment

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/UCSFMemoryAndAging/tabcat.git/'


Fix list scrolling

Fix list scrolling

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/nathan/lemma.git/'


Credentials: check flow for save operation steps pre-condition

--- client/new-stack-editor/lib/controllers/credentials.coffee
+++ client/new-stack-editor/lib/controllers/credentials.coffee
@@ -34,7 +34,20 @@
   getView: -> @listController.getView()

-  setData: (stackTemplate, internal = no) ->
+  check: (callback) ->
+
+    stackTemplate = @getData()
+    credentials = Object.keys(stackTemplate.credentials).filter (provider) ->
+      provider isnt 'custom'
+
+    if credentials.length is 0
+      @emit Events.WarnAboutMissingCredentials
+      callback { error: 'Missing Credentials' }
+    else
+      callback null
+
+
+  setData: (stackTemplate) ->

     super stackTemplate


integration test for paging

integration test for paging

error: pathspec 'test/paging.coffee' did not match any file(s) known to git

--- test/paging.coffee
+++ test/paging.coffee
@@ -0,0 +1,15 @@
+_     = require 'underscore'
+assert = require 'assert'
+async = require 'async'
+_.mixin require("#{__dirname}/../index").exports()
+
+describe 'paging with limit and skip', ->
+  it 'allows us to get a middle page', (done) ->
+    inp = [0..100]
+    LIMIT = 10
+    SKIP = 10
+    _(inp).stream().skip(SKIP).limit(LIMIT).run (err, results) ->
+      assert.ifError err
+      expected = [SKIP...SKIP+LIMIT]
+      assert.deepEqual results, expected
+      done()


'enabled' is also a valid item attribute, fixes #3880

--- src/menu-helpers.coffee
+++ src/menu-helpers.coffee
@@ -44,7 +44,7 @@
     label.replace(/\&/g, '')

 cloneMenuItem = (item) ->
-  item = _.pick(item, 'type', 'label', 'command', 'submenu', 'commandDetail')
+  item = _.pick(item, 'type', 'label', 'enabled', 'command', 'submenu', 'commandDetail')
   if item.submenu?
     item.submenu = item.submenu.map (submenuItem) -> cloneMenuItem(submenuItem)
   item


:penguin: Fix normalized menu item label.

--- src/menu-manager.coffee
+++ src/menu-manager.coffee
@@ -116,10 +116,10 @@
   normalizeLabel: (label) ->
     return undefined unless label?

-    if process.platform is 'win32'
+    if process.platform is 'darwin'
+      label
+    else
       label.replace(/\&/g, '')
-    else
-      label

   # Get an {Array} of {String} classes for the given element.
   classesForElement: (element) ->


useless code removed

useless code removed

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/evercam/evercam-dashboard.git/'


Client: Activity: Feed: Added renderCount method to ActivityLikeLink component

--- client/activity/lib/components/chatlistitem/activitylikelink.coffee
+++ client/activity/lib/components/chatlistitem/activitylikelink.coffee
@@ -10,6 +10,7 @@

   @defaultProps =
     tooltip                  : yes
+    renderCount              : no
     shouldSetTooltipPosition : no

@@ -45,6 +46,16 @@
       likeMessage @props.messageId

+  renderCount: ->
+
+    return null  unless @props.renderCount
+    { actorsCount } = @props.interactions.like
+
+    return null  unless actorsCount
+
+    {actorsCount}
+
+
   renderTooltipItems: (participant) ->

     { actorsPreview } = @props.interactions.like
@@ -71,6 +82,7 @@

       {@props.children}
+      {@renderCount()}
       {@renderTooltip()}


Landing: use confirmToken helper instead of location.href

--- client/landing/site.landing/coffee/team/tabs/teamusernametab.coffee
+++ client/landing/site.landing/coffee/team/tabs/teamusernametab.coffee
@@ -82,9 +82,7 @@
         success : (data) ->
           track 'succeeded to create a team'
           KD.utils.clearTeamData()
-          { protocol, host } = location
-          csrfToken          = encodeURIComponent Cookies.get '_csrf'
-          location.href      = "#{protocol}//#{slug}.#{host}/-/confirm?token=#{data.token}&_csrf=#{csrfToken}"
+          KD.utils.confirmToken data.token
         error : ({responseText}) =>
           if /TwoFactor/.test responseText
             track 'requires two-factor authentication'


Remove CLA #eng slack message

Remove CLA #eng slack message

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/VilkkuV/codecombat.git/'


removing encounter from patient to test against execjs

--- app/assets/javascripts/patient.coffee
+++ app/assets/javascripts/patient.coffee
@@ -1,7 +1,7 @@
 # =require core.coffee
 # =require medication.coffee
 # =require condition.coffee
-# =require encounter.coffee
+
 # =require procedure.coffee
 # =require result.coffee
 this.hQuery ||= {}


fix search

fix search

this should be fixed by using find on collection


weibo test

weibo test

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/YY030913/tp.git/'


more refactoring. should use objects for dynamic dispatch here


Start on some layer tests

Start on some layer tests

error: pathspec 'test/node/layers.coffee' did not match any file(s) known to git

--- test/node/layers.coffee
+++ test/node/layers.coffee
@@ -0,0 +1,31 @@
+# Make sure CamanJS loads without errors
+{Caman}   = require "../../dist/caman.full"
+{assert}  = require 'chai'
+{greyPath, rgbData}   = require '../ext/grey'
+
+describe "Layers", ->
+  it "can be created", (done) ->
+    Caman greyPath, ->
+      @newLayer ->
+        assert.isObject @c
+        assert.isObject @options
+        assert @canvas
+        assert.isNumber @layerID
+        assert.lengthOf @c.pixelData, @pixelData.length
+
+        done()
+
+  it "have the correct defaults", (done) ->
+    Caman greyPath, ->
+      @newLayer ->
+        assert.deepEqual @options,
+          blendingMode: 'normal'
+          opacity: 1.0
+
+        [r, g, b, a] = @pixelData
+        assert.equal r, 0
+        assert.equal g, 0
+        assert.equal b, 0
+        assert.equal a, 0
+
+        done()


:lipstick: Sort file types

:lipstick: Sort file types

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ANATAS/poso-dev-atom.git/'


Added highlight for std types in nested generics

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/pyfisch/atom-language-rust.git/'


minor change to the use of the jQuery object

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/longdistancevoter/votingrightsact.us.git/'


config: generate key if it does not exist on source

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/andrewjcasal/koding.git/'


:coffee: add gulpfile :construction:

:coffee: add gulpfile :construction:

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/naru0504/vccw-gulp.git/'


Issue #609. Slightly faster implementation of ||= and &&=

--- nodes.coffee
+++ nodes.coffee
@@ -1121,7 +1121,7 @@
     second = "(#{second})" if @second instanceof OpNode
     o.scope.find(first) if first.match(IDENTIFIER)
     return "#{first} = #{ ExistenceNode.compileTest(o, literal(firstVar))[0] } ? #{firstVar} : #{second}" if @operator is '?='
-    "#{first} = #{firstVar} #{ @operator.substr(0, 2) } #{second}"
+    "#{first} #{ @operator.substr(0, 2) } (#{firstVar} = #{second})"

   # If this is an existence operator, we delegate to `ExistenceNode.compileTest`
   # to give us the safe references for the variables.


Reapply the removed patch from bugfix_1183 in PR 2252.  Include a test
case to show it's required.

What's going on: inside of Coffee-generated closures, calling `super()`
is implicitly making use of `this` (or explicitly doing so if you look
at the output code), so we have to pass `this` through closures as if
`@` is being accessed within the closure.  So, just add one more
condition to the list in `Closure::literalThis`

--- nodes.coffee
+++ nodes.coffee
@@ -1931,7 +1931,8 @@

   literalThis: (node) ->
     (node instanceof Literal and node.value is 'this' and not node.asKey) or
-      (node instanceof Code and node.bound)
+      (node instanceof Code and node.bound) or
+      (node instanceof Call and node.isSuper)

 # Unfold a node's child if soak, then tuck the node under created `If`
 unfoldSoak = (o, parent, name) ->


added auth to relevant routes

added auth to relevant routes

--- routes.coffee
+++ routes.coffee
@@ -53,11 +53,13 @@
   config:
     handler: require("./controllers/userController").create
     payload: "parse"
+    auth:true
 ,
   method: "DELETE"
   path: "/user/{id}"
   config:
     handler: require("./controllers/userController").delete
+    auth:true
 ,
   #event
   method: "GET"
@@ -102,9 +104,11 @@
   path: "/event/{id}"
   config:
     handler: require("./controllers/eventController").update
+    auth:true
 ,
   method: "DELETE"
   path: "/event/{id}"
   config:
     handler: require("./controllers/eventController").delete
+    auth:true
 ]


De-f describe

De-f describe

--- spec/app/root-view-spec.coffee
+++ spec/app/root-view-spec.coffee
@@ -691,7 +691,7 @@
       expect(buffer2.isModified()).toBe(false)
       expect(fs.read(buffer2.getPath())).toBe("edited2")

-  fdescribe ".eachEditor(callback)", ->
+  describe ".eachEditor(callback)", ->
     beforeEach ->
       rootView.attachToDom()


Get base domain from KONFIG object

Get base domain from KONFIG object

Signed-off-by: Sonmez Kartal <d2d15c3d37396a5f2a09f8b42cf5f27d43a3fbde@koding.com>


SocialWorker: remove migrateOldAppStorage usage


product: initial commit; just boilerplate

error: pathspec 'workers/social/lib/social/models/product.coffee' did not match any file(s) known to git

--- workers/social/lib/social/models/product.coffee
+++ workers/social/lib/social/models/product.coffee
@@ -0,0 +1,4 @@
+{Module} = require 'jraphical'
+
+module.exports = class JProduct extends Module
+


So that's where that extra " came from

So that's where that extra " came from

--- app/frontend/scripts/templates.js.coffee
+++ app/frontend/scripts/templates.js.coffee
@@ -15,7 +15,7 @@

 templates.song = """

-
+

{{{artist_tag}}}

{{name}}

@@ -41,11 +41,11 @@

by {{{artist_tag}}}

from {{{album_tag}}}

-
-
+
+
   {{>star}}
   {{>download_song}}
-
+

   {{{art_tag}}}
@@ -53,7 +53,7 @@

 templates.star = """
   {{#starred}}
-    unstar it
+    unstar it
   {{/starred}}

   {{^starred}}


Fix rubric with staff grading

Fix rubric with staff grading

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bmedx/modulestore.git/'


JS bugfix

JS bugfix


Add AAC parser

Add AAC parser

error: pathspec 'aac.coffee' did not match any file(s) known to git

--- aac.coffee
+++ aac.coffee
@@ -0,0 +1,78 @@
+# AAC parser
+
+fs   = require 'fs'
+bits = require './bits'
+
+audioBuf = null
+audioSampleRate = null
+audioChannels = null
+
+api =
+  open: (file) ->
+    audioBuf = fs.readFileSync file  # up to 1GB
+
+  close: ->
+    audioBuf = null
+
+  hasMoreData: ->
+    return audioBuf? and (audioBuf.length > 0)
+
+  getSampleRate: ->
+    return audioSampleRate
+
+  getChannels: ->
+    return audioChannels
+
+  getNextADTSFrame: ->
+    if not audioBuf?
+      throw new Error "aac error: file is not opened yet"
+
+    if not api.hasMoreData()
+      return null
+
+    # An ADTS frame starts with a syncword (0xfff).
+    # But a raw data block may also contain 0xfff which is not
+    # a syncword. The length of a frame can be determined by
+    # aac_frame_length which is included in the ADTS variable header.
+    # However, an audio file may start in the middle of a raw data
+    # block. In that case, there is some difficulty in searching for
+    # a correct syncword. In real use cases, those data should be
+    # handled correctly, but we reject such data here for the
+    # sake of simplicity.
+    if (audioBuf[0] isnt 0xff) or (audioBuf[1] & 0xf0 isnt 0xf0)
+      throw new Error "malformed audio: data doesn't start with a syncword (0xfff)\n" +
+                      "try ffmpeg -i <input_file> -c:a copy output.aac"
+
+    if not audioSampleRate?
+      freq = bits.read_bits_uint audioBuf, 18, 4
+
+      # Get sample rate from sampling_frequency_index
+      audioSampleRate = switch freq
+        when 0x0 then 96000
+        when 0x1 then 88200
+        when 0x2 then 64000
+        when 0x3 then 48000
+        when 0x4 then 44100
+        when 0x5 then 32000
+        when 0x6 then 24000
+        when 0x7 then 22050
+        when 0x8 then 16000
+        when 0x9 then 12000
+        when 0xa then 11025
+        when 0xb then  8000
+        when 0xc then  7350
+        else
+          throw new Error "audio error: unknown sampling_frequency_index: #{freq}"
+
+    if not audioChannels?
+      audioChannels = bits.read_bits_uint audioBuf, 23, 3
+
+    aac_frame_length = bits.read_bits_uint audioBuf, 30, 13
+    adtsFrame = audioBuf[0...aac_frame_length]
+
+    # Truncate audio buffer
+    audioBuf = audioBuf[aac_frame_length..]
+
+    return adtsFrame
+
+module.exports = api


minor changes

minor changes

--- client/app/lib/components/sidebarstacksection/index.coffee
+++ client/app/lib/components/sidebarstacksection/index.coffee
@@ -92,13 +92,12 @@
     if @getStackUnreadCount()
       menuItems['Update'] = { callback }

-    managedVM = if @props.stack.get('title').indexOf('Managed VMs') > -1
-    then yes else no
+    managedVM = @props.stack.get('title').indexOf('Managed VMs') > -1

     if managedVM
-    then menuItems['VMs'] = { callback }
+      menuItems['VMs'] = { callback }
     else
-      ['Edit', 'Reinitialize', 'VMs', 'Destroy VMs'].forEach (name) =>
+      ['Edit', 'Reinitialize', 'VMs', 'Destroy VMs'].forEach (name) ->
         menuItems[name] = { callback }

     { top } = findDOMNode(this).getBoundingClientRect()


popularpost: refactor some frontend code

--- client/Social/Activity/views/messagepane.coffee
+++ client/Social/Activity/views/messagepane.coffee
@@ -41,6 +41,20 @@

     if typeConstant in ['group', 'topic']
       @on 'LazyLoadThresholdReached', @bound 'lazyLoad'
+
+    @on "ItemsArrived", (items)->
+      @getItemTimestampFn = getItemTimestampFn
+
+      # when we run out of posts in most liked list, we switch
+      # to getting most recent posts in DESC order
+      if @currentFilter is MOST_LIKED and items.length < ITEMS_COUNT
+        @setFilterOptions(MOST_RECENT)
+
+        # this is an edge case when we want to get from top of most
+        # recent posts even though the filter is MOST_RECENT
+        @getItemTimestampFn = ->
+
+        @populate()

     KD.singletons.windowController.addFocusListener @bound 'handleFocus'

@@ -337,15 +351,9 @@
     if type is 'post'
     then KD.utils.defer -> callback null, [data]
     else appManager.tell 'Activity', 'fetch', options, (err, items)=>
-      @getItemTimestampFn = getItemTimestampFn
-
-      # when we run out of posts in most liked list, we switch
-      # to getting most recent posts in DESC order
-      if @currentFilter is MOST_LIKED and items.length < ITEMS_COUNT
-        @currentFilter = MOST_RECENT
-
-        # set to empty fn so we get posts from start of most recent list
-        @getItemTimestampFn = ->
+      return callback err, items  if err
+
+      @emit "ItemsArrived", items

       callback err, items

@@ -356,7 +364,7 @@
     {appManager} = KD.singletons
     last         = @listController.getItemsOrdered().last

-    return  unless last
+    return @listController.hideLazyLoader()  unless last

     from            = @getItemTimestampFn(last)
     @skipItemCount += ITEMS_COUNT


Test/MyAccount change pause to waitforelement

--- client/test/lib/helpers/myaccounthelpers.coffee
+++ client/test/lib/helpers/myaccounthelpers.coffee
@@ -57,8 +57,7 @@
     newEmail = 'wrongemail@koding.com'
     browser
       .refresh()
-      .pause 2000
-      .waitForElementVisible   emailSelector, 20000
+      .waitForElementVisible   emailSelector, 30000
       .clearValue              emailSelector
       .setValue                emailSelector, newEmail + '\n'
       .click                   saveButtonSelector
@@ -75,8 +74,7 @@
     newEmail = 'wrongemail2@koding.com'
     browser
       .refresh()
-      .pause 3000
-      .waitForElementVisible   emailSelector, 20000
+      .waitForElementVisible   emailSelector, 30000
       .clearValue              emailSelector
       .setValue                emailSelector, newEmail + '\n'
       .click                   saveButtonSelector
@@ -99,7 +97,7 @@
     newPassword     = utils.getPassword()
     browser
       .refresh()
-      .pause 3000
+      .waitForElementVisible   emailSelector, 30000
       .scrollToElement '.HomeAppView--section.password'

     helpers.changePasswordHelper browser, newPassword, newPassword + 'test', null, notMatchingPasswords


tests: clear intervals following completion of assertions


injectme.coffee: Add CoffeeScript version.

error: pathspec 'examples/injectme.coffee' did not match any file(s) known to git

--- examples/injectme.coffee
+++ examples/injectme.coffee
@@ -0,0 +1,23 @@
+# Use 'page.loadJsFile()' to load the script itself in the Page context
+
+if phantom?
+  page = new WebPage()
+
+  # Route "console.log()" calls from within the Page context to the main
+  # Phantom context (i.e. current "this")
+  page.onConsoleMessage = (msg) -> console.log(msg)
+
+  page.onAlert = (msg) -> console.log(msg)
+
+  console.log "* Script running in the Phantom context."
+  console.log "* Script will 'inject' itself in a page..."
+  page.open "about:blank", (status) ->
+    if status is "success"
+      if page.injectJs("injectme.js")
+        console.log "... done injecting itself!"
+      else
+        console.log "... fail! Check the $PWD?!"
+    phantom.exit()
+else
+  alert "* Script running in the Page context."
+


updating discord.io part 2

updating discord.io part 2

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Mikuia/Mikuia.git/'


accidentally deleted an important space

accidentally deleted an important space

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/0xenvision/negotiator-inator.git/'


Add recursive images folder (DID NOT TEST)

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/C-Bouthoorn/Anthony-Server.git/'


Add requestId as a top-level attribute of an active task

--- SingularityUI/app/collections/TasksActive.coffee
+++ SingularityUI/app/collections/TasksActive.coffee
@@ -11,6 +11,7 @@
         _.each tasks, (task, i) =>
             task.JSONString = utils.stringJSON task
             task.id = task.taskId.id
+            task.requestId = task.taskRequest?.request.id
             task.name = task.mesosTask.name
             task.resources = @parseResources task
             task.memoryHuman = if task.resources?.memoryMb? then "#{ task.resources.memoryMb }Mb" else ''