1
0
mirror of https://github.com/chinchang/web-maker.git synced 2025-04-29 23:18:00 +02:00

update split.js and fix shrink bugs. fixes

This commit is contained in:
Kushagra Gour 2019-07-17 18:47:01 +05:30
parent de54874d4f
commit a607b9c9e5
7 changed files with 89 additions and 28 deletions

6
package-lock.json generated

@ -25625,9 +25625,9 @@
}
},
"split.js": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/split.js/-/split.js-1.3.4.tgz",
"integrity": "sha1-63jiBpBCloQjZ1YwSqkl/LjsAAo="
"version": "1.5.11",
"resolved": "https://registry.npmjs.org/split.js/-/split.js-1.5.11.tgz",
"integrity": "sha512-ec0sAbWnaMGpNHWo1ZgIlF3Mx7GzSyaO0GlcEBZGIFZQwYPPkbDV6JRpDmpzIshVig7USREuEPudy0ygQaskXg=="
},
"sprintf-js": {
"version": "1.0.3",

@ -80,7 +80,7 @@
"preact-router": "^2.5.7",
"prettier": "^1.18.2",
"react-inspector": "^2.3.0",
"split.js": "1.3.4"
"split.js": "^1.5.11"
},
"jest": {
"verbose": true,

@ -6,7 +6,8 @@ import {
log,
writeFile,
getCompleteHtml,
handleModeRequirements
handleModeRequirements,
sanitizeSplitSizes
} from '../utils';
import { SplitPane } from './SplitPane.jsx';
import { trackEvent } from '../analytics';
@ -392,12 +393,18 @@ export default class ContentWrap extends Component {
resetSplitting() {
this.setState({
codeSplitSizes: this.getCodeSplitSizes(),
mainSplitSizes: this.getMainSplitSizesToApply()
codeSplitSizes: sanitizeSplitSizes(this.getCodeSplitSizes()),
mainSplitSizes: sanitizeSplitSizes(this.getMainSplitSizesToApply())
});
}
updateSplits() {
this.props.onSplitUpdate();
updateSplits(sizes) {
// HACK: This is weird thing happening. We call `onSplitUpdate` on parent. That calculates
// and sets sizes from the DOM on the currentItem. And then we read that size to update
// this component's state (codeSplitSizes and mainSPlitSizes).
// If we don't update, then some re-render will reset the pane sizes as ultimately the state
// variables here govern the split.
this.props.onSplitUpdate(sizes);
// Not using setState to avoid re-render
this.state.codeSplitSizes = this.props.currentItem.sizes;
this.state.mainSplitSizes = this.props.currentItem.mainSizes;
@ -427,7 +434,7 @@ export default class ContentWrap extends Component {
return [33.33, 33.33, 33.33];
}
mainSplitDragEndHandler() {
mainSplitDragEndHandler(sizes) {
if (this.props.prefs.refreshOnResize) {
// Running preview updation in next call stack, so that error there
// doesn't affect this dragend listener.
@ -435,7 +442,7 @@ export default class ContentWrap extends Component {
this.setPreviewContent(true);
}, 1);
}
this.updateSplits();
this.updateSplits(sizes);
}
mainSplitDragHandler() {
this.previewDimension.update({
@ -446,10 +453,10 @@ export default class ContentWrap extends Component {
codeSplitDragStart() {
document.body.classList.add('is-dragging');
}
codeSplitDragEnd() {
codeSplitDragEnd(sizes) {
this.updateCodeWrapCollapseStates();
document.body.classList.remove('is-dragging');
this.updateSplits();
this.updateSplits(sizes);
}
updateHtmlMode(value) {

@ -1,7 +1,12 @@
import { h, Component } from 'preact';
import CodeEditor from './CodeEditor';
import { modes, HtmlModes } from '../codeModes';
import { log, handleModeRequirements, BASE_PATH } from '../utils';
import {
log,
handleModeRequirements,
BASE_PATH,
sanitizeSplitSizes
} from '../utils';
import {
linearizeFiles,
@ -390,11 +395,11 @@ export default class ContentWrapFiles extends Component {
resetSplitting() {
this.setState({
mainSplitSizes: this.getMainSplitSizesToApply()
mainSplitSizes: sanitizeSplitSizes(this.getMainSplitSizesToApply())
});
}
updateSplits() {
this.props.onSplitUpdate();
updateSplits(sizes) {
this.props.onSplitUpdate(sizes);
// Not using setState to avoid re-render
this.state.mainSplitSizes = this.props.currentItem.mainSizes;
}
@ -416,7 +421,7 @@ export default class ContentWrapFiles extends Component {
return mainSplitSizes;
}
mainSplitDragEndHandler() {
mainSplitDragEndHandler(sizes) {
if (this.props.prefs.refreshOnResize) {
// Running preview updation in next call stack, so that error there
// doesn't affect this dragend listener.
@ -424,7 +429,7 @@ export default class ContentWrapFiles extends Component {
this.setPreviewContent(true);
}, 1);
}
this.updateSplits();
this.updateSplits(sizes);
}
mainSplitDragHandler() {
this.previewDimension.update({

@ -40,6 +40,10 @@ export class SplitPane extends Component {
/* eslint-disable new-cap */
this.splitInstance = Split(Array.from(this.parent.children), options);
if (this.parent.children.length >= 5) {
window.splitInstance = this.splitInstance;
}
/* eslint-enable new-cap */
if (this.props.onSplit) {

@ -21,7 +21,8 @@ import {
downloadFile,
getCompleteHtml,
getFilenameFromUrl,
prettify
prettify,
sanitizeSplitSizes
} from '../utils';
import {
linearizeFiles,
@ -755,7 +756,7 @@ export default class App extends Component {
sizes = [33.33, 33.33, 33.33];
} finally {
/* eslint-disable no-unsafe-finally */
return sizes;
return sanitizeSplitSizes(sizes);
/* eslint-enable no-unsafe-finally */
}
@ -791,7 +792,7 @@ export default class App extends Component {
`calc(50% - ${sidebarWidth / 2}px)`
];
}
return sizes;
return sanitizeSplitSizes(sizes);
}
const currentLayoutMode = this.state.currentLayoutMode;
@ -804,7 +805,7 @@ export default class App extends Component {
if (sizes.filter(s => s).length !== 2) {
sizes = [50, 50];
}
return sizes;
return sanitizeSplitSizes(sizes);
}
saveSetting(setting, value) {
const d = deferred();
@ -928,7 +929,9 @@ export default class App extends Component {
}
titleInputBlurHandler(e) {
this.state.currentItem.title = e.target.value;
this.setState({
currentItem: { ...this.state.currentItem, title: e.target.value }
});
if (this.state.currentItem.id) {
this.saveItem();
@ -1193,7 +1196,7 @@ export default class App extends Component {
// Item already exists
existingItemIds.push(item.id);
} else {
log('merging', item.id);
// log('merging', item.id);
toMergeItems[item.id] = item;
}
});
@ -1243,10 +1246,23 @@ export default class App extends Component {
this.closeAllOverlays();
}
splitUpdateHandler(mainSplitInstance, codeSplitInstance) {
splitUpdateHandler(sizes) {
const { currentItem } = this.state;
if (!sizes) {
currentItem.mainSizes = this.getMainPaneSizes();
currentItem.sizes = this.getCodePaneSizes();
return;
}
// Not using setState to avoid re-render
this.state.currentItem.sizes = this.getCodePaneSizes();
this.state.currentItem.mainSizes = this.getMainPaneSizes();
if (sizes.length === 3) {
if (currentItem.files) {
currentItem.mainSizes = sizes;
} else {
currentItem.sizes = sizes;
}
} else {
currentItem.mainSizes = sizes;
}
}
/**

@ -556,6 +556,35 @@ export function handleModeRequirements(mode) {
return d.promise;
}
export function sanitizeSplitSizes(sizes) {
// console.log('got', sizes);
let hasAllNumbers = !sizes.some(size => !Number(size));
if (hasAllNumbers) return sizes;
// Get just the perentage values from expressions like calc(93.34% - 3px)
const newSizes = sizes.map(size => {
if (typeof size.match !== 'function') return size;
const match = size.match(/([\d.]*)%/);
if (match) return parseInt(match[1], 10);
return size;
});
// console.log('percents ', newSizes);
// Do we still have any non-number?
hasAllNumbers = !newSizes.some(size => !Number(size));
// console.log('hasAllnumbers? ', hasAllNumbers);
// Make the sum 100
if (hasAllNumbers) {
const sum = newSizes.reduce((sum, val) => sum + val, 0);
// console.log('sum ', sum);
newSizes[newSizes.length - 1] += 100 - sum;
}
return newSizes;
}
if (window.IS_EXTENSION) {
document.body.classList.add('is-extension');
} else {