Best JavaScript code snippet using playwright-internal
render.js
Source: render.js
1/**2 * Created by hn on 14-3-17.3 */4define( function ( require ) {5 var kity = require( "kity" ),6 Assembly = require( "kf" ).Assembly,7 DEFAULT_OPTIONS = {8 autoresize: false,9 fontsize: 50,10 padding: [ 20, 50 ]11 },12 RenderComponenet = kity.createClass( 'RenderComponent', {13 // å¼æ¥ç»ä»¶14 base: require( "base/component" ),15 constructor: function ( kfEditor, options ) {16 this.callBase();17 this.options = kity.Utils.extend( {}, DEFAULT_OPTIONS, options );18 this.kfEditor = kfEditor;19 this.assembly = null;20 this.formula = null;21 // æ¯å¦ç¦ç¨éå®ä½22 this.relDisabled = false;23 this.canvasZoom = 1;24 this.record = {25 select: {},26 cursor: {},27 // ç»å¸ä¿¡æ¯28 canvas: {}29 };30 this.initCanvas();31 this.initServices();32 this.initCommands();33 },34 initCanvas: function () {35 var canvasContainer = this.kfEditor.requestService( "ui.get.canvas.container" ),36 Formula = this.kfEditor.getFormulaClass();37 this.assembly = new Assembly( new Formula( canvasContainer, this.options ) );38 this.formula = this.assembly.formula;39 this.setCanvasToCenter();40 },41 setCanvasOffset: function ( offsetX, offsetY ) {42 var viewBox = this.formula.getViewBox();43 offsetY = offsetY !== undefined ? offsetY : -viewBox.height / 2;44 this.formula.setViewBox( offsetX, offsetY, viewBox.width, viewBox.height );45 },46 setCanvasToCenter: function () {47 var viewBox = this.formula.getViewBox();48 this.formula.setViewBox( -viewBox.width / 2, -viewBox.height / 2, viewBox.width, viewBox.height );49 },50 initServices: function () {51 this.kfEditor.registerService( "render.get.canvas", this, {52 getCanvas: this.getCanvas53 } );54 this.kfEditor.registerService( "render.get.content.size", this, {55 getContentSize: this.getContentSize56 } );57 this.kfEditor.registerService( "render.clear.canvas.transform", this, {58 clearCanvasOffset: this.clearCanvasTransform59 } );60 this.kfEditor.registerService( "render.set.canvas.offset", this, {61 setCanvasOffset: this.setCanvasOffset62 } );63 this.kfEditor.registerService( "render.set.canvas.to.center", this, {64 setCanvasToCenter: this.setCanvasToCenter65 } );66 this.kfEditor.registerService( "render.revert.canvas.transform", this, {67 revertCanvasTransform: this.revertCanvasTransform68 } );69 this.kfEditor.registerService( "render.relocation", this, {70 relocation: this.relocation71 } );72 this.kfEditor.registerService( "render.disable.relocation", this, {73 disableRelocation: this.disableRelocation74 } );75 this.kfEditor.registerService( "render.enable.relocation", this, {76 enableRelocation: this.enableRelocation77 } );78 this.kfEditor.registerService( "render.select.group.content", this, {79 selectGroupContent: this.selectGroupContent80 } );81 this.kfEditor.registerService( "render.select.group", this, {82 selectGroup: this.selectGroup83 } );84 this.kfEditor.registerService( "render.select.group.all", this, {85 selectAllGroup: this.selectAllGroup86 } );87 this.kfEditor.registerService( "render.tint.current.cursor", this, {88 tintCurrentGroup: this.tintCurrentGroup89 } );90 this.kfEditor.registerService( "render.select.current.cursor", this, {91 selectCurrentCursor: this.selectCurrentCursor92 } );93 this.kfEditor.registerService( "render.reselect", this, {94 reselect: this.reselect95 } );96 this.kfEditor.registerService( "render.clear.select", this, {97 clearSelect: this.clearSelect98 } );99 this.kfEditor.registerService( "render.set.canvas.zoom", this, {100 setCanvasZoom: this.setCanvasZoom101 } );102 this.kfEditor.registerService( "render.get.canvas.zoom", this, {103 getCanvasZoom: this.getCanvasZoom104 } );105 this.kfEditor.registerService( "render.get.paper.offset", this, {106 getPaperOffset: this.getPaperOffset107 } );108 this.kfEditor.registerService( "render.draw", this, {109 render: this.render110 } );111 this.kfEditor.registerService( "render.insert.string", this, {112 insertString: this.insertString113 } );114 this.kfEditor.registerService( "render.insert.group", this, {115 insertGroup: this.insertGroup116 } );117 this.kfEditor.registerService( "render.get.paper", this, {118 getPaper: this.getPaper119 } );120 },121 initCommands: function () {122 this.kfEditor.registerCommand( "render", this, function ( str ) {123 this.render( str );124 this.kfEditor.requestService( "ui.update.canvas.view" );125 } );126 this.kfEditor.registerCommand( "getPaper", this, this.getPaper );127 },128 relocation: function () {129 if ( !this.relDisabled ) {130 this.relocationToCenter();131 } else {132 this.relocationToLeft();133 }134 },135 relocationToCenter: function () {136 var formulaSpace = this.formula.container.getRenderBox();137 this.formula.container.setTranslate( -formulaSpace.width / 2, -formulaSpace.height / 2);138 this.setCanvasToCenter();139 },140 relocationToLeft: function () {141 var formulaSpace = this.formula.container.getRenderBox();142 this.formula.container.setTranslate( 0, -formulaSpace.height / 2 );143 this.setCanvasOffset( 0 );144 },145 selectGroup: function ( groupId ) {146 var groupObject = this.kfEditor.requestService( "syntax.get.group.object", groupId );147 this.clearSelect();148 if ( groupObject.node.getAttribute( "data-root" ) ) {149 // æ ¹èç¹ä¸çè²150 return;151 }152 this.record.select.lastSelect = groupObject;153 groupObject.select();154 },155 selectGroupContent: function ( group ) {156 // å¤çå ä½ç¬¦157 if ( group.groupObj.getAttribute( "data-placeholder" ) !== null ) {158 group = {159 id: group.content[ 0 ].id160 };161 }162 var groupObject = this.kfEditor.requestService( "syntax.get.group.object", group.id );163 this.clearSelect();164 this.record.select.lastSelect = groupObject;165 if ( groupObject.node.getAttribute( "data-root" ) ) {166 // æ ¹èç¹ä¸çè²167 return;168 }169 groupObject.select();170 },171 selectAllGroup: function ( group ) {172 // å¤çå ä½ç¬¦173 if ( group.groupObj.getAttribute( "data-placeholder" ) !== null ) {174 group = {175 id: group.content[ 0 ].id176 };177 }178 var groupObject = this.kfEditor.requestService( "syntax.get.group.object", group.id );179 this.clearSelect();180 this.record.select.lastSelect = groupObject;181 groupObject.selectAll();182 },183 /**184 * æ ¹æ®å½åå
æ ä¿¡æ¯ç»å¶éåº185 */186 selectCurrentCursor: function () {187 var cursorInfo = this.kfEditor.requestService( "syntax.get.record.cursor" ),188 group = this.kfEditor.requestService( "syntax.get.group.object", cursorInfo.groupId ),189 box = null,190 offset = -1,191 width = 0,192 startIndex = Math.min( cursorInfo.startOffset, cursorInfo.endOffset ),193 endIndex = Math.max( cursorInfo.startOffset, cursorInfo.endOffset );194 this.clearSelect();195 // æ´æ°è®°å½196 this.record.select.lastSelect = group;197 for ( var i = startIndex, len = endIndex; i < len; i++ ) {198 box = group.getOperand( i ).getRenderBox( group );199 if ( offset == -1 ) {200 offset = box.x;201 }202 width += box.width;203 }204 group.setBoxWidth( width );205 group.selectAll();206 group.getBox().setTranslate( offset, 0 );207 },208 /**209 * æ ¹æ®å½åçå
æ ä¿¡æ¯ï¼å¯¹å½åå
æ æå¨ç容å¨è¿è¡çè²210 */211 tintCurrentGroup: function () {212 var groupId = this.kfEditor.requestService( "syntax.get.record.cursor" ).groupId,213 groupObject = this.kfEditor.requestService( "syntax.get.group.object", groupId ),214 isPlaceholder = this.kfEditor.requestService( "syntax.is.placeholder.node", groupId );215 this.clearSelect();216 if ( groupObject.node.getAttribute( "data-root" ) ) {217 // æ ¹èç¹ä¸çè²218 return;219 }220 // å ä½ç¬¦çè²221 if ( isPlaceholder ) {222 // æ¿æ¢å ä½ç¬¦å
裹ç»ä¸ºå ä½ç¬¦æ¬èº«223 groupObject = this.kfEditor.requestService( "syntax.get.group.object", groupObject.operands[ 0 ].node.id );224 }225 this.record.select.lastSelect = groupObject;226 groupObject.select();227 },228 reselect: function () {229 var cursorInfo = this.kfEditor.requestService( "syntax.get.record.cursor" ),230 groupObject = null;231 groupObject = this.kfEditor.requestService( "syntax.get.group.object", cursorInfo.groupId );232 this.clearSelect();233 this.record.select.lastSelect = groupObject;234 if ( groupObject.node.getAttribute( "data-root" ) ) {235 // æ ¹èç¹ä¸çè²236 return;237 }238 groupObject.select();239 },240 clearSelect: function () {241 var box = null,242 currentSelect = this.record.select.lastSelect;243 if ( !currentSelect || !currentSelect.node.ownerSVGElement ) {244 return;245 }246 currentSelect.unselect();247 box = currentSelect.getRenderBox( currentSelect );248 currentSelect.setBoxWidth( box.width );249 currentSelect.getBox().setTranslate( 0, 0 );250 },251 getPaper: function () {252 return this.formula;253 },254 render: function ( latexStr ) {255 var parsedTree = this.kfEditor.requestService( "parser.parse", latexStr, true ),256 objTree = this.assembly.regenerateBy( parsedTree );257 // æ´æ°è¯æ³æ¨¡åæç»´æ¤çæ 258 this.kfEditor.requestService( "syntax.update.objtree", objTree );259 },260 enableRelocation: function () {261 this.relDisabled = false;262 },263 disableRelocation: function () {264 this.relDisabled = true;265 },266 setCanvasZoom: function ( zoom ) {267 var viewPort = this.formula.getViewPort();268 this.canvasZoom = zoom;269 viewPort.zoom = zoom;270 this.formula.setViewPort( viewPort );271 },272 getCanvas: function () {273 return this.formula;274 },275 getContentSize: function () {276 return this.formula.container.getRenderBox();277 },278 /**279 * æ¸
é¤ç¼è¾å¨éå
容çå移280 */281 clearCanvasTransform: function () {282 var canvasInfo = this.record.canvas;283 canvasInfo.viewBox = this.formula.getViewBox();284 canvasInfo.contentOffset = this.formula.container.getTranslate();285 this.setCanvasToCenter();286 this.formula.node.removeAttribute( "viewBox" );287 this.formula.container.setTranslate( 0, 0 );288 },289 /**290 * æ¢å¤è¢«clearCanvasTransformæ¸
é¤çåç§»ï¼ è¯¥æ¹æ³ä»
é对ä¸ä¸æ¬¡æ¸
é¤ææï¼291 * ä¸è¯¥æ¹æ³åºè¯¥åªæå¨è°ç¨clearCanvasTransformåæå¯ä»¥è°ç¨è¯¥æ¹æ³ï¼å¹¶ä¸ä¸¤è
ä¹é´åºè¯¥é
对åºç°292 * @returns {boolean}293 */294 revertCanvasTransform: function () {295 var canvasInfo = this.record.canvas,296 viewBox = canvasInfo.viewBox;297 if ( !viewBox ) {298 return false;299 }300 this.formula.setViewBox( viewBox.x, viewBox.y, viewBox.width, viewBox.height );301 this.formula.container.setTranslate( canvasInfo.contentOffset );302 canvasInfo.viewBox = null;303 canvasInfo.contentOffset = null;304 },305 getCanvasZoom: function () {306 return this.canvasZoom;307 }308 } );309 return RenderComponenet;...
selection.js
Source: selection.js
1/*!2 * å
æ éåºç»ä»¶3 */4define( function ( require, exports, module ) {5 var kity = require( "kity" ),6 kfUtils = require( "base/utils" ),7 // é¼ æ 移å¨ä¸´çè·ç¦»8 MAX_DISTANCE = 10;9 return kity.createClass( "SelectionComponent", {10 constructor: function ( parentComponent, kfEditor ) {11 this.parentComponent = parentComponent;12 this.kfEditor = kfEditor;13 this.isDrag = false;14 this.isMousedown = false;15 this.startPoint = {16 x: -1,17 y: -118 };19 // èµ·å§ä½ç½®æ¯å ä½ç¬¦20 this.startGroupIsPlaceholder = false;21 this.startGroup = {};22 this.initServices();23 this.initEvent();24 },25 initServices: function () {26 this.kfEditor.registerService( "control.select.all", this, {27 selectAll: this.selectAll28 } );29 },30 initEvent: function () {31 var eventServiceObject = this.kfEditor.request( "ui.canvas.container.event" ),32 _self = this;33 /* éåºææ½ start */34 eventServiceObject.on( "mousedown", function ( e ) {35 e.preventDefault();36 // åå¨æ ¹å ä½ç¬¦ï¼ ç¦æ¢æå¨37 if ( _self.kfEditor.requestService( "syntax.has.root.placeholder" ) ) {38 return false;39 }40 _self.isMousedown = true;41 _self.updateStartPoint( e.clientX, e.clientY );42 _self.updateStartGroup();43 } );44 eventServiceObject.on( "mouseup", function ( e ) {45 e.preventDefault();46 _self.stopUpdateSelection();47 } );48 eventServiceObject.on( "mousemove", function ( e ) {49 e.preventDefault();50 if ( !_self.isDrag ) {51 if ( _self.isMousedown ) {52 // 移å¨çè·ç¦»è¾¾å°ä¸´çæ¡ä»¶53 if ( MAX_DISTANCE < _self.getDistance( e.clientX, e.clientY ) ) {54 _self.kfEditor.requestService( "control.cursor.hide" );55 _self.startUpdateSelection();56 }57 }58 } else {59 if ( e.which !== 1 ) {60 _self.stopUpdateSelection();61 return;62 }63 _self.updateSelection( e.target, e.clientX, e.clientY );64 }65 } );66 /* éåºææ½ end */67 /* åå»éåº start */68 eventServiceObject.on( "dblclick", function ( e ) {69 _self.updateSelectionByTarget( e.target );70 } );71 /* åå»éåº end */72 },73 getDistance: function ( x, y ) {74 var distanceX = Math.abs( x - this.startPoint.x ),75 distanceY = Math.abs( y - this.startPoint.y );76 return Math.max( distanceX, distanceY );77 },78 updateStartPoint: function ( x, y ) {79 this.startPoint.x = x;80 this.startPoint.y = y;81 },82 updateStartGroup: function () {83 var cursorInfo = this.kfEditor.requestService( "syntax.get.record.cursor" );84 this.startGroupIsPlaceholder = this.kfEditor.requestService( "syntax.is.select.placeholder" );85 this.startGroup = {86 groupInfo: this.kfEditor.requestService( "syntax.get.group.content", cursorInfo.groupId ),87 offset: cursorInfo.startOffset88 };89 },90 startUpdateSelection: function () {91 this.isDrag = true;92 this.isMousedown = false;93 this.clearSelection();94 },95 stopUpdateSelection: function () {96 this.isDrag = false;97 this.isMousedown = false;98 this.kfEditor.requestService( "control.update.input" );99 },100 clearSelection: function () {101 this.kfEditor.requestService( "render.clear.select" );102 },103 updateSelection: function ( target, x, y ) {104 // 移å¨æ¹åï¼ true为å³ï¼ false为左105 var dir = x > this.startPoint.x,106 cursorInfo = {},107 communityGroupInfo = null,108 inRightArea = false,109 startGroupInfo = this.startGroup,110 currentGroupNode = null,111 currentGroupInfo = this.getGroupInof( x, target );112 if ( currentGroupInfo.groupInfo.id === startGroupInfo.groupInfo.id ) {113 cursorInfo = {114 groupId: currentGroupInfo.groupInfo.id,115 startOffset: startGroupInfo.offset,116 endOffset: currentGroupInfo.offset117 };118 // å¦æèµ·å§ç¹æ¯å ä½ç¬¦ï¼ è¦æ ¹æ®ç§»å¨æ¹åä¿®æ£å移119 if ( this.startGroupIsPlaceholder ) {120 // 左移修æ£121 if ( !dir ) {122 cursorInfo.startOffset += 1;123 // å³ç§»ä¿®æ£124 } else if ( cursorInfo.startOffset === cursorInfo.endOffset ) {125 cursorInfo.endOffset += 1;126 }127 }128 } else {129 // åå¨å
å«å
³ç³»130 if ( kfUtils.contains( startGroupInfo.groupInfo.groupObj, currentGroupInfo.groupInfo.groupObj ) ) {131 cursorInfo = {132 groupId: startGroupInfo.groupInfo.id,133 startOffset: startGroupInfo.offset,134 endOffset: this.getIndex( startGroupInfo.groupInfo.groupObj, target, x )135 };136 } else if ( kfUtils.contains( currentGroupInfo.groupInfo.groupObj, startGroupInfo.groupInfo.groupObj ) ) {137 cursorInfo = {138 groupId: currentGroupInfo.groupInfo.id,139 startOffset: this.kfEditor.requestService( "position.get.index", currentGroupInfo.groupInfo.groupObj, startGroupInfo.groupInfo.groupObj ),140 endOffset: currentGroupInfo.offset141 };142 // å左移å¨è¦ä¿®æ£å¼å§å移143 if ( !dir ) {144 cursorInfo.startOffset += 1;145 }146 // é½ä¸åå¨å
å«å
³ç³»147 } else {148 // è·åå
Œ
±å®¹å¨149 communityGroupInfo = this.getCommunityGroup( startGroupInfo.groupInfo, currentGroupInfo.groupInfo );150 // ä¿®æ£å移ç¸åæ¶çæ
åµï¼ æ¯å¦å¨åæ°ä¸éä¸æ¶151 if ( communityGroupInfo.startOffset === communityGroupInfo.endOffset ) {152 communityGroupInfo.endOffset += 1;153 // æ ¹æ®ææ½æ¹åä¿®æ£åèªçå移154 } else {155 // å½åå
æ 移å¨æå¨çç»å
ç´ èç¹156 currentGroupNode = communityGroupInfo.group.content[ communityGroupInfo.endOffset ];157 inRightArea = this.kfEditor.requestService( "position.get.area", currentGroupNode, x );158 // å½å移å¨å°å³åºåï¼ åæ´æ°ç»æå移159 if ( inRightArea ) {160 communityGroupInfo.endOffset += 1;161 }162 // 左移å¨æ¶ï¼ ä¿®æ£èµ·å§å移163 if ( !dir ) {164 communityGroupInfo.startOffset += 1;165 }166 }167 cursorInfo = {168 groupId: communityGroupInfo.group.id,169 startOffset: communityGroupInfo.startOffset,170 endOffset: communityGroupInfo.endOffset171 };172 }173 }174 // æ´æ°å
æ ä¿¡æ¯175 this.kfEditor.requestService( "syntax.update.record.cursor", cursorInfo.groupId, cursorInfo.startOffset, cursorInfo.endOffset );176 // ä»
éæ°éä¸å°±å¯ä»¥ï¼ä¸ç¨æ´æ°è¾å
¥æ¡å
容177 this.kfEditor.requestService( "control.reselect" );178 },179 updateSelectionByTarget: function ( target ) {180 var parentGroupInfo = this.kfEditor.requestService( "position.get.parent.group", target ),181 containerInfo = null,182 cursorInfo = {};183 if ( parentGroupInfo === null ) {184 return;185 }186 // å¦ææ¯æ ¹èç¹ï¼ åç´æ¥éä¸å
¶å
容187 if ( this.kfEditor.requestService( "syntax.is.root.node", parentGroupInfo.id ) ) {188 this.selectAll();189 return;190 // å¦åï¼ä»
éä¸è¯¥ç»191 } else {192 // å½åç»å¯ä»¥æ¯å®¹å¨ï¼ åéä¸è¯¥å®¹å¨çå
容193 if ( !this.kfEditor.requestService( "syntax.is.virtual.node", parentGroupInfo.id ) ) {194 cursorInfo = {195 groupId: parentGroupInfo.id,196 startOffset: 0,197 endOffset: parentGroupInfo.content.length198 };199 // å¦å ç´æ¥éä¸è¯¥ç»çææå
容200 } else {201 // è·åå
å«ç¶ç»ç容å¨202 containerInfo = this.kfEditor.requestService( "position.get.group.info", parentGroupInfo.groupObj );203 cursorInfo = {204 groupId: containerInfo.group.id,205 startOffset: containerInfo.index,206 endOffset: containerInfo.index + 1207 };208 }209 }210 this.kfEditor.requestService( "syntax.update.record.cursor", cursorInfo );211 this.kfEditor.requestService( "control.reselect" );212 this.kfEditor.requestService( "control.update.input" );213 },214 selectAll: function () {215 var rootGroupInfo = this.kfEditor.requestService( "syntax.get.root.group.info" );216 var cursorInfo= {217 groupId: rootGroupInfo.id,218 startOffset: 0,219 endOffset: rootGroupInfo.content.length220 };221 this.kfEditor.requestService( "syntax.update.record.cursor", cursorInfo );222 this.kfEditor.requestService( "control.reselect" );223 this.kfEditor.requestService( "control.update.input" );224 },225 getGroupInof: function ( offset, target ) {226 var groupInfo = this.kfEditor.requestService( "position.get.group", target );227 if ( groupInfo === null ) {228 groupInfo = this.kfEditor.requestService( "syntax.get.root.group.info" );229 }230 var index = this.kfEditor.requestService( "position.get.location.info", offset, groupInfo );231 return {232 groupInfo: groupInfo,233 offset: index234 };235 },236 getIndex: function ( groupNode, targetNode, offset ) {237 var index = this.kfEditor.requestService( "position.get.index", groupNode, targetNode ),238 groupInfo = this.kfEditor.requestService( "syntax.get.group.content", groupNode.id ),239 targetWrapNode = groupInfo.content[ index ],240 targetRect = kfUtils.getRect( targetWrapNode );241 if ( ( targetRect.left + targetRect.width / 2 ) < offset ) {242 index += 1;243 }244 return index;245 },246 /**247 * æ ¹æ®ç»å®ç两个ç»ä¿¡æ¯ï¼ è·åå
¶æå¨çå
Œ
±å®¹å¨åå
¶åèªçå移248 * @param startGroupInfo ç»ä¿¡æ¯249 * @param endGroupInfo å¦ä¸ä¸ªç»ä¿¡æ¯250 */251 getCommunityGroup: function ( startGroupInfo, endGroupInfo ) {252 var bigBoundingGroup = null,253 targetGroup = startGroupInfo.groupObj,254 groupNode = null;255 while ( bigBoundingGroup = this.kfEditor.requestService( "position.get.group.info", targetGroup ) ) {256 targetGroup = bigBoundingGroup.group.groupObj;257 if ( kfUtils.contains( bigBoundingGroup.group.groupObj, endGroupInfo.groupObj ) ) {258 break;259 }260 }261 groupNode = bigBoundingGroup.group.groupObj;262 return {263 group: bigBoundingGroup.group,264 startOffset: bigBoundingGroup.index,265 endOffset: this.kfEditor.requestService( "position.get.index", groupNode, endGroupInfo.groupObj )266 };267 }268 } );...
Service.js
Source: Service.js
1/**2 * The mock membership service object.3 */4Ext.define("Core.service.membership.mock.Service", {5 extend: "FlowMVC.mvc.service.mock.AbstractServiceMock",6 inject: [7 "logger"8 ],9 /**10 * The mock service call.11 */12 getMembershipSlide: function() {13 this.logger.debug("getMembershipSlide");14 var response = {15 success: true,16 membershipSlide: [17 { "kp_MembershipID": 1, "kf_PersonID": 1, "kf_OrganisationID": 1 },18 { "kp_MembershipID": 2, "kf_PersonID": 2, "kf_OrganisationID": 2 },19 { "kp_MembershipID": 3, "kf_PersonID": 3, "kf_OrganisationID": 3 },20 { "kp_MembershipID": 4, "kf_PersonID": 4, "kf_OrganisationID": 4 },21 { "kp_MembershipID": 5, "kf_PersonID": 5, "kf_OrganisationID": 5 },22 { "kp_MembershipID": 6, "kf_PersonID": 6, "kf_OrganisationID": 6 },23 { "kp_MembershipID": 7, "kf_PersonID": 7, "kf_OrganisationID": 7 },24 { "kp_MembershipID": 8, "kf_PersonID": 8, "kf_OrganisationID": 8 },25 { "kp_MembershipID": 9, "kf_PersonID": 9, "kf_OrganisationID": 9 },26 { "kp_MembershipID": 10, "kf_PersonID": 10, "kf_OrganisationID": 10 },27 { "kp_MembershipID": 11, "kf_PersonID": 11, "kf_OrganisationID": 11 },28 { "kp_MembershipID": 12, "kf_PersonID": 12, "kf_OrganisationID": 12 },29 { "kp_MembershipID": 13, "kf_PersonID": 13, "kf_OrganisationID": 13 },30 { "kp_MembershipID": 14, "kf_PersonID": 14, "kf_OrganisationID": 14 },31 { "kp_MembershipID": 15, "kf_PersonID": 15, "kf_OrganisationID": 15 },32 { "kp_MembershipID": 16, "kf_PersonID": 16, "kf_OrganisationID": 16 },33 { "kp_MembershipID": 17, "kf_PersonID": 17, "kf_OrganisationID": 17 },34 { "kp_MembershipID": 18, "kf_PersonID": 18, "kf_OrganisationID": 18 },35 { "kp_MembershipID": 19, "kf_PersonID": 19, "kf_OrganisationID": 19 },36 { "kp_MembershipID": 20, "kf_PersonID": 20, "kf_OrganisationID": 20 },37 { "kp_MembershipID": 21, "kf_PersonID": 21, "kf_OrganisationID": 21 },38 { "kp_MembershipID": 22, "kf_PersonID": 22, "kf_OrganisationID": 22 },39 { "kp_MembershipID": 23, "kf_PersonID": 23, "kf_OrganisationID": 23 },40 { "kp_MembershipID": 24, "kf_PersonID": 24, "kf_OrganisationID": 24 },41 { "kp_MembershipID": 25, "kf_PersonID": 25, "kf_OrganisationID": 25 },42 { "kp_MembershipID": 26, "kf_PersonID": 26, "kf_OrganisationID": 26 }43 ]44 };45 return this.delayedSuccess(response);46 },47 48 /**49 * The mock service call.50 */51 getMembershipList: function() {52 this.logger.debug("getMembershipList");53 var response = {54 success: true,55 membershipList: [56 { "kp_MembershipID": 1, "kf_PersonID": 1, "kf_OrganisationID": 1 },57 { "kp_MembershipID": 2, "kf_PersonID": 2, "kf_OrganisationID": 2 },58 { "kp_MembershipID": 3, "kf_PersonID": 3, "kf_OrganisationID": 3 },59 { "kp_MembershipID": 4, "kf_PersonID": 4, "kf_OrganisationID": 4 },60 { "kp_MembershipID": 5, "kf_PersonID": 5, "kf_OrganisationID": 5 },61 { "kp_MembershipID": 6, "kf_PersonID": 6, "kf_OrganisationID": 6 },62 { "kp_MembershipID": 7, "kf_PersonID": 7, "kf_OrganisationID": 7 },63 { "kp_MembershipID": 8, "kf_PersonID": 8, "kf_OrganisationID": 8 },64 { "kp_MembershipID": 9, "kf_PersonID": 9, "kf_OrganisationID": 9 },65 { "kp_MembershipID": 10, "kf_PersonID": 10, "kf_OrganisationID": 10 },66 { "kp_MembershipID": 11, "kf_PersonID": 11, "kf_OrganisationID": 11 },67 { "kp_MembershipID": 12, "kf_PersonID": 12, "kf_OrganisationID": 12 },68 { "kp_MembershipID": 13, "kf_PersonID": 13, "kf_OrganisationID": 13 },69 { "kp_MembershipID": 14, "kf_PersonID": 14, "kf_OrganisationID": 14 },70 { "kp_MembershipID": 15, "kf_PersonID": 15, "kf_OrganisationID": 15 },71 { "kp_MembershipID": 16, "kf_PersonID": 16, "kf_OrganisationID": 16 },72 { "kp_MembershipID": 17, "kf_PersonID": 17, "kf_OrganisationID": 17 },73 { "kp_MembershipID": 18, "kf_PersonID": 18, "kf_OrganisationID": 18 },74 { "kp_MembershipID": 19, "kf_PersonID": 19, "kf_OrganisationID": 19 },75 { "kp_MembershipID": 20, "kf_PersonID": 20, "kf_OrganisationID": 20 },76 { "kp_MembershipID": 21, "kf_PersonID": 21, "kf_OrganisationID": 21 },77 { "kp_MembershipID": 22, "kf_PersonID": 22, "kf_OrganisationID": 22 },78 { "kp_MembershipID": 23, "kf_PersonID": 23, "kf_OrganisationID": 23 },79 { "kp_MembershipID": 24, "kf_PersonID": 24, "kf_OrganisationID": 24 },80 { "kp_MembershipID": 25, "kf_PersonID": 25, "kf_OrganisationID": 25 },81 { "kp_MembershipID": 26, "kf_PersonID": 26, "kf_OrganisationID": 26 }82 ]83 };84 return this.delayedSuccess(response);85 },86 87 /**88 * The mock service call.89 */90 getMembershipTile: function() {91 this.logger.debug("getMembershipTile");92 var response = {93 success: true,94 membershipTile: [95 { "kp_MembershipID": 1, "kf_PersonID": 1, "kf_OrganisationID": 1 },96 { "kp_MembershipID": 2, "kf_PersonID": 2, "kf_OrganisationID": 2 },97 { "kp_MembershipID": 3, "kf_PersonID": 3, "kf_OrganisationID": 3 },98 { "kp_MembershipID": 4, "kf_PersonID": 4, "kf_OrganisationID": 4 },99 { "kp_MembershipID": 5, "kf_PersonID": 5, "kf_OrganisationID": 5 },100 { "kp_MembershipID": 6, "kf_PersonID": 6, "kf_OrganisationID": 6 },101 { "kp_MembershipID": 7, "kf_PersonID": 7, "kf_OrganisationID": 7 },102 { "kp_MembershipID": 8, "kf_PersonID": 8, "kf_OrganisationID": 8 },103 { "kp_MembershipID": 9, "kf_PersonID": 9, "kf_OrganisationID": 9 },104 { "kp_MembershipID": 10, "kf_PersonID": 10, "kf_OrganisationID": 10 },105 { "kp_MembershipID": 11, "kf_PersonID": 11, "kf_OrganisationID": 11 },106 { "kp_MembershipID": 12, "kf_PersonID": 12, "kf_OrganisationID": 12 },107 { "kp_MembershipID": 13, "kf_PersonID": 13, "kf_OrganisationID": 13 },108 { "kp_MembershipID": 14, "kf_PersonID": 14, "kf_OrganisationID": 14 },109 { "kp_MembershipID": 15, "kf_PersonID": 15, "kf_OrganisationID": 15 },110 { "kp_MembershipID": 16, "kf_PersonID": 16, "kf_OrganisationID": 16 },111 { "kp_MembershipID": 17, "kf_PersonID": 17, "kf_OrganisationID": 17 },112 { "kp_MembershipID": 18, "kf_PersonID": 18, "kf_OrganisationID": 18 },113 { "kp_MembershipID": 19, "kf_PersonID": 19, "kf_OrganisationID": 19 },114 { "kp_MembershipID": 20, "kf_PersonID": 20, "kf_OrganisationID": 20 },115 { "kp_MembershipID": 21, "kf_PersonID": 21, "kf_OrganisationID": 21 },116 { "kp_MembershipID": 22, "kf_PersonID": 22, "kf_OrganisationID": 22 },117 { "kp_MembershipID": 23, "kf_PersonID": 23, "kf_OrganisationID": 23 },118 { "kp_MembershipID": 24, "kf_PersonID": 24, "kf_OrganisationID": 24 },119 { "kp_MembershipID": 25, "kf_PersonID": 25, "kf_OrganisationID": 25 },120 { "kp_MembershipID": 26, "kf_PersonID": 26, "kf_OrganisationID": 26 }121 ]122 };123 return this.delayedSuccess(response);124 },125 126 /**127 * The mock service call.128 */129 createMembership: function(membership) {130 this.logger.debug("createMembership");131 var response = {132 success: true,133 membership: {134 kp_MembershipID: this.getRandomInt(1000, 99999),135 kf_PersonID: membership.kf_PersonID,136 kf_OrganisationID: membership.kf_OrganisationID 137 }138 };139 response = Ext.create("Core.model.membership.Model", response.membership);140 return this.delayedSuccess(response);141 },142 /**143 * The mock service call.144 */145 updateMembership: function(membership) {146 this.logger.debug("updateMembership: kp_MembershipID = ", membership.kp_MembershipID);147 var response = {148 success: true,149 membership: {150 kp_MembershipID: membership.kp_MembershipID,151 kf_PersonID: membership.kf_PersonID,152 kf_OrganisationID: membership.kf_OrganisationID 153 }154 };155 response = Ext.create("Core.model.membership.Model", response.membership);156 return this.delayedSuccess(response);157 },158 /**159 * The mock service call.160 */161 deleteMembership: function(membership) {162 this.logger.debug("deleteMembership: kp_MembershipID = ", membership.kp_MembershipID);163 var response = {164 success: true,165 membership: {166 kp_MembershipID: membership.kp_MembershipID,167 kf_PersonID: membership.kf_PersonID,168 kf_OrganisationID: membership.kf_OrganisationID 169 }170 };171 response = Ext.create("Core.model.membership.Model", response.membership);172 return this.delayedSuccess(response);173 }, 174 /**175 * The mock service call.176 */177 readMemberships: function() {178 this.logger.debug("readMemberships");179 var response = {180 success: true,181 memberships: [182 { "kp_MembershipID": 1, "kf_PersonID": 1, "kf_OrganisationID": 1 },183 { "kp_MembershipID": 2, "kf_PersonID": 2, "kf_OrganisationID": 2 },184 { "kp_MembershipID": 3, "kf_PersonID": 3, "kf_OrganisationID": 3 },185 { "kp_MembershipID": 4, "kf_PersonID": 4, "kf_OrganisationID": 4 },186 { "kp_MembershipID": 5, "kf_PersonID": 5, "kf_OrganisationID": 5 },187 { "kp_MembershipID": 6, "kf_PersonID": 6, "kf_OrganisationID": 6 },188 { "kp_MembershipID": 7, "kf_PersonID": 7, "kf_OrganisationID": 7 },189 { "kp_MembershipID": 8, "kf_PersonID": 8, "kf_OrganisationID": 8 },190 { "kp_MembershipID": 9, "kf_PersonID": 9, "kf_OrganisationID": 9 },191 { "kp_MembershipID": 10, "kf_PersonID": 10, "kf_OrganisationID": 10 },192 { "kp_MembershipID": 11, "kf_PersonID": 11, "kf_OrganisationID": 11 },193 { "kp_MembershipID": 12, "kf_PersonID": 12, "kf_OrganisationID": 12 },194 { "kp_MembershipID": 13, "kf_PersonID": 13, "kf_OrganisationID": 13 },195 { "kp_MembershipID": 14, "kf_PersonID": 14, "kf_OrganisationID": 14 },196 { "kp_MembershipID": 15, "kf_PersonID": 15, "kf_OrganisationID": 15 },197 { "kp_MembershipID": 16, "kf_PersonID": 16, "kf_OrganisationID": 16 },198 { "kp_MembershipID": 17, "kf_PersonID": 17, "kf_OrganisationID": 17 },199 { "kp_MembershipID": 18, "kf_PersonID": 18, "kf_OrganisationID": 18 },200 { "kp_MembershipID": 19, "kf_PersonID": 19, "kf_OrganisationID": 19 },201 { "kp_MembershipID": 20, "kf_PersonID": 20, "kf_OrganisationID": 20 },202 { "kp_MembershipID": 21, "kf_PersonID": 21, "kf_OrganisationID": 21 },203 { "kp_MembershipID": 22, "kf_PersonID": 22, "kf_OrganisationID": 22 },204 { "kp_MembershipID": 23, "kf_PersonID": 23, "kf_OrganisationID": 23 },205 { "kp_MembershipID": 24, "kf_PersonID": 24, "kf_OrganisationID": 24 },206 { "kp_MembershipID": 25, "kf_PersonID": 25, "kf_OrganisationID": 25 },207 { "kp_MembershipID": 26, "kf_PersonID": 26, "kf_OrganisationID": 26 }208 ]209 };210 return this.delayedSuccess(response);211 }212 ...
input.js
Source: input.js
1 /*!2 * è¾å
¥æ§å¶ç»ä»¶3 */4define( function ( require, exports, module ) {5 var kity = require( "kity" ),6 kfUtils = require( "base/utils" ),7 InputFilter = require( "control/input-filter" ),8 KEY_CODE = {9 LEFT: 37,10 RIGHT: 39,11 DELETE: 8,12 // è¾å
¥æ³ç¹æ®å¤ç13 INPUT: 22914 };15 return kity.createClass( "InputComponent", {16 constructor: function ( parentComponent, kfEditor ) {17 this.parentComponent = parentComponent;18 this.kfEditor = kfEditor;19 this.inputBox = this.createInputBox();20 this.initServices();21 this.initCommands();22 this.initEvent();23 },24 initServices: function () {25 this.kfEditor.registerService( "control.update.input", this, {26 updateInput: this.updateInput27 } );28 this.kfEditor.registerService( "control.insert.string", this, {29 insertStr: this.insertStr30 } );31 },32 initCommands: function () {33 this.kfEditor.registerCommand( "focus", this, this.focus );34 },35 createInputBox: function () {36 var editorContainer = this.kfEditor.getContainer(),37 box = this.kfEditor.getDocument().createElement( "input" );38 box.className = "kf-editor-input-box";39 box.type = "text";40 // focusæ¯å¦å¯ä¿¡41 box.isTrusted = false;42 editorContainer.appendChild( box );43 return box;44 },45 focus: function () {46 var rootInfo = null;47 this.inputBox.focus();48 // å¦æå½åä¸å
å«å
æ ä¿¡æ¯ï¼ åæå¨è®¾ç½®å
æ ä¿¡æ¯ï¼ 以使å¾å½åæ ¹èç¹è¢«å
¨éä¸49 if ( !this.kfEditor.requestService( "syntax.has.cursor.info" ) ) {50 rootInfo = this.kfEditor.requestService( "syntax.get.root.group.info" );51 this.kfEditor.requestService( "syntax.update.record.cursor", {52 groupId: rootInfo.id,53 startOffset: 0,54 endOffset: rootInfo.content.length55 } );56 this.kfEditor.requestService( "control.update.input" );57 }58 this.kfEditor.requestService( "control.reselect" );59 },60 setUntrusted: function () {61 this.inputBox.isTrusted = false;62 },63 setTrusted: function () {64 this.inputBox.isTrusted = true;65 },66 updateInput: function () {67 var latexInfo = this.kfEditor.requestService( "syntax.serialization" );68 this.setUntrusted();69 this.inputBox.value = latexInfo.str;70 this.inputBox.selectionStart = latexInfo.startOffset;71 this.inputBox.selectionEnd = latexInfo.endOffset;72 this.inputBox.focus();73 this.setTrusted();74 },75 insertStr: function ( str ) {76 var latexInfo = this.kfEditor.requestService( "syntax.serialization" ),77 originString = latexInfo.str;78 // æ¼æ¥latexå符串79 originString = originString.substring( 0, latexInfo.startOffset ) + " " + str + " " + originString.substring( latexInfo.endOffset );80 this.restruct( originString );81 this.updateInput();82 this.kfEditor.requestService( "ui.update.canvas.view" );83 },84 initEvent: function () {85 var _self = this;86 kfUtils.addEvent( this.inputBox, "keydown", function ( e ) {87 var isControl = false;88 if ( e.ctrlKey ) {89 // å¤çç¨æ·æ§å¶è¡ä¸º90 _self.processUserCtrl( e );91 return;92 }93 switch ( e.keyCode ) {94 case KEY_CODE.INPUT:95 return;96 case KEY_CODE.LEFT:97 e.preventDefault();98 _self.leftMove();99 isControl = true;100 break;101 case KEY_CODE.RIGHT:102 e.preventDefault();103 _self.rightMove();104 isControl = true;105 break;106 case KEY_CODE.DELETE:107 e.preventDefault();108 _self.delete();109 isControl = true;110 break;111 }112 if ( isControl ) {113 _self.kfEditor.requestService( "ui.update.canvas.view" );114 }115 if ( !_self.pretreatmentInput( e ) ) {116 e.preventDefault();117 }118 } );119 // ç¨æ·è¾å
¥120 kfUtils.addEvent( this.inputBox, "input", function ( e ) {121 _self.processingInput();122 } );123 // å
æ æ¾éæ§å¶124 kfUtils.addEvent( this.inputBox, "blur", function ( e ) {125 _self.kfEditor.requestService( "ui.toolbar.disable" );126 _self.kfEditor.requestService( "ui.toolbar.close" );127 _self.kfEditor.requestService( "control.cursor.hide" );128 _self.kfEditor.requestService( "render.clear.select" );129 } );130 kfUtils.addEvent( this.inputBox, "focus", function ( e ) {131 _self.kfEditor.requestService( "ui.toolbar.enable" );132 if ( this.isTrusted ) {133 _self.kfEditor.requestService( "control.reselect" );134 }135 } );136 // ç²è´´è¿æ»¤137 kfUtils.addEvent( this.inputBox, "paste", function ( e ) {138 e.preventDefault();139 } );140 },141 hasRootplaceholder: function () {142 return this.kfEditor.requestService( "syntax.has.root.placeholder" );143 },144 leftMove: function () {145 // å½åå¤äº"æ ¹å ä½ç¬¦"ä¸ï¼ åä¸å
许move146 if ( this.hasRootplaceholder() ) {147 return;148 }149 this.kfEditor.requestService( "syntax.cursor.move.left" );150 this.update();151 },152 rightMove: function () {153 if ( this.hasRootplaceholder() ) {154 return;155 }156 this.kfEditor.requestService( "syntax.cursor.move.right" );157 this.update();158 },159 delete: function () {160 var isNeedRedraw = null;161 // å½åå¤äº"æ ¹å ä½ç¬¦"ä¸ï¼ä¸å
许å é¤æä½162 if ( this.hasRootplaceholder() ) {163 return;164 }165 // è¿åæ¯å¦ä¿®è¦éç»166 isNeedRedraw = this.kfEditor.requestService( "syntax.delete.group" );167 if ( isNeedRedraw ) {168 this.updateInput();169 this.processingInput();170 } else {171 this.updateInput();172 this.kfEditor.requestService( "control.reselect" );173 }174 },175 processUserCtrl: function ( e ) {176 e.preventDefault();177 switch ( e.keyCode ) {178 // ctrl + A179 case 65:180 this.kfEditor.requestService( "control.select.all" );181 break;182 // ctrl + S183 case 83:184 this.kfEditor.requestService( "print.image" );185 break;186 }187 },188 // è¾å
¥åçé¢å¤çï¼ æ§è¡è¾å
¥è¿æ»¤189 pretreatmentInput: function ( evt ) {190 var keyCode = this.getKeyCode( evt ),191 replaceStr = InputFilter.getReplaceString( keyCode );192 if ( replaceStr === null ) {193 return true;194 }195 this.insertStr( replaceStr );196 return false;197 },198 getKeyCode: function ( e ) {199 return ( e.shiftKey ? "s+" : "" ) + e.keyCode;200 },201 processingInput: function () {202 this.restruct( this.inputBox.value );203 this.kfEditor.requestService( "ui.update.canvas.view" );204 },205 // æ ¹æ®ç»å®çå符串éæ°è¿è¡æé å
¬å¼206 restruct: function ( latexStr ) {207 this.kfEditor.requestService( "render.draw", latexStr );208 this.kfEditor.requestService( "control.reselect" );209 },210 update: function () {211 // æ´æ°è¾å
¥æ¡212 this.updateInput();213 this.kfEditor.requestService( "control.reselect" );214 }215 } );...
location.js
Source: location.js
1/*!2 * å
æ å®ä½ç»ä»¶3 */4define( function ( require, exports, module ) {5 var kity = require( "kity" );6 return kity.createClass( "LocationComponent", {7 constructor: function ( parentComponent, kfEditor ) {8 this.parentComponent = parentComponent;9 this.kfEditor = kfEditor;10 // å建å
æ 11 this.paper = this.getPaper();12 this.cursorShape = this.createCursor();13 this.initServices();14 this.initEvent();15 },16 getPaper: function () {17 return this.kfEditor.requestService( "render.get.paper" );18 },19 initServices: function () {20 // éå®ä½å
æ 21 this.kfEditor.registerService( "control.cursor.relocation", this, {22 relocationCursor: this.updateCursor23 } );24 // æ¸
é¤å
æ 25 this.kfEditor.registerService( "control.cursor.hide", this, {26 hideCursor: this.hideCursor27 } );28 this.kfEditor.registerService( "control.reselect", this, {29 reselect: this.reselect30 } );31 this.kfEditor.registerService( "control.get.cursor.location", this, {32 getCursorLocation: this.getCursorLocation33 } );34 },35 createCursor: function () {36 var cursorShape = new kity.Rect( 1, 0, 0, 0 ).fill( "black" );37 cursorShape.setAttr( "style", "display: none" );38 this.paper.addShape( cursorShape );39 return cursorShape;40 },41 // å
æ å®ä½çå¬42 initEvent: function () {43 var eventServiceObject = this.kfEditor.request( "ui.canvas.container.event" ),44 _self = this;45 eventServiceObject.on( "mousedown", function ( e ) {46 e.preventDefault();47 _self.updateCursorInfo( e );48 _self.kfEditor.requestService( "control.update.input" );49 _self.reselect();50 } );51 },52 updateCursorInfo: function ( evt ) {53 var wrapNode = null,54 groupInfo = null,55 index = -1;56 // ææ ¹å ä½ç¬¦åå¨ï¼ ææå®ä½å°å®ä½å°æ ¹å ä½ç¬¦å
é¨57 if ( this.kfEditor.requestService( "syntax.has.root.placeholder" ) ) {58 this.kfEditor.requestService( "syntax.update.record.cursor", {59 groupId: this.kfEditor.requestService( "syntax.get.root.group.info" ).id,60 startOffset: 0,61 endOffset: 162 } );63 return false;64 }65 wrapNode = this.kfEditor.requestService( "position.get.wrap", evt.target );66 // å ä½ç¬¦å¤ç, éä¸è¯¥å ä½ç¬¦67 if ( wrapNode && this.kfEditor.requestService( "syntax.is.placeholder.node", wrapNode.id ) ) {68 groupInfo = this.kfEditor.requestService( "position.get.group.info", wrapNode );69 this.kfEditor.requestService( "syntax.update.record.cursor", groupInfo.group.id, groupInfo.index, groupInfo.index + 1 );70 return;71 }72 groupInfo = this.kfEditor.requestService( "position.get.group", evt.target );73 if ( groupInfo === null ) {74 groupInfo = this.kfEditor.requestService( "syntax.get.root.group.info" );75 }76 index = this.getIndex( evt.clientX, groupInfo );77 this.kfEditor.requestService( "syntax.update.record.cursor", groupInfo.id, index );78 },79 hideCursor: function () {80 this.cursorShape.setAttr( "style", "display: none" );81 },82 // æ ¹æ®å½åçå
æ ä¿¡æ¯ï¼ 对éåºåå
æ è¿è¡æ´æ°83 reselect: function () {84 var cursorInfo = this.kfEditor.requestService( "syntax.get.record.cursor" ),85 groupInfo = null;86 this.hideCursor();87 // æ ¹èç¹åç¬å¤ç88 if ( this.kfEditor.requestService( "syntax.is.select.placeholder" ) ) {89 groupInfo = this.kfEditor.requestService( "syntax.get.group.content", cursorInfo.groupId );90 this.kfEditor.requestService( "render.select.group", groupInfo.content[ cursorInfo.startOffset ].id );91 return;92 }93 if ( cursorInfo.startOffset === cursorInfo.endOffset ) {94 // æ´æ°å
æ ä½ç½®95 this.updateCursor();96 // 请æ±èæ¯çè²97 this.kfEditor.requestService( "render.tint.current.cursor" );98 } else {99 this.kfEditor.requestService( "render.select.current.cursor" );100 }101 },102 updateCursor: function () {103 var cursorInfo = this.kfEditor.requestService( "syntax.get.record.cursor" );104 if ( cursorInfo.startOffset !== cursorInfo.endOffset ) {105 this.hideCursor();106 return;107 }108 var groupInfo = this.kfEditor.requestService( "syntax.get.group.content", cursorInfo.groupId ),109 isBefore = cursorInfo.endOffset === 0,110 index = isBefore ? 0 : cursorInfo.endOffset - 1,111 focusChild = groupInfo.content[ index ],112 paperContainerRect = getRect( this.paper.container.node ),113 cursorOffset = 0,114 focusChildRect = getRect( focusChild ),115 cursorTransform = this.cursorShape.getTransform( this.cursorShape ),116 canvasZoom = this.kfEditor.requestService( "render.get.canvas.zoom" ),117 formulaZoom = this.paper.getZoom();118 this.cursorShape.setHeight( focusChildRect.height / canvasZoom / formulaZoom );119 // 计ç®å
æ å移ä½ç½®120 cursorOffset = isBefore ? ( focusChildRect.left - 2 ) : ( focusChildRect.left + focusChildRect.width - 2 );121 cursorOffset -= paperContainerRect.left;122 // å®ä½å
æ 123 cursorTransform.m.e = Math.floor( cursorOffset / canvasZoom / formulaZoom ) + 0.5 ;124 cursorTransform.m.f = ( focusChildRect.top - paperContainerRect.top ) / canvasZoom / formulaZoom;125 this.cursorShape.setMatrix( cursorTransform );126 this.cursorShape.setAttr( "style", "display: block" );127 },128 getCursorLocation: function () {129 var rect = this.cursorShape.getRenderBox( "paper" );130 return {131 x: rect.x,132 y: rect.y133 };134 },135 getIndex: function ( distance, groupInfo ) {136 var index = -1,137 children = groupInfo.content,138 boundingRect = null;139 for ( var i = children.length - 1, child = null; i >= 0; i-- ) {140 index = i;141 child = children[ i ];142 boundingRect = getRect( child );143 if ( boundingRect.left < distance ) {144 if ( boundingRect.left + boundingRect.width / 2 < distance ) {145 index += 1;146 }147 break;148 }149 }150 return index;151 }152 } );153 function getRect ( node ) {154 return node.getBoundingClientRect();155 }...
caseFirst.js
Source: caseFirst.js
1// |reftest| skip-if(!this.hasOwnProperty("Intl"))2/* This Source Code Form is subject to the terms of the Mozilla Public3 * License, v. 2.0. If a copy of the MPL was not distributed with this4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */5// Locales which use caseFirst=off for the standard (sort) collation type.6const defaultLocales = Intl.Collator.supportedLocalesOf(["en", "de", "es", "sv", "ar", "zh", "ja"]);7// Locales which use caseFirst=upper for the standard (sort) collation type.8const upperFirstLocales = Intl.Collator.supportedLocalesOf(["cu", "da", "mt"]);9// Default collation for zh (pinyin) reorders "á" before "a" at secondary strength level.10const accentReordered = ["zh"];11const allLocales = [...defaultLocales, ...upperFirstLocales];12// Check default "caseFirst" option is resolved correctly.13for (let locale of defaultLocales) {14 let col = new Intl.Collator(locale, {usage: "sort"});15 assertEq(col.resolvedOptions().caseFirst, "false");16}17for (let locale of upperFirstLocales) {18 let col = new Intl.Collator(locale, {usage: "sort"});19 assertEq(col.resolvedOptions().caseFirst, "upper");20}21for (let locale of allLocales) {22 let col = new Intl.Collator(locale, {usage: "search"});23 assertEq(col.resolvedOptions().caseFirst, "false");24}25const collOptions = {usage: "sort"};26const primary = {sensitivity: "base"};27const secondary = {sensitivity: "accent"};28const tertiary = {sensitivity: "variant"};29const caseLevel = {sensitivity: "case"};30const strengths = [primary, secondary, tertiary, caseLevel];31// "A" is sorted after "a" when caseFirst=off is the default and strength is tertiary.32for (let locale of defaultLocales) {33 let col = new Intl.Collator(locale, Object.assign({}, collOptions, tertiary));34 assertEq(col.compare("A", "a"), 1);35 assertEq(col.compare("a", "A"), -1);36}37for (let locale of defaultLocales.filter(loc => !accentReordered.includes(loc))) {38 let col = new Intl.Collator(locale, Object.assign({}, collOptions, tertiary));39 assertEq(col.compare("A", "á"), -1);40 assertEq(col.compare("á", "A"), 1);41}42// Also sorted after "a" with the sensitivity=case collator.43for (let locale of defaultLocales) {44 let col = new Intl.Collator(locale, Object.assign({}, collOptions, caseLevel));45 assertEq(col.compare("A", "a"), 1);46 assertEq(col.compare("a", "A"), -1);47 assertEq(col.compare("A", "á"), 1);48 assertEq(col.compare("á", "A"), -1);49}50// "A" is sorted before "a" when caseFirst=upper is the default and strength is tertiary.51for (let locale of upperFirstLocales) {52 let col = new Intl.Collator(locale, Object.assign({}, collOptions, tertiary));53 assertEq(col.compare("A", "a"), -1);54 assertEq(col.compare("a", "A"), 1);55 assertEq(col.compare("A", "á"), -1);56 assertEq(col.compare("á", "A"), 1);57}58// Also sorted before "a" with the sensitivity=case collator.59for (let locale of upperFirstLocales) {60 let col = new Intl.Collator(locale, Object.assign({}, collOptions, caseLevel));61 assertEq(col.compare("A", "a"), -1);62 assertEq(col.compare("a", "A"), 1);63 assertEq(col.compare("A", "á"), -1);64 assertEq(col.compare("á", "A"), 1);65}66// caseFirst=upper doesn't change the sort order when strength is below tertiary.67for (let locale of allLocales) {68 let col = new Intl.Collator(locale, Object.assign({}, collOptions, secondary));69 assertEq(col.compare("A", "a"), 0);70 assertEq(col.compare("a", "A"), 0);71}72for (let locale of allLocales.filter(loc => !accentReordered.includes(loc))) {73 let col = new Intl.Collator(locale, Object.assign({}, collOptions, secondary));74 assertEq(col.compare("A", "á"), -1);75 assertEq(col.compare("á", "A"), 1);76}77for (let locale of allLocales) {78 let col = new Intl.Collator(locale, Object.assign({}, collOptions, primary));79 assertEq(col.compare("A", "a"), 0);80 assertEq(col.compare("a", "A"), 0);81 assertEq(col.compare("A", "á"), 0);82 assertEq(col.compare("á", "A"), 0);83}84// caseFirst=upper doesn't change the sort order when there's a primary difference.85for (let locale of allLocales) {86 for (let strength of strengths) {87 let col = new Intl.Collator(locale, Object.assign({}, collOptions, strength));88 assertEq(col.compare("A", "b"), -1);89 assertEq(col.compare("a", "B"), -1);90 }91}92// caseFirst set through Unicode extension tag.93for (let locale of allLocales) {94 let colKfFalse = new Intl.Collator(locale + "-u-kf-false", {});95 let colKfLower = new Intl.Collator(locale + "-u-kf-lower", {});96 let colKfUpper = new Intl.Collator(locale + "-u-kf-upper", {});97 assertEq(colKfFalse.resolvedOptions().caseFirst, "false");98 assertEq(colKfFalse.compare("A", "a"), 1);99 assertEq(colKfFalse.compare("a", "A"), -1);100 assertEq(colKfLower.resolvedOptions().caseFirst, "lower");101 assertEq(colKfLower.compare("A", "a"), 1);102 assertEq(colKfLower.compare("a", "A"), -1);103 assertEq(colKfUpper.resolvedOptions().caseFirst, "upper");104 assertEq(colKfUpper.compare("A", "a"), -1);105 assertEq(colKfUpper.compare("a", "A"), 1);106}107// caseFirst set through options value.108for (let locale of allLocales) {109 let colKfFalse = new Intl.Collator(locale, {caseFirst: "false"});110 let colKfLower = new Intl.Collator(locale, {caseFirst: "lower"});111 let colKfUpper = new Intl.Collator(locale, {caseFirst: "upper"});112 assertEq(colKfFalse.resolvedOptions().caseFirst, "false");113 assertEq(colKfFalse.compare("A", "a"), 1);114 assertEq(colKfFalse.compare("a", "A"), -1);115 assertEq(colKfLower.resolvedOptions().caseFirst, "lower");116 assertEq(colKfLower.compare("A", "a"), 1);117 assertEq(colKfLower.compare("a", "A"), -1);118 assertEq(colKfUpper.resolvedOptions().caseFirst, "upper");119 assertEq(colKfUpper.compare("A", "a"), -1);120 assertEq(colKfUpper.compare("a", "A"), 1);121}122// Test Unicode extension tag and options value, the latter should win.123for (let locale of allLocales) {124 let colKfFalse = new Intl.Collator(locale + "-u-kf-upper", {caseFirst: "false"});125 let colKfLower = new Intl.Collator(locale + "-u-kf-upper", {caseFirst: "lower"});126 let colKfUpper = new Intl.Collator(locale + "-u-kf-lower", {caseFirst: "upper"});127 assertEq(colKfFalse.resolvedOptions().caseFirst, "false");128 assertEq(colKfFalse.compare("A", "a"), 1);129 assertEq(colKfFalse.compare("a", "A"), -1);130 assertEq(colKfLower.resolvedOptions().caseFirst, "lower");131 assertEq(colKfLower.compare("A", "a"), 1);132 assertEq(colKfLower.compare("a", "A"), -1);133 assertEq(colKfUpper.resolvedOptions().caseFirst, "upper");134 assertEq(colKfUpper.compare("A", "a"), -1);135 assertEq(colKfUpper.compare("a", "A"), 1);136}137// Ensure languages are properly detected when additional subtags are present.138if (Intl.Collator.supportedLocalesOf("da").length !== 0) {139 assertEq(new Intl.Collator("da-DK", {usage: "sort"}).resolvedOptions().caseFirst, "upper");140 assertEq(new Intl.Collator("da-Latn-DK", {usage: "sort"}).resolvedOptions().caseFirst, "upper");141}142if (Intl.Collator.supportedLocalesOf("mt").length !== 0) {143 assertEq(new Intl.Collator("mt-MT", {usage: "sort"}).resolvedOptions().caseFirst, "upper");144 assertEq(new Intl.Collator("mt-Latn-MT", {usage: "sort"}).resolvedOptions().caseFirst, "upper");145}146if (typeof reportCompare === "function")...
jquery.modal.js
Source: jquery.modal.js
1/*2 A simple jQuery kfModal (http://github.com/kylefox/jquery-kfModal)3 Version 0.6.04*/5(function($) {6 var current = null;7 $.kfModal = function(el, options) {8 $.kfModal.close(); // Close any open kfModals.9 var remove, target;10 this.$body = $('body');11 this.options = $.extend({}, $.kfModal.defaults, options);12 this.options.doFade = !isNaN(parseInt(this.options.fadeDuration, 10));13 if (el.is('a')) {14 target = el.attr('href');15 //Select element by id from href16 if (/^#/.test(target)) {17 this.$elm = $(target);18 if (this.$elm.length !== 1) return null;19 this.$body.append(this.$elm);20 this.open();21 //AJAX22 } else {23 this.$elm = $('<div>');24 this.$body.append(this.$elm);25 remove = function(event, kfModal) { kfModal.elm.remove(); };26 this.showSpinner();27 el.trigger($.kfModal.AJAX_SEND);28 $.get(target).done(function(html) {29 if (!current) return;30 el.trigger($.kfModal.AJAX_SUCCESS);31 current.$elm.empty().append(html).on($.kfModal.CLOSE, remove);32 current.hideSpinner();33 current.open();34 el.trigger($.kfModal.AJAX_COMPLETE);35 }).fail(function() {36 el.trigger($.kfModal.AJAX_FAIL);37 current.hideSpinner();38 el.trigger($.kfModal.AJAX_COMPLETE);39 });40 }41 } else {42 this.$elm = el;43 this.$body.append(this.$elm);44 this.open();45 }46 };47 $.kfModal.prototype = {48 constructor: $.kfModal,49 open: function() {50 var m = this;51 if(this.options.doFade) {52 this.block();53 setTimeout(function() {54 m.show();55 }, this.options.fadeDuration * this.options.fadeDelay);56 } else {57 this.block();58 this.show();59 }60 if (this.options.escapeClose) {61 $(document).on('keydown.kfModal', function(event) {62 if (event.which == 27) $.kfModal.close();63 });64 }65 if (this.options.clickClose) this.blocker.click(function(e){66 if (e.target==this)67 $.kfModal.close();68 });69 },70 close: function() {71 this.unblock();72 this.hide();73 $(document).off('keydown.kfModal');74 },75 block: function() {76 this.$elm.trigger($.kfModal.BEFORE_BLOCK, [this._ctx()]);77 this.blocker = $('<div class="jquery-kfModal blocker"></div>');78 this.$body.css('overflow','hidden');79 this.$body.append(this.blocker);80 if(this.options.doFade) {81 this.blocker.css('opacity',0).animate({opacity: 1}, this.options.fadeDuration);82 }83 this.$elm.trigger($.kfModal.BLOCK, [this._ctx()]);84 },85 unblock: function() {86 if(this.options.doFade) {87 var self=this;88 this.blocker.fadeOut(this.options.fadeDuration, function() {89 self.blocker.children().appendTo(self.$body);90 self.blocker.remove();91 self.$body.css('overflow','');92 });93 } else {94 this.blocker.children().appendTo(this.$body);95 this.blocker.remove();96 this.$body.css('overflow','');97 }98 },99 show: function() {100 this.$elm.trigger($.kfModal.BEFORE_OPEN, [this._ctx()]);101 if (this.options.showClose) {102 this.closeButton = $('<a href="#close-kfModal" rel="kfModal:close" class="close-kfModal ' + this.options.closeClass + '">' + this.options.closeText + '</a>');103 this.$elm.append(this.closeButton);104 }105 this.$elm.addClass(this.options.kfModalClass + ' current');106 this.$elm.appendTo(this.blocker);107 if(this.options.doFade) {108 this.$elm.css('opacity',0).animate({opacity: 1}, this.options.fadeDuration);109 } else {110 this.$elm.show();111 }112 this.$elm.trigger($.kfModal.OPEN, [this._ctx()]);113 },114 hide: function() {115 this.$elm.trigger($.kfModal.BEFORE_CLOSE, [this._ctx()]);116 if (this.closeButton) this.closeButton.remove();117 this.$elm.removeClass('current');118 var _this = this;119 if(this.options.doFade) {120 this.$elm.fadeOut(this.options.fadeDuration, function () {121 _this.$elm.trigger($.kfModal.AFTER_CLOSE, [_this._ctx()]);122 });123 } else {124 this.$elm.hide(0, function () {125 _this.$elm.trigger($.kfModal.AFTER_CLOSE, [_this._ctx()]);126 });127 }128 this.$elm.trigger($.kfModal.CLOSE, [this._ctx()]);129 },130 showSpinner: function() {131 if (!this.options.showSpinner) return;132 this.spinner = this.spinner || $('<div class="' + this.options.kfModalClass + '-spinner"></div>')133 .append(this.options.spinnerHtml);134 this.$body.append(this.spinner);135 this.spinner.show();136 },137 hideSpinner: function() {138 if (this.spinner) this.spinner.remove();139 },140 //Return context for custom events141 _ctx: function() {142 return { elm: this.$elm, blocker: this.blocker, options: this.options };143 }144 };145 $.kfModal.close = function(event) {146 if (!current) return;147 if (event) event.preventDefault();148 current.close();149 var that = current.$elm;150 current = null;151 return that;152 };153 // Returns if there currently is an active kfModal154 $.kfModal.isActive = function () {155 return current ? true : false;156 }157 $.kfModal.defaults = {158 escapeClose: true,159 clickClose: true,160 closeText: 'Close',161 closeClass: '',162 kfModalClass: "kfModal",163 spinnerHtml: null,164 showSpinner: true,165 showClose: true,166 fadeDuration: null, // Number of milliseconds the fade animation takes.167 fadeDelay: 1.0 // Point during the overlay's fade-in that the kfModal begins to fade in (.5 = 50%, 1.5 = 150%, etc.)168 };169 // Event constants170 $.kfModal.BEFORE_BLOCK = 'kfModal:before-block';171 $.kfModal.BLOCK = 'kfModal:block';172 $.kfModal.BEFORE_OPEN = 'kfModal:before-open';173 $.kfModal.OPEN = 'kfModal:open';174 $.kfModal.BEFORE_CLOSE = 'kfModal:before-close';175 $.kfModal.CLOSE = 'kfModal:close';176 $.kfModal.AFTER_CLOSE = 'kfModal:after-close';177 $.kfModal.AJAX_SEND = 'kfModal:ajax:send';178 $.kfModal.AJAX_SUCCESS = 'kfModal:ajax:success';179 $.kfModal.AJAX_FAIL = 'kfModal:ajax:fail';180 $.kfModal.AJAX_COMPLETE = 'kfModal:ajax:complete';181 $.fn.kfModal = function(options){182 if (this.length === 1) {183 current = new $.kfModal(this, options);184 }185 return this;186 };187 // Automatically bind links with rel="kfModal:close" to, well, close the kfModal.188 $(document).on('click.kfModal', 'a[rel="kfModal:close"]', $.kfModal.close);189 $(document).on('click.kfModal', 'a[rel="kfModal:open"]', function(event) {190 event.preventDefault();191 $(this).kfModal();192 });...
change_KF_value_expression.js
Source: change_KF_value_expression.js
1//ÐкÑпÑеÑн, коÑоÑÑй позволÑÐµÑ Ð¼ÐµÐ½ÑÑÑ Ð·Ð½Ð°Ñение одного кейÑÑейма, Ñ ÑоÑ
Ñанением кÑивÑÑ
анимаÑии. ÐÑавиÑÑ Ð¿ÐµÑвÑе две ÑÑÑоÑки2myKfNum = 3;//Ð½Ð¾Ð¼ÐµÑ ÐºÐµÐ¹ÑÑема3myKfNewValue = 180;//новое знаÑение Ð´Ð»Ñ ÑÑого кейÑÑейма4Array.prototype.linear = function(tMin,tMax,val1,val2)5{6 if(arguments.length<4)7 return this;8 for(var i=0;i<arguments.length;i++)9 if(!arguments[i] instanceof Array)10 return this;11 var newVal = [];12 for(var k=0;k<this.length;k++)13 if(tMin[k]<=tMax[k])14 newVal[k] = linear(this[k],tMin[k],tMax[k],val1[k],val2[k]);15 else16 newVal[k] = linear(this[k],tMin[k],tMax[k],val2[k],val1[k]);17 return newVal;18}19myKfOldValue = key(myKfNum).value//ÑÑаÑое знаÑение маÑкеÑа20myKfTime = key(myKfNum).time//вÑÐµÐ¼Ñ ÐºÐµÐ¹ÑÑейма21if(time <= myKfTime)//ÑÑаÑÑок до наÑего кейÑÑейма22 if(myKfNum == 1)//еÑли ÑÑо пеÑвÑй кейÑÑейм23 myKfNewValue;//не анимиÑÑем анимаÑÐ¸Ñ Ð´Ð¾ него (ÐµÑ Ð½ÐµÑ)24 else25 {26 prevKfTime = key(myKfNum - 1).time//вÑÐµÐ¼Ñ Ð¿ÑедÑдÑÑего маÑкеÑа27 prevKfValue = key(myKfNum - 1).value//знаÑение пÑедÑдÑÑего маÑкеÑа28 if(time >= prevKfTime)//еÑли Ð¼Ñ Ð² пÑомежÑÑке Ð¼ÐµÐ¶Ð´Ñ Ð½Ð°Ñим и пÑедÑдÑÑим кейÑÑеймами29 if(value instanceof Array)30 value.linear(prevKfValue,myKfOldValue,prevKfValue,myKfNewValue);//ÐÐÐÐЯ31 else32 if(prevKfValue < myKfOldValue)33 linear(value,prevKfValue,myKfOldValue,prevKfValue,myKfNewValue);//ÐÐÐÐЯ34 else35 linear(value,prevKfValue,myKfOldValue,myKfNewValue,prevKfValue);//ÐÐÐÐЯ36 else //еÑли Ð¼Ñ Ð´Ð¾ пÑомежÑÑка Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð½Ð¾Ð¹ анимаÑией37 value;//ниÑе не делаем38 }39else //УЧÐСТÐÐ ÐÐСÐÐ ÐÐШÐÐÐ ÐÐÐФРÐÐÐÐ40 if(myKfNum == numKeys)//еÑли ÑÑо поÑледний кейÑÑейм41 myKfNewValue;//не анимиÑÑем42 else43 {44 nextKfTime = key(myKfNum+1).time;////вÑÐµÐ¼Ñ ÑледÑÑÑего маÑкеÑа45 nextKfValue = key(myKfNum+1).value;//знаÑение ÑледÑÑÑего маÑкеÑа46 if(time<=nextKfTime)47 if(value instanceof Array)48 value.linear(myKfOldValue,nextKfValue,myKfNewValue,nextKfValue);//ÐÐÐÐЯ49 else50 {51 if(myKfOldValue < nextKfValue)52 linear(value,myKfOldValue,nextKfValue,myKfNewValue,nextKfValue);//ÐÐÐÐЯ53 else54 linear(value,myKfOldValue,nextKfValue,nextKfValue,myKfNewValue);//ÐÐÐÐЯ55 }56 else value;...
Using AI Code Generation
1const {chromium} = require('playwright');2(async () => {3 const browser = await chromium.launch({headless: false});4 const context = await browser.newContext();5 const page = await context.newPage();6 const element = await page.$('input[name="q"]');7 await element.type('playwright');8 await element.press('Enter');9 await browser.close();10})();
Using AI Code Generation
1const { test, expect } = require('@playwright/test');2test('basic test', async ({ page }) => {3 const title = page.locator('.navbar__inner .navbar__title');4 await expect(title).toHaveText('Playwright');5});6const { test, expect } = require('@playwright/test');7test('basic test', async ({ page }) => {8 const title = page.locator('.navbar__inner .navbar__title');9 await expect(title).toHaveText('Playwright');10});11 at ExecutionContext._evaluateInternal (C:\Users\test\Documents\Playwright\playwright\lib\server\chromium\chromium.js:568:19)12 at processTicksAndRejections (internal/process/task_queues.js:93:5)13 at async ExecutionContext.evaluate (C:\Users\test\Documents\Playwright\playwright\lib\server\chromium\chromium.js:556:16)14 at async Locator._createHandle (C:\Users\test\Documents\Playwright\playwright\lib\server\locator.js:147:29)15 at async Locator._createHandle (C:\Users\test\Documents\Playwright\playwright\lib\server\locator.js:139:16)16 at async Locator._createHandle (C:\Users\test\Documents\Playwright\playwright\lib\server\locator.js:139:16)17 at async Locator._createHandle (C:\Users\test\Documents\Playwright\playwright\lib\server\locator.js:139:16)18 at async Locator._createHandle (C:\Users\test\Documents\Playwright\playwright\lib\server\locator.js:139:16)19 at async Locator._createHandle (C:\Users\test\Documents\Playwright\playwright\lib\server\locator.js:139:16)20 at async Locator._createHandle (C
Using AI Code Generation
1const { Kf } = require('@playwright/test');2const { test, expect } = require('@playwright/test');3test('my test', async ({ page }) => {4 await Kf(page).click('text=Get Started');5 await Kf(page).click('text=Docs');6 await Kf(page).click('text=API')
Using AI Code Generation
1const { test, expect } = require('@playwright/test');2const { Kf } = require('kf-playwright');3const { Page } = require('@playwright/test/types/page');4const { ElementHandle } = require('@playwright/test/types/elementHandler');5test('Kf test', async ({ page }) => {6 const input = await Kf.$('input', page);7 await input.type('Kf');8 await page.keyboard.press('Enter');9 const result = await Kf.$('h3', page);10 await expect(result).toHaveText('Kf');11});12You can find the full API documentation [here](
Using AI Code Generation
1const { Kf } = require('playwright');2const { test } = require('@playwright/test');3test('test', async ({ page }) => {4 const kf = new Kf(page);5 await kf.click('button');6});7const { Kf } = require('playwright');8const { test } = require('@playwright/test');9test('test', async ({ page }) => {10 const kf = new Kf(page);11 await kf.click('button');12});13const { Kf } = require('playwright');14const { Kf } = require('playwright');15const { Kf } = require('playwright');16const { Kf } = require('playwright');
Using AI Code Generation
1const { test, expect } = require('@playwright/test');2const { Kf } = require('./kf');3test('test', async ({ page }) => {4 const title = await Kf(page).title();5 expect(title).toBe('Playwright');6});7const { chromium } = require('playwright');8const { Kf } = require('./kf');9module.exports = {10 Kf: async (page) => {11 const browser = await chromium.launch();12 const context = await browser.newContext();13 const page = await context.newPage();14 return page;15 },16};17module.exports = {18 }19}20const { Kf } = require('./kf');21test('test', async ({ page }) => {22 const title = await Kf(page).title();23 expect(title).toBe('Playwright');24});25I’m still a little confused about how the kf.js file is being used. I would have thought that I would be able to use the Kf method in the test.js file without having to export it from the kf.js file. I would have thought that the kf.js file would be automatically imported into the test.js file. Is that not the case?
Using AI Code Generation
1const { test, expect } = require('@playwright/test');2const { Kf } = require('kf-playwright-internal');3test.describe('Kf Playwright Internal', () => {4 let page;5 let kf;6 test.beforeAll(async ({ browser }) => {7 page = await browser.newPage();8 kf = new Kf(page);9 });10 test('Kf Playwright Internal', async () => {11 await kf.click('a');12 const text = await kf.getText('h1');13 expect(text).toBe('Example Domain');14 });15});16await kf.click('a');17const text = await kf.getText('h1');18const textArray = await kf.getTextArray('h1');19const href = await kf.getAttribute('a', 'href');20const hrefArray = await kf.getAttributeArray('a', 'href');21await kf.type('input[type="text"]', 'Hello');22await kf.press('input[type="text"]', 'Enter');23await kf.waitForNavigation();24await kf.waitForSelector('a');25await kf.waitForText('a', 'Example Domain');26await kf.waitForTextArray('a', ['Example Domain', 'Example Domain 2']);
Using AI Code Generation
1const { test, expect } = require('@playwright/test');2test('Test 1', async ({ page }) => {3 let element = await page.$('text=Get Started');4 await element.kf.click();5 await page.waitForLoadState();6});7import { test, expect } from '@playwright/test';8test('Test 2', async ({ page }) => {9 let element = await page.$('text=Get Started');10 await element.kf.click();11 await page.waitForLoadState();12});
Using AI Code Generation
1const { Kf } = require('@katalon/playwright');2const { test } = require('@playwright/test');3test('test', async ({ page }) => {4 await Kf.playwright.internal.page(page).type('input[name="q"]', 'Hello World!');5 await Kf.playwright.internal.page(page).click('input[value="Google Search"]');6});7const { Kf } = require('@katalon/playwright');8const { test } = require('@playwright/test');9test('test', async ({ page }) => {10 await Kf.playwright.internal.page(page).type('input[name="q"]', 'Hello World!');11 await Kf.playwright.internal.page(page).click('input[value="Google Search"]');12});13const { Kf } = require('@katalon/playwright');14const { test } = require('@playwright/test');15test('test', async ({ page }) => {16 await Kf.playwright.internal.page(page).type('input[name="q"]', 'Hello World!');17 await Kf.playwright.internal.page(page).click('input[value="Google Search"]');18});19const { Kf } = require('@katalon/playwright');20const { test } = require('@playwright/test');21test('test', async ({ page }) => {22 await Kf.playwright.internal.page(page).type('input[name="q"]', 'Hello World!');23 await Kf.playwright.internal.page(page).click('input[value="Google Search"]');24});25const { Kf } = require('@katalon/playwright');26const { test } = require('@playwright/test');27test('test', async ({ page }) => {
Jest + Playwright - Test callbacks of event-based DOM library
firefox browser does not start in playwright
Is it possible to get the selector from a locator object in playwright?
How to run a list of test suites in a single file concurrently in jest?
Running Playwright in Azure Function
firefox browser does not start in playwright
This question is quite close to a "need more focus" question. But let's try to give it some focus:
Does Playwright has access to the cPicker object on the page? Does it has access to the window object?
Yes, you can access both cPicker and the window object inside an evaluate call.
Should I trigger the events from the HTML file itself, and in the callbacks, print in the DOM the result, in some dummy-element, and then infer from that dummy element text that the callbacks fired?
Exactly, or you can assign values to a javascript variable:
const cPicker = new ColorPicker({
onClickOutside(e){
},
onInput(color){
window['color'] = color;
},
onChange(color){
window['result'] = color;
}
})
And then
it('Should call all callbacks with correct arguments', async() => {
await page.goto(`http://localhost:5000/tests/visual/basic.html`, {waitUntil:'load'})
// Wait until the next frame
await page.evaluate(() => new Promise(requestAnimationFrame))
// Act
// Assert
const result = await page.evaluate(() => window['color']);
// Check the value
})
Check out the latest blogs from LambdaTest on this topic:
Native apps are developed specifically for one platform. Hence they are fast and deliver superior performance. They can be downloaded from various app stores and are not accessible through browsers.
One of the essential parts when performing automated UI testing, whether using Selenium or another framework, is identifying the correct web elements the tests will interact with. However, if the web elements are not located correctly, you might get NoSuchElementException in Selenium. This would cause a false negative result because we won’t get to the actual functionality check. Instead, our test will fail simply because it failed to interact with the correct element.
Smartphones have changed the way humans interact with technology. Be it travel, fitness, lifestyle, video games, or even services, it’s all just a few touches away (quite literally so). We only need to look at the growing throngs of smartphone or tablet users vs. desktop users to grasp this reality.
As part of one of my consulting efforts, I worked with a mid-sized company that was looking to move toward a more agile manner of developing software. As with any shift in work style, there is some bewilderment and, for some, considerable anxiety. People are being challenged to leave their comfort zones and embrace a continuously changing, dynamic working environment. And, dare I say it, testing may be the most ‘disturbed’ of the software roles in agile development.
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!