From 5a2f8819e31619b4bcdaa2c9fc5c81424c12636d Mon Sep 17 00:00:00 2001 From: Justin Georgi Date: Fri, 8 Nov 2024 15:27:14 +0000 Subject: [PATCH] Use ooui for edit action buttons (#32) This PR converts the original basic preview edit actions buttons to MediaWiki's ooui to better match the style of the edit page. Reviewed-on: https://gitea.azgeorgis.net/jgeorgi/GlModelViewer/pulls/32 --- extension.json | 12 +++++++ includes/GlModelHooks.php | 49 ++++++---------------------- modules/glmv-prev.js | 68 +++++++++++++++++++++++++++++++++++++++ modules/glmv.js | 1 + 4 files changed, 91 insertions(+), 39 deletions(-) create mode 100644 modules/glmv-prev.js diff --git a/extension.json b/extension.json index 5cb1f38..f159954 100644 --- a/extension.json +++ b/extension.json @@ -47,6 +47,18 @@ "packageFiles": [ "glmv-upl.js" ] + }, + "ext.glmv.prev": { + "dependencies": [ + "oojs-ui-core", + "oojs-ui-toolbars", + "oojs-ui.styles.icons-interactions", + "oojs-ui.styles.icons-media", + "oojs-ui.styles.icons-location" + ], + "packageFiles": [ + "glmv-prev.js" + ] } } } \ No newline at end of file diff --git a/includes/GlModelHooks.php b/includes/GlModelHooks.php index 140158e..0af73f2 100644 --- a/includes/GlModelHooks.php +++ b/includes/GlModelHooks.php @@ -44,11 +44,15 @@ class GlModelHooks { public static function onBeforePageDisplay($out) { preg_match('/(getHTML(),$findGltf); if ($findGltf[0]) { - $mvScriptAttr = array( - 'src' => 'https://ajax.googleapis.com/ajax/libs/model-viewer/3.5.0/model-viewer.min.js', - 'type' => 'module' + $out->addHeadItems( + Html::rawElement( + 'script', + array( + 'src' => 'https://ajax.googleapis.com/ajax/libs/model-viewer/3.5.0/model-viewer.min.js', + 'type' => 'module' + ) + ) ); - $out->addHeadItems(Html::rawElement('script',$mvScriptAttr)); $out->addModules('ext.glmv'); } } @@ -72,45 +76,12 @@ class GlModelHooks { } $out = $editor->getContext()->getOutput(); - $out->addModules('ext.glmv'); + $out->addModules('ext.glmv.prev'); $mvTransform = $file->transform([ 'width' => '800', 'hight' => '600', 'view' => 'test']); $previewViewer = $mvTransform->toHtml([ 'preview' => true]); - $addButtonAttr = array( - 'class' => 'preview-button AddHotspot', - 'onclick' => 'readyAddHotspot()' - ); - - $readButtonAttr = array( - 'class' => 'preview-button ReadHotspots', - 'onclick' => 'readMetadata()' - ); - - $delButtonAttr = array( - 'class' => 'preview-button DeleteHotspots', - 'onclick' => 'readyDelHotspot()' - ); - - $dldButtonAttr = array( - 'class' => 'preview-button MakeImage', - 'onclick' => 'downloadImage("' . $title . '")' - ); - - $orbButtonAttr = array( - 'class' => 'preview-button SetOrbit', - 'onclick' => 'writeCameraOrbit()' - ); - - $addHsButton = array( - Html::rawElement('button',$addButtonAttr,'Add a new hotspot'), - Html::rawElement('button',$readButtonAttr,'Update hotspots'), - Html::rawElement('button',$delButtonAttr,'Delete hotspot'), - Html::rawElement('button',$dldButtonAttr,'Download image'), - Html::rawElement('button',$orbButtonAttr,'Set start view') - ); - - $previewHTML = Html::rawElement('div',NULL,$previewViewer.implode($addHsButton)); + $previewHTML = Html::rawElement('div',NULL,$previewViewer); return false; } diff --git a/modules/glmv-prev.js b/modules/glmv-prev.js new file mode 100644 index 0000000..f833527 --- /dev/null +++ b/modules/glmv-prev.js @@ -0,0 +1,68 @@ +const addHS = new OO.ui.ButtonWidget({ + icon: 'mapPinAdd', + label: 'Add annotation', + invisibleLabel: true, + class: 'edit-button' +}) +addHS.on('click', readyAddHotspot) +addHS.setDisabled(true) +console.log(addHS) + +const updateHS = new OO.ui.ButtonWidget({ + icon: 'reload', + label: 'Update annotations', + invisibleLabel: true +}) +updateHS.on('click', readMetadata) +updateHS.setDisabled(true) + +const deleteHS = new OO.ui.ButtonWidget({ + icon: 'cancel', + label: 'Delete annotation', + invisibleLabel: true +}) +deleteHS.on('click', readyDelHotspot) +deleteHS.setDisabled(true) + +const hotspotButtons = new OO.ui.ButtonGroupWidget( { + items: [ addHS, updateHS, deleteHS ] +} ); +console.log(hotspotButtons) + +const downloadViewerImage = new OO.ui.ButtonWidget({ + icon: 'imageAdd', + label: 'Download current image', + invisibleLabel: true +}) +downloadViewerImage.on('click', () => { + downloadImage("TempTitle.glb") +}) +downloadViewerImage.setDisabled(true) + +const setView = new OO.ui.ButtonWidget({ + icon: 'camera', + label: 'Set Initial View', + invisibleLabel: true +}) +setView.on('click', writeCameraOrbit) +setView.setDisabled(true) + +const cameraButtons = new OO.ui.ButtonGroupWidget( { + items: [ downloadViewerImage, setView ] +} ); + +const modelMenu = new OO.ui.HorizontalLayout( { + items: [ + hotspotButtons, + cameraButtons + ], + id: 'edit-model-menu' +}); + +$('#wikiPreview').after(modelMenu.$element); + +enableMenu = function() { + modelMenu.items.forEach(group => { + group.items.forEach(el => el.setDisabled(false)) + }); +} \ No newline at end of file diff --git a/modules/glmv.js b/modules/glmv.js index 047cf52..9f65bb8 100644 --- a/modules/glmv.js +++ b/modules/glmv.js @@ -8,6 +8,7 @@ let deleteHotspot = null */ modelLoaded = function() { $('.awaiting-model').css('display', 'flex').removeClass('awaiting-model') + enableMenu() } /**